OpenOCD
eud.c File Reference
Include dependency graph for eud.c:

Go to the source code of this file.

Data Structures

struct  eud_device
 
struct  eud_swd_transfer
 

Macros

#define EUD_CTL_ACC_TDO_SEL   BIT(17)
 
#define EUD_CTL_CMD_CTLOUT_CLR   8
 
#define EUD_CTL_CMD_CTLOUT_SET   7
 
#define EUD_CTL_DAP_MUX_SEL   BIT(10)
 
#define EUD_CTL_DAP_SWDO_SEL   BIT(20)
 
#define EUD_CTL_DAP_TDO_SEL   BIT(18)
 
#define EUD_CTL_GPIO_JTAG_SEL   BIT(7)
 
#define EUD_CTL_JTAG_PERIPH_EN   BIT(4)
 
#define EUD_CTL_MTAP_TDO_SEL   BIT(19)
 
#define EUD_CTL_PID   0x9501
 
#define EUD_CTL_RCTLR_SRST_N   BIT(0)
 
#define EUD_CTL_SWD_ON_CLEAR
 
#define EUD_CTL_SWD_ON_SET
 
#define EUD_CTL_SWD_PERIPH_EN   BIT(2)
 
#define EUD_CTL_VDDMIN_TCK_EN   BIT(6)
 
#define EUD_EP_IN   0x81
 
#define EUD_EP_OUT   0x02
 
#define EUD_INTERFACE   0
 
#define EUD_SWD_BB_DAP_TRST_N   BIT(6)
 
#define EUD_SWD_BB_GPIO_SRST_N   BIT(4)
 
#define EUD_SWD_BB_GPIO_TRST_N   BIT(5)
 
#define EUD_SWD_BB_RCTLR_SRST_N   BIT(2)
 
#define EUD_SWD_BB_RESET_DEFAULT
 
#define EUD_SWD_BUFFER_SIZE   32
 
#define EUD_SWD_CMD_BITBANG   4
 
#define EUD_SWD_CMD_DELAY   3
 
#define EUD_SWD_CMD_DITMS   5
 
#define EUD_SWD_CMD_FLUSH   1
 
#define EUD_SWD_CMD_FREQ   2
 
#define EUD_SWD_CMD_PERIPH_RST   8
 
#define EUD_SWD_CMD_STATUS   7
 
#define EUD_SWD_CMD_TIMING   6
 
#define EUD_SWD_DITMS_MAX_BITS   (FIELD_GET(SWD_CMD_DITMS_COUNT, SWD_CMD_DITMS_COUNT) + 1)
 
#define EUD_SWD_PID   0x9504
 
#define EUD_SWD_QUEUE_TRAILER_SIZE   2
 
#define EUD_SWD_STATUS_SIZE   4
 
#define EUD_USB_TIMEOUT_MS   6000
 
#define EUD_VID   0x05c6
 
#define SWD_CMD_DELAY_RESERVED   GENMASK(31, 8)
 
#define SWD_CMD_DELAY_TIME   GENMASK(7, 0)
 
#define SWD_CMD_DITMS_COUNT   GENMASK(31, 16)
 
#define SWD_CMD_DITMS_DATA   GENMASK(15, 0)
 
#define SWD_CMD_DITMS_DATA_BITS   16
 
#define SWD_CMD_STATUS_ACK   GENMASK(2, 0)
 
#define SWD_CMD_STATUS_CMD_CNTR   GENMASK(31, 16)
 
#define SWD_CMD_STATUS_PARITY_ERR   BIT(4)
 
#define SWD_CMD_STATUS_WAIT_TIMEOUT   BIT(3)
 
#define SWD_CMD_TIMING_RESERVED   GENMASK(31, 19)
 
#define SWD_CMD_TIMING_RETRY_COUNT   GENMASK(15, 0)
 
#define SWD_CMD_TIMING_TURNAROUND_TIME   GENMASK(17, 16)
 
#define SWD_CMD_TIMING_WAIT_35_IF_ERR   BIT(18)
 

Functions

static int eud_bulk_read (struct eud_device *dev, uint8_t *buf, int len)
 
static int eud_bulk_write (struct eud_device *dev, const uint8_t *buf, int len)
 
static void eud_close (struct eud_device *dev)
 
static int eud_ctl_enable_swd (void)
 
static int eud_ditms_sequence (const uint8_t *seq, unsigned int bit_len)
 
static int eud_ditms_u16 (uint16_t tms, uint16_t count)
 
static int eud_init (void)
 
static int eud_khz (int khz, int *jtag_speed)
 
static int eud_libusb_reinit (void)
 
static int eud_op (struct eud_device *dev, uint8_t opcode, uint32_t payload)
 
static int eud_op_no_payload (struct eud_device *dev, uint8_t opcode)
 
static int eud_open (uint16_t pid, struct eud_device *dev)
 
static int eud_open_inner (uint16_t pid, struct eud_device *dev, bool quiet)
 
static int eud_open_swd_after_enable (void)
 
static int eud_quit (void)
 
static int eud_reopen_swd (void)
 
static int eud_reset (int trst, int srst)
 
static int eud_speed (int speed)
 
static int eud_speed_div (int speed, int *khz)
 
static int eud_swd_bitbang (uint32_t payload)
 
static int eud_swd_flush_queue (void)
 
static int eud_swd_init (void)
 
static int eud_swd_init_defaults (void)
 
static int eud_swd_prepare (void)
 
static int eud_swd_queue_transfer (uint8_t cmd, uint32_t value, uint32_t *read_value, uint32_t ap_delay_clk)
 
static int eud_swd_read_reg (uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk)
 
static int eud_swd_run_queue (void)
 
static int eud_swd_set_speed_index (int speed_index)
 
static int eud_swd_switch_seq (enum swd_special_seq seq)
 
static unsigned int eud_swd_transfer_in_size (const struct eud_swd_transfer *transfer)
 
static unsigned int eud_swd_transfer_out_size (const struct eud_swd_transfer *transfer)
 
static int eud_swd_write_reg (uint8_t cmd, uint32_t value, uint32_t ap_delay_clk)
 

Variables

struct adapter_driver eud_adapter_driver
 
static struct eud_device eud_ctl
 
static libusb_context * eud_libusb_ctx
 
static struct eud_swd_transfer eud_queue [EUD_SWD_BUFFER_SIZE]
 
static unsigned int eud_queue_in_len
 
static unsigned int eud_queue_len
 
static unsigned int eud_queue_out_len
 
static int eud_speed_index = 0xa
 
static const unsigned int eud_speed_khz []
 
static struct eud_device eud_swd
 
static const struct swd_driver eud_swd_driver
 

Macro Definition Documentation

◆ EUD_CTL_ACC_TDO_SEL

#define EUD_CTL_ACC_TDO_SEL   BIT(17)

Definition at line 55 of file eud.c.

◆ EUD_CTL_CMD_CTLOUT_CLR

#define EUD_CTL_CMD_CTLOUT_CLR   8

Definition at line 47 of file eud.c.

◆ EUD_CTL_CMD_CTLOUT_SET

#define EUD_CTL_CMD_CTLOUT_SET   7

Definition at line 46 of file eud.c.

◆ EUD_CTL_DAP_MUX_SEL

#define EUD_CTL_DAP_MUX_SEL   BIT(10)

Definition at line 54 of file eud.c.

◆ EUD_CTL_DAP_SWDO_SEL

#define EUD_CTL_DAP_SWDO_SEL   BIT(20)

Definition at line 58 of file eud.c.

◆ EUD_CTL_DAP_TDO_SEL

#define EUD_CTL_DAP_TDO_SEL   BIT(18)

Definition at line 56 of file eud.c.

◆ EUD_CTL_GPIO_JTAG_SEL

#define EUD_CTL_GPIO_JTAG_SEL   BIT(7)

Definition at line 53 of file eud.c.

◆ EUD_CTL_JTAG_PERIPH_EN

#define EUD_CTL_JTAG_PERIPH_EN   BIT(4)

Definition at line 51 of file eud.c.

◆ EUD_CTL_MTAP_TDO_SEL

#define EUD_CTL_MTAP_TDO_SEL   BIT(19)

Definition at line 57 of file eud.c.

◆ EUD_CTL_PID

#define EUD_CTL_PID   0x9501

Definition at line 24 of file eud.c.

◆ EUD_CTL_RCTLR_SRST_N

#define EUD_CTL_RCTLR_SRST_N   BIT(0)

Definition at line 49 of file eud.c.

◆ EUD_CTL_SWD_ON_CLEAR

#define EUD_CTL_SWD_ON_CLEAR
Value:
EUD_CTL_GPIO_JTAG_SEL | \
EUD_CTL_ACC_TDO_SEL | \
EUD_CTL_DAP_TDO_SEL | \
EUD_CTL_MTAP_TDO_SEL)
#define EUD_CTL_JTAG_PERIPH_EN
Definition: eud.c:51

Definition at line 60 of file eud.c.

◆ EUD_CTL_SWD_ON_SET

#define EUD_CTL_SWD_ON_SET
Value:
EUD_CTL_SWD_PERIPH_EN | \
EUD_CTL_VDDMIN_TCK_EN | \
EUD_CTL_DAP_MUX_SEL | \
EUD_CTL_DAP_SWDO_SEL)
#define EUD_CTL_RCTLR_SRST_N
Definition: eud.c:49

Definition at line 65 of file eud.c.

◆ EUD_CTL_SWD_PERIPH_EN

#define EUD_CTL_SWD_PERIPH_EN   BIT(2)

Definition at line 50 of file eud.c.

◆ EUD_CTL_VDDMIN_TCK_EN

#define EUD_CTL_VDDMIN_TCK_EN   BIT(6)

Definition at line 52 of file eud.c.

◆ EUD_EP_IN

#define EUD_EP_IN   0x81

Definition at line 28 of file eud.c.

◆ EUD_EP_OUT

#define EUD_EP_OUT   0x02

Definition at line 27 of file eud.c.

◆ EUD_INTERFACE

#define EUD_INTERFACE   0

Definition at line 26 of file eud.c.

◆ EUD_SWD_BB_DAP_TRST_N

#define EUD_SWD_BB_DAP_TRST_N   BIT(6)

Definition at line 73 of file eud.c.

◆ EUD_SWD_BB_GPIO_SRST_N

#define EUD_SWD_BB_GPIO_SRST_N   BIT(4)

Definition at line 71 of file eud.c.

◆ EUD_SWD_BB_GPIO_TRST_N

#define EUD_SWD_BB_GPIO_TRST_N   BIT(5)

Definition at line 72 of file eud.c.

◆ EUD_SWD_BB_RCTLR_SRST_N

#define EUD_SWD_BB_RCTLR_SRST_N   BIT(2)

Definition at line 70 of file eud.c.

◆ EUD_SWD_BB_RESET_DEFAULT

#define EUD_SWD_BB_RESET_DEFAULT
Value:
EUD_SWD_BB_GPIO_SRST_N | \
EUD_SWD_BB_GPIO_TRST_N | \
EUD_SWD_BB_DAP_TRST_N)
#define EUD_SWD_BB_RCTLR_SRST_N
Definition: eud.c:70

Definition at line 74 of file eud.c.

◆ EUD_SWD_BUFFER_SIZE

#define EUD_SWD_BUFFER_SIZE   32

Definition at line 37 of file eud.c.

◆ EUD_SWD_CMD_BITBANG

#define EUD_SWD_CMD_BITBANG   4

Definition at line 85 of file eud.c.

◆ EUD_SWD_CMD_DELAY

#define EUD_SWD_CMD_DELAY   3

Definition at line 81 of file eud.c.

◆ EUD_SWD_CMD_DITMS

#define EUD_SWD_CMD_DITMS   5

Definition at line 86 of file eud.c.

◆ EUD_SWD_CMD_FLUSH

#define EUD_SWD_CMD_FLUSH   1

Definition at line 79 of file eud.c.

◆ EUD_SWD_CMD_FREQ

#define EUD_SWD_CMD_FREQ   2

Definition at line 80 of file eud.c.

◆ EUD_SWD_CMD_PERIPH_RST

#define EUD_SWD_CMD_PERIPH_RST   8

Definition at line 114 of file eud.c.

◆ EUD_SWD_CMD_STATUS

#define EUD_SWD_CMD_STATUS   7

Definition at line 101 of file eud.c.

◆ EUD_SWD_CMD_TIMING

#define EUD_SWD_CMD_TIMING   6

Definition at line 91 of file eud.c.

◆ EUD_SWD_DITMS_MAX_BITS

#define EUD_SWD_DITMS_MAX_BITS   (FIELD_GET(SWD_CMD_DITMS_COUNT, SWD_CMD_DITMS_COUNT) + 1)

Definition at line 90 of file eud.c.

◆ EUD_SWD_PID

#define EUD_SWD_PID   0x9504

Definition at line 25 of file eud.c.

◆ EUD_SWD_QUEUE_TRAILER_SIZE

#define EUD_SWD_QUEUE_TRAILER_SIZE   2

Definition at line 43 of file eud.c.

◆ EUD_SWD_STATUS_SIZE

#define EUD_SWD_STATUS_SIZE   4

Definition at line 44 of file eud.c.

◆ EUD_USB_TIMEOUT_MS

#define EUD_USB_TIMEOUT_MS   6000

Definition at line 29 of file eud.c.

◆ EUD_VID

#define EUD_VID   0x05c6

Definition at line 23 of file eud.c.

◆ SWD_CMD_DELAY_RESERVED

#define SWD_CMD_DELAY_RESERVED   GENMASK(31, 8)

Definition at line 84 of file eud.c.

◆ SWD_CMD_DELAY_TIME

#define SWD_CMD_DELAY_TIME   GENMASK(7, 0)

Definition at line 83 of file eud.c.

◆ SWD_CMD_DITMS_COUNT

#define SWD_CMD_DITMS_COUNT   GENMASK(31, 16)

Definition at line 89 of file eud.c.

◆ SWD_CMD_DITMS_DATA

#define SWD_CMD_DITMS_DATA   GENMASK(15, 0)

Definition at line 87 of file eud.c.

◆ SWD_CMD_DITMS_DATA_BITS

#define SWD_CMD_DITMS_DATA_BITS   16

Definition at line 88 of file eud.c.

◆ SWD_CMD_STATUS_ACK

#define SWD_CMD_STATUS_ACK   GENMASK(2, 0)

Definition at line 105 of file eud.c.

◆ SWD_CMD_STATUS_CMD_CNTR

#define SWD_CMD_STATUS_CMD_CNTR   GENMASK(31, 16)

Definition at line 113 of file eud.c.

◆ SWD_CMD_STATUS_PARITY_ERR

#define SWD_CMD_STATUS_PARITY_ERR   BIT(4)

Definition at line 109 of file eud.c.

◆ SWD_CMD_STATUS_WAIT_TIMEOUT

#define SWD_CMD_STATUS_WAIT_TIMEOUT   BIT(3)

Definition at line 107 of file eud.c.

◆ SWD_CMD_TIMING_RESERVED

#define SWD_CMD_TIMING_RESERVED   GENMASK(31, 19)

Definition at line 100 of file eud.c.

◆ SWD_CMD_TIMING_RETRY_COUNT

#define SWD_CMD_TIMING_RETRY_COUNT   GENMASK(15, 0)

Definition at line 94 of file eud.c.

◆ SWD_CMD_TIMING_TURNAROUND_TIME

#define SWD_CMD_TIMING_TURNAROUND_TIME   GENMASK(17, 16)

Definition at line 96 of file eud.c.

◆ SWD_CMD_TIMING_WAIT_35_IF_ERR

#define SWD_CMD_TIMING_WAIT_35_IF_ERR   BIT(18)

Definition at line 99 of file eud.c.

Function Documentation

◆ eud_bulk_read()

static int eud_bulk_read ( struct eud_device dev,
uint8_t *  buf,
int  len 
)
static

◆ eud_bulk_write()

static int eud_bulk_write ( struct eud_device dev,
const uint8_t *  buf,
int  len 
)
static

◆ eud_close()

static void eud_close ( struct eud_device dev)
static

◆ eud_ctl_enable_swd()

static int eud_ctl_enable_swd ( void  )
static

◆ eud_ditms_sequence()

static int eud_ditms_sequence ( const uint8_t *  seq,
unsigned int  bit_len 
)
static

◆ eud_ditms_u16()

static int eud_ditms_u16 ( uint16_t  tms,
uint16_t  count 
)
static

◆ eud_init()

◆ eud_khz()

static int eud_khz ( int  khz,
int *  jtag_speed 
)
static

Definition at line 740 of file eud.c.

References ARRAY_SIZE, ERROR_OK, and eud_speed_khz.

◆ eud_libusb_reinit()

static int eud_libusb_reinit ( void  )
static

Definition at line 172 of file eud.c.

References ERROR_FAIL, ERROR_OK, eud_libusb_ctx, and LOG_ERROR.

Referenced by eud_open_swd_after_enable().

◆ eud_op()

static int eud_op ( struct eud_device dev,
uint8_t  opcode,
uint32_t  payload 
)
static

◆ eud_op_no_payload()

static int eud_op_no_payload ( struct eud_device dev,
uint8_t  opcode 
)
static

Definition at line 260 of file eud.c.

References eud_bulk_write().

Referenced by eud_swd_init_defaults().

◆ eud_open()

static int eud_open ( uint16_t  pid,
struct eud_device dev 
)
static

Definition at line 208 of file eud.c.

References eud_open_inner().

Referenced by eud_ctl_enable_swd().

◆ eud_open_inner()

static int eud_open_inner ( uint16_t  pid,
struct eud_device dev,
bool  quiet 
)
static

◆ eud_open_swd_after_enable()

static int eud_open_swd_after_enable ( void  )
static

◆ eud_quit()

static int eud_quit ( void  )
static

Definition at line 700 of file eud.c.

References ERROR_OK, eud_close(), eud_ctl, eud_libusb_ctx, eud_swd, and NULL.

◆ eud_reopen_swd()

static int eud_reopen_swd ( void  )
static

Definition at line 304 of file eud.c.

References eud_close(), eud_open_swd_after_enable(), and eud_swd.

Referenced by eud_init(), and eud_swd_init().

◆ eud_reset()

static int eud_reset ( int  trst,
int  srst 
)
static

◆ eud_speed()

static int eud_speed ( int  speed)
static

◆ eud_speed_div()

static int eud_speed_div ( int  speed,
int *  khz 
)
static

Definition at line 755 of file eud.c.

◆ eud_swd_bitbang()

static int eud_swd_bitbang ( uint32_t  payload)
static

Definition at line 344 of file eud.c.

References ERROR_OK, eud_bulk_read(), eud_bulk_write(), eud_swd, EUD_SWD_CMD_BITBANG, EUD_SWD_CMD_FLUSH, and h_u32_to_le().

Referenced by eud_reset().

◆ eud_swd_flush_queue()

◆ eud_swd_init()

static int eud_swd_init ( void  )
static

Definition at line 440 of file eud.c.

References ERROR_OK, eud_reopen_swd(), eud_swd, eud_swd_prepare(), and eud_device::handle.

◆ eud_swd_init_defaults()

◆ eud_swd_prepare()

static int eud_swd_prepare ( void  )
static

Definition at line 370 of file eud.c.

References eud_swd_init_defaults().

Referenced by eud_init(), and eud_swd_init().

◆ eud_swd_queue_transfer()

◆ eud_swd_read_reg()

static int eud_swd_read_reg ( uint8_t  cmd,
uint32_t *  value,
uint32_t  ap_delay_clk 
)
static

◆ eud_swd_run_queue()

static int eud_swd_run_queue ( void  )
static

Definition at line 652 of file eud.c.

References ERROR_OK, eud_queue_len, and eud_swd_flush_queue().

◆ eud_swd_set_speed_index()

static int eud_swd_set_speed_index ( int  speed_index)
static

◆ eud_swd_switch_seq()

◆ eud_swd_transfer_in_size()

static unsigned int eud_swd_transfer_in_size ( const struct eud_swd_transfer transfer)
static

Definition at line 468 of file eud.c.

References eud_swd_transfer::cmd, and SWD_CMD_RNW.

Referenced by eud_swd_queue_transfer().

◆ eud_swd_transfer_out_size()

static unsigned int eud_swd_transfer_out_size ( const struct eud_swd_transfer transfer)
static

Definition at line 458 of file eud.c.

References eud_swd_transfer::ap_delay_clk, eud_swd_transfer::cmd, size, and SWD_CMD_RNW.

Referenced by eud_swd_queue_transfer().

◆ eud_swd_write_reg()

static int eud_swd_write_reg ( uint8_t  cmd,
uint32_t  value,
uint32_t  ap_delay_clk 
)
static

Variable Documentation

◆ eud_adapter_driver

struct adapter_driver eud_adapter_driver
Initial value:
= {
.name = "eud",
.transport_ids = TRANSPORT_SWD,
.transport_preferred_id = TRANSPORT_SWD,
.init = eud_init,
.quit = eud_quit,
.reset = eud_reset,
.speed = eud_speed,
.khz = eud_khz,
.speed_div = eud_speed_div,
.swd_ops = &eud_swd_driver,
}
static const struct swd_driver eud_swd_driver
Definition: eud.c:764
static int eud_speed_div(int speed, int *khz)
Definition: eud.c:755
static int eud_khz(int khz, int *jtag_speed)
Definition: eud.c:740
static int eud_reset(int trst, int srst)
Definition: eud.c:713
static int eud_quit(void)
Definition: eud.c:700
static int eud_init(void)
Definition: eud.c:660
static int eud_speed(int speed)
Definition: eud.c:725
#define TRANSPORT_SWD
Definition: transport.h:20

Definition at line 755 of file eud.c.

◆ eud_ctl

struct eud_device eud_ctl
static

Definition at line 129 of file eud.c.

Referenced by eud_ctl_enable_swd(), eud_init(), and eud_quit().

◆ eud_libusb_ctx

libusb_context* eud_libusb_ctx
static

Definition at line 129 of file eud.c.

Referenced by eud_init(), eud_libusb_reinit(), eud_open_inner(), and eud_quit().

◆ eud_queue

struct eud_swd_transfer eud_queue[EUD_SWD_BUFFER_SIZE]
static

Definition at line 129 of file eud.c.

Referenced by eud_swd_flush_queue(), and eud_swd_queue_transfer().

◆ eud_queue_in_len

unsigned int eud_queue_in_len
static

Definition at line 139 of file eud.c.

Referenced by eud_init(), eud_swd_flush_queue(), and eud_swd_queue_transfer().

◆ eud_queue_len

unsigned int eud_queue_len
static

Definition at line 137 of file eud.c.

Referenced by eud_init(), eud_swd_flush_queue(), eud_swd_queue_transfer(), and eud_swd_run_queue().

◆ eud_queue_out_len

unsigned int eud_queue_out_len
static

Definition at line 138 of file eud.c.

Referenced by eud_init(), eud_swd_flush_queue(), and eud_swd_queue_transfer().

◆ eud_speed_index

int eud_speed_index = 0xa
static

Definition at line 140 of file eud.c.

Referenced by eud_speed(), eud_swd_init_defaults(), and eud_swd_set_speed_index().

◆ eud_speed_khz

const unsigned int eud_speed_khz[]
static
Initial value:
= {
120000,
80000,
60000,
40000,
30000,
15000,
7500,
3750,
1875,
938,
469,
234,
117,
}

Definition at line 142 of file eud.c.

Referenced by eud_khz(), eud_speed(), and eud_swd_set_speed_index().

◆ eud_swd

◆ eud_swd_driver

const struct swd_driver eud_swd_driver
static
Initial value:
= {
.init = eud_swd_init,
.switch_seq = eud_swd_switch_seq,
.read_reg = eud_swd_read_reg,
.write_reg = eud_swd_write_reg,
}
static int eud_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk)
Definition: eud.c:522
static int eud_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk)
Definition: eud.c:516
static int eud_swd_switch_seq(enum swd_special_seq seq)
Definition: eud.c:410
static int eud_swd_init(void)
Definition: eud.c:440
static int eud_swd_run_queue(void)
Definition: eud.c:652

Definition at line 755 of file eud.c.