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

Go to the source code of this file.

Data Structures

struct  cklink_ctx
 

Macros

#define CKLINK_CLK_DIV_MAX   0xff
 
#define CKLINK_CLK_DIV_MIN   CKLINK_SR0_RUN_CLK_BYTE
 
#define CKLINK_CLK_SOURCE_KHZ   48000
 
#define CKLINK_CSR(clk, mode)   (((uint32_t)(mode) << 24) | (clk))
 
#define CKLINK_EP_IN   0x81
 
#define CKLINK_EP_OUT   0x02
 
#define CKLINK_FRAME_END   0x16
 
#define CKLINK_FRAME_OVERHEAD   4
 
#define CKLINK_FRAME_START   0x68
 
#define CKLINK_MAX_SCAN_BITS   255
 
#define CKLINK_MAX_SCAN_BYTES   32
 
#define CKLINK_OP_JTAG_BATCH   0x88
 
#define CKLINK_OP_SELFREG_READ   0x87
 
#define CKLINK_OP_SELFREG_WRITE   0x06
 
#define CKLINK_PID_LITE_V2   0xb210
 
#define CKLINK_PLACEHOLDER_IR_BITS   5
 
#define CKLINK_PLACEHOLDER_IR_VALUE   0x01
 
#define CKLINK_RESP_PAYLOAD_OFFSET   2
 
#define CKLINK_SELFREG_BYTES   4
 
#define CKLINK_SR0_MODE_CJTAG   0x61
 
#define CKLINK_SR0_MODE_JTAG   0x60
 
#define CKLINK_SR0_RUN_CLK_BYTE   0x12
 
#define CKLINK_SR0_SETUP_CLK_BYTE   0x17
 
#define CKLINK_SR1_INIT_VALUE   0x000003e8
 
#define CKLINK_SR8_INIT_VALUE   0x00622250
 
#define CKLINK_SR_CSR   0
 
#define CKLINK_SR_JTAG_CONFIG   8
 
#define CKLINK_SR_MTCR_WAIT   1
 
#define CKLINK_USB_BUF_SIZE   2048
 
#define CKLINK_USB_INTERFACE   0
 
#define CKLINK_USB_TIMEOUT_MS   1000
 
#define CKLINK_VID_BOUFFALO   0x42bf
 
#define CKLINK_VID_THEAD   0x32bf
 

Functions

static uint8_t cklink_checksum (const uint8_t *buf, unsigned int len)
 
static int cklink_execute_queue (struct jtag_command *cmd_queue)
 
static int cklink_execute_reset (struct cklink_ctx *ck, struct jtag_command *cmd)
 
static int cklink_execute_runtest (struct cklink_ctx *ck, struct jtag_command *cmd)
 
static int cklink_execute_scan (struct cklink_ctx *ck, struct jtag_command *cmd)
 
static int cklink_execute_stableclocks (struct cklink_ctx *ck, struct jtag_command *cmd)
 
static int cklink_execute_tlr_reset (struct cklink_ctx *ck)
 
static int cklink_execute_tms (struct jtag_command *cmd)
 
static int cklink_flush_pending_ir (struct cklink_ctx *ck)
 
static unsigned int cklink_frame_end (struct cklink_ctx *ck, unsigned int pos)
 
static unsigned int cklink_frame_start (struct cklink_ctx *ck, uint8_t opcode)
 
static int cklink_idle_cycles (struct cklink_ctx *ck, unsigned int num_bits)
 
static int cklink_init (void)
 
static int cklink_jtag_scan (struct cklink_ctx *ck, unsigned int ir_bits, const uint8_t *ir_tdi, uint8_t *ir_tdo, unsigned int dr_bits, const uint8_t *dr_tdi, uint8_t *dr_tdo)
 
static int cklink_khz (int khz, int *jtag_speed)
 
static uint8_t cklink_khz_to_div (int khz)
 
static int cklink_probe_init (struct cklink_ctx *ck)
 
static int cklink_quit (void)
 
static int cklink_selfreg_read (struct cklink_ctx *ck, uint8_t reg, uint8_t *value)
 
static int cklink_selfreg_write (struct cklink_ctx *ck, uint8_t reg, const uint8_t *value)
 
static int cklink_speed (int speed)
 
static int cklink_speed_div (int speed, int *khz)
 
static int cklink_usb_xfer (struct cklink_ctx *ck, uint8_t opcode, unsigned int txlen, unsigned int *rxlen)
 
static int cklink_write_csr (struct cklink_ctx *ck, uint8_t clk, uint8_t mode)
 

Variables

struct adapter_driver cklink_adapter_driver
 
static const uint16_t cklink_default_pids []
 
static const uint16_t cklink_default_vids []
 
static struct cklink_ctxcklink_handle
 
static struct jtag_interface cklink_jtag_interface
 

Macro Definition Documentation

◆ CKLINK_CLK_DIV_MAX

#define CKLINK_CLK_DIV_MAX   0xff

Definition at line 76 of file cklink.c.

◆ CKLINK_CLK_DIV_MIN

#define CKLINK_CLK_DIV_MIN   CKLINK_SR0_RUN_CLK_BYTE

Definition at line 75 of file cklink.c.

◆ CKLINK_CLK_SOURCE_KHZ

#define CKLINK_CLK_SOURCE_KHZ   48000

Definition at line 74 of file cklink.c.

◆ CKLINK_CSR

#define CKLINK_CSR (   clk,
  mode 
)    (((uint32_t)(mode) << 24) | (clk))

Definition at line 78 of file cklink.c.

◆ CKLINK_EP_IN

#define CKLINK_EP_IN   0x81

Definition at line 36 of file cklink.c.

◆ CKLINK_EP_OUT

#define CKLINK_EP_OUT   0x02

Definition at line 35 of file cklink.c.

◆ CKLINK_FRAME_END

#define CKLINK_FRAME_END   0x16

Definition at line 42 of file cklink.c.

◆ CKLINK_FRAME_OVERHEAD

#define CKLINK_FRAME_OVERHEAD   4

Definition at line 45 of file cklink.c.

◆ CKLINK_FRAME_START

#define CKLINK_FRAME_START   0x68

Definition at line 41 of file cklink.c.

◆ CKLINK_MAX_SCAN_BITS

#define CKLINK_MAX_SCAN_BITS   255

Definition at line 81 of file cklink.c.

◆ CKLINK_MAX_SCAN_BYTES

#define CKLINK_MAX_SCAN_BYTES   32

Definition at line 82 of file cklink.c.

◆ CKLINK_OP_JTAG_BATCH

#define CKLINK_OP_JTAG_BATCH   0x88

Definition at line 51 of file cklink.c.

◆ CKLINK_OP_SELFREG_READ

#define CKLINK_OP_SELFREG_READ   0x87

Definition at line 50 of file cklink.c.

◆ CKLINK_OP_SELFREG_WRITE

#define CKLINK_OP_SELFREG_WRITE   0x06

Definition at line 49 of file cklink.c.

◆ CKLINK_PID_LITE_V2

#define CKLINK_PID_LITE_V2   0xb210

Definition at line 32 of file cklink.c.

◆ CKLINK_PLACEHOLDER_IR_BITS

#define CKLINK_PLACEHOLDER_IR_BITS   5

Definition at line 85 of file cklink.c.

◆ CKLINK_PLACEHOLDER_IR_VALUE

#define CKLINK_PLACEHOLDER_IR_VALUE   0x01

Definition at line 86 of file cklink.c.

◆ CKLINK_RESP_PAYLOAD_OFFSET

#define CKLINK_RESP_PAYLOAD_OFFSET   2

Definition at line 46 of file cklink.c.

◆ CKLINK_SELFREG_BYTES

#define CKLINK_SELFREG_BYTES   4

Definition at line 57 of file cklink.c.

◆ CKLINK_SR0_MODE_CJTAG

#define CKLINK_SR0_MODE_CJTAG   0x61

Definition at line 69 of file cklink.c.

◆ CKLINK_SR0_MODE_JTAG

#define CKLINK_SR0_MODE_JTAG   0x60

Definition at line 68 of file cklink.c.

◆ CKLINK_SR0_RUN_CLK_BYTE

#define CKLINK_SR0_RUN_CLK_BYTE   0x12

Definition at line 67 of file cklink.c.

◆ CKLINK_SR0_SETUP_CLK_BYTE

#define CKLINK_SR0_SETUP_CLK_BYTE   0x17

Definition at line 66 of file cklink.c.

◆ CKLINK_SR1_INIT_VALUE

#define CKLINK_SR1_INIT_VALUE   0x000003e8

Definition at line 70 of file cklink.c.

◆ CKLINK_SR8_INIT_VALUE

#define CKLINK_SR8_INIT_VALUE   0x00622250

Definition at line 71 of file cklink.c.

◆ CKLINK_SR_CSR

#define CKLINK_SR_CSR   0

Definition at line 54 of file cklink.c.

◆ CKLINK_SR_JTAG_CONFIG

#define CKLINK_SR_JTAG_CONFIG   8

Definition at line 56 of file cklink.c.

◆ CKLINK_SR_MTCR_WAIT

#define CKLINK_SR_MTCR_WAIT   1

Definition at line 55 of file cklink.c.

◆ CKLINK_USB_BUF_SIZE

#define CKLINK_USB_BUF_SIZE   2048

Definition at line 38 of file cklink.c.

◆ CKLINK_USB_INTERFACE

#define CKLINK_USB_INTERFACE   0

Definition at line 34 of file cklink.c.

◆ CKLINK_USB_TIMEOUT_MS

#define CKLINK_USB_TIMEOUT_MS   1000

Definition at line 37 of file cklink.c.

◆ CKLINK_VID_BOUFFALO

#define CKLINK_VID_BOUFFALO   0x42bf

Definition at line 30 of file cklink.c.

◆ CKLINK_VID_THEAD

#define CKLINK_VID_THEAD   0x32bf

Definition at line 31 of file cklink.c.

Function Documentation

◆ cklink_checksum()

static uint8_t cklink_checksum ( const uint8_t *  buf,
unsigned int  len 
)
static

Definition at line 118 of file cklink.c.

Referenced by cklink_frame_end(), and cklink_usb_xfer().

◆ cklink_execute_queue()

◆ cklink_execute_reset()

static int cklink_execute_reset ( struct cklink_ctx ck,
struct jtag_command cmd 
)
static

Definition at line 524 of file cklink.c.

References cklink_execute_tlr_reset(), cmd, and ERROR_OK.

Referenced by cklink_execute_queue().

◆ cklink_execute_runtest()

static int cklink_execute_runtest ( struct cklink_ctx ck,
struct jtag_command cmd 
)
static

Definition at line 505 of file cklink.c.

References cklink_idle_cycles(), and cmd.

Referenced by cklink_execute_queue().

◆ cklink_execute_scan()

◆ cklink_execute_stableclocks()

static int cklink_execute_stableclocks ( struct cklink_ctx ck,
struct jtag_command cmd 
)
static

Definition at line 510 of file cklink.c.

References cklink_idle_cycles(), and cmd.

Referenced by cklink_execute_queue().

◆ cklink_execute_tlr_reset()

◆ cklink_execute_tms()

static int cklink_execute_tms ( struct jtag_command cmd)
static

Definition at line 516 of file cklink.c.

References cmd, ERROR_JTAG_NOT_IMPLEMENTED, and LOG_ERROR.

Referenced by cklink_execute_queue().

◆ cklink_flush_pending_ir()

◆ cklink_frame_end()

static unsigned int cklink_frame_end ( struct cklink_ctx ck,
unsigned int  pos 
)
static

◆ cklink_frame_start()

static unsigned int cklink_frame_start ( struct cklink_ctx ck,
uint8_t  opcode 
)
static

Definition at line 182 of file cklink.c.

References CKLINK_FRAME_START, and cklink_ctx::tx_buf.

Referenced by cklink_jtag_scan(), cklink_selfreg_read(), and cklink_selfreg_write().

◆ cklink_idle_cycles()

static int cklink_idle_cycles ( struct cklink_ctx ck,
unsigned int  num_bits 
)
static

◆ cklink_init()

◆ cklink_jtag_scan()

static int cklink_jtag_scan ( struct cklink_ctx ck,
unsigned int  ir_bits,
const uint8_t *  ir_tdi,
uint8_t *  ir_tdo,
unsigned int  dr_bits,
const uint8_t *  dr_tdi,
uint8_t *  dr_tdo 
)
static

◆ cklink_khz()

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

◆ cklink_khz_to_div()

static uint8_t cklink_khz_to_div ( int  khz)
static

Definition at line 471 of file cklink.c.

References CKLINK_CLK_DIV_MAX, CKLINK_CLK_DIV_MIN, and CKLINK_CLK_SOURCE_KHZ.

Referenced by cklink_khz(), and cklink_speed().

◆ cklink_probe_init()

◆ cklink_quit()

static int cklink_quit ( void  )
static

◆ cklink_selfreg_read()

static int cklink_selfreg_read ( struct cklink_ctx ck,
uint8_t  reg,
uint8_t *  value 
)
static

◆ cklink_selfreg_write()

static int cklink_selfreg_write ( struct cklink_ctx ck,
uint8_t  reg,
const uint8_t *  value 
)
static

◆ cklink_speed()

static int cklink_speed ( int  speed)
static

◆ cklink_speed_div()

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

Definition at line 725 of file cklink.c.

◆ cklink_usb_xfer()

◆ cklink_write_csr()

static int cklink_write_csr ( struct cklink_ctx ck,
uint8_t  clk,
uint8_t  mode 
)
static

Variable Documentation

◆ cklink_adapter_driver

struct adapter_driver cklink_adapter_driver
Initial value:
= {
.name = "cklink",
.transport_ids = TRANSPORT_JTAG,
.transport_preferred_id = TRANSPORT_JTAG,
.init = cklink_init,
.quit = cklink_quit,
.speed = cklink_speed,
.khz = cklink_khz,
.speed_div = cklink_speed_div,
.jtag_ops = &cklink_jtag_interface,
}
#define TRANSPORT_JTAG
Definition: transport.h:19

Definition at line 725 of file cklink.c.

◆ cklink_default_pids

const uint16_t cklink_default_pids[]
static
Initial value:
= {
0,
}

Definition at line 111 of file cklink.c.

Referenced by cklink_init().

◆ cklink_default_vids

const uint16_t cklink_default_vids[]
static
Initial value:
= {
0,
}

Definition at line 106 of file cklink.c.

Referenced by cklink_init().

◆ cklink_handle

struct cklink_ctx* cklink_handle
static

Definition at line 103 of file cklink.c.

Referenced by cklink_execute_queue(), cklink_init(), cklink_quit(), and cklink_speed().

◆ cklink_jtag_interface

struct jtag_interface cklink_jtag_interface
static
Initial value:
= {
.execute_queue = cklink_execute_queue,
}

Definition at line 725 of file cklink.c.