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); };