From: OpenOCD-Gerrit <ope...@us...> - 2014-06-28 09:35:21
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Main OpenOCD repository". The branch, master has been updated via cc99e57b0e8ed3672afce1925142863cceb809f2 (commit) via ae3bcd05f87c9caf7f8900d54a380415f8f37326 (commit) from 003f8a1d04f4e82c32d11f86ef32173048ab610c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit cc99e57b0e8ed3672afce1925142863cceb809f2 Author: Andreas Fritiofson <and...@gm...> Date: Sat May 10 11:31:35 2014 +0200 transport: Constify the transports vector Change-Id: I0c874b5d4c97cf781d83bd381d701f770e069f72 Signed-off-by: Andreas Fritiofson <and...@gm...> Reviewed-on: http://openocd.zylin.com/2135 Tested-by: jenkins Reviewed-by: Paul Fertser <fer...@gm...> diff --git a/src/jtag/adapter.c b/src/jtag/adapter.c index 494d39e..2f5f6b4 100644 --- a/src/jtag/adapter.c +++ b/src/jtag/adapter.c @@ -48,7 +48,7 @@ */ extern struct jtag_interface *jtag_interface; -const char *jtag_only[] = { "jtag", NULL }; +const char * const jtag_only[] = { "jtag", NULL }; static int jim_adapter_name(Jim_Interp *interp, int argc, Jim_Obj * const *argv) { diff --git a/src/jtag/interface.h b/src/jtag/interface.h index 8dacd22..275c495 100644 --- a/src/jtag/interface.h +++ b/src/jtag/interface.h @@ -207,7 +207,7 @@ struct jtag_interface { #define DEBUG_CAP_TMS_SEQ (1 << 0) /** transports supported in C code (NULL terminated vector) */ - const char **transports; + const char * const *transports; const struct swd_driver *swd; @@ -300,7 +300,7 @@ struct jtag_interface { int (*srst_asserted)(int *srst_asserted); }; -extern const char *jtag_only[]; +extern const char * const jtag_only[]; void adapter_assert_reset(void); void adapter_deassert_reset(void); diff --git a/src/transport/transport.c b/src/transport/transport.c index 35194b5..072a0d3 100644 --- a/src/transport/transport.c +++ b/src/transport/transport.c @@ -61,7 +61,7 @@ static struct transport *transport_list; * currently selected debug adapter supports. This is declared * by the time that adapter is fully set up. */ -static const char **allowed_transports; +static const char * const *allowed_transports; /** * The transport being used for the current OpenOCD session. */ static struct transport *session; @@ -94,7 +94,7 @@ static int transport_select(struct command_context *ctx, const char *name) * to declare the set of transports supported by an adapter. When * there is only one member of that set, it is automatically selected. */ -int allow_transports(struct command_context *ctx, const char **vector) +int allow_transports(struct command_context *ctx, const char * const *vector) { /* NOTE: caller is required to provide only a list * of *valid* transport names @@ -242,7 +242,7 @@ COMMAND_HANDLER(handle_transport_init) LOG_ERROR("session's transport is not selected."); /* no session transport configured, print transports then fail */ - const char **vector = allowed_transports; + const char * const *vector = allowed_transports; while (*vector) { LOG_ERROR("allow transport '%s'", *vector); vector++; diff --git a/src/transport/transport.h b/src/transport/transport.h index a7a73d1..afb7b12 100644 --- a/src/transport/transport.h +++ b/src/transport/transport.h @@ -79,7 +79,7 @@ int transport_register_commands(struct command_context *ctx); COMMAND_HELPER(transport_list_parse, char ***vector); -int allow_transports(struct command_context *ctx, const char **vector); +int allow_transports(struct command_context *ctx, const char * const *vector); bool transports_are_declared(void); commit ae3bcd05f87c9caf7f8900d54a380415f8f37326 Author: Andreas Fritiofson <and...@gm...> Date: Sun Mar 2 20:35:32 2014 +0100 swd: Add frequency setting and special/switching sequences to the API Change-Id: I6f3950374f2525a18bbcb9cbd340c447c20fb704 Signed-off-by: Andreas Fritiofson <and...@gm...> Reviewed-on: http://openocd.zylin.com/2134 Tested-by: jenkins Reviewed-by: Paul Fertser <fer...@gm...> diff --git a/src/jtag/swd.h b/src/jtag/swd.h index b0db5d2..d6746dd 100644 --- a/src/jtag/swd.h +++ b/src/jtag/swd.h @@ -55,6 +55,80 @@ static inline uint8_t swd_cmd(bool is_read, bool is_ap, uint8_t regnum) /* SWD_ACK_* bits are defined in <target/arm_adi_v5.h> */ +/** + * Line reset. + * + * Line reset is at least 50 SWCLK cycles with SWDIO driven high, followed + * by at least one idle (low) cycle. + */ +static const uint8_t swd_seq_line_reset[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 +}; +static const unsigned swd_seq_line_reset_len = 51; + +/** + * JTAG-to-SWD sequence. + * + * The JTAG-to-SWD sequence is at least 50 TCK/SWCLK cycles with TMS/SWDIO + * high, putting either interface logic into reset state, followed by a + * specific 16-bit sequence and finally a line reset in case the SWJ-DP was + * already in SWD mode. + */ +static const uint8_t swd_seq_jtag_to_swd[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x9e, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, +}; +static const unsigned swd_seq_jtag_to_swd_len = 118; + +/** + * SWD-to-JTAG sequence. + * + * The SWD-to-JTAG sequence is at least 50 TCK/SWCLK cycles with TMS/SWDIO + * high, putting either interface logic into reset state, followed by a + * specific 16-bit sequence and finally at least 5 TCK cycles to put the + * JTAG TAP in TLR. + */ +static const uint8_t swd_seq_swd_to_jtag[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x9c, 0xff +}; +static const unsigned swd_seq_swd_to_jtag_len = 71; + +/** + * SWD-to-dormant sequence. + * + * This is at least 50 SWCLK cycles with SWDIO high to put the interface + * in reset state, followed by a specific 16-bit sequence. + */ +static const uint8_t swd_seq_swd_to_dormant[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x8e, 0x03 +}; +static const unsigned swd_seq_swd_to_dormant_len = 66; + +/** + * Dormant-to-SWD sequence. + * + * This is at least 8 TCK/SWCLK cycles with TMS/SWDIO high to abort any ongoing + * selection alert sequence, followed by a specific 128-bit selection alert + * sequence, followed by 4 TCK/SWCLK cycles with TMS/SWDIO low, followed by + * a specific protocol-dependent activation code. For SWD the activation code + * is an 8-bit sequence. The sequence ends with a line reset. + */ +static const uint8_t swd_seq_dormant_to_swd[] = { + 0xff, + 0x92, 0xf3, 0x09, 0x62, 0x95, 0x2d, 0x85, 0x86, + 0xe9, 0xaf, 0xdd, 0xe3, 0xa2, 0x0e, 0xbc, 0x19, + 0x10, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f +}; +static const unsigned swd_seq_dormant_to_swd_len = 199; + +enum swd_special_seq { + LINE_RESET, + JTAG_TO_SWD, + SWD_TO_JTAG, + SWD_TO_DORMANT, + DORMANT_TO_SWD, +}; + struct swd_driver { /** * Initialize the debug link so it can perform SWD operations. @@ -67,6 +141,35 @@ struct swd_driver { int (*init)(void); /** + * Set the SWCLK frequency of the SWD link. + * + * The driver should round the desired value, downwards if possible, to + * the nearest supported frequency. A negative value should be ignored + * and can be used to query the current setting. If the driver does not + * support a variable frequency a fixed, nominal, value should be + * returned. + * + * If the frequency is increased, it must not apply before the currently + * queued transactions are executed. If the frequency is lowered, it may + * apply immediately. + * + * @param dap The DAP controlled by the SWD link. + * @param hz The desired frequency in Hz. + * @return The actual resulting frequency after rounding. + */ + int_least32_t (*frequency)(struct adiv5_dap *dap, int_least32_t hz); + + /** + * Queue a special SWDIO sequence. + * + * @param dap The DAP controlled by the SWD link. + * @param seq The special sequence to generate. + * @return ERROR_OK if the sequence was queued, negative error if the + * sequence is unsupported. + */ + int (*switch_seq)(struct adiv5_dap *dap, enum swd_special_seq seq); + + /** * Queued read of an AP or DP register. * * @param dap The DAP controlled by the SWD link. ----------------------------------------------------------------------- Summary of changes: src/jtag/adapter.c | 2 +- src/jtag/interface.h | 4 +- src/jtag/swd.h | 103 +++++++++++++++++++++++++++++++++++++++++++++ src/transport/transport.c | 6 +- src/transport/transport.h | 2 +- 5 files changed, 110 insertions(+), 7 deletions(-) hooks/post-receive -- Main OpenOCD repository |