X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fjtag%2Fjtag.h;h=ca09f923e1f1fb79bea514b877e2d8aa90d67489;hb=2b1bd97508ebaf33c76d4f36ec4bb85592801055;hp=607745891bd8d7b46f31eadc2532db60a6fab882;hpb=b83d79a42f908d3860f06910fdec8fb4fc670e6c;p=openocd diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h index 60774589..ca09f923 100644 --- a/src/jtag/jtag.h +++ b/src/jtag/jtag.h @@ -28,9 +28,11 @@ #ifdef _DEBUG_JTAG_IO_ -#define DEBUG_JTAG_IO(expr ...) LOG_DEBUG(expr) +#define DEBUG_JTAG_IO(expr ...) \ + do { if (1) LOG_DEBUG(expr); } while (0) #else -#define DEBUG_JTAG_IO(expr ...) +#define DEBUG_JTAG_IO(expr ...) \ + do { if (0) LOG_DEBUG(expr); } while (0) #endif #ifndef DEBUG_JTAG_IOZ @@ -55,13 +57,17 @@ * * These definitions were gleaned from the ARM7TDMI-S Technical * Reference Manual and validated against several other ARM core - * technical manuals. tap_get_tms_path() is sensitive to this numbering - * and ordering of the TAP states; furthermore, some interfaces require - * specific numbers be used, as they are handed-off directly to their - * hardware implementations. + * technical manuals. + * + * FIXME some interfaces require specific numbers be used, as they + * are handed-off directly to their hardware implementations. + * Fix those drivers to map as appropriate ... then pick some + * sane set of numbers here (where 0/uninitialized == INVALID). */ typedef enum tap_state { + TAP_INVALID = -1, + #if BUILD_ZY1000 /* These are the old numbers. Leave as-is for now... */ TAP_RESET = 0, TAP_IDLE = 8, @@ -70,7 +76,6 @@ typedef enum tap_state TAP_IRSELECT = 9, TAP_IRCAPTURE = 10, TAP_IRSHIFT = 11, TAP_IREXIT1 = 12, TAP_IRPAUSE = 13, TAP_IREXIT2 = 14, TAP_IRUPDATE = 15, - TAP_NUM_STATES = 16, TAP_INVALID = -1, #else /* Proper ARM recommended numbers */ TAP_DREXIT2 = 0x0, @@ -90,9 +95,6 @@ typedef enum tap_state TAP_IRCAPTURE = 0xe, TAP_RESET = 0x0f, - TAP_NUM_STATES = 0x10, - - TAP_INVALID = -1, #endif } tap_state_t; @@ -100,7 +102,10 @@ typedef enum tap_state * Function tap_state_name * Returns a string suitable for display representing the JTAG tap_state */ -const char* tap_state_name(tap_state_t state); +const char *tap_state_name(tap_state_t state); + +/// Provides user-friendly name lookup of TAP states. +tap_state_t tap_state_by_name(const char *name); /// The current TAP state of the pending JTAG command queue. extern tap_state_t cmd_queue_cur_state; @@ -534,29 +539,7 @@ extern void jtag_add_pathmove(int num_states, const tap_state_t* path); * @return ERROR_OK on success, or an error code on failure. * * Moves from the current state to the goal \a state. - * - * This needs to be handled according to the xsvf spec, see the XSTATE - * command description. From the XSVF spec, pertaining to XSTATE: - * - * For special states known as stable states (Test-Logic-Reset, - * Run-Test/Idle, Pause-DR, Pause- IR), an XSVF interpreter follows - * predefined TAP state paths when the starting state is a stable state - * and when the XSTATE specifies a new stable state. See the STATE - * command in the [Ref 5] for the TAP state paths between stable - * states. - * - * For non-stable states, XSTATE should specify a state that is only one - * TAP state transition distance from the current TAP state to avoid - * undefined TAP state paths. A sequence of multiple XSTATE commands can - * be issued to transition the TAP through a specific state path. - * - * @note Unless @c tms_bits holds a path that agrees with [Ref 5] in the - * above spec, then this code is not fully conformant to the xsvf spec. - * This puts a burden on tap_get_tms_path() function from the xsvf spec. - * If in doubt, you should confirm that that burden is being met. - * - * Otherwise, @a goal_state must be immediately reachable in one clock - * cycle, and does not need to be a stable state. + * Both states must be stable. */ extern int jtag_add_statemove(tap_state_t goal_state); @@ -687,6 +670,7 @@ extern void jtag_sleep(uint32_t us); #define ERROR_JTAG_DEVICE_ERROR (-107) #define ERROR_JTAG_STATE_INVALID (-108) #define ERROR_JTAG_TRANSITION_INVALID (-109) +#define ERROR_JTAG_INIT_SOFT_FAIL (-110) /** * jtag_add_dr_out() is a version of jtag_add_dr_scan() which @@ -734,4 +718,21 @@ int jtag_get_error(void); */ int jtag_error_clear(void); +/** + * Return true if it's safe for a background polling task to access the + * JTAG scan chain. Polling may be explicitly disallowed, and is also + * unsafe while nTRST is active or the JTAG clock is gated off., + */ +bool is_jtag_poll_safe(void); + +/** + * Return flag reporting whether JTAG polling is disallowed. + */ +bool jtag_poll_get_enabled(void); + +/** + * Assign flag reporting whether JTAG polling is disallowed. + */ +void jtag_poll_set_enabled(bool value); + #endif /* JTAG_H */