The attached patch reduces ARM11 output noise(bogus errors & warnings)
when there is no IDCODE upon JTAG chain examine + evaluation.

-- 
Øyvind Harboe
Embedded software and hardware consulting services
http://www.zylin.com
### Eclipse Workspace Patch 1.0
#P openocd
Index: src/jtag/jtag.h
===================================================================
--- src/jtag/jtag.h     (revision 2625)
+++ src/jtag/jtag.h     (working copy)
@@ -144,7 +144,7 @@
 
 /* this is really: typedef jtag_tap_t */
 /* But - the typedef is done in "types.h" */
-/* due to "forward decloration reasons" */
+/* due to "forward declaration reasons" */
 struct jtag_tap_s
 {
        const char* chip;
@@ -161,6 +161,7 @@
        uint32_t ir_capture_mask;
        uint8_t* expected_mask; /**< Capture-IR expected mask */
        uint32_t idcode;
+       bool hasidcode; /* not all devices have idcode, we'll discover this 
during chain examination */
        /**< device identification code */
 
        /// Array of expected identification codes */
Index: src/jtag/core.c
===================================================================
--- src/jtag/core.c     (revision 2625)
+++ src/jtag/core.c     (working copy)
@@ -939,7 +939,7 @@
        /* If none of the expected ids matched, log an error */
        if (ii != tap->expected_ids_cnt)
        {
-               LOG_INFO("JTAG Tap/device matched");
+               LOG_DEBUG("JTAG Tap/device matched");
                return true;
        }
        jtag_examine_chain_display(LOG_LVL_ERROR, "got",
@@ -978,11 +978,13 @@
        for (unsigned bit_count = 0; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 
31;)
        {
                uint32_t idcode = buf_get_u32(idcode_buffer, bit_count, 32);
+               tap->hasidcode = true;
                if ((idcode & 1) == 0)
                {
                        /* LSB must not be 0, this indicates a device in bypass 
*/
                        LOG_WARNING("Tap/Device does not have IDCODE");
                        idcode = 0;
+                       tap->hasidcode = false;
 
                        bit_count += 1;
                }
@@ -1074,7 +1076,8 @@
                }
 
                val = buf_get_u32(ir_test, chain_pos, 2);
-               if (val != 0x1)
+               /* Only fail this check if we have IDCODE for this device */
+               if ((val != 0x1)&&(tap->hasidcode))
                {
                        char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
                        LOG_ERROR("Could not validate JTAG scan chain, IR 
mismatch, scan returned 0x%s. tap=%s pos=%d expected 0x1 got %0x", cbuf, 
jtag_tap_name(tap), chain_pos, val);
Index: TODO
===================================================================
--- TODO        (revision 2625)
+++ TODO        (working copy)
@@ -117,7 +117,10 @@
 - ARM923EJS:
   - reset run/halt/step is not robust; needs testing to map out problems.
 - ARM11 improvements (MB?)
-  - fix single stepping  (reported by ØH)
+  - fix single stepping  (reported by ØH). Michael Bruck explained
+  that what's required is to emulate the current instruction(just like the
+  arm7 code) to know what address to set the breakpoint at for single
+  stepping an instruction.
   - implement missing functionality (grep FNC_INFO_NOTIMPLEMENTED ...)
 - Cortex A8 support (ML)
   - add target implementation (ML)
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to