1 /***************************************************************************
2 * Copyright (C) 2010 by Michael Walle *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
24 #include "breakpoints.h"
26 #include <helper/time_support.h>
27 #include <helper/jim.h>
28 #include <jtag/jtag.h>
30 #include "target_type.h"
34 * - disable hw breakpoints upon reset (better do a jtag core reset?)
38 * The LM32 debug core is accessed through a JTAG data register. It has the
41 * shift in: shift out:
43 * 0 9 8 7 6 5 4 3 2 1 0 0 9 8 7 6 5 4 3 2 1 0
44 * +---------------+-----+ +---------------+-+-+-+
45 * | DATA | ADR | | DATA |P|T|R|
46 * +---------------+-----+ +---------------+-+-+-+
47 * ADR R = JTAG RX ready
48 * 0 = debug protocol T = JTAG TX full
49 * 1 = JTAG uart TX P = DP command in progress
52 * If adr is LM32_ADDR_DP (0), the command will be transferred in data[7:4].
53 * If adr is LM32_ADDR_TX (1) or LM32_ADDR_RX (2), data[7:0] will be the
54 * character that should be transferred.
59 #define LM32_INST_BREAK 0xac000002UL
64 struct reg_cache *reg_cache;
67 /* current state of the debug handler */
72 /* bitfield, bit 0 corresponds to bp0 */
87 struct target *target;
90 static char* lm32_reg_list[] =
92 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
93 "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21",
94 "r22", "r23", "r24", "r25", "gp", "fp", "sp", "ra", "ea", "ba", "pc",
100 LM32_R0 = 0, LM32_R1, LM32_R2, LM32_R3, LM32_R4, LM32_R5, LM32_R6, LM32_R7, LM32_R8,
101 LM32_R9, LM32_R10, LM32_R11, LM32_R12, LM32_R13, LM32_R14, LM32_R15, LM32_R16,
102 LM32_R17, LM32_R18, LM32_R19, LM32_R20, LM32_R21, LM32_R22, LM32_R23, LM32_R24,
103 LM32_R25, LM32_GP, LM32_FP, LM32_SP, LM32_RA, LM32_EA, LM32_BA, LM32_PC, LM32_EID,
104 LM32_EBA, LM32_DEBA, LM32_NUM_REGS
114 LM32_EID_DIVIDE_BY_ZERO,
119 static const struct lm32_reg lm32_reg_arch_info[] =
121 { LM32_R0, NULL }, { LM32_R1, NULL }, { LM32_R2, NULL }, { LM32_R3, NULL },
122 { LM32_R4, NULL }, { LM32_R5, NULL }, { LM32_R6, NULL }, { LM32_R7, NULL },
123 { LM32_R8, NULL }, { LM32_R9, NULL }, { LM32_R10, NULL }, { LM32_R11, NULL },
124 { LM32_R12, NULL }, { LM32_R13, NULL }, { LM32_R14, NULL }, { LM32_R15, NULL },
125 { LM32_R16, NULL }, { LM32_R17, NULL }, { LM32_R18, NULL }, { LM32_R19, NULL },
126 { LM32_R20, NULL }, { LM32_R21, NULL }, { LM32_R22, NULL }, { LM32_R23, NULL },
127 { LM32_R24, NULL }, { LM32_R25, NULL }, { LM32_GP, NULL }, { LM32_FP, NULL },
128 { LM32_SP, NULL }, { LM32_RA, NULL }, { LM32_EA, NULL }, { LM32_BA, NULL },
129 { LM32_PC, NULL }, { LM32_EID, NULL }, { LM32_EBA, NULL }, { LM32_DEBA, NULL },
139 /* debug protocol commands */
144 LM32_DP_WRITE_MEMORY,
145 LM32_DP_READ_SEQUENTIAL,
146 LM32_DP_WRITE_SEQUENTIAL,
154 LM32_STAT_RX_READY = (1 << 0),
155 LM32_STAT_TX_FULL = (1 << 1),
156 LM32_STAT_PROCESSING = (1 << 2),
159 /* monitor commands */
161 LM32_MONITOR_CMD_VERSION = 0,
162 LM32_MONITOR_CMD_REG_ADDR,
163 LM32_MONITOR_CMD_READ_CSR,
164 LM32_MONITOR_CMD_WRITE_CSR,
165 LM32_MONITOR_CMD_READ_MEM,
166 LM32_MONITOR_CMD_WRITE_MEM,
167 LM32_MONITOR_CMD_STORE_HALFWORD,
168 LM32_MONITOR_CMD_STORE_WORD,
169 LM32_MONITOR_CMD_LOAD_HALFWORD,
170 LM32_MONITOR_CMD_LOAD_WORD,
171 LM32_MONITOR_CMD_CONTINUE,
198 LM32_CSR_DC_SS = (1 << 0),
199 LM32_CSR_DC_RE = (1 << 1),
200 LM32_CSR_DC_C0 = (1 << 2),
201 LM32_CSR_DC_C1 = (1 << 3),
202 LM32_CSR_DC_C2 = (1 << 4),
203 LM32_CSR_DC_C3 = (1 << 5),
207 LM32_CSR_CFG_M = (1 << 0),
208 LM32_CSR_CFG_D = (1 << 1),
209 LM32_CSR_CFG_S = (1 << 2),
210 LM32_CSR_CFG_U = (1 << 3),
211 LM32_CSR_CFG_X = (1 << 4),
212 LM32_CSR_CFG_CC = (1 << 5),
213 LM32_CSR_CFG_IC = (1 << 6),
214 LM32_CSR_CFG_DC = (1 << 7),
215 LM32_CSR_CFG_G = (1 << 8),
216 LM32_CSR_CFG_H = (1 << 9),
217 LM32_CSR_CFG_R = (1 << 10),
218 LM32_CSR_CFG_J = (1 << 11),
221 #define LM32_CSR_CFG_INT(cfg) ((cfg >> 12) & 0x3f)
222 #define LM32_CSR_CFG_BP(cfg) ((cfg >> 18) & 0x0f)
223 #define LM32_CSR_CFG_WP(cfg) ((cfg >> 22) & 0x0f)
224 #define LM32_CSR_CFG_REV(cfg) ((cfg >> 26) & 0x3f)
229 static inline struct lm32* target_to_lm32(struct target *target)
231 return target->arch_info;
239 lm32_jtag_set_instr(struct jtag_tap *tap, uint32_t new_instr, tap_state_t end_state)
243 if (buf_get_u32(tap->cur_instr, 0, tap->ir_length) != new_instr)
245 struct scan_field field;
248 memset(&field, 0, sizeof(field));
249 field.num_bits = tap->ir_length;
250 field.out_value = scratch;
251 buf_set_u32(scratch, 0, field.num_bits, new_instr);
253 jtag_add_ir_scan(tap, &field, end_state);
260 lm32_jtag_datar(struct target *target, uint32_t data_in, uint32_t *data_out)
263 uint8_t out_value[4];
264 struct scan_field field;
266 buf_set_u32(out_value, 0, 11, data_in);
268 memset(&field, 0, sizeof(field));
271 field.out_value = out_value;
272 field.in_value = (void*)data_out;
274 jtag_add_dr_scan(target->tap, 1, &field, TAP_IDLE);
278 if ((ret = jtag_execute_queue()) != ERROR_OK)
280 LOG_ERROR("register read failed");
289 lm32_get_status(struct target *target, uint8_t *status)
294 ret = lm32_jtag_datar(target, LM32_ADDR_DP | (LM32_DP_NOP << 7), &tmp);
304 lm32_wait_for_status(struct target *target, uint8_t mask, uint8_t value)
306 struct timeval timeout, now;
311 #define DEFAULT_TIMEOUT 1
313 gettimeofday(&timeout, NULL);
314 timeval_add_time(&timeout, DEFAULT_TIMEOUT, 0);
318 if ((ret = lm32_get_status(target, &status)) != ERROR_OK) {
319 LOG_ERROR("error reading jtag status");
323 if ((status & mask) == value)
326 gettimeofday(&now, NULL);
327 if (timercmp(&now, &timeout, >))
328 return ERROR_TARGET_TIMEOUT;
330 if (debug_level >= 3)
332 LOG_DEBUG("sleeping 100ms");
340 if (debug_level >= 4)
341 LOG_DEBUG("waited for %d loops", cnt);
347 lm32_read_jrx(struct target *target, uint8_t *data)
352 ret = lm32_wait_for_status(target, LM32_STAT_RX_READY, LM32_STAT_RX_READY);
356 ret = lm32_jtag_datar(target, LM32_ADDR_RX, NULL);
360 ret = lm32_jtag_datar(target, LM32_ADDR_DP | (LM32_DP_NOP << 7), &tmp_data);
364 ret = jtag_execute_queue();
368 *data = (tmp_data >> 3) & 0xff;
370 if (debug_level >= 4)
371 LOG_DEBUG("read %02x", *data);
377 lm32_write_jtx(struct target *target, uint8_t data)
381 if (debug_level >= 4)
382 LOG_DEBUG("sending %02x", data);
384 ret = lm32_wait_for_status(target, LM32_STAT_TX_FULL, 0);
388 ret = lm32_jtag_datar(target, (data << 3) | LM32_ADDR_TX, NULL);
392 return jtag_execute_queue();
396 lm32_dp_send_data(struct target *target, uint8_t data, int flush)
398 if (lm32_jtag_datar(target, (data << 3) | LM32_ADDR_DP, NULL) != ERROR_OK)
402 if (jtag_execute_queue() != ERROR_OK)
409 lm32_dp_receive_data(struct target *target, uint8_t *data)
414 ret = lm32_jtag_datar(target, (LM32_DP_NOP << 7) | LM32_ADDR_DP, &tmp);
418 *data = (tmp >> 3) & 0xff;
424 lm32_dp_send_command(struct target *target, uint8_t cmd, int flush)
426 return lm32_dp_send_data(target, cmd << 4, flush);
434 lm32_mon_send_u16(struct target *target, uint16_t data)
438 ret = lm32_write_jtx(target, (data >> 8) & 0xff);
442 ret = lm32_write_jtx(target, data & 0xff);
450 lm32_mon_send_u32(struct target *target, uint32_t data)
454 ret = lm32_write_jtx(target, data & 0xff);
458 ret = lm32_write_jtx(target, (data >> 8) & 0xff);
462 ret = lm32_write_jtx(target, (data >> 16) & 0xff);
466 ret = lm32_write_jtx(target, (data >> 24) & 0xff);
474 lm32_mon_receive_u16(struct target *target, uint16_t *data)
481 ret = lm32_read_jrx(target, &byte);
486 ret = lm32_read_jrx(target, &byte);
495 lm32_mon_receive_u32(struct target *target, uint32_t *data)
502 ret = lm32_read_jrx(target, &byte);
507 ret = lm32_read_jrx(target, &byte);
512 ret = lm32_read_jrx(target, &byte);
517 ret = lm32_read_jrx(target, &byte);
526 lm32_dp_send_u32(struct target *target, uint32_t data, int flush)
531 for (i = 3; i >= 0; i--)
533 ret = lm32_dp_send_data(target, (data >> (8*i)) & 0xff, (i==0) ? flush : 0);
546 lm32_mon_version(struct target *target, uint8_t *version)
550 ret = lm32_write_jtx(target, LM32_MONITOR_CMD_VERSION);
554 return lm32_read_jrx(target, version);
558 lm32_mon_write_csr(struct target *target, uint8_t csr, uint32_t value)
562 static const uint8_t mon_csr_map[] = {
563 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
564 0x01, 0x02, 0xff, 0xff, 0x03, 0x04, 0x05, 0x06,
565 0x07, 0x08, 0x09, 0x0a
567 assert(csr < ARRAY_SIZE(mon_csr_map));
568 assert(mon_csr_map[csr] != 0xff);
570 ret = lm32_write_jtx(target, LM32_MONITOR_CMD_WRITE_CSR);
574 ret = lm32_write_jtx(target, mon_csr_map[csr]);
578 return lm32_mon_send_u32(target, value);
582 lm32_mon_read_csr(struct target *target, uint8_t csr, uint32_t *value)
586 static const uint8_t mon_csr_map[] = {
587 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
588 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
589 0xff, 0xff, 0xff, 0xff
591 assert(csr < ARRAY_SIZE(mon_csr_map));
592 assert(mon_csr_map[csr] != 0xff);
594 ret = lm32_write_jtx(target, LM32_MONITOR_CMD_READ_CSR);
598 ret = lm32_write_jtx(target, mon_csr_map[csr]);
602 return lm32_mon_receive_u32(target, value);
606 lm32_mon_read_memory(struct target *target, uint32_t dest, uint32_t len, uint8_t *buf)
610 uint32_t end_address = dest + len;
612 /* send memory read request */
613 if ((ret = lm32_write_jtx(target, LM32_MONITOR_CMD_READ_MEM)) != ERROR_OK)
616 /* send base address */
617 if ((ret = lm32_mon_send_u32(target, dest)) != ERROR_OK)
621 if ((ret = lm32_mon_send_u32(target, len)) != ERROR_OK)
625 for (address = dest; address < end_address; address++)
627 ret = lm32_read_jrx(target, buf++);
636 lm32_mon_write_memory(struct target *target, uint32_t dest, uint32_t len, uint8_t *buf)
640 uint32_t end_address = dest + len;
642 /* send memory write request */
643 if ((ret = lm32_write_jtx(target, LM32_MONITOR_CMD_WRITE_MEM)) != ERROR_OK)
646 /* send base address */
647 if ((ret = lm32_mon_send_u32(target, dest)) != ERROR_OK)
651 if ((ret = lm32_mon_send_u32(target, len)) != ERROR_OK)
655 for (address = dest; address < end_address; address++)
657 ret = lm32_write_jtx(target, *(buf++));
666 lm32_mon_store_u16(struct target *target, uint32_t dest, uint16_t data)
670 LOG_DEBUG("dest=0x%08x data=%04x", dest, data);
672 ret = lm32_write_jtx(target, LM32_MONITOR_CMD_STORE_HALFWORD);
676 ret = lm32_mon_send_u32(target, dest);
680 ret = lm32_mon_send_u16(target, data);
688 lm32_mon_store_u32(struct target *target, uint32_t dest, uint32_t data)
692 LOG_DEBUG("dest=0x%08x data=%08x", dest, data);
694 ret = lm32_write_jtx(target, LM32_MONITOR_CMD_STORE_WORD);
698 ret = lm32_mon_send_u32(target, dest);
702 ret = lm32_mon_send_u32(target, data);
710 lm32_mon_load_u16(struct target *target, uint32_t src, uint16_t *data)
714 ret = lm32_write_jtx(target, LM32_MONITOR_CMD_LOAD_HALFWORD);
718 ret = lm32_mon_send_u32(target, src);
722 ret = lm32_mon_receive_u16(target, data);
726 LOG_DEBUG("src=0x%08x data=%04x", src, *data);
732 lm32_mon_load_u32(struct target *target, uint32_t src, uint32_t *data)
736 ret = lm32_write_jtx(target, LM32_MONITOR_CMD_LOAD_WORD);
740 ret = lm32_mon_send_u32(target, src);
744 ret = lm32_mon_receive_u32(target, data);
748 LOG_DEBUG("src=0x%08x data=%08x", src, *data);
754 lm32_mon_continue(struct target *target)
756 return lm32_write_jtx(target, LM32_MONITOR_CMD_CONTINUE);
760 lm32_mon_registers_address(struct target *target, uint32_t *addr)
764 ret = lm32_write_jtx(target, LM32_MONITOR_CMD_REG_ADDR);
768 ret = lm32_mon_receive_u32(target, addr);
776 * debug protocol commands
779 lm32_dp_write_csr(struct target *target, uint8_t csr, uint32_t value)
783 ret = lm32_dp_send_command(target, LM32_DP_WRITE_CSR, 0);
787 ret = lm32_dp_send_u32(target, value, 0);
791 ret = lm32_dp_send_data(target, csr, 1);
799 lm32_dp_read_memory_addr(struct target *target, uint32_t address, uint8_t *data)
803 ret = lm32_dp_send_command(target, LM32_DP_READ_MEMORY, 0);
807 /* now send address */
808 ret = lm32_dp_send_u32(target, address, 1);
812 /* wait for completion */
813 ret = lm32_wait_for_status(target, LM32_STAT_PROCESSING, 0);
818 return lm32_dp_receive_data(target, data);
822 lm32_dp_read_sequential(struct target *target, uint8_t *data, int wait)
826 ret = lm32_dp_send_command(target, LM32_DP_READ_SEQUENTIAL, 1);
832 /* wait for completion */
833 ret = lm32_wait_for_status(target, LM32_STAT_PROCESSING, 0);
839 return lm32_dp_receive_data(target, data);
843 lm32_dp_write_memory_addr(struct target *target, uint32_t address, uint8_t data)
847 if (debug_level >= 4)
848 LOG_DEBUG("address=%02x data=0x%02x", address, data);
850 ret = lm32_dp_send_command(target, LM32_DP_WRITE_MEMORY, 0);
854 /* now send address */
855 ret = lm32_dp_send_u32(target, address, 0);
859 /* and the byte to write */
860 ret = lm32_dp_send_data(target, data, 1);
864 return lm32_wait_for_status(target, LM32_STAT_PROCESSING, 0);
868 lm32_dp_write_sequential(struct target *target, uint8_t data, bool wait)
872 if (debug_level >= 4)
873 LOG_DEBUG("data=0x%02x", data);
875 ret = lm32_dp_send_command(target, LM32_DP_WRITE_SEQUENTIAL, 0);
879 ret = lm32_dp_send_data(target, data, 0);
884 return lm32_wait_for_status(target, LM32_STAT_PROCESSING, 0);
890 lm32_dp_read_memory(struct target *target, uint32_t dest, uint32_t len, uint8_t *buf)
892 struct lm32 *lm32 = target_to_lm32(target);
895 uint32_t end_address = dest + len;
897 for (address = dest; address < end_address; address++)
899 /* send address if this is the first call or if we cross a 64k boundary */
900 if ((address == dest) || ((address & 0xffff) == 0))
902 ret = lm32_dp_read_memory_addr(target, address, buf++);
906 ret = lm32_dp_read_sequential(target, buf++, (lm32->ignore_ack) ? 0 : 1);
912 /* flush the JTAG buffer, in case we haven't done it yet */
913 ret = jtag_execute_queue();
921 lm32_dp_write_memory(struct target *target, uint32_t dest, uint32_t len, uint8_t *buf)
923 struct lm32 *lm32 = target_to_lm32(target);
926 uint32_t end_address = dest + len;
928 for (address = dest; address < end_address; address++)
930 /* send address if this is the first call or if we cross a 64k boundary */
931 if ((address == dest) || ((address & 0xffff) == 0))
933 ret = lm32_dp_write_memory_addr(target, address, *(buf++));
937 ret = lm32_dp_write_sequential(target, *(buf++), (lm32->ignore_ack) ? 0 : 1);
943 /* flush the JTAG buffer, in case we haven't done it yet */
944 ret = jtag_execute_queue();
957 lm32_write_csr(struct target *target, uint8_t csr, uint32_t value)
959 struct lm32 *lm32 = target_to_lm32(target);
961 LOG_DEBUG("setting csr %d to %08x", csr, value);
963 if (lm32->dp_enabled)
964 return lm32_dp_write_csr(target, csr, value);
966 return lm32_mon_write_csr(target, csr, value);
970 lm32_read_memory(struct target *target, uint32_t dest, uint32_t size, uint32_t count, uint8_t *buf)
972 struct lm32 *lm32 = target_to_lm32(target);
976 LOG_DEBUG("address: 0x%8.8x, size: 0x%8.8x, count: 0x%8.8x", dest, size, count);
978 if (target->state != TARGET_HALTED)
980 LOG_WARNING("target not halted");
981 return ERROR_TARGET_NOT_HALTED;
984 /* sanitize arguments */
985 if (((size != 4) && (size != 2) && (size != 1)) || (count == 0) || !(buf))
986 return ERROR_INVALID_ARGUMENTS;
988 if (((size == 4) && (dest & 0x3)) || ((size == 2) && (dest & 0x1)))
989 return ERROR_TARGET_UNALIGNED_ACCESS;
994 for (u = 0; u < count; u++)
997 ret = lm32_mon_load_u32(target, dest, &data);
1001 target_buffer_set_u32(target, buf, data);
1007 for (u = 0; u < count; u++)
1010 ret = lm32_mon_load_u16(target, dest, &data);
1011 if (ret != ERROR_OK)
1014 target_buffer_set_u16(target, buf, data);
1020 if (lm32->dp_enabled)
1021 return lm32_dp_read_memory(target, dest, count, buf);
1023 return lm32_mon_read_memory(target, dest, count, buf);
1025 return ERROR_INVALID_ARGUMENTS;
1032 lm32_write_memory(struct target *target, uint32_t dest, uint32_t size, uint32_t count, uint8_t *buf)
1034 struct lm32 *lm32 = target_to_lm32(target);
1038 LOG_DEBUG("address: 0x%8.8x, size: 0x%8.8x, count: 0x%8.8x", dest, size, count);
1040 if (target->state != TARGET_HALTED)
1042 LOG_WARNING("target not halted");
1043 return ERROR_TARGET_NOT_HALTED;
1046 /* sanitize arguments */
1047 if (((size != 4) && (size != 2) && (size != 1)) || (count == 0) || !(buf))
1048 return ERROR_INVALID_ARGUMENTS;
1050 if (((size == 4) && (dest & 0x3)) || ((size == 2) && (dest & 0x1)))
1051 return ERROR_TARGET_UNALIGNED_ACCESS;
1056 for (u = 0; u < count; u++)
1058 ret = lm32_mon_store_u32(target, dest, target_buffer_get_u32(target, buf));
1059 if (ret != ERROR_OK)
1067 for (u = 0; u < count; u++)
1069 ret = lm32_mon_store_u16(target, dest, target_buffer_get_u16(target, buf));
1070 if (ret != ERROR_OK)
1078 if (lm32->dp_enabled)
1079 return lm32_dp_write_memory(target, dest, count, buf);
1081 return lm32_mon_write_memory(target, dest, count, buf);
1083 return ERROR_INVALID_ARGUMENTS;
1094 lm32_invalidate_regs(struct target *target)
1096 struct lm32 *lm32 = target_to_lm32(target);
1099 for (i = 0; i < LM32_NUM_REGS; i++)
1101 lm32->reg_cache->reg_list[i].valid = 0;
1102 lm32->reg_cache->reg_list[i].dirty = 0;
1107 lm32_clear_hw_breakpoints(struct target *target)
1109 struct lm32 *lm32 = target_to_lm32(target);
1114 switch (lm32->num_bps)
1118 ret = lm32_write_csr(target, LM32_CSR_BP3, 0);
1119 if (ret != ERROR_OK)
1121 lm32->bps_used &= ~(1 << 3);
1123 ret = lm32_write_csr(target, LM32_CSR_BP2, 0);
1124 if (ret != ERROR_OK)
1126 lm32->bps_used &= ~(1 << 2);
1128 ret = lm32_write_csr(target, LM32_CSR_BP1, 0);
1129 if (ret != ERROR_OK)
1131 lm32->bps_used &= ~(1 << 1);
1133 ret = lm32_write_csr(target, LM32_CSR_BP0, 0);
1134 if (ret != ERROR_OK)
1136 lm32->bps_used &= ~(1 << 0);
1145 lm32_clear_watchpoints(struct target *target)
1147 struct lm32 *lm32 = target_to_lm32(target);
1152 switch (lm32->num_wps)
1156 ret = lm32_write_csr(target, LM32_CSR_WP3, 0);
1157 if (ret != ERROR_OK)
1159 lm32->wps_used &= ~(1 << 3);
1161 ret = lm32_write_csr(target, LM32_CSR_WP2, 0);
1162 if (ret != ERROR_OK)
1164 lm32->wps_used &= ~(1 << 2);
1166 ret = lm32_write_csr(target, LM32_CSR_WP1, 0);
1167 if (ret != ERROR_OK)
1169 lm32->wps_used &= ~(1 << 1);
1171 ret = lm32_write_csr(target, LM32_CSR_WP0, 0);
1172 if (ret != ERROR_OK)
1174 lm32->wps_used &= ~(1 << 0);
1183 lm32_debug_entry(struct target *target)
1185 struct lm32 *lm32 = target_to_lm32(target);
1190 uint8_t buf[LM32_NUM_REGS * sizeof(uint32_t)];
1194 /* read registers base address */
1195 ret = lm32_mon_registers_address(target, &lm32->reg_base);
1196 if (ret != ERROR_OK)
1198 LOG_ERROR("Could not read registers base address");
1199 return ERROR_TARGET_FAILURE;
1202 LOG_DEBUG("registers base address: %08x", lm32->reg_base);
1204 /* read registers content */
1205 ret = target_read_memory(target, lm32->reg_base, 1, LM32_NUM_REGS * 4, buf);
1206 if (ret != ERROR_OK)
1208 LOG_ERROR("Could not read registers content");
1209 return ERROR_TARGET_FAILURE;
1212 for (i = 0; i < LM32_NUM_REGS; i++)
1214 uint32_t data = buf[i*4] << 24 | buf[i*4+1] << 16 | buf[i*4+2] << 8 | buf[i*4+3];
1215 buf_set_u32(lm32->reg_cache->reg_list[i].value, 0, 32, data);
1217 lm32->reg_cache->reg_list[i].dirty = 0;
1218 lm32->reg_cache->reg_list[i].valid = 1;
1220 LOG_DEBUG("reg %i -> %02x", i, buf_get_u32(buf+(i*4), 0, 32));
1223 LOG_DEBUG("pc=0x%08x", buf_get_u32(lm32->reg_cache->reg_list[LM32_PC].value, 0, 32));
1225 eid = buf_get_u32(lm32->reg_cache->reg_list[LM32_EID].value, 0, 32) & 0xff;
1228 case LM32_EID_RESET:
1229 target->debug_reason = DBG_REASON_DBGRQ;
1231 case LM32_EID_BREAKPOINT:
1232 if (target->halt_issued)
1233 target->debug_reason = DBG_REASON_DBGRQ;
1235 target->debug_reason = DBG_REASON_BREAKPOINT;
1237 case LM32_EID_WATCHPOINT:
1238 target->debug_reason = DBG_REASON_WATCHPOINT;
1240 case LM32_EID_IBUS_ERROR:
1241 case LM32_EID_DBUS_ERROR:
1242 case LM32_EID_DIVIDE_BY_ZERO:
1243 case LM32_EID_INTERRUPT:
1244 case LM32_EID_SYSTEMCALL:
1246 target->debug_reason = DBG_REASON_UNDEFINED;
1250 LOG_DEBUG("eid=%d debug_reason=%d", eid, target->debug_reason);
1256 lm32_enter_debug(struct target *target)
1261 ret = lm32_read_jrx(target, &data);
1262 if (ret != ERROR_OK || data != 'T')
1264 target->state = TARGET_UNKNOWN;
1268 target->state = TARGET_HALTED;
1269 lm32_debug_entry(target);
1275 lm32_restore_context(struct target *target)
1277 struct lm32 *lm32 = target_to_lm32(target);
1282 uint8_t buf[LM32_NUM_REGS * sizeof(uint32_t)];
1286 if (target->state != TARGET_HALTED)
1288 LOG_WARNING("target not halted");
1289 return ERROR_TARGET_NOT_HALTED;
1293 for (i = 0; i < LM32_NUM_REGS; i++)
1295 uint8_t* v = lm32->reg_cache->reg_list[i].value;
1296 uint32_t data = v[0] << 24 | v[1] << 16 | v[2] << 8 | v[3];
1297 buf_set_u32(buf+(i*4), 0, 32, data);
1298 if (lm32->reg_cache->reg_list[i].dirty)
1304 /* write registers content back */
1307 ret = lm32_write_memory(target, lm32->reg_base, 4, LM32_NUM_REGS, buf);
1308 if (ret != ERROR_OK)
1310 LOG_ERROR("error writing monitor command");
1311 return ERROR_TARGET_FAILURE;
1319 lm32_arch_state(struct target *target)
1325 lm32_poll(struct target *target)
1327 struct lm32 *lm32 = target_to_lm32(target);
1331 if (target->state == TARGET_RUNNING)
1333 enum target_state previous_state = target->state;
1335 if (lm32_get_status(target, &status) != ERROR_OK)
1337 LOG_ERROR("Could not read TAP state. Reset SoC.");
1338 return ERROR_TARGET_FAILURE;
1341 if (!(status & LM32_STAT_RX_READY))
1345 ret = lm32_enter_debug(target);
1346 if (ret != ERROR_OK)
1348 LOG_ERROR("Error while polling target state. Reset SoC.");
1349 return ERROR_TARGET_FAILURE;
1352 /* remove remapped exceptions in case we issued a 'reset halt' */
1353 if (lm32->dc_csr & LM32_CSR_DC_RE)
1355 lm32->dc_csr &= ~LM32_CSR_DC_RE;
1356 ret = lm32_write_csr(target, LM32_CSR_DC, lm32->dc_csr);
1357 if (ret != ERROR_OK)
1359 LOG_ERROR("Could not write CSR. Reset SoC.");
1360 return ERROR_TARGET_FAILURE;
1364 /* if target was running, signal that we halted
1365 * otherwise we reentered from debug execution */
1366 if (previous_state == TARGET_RUNNING)
1367 target_call_event_callbacks(target, TARGET_EVENT_HALTED);
1374 lm32_halt(struct target *target)
1378 LOG_DEBUG("target->state: %s", target_state_name(target));
1380 if (target->state == TARGET_HALTED)
1382 LOG_DEBUG("target was already halted");
1385 else if (target->state == TARGET_UNKNOWN)
1387 LOG_ERROR("target was in unknown state when halt was requested");
1388 return ERROR_TARGET_INVALID;
1390 else if (target->state == TARGET_RESET)
1392 LOG_ERROR("target was in reset state when halt was requested");
1393 return ERROR_TARGET_INVALID;
1396 ret = lm32_dp_send_command(target, LM32_DP_BREAK, 1);
1397 if (ret != ERROR_OK)
1399 LOG_ERROR("could not send BREAK command");
1403 lm32_invalidate_regs(target);
1409 lm32_assert_reset(struct target *target)
1411 /* do nothing here */
1416 lm32_deassert_reset(struct target *target)
1418 struct lm32 *lm32 = target_to_lm32(target);
1422 ret = lm32_dp_send_command(target, LM32_DP_RESET, 0);
1423 if (ret != ERROR_OK)
1426 ret = lm32_dp_send_command(target, LM32_DP_BREAK, 0);
1427 if (ret != ERROR_OK)
1430 ret = lm32_read_jrx(target, &data);
1431 if (ret != ERROR_OK)
1436 LOG_ERROR("Error while accessing debug monitor. Reset SoC.");
1437 return ERROR_TARGET_FAILURE;
1440 target->state = TARGET_HALTED;
1442 ret = lm32_debug_entry(target);
1443 if (ret != ERROR_OK)
1446 ret = lm32_clear_hw_breakpoints(target);
1447 if (ret != ERROR_OK)
1448 LOG_WARNING("Could not clear all hw breakpoints");
1450 ret = lm32_clear_watchpoints(target);
1451 if (ret != ERROR_OK)
1452 LOG_WARNING("Could not clear all watchpoints");
1454 if (target->reset_halt)
1456 lm32->dc_csr |= LM32_CSR_DC_RE;
1457 ret = lm32_write_csr(target, LM32_CSR_DC, lm32->dc_csr);
1458 if (ret != ERROR_OK)
1462 ret = lm32_dp_send_command(target, LM32_DP_RESET, 1);
1463 if (ret != ERROR_OK)
1466 target->state = TARGET_RUNNING;
1471 target->state = TARGET_UNKNOWN;
1476 lm32_resume(struct target *target, int current, uint32_t address, int handle_breakpoints, int debug_execution)
1478 struct lm32 *lm32 = target_to_lm32(target);
1479 struct breakpoint *breakpoint;
1483 if (target->state != TARGET_HALTED)
1485 LOG_WARNING("target not halted");
1486 return ERROR_TARGET_NOT_HALTED;
1489 if (!debug_execution)
1491 target_free_all_working_areas(target);
1496 buf_set_u32(lm32->reg_cache->reg_list[LM32_PC].value, 0, 32, address);
1497 lm32->reg_cache->reg_list[LM32_PC].dirty = 1;
1498 lm32->reg_cache->reg_list[LM32_PC].valid = 1;
1501 /* the front-end may request us not to handle breakpoints */
1502 if (handle_breakpoints)
1504 breakpoint = breakpoint_find(target,
1505 buf_get_u32(lm32->reg_cache->reg_list[LM32_PC].value, 0, 32));
1507 if (breakpoint != NULL)
1510 * (1) unset breakpoint
1512 * (3) set breakpoint
1518 if ((ret = lm32_restore_context(target)) != ERROR_OK)
1520 LOG_ERROR("error restoring context");
1524 ret = lm32_mon_continue(target);
1525 if (ret != ERROR_OK)
1528 target_call_event_callbacks(target, TARGET_EVENT_RESUMED);
1529 target->state = TARGET_RUNNING;
1535 lm32_step(struct target *target, int current, uint32_t address, int handle_breakpoints)
1537 LOG_WARNING("not implemented");
1543 lm32_get_gdb_reg_list(struct target *target, struct reg **reg_list[], int *reg_list_size)
1545 struct lm32 *lm32 = target_to_lm32(target);
1548 *reg_list_size = LM32_NUM_REGS;
1549 *reg_list = calloc(sizeof(struct reg*), LM32_NUM_REGS);
1551 for (i = 0; i < LM32_NUM_REGS; i++)
1553 (*reg_list)[i] = &(lm32->reg_cache->reg_list[i]);
1560 lm32_set_breakpoint(struct target *target, struct breakpoint *breakpoint)
1562 struct lm32 *lm32 = target_to_lm32(target);
1566 if (breakpoint->set)
1568 LOG_WARNING("breakpoint already set");
1572 switch (breakpoint->type)
1579 /* find free hw bp */
1580 for (bp_num = 0; bp_num < lm32->num_bps; bp_num++)
1582 if (!(lm32->bps_used & (1 << bp_num)))
1585 assert (bp_num < lm32->num_bps);
1589 case 0: csr = LM32_CSR_BP0; break;
1590 case 1: csr = LM32_CSR_BP1; break;
1591 case 2: csr = LM32_CSR_BP2; break;
1592 case 3: csr = LM32_CSR_BP3; break;
1594 LOG_ERROR("BUG: bp# %i not supported", bp_num);
1598 ret = lm32_write_csr(target, csr, breakpoint->address | 1);
1600 /* mark bp as used */
1601 lm32->bps_used |= (1 << bp_num);
1603 /* remember bp_num */
1604 breakpoint->set = bp_num + 1;
1605 LOG_DEBUG("bp_num %i bp_value 0x%x", bp_num, breakpoint->address);
1609 uint32_t verify = 0;
1610 uint32_t orig_instr;
1612 ret = target_read_u32(target, breakpoint->address, &orig_instr);
1613 if (ret != ERROR_OK)
1615 LOG_DEBUG("error while reading original instruction");
1618 buf_set_u32(breakpoint->orig_instr, 0, 32, orig_instr);
1620 ret = target_write_u32(target, breakpoint->address, LM32_INST_BREAK);
1621 if (ret != ERROR_OK)
1623 LOG_DEBUG("error while writing software breakpoint");
1627 ret = target_read_u32(target, breakpoint->address, &verify);
1628 if (ret != ERROR_OK)
1630 LOG_DEBUG("error reading back software breakpoint");
1634 if (verify != LM32_INST_BREAK)
1636 LOG_ERROR("Unable to set 32bit breakpoint at address %08x - check that memory is read/writable", breakpoint->address);
1640 breakpoint->set = 1;
1644 LOG_ERROR("BUG: unknown breakpoint type");
1653 lm32_unset_breakpoint(struct target *target, struct breakpoint *breakpoint)
1655 struct lm32 *lm32 = target_to_lm32(target);
1658 if (!breakpoint->set)
1660 LOG_WARNING("breakpoint not set");
1664 switch (breakpoint->type)
1668 int bp_num = breakpoint->set - 1;
1671 assert(bp_num < lm32->num_bps);
1674 case 0: csr = LM32_CSR_BP0; break;
1675 case 1: csr = LM32_CSR_BP1; break;
1676 case 2: csr = LM32_CSR_BP2; break;
1677 case 3: csr = LM32_CSR_BP3; break;
1679 LOG_ERROR("BUG: bp# %i not supported", bp_num);
1683 /* clear used flag */
1684 lm32->bps_used &= ~(1 << bp_num);
1686 ret = lm32_write_csr(target, csr, 0);
1687 if (ret != ERROR_OK)
1692 uint32_t current_instr;
1694 /* check that user program has not modified breakpoint instruction */
1695 ret = target_read_u32(target, breakpoint->address, ¤t_instr);
1696 if (ret != ERROR_OK)
1698 LOG_DEBUG("error while reading memory");
1701 if (current_instr == LM32_INST_BREAK)
1703 ret = lm32_write_memory(target, breakpoint->address, 4, 1, breakpoint->orig_instr);
1704 if (ret != ERROR_OK)
1709 LOG_WARNING("breakpoint at %08x has been overwritten by user", breakpoint->address);
1714 LOG_ERROR("BUG: unknown breakpoint type");
1719 breakpoint->set = 0;
1725 lm32_add_breakpoint(struct target *target, struct breakpoint *breakpoint)
1727 struct lm32 *lm32 = target_to_lm32(target);
1729 if (target->state != TARGET_HALTED)
1731 LOG_WARNING("target not halted");
1732 return ERROR_TARGET_NOT_HALTED;
1735 if (breakpoint->length != 4)
1736 return ERROR_INVALID_ARGUMENTS;
1738 if (breakpoint->type == BKPT_HARD)
1740 if ((lm32->bps_used ^ ((1 << lm32->num_bps) - 1)) == 0)
1742 LOG_INFO("no more hardware breakpoints available");
1743 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
1747 return lm32_set_breakpoint(target, breakpoint);
1751 lm32_remove_breakpoint(struct target *target, struct breakpoint *breakpoint)
1753 if (target->state != TARGET_HALTED)
1755 LOG_WARNING("target not halted");
1756 return ERROR_TARGET_NOT_HALTED;
1759 if (breakpoint->length != 4)
1760 return ERROR_INVALID_ARGUMENTS;
1762 if (breakpoint->set)
1764 lm32_unset_breakpoint(target, breakpoint);
1772 lm32_set_watchpoint(struct target *target, struct watchpoint *watchpoint)
1774 struct lm32 *lm32 = target_to_lm32(target);
1777 if (target->state != TARGET_HALTED)
1779 LOG_ERROR("target not halted");
1780 return ERROR_TARGET_NOT_HALTED;
1783 switch(watchpoint->rw)
1792 LOG_ERROR("BUG: watchpoint neither read nor write");
1799 lm32_add_watchpoint(struct target *target, struct watchpoint *watchpoint)
1801 LOG_WARNING("not implemented");
1807 lm32_remove_watchpoint(struct target *target, struct watchpoint *watchpoint)
1809 LOG_WARNING("not implemented");
1815 lm32_get_reg(struct reg *reg)
1817 struct lm32_reg *arch_info = reg->arch_info;
1818 struct target *target = arch_info->target;
1819 struct lm32 *lm32 = target_to_lm32(target);
1820 int num = arch_info->num;
1825 LOG_DEBUG("name=%s", reg->name);
1827 if (target->state != TARGET_HALTED)
1829 return ERROR_TARGET_NOT_HALTED;
1832 ret = target_read_memory(target, lm32->reg_base + (4*num), 4, 1, buf);
1833 if (ret != ERROR_OK)
1836 data = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
1837 buf_set_u32(lm32->reg_cache->reg_list[num].value, 0, 32, data);
1846 lm32_set_reg(struct reg *reg, uint8_t *buf)
1848 struct lm32_reg *arch_info = reg->arch_info;
1849 struct target *target = arch_info->target;
1850 struct lm32 *lm32 = target_to_lm32(target);
1851 int num = arch_info->num;
1852 uint32_t value = buf_get_u32(buf, 0, 32);
1856 LOG_DEBUG("reg=%s value=%08x", reg->name, value);
1858 if (target->state != TARGET_HALTED)
1860 return ERROR_TARGET_NOT_HALTED;
1863 tmp_buf[0] = (value >> 24) & 0xff;
1864 tmp_buf[1] = (value >> 16) & 0xff;
1865 tmp_buf[2] = (value >> 8) & 0xff;
1866 tmp_buf[3] = value & 0xff;
1868 ret = lm32_write_memory(target, lm32->reg_base + (4 * num), 4, 1, tmp_buf);
1869 if (ret != ERROR_OK)
1877 static const struct reg_arch_type lm32_reg_type =
1879 .get = lm32_get_reg,
1880 .set = lm32_set_reg,
1884 lm32_build_reg_cache(struct target *target)
1886 struct lm32 *lm32 = target_to_lm32(target);
1887 struct reg_cache **cache_p = register_get_last_cache_p(&target->reg_cache);
1888 struct lm32_reg *arch_info = malloc(sizeof(lm32_reg_arch_info));
1890 int num_regs = ARRAY_SIZE(lm32_reg_arch_info);
1892 struct reg_cache *cache = malloc(sizeof(struct reg_cache));
1893 struct reg *reg_list = malloc(num_regs * sizeof(struct reg));
1895 cache->name = "LM32 registers";
1897 cache->reg_list = reg_list;
1898 cache->num_regs = num_regs;
1900 for (i = 0; i < num_regs; i++)
1902 reg_list[i].name = lm32_reg_list[i];
1903 reg_list[i].value = calloc(4, 1);
1904 reg_list[i].dirty = 0;
1905 reg_list[i].valid = 0;
1906 reg_list[i].size = 32;
1907 reg_list[i].arch_info = &arch_info[i];
1908 reg_list[i].type = &lm32_reg_type;
1909 arch_info[i] = lm32_reg_arch_info[i];
1910 arch_info[i].target = target;
1914 lm32->reg_cache = cache;
1918 lm32_init_arch_info(struct target *target, struct lm32 *lm32, struct jtag_tap *tap, const char *variant)
1920 target->arch_info = lm32;
1922 if (!variant || !strlen(variant)) {
1923 LOG_ERROR("variant not defined");
1927 if (strcmp(variant, "xc6s") == 0)
1929 #define XC6S_USER1 0x2
1930 lm32->ir_insn = XC6S_USER1;
1934 LOG_ERROR("%s: unrecognized variant %s", tap->dotted_name, variant);
1942 lm32_init_target(struct command_context *cmd_ctx, struct target *target)
1944 lm32_build_reg_cache(target);
1950 lm32_examine(struct target *target)
1952 struct lm32 *lm32 = target_to_lm32(target);
1954 /* set instruction register */
1955 LOG_DEBUG("setting IR to 0x%04x", lm32->ir_insn);
1956 lm32_jtag_set_instr(target->tap, lm32->ir_insn, TAP_IDLE);
1958 target_set_examined(target);
1964 lm32_target_create(struct target *target, Jim_Interp *interp)
1966 struct lm32 *lm32 = calloc(1, sizeof(struct lm32));
1971 lm32->dp_enabled = false;
1972 lm32->ignore_ack = true;
1978 return lm32_init_arch_info(target, lm32, target->tap,
1983 lm32_bulk_write_memory(struct target *target, uint32_t address, uint32_t count, uint8_t *buffer)
1985 /* XXX endianess ? */
1986 return lm32_write_memory(target, address, 1, 4*count, buffer);
1990 lm32_checksum_memory(struct target *target, uint32_t address, uint32_t size, uint32_t *checksum)
1992 return ERROR_FAIL; /* use bulk read method */
1998 COMMAND_HANDLER(lm32_handle_break_command)
2000 struct target *target = get_current_target(CMD_CTX);
2001 return lm32_dp_send_command(target, LM32_DP_BREAK, 1);
2004 COMMAND_HANDLER(lm32_handle_reset_command)
2006 struct target *target = get_current_target(CMD_CTX);
2007 target->state = TARGET_RUNNING;
2008 return lm32_dp_send_command(target, LM32_DP_RESET, 1);
2011 COMMAND_HANDLER(lm32_handle_status_command)
2013 struct target *target = get_current_target(CMD_CTX);
2017 ret = lm32_get_status(target, &status);
2018 if (ret != ERROR_OK)
2021 command_print(CMD_CTX, "rx_ready=%i tx_full=%i processing=%i",
2022 (status & LM32_STAT_RX_READY) ? 1 : 0,
2023 (status & LM32_STAT_TX_FULL) ? 1 : 0,
2024 (status & LM32_STAT_PROCESSING) ? 1 : 0
2030 COMMAND_HANDLER(lm32_handle_cfg_command)
2032 struct target *target = get_current_target(CMD_CTX);
2036 ret = lm32_mon_read_csr(target, LM32_CSR_CFG, &cfg);
2037 if (ret != ERROR_OK)
2040 static const char* on_off[2] = { "enabled", "disabled" };
2042 command_print(CMD_CTX, "CFG=0x%08x", cfg);
2043 command_print(CMD_CTX, " Multiply: %s",
2044 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2045 command_print(CMD_CTX, " Divide: %s",
2046 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2047 command_print(CMD_CTX, " Barrel shift: %s",
2048 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2049 command_print(CMD_CTX, " Sign extend: %s",
2050 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2051 command_print(CMD_CTX, " User: %s",
2052 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2053 command_print(CMD_CTX, " Cycle counter: %s",
2054 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2055 command_print(CMD_CTX, " D-Cache: %s",
2056 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2057 command_print(CMD_CTX, " I-Cache: %s",
2058 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2059 command_print(CMD_CTX, " Debug: %s",
2060 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2061 command_print(CMD_CTX, " H/W debug: %s",
2062 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2063 command_print(CMD_CTX, " ROM debug: %s",
2064 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2065 command_print(CMD_CTX, " JTAG UART: %s",
2066 on_off[(cfg & LM32_CSR_CFG_M) ? 0 : 1]);
2067 command_print(CMD_CTX, " Interrupts: %d",
2068 LM32_CSR_CFG_INT(cfg));
2069 command_print(CMD_CTX, " Breakpoints: %d",
2070 LM32_CSR_CFG_BP(cfg));
2071 command_print(CMD_CTX, " Watchpoints: %d",
2072 LM32_CSR_CFG_WP(cfg));
2073 command_print(CMD_CTX, " Revision: %d",
2074 LM32_CSR_CFG_REV(cfg));
2079 COMMAND_HANDLER(lm32_handle_juart_read_command)
2081 struct target *target = get_current_target(CMD_CTX);
2085 if ((ret = lm32_read_jrx(target, &data)) != ERROR_OK)
2087 LOG_ERROR("error reading rx");
2091 command_print(CMD_CTX, "rx=%02x", data);
2096 COMMAND_HANDLER(lm32_handle_juart_write_command)
2098 struct target *target = get_current_target(CMD_CTX);
2103 LOG_ERROR("'lm32 juart write <byte>' command takes one operands");
2107 COMMAND_PARSE_NUMBER(u8, CMD_ARGV[0], byte);
2109 return lm32_write_jtx(target, byte);
2112 COMMAND_HANDLER(lm32_handle_monitor_version_command)
2114 struct target *target = get_current_target(CMD_CTX);
2118 ret = lm32_mon_version(target, &version);
2119 if (ret != ERROR_OK)
2121 LOG_ERROR("error reading version");
2125 command_print(CMD_CTX, "monitor version is %d", version);
2130 COMMAND_HANDLER(lm32_handle_monitor_sh_command)
2132 struct target *target = get_current_target(CMD_CTX);
2139 LOG_ERROR("'lm32 monitor sh <addr> <data>' command takes two operands");
2143 COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
2144 COMMAND_PARSE_NUMBER(u16, CMD_ARGV[1], data);
2146 ret = lm32_mon_store_u16(target, addr, data);
2147 if (ret != ERROR_OK)
2149 LOG_ERROR("error storing halfword");
2156 COMMAND_HANDLER(lm32_handle_monitor_sw_command)
2158 struct target *target = get_current_target(CMD_CTX);
2165 LOG_ERROR("'lm32 monitor sw <addr> <data>' command takes two operands");
2169 COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
2170 COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], data);
2172 ret = lm32_mon_store_u32(target, addr, data);
2173 if (ret != ERROR_OK)
2175 LOG_ERROR("error storing word");
2182 COMMAND_HANDLER(lm32_handle_monitor_lh_command)
2184 struct target *target = get_current_target(CMD_CTX);
2191 LOG_ERROR("'lm32 monitor lh <addr>' command takes one operand");
2195 COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
2197 ret = lm32_mon_load_u16(target, addr, &data);
2198 if (ret != ERROR_OK)
2200 LOG_ERROR("error loading halfword");
2204 command_print(CMD_CTX, "0x%04x", data);
2209 COMMAND_HANDLER(lm32_handle_monitor_lw_command)
2211 struct target *target = get_current_target(CMD_CTX);
2218 LOG_ERROR("'lm32 monitor lw <addr>' command takes one operand");
2222 COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
2224 ret = lm32_mon_load_u32(target, addr, &data);
2225 if (ret != ERROR_OK)
2227 LOG_ERROR("error loading halfword");
2231 command_print(CMD_CTX, "0x%08x", data);
2236 COMMAND_HANDLER(lm32_handle_dp_read_command)
2238 struct target *target = get_current_target(CMD_CTX);
2245 LOG_ERROR("'lm32 dp read <addr>' command takes one operand");
2249 COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
2251 ret = lm32_dp_read_memory_addr(target, addr, &data);
2252 if (ret != ERROR_OK)
2255 command_print(CMD_CTX, "%08x=%02x", addr, data);
2260 COMMAND_HANDLER(lm32_handle_dp_read_sequential_command)
2262 struct target *target = get_current_target(CMD_CTX);
2266 ret = lm32_dp_read_sequential(target, &data, 1);
2267 if (ret != ERROR_OK)
2270 command_print(CMD_CTX, "%02x", data);
2275 COMMAND_HANDLER(lm32_handle_dp_write_command)
2277 struct target *target = get_current_target(CMD_CTX);
2284 LOG_ERROR("'lm32 dp write <addr> <byte>' command takes two operands");
2288 COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
2289 COMMAND_PARSE_NUMBER(u8, CMD_ARGV[1], data);
2291 ret = lm32_dp_write_memory_addr(target, addr, data);
2292 if (ret != ERROR_OK)
2298 COMMAND_HANDLER(lm32_handle_dp_write_sequential_command)
2300 struct target *target = get_current_target(CMD_CTX);
2306 LOG_ERROR("'lm32 dp write_seq <byte>' command takes one operand");
2310 COMMAND_PARSE_NUMBER(u8, CMD_ARGV[0], data);
2312 ret = lm32_dp_write_sequential(target, data, 1);
2313 if (ret != ERROR_OK)
2319 COMMAND_HANDLER(lm32_handle_debug_protocol_command)
2321 struct target *target = get_current_target(CMD_CTX);
2322 struct lm32 *lm32 = target_to_lm32(target);
2325 COMMAND_PARSE_ENABLE(CMD_ARGV[0], lm32->dp_enabled);
2327 command_print(CMD_CTX, "debug protocol is %s", (lm32->dp_enabled) ? "enabled" : "disabled");
2332 COMMAND_HANDLER(lm32_handle_ignore_ack_command)
2334 struct target *target = get_current_target(CMD_CTX);
2335 struct lm32 *lm32 = target_to_lm32(target);
2338 COMMAND_PARSE_ON_OFF(CMD_ARGV[0], lm32->ignore_ack);
2340 command_print(CMD_CTX, "ignore ack is %s", (lm32->ignore_ack) ? "on" : "off");
2345 static const struct command_registration lm32_dp_command_handlers[] =
2349 .handler = lm32_handle_dp_read_command,
2350 .mode = COMMAND_EXEC,
2351 .help = "Execute debug protocol read command",
2356 .handler = lm32_handle_dp_read_sequential_command,
2357 .mode = COMMAND_EXEC,
2358 .help = "Execute debug protocol read sequential command",
2363 .handler = lm32_handle_dp_write_command,
2364 .mode = COMMAND_EXEC,
2365 .help = "Execute debug protocol write command",
2366 .usage = "addr byte",
2369 .name = "write_seq",
2370 .handler = lm32_handle_dp_write_sequential_command,
2371 .mode = COMMAND_EXEC,
2372 .help = "Execute debug protocol write sequential command",
2375 COMMAND_REGISTRATION_DONE
2378 static const struct command_registration lm32_monitor_command_handlers[] =
2382 .handler = lm32_handle_monitor_version_command,
2383 .mode = COMMAND_EXEC,
2384 .help = "Retrieve monitor version",
2389 .handler = lm32_handle_monitor_sh_command,
2390 .mode = COMMAND_EXEC,
2391 .help = "Store halfword",
2392 .usage = "addr data",
2396 .handler = lm32_handle_monitor_sw_command,
2397 .mode = COMMAND_EXEC,
2398 .help = "Store word",
2399 .usage = "addr data",
2403 .handler = lm32_handle_monitor_lh_command,
2404 .mode = COMMAND_EXEC,
2405 .help = "Load halfword",
2410 .handler = lm32_handle_monitor_lw_command,
2411 .mode = COMMAND_EXEC,
2412 .help = "Load word",
2415 COMMAND_REGISTRATION_DONE
2418 static const struct command_registration lm32_juart_command_handlers[] =
2422 .handler = lm32_handle_juart_read_command,
2423 .mode = COMMAND_EXEC,
2424 .help = "Read from the JTAG uart.",
2429 .handler = lm32_handle_juart_write_command,
2430 .mode = COMMAND_EXEC,
2431 .help = "Write to the JTAG uart.",
2434 COMMAND_REGISTRATION_DONE
2437 static const struct command_registration lm32_any_command_handlers[] =
2441 .handler = lm32_handle_reset_command,
2442 .mode = COMMAND_ANY,
2443 .help = "Set PC to reset vector.",
2448 .handler = lm32_handle_break_command,
2449 .mode = COMMAND_ANY,
2450 .help = "Set PC to debug vector.",
2455 .handler = lm32_handle_status_command,
2456 .mode = COMMAND_EXEC,
2457 .help = "Show status flags.",
2462 .handler = lm32_handle_cfg_command,
2463 .mode = COMMAND_EXEC,
2464 .help = "Display processor CFG register.",
2468 .name = "debug_protocol",
2469 .handler = lm32_handle_debug_protocol_command,
2470 .mode = COMMAND_EXEC,
2471 .help = "Use the hw-assisted debug protocol to do memory transfers.",
2472 .usage = "['enable'|'disable']",
2475 .name = "ignore_ack",
2476 .handler = lm32_handle_ignore_ack_command,
2477 .mode = COMMAND_EXEC,
2478 .help = "Don't wait for an ACK before transferring the next data byte.",
2479 .usage = "['on'|'off']",
2483 .mode = COMMAND_ANY,
2484 .help = "JTAG debug protocol commands",
2485 .chain = lm32_dp_command_handlers,
2489 .mode = COMMAND_ANY,
2490 .help = "JTAG monitor commands",
2491 .chain = lm32_monitor_command_handlers,
2495 .mode = COMMAND_ANY,
2496 .help = "JTAG uart commands",
2497 .chain = lm32_juart_command_handlers,
2499 COMMAND_REGISTRATION_DONE
2502 static const struct command_registration lm32_command_handlers[] =
2506 .mode = COMMAND_ANY,
2507 .help = "lm32 command group",
2508 .chain = lm32_any_command_handlers,
2510 COMMAND_REGISTRATION_DONE
2513 struct target_type lm32_target =
2518 .arch_state = lm32_arch_state,
2520 .target_request_data = NULL,
2523 .resume = lm32_resume,
2526 .assert_reset = lm32_assert_reset,
2527 .deassert_reset = lm32_deassert_reset,
2528 .soft_reset_halt = NULL,
2530 .get_gdb_reg_list = lm32_get_gdb_reg_list,
2532 .read_memory = lm32_read_memory,
2533 .read_phys_memory = NULL,
2534 .write_memory = lm32_write_memory,
2535 .write_phys_memory = NULL,
2536 .bulk_write_memory = lm32_bulk_write_memory,
2538 .checksum_memory = lm32_checksum_memory,
2539 .blank_check_memory = NULL,
2541 .run_algorithm = NULL,
2543 .add_breakpoint = lm32_add_breakpoint,
2544 .remove_breakpoint = lm32_remove_breakpoint,
2545 .add_watchpoint = lm32_add_watchpoint,
2546 .remove_watchpoint = lm32_remove_watchpoint,
2548 .commands = lm32_command_handlers,
2549 .target_create = lm32_target_create,
2550 .init_target = lm32_init_target,
2551 .examine = lm32_examine,