OpenOCD
|
Go to the source code of this file.
Data Structures | |
struct | adapter_driver |
Represents a driver for a debugging interface. More... | |
struct | jtag_interface |
Represents a driver for a debugging interface. More... | |
Macros | |
#define | DEBUG_CAP_TMS_SEQ (1 << 0) |
#define | tap_set_state(new_state) |
This function sets the state of a "state follower" which tracks the state of the TAPs connected to the cable. More... | |
Functions | |
int | adapter_assert_reset (void) |
int | adapter_config_trace (bool enabled, enum tpiu_pin_protocol pin_protocol, uint32_t port_size, unsigned int *trace_freq, unsigned int traceclkin_freq, uint16_t *prescaler) |
int | adapter_deassert_reset (void) |
int | adapter_poll_trace (uint8_t *buf, size_t *size) |
int | adapter_resets (int assert_trst, int assert_srst) |
static tap_state_t | jtag_debug_state_machine (const void *tms_buf, const void *tdi_buf, unsigned tap_len, tap_state_t start_tap_state) |
Prints verbose TAP state transitions for the given TMS/TDI buffers. More... | |
tap_state_t | tap_get_end_state (void) |
For more information,. More... | |
tap_state_t | tap_get_state (void) |
This function gets the state of the "state follower" which tracks the state of the TAPs connected to the cable. More... | |
int | tap_get_tms_path (tap_state_t from, tap_state_t to) |
This function provides a "bit sequence" indicating what has to be done with TMS during a sequence of seven TAP clock cycles in order to get from state "from" to state "to". More... | |
int | tap_get_tms_path_len (tap_state_t from, tap_state_t to) |
Function int tap_get_tms_path_len returns the total number of bits that represents a TMS path transition as given by the function tap_get_tms_path(). More... | |
bool | tap_is_state_stable (tap_state_t astate) |
Function tap_is_state_stable returns true if the astate is stable. More... | |
int | tap_move_ndx (tap_state_t astate) |
Function tap_move_ndx when given a stable state, returns an index from 0-5. More... | |
void | tap_set_end_state (tap_state_t new_end_state) |
This function sets the state of an "end state follower" which tracks the state that any cable driver thinks will be the end (resultant) state of the current TAP SIR or SDR operation. More... | |
void | tap_set_state_impl (tap_state_t new_state) |
implementation of wrapper function tap_set_state() More... | |
tap_state_t | tap_state_transition (tap_state_t current_state, bool tms) |
Function tap_state_transition takes a current TAP state and returns the next state according to the tms value. More... | |
void | tap_use_new_tms_table (bool use_new) |
Allow switching between old and new TMS tables. More... | |
bool | tap_uses_new_tms_table (void) |
Variables | |
const char *const | jtag_only [] |
#define DEBUG_CAP_TMS_SEQ (1 << 0) |
Definition at line 189 of file interface.h.
#define tap_set_state | ( | new_state | ) |
This function sets the state of a "state follower" which tracks the state of the TAPs connected to the cable.
The state follower is hopefully always in the same state as the actual TAPs in the jtag chain, and will be so if there are no bugs in the tracking logic within that cable driver.
All the cable drivers call this function to indicate the state they think the TAPs attached to their cables are in. Because this function can also log transitions, it will be helpful to call this function with every transition that the TAPs being manipulated are expected to traverse, not just end points of a multi-step state path.
new_state | The state we think the TAPs are currently in (or are about to enter). |
Definition at line 49 of file interface.h.
int adapter_assert_reset | ( | void | ) |
Definition at line 1880 of file jtag/core.c.
References adapter_system_reset(), ERROR_FAIL, ERROR_OK, get_current_transport(), jtag_add_reset(), jtag_reset_config, LOG_ERROR, name, RESET_SRST_PULLS_TRST, transport_is_dapdirect_jtag(), transport_is_dapdirect_swd(), transport_is_hla(), transport_is_jtag(), transport_is_swd(), and transport_is_swim().
Referenced by aarch64_assert_reset(), COMMAND_HANDLER(), cortex_a_assert_reset(), cortex_m_assert_reset(), dapdirect_init(), hl_assert_reset(), hl_interface_init_reset(), stlink_dap_op_connect(), stm8_reset_assert(), and swd_connect().
int adapter_config_trace | ( | bool | enabled, |
enum tpiu_pin_protocol | pin_protocol, | ||
uint32_t | port_size, | ||
unsigned int * | trace_freq, | ||
unsigned int | traceclkin_freq, | ||
uint16_t * | prescaler | ||
) |
Definition at line 1917 of file jtag/core.c.
References adapter_driver::config_trace, ERROR_FAIL, ERROR_OK, and LOG_ERROR.
Referenced by arm_tpiu_swo_cleanup_all(), and jim_arm_tpiu_swo_enable().
int adapter_deassert_reset | ( | void | ) |
Definition at line 1900 of file jtag/core.c.
References adapter_system_reset(), ERROR_FAIL, ERROR_OK, get_current_transport(), jtag_add_reset(), LOG_ERROR, name, transport_is_dapdirect_jtag(), transport_is_dapdirect_swd(), transport_is_hla(), transport_is_jtag(), transport_is_swd(), and transport_is_swim().
Referenced by aarch64_deassert_reset(), COMMAND_HANDLER(), cortex_a_deassert_reset(), cortex_m_deassert_reset(), dapdirect_init(), hl_deassert_reset(), hl_interface_init_reset(), and stm8_reset_deassert().
int adapter_poll_trace | ( | uint8_t * | buf, |
size_t * | size | ||
) |
Definition at line 1932 of file jtag/core.c.
References ERROR_FAIL, adapter_driver::poll_trace, and size.
Referenced by arm_tpiu_swo_poll_trace().
int adapter_resets | ( | int | assert_trst, |
int | assert_srst | ||
) |
Definition at line 1833 of file jtag/core.c.
References adapter_system_reset(), ERROR_FAIL, ERROR_OK, get_current_transport(), jtag_add_reset(), jtag_execute_queue(), jtag_reset_config, LOG_ERROR, name, RESET_HAS_SRST, SRST_ASSERT, SRST_DEASSERT, transport_is_dapdirect_jtag(), transport_is_dapdirect_swd(), transport_is_hla(), transport_is_jtag(), transport_is_swd(), transport_is_swim(), TRST_ASSERT, and TRST_DEASSERT.
Referenced by COMMAND_HANDLER().
|
inlinestatic |
Prints verbose TAP state transitions for the given TMS/TDI buffers.
tms_buf | must points to a buffer containing the TMS bitstream. |
tdi_buf | must points to a buffer containing the TDI bitstream. |
tap_len | must specify the length of the TMS/TDI bitstreams. |
start_tap_state | must specify the current TAP state. |
Definition at line 159 of file interface.h.
References jtag_debug_state_machine_(), LOG_LEVEL_IS, and LOG_LVL_DEBUG_IO.
Referenced by buspirate_tap_execute(), and jlink_flush().
tap_state_t tap_get_end_state | ( | void | ) |
For more information,.
Definition at line 56 of file interface.c.
References end_state_follower.
Referenced by amt_jtagaccel_runtest(), amt_jtagaccel_scan(), amt_jtagaccel_state_move(), armjtagew_runtest(), armjtagew_scan(), armjtagew_state_move(), bitbang_runtest(), bitbang_scan(), bitbang_state_move(), bitq_execute_queue(), bitq_runtest(), buspirate_runtest(), buspirate_scan(), buspirate_state_move(), cmsis_dap_execute_scan(), cmsis_dap_runtest(), cmsis_dap_state_move(), ftdi_execute_runtest(), ftdi_execute_scan(), ftdi_execute_statemove(), gw16012_runtest(), gw16012_scan(), gw16012_state_move(), jlink_execute_scan(), jlink_runtest(), jlink_state_move(), opendous_runtest(), opendous_scan(), opendous_state_move(), openjtag_execute_runtest(), openjtag_execute_scan(), openjtag_execute_statemove(), osbdm_add_scan(), osbdm_add_statemove(), rlink_runtest(), rlink_scan(), rlink_state_move(), syncbb_runtest(), syncbb_scan(), syncbb_state_move(), ulink_queue_scan(), ulink_queue_statemove(), usbprog_runtest(), usbprog_scan(), usbprog_state_move(), vsllink_runtest(), vsllink_scan(), vsllink_state_move(), xlnx_pcie_xvc_execute_runtest(), xlnx_pcie_xvc_execute_scan(), and xlnx_pcie_xvc_execute_statemove().
tap_state_t tap_get_state | ( | void | ) |
This function gets the state of the "state follower" which tracks the state of the TAPs connected to the cable.
Definition at line 37 of file interface.c.
References state_follower.
Referenced by amt_jtagaccel_runtest(), amt_jtagaccel_scan(), amt_jtagaccel_state_move(), armjtagew_path_move(), armjtagew_runtest(), armjtagew_scan(), armjtagew_state_move(), bitbang_path_move(), bitbang_runtest(), bitbang_scan(), bitbang_stableclocks(), bitbang_state_move(), bitq_execute_queue(), bitq_path_move(), bitq_runtest(), bitq_scan_field(), bitq_state_move(), buspirate_path_move(), buspirate_runtest(), buspirate_scan(), buspirate_stableclocks(), buspirate_state_move(), cmsis_dap_execute_scan(), cmsis_dap_pathmove(), cmsis_dap_runtest(), cmsis_dap_stableclocks(), cmsis_dap_state_move(), ftdi_execute_pathmove(), ftdi_execute_runtest(), ftdi_execute_scan(), ftdi_execute_sleep(), ftdi_execute_stableclocks(), ftdi_execute_statemove(), gw16012_path_move(), gw16012_runtest(), gw16012_scan(), gw16012_state_move(), jlink_execute_scan(), jlink_path_move(), jlink_runtest(), jlink_stableclocks(), jlink_state_move(), jtag_vpi_path_move(), jtag_vpi_stableclocks(), jtag_vpi_state_move(), move_to_state(), opendous_path_move(), opendous_runtest(), opendous_scan(), opendous_state_move(), openjtag_execute_runtest(), openjtag_execute_scan(), osbdm_add_pathmove(), osbdm_add_scan(), osbdm_add_stableclocks(), osbdm_add_statemove(), rlink_path_move(), rlink_runtest(), rlink_scan(), rlink_state_move(), syncbb_path_move(), syncbb_runtest(), syncbb_scan(), syncbb_stableclocks(), syncbb_state_move(), ublast_path_move(), ublast_state_move(), ulink_queue_pathmove(), ulink_queue_runtest(), ulink_queue_scan(), ulink_queue_stableclocks(), ulink_queue_statemove(), usbprog_path_move(), usbprog_runtest(), usbprog_scan(), usbprog_state_move(), vdebug_jtag_path_move(), vdebug_jtag_runtest(), vdebug_jtag_scan(), vdebug_jtag_stableclocks(), vdebug_jtag_tlr(), vsllink_execute_queue(), vsllink_path_move(), vsllink_runtest(), vsllink_scan(), vsllink_state_move(), xlnx_pcie_xvc_execute_pathmove(), xlnx_pcie_xvc_execute_runtest(), xlnx_pcie_xvc_execute_scan(), xlnx_pcie_xvc_execute_stableclocks(), and xlnx_pcie_xvc_execute_statemove().
int tap_get_tms_path | ( | tap_state_t | from, |
tap_state_t | to | ||
) |
This function provides a "bit sequence" indicating what has to be done with TMS during a sequence of seven TAP clock cycles in order to get from state "from" to state "to".
The length of the sequence must be determined with a parallel call to tap_get_tms_path_len().
from | The starting state. |
to | The desired final state. |
Definition at line 190 of file interface.c.
References tap_move_ndx(), and tms_seqs.
Referenced by armjtagew_state_move(), bitbang_state_move(), bitq_state_move(), buspirate_state_move(), cmsis_dap_state_move(), gw16012_state_move(), jlink_state_move(), jtag_add_statemove(), jtag_vpi_state_move(), move_to_state(), opendous_state_move(), osbdm_add_statemove(), rlink_state_move(), syncbb_state_move(), ublast_state_move(), ulink_queue_scan(), ulink_queue_statemove(), usbprog_state_move(), vdebug_jtag_runtest(), vdebug_jtag_scan(), vdebug_jtag_tlr(), vsllink_state_move(), and xlnx_pcie_xvc_execute_statemove().
int tap_get_tms_path_len | ( | tap_state_t | from, |
tap_state_t | to | ||
) |
Function int tap_get_tms_path_len returns the total number of bits that represents a TMS path transition as given by the function tap_get_tms_path().
For at least one interface (JLink) it's not OK to simply "pad" TMS sequences to fit a whole byte. (I suspect this is a general TAP problem within OOCD.) Padding TMS causes all manner of instability that's not easily discovered. Using this routine we can apply EXACTLY the state transitions required to make something work - no more - no less.
from | is the starting state |
to | is the resultant or final state |
Definition at line 195 of file interface.c.
References tap_move_ndx(), and tms_seqs.
Referenced by armjtagew_state_move(), bitbang_state_move(), bitq_state_move(), buspirate_state_move(), cmsis_dap_state_move(), ftdi_initialize(), gw16012_state_move(), jlink_state_move(), jtag_add_statemove(), jtag_vpi_state_move(), move_to_state(), opendous_state_move(), osbdm_add_statemove(), rlink_state_move(), syncbb_state_move(), ublast_state_move(), ulink_queue_scan(), ulink_queue_statemove(), vdebug_jtag_runtest(), vdebug_jtag_scan(), vdebug_jtag_tlr(), vsllink_state_move(), and xlnx_pcie_xvc_execute_statemove().
bool tap_is_state_stable | ( | tap_state_t | astate | ) |
Function tap_is_state_stable returns true if the astate is stable.
Definition at line 200 of file interface.c.
References TAP_DRPAUSE, TAP_DRSHIFT, TAP_IDLE, TAP_IRPAUSE, TAP_IRSHIFT, and TAP_RESET.
Referenced by amt_jtagaccel_end_state(), armjtagew_end_state(), bitbang_end_state(), bitq_end_state(), bitq_state_move(), buspirate_end_state(), cmsis_dap_end_state(), ftdi_end_state(), gw16012_end_state(), jlink_end_state(), jtag_add_clocks(), jtag_add_pathmove(), jtag_add_statemove(), opendous_end_state(), osbdm_add_stableclocks(), rlink_end_state(), syncbb_end_state(), ulink_queue_stableclocks(), ulink_set_end_state(), usbprog_end_state(), and vsllink_end_state().
int tap_move_ndx | ( | tap_state_t | astate | ) |
Function tap_move_ndx when given a stable state, returns an index from 0-5.
The index corresponds to a sequence of stable states which are given in this order:
{ TAP_RESET, TAP_IDLE, TAP_DRSHIFT, TAP_DRPAUSE, TAP_IRSHIFT, TAP_IRPAUSE }
This sequence corresponds to look up tables which are used in some of the cable drivers.
astate | is the stable state to find in the sequence. If a non stable state is passed, this may cause the program to output an error message and terminate. |
Definition at line 61 of file interface.c.
Referenced by amt_jtagaccel_scan(), amt_jtagaccel_state_move(), tap_get_tms_path(), and tap_get_tms_path_len().
void tap_set_end_state | ( | tap_state_t | new_end_state | ) |
This function sets the state of an "end state follower" which tracks the state that any cable driver thinks will be the end (resultant) state of the current TAP SIR or SDR operation.
At completion of that TAP operation this value is copied into the state follower via tap_set_state().
new_end_state | The state the TAPs should enter at completion of a pending TAP operation. |
Definition at line 48 of file interface.c.
References end_state_follower.
Referenced by amt_jtagaccel_end_state(), armjtagew_end_state(), armjtagew_path_move(), bitbang_end_state(), bitbang_path_move(), bitq_end_state(), bitq_path_move(), buspirate_end_state(), buspirate_path_move(), cmsis_dap_end_state(), ftdi_end_state(), ftdi_execute_pathmove(), gw16012_end_state(), gw16012_path_move(), jlink_end_state(), jlink_path_move(), opendous_end_state(), opendous_path_move(), openjtag_execute_runtest(), openjtag_execute_scan(), openjtag_execute_statemove(), osbdm_add_pathmove(), osbdm_add_scan(), osbdm_add_statemove(), rlink_end_state(), rlink_path_move(), syncbb_end_state(), syncbb_path_move(), ulink_queue_runtest(), ulink_queue_scan(), ulink_set_end_state(), usbprog_end_state(), usbprog_path_move(), vsllink_end_state(), vsllink_path_move(), xlnx_pcie_xvc_execute_command(), xlnx_pcie_xvc_execute_pathmove(), xlnx_pcie_xvc_execute_runtest(), and xlnx_pcie_xvc_execute_scan().
void tap_set_state_impl | ( | tap_state_t | new_state | ) |
implementation of wrapper function tap_set_state()
Definition at line 31 of file interface.c.
References state_follower.
tap_state_t tap_state_transition | ( | tap_state_t | current_state, |
bool | tms | ||
) |
Function tap_state_transition takes a current TAP state and returns the next state according to the tms value.
current_state | is the state of a TAP currently. |
tms | is either zero or non-zero, just like a real TMS line in a jtag interface. |
Definition at line 223 of file interface.c.
References LOG_ERROR, TAP_DRCAPTURE, TAP_DREXIT1, TAP_DREXIT2, TAP_DRPAUSE, TAP_DRSELECT, TAP_DRSHIFT, TAP_DRUPDATE, TAP_IDLE, TAP_IRCAPTURE, TAP_IREXIT1, TAP_IREXIT2, TAP_IRPAUSE, TAP_IRSELECT, TAP_IRSHIFT, TAP_IRUPDATE, and TAP_RESET.
Referenced by armjtagew_path_move(), bitbang_path_move(), bitq_path_move(), buspirate_path_move(), cmsis_dap_execute_scan(), cmsis_dap_pathmove(), dummy_write(), ftdi_execute_pathmove(), ftdi_execute_scan(), gw16012_path_move(), jlink_execute_scan(), jlink_path_move(), jtag_add_pathmove(), jtag_add_statemove(), jtag_debug_state_machine_(), jtag_vpi_path_move(), move_to_state(), opendous_path_move(), osbdm_add_pathmove(), rlink_path_move(), syncbb_path_move(), ublast_path_move(), ulink_queue_pathmove(), usbprog_path_move(), vdebug_jtag_path_move(), vsllink_path_move(), and xlnx_pcie_xvc_execute_pathmove().
void tap_use_new_tms_table | ( | bool | use_new | ) |
Allow switching between old and new TMS tables.
Definition at line 447 of file interface.c.
References old_tms_seqs, short_tms_seqs, and tms_seqs.
Referenced by COMMAND_HANDLER().
bool tap_uses_new_tms_table | ( | void | ) |
Definition at line 451 of file interface.c.
References short_tms_seqs, and tms_seqs.
Referenced by COMMAND_HANDLER().