hla: if the idcode callback returns 0, treat as a wildcard 73/1673/2
authorPaul Fertser <fercerpav@gmail.com>
Sun, 29 Sep 2013 15:12:17 +0000 (19:12 +0400)
committerSpencer Oliver <spen@spen-soft.co.uk>
Thu, 3 Oct 2013 11:24:24 +0000 (11:24 +0000)
Also document the callback accordingly.

Change-Id: I7e8ef481e8b5391b763b7f7187fac023e9fe04df
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/1673
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/jtag/drivers/ti_icdi_usb.c
src/jtag/hla/hla_interface.c
src/jtag/hla/hla_layout.h

index 0d7d943..c9b8435 100644 (file)
@@ -284,6 +284,7 @@ static int icdi_get_cmd_result(void *handle)
 
 static int icdi_usb_idcode(void *handle, uint32_t *idcode)
 {
+       *idcode = 0;
        return ERROR_OK;
 }
 
index 0176a48..00e4549 100644 (file)
@@ -84,7 +84,8 @@ int hl_interface_init_target(struct target *t)
                uint32_t expected = t->tap->expected_ids[ii];
 
                /* treat "-expected-id 0" as a "don't-warn" wildcard */
-               if (!expected || (t->tap->idcode == expected)) {
+               if (!expected || !t->tap->idcode ||
+                   (t->tap->idcode == expected)) {
                        found = 1;
                        break;
                }
index d7b5d93..ccc3a00 100644 (file)
@@ -62,8 +62,17 @@ struct hl_layout_api_s {
                        uint32_t count, const uint8_t *buffer);
        /** */
        int (*write_debug_reg) (void *handle, uint32_t addr, uint32_t val);
-       /** */
-       int (*idcode) (void *fd, uint32_t *idcode);
+       /**
+        * Read the idcode of the target connected to the adapter
+        *
+        * If the adapter doesn't support idcode retrieval, this callback should
+        * store 0 to indicate a wildcard match.
+        *
+        * @param handle A pointer to the device-specific handle
+        * @param idcode Storage for the detected idcode
+        * @returns ERROR_OK on success, or an error code on failure.
+        */
+       int (*idcode) (void *handle, uint32_t *idcode);
        /** */
        enum target_state (*state) (void *fd);
 };