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_DAP_TRST_N   BIT(3)
 
#define EUD_CTL_GPIO_JTAG_SEL   BIT(7)
 
#define EUD_CTL_GPIO_SRST_N   BIT(1)
 
#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_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_MAX_QUEUED_TRANSFERS   64
 
#define EUD_SWD_PID   0x9504
 
#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_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_init (void)
 
static int eud_swd_init_defaults (void)
 
static int eud_swd_prepare (void)
 
static void 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 void 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_MAX_QUEUED_TRANSFERS]
 
static unsigned int eud_queue_len
 
static int eud_queued_retval = ERROR_OK
 
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 43 of file eud.c.

◆ EUD_CTL_CMD_CTLOUT_CLR

#define EUD_CTL_CMD_CTLOUT_CLR   8

Definition at line 33 of file eud.c.

◆ EUD_CTL_CMD_CTLOUT_SET

#define EUD_CTL_CMD_CTLOUT_SET   7

Definition at line 32 of file eud.c.

◆ EUD_CTL_DAP_MUX_SEL

#define EUD_CTL_DAP_MUX_SEL   BIT(10)

Definition at line 42 of file eud.c.

◆ EUD_CTL_DAP_SWDO_SEL

#define EUD_CTL_DAP_SWDO_SEL   BIT(20)

Definition at line 46 of file eud.c.

◆ EUD_CTL_DAP_TDO_SEL

#define EUD_CTL_DAP_TDO_SEL   BIT(18)

Definition at line 44 of file eud.c.

◆ EUD_CTL_DAP_TRST_N

#define EUD_CTL_DAP_TRST_N   BIT(3)

Definition at line 38 of file eud.c.

◆ EUD_CTL_GPIO_JTAG_SEL

#define EUD_CTL_GPIO_JTAG_SEL   BIT(7)

Definition at line 41 of file eud.c.

◆ EUD_CTL_GPIO_SRST_N

#define EUD_CTL_GPIO_SRST_N   BIT(1)

Definition at line 36 of file eud.c.

◆ EUD_CTL_JTAG_PERIPH_EN

#define EUD_CTL_JTAG_PERIPH_EN   BIT(4)

Definition at line 39 of file eud.c.

◆ EUD_CTL_MTAP_TDO_SEL

#define EUD_CTL_MTAP_TDO_SEL   BIT(19)

Definition at line 45 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 35 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:39

Definition at line 48 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:35

Definition at line 53 of file eud.c.

◆ EUD_CTL_SWD_PERIPH_EN

#define EUD_CTL_SWD_PERIPH_EN   BIT(2)

Definition at line 37 of file eud.c.

◆ EUD_CTL_VDDMIN_TCK_EN

#define EUD_CTL_VDDMIN_TCK_EN   BIT(6)

Definition at line 40 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 61 of file eud.c.

◆ EUD_SWD_BB_GPIO_SRST_N

#define EUD_SWD_BB_GPIO_SRST_N   BIT(4)

Definition at line 59 of file eud.c.

◆ EUD_SWD_BB_GPIO_TRST_N

#define EUD_SWD_BB_GPIO_TRST_N   BIT(5)

Definition at line 60 of file eud.c.

◆ EUD_SWD_BB_RCTLR_SRST_N

#define EUD_SWD_BB_RCTLR_SRST_N   BIT(2)

Definition at line 58 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:58

Definition at line 62 of file eud.c.

◆ EUD_SWD_CMD_BITBANG

#define EUD_SWD_CMD_BITBANG   4

Definition at line 73 of file eud.c.

◆ EUD_SWD_CMD_DELAY

#define EUD_SWD_CMD_DELAY   3

Definition at line 69 of file eud.c.

◆ EUD_SWD_CMD_DITMS

#define EUD_SWD_CMD_DITMS   5

Definition at line 74 of file eud.c.

◆ EUD_SWD_CMD_FLUSH

#define EUD_SWD_CMD_FLUSH   1

Definition at line 67 of file eud.c.

◆ EUD_SWD_CMD_FREQ

#define EUD_SWD_CMD_FREQ   2

Definition at line 68 of file eud.c.

◆ EUD_SWD_CMD_PERIPH_RST

#define EUD_SWD_CMD_PERIPH_RST   8

Definition at line 90 of file eud.c.

◆ EUD_SWD_CMD_STATUS

#define EUD_SWD_CMD_STATUS   7

Definition at line 89 of file eud.c.

◆ EUD_SWD_CMD_TIMING

#define EUD_SWD_CMD_TIMING   6

Definition at line 79 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 78 of file eud.c.

◆ EUD_SWD_MAX_QUEUED_TRANSFERS

#define EUD_SWD_MAX_QUEUED_TRANSFERS   64

Definition at line 30 of file eud.c.

◆ EUD_SWD_PID

#define EUD_SWD_PID   0x9504

Definition at line 25 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 72 of file eud.c.

◆ SWD_CMD_DELAY_TIME

#define SWD_CMD_DELAY_TIME   GENMASK(7, 0)

Definition at line 71 of file eud.c.

◆ SWD_CMD_DITMS_COUNT

#define SWD_CMD_DITMS_COUNT   GENMASK(31, 16)

Definition at line 77 of file eud.c.

◆ SWD_CMD_DITMS_DATA

#define SWD_CMD_DITMS_DATA   GENMASK(15, 0)

Definition at line 75 of file eud.c.

◆ SWD_CMD_DITMS_DATA_BITS

#define SWD_CMD_DITMS_DATA_BITS   16

Definition at line 76 of file eud.c.

◆ SWD_CMD_TIMING_RESERVED

#define SWD_CMD_TIMING_RESERVED   GENMASK(31, 19)

Definition at line 88 of file eud.c.

◆ SWD_CMD_TIMING_RETRY_COUNT

#define SWD_CMD_TIMING_RETRY_COUNT   GENMASK(15, 0)

Definition at line 82 of file eud.c.

◆ SWD_CMD_TIMING_TURNAROUND_TIME

#define SWD_CMD_TIMING_TURNAROUND_TIME   GENMASK(17, 16)

Definition at line 84 of file eud.c.

◆ SWD_CMD_TIMING_WAIT_35_IF_ERR

#define SWD_CMD_TIMING_WAIT_35_IF_ERR   BIT(18)

Definition at line 87 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()

static int eud_init ( void  )
static

◆ eud_khz()

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

Definition at line 609 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 143 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 231 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 179 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 569 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 275 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 624 of file eud.c.

◆ eud_swd_bitbang()

static int eud_swd_bitbang ( uint32_t  payload)
static

Definition at line 315 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_init()

static int eud_swd_init ( void  )
static

Definition at line 411 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 341 of file eud.c.

References eud_swd_init_defaults().

Referenced by eud_init(), and eud_swd_init().

◆ eud_swd_read_reg()

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

◆ eud_swd_run_queue()

◆ eud_swd_set_speed_index()

static int eud_swd_set_speed_index ( int  speed_index)
static

◆ eud_swd_switch_seq()

◆ eud_swd_write_reg()

static void 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:633
static int eud_speed_div(int speed, int *khz)
Definition: eud.c:624
static int eud_khz(int khz, int *jtag_speed)
Definition: eud.c:609
static int eud_reset(int trst, int srst)
Definition: eud.c:582
static int eud_quit(void)
Definition: eud.c:569
static int eud_init(void)
Definition: eud.c:533
static int eud_speed(int speed)
Definition: eud.c:594
#define TRANSPORT_SWD
Definition: transport.h:20

Definition at line 624 of file eud.c.

◆ eud_ctl

struct eud_device eud_ctl
static

Definition at line 105 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 105 of file eud.c.

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

◆ eud_queue

Definition at line 105 of file eud.c.

Referenced by eud_swd_read_reg(), eud_swd_run_queue(), and eud_swd_write_reg().

◆ eud_queue_len

unsigned int eud_queue_len
static

Definition at line 109 of file eud.c.

Referenced by eud_swd_read_reg(), eud_swd_run_queue(), and eud_swd_write_reg().

◆ eud_queued_retval

int eud_queued_retval = ERROR_OK
static

Definition at line 110 of file eud.c.

Referenced by eud_swd_read_reg(), eud_swd_run_queue(), and eud_swd_write_reg().

◆ eud_speed_index

int eud_speed_index = 0xa
static

Definition at line 111 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 113 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_switch_seq(enum swd_special_seq seq)
Definition: eud.c:381
static int eud_swd_init(void)
Definition: eud.c:411
static void eud_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk)
Definition: eud.c:427
static void eud_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk)
Definition: eud.c:443
static int eud_swd_run_queue(void)
Definition: eud.c:459

Definition at line 624 of file eud.c.