]> git.sur5r.net Git - openocd/commitdiff
mips32.c: fix IB and DB bits check for EJTAG v2.0
authorOleksij Rempel <linux@rempel-privat.de>
Tue, 21 Jan 2014 19:48:14 +0000 (20:48 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Tue, 19 Aug 2014 20:17:55 +0000 (20:17 +0000)
Change-Id: I4e28dddc1d5d9c2b923ae17beacdd7f73591b1d0
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
Reviewed-on: http://openocd.zylin.com/1931
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/target/mips32.c

index b05a56312721ff3df57d8186fe5eca3c37fd8402..795efddf033ac158edf4b5d59d119d6b75520793 100644 (file)
@@ -536,10 +536,15 @@ int mips32_configure_break_unit(struct target *target)
        if (retval != ERROR_OK)
                return retval;
 
-       /* EJTAG 2.0 does not specify EJTAG_DCR_IB and EJTAG_DCR_DB bits,
-        * assume IB and DB registers are always present. */
-       if (ejtag_info->ejtag_version == EJTAG_VERSION_20)
-               dcr |= EJTAG_DCR_IB | EJTAG_DCR_DB;
+       /* EJTAG 2.0 defines IB and DB bits in IMP instead of DCR.
+        * Since these DCR bits should be reserved on EJTAG 2.0, we can
+        * just remap them. */
+       if (ejtag_info->ejtag_version == EJTAG_VERSION_20) {
+               if (!(ejtag_info->impcode & EJTAG_V20_IMP_NOIB))
+                       dcr |= EJTAG_DCR_IB;
+               if (!(ejtag_info->impcode & EJTAG_V20_IMP_NODB))
+                       dcr |= EJTAG_DCR_DB;
+       }
 
        if (dcr & EJTAG_DCR_IB) {
                retval = mips32_configure_ibs(target);