21 #define _E "DSP5680XX_ERROR:%d\nAt:%s:%d:%s"
22 #define err_log(c, m) LOG_ERROR(_E, c, __func__, __LINE__, m)
23 #define DEBUG_MSG "Debug mode be enabled to read mem."
24 #define HALT_MSG "Target must be halted."
43 uint8_t *d_out,
int len)
62 "dr_len overflow, maximum is 32");
77 LOG_DEBUG(
"Data read (%d bits): 0x%04X", len, *d_out);
93 uint32_t *d_out, uint8_t ir_len)
109 || ((t->
enabled) && (ir_len != tap_ir_len))) {
129 uint32_t read_from_ir;
139 *
status = (uint8_t) read_from_ir;
146 uint32_t bogus_instr = 0;
151 LOG_DEBUG(
"Data read (%d bits): 0x%04X", num_bits, *data_read);
156 #define jtag_data_read8(target, data_read) jtag_data_read(target, data_read, 8)
157 #define jtag_data_read16(target, data_read) jtag_data_read(target, data_read, 16)
158 #define jtag_data_read32(target, data_read) jtag_data_read(target, data_read, 32)
175 #define jtag_data_write8(target, instr, data_read) jtag_data_write(target, instr, 8, data_read)
176 #define jtag_data_write16(target, instr, data_read) jtag_data_write(target, instr, 16, data_read)
177 #define jtag_data_write24(target, instr, data_read) jtag_data_write(target, instr, 24, data_read)
178 #define jtag_data_write32(target, instr, data_read) jtag_data_write(target, instr, 32, data_read)
193 uint8_t rw, uint8_t go, uint8_t ex,
194 uint8_t *eonce_status)
198 uint8_t instr_with_flags = instr | (rw << 7) | (go << 6) | (ex << 5);
204 *eonce_status = (uint8_t) dr_out_tmp;
209 #define dsp5680xx_exe_1(target, oc1, oc2, oc3) dsp5680xx_exe1(target, oc1)
210 #define dsp5680xx_exe_2(target, oc1, oc2, oc3) dsp5680xx_exe2(target, oc1, oc2)
211 #define dsp5680xx_exe_3(target, oc1, oc2, oc3) dsp5680xx_exe3(target, oc1, oc2, oc3)
212 #define dsp5680xx_exe_generic(t, words, oc1, oc2, oc3) dsp5680xx_exe_##words(t, oc1, oc2, oc3)
241 uint16_t opcode2, uint16_t opcode3)
275 uint32_t *eonce_status_low)
286 #define CMD1 eonce_instruction_exec_single(target, DSP5680XX_ONCE_ORX, 0, 0, 0, NULL);
287 #define CMD2 jtag_data_write16((t, data)
288 #define core_tx_lower_data(t, data) PT1\ PT2
328 #define exe(a, b, c, d, e) dsp5680xx_exe_generic(a, b, c, d, e)
331 #define core_move_long_to_r0(target, value) exe(target, 3, 0xe418, value&0xffff, value>>16)
334 #define core_move_long_to_n(target, value) exe(target, 3, 0xe41e, value&0xffff, value>>16)
337 #define core_move_at_r0_to_y0(target) exe(target, 1, 0xF514, 0, 0)
340 #define core_move_at_r0_to_y1(target) exe(target, 1, 0xF714, 0, 0)
343 #define core_move_long_at_r0_y(target) exe(target, 1, 0xF734, 0, 0)
346 #define core_move_y0_at_r0(target) exe(target, 1, 0xd514, 0, 0)
349 #define eonce_bfclr_at_r0(target, value) exe(target, 2, 0x8040, value, 0)
352 #define core_move_value_to_y0(target, value) exe(target, 2, 0x8745, value, 0)
355 #define core_move_y0_at_r0_inc(target) exe(target, 1, 0xd500, 0, 0)
358 #define core_move_y0_at_pr0_inc(target) exe(target, 1, 0x8560, 0, 0)
361 #define core_move_at_pr0_inc_to_y0(target) exe(target, 1, 0x8568, 0, 0)
364 #define core_move_at_pr0_inc_to_y1(target) exe(target, 1, 0x8768, 0, 0)
367 #define core_move_long_to_r2(target, value) exe(target, 3, 0xe41A, value&0xffff, value>>16)
370 #define core_move_y0_at_r2(target) exe(target, 1, 0xd516, 0, 0)
373 #define core_move_value_at_r2(target, value) exe(target, 2, 0x8642, value, 0)
376 #define core_move_value_at_r0(target, value) exe(target, 2, 0x8640, value, 0)
379 #define core_move_value_at_r2_disp(target, value, disp) exe(target, 3, 0x8646, value, disp)
382 #define core_move_at_r2_to_y0(target) exe(target, 1, 0xF516, 0, 0)
385 #define core_move_at_pr2_inc_to_y0(target) exe(target, 1, 0x856A, 0, 0)
388 #define core_move_long_to_r1(target, value) exe(target, 3, 0xE419, value&0xffff, value>>16)
391 #define core_move_long_to_r3(target, value) exe(target, 3, 0xE41B, value&0xffff, value>>16)
394 #define core_move_y0_at_pr3_inc(target) exe(target, 1, 0x8563, 0, 0)
397 #define core_move_y0_at_r3(target) exe(target, 1, 0xD503, 0, 0)
400 #define core_move_long_to_r4(target, value) exe(target, 3, 0xE41C, value&0xffff, value>>16)
403 #define core_move_pc_to_r4(target) exe(target, 1, 0xE716, 0, 0)
406 #define core_move_r4_to_y(target) exe(target, 1, 0xe764, 0, 0)
409 #define core_move_at_pr0_inc_to_y0(target) exe(target, 1, 0x8568, 0, 0)
412 #define core_move_at_r0_inc_to_y0(target) exe(target, 1, 0xf500, 0, 0)
415 #define core_move_at_r0_y0(target) exe(target, 1, 0xF514, 0, 0)
418 #define eonce_nop(target) exe(target, 1, 0xe700, 0, 0)
421 #define core_move_at_r2_disp_to_y0(target, disp) exe(target, 2, 0xF542, disp, 0)
424 #define core_move_y1_at_r2(target) exe(target, 1, 0xd716, 0, 0)
427 #define core_move_y1_at_r0(target) exe(target, 1, 0xd714, 0, 0)
430 #define core_move_byte_y0_at_r0(target) exe(target, 1, 0xd5a0, 0, 0)
433 #define core_move_y1_at_pr0_inc(target) exe(target, 1, 0x8760, 0, 0)
436 #define core_move_y1_at_r0_inc(target) exe(target, 1, 0xD700, 0, 0)
439 #define core_move_long_to_y(target, value) exe(target, 3, 0xe417, value&0xffff, value>>16)
474 uint32_t dummy_data_to_shift_into_dr;
481 (uint8_t *) data_read, 8);
484 LOG_DEBUG(
"Reg. data: 0x%02X.", *data_read);
518 const char *msg =
"Failed to get master tap.";
528 "Failed to get core tap.");
535 (
"Master:%d\nCore:%d\nOnly 1 should be enabled.\n",
549 (uint8_t *) &ir_out, 4);
564 (uint8_t *) &ir_out, 4);
588 uint16_t *eonce_status)
620 uint16_t data_read_from_dr;
625 if ((data_read_from_dr & 0x30) == 0x30) {
626 LOG_DEBUG(
"EOnCE successfully entered debug mode.");
636 *eonce_status = data_read_from_dr;
649 uint16_t *eonce_status)
667 "Failed to get master tap.");
673 "Failed to get master tap.");
721 (uint8_t *) &read_16, 8);
727 (uint8_t *) &read_16, 8);
736 for (
int i = 0; i < 3; i++) {
750 for (
int i = 0; i < 3; i++) {
753 (uint8_t *) &read_16, 16);
756 (uint8_t *) &read_16, 16);
760 uint16_t data_read_from_dr;
765 if ((data_read_from_dr & 0x30) == 0x30) {
766 LOG_DEBUG(
"EOnCE successfully entered debug mode.");
769 const char *msg =
"Failed to set EOnCE module to debug mode";
775 *eonce_status = data_read_from_dr;
805 LOG_USER(
"PC value: 0x%X%X\n", tmp[1], tmp[0]);
832 LOG_USER(
"%s not implemented yet.", __func__);
850 uint16_t eonce_status = 0xbeef;
854 LOG_USER(
"Target already halted and in debug mode.");
859 (
"Target already halted, re attempting to enter debug mode.");
877 uint8_t eonce_status;
889 eonce_status = (uint8_t) read_tmp;
893 "%s: Failed to put EOnCE in debug mode.Flash locked?...";
912 "%s: JTAG running, but EOnCE run failed.Try resetting..";
924 eonce_status = (uint8_t) read_tmp;
928 (
"Inconsistent target status. Restart!");
937 (
"%s: Cannot communicate with JTAG. Check connection...",
943 LOG_ERROR(
"%s: Target status invalid - communication failure",
954 LOG_USER(
"Target already running.");
959 uint8_t eonce_status;
972 while (retry-- > 1) {
981 "Failed to exit debug mode...");
987 LOG_DEBUG(
"EOnCE status: 0x%02X.", eonce_status);
1000 "Failed to reset JTAG state machine");
1039 if (((*
address) & 0xff0000) != 0xff0000)
1046 uint8_t *data_read,
int r_pmem)
1071 LOG_DEBUG(
"%s:Data read from 0x%06" PRIX32
": 0x%02X%02X", __func__,
address,
1072 data_read[1], data_read[0]);
1077 uint8_t *data_read,
int r_pmem)
1122 uint32_t
count, uint8_t *buf)
1148 for (
unsigned int i = 0; i <
count; i++) {
1149 if (--counter == 0) {
1172 LOG_USER(
"%s: Invalid read size.", __func__);
1185 uint16_t data, uint8_t w_pmem)
1206 uint32_t data,
int w_pmem)
1232 const uint8_t *d,
int pmem)
1240 const uint8_t *data = d;
1250 for (iter = 0; iter <
count / 2; iter++) {
1251 if (--counter == 0) {
1255 data_16 = (data[2 * iter] | (data[2 * iter + 1] << 8));
1260 LOG_ERROR(
"%s: Could not write to p:0x%04" PRIX32, __func__,
1276 (uint8_t *) &data_old);
1280 data_old = (((data_old & 0xff) << 8) | data[0]);
1283 (((data_old & 0xff) << 8) | data[2 * iter + 1]);
1292 const uint8_t *d,
int pmem)
1300 const uint8_t *data = d;
1306 for (iter = 0; iter <
count; iter++) {
1307 if (--counter == 0) {
1315 LOG_ERROR(
"%s: Could not write to p:0x%04" PRIX32, __func__,
1327 const uint8_t *d,
int pmem)
1335 const uint8_t *data = d;
1341 for (iter = 0; iter <
count; iter++) {
1342 if (--counter == 0) {
1350 LOG_ERROR(
"%s: Could not write to p:0x%04" PRIX32, __func__,
1380 uint8_t
const *
buffer = b;
1486 static int perl_crc(
const uint8_t *buff8, uint32_t word_count)
1488 uint16_t checksum = 0xffff;
1490 uint16_t data, fbmisr;
1494 for (i = 0; i < word_count; i++) {
1495 data = (buff8[2 * i] | (buff8[2 * i + 1] << 8));
1497 (checksum & 2) >> 1 ^ (checksum & 4) >> 2 ^ (checksum & 16)
1498 >> 4 ^ (checksum & 0x8000) >> 15;
1499 checksum = (data ^ ((checksum << 1) | fbmisr));
1502 for (; !(i & 0x80000000); i--) {
1503 data = (buff8[2 * i] | (buff8[2 * i + 1] << 8));
1505 (checksum & 2) >> 1 ^ (checksum & 4) >> 2 ^ (checksum & 16)
1506 >> 4 ^ (checksum & 0x8000) >> 15;
1507 checksum = (data ^ ((checksum << 1) | fbmisr));
1526 (
const uint8_t *)&sim_cmd);
1558 const char *msg =
"NULL pointer not valid.";
1564 (uint8_t *)
protected, 0);
1581 uint16_t *hfm_ustat,
int pmem)
1605 if ((watchdog--) == 1) {
1607 "Timed out waiting for FM to finish old command.";
1611 }
while (!(i[0] & 0x40));
1678 if ((watchdog--) == 1) {
1680 "FM execution did not finish.");
1683 }
while (!(i[0] & 0x40));
1684 *hfm_ustat = ((i[0] << 8) | (i[1]));
1687 "pviol and/or accer bits set. HFM command execution error";
1726 unsigned int hfm_at_wrong_value = 0;
1729 LOG_DEBUG(
"HFM CLK divisor contained incorrect value (0x%02X).",
1731 hfm_at_wrong_value = 1;
1734 (
"HFM CLK divisor was already set to correct value (0x%02X).",
1756 if (hfm_at_wrong_value)
1757 LOG_DEBUG(
"HFM CLK divisor set to 0x%02x.", i[0] & 0x7f);
1776 uint16_t *signature)
1798 (uint8_t *) signature, 0);
1886 int do_mass_erase = ((!(first | last))
1889 if (do_mass_erase) {
1895 for (
int i = first; i <= last; i++) {
1947 0x8A46, 0x0013, 0x807D, 0xE700,
1948 0xE700, 0x8A44, 0xFFFE, 0x017B,
1949 0xE700, 0xF514, 0x8563, 0x8646,
1950 0x0020, 0x0014, 0x8646, 0x0080,
1951 0x0013, 0xF042, 0x0013, 0x8B40,
1952 0x2004, 0x8246, 0x0013, 0x0020,
1953 0xA967, 0x8B40, 0x1065, 0x8246,
1954 0x0013, 0x0010, 0xA961
1966 const uint8_t *
buffer = b;
1981 uint32_t ram_addr = 0x8700;
1987 if (!is_flash_lock) {
2049 const char *msg =
"Cannot handle odd number of words.";
2060 uint32_t drscan_data;
2078 if (--counter == 0) {
2091 if (!is_flash_lock) {
2104 if (pc_crc != signature) {
2106 "Flashed data failed CRC check, flash again!";
2116 uint16_t eonce_status;
2123 "Failed to get master tap.");
2129 "Failed to get master tap.");
2143 "Failed to reset JTAG state machine");
2190 "Failed to reset JTAG state machine");
2234 "Failed to reset JTAG state machine");
2244 "Failed to get master tap.");
2250 "Failed to get master tap.");
2261 bool handle_breakpoints)
2264 "Not implemented yet.");
2270 .
name =
"dsp5680xx",
#define JTAG_INSTR_ENABLE_ONCE
#define JTAG_STATUS_DEBUG
#define JTAG_STATUS_NORMAL
#define JTAG_INSTR_DEBUG_REQUEST
static int core_tx_upper_data(struct target *target, uint16_t data, uint32_t *eonce_status_low)
static int dsp5680xx_read_buffer(struct target *target, target_addr_t address, uint32_t size, uint8_t *buffer)
This function is called by verify_image, it is used to read data from memory.
static int dsp5680xx_soft_reset_halt(struct target *target)
Halts the core and resets the SIM.
static uint32_t data_read_dummy
static int dsp5680xx_halt(struct target *target)
static int dsp5680xx_deassert_reset(struct target *target)
#define core_move_value_at_r2_disp(target, value, disp)
#define core_move_y0_at_pr0_inc(target)
static int dsp5680xx_read_32_single(struct target *t, uint32_t a, uint8_t *data_read, int r_pmem)
static int eonce_exit_debug_mode(struct target *target, uint8_t *eonce_status)
Takes the core out of debug mode.
static int core_load_tx_rx_high_addr_to_r0(struct target *target)
#define core_move_at_r2_disp_to_y0(target, disp)
#define core_move_pc_to_r4(target)
static int jtag_data_write(struct target *target, uint32_t instr, int num_bits, uint32_t *data_read)
static int dsp5680xx_exe2(struct target *target, uint16_t opcode1, uint16_t opcode2)
static int dsp5680xx_convert_address(uint32_t *address, int *pmem)
The value of address determines if it corresponds to P: (program) or X: (dat) memory.
static int dsp5680xx_resume(struct target *target, bool current, target_addr_t address, bool handle_breakpoints, bool debug_execution)
static int dsp5680xx_write_16_single(struct target *t, uint32_t a, uint16_t data, uint8_t w_pmem)
static int eonce_instruction_exec_single(struct target *target, uint8_t instr, uint8_t rw, uint8_t go, uint8_t ex, uint8_t *eonce_status)
Executes EOnCE instruction.
#define core_move_at_r0_to_y0(target)
static const uint32_t pgm_write_pflash_length
int dsp5680xx_f_erase(struct target *target, int first, int last)
Erases either a sector or the complete flash array.
#define core_move_at_pr0_inc_to_y1(target)
#define core_move_at_pr0_inc_to_y0(target)
int dsp5680xx_f_lock(struct target *target)
Writes the flash security words with a specific value.
static int dsp5680xx_irscan(struct target *target, uint32_t *d_in, uint32_t *d_out, uint8_t ir_len)
Test func.
static int mass_erase(struct target *target, uint16_t *hfm_ustat)
Executes the FM mass erase command.
static int dsp5680xx_drscan(struct target *target, uint8_t *d_in, uint8_t *d_out, int len)
#define core_move_y0_at_r0(target)
#define core_move_y0_at_r0_inc(target)
#define core_move_y1_at_r0(target)
#define core_move_y1_at_pr0_inc(target)
static int jtag_data_read(struct target *target, uint8_t *data_read, int num_bits)
#define dsp5680xx_exe_generic(t, words, oc1, oc2, oc3)
static int dsp5680xx_write_8(struct target *t, uint32_t a, uint32_t c, const uint8_t *d, int pmem)
static int dsp5680xx_target_create(struct target *target)
static int dsp5680xx_poll(struct target *target)
static int switch_tap(struct target *target, struct jtag_tap *master_tap, struct jtag_tap *core_tap)
static int dsp5680xx_f_signature(struct target *target, uint32_t address, uint32_t words, uint16_t *signature)
Executes the FM calculate signature command.
static int dsp5680xx_exe1(struct target *target, uint16_t opcode)
static int dsp5680xx_read_core_reg(struct target *target, uint8_t reg_addr, uint16_t *data_read)
#define jtag_data_write16(target, instr, data_read)
static int core_rx_lower_data(struct target *target, uint8_t *data_read)
static int dsp5680xx_step(struct target *target, bool current, target_addr_t address, bool handle_breakpoints)
#define core_move_value_to_y0(target, value)
static int dsp5680xx_f_sim_reset(struct target *target)
Resets the SIM.
static int dsp5680xx_assert_reset(struct target *target)
#define core_move_y0_at_pr3_inc(target)
#define core_move_at_r2_to_y0(target)
#define core_move_at_r0_to_y1(target)
#define core_move_r4_to_y(target)
static int eonce_enter_debug_mode_without_reset(struct target *target, uint16_t *eonce_status)
Puts the core into debug mode, enabling the EOnCE module.
static int dsp5680xx_read(struct target *t, target_addr_t a, uint32_t size, uint32_t count, uint8_t *buf)
#define core_move_y1_at_r0_inc(target)
static int eonce_load_tx_rx_to_r0(struct target *target)
static int dsp5680xx_write_32_single(struct target *t, uint32_t a, uint32_t data, int w_pmem)
static int dsp5680xx_exe3(struct target *target, uint16_t opcode1, uint16_t opcode2, uint16_t opcode3)
static int dsp5680xx_jtag_status(struct target *target, uint8_t *status)
static int eonce_enter_debug_mode(struct target *target, uint16_t *eonce_status)
Puts the core into debug mode, enabling the EOnCE module.
static int dsp5680xx_init_target(struct command_context *cmd_ctx, struct target *target)
#define core_move_value_at_r2(target, value)
static int dsp5680xx_write(struct target *target, target_addr_t a, uint32_t size, uint32_t count, const uint8_t *b)
Writes buffer to memory.
static int dsp5680xx_write_16(struct target *t, uint32_t a, uint32_t c, const uint8_t *d, int pmem)
static int dsp5680xx_execute_queue(void)
#define core_move_value_at_r0(target, value)
#define core_move_long_to_r3(target, value)
int dsp5680xx_f_unlock(struct target *target)
Executes a mass erase command.
static int core_move_value_to_pc(struct target *target, uint32_t value)
static int perl_crc(const uint8_t *buff8, uint32_t word_count)
Calculates a signature over word_count words in the data from buff8.
#define core_move_y0_at_r3(target)
static int set_fm_ck_div(struct target *target)
Prior to the execution of any Flash module command, the Flash module Clock Divider (CLKDIV) register ...
static int dsp5680xx_write_32(struct target *t, uint32_t a, uint32_t c, const uint8_t *d, int pmem)
static int dsp5680xx_checksum_memory(struct target *target, target_addr_t address, uint32_t size, uint32_t *checksum)
This function is not implemented.
static int dsp5680xx_read_16_single(struct target *t, uint32_t a, uint8_t *data_read, int r_pmem)
#define jtag_data_read16(target, data_read)
#define core_move_long_to_r2(target, value)
static int dsp5680xx_arch_state(struct target *target)
int dsp5680xx_f_wr(struct target *t, const uint8_t *b, uint32_t a, uint32_t count, int is_flash_lock)
Writes to flash memory.
#define core_move_at_r0_inc_to_y0(target)
static int core_rx_upper_data(struct target *target, uint8_t *data_read)
static int dsp5680xx_f_ex(struct target *target, uint16_t c, uint32_t address, uint32_t data, uint16_t *hfm_ustat, int pmem)
Executes a command on the FM module.
static int eonce_read_status_reg(struct target *target, uint16_t *data)
static struct dsp5680xx_common dsp5680xx_context
#define core_move_long_to_r0(target, value)
int dsp5680xx_f_protect_check(struct target *target, uint16_t *protected)
Reads the memory mapped protection register.
struct target_type dsp5680xx_target
Holds methods for dsp5680xx targets.
static int reset_jtag(void)
Reset state machine.
static const uint16_t pgm_write_pflash[]
int dsp5680xx_f_erase_check(struct target *target, uint8_t *erased, uint32_t sector)
The FM has the functionality of checking if the flash array is erased.
static int erase_sector(struct target *target, int sector, uint16_t *hfm_ustat)
Executes the FM page erase command.
#define core_move_long_to_y(target, value)
static int eonce_pc_store(struct target *target)
Reads the current value of the program counter and stores it.
static int dsp5680xx_write_buffer(struct target *t, target_addr_t a, uint32_t size, const uint8_t *b)
Basic support for the 5680xx DSP from Freescale. The chip has two taps in the JTAG chain,...
#define HFM_USTAT_MASK_BLANK
#define DSP5680XX_ERROR_JTAG_TAP_FIND_MASTER
#define DSP5680XX_ERROR_ENTER_DEBUG_MODE
#define DSP5680XX_ERROR_INVALID_IR_LEN
#define DSP5680XX_ERROR_FLASHING_INVALID_WORD_COUNT
#define FLUSH_COUNT_READ_WRITE
#define DSP5680XX_ERROR_RESUME
#define DSP5680XX_ERROR_NOT_IN_DEBUG
#define MASTER_TAP_CMD_FLASH_ERASE
#define DSP5680XX_ERROR_EXIT_DEBUG_MODE
#define DSP5680XX_ERROR_NOT_IMPLEMENTED_STEP
#define MC568013_EONCE_TX1_RX1_HIGH_ADDR
#define HFM_USTAT_MASK_PVIOL_ACCER
#define DSP5680XX_ERROR_TARGET_RUNNING
#define DSP5680XX_ERROR_JTAG_RESET
#define DSP5680XX_ERROR_HALT
#define HFM_CLK_DEFAULT
The value used on for the FM clock is important to prevent flashing errors and to prevent deteriorati...
#define MC568013_EONCE_OBASE_ADDR
#define DSP5680XX_ERROR_INVALID_DATA_SIZE_UNIT
#define DSP5680XX_ONCE_ORX1
#define FLUSH_COUNT_FLASH
#define DSP5680XX_ERROR_FM_EXEC
#define DSP5680XX_ERROR_FM_SET_CLK
#define DSP5680XX_ERROR_JTAG_TAP_FIND_CORE
#define DSP5680XX_ERROR_JTAG_IRSCAN
#define DSP5680XX_JTAG_MASTER_TAP_IRLEN
#define MC568013_SIM_BASE_ADDR
#define DSP5680XX_ERROR_PROTECT_CHECK_INVALID_ARGS
#define DSP5680XX_ONCE_OSCR_NORMAL_M
#define HFM_FLASH_BASE_ADDR
#define DSP5680XX_ONCE_OTX1
#define HFM_LOCK_FLASH
Writing HFM_LOCK_FLASH to HFM_LOCK_ADDR_L and HFM_LOCK_ADDR_H will enable security on flash after the...
#define DSP5680XX_ONCE_OSCR_DEBUG_M
#define DSP5680XX_ONCE_OTX
#define DSP5680XX_ONCE_OSR
#define MASTER_TAP_CMD_IDCODE
#define S_FILE_DATA_OFFSET
#define DSP5680XX_ERROR_JTAG_DRSCAN
#define DSP5680XX_ERROR_FM_BUSY
#define HFM_CALCULATE_DATA_SIGNATURE
#define TIME_DIV_FREESCALE
#define DSP5680XX_ERROR_FLASHING_CRC
#define DSP5680XX_ERROR_JTAG_TAP_ENABLE_MASTER
#define DSP5680XX_ERROR_JTAG_DR_LEN_OVERFLOW
#define DSP5680XX_ERROR_JTAG_INVALID_TAP
#define DSP5680XX_ERROR_FM_CMD_TIMED_OUT
#define DSP5680XX_ERROR_JTAG_TAP_ENABLE_CORE
#define MC568013_EONCE_TX_RX_ADDR
#define DSP5680XX_JTAG_CORE_TAP_IRLEN
uint64_t buffer
Pointer to data buffer to send over SPI.
uint32_t size
Size of dw_spi_transaction::buffer.
uint32_t address
Starting address. Sector aligned.
void jtag_add_plain_dr_scan(int num_bits, const uint8_t *out_bits, uint8_t *in_bits, enum tap_state state)
Scan out the bits in ir scan mode.
struct jtag_tap * jtag_tap_by_string(const char *s)
void jtag_add_reset(int req_tlr_or_trst, int req_srst)
A reset of the TAP state machine can be requested.
int jtag_execute_queue(void)
For software FIFO implementations, the queued commands can be executed during this call or earlier.
int jtag_add_statemove(enum tap_state goal_state)
jtag_add_statemove() moves from the current state to goal_state.
void jtag_add_sleep(uint32_t us)
void jtag_add_plain_ir_scan(int num_bits, const uint8_t *out_bits, uint8_t *in_bits, enum tap_state state)
Scan out the bits in ir scan mode.
#define LOG_USER(expr ...)
#define LOG_WARNING(expr ...)
#define LOG_ERROR(expr ...)
#define LOG_DEBUG(expr ...)
unsigned int ir_length
size of instruction register
bool enabled
Is this TAP currently enabled?
This holds methods shared between all instances of a given target type.
const char * name
Name of this type of target.
#define ERROR_TARGET_DATA_ABORT
#define ERROR_TARGET_FAILURE