forked from auracaster/openocd
arm_adi_v5: add API send_sequence() and use it
The method to send an arbitrary sequence to DAP depends on the transport and is thus different on JTAG and SWD. This is already coded in dap_to_jtag() and dap_to_swd(). Add a new API send_sequence() in struct dap_ops. Add the implementations of send_sequence() in adi_v5_jtag.c and adi_v5_swd.c Rewrite dap_to_jtag() and dap_to_swd() using the new API. Move the enum swd_special_seq in arm_adi_v5.h to solve a circular dependencies among swd.h and arm_adi_v5.h Change-Id: I9db13a00f129761eab283783c094cfff2dd92610 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/4902 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
committed by
Tomas Vanek
parent
5d08bcb715
commit
be2d25efcc
@@ -158,6 +158,15 @@
|
||||
#define DP_APSEL_MAX (255)
|
||||
#define DP_APSEL_INVALID (-1)
|
||||
|
||||
/* FIXME: not SWD specific; should be renamed, e.g. adiv5_special_seq */
|
||||
enum swd_special_seq {
|
||||
LINE_RESET,
|
||||
JTAG_TO_SWD,
|
||||
SWD_TO_JTAG,
|
||||
SWD_TO_DORMANT,
|
||||
DORMANT_TO_SWD,
|
||||
};
|
||||
|
||||
/**
|
||||
* This represents an ARM Debug Interface (v5) Access Port (AP).
|
||||
* Most common is a MEM-AP, for memory access.
|
||||
@@ -291,6 +300,10 @@ struct adiv5_dap {
|
||||
struct dap_ops {
|
||||
/** connect operation for SWD */
|
||||
int (*connect)(struct adiv5_dap *dap);
|
||||
|
||||
/** send a sequence to the DAP */
|
||||
int (*send_sequence)(struct adiv5_dap *dap, enum swd_special_seq seq);
|
||||
|
||||
/** DP register read. */
|
||||
int (*queue_dp_read)(struct adiv5_dap *dap, unsigned reg,
|
||||
uint32_t *data);
|
||||
@@ -338,6 +351,21 @@ enum ap_type {
|
||||
AP_TYPE_AHB5_AP = 0x5, /* AHB5 Memory-AP. */
|
||||
};
|
||||
|
||||
/**
|
||||
* Send an adi-v5 sequence to the DAP.
|
||||
*
|
||||
* @param dap The DAP used for reading.
|
||||
* @param seq The sequence to send.
|
||||
*
|
||||
* @return ERROR_OK for success, else a fault code.
|
||||
*/
|
||||
static inline int dap_send_sequence(struct adiv5_dap *dap,
|
||||
enum swd_special_seq seq)
|
||||
{
|
||||
assert(dap->ops != NULL);
|
||||
return dap->ops->send_sequence(dap, seq);
|
||||
}
|
||||
|
||||
/**
|
||||
* Queue a DP register read.
|
||||
* Note that not all DP registers are readable; also, that JTAG and SWD
|
||||
|
||||
Reference in New Issue
Block a user