From ff94e02b7cfe5df892824e60140dcdd07ed2b01c Mon Sep 17 00:00:00 2001 From: Paul Fertser Date: Sun, 29 Sep 2013 19:12:17 +0400 Subject: [PATCH] hla: if the idcode callback returns 0, treat as a wildcard Also document the callback accordingly. Change-Id: I7e8ef481e8b5391b763b7f7187fac023e9fe04df Signed-off-by: Paul Fertser Reviewed-on: http://openocd.zylin.com/1673 Tested-by: jenkins Reviewed-by: Spencer Oliver --- src/jtag/drivers/ti_icdi_usb.c | 1 + src/jtag/hla/hla_interface.c | 3 ++- src/jtag/hla/hla_layout.h | 13 +++++++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/jtag/drivers/ti_icdi_usb.c b/src/jtag/drivers/ti_icdi_usb.c index 0d7d943be..c9b8435f2 100644 --- a/src/jtag/drivers/ti_icdi_usb.c +++ b/src/jtag/drivers/ti_icdi_usb.c @@ -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; } diff --git a/src/jtag/hla/hla_interface.c b/src/jtag/hla/hla_interface.c index 0176a4823..00e454917 100644 --- a/src/jtag/hla/hla_interface.c +++ b/src/jtag/hla/hla_interface.c @@ -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; } diff --git a/src/jtag/hla/hla_layout.h b/src/jtag/hla/hla_layout.h index d7b5d9353..ccc3a003e 100644 --- a/src/jtag/hla/hla_layout.h +++ b/src/jtag/hla/hla_layout.h @@ -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); };