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



Reply via email to