|
From: Daniel G. <dgo...@os...> - 2025-12-04 06:51:10
|
Hello,
To provide context for my question, for OpenOCD, most of the JTAG
drivers adhere to the following convention for the "reset" callback...
static int jtag_driver_reset(int trst, int srst)
and
struct adapter_driver jtag_driver_adapter_driver = {
.name = "jtag_driver",
.transport_ids = TRANSPORT_JTAG,
.transport_preferred_id = TRANSPORT_JTAG,
.commands = jtag_driver_command_handlers,
.init = jtag_driver_init,
.quit = jtag_driver_quit,
.reset = jtag_driver_reset,
...
During OpenOCD startup, I see the "jtag_driver_reset" procedure called
to assert "trst", but the follow-up call to de-assert "trst" doesn't happen.
For example, these are excerpts from a debug log showing that "trst"
gets asserted, but never de-asserted. Is there something in the OpenOCD
board configuration file that I'm missing to instruct OpenOCD to
de-assert TRST after it's been asserted?
Debug: 55 21 jtag_driver.c:338 jtag_driver_reset(): JTAG DRIVER DEBUG:
reset trst: 0 srst 0 << TRST DE-ASSERTED
Debug: 56 21 core.c:843 jtag_add_reset(): SRST line released
Debug: 57 21 core.c:868 jtag_add_reset(): TRST line released
Debug: 58 21 core.c:334 jtag_call_event_callbacks(): jtag event: TAP reset
...
Debug: 67 224 core.c:334 jtag_call_event_callbacks(): jtag event: TAP reset
Debug: 68 224 jtag_driver.c:338 jtag_driver_reset(): JTAG DRIVER DEBUG:
reset trst: 1 srst 0 << TRST ASSERTED
Info : 69 224 jtag_driver.c:348 jtag_driver_reset(): JTAG DRIVER INFO:
Successfully reset JTAG state machine
Debug: 70 224 jtag_driver.c:349 jtag_driver_reset(): tap_set_state(RESET)
Debug: 71 224 core.c:991 default_interface_jtag_execute_queue(): JTAG
TLR RESET to RESET
Debug: 72 224 core.c:1248 jtag_examine_chain(): DR scan interrogation
for IDCODE/BYPASS
Debug: 73 224 core.c:334 jtag_call_event_callbacks(): jtag event: TAP reset
...
Debug: 80 225 jtag_driver.c:338 jtag_driver_reset(): JTAG DRIVER DEBUG:
reset trst: 1 srst 0 << TRST ASSERTED
Info : 81 225 jtag_driver.c:348 jtag_driver_reset(): JTAG DRIVER INFO:
Successfully reset JTAG state machine
Debug: 82 225 jtag_driver.c:349 jtag_driver_reset(): tap_set_state(RESET)
Debug: 86 225 core.c:991 default_interface_jtag_execute_queue(): JTAG
TLR RESET to RESET
...
Debug: 186 247 core.c:334 jtag_call_event_callbacks(): jtag event: TAP reset
Debug: 187 247 jtag_driver.c:338 jtag_driver_reset(): JTAG DRIVER DEBUG:
reset trst: 1 srst 0 << TRST ASSERTED
Info : 188 247 jtag_driver.c:348 jtag_driver_reset(): JTAG DRIVER INFO:
Successfully reset JTAG state machine
Debug: 189 247 jtag_driver.c:349 jtag_driver_reset(): tap_set_state(RESET)
Debug: 190 247 core.c:991 default_interface_jtag_execute_queue(): JTAG
TLR RESET to RESET
Debug: 191 247 core.c:1248 jtag_examine_chain(): DR scan interrogation
for IDCODE/BYPASS
Debug: 192 247 core.c:334 jtag_call_event_callbacks(): jtag event: TAP reset
...
Debug: 199 248 jtag_driver.c:338 jtag_driver_reset(): JTAG DRIVER DEBUG:
reset trst: 1 srst 0 << TRST ASSERTED
Info : 200 248 jtag_driver.c:348 jtag_driver_reset(): JTAG DRIVER INFO:
Successfully reset JTAG state machine
Debug: 201 248 jtag_driver.c:349 jtag_driver_reset(): tap_set_state(RESET)
Any insight as is appreciated.
Thanks,
Daniel Goehring
Ampere Computing
|