1 /* SPDX-License-Identifier: GPL-2.0-or-later */
11 #include <helper/log.h>
12 #include <helper/time_support.h>
13 #include "target/target.h"
14 #include "target/algorithm.h"
15 #include "target/target_type.h"
16 #include <target/smp.h>
17 #include "jtag/jtag.h"
18 #include "target/register.h"
19 #include "target/breakpoints.h"
22 #include "rtos/rtos.h"
23 #include "debug_defines.h"
24 #include <helper/bits.h>
26 #define get_field(reg, mask) (((reg) & (mask)) / ((mask) & ~((mask) << 1)))
27 #define set_field(reg, mask, val) (((reg) & ~(mask)) | (((val) * ((mask) & ~((mask) << 1))) & (mask)))
29 /* Constants for legacy SiFive hardware breakpoints. */
30 #define CSR_BPCONTROL_X (1<<0)
31 #define CSR_BPCONTROL_W (1<<1)
32 #define CSR_BPCONTROL_R (1<<2)
33 #define CSR_BPCONTROL_U (1<<3)
34 #define CSR_BPCONTROL_S (1<<4)
35 #define CSR_BPCONTROL_H (1<<5)
36 #define CSR_BPCONTROL_M (1<<6)
37 #define CSR_BPCONTROL_BPMATCH (0xf<<7)
38 #define CSR_BPCONTROL_BPACTION (0xff<<11)
40 #define DEBUG_ROM_START 0x800
41 #define DEBUG_ROM_RESUME (DEBUG_ROM_START + 4)
42 #define DEBUG_ROM_EXCEPTION (DEBUG_ROM_START + 8)
43 #define DEBUG_RAM_START 0x400
45 #define SETHALTNOT 0x10c
47 /*** JTAG registers. ***/
49 #define DTMCONTROL 0x10
50 #define DTMCONTROL_DBUS_RESET (1<<16)
51 #define DTMCONTROL_IDLE (7<<10)
52 #define DTMCONTROL_ADDRBITS (0xf<<4)
53 #define DTMCONTROL_VERSION (0xf)
56 #define DBUS_OP_START 0
57 #define DBUS_OP_SIZE 2
64 DBUS_STATUS_SUCCESS
= 0,
65 DBUS_STATUS_FAILED
= 2,
68 #define DBUS_DATA_START 2
69 #define DBUS_DATA_SIZE 34
70 #define DBUS_ADDRESS_START 36
78 /*** Debug Bus registers. ***/
80 #define DMCONTROL 0x10
81 #define DMCONTROL_INTERRUPT (((uint64_t)1)<<33)
82 #define DMCONTROL_HALTNOT (((uint64_t)1)<<32)
83 #define DMCONTROL_BUSERROR (7<<19)
84 #define DMCONTROL_SERIAL (3<<16)
85 #define DMCONTROL_AUTOINCREMENT (1<<15)
86 #define DMCONTROL_ACCESS (7<<12)
87 #define DMCONTROL_HARTID (0x3ff<<2)
88 #define DMCONTROL_NDRESET (1<<1)
89 #define DMCONTROL_FULLRESET 1
92 #define DMINFO_ABUSSIZE (0x7fU<<25)
93 #define DMINFO_SERIALCOUNT (0xf<<21)
94 #define DMINFO_ACCESS128 (1<<20)
95 #define DMINFO_ACCESS64 (1<<19)
96 #define DMINFO_ACCESS32 (1<<18)
97 #define DMINFO_ACCESS16 (1<<17)
98 #define DMINFO_ACCESS8 (1<<16)
99 #define DMINFO_DRAMSIZE (0x3f<<10)
100 #define DMINFO_AUTHENTICATED (1<<5)
101 #define DMINFO_AUTHBUSY (1<<4)
102 #define DMINFO_AUTHTYPE (3<<2)
103 #define DMINFO_VERSION 3
105 /*** Info about the core being debugged. ***/
107 #define DBUS_ADDRESS_UNKNOWN 0xffff
110 #define DRAM_CACHE_SIZE 16
112 uint8_t ir_dtmcontrol
[4] = {DTMCONTROL
};
113 struct scan_field select_dtmcontrol
= {
115 .out_value
= ir_dtmcontrol
117 uint8_t ir_dbus
[4] = {DBUS
};
118 struct scan_field select_dbus
= {
122 uint8_t ir_idcode
[4] = {0x1};
123 struct scan_field select_idcode
= {
125 .out_value
= ir_idcode
128 bscan_tunnel_type_t bscan_tunnel_type
;
129 int bscan_tunnel_ir_width
; /* if zero, then tunneling is not present/active */
131 static const uint8_t bscan_zero
[4] = {0};
132 static const uint8_t bscan_one
[4] = {1};
135 struct scan_field select_user4
= {
137 .out_value
= ir_user4
141 uint8_t bscan_tunneled_ir_width
[4] = {5}; /* overridden by assignment in riscv_init_target */
142 struct scan_field _bscan_tunnel_data_register_select_dmi
[] = {
145 .out_value
= bscan_zero
,
149 .num_bits
= 5, /* initialized in riscv_init_target to ir width of DM */
150 .out_value
= ir_dbus
,
155 .out_value
= bscan_tunneled_ir_width
,
160 .out_value
= bscan_zero
,
165 struct scan_field _bscan_tunnel_nested_tap_select_dmi
[] = {
168 .out_value
= bscan_zero
,
173 .out_value
= bscan_tunneled_ir_width
,
177 .num_bits
= 0, /* initialized in riscv_init_target to ir width of DM */
178 .out_value
= ir_dbus
,
183 .out_value
= bscan_zero
,
187 struct scan_field
*bscan_tunnel_nested_tap_select_dmi
= _bscan_tunnel_nested_tap_select_dmi
;
188 uint32_t bscan_tunnel_nested_tap_select_dmi_num_fields
= ARRAY_SIZE(_bscan_tunnel_nested_tap_select_dmi
);
190 struct scan_field
*bscan_tunnel_data_register_select_dmi
= _bscan_tunnel_data_register_select_dmi
;
191 uint32_t bscan_tunnel_data_register_select_dmi_num_fields
= ARRAY_SIZE(_bscan_tunnel_data_register_select_dmi
);
198 bool read
, write
, execute
;
202 /* Wall-clock timeout for a command/access. Settable via RISC-V Target commands.*/
203 int riscv_command_timeout_sec
= DEFAULT_COMMAND_TIMEOUT_SEC
;
205 /* Wall-clock timeout after reset. Settable via RISC-V Target commands.*/
206 int riscv_reset_timeout_sec
= DEFAULT_RESET_TIMEOUT_SEC
;
208 bool riscv_enable_virt2phys
= true;
209 bool riscv_ebreakm
= true;
210 bool riscv_ebreaks
= true;
211 bool riscv_ebreaku
= true;
213 bool riscv_enable_virtual
;
220 const virt2phys_info_t sv32
= {
225 .vpn_shift
= {12, 22},
226 .vpn_mask
= {0x3ff, 0x3ff},
227 .pte_ppn_shift
= {10, 20},
228 .pte_ppn_mask
= {0x3ff, 0xfff},
229 .pa_ppn_shift
= {12, 22},
230 .pa_ppn_mask
= {0x3ff, 0xfff},
233 const virt2phys_info_t sv39
= {
238 .vpn_shift
= {12, 21, 30},
239 .vpn_mask
= {0x1ff, 0x1ff, 0x1ff},
240 .pte_ppn_shift
= {10, 19, 28},
241 .pte_ppn_mask
= {0x1ff, 0x1ff, 0x3ffffff},
242 .pa_ppn_shift
= {12, 21, 30},
243 .pa_ppn_mask
= {0x1ff, 0x1ff, 0x3ffffff},
246 const virt2phys_info_t sv48
= {
251 .vpn_shift
= {12, 21, 30, 39},
252 .vpn_mask
= {0x1ff, 0x1ff, 0x1ff, 0x1ff},
253 .pte_ppn_shift
= {10, 19, 28, 37},
254 .pte_ppn_mask
= {0x1ff, 0x1ff, 0x1ff, 0x1ffff},
255 .pa_ppn_shift
= {12, 21, 30, 39},
256 .pa_ppn_mask
= {0x1ff, 0x1ff, 0x1ff, 0x1ffff},
259 void riscv_sample_buf_maybe_add_timestamp(struct target
*target
, bool before
)
262 uint32_t now
= timeval_ms() & 0xffffffff;
263 if (r
->sample_buf
.used
+ 5 < r
->sample_buf
.size
) {
265 r
->sample_buf
.buf
[r
->sample_buf
.used
++] = RISCV_SAMPLE_BUF_TIMESTAMP_BEFORE
;
267 r
->sample_buf
.buf
[r
->sample_buf
.used
++] = RISCV_SAMPLE_BUF_TIMESTAMP_AFTER
;
268 r
->sample_buf
.buf
[r
->sample_buf
.used
++] = now
& 0xff;
269 r
->sample_buf
.buf
[r
->sample_buf
.used
++] = (now
>> 8) & 0xff;
270 r
->sample_buf
.buf
[r
->sample_buf
.used
++] = (now
>> 16) & 0xff;
271 r
->sample_buf
.buf
[r
->sample_buf
.used
++] = (now
>> 24) & 0xff;
275 static int riscv_resume_go_all_harts(struct target
*target
);
277 void select_dmi_via_bscan(struct target
*target
)
279 jtag_add_ir_scan(target
->tap
, &select_user4
, TAP_IDLE
);
280 if (bscan_tunnel_type
== BSCAN_TUNNEL_DATA_REGISTER
)
281 jtag_add_dr_scan(target
->tap
, bscan_tunnel_data_register_select_dmi_num_fields
,
282 bscan_tunnel_data_register_select_dmi
, TAP_IDLE
);
283 else /* BSCAN_TUNNEL_NESTED_TAP */
284 jtag_add_dr_scan(target
->tap
, bscan_tunnel_nested_tap_select_dmi_num_fields
,
285 bscan_tunnel_nested_tap_select_dmi
, TAP_IDLE
);
288 uint32_t dtmcontrol_scan_via_bscan(struct target
*target
, uint32_t out
)
290 /* On BSCAN TAP: Select IR=USER4, issue tunneled IR scan via BSCAN TAP's DR */
291 uint8_t tunneled_ir_width
[4] = {bscan_tunnel_ir_width
};
292 uint8_t tunneled_dr_width
[4] = {32};
293 uint8_t out_value
[5] = {0};
294 uint8_t in_value
[5] = {0};
296 buf_set_u32(out_value
, 0, 32, out
);
297 struct scan_field tunneled_ir
[4] = {};
298 struct scan_field tunneled_dr
[4] = {};
300 if (bscan_tunnel_type
== BSCAN_TUNNEL_DATA_REGISTER
) {
301 tunneled_ir
[0].num_bits
= 3;
302 tunneled_ir
[0].out_value
= bscan_zero
;
303 tunneled_ir
[0].in_value
= NULL
;
304 tunneled_ir
[1].num_bits
= bscan_tunnel_ir_width
;
305 tunneled_ir
[1].out_value
= ir_dtmcontrol
;
306 tunneled_ir
[1].in_value
= NULL
;
307 tunneled_ir
[2].num_bits
= 7;
308 tunneled_ir
[2].out_value
= tunneled_ir_width
;
309 tunneled_ir
[2].in_value
= NULL
;
310 tunneled_ir
[3].num_bits
= 1;
311 tunneled_ir
[3].out_value
= bscan_zero
;
312 tunneled_ir
[3].in_value
= NULL
;
314 tunneled_dr
[0].num_bits
= 3;
315 tunneled_dr
[0].out_value
= bscan_zero
;
316 tunneled_dr
[0].in_value
= NULL
;
317 tunneled_dr
[1].num_bits
= 32 + 1;
318 tunneled_dr
[1].out_value
= out_value
;
319 tunneled_dr
[1].in_value
= in_value
;
320 tunneled_dr
[2].num_bits
= 7;
321 tunneled_dr
[2].out_value
= tunneled_dr_width
;
322 tunneled_dr
[2].in_value
= NULL
;
323 tunneled_dr
[3].num_bits
= 1;
324 tunneled_dr
[3].out_value
= bscan_one
;
325 tunneled_dr
[3].in_value
= NULL
;
327 /* BSCAN_TUNNEL_NESTED_TAP */
328 tunneled_ir
[3].num_bits
= 3;
329 tunneled_ir
[3].out_value
= bscan_zero
;
330 tunneled_ir
[3].in_value
= NULL
;
331 tunneled_ir
[2].num_bits
= bscan_tunnel_ir_width
;
332 tunneled_ir
[2].out_value
= ir_dtmcontrol
;
333 tunneled_ir
[1].in_value
= NULL
;
334 tunneled_ir
[1].num_bits
= 7;
335 tunneled_ir
[1].out_value
= tunneled_ir_width
;
336 tunneled_ir
[2].in_value
= NULL
;
337 tunneled_ir
[0].num_bits
= 1;
338 tunneled_ir
[0].out_value
= bscan_zero
;
339 tunneled_ir
[0].in_value
= NULL
;
341 tunneled_dr
[3].num_bits
= 3;
342 tunneled_dr
[3].out_value
= bscan_zero
;
343 tunneled_dr
[3].in_value
= NULL
;
344 tunneled_dr
[2].num_bits
= 32 + 1;
345 tunneled_dr
[2].out_value
= out_value
;
346 tunneled_dr
[2].in_value
= in_value
;
347 tunneled_dr
[1].num_bits
= 7;
348 tunneled_dr
[1].out_value
= tunneled_dr_width
;
349 tunneled_dr
[1].in_value
= NULL
;
350 tunneled_dr
[0].num_bits
= 1;
351 tunneled_dr
[0].out_value
= bscan_one
;
352 tunneled_dr
[0].in_value
= NULL
;
354 jtag_add_ir_scan(target
->tap
, &select_user4
, TAP_IDLE
);
355 jtag_add_dr_scan(target
->tap
, ARRAY_SIZE(tunneled_ir
), tunneled_ir
, TAP_IDLE
);
356 jtag_add_dr_scan(target
->tap
, ARRAY_SIZE(tunneled_dr
), tunneled_dr
, TAP_IDLE
);
357 select_dmi_via_bscan(target
);
359 int retval
= jtag_execute_queue();
360 if (retval
!= ERROR_OK
) {
361 LOG_ERROR("failed jtag scan: %d", retval
);
364 /* Note the starting offset is bit 1, not bit 0. In BSCAN tunnel, there is a one-bit TCK skew between
366 uint32_t in
= buf_get_u32(in_value
, 1, 32);
367 LOG_DEBUG("DTMCS: 0x%x -> 0x%x", out
, in
);
372 static uint32_t dtmcontrol_scan(struct target
*target
, uint32_t out
)
374 struct scan_field field
;
376 uint8_t out_value
[4] = { 0 };
378 if (bscan_tunnel_ir_width
!= 0)
379 return dtmcontrol_scan_via_bscan(target
, out
);
382 buf_set_u32(out_value
, 0, 32, out
);
384 jtag_add_ir_scan(target
->tap
, &select_dtmcontrol
, TAP_IDLE
);
387 field
.out_value
= out_value
;
388 field
.in_value
= in_value
;
389 jtag_add_dr_scan(target
->tap
, 1, &field
, TAP_IDLE
);
391 /* Always return to dbus. */
392 jtag_add_ir_scan(target
->tap
, &select_dbus
, TAP_IDLE
);
394 int retval
= jtag_execute_queue();
395 if (retval
!= ERROR_OK
) {
396 LOG_ERROR("failed jtag scan: %d", retval
);
400 uint32_t in
= buf_get_u32(field
.in_value
, 0, 32);
401 LOG_DEBUG("DTMCONTROL: 0x%x -> 0x%x", out
, in
);
406 static struct target_type
*get_target_type(struct target
*target
)
408 riscv_info_t
*info
= (riscv_info_t
*) target
->arch_info
;
411 LOG_ERROR("Target has not been initialized");
415 switch (info
->dtm_version
) {
417 return &riscv011_target
;
419 return &riscv013_target
;
421 LOG_ERROR("Unsupported DTM version: %d", info
->dtm_version
);
426 static int riscv_create_target(struct target
*target
, Jim_Interp
*interp
)
428 LOG_DEBUG("riscv_create_target()");
429 target
->arch_info
= calloc(1, sizeof(riscv_info_t
));
430 if (!target
->arch_info
) {
431 LOG_ERROR("Failed to allocate RISC-V target structure.");
434 riscv_info_init(target
, target
->arch_info
);
438 static int riscv_init_target(struct command_context
*cmd_ctx
,
439 struct target
*target
)
441 LOG_DEBUG("riscv_init_target()");
443 info
->cmd_ctx
= cmd_ctx
;
445 select_dtmcontrol
.num_bits
= target
->tap
->ir_length
;
446 select_dbus
.num_bits
= target
->tap
->ir_length
;
447 select_idcode
.num_bits
= target
->tap
->ir_length
;
449 if (bscan_tunnel_ir_width
!= 0) {
450 assert(target
->tap
->ir_length
>= 6);
451 uint32_t ir_user4_raw
= 0x23 << (target
->tap
->ir_length
- 6);
452 ir_user4
[0] = (uint8_t)ir_user4_raw
;
453 ir_user4
[1] = (uint8_t)(ir_user4_raw
>>= 8);
454 ir_user4
[2] = (uint8_t)(ir_user4_raw
>>= 8);
455 ir_user4
[3] = (uint8_t)(ir_user4_raw
>>= 8);
456 select_user4
.num_bits
= target
->tap
->ir_length
;
457 bscan_tunneled_ir_width
[0] = bscan_tunnel_ir_width
;
458 if (bscan_tunnel_type
== BSCAN_TUNNEL_DATA_REGISTER
)
459 bscan_tunnel_data_register_select_dmi
[1].num_bits
= bscan_tunnel_ir_width
;
460 else /* BSCAN_TUNNEL_NESTED_TAP */
461 bscan_tunnel_nested_tap_select_dmi
[2].num_bits
= bscan_tunnel_ir_width
;
464 riscv_semihosting_init(target
);
466 target
->debug_reason
= DBG_REASON_DBGRQ
;
471 static void riscv_free_registers(struct target
*target
)
473 /* Free the shared structure use for most registers. */
474 if (target
->reg_cache
) {
475 if (target
->reg_cache
->reg_list
) {
476 free(target
->reg_cache
->reg_list
[0].arch_info
);
477 /* Free the ones we allocated separately. */
478 for (unsigned i
= GDB_REGNO_COUNT
; i
< target
->reg_cache
->num_regs
; i
++)
479 free(target
->reg_cache
->reg_list
[i
].arch_info
);
480 for (unsigned int i
= 0; i
< target
->reg_cache
->num_regs
; i
++)
481 free(target
->reg_cache
->reg_list
[i
].value
);
482 free(target
->reg_cache
->reg_list
);
484 free(target
->reg_cache
);
488 static void riscv_deinit_target(struct target
*target
)
490 LOG_DEBUG("riscv_deinit_target()");
492 riscv_info_t
*info
= target
->arch_info
;
493 struct target_type
*tt
= get_target_type(target
);
495 if (tt
&& info
->version_specific
)
496 tt
->deinit_target(target
);
498 riscv_free_registers(target
);
500 range_list_t
*entry
, *tmp
;
501 list_for_each_entry_safe(entry
, tmp
, &info
->expose_csr
, list
) {
506 list_for_each_entry_safe(entry
, tmp
, &info
->expose_custom
, list
) {
511 free(info
->reg_names
);
512 free(target
->arch_info
);
514 target
->arch_info
= NULL
;
517 static void trigger_from_breakpoint(struct trigger
*trigger
,
518 const struct breakpoint
*breakpoint
)
520 trigger
->address
= breakpoint
->address
;
521 trigger
->length
= breakpoint
->length
;
522 trigger
->mask
= ~0LL;
523 trigger
->read
= false;
524 trigger
->write
= false;
525 trigger
->execute
= true;
526 /* unique_id is unique across both breakpoints and watchpoints. */
527 trigger
->unique_id
= breakpoint
->unique_id
;
530 static int maybe_add_trigger_t1(struct target
*target
,
531 struct trigger
*trigger
, uint64_t tdata1
)
535 const uint32_t bpcontrol_x
= 1<<0;
536 const uint32_t bpcontrol_w
= 1<<1;
537 const uint32_t bpcontrol_r
= 1<<2;
538 const uint32_t bpcontrol_u
= 1<<3;
539 const uint32_t bpcontrol_s
= 1<<4;
540 const uint32_t bpcontrol_h
= 1<<5;
541 const uint32_t bpcontrol_m
= 1<<6;
542 const uint32_t bpcontrol_bpmatch
= 0xf << 7;
543 const uint32_t bpcontrol_bpaction
= 0xff << 11;
545 if (tdata1
& (bpcontrol_r
| bpcontrol_w
| bpcontrol_x
)) {
546 /* Trigger is already in use, presumably by user code. */
547 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
550 tdata1
= set_field(tdata1
, bpcontrol_r
, trigger
->read
);
551 tdata1
= set_field(tdata1
, bpcontrol_w
, trigger
->write
);
552 tdata1
= set_field(tdata1
, bpcontrol_x
, trigger
->execute
);
553 tdata1
= set_field(tdata1
, bpcontrol_u
,
554 !!(r
->misa
& BIT('U' - 'A')));
555 tdata1
= set_field(tdata1
, bpcontrol_s
,
556 !!(r
->misa
& BIT('S' - 'A')));
557 tdata1
= set_field(tdata1
, bpcontrol_h
,
558 !!(r
->misa
& BIT('H' - 'A')));
559 tdata1
|= bpcontrol_m
;
560 tdata1
= set_field(tdata1
, bpcontrol_bpmatch
, 0); /* exact match */
561 tdata1
= set_field(tdata1
, bpcontrol_bpaction
, 0); /* cause bp exception */
563 riscv_set_register(target
, GDB_REGNO_TDATA1
, tdata1
);
565 riscv_reg_t tdata1_rb
;
566 if (riscv_get_register(target
, &tdata1_rb
, GDB_REGNO_TDATA1
) != ERROR_OK
)
568 LOG_DEBUG("tdata1=0x%" PRIx64
, tdata1_rb
);
570 if (tdata1
!= tdata1_rb
) {
571 LOG_DEBUG("Trigger doesn't support what we need; After writing 0x%"
572 PRIx64
" to tdata1 it contains 0x%" PRIx64
,
574 riscv_set_register(target
, GDB_REGNO_TDATA1
, 0);
575 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
578 riscv_set_register(target
, GDB_REGNO_TDATA2
, trigger
->address
);
583 static int maybe_add_trigger_t2(struct target
*target
,
584 struct trigger
*trigger
, uint64_t tdata1
)
588 /* tselect is already set */
589 if (tdata1
& (MCONTROL_EXECUTE
| MCONTROL_STORE
| MCONTROL_LOAD
)) {
590 /* Trigger is already in use, presumably by user code. */
591 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
594 /* address/data match trigger */
595 tdata1
|= MCONTROL_DMODE(riscv_xlen(target
));
596 tdata1
= set_field(tdata1
, MCONTROL_ACTION
,
597 MCONTROL_ACTION_DEBUG_MODE
);
598 tdata1
= set_field(tdata1
, MCONTROL_MATCH
, MCONTROL_MATCH_EQUAL
);
599 tdata1
|= MCONTROL_M
;
600 if (r
->misa
& (1 << ('S' - 'A')))
601 tdata1
|= MCONTROL_S
;
602 if (r
->misa
& (1 << ('U' - 'A')))
603 tdata1
|= MCONTROL_U
;
605 if (trigger
->execute
)
606 tdata1
|= MCONTROL_EXECUTE
;
608 tdata1
|= MCONTROL_LOAD
;
610 tdata1
|= MCONTROL_STORE
;
612 riscv_set_register(target
, GDB_REGNO_TDATA1
, tdata1
);
615 int result
= riscv_get_register(target
, &tdata1_rb
, GDB_REGNO_TDATA1
);
616 if (result
!= ERROR_OK
)
618 LOG_DEBUG("tdata1=0x%" PRIx64
, tdata1_rb
);
620 if (tdata1
!= tdata1_rb
) {
621 LOG_DEBUG("Trigger doesn't support what we need; After writing 0x%"
622 PRIx64
" to tdata1 it contains 0x%" PRIx64
,
624 riscv_set_register(target
, GDB_REGNO_TDATA1
, 0);
625 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
628 riscv_set_register(target
, GDB_REGNO_TDATA2
, trigger
->address
);
633 static int maybe_add_trigger_t6(struct target
*target
,
634 struct trigger
*trigger
, uint64_t tdata1
)
638 /* tselect is already set */
639 if (tdata1
& (CSR_MCONTROL6_EXECUTE
| CSR_MCONTROL6_STORE
| CSR_MCONTROL6_LOAD
)) {
640 /* Trigger is already in use, presumably by user code. */
641 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
644 /* address/data match trigger */
645 tdata1
|= MCONTROL_DMODE(riscv_xlen(target
));
646 tdata1
= set_field(tdata1
, CSR_MCONTROL6_ACTION
,
647 MCONTROL_ACTION_DEBUG_MODE
);
648 tdata1
= set_field(tdata1
, CSR_MCONTROL6_MATCH
, MCONTROL_MATCH_EQUAL
);
649 tdata1
|= CSR_MCONTROL6_M
;
650 if (r
->misa
& (1 << ('H' - 'A')))
651 tdata1
|= CSR_MCONTROL6_VS
| CSR_MCONTROL6_VU
;
652 if (r
->misa
& (1 << ('S' - 'A')))
653 tdata1
|= CSR_MCONTROL6_S
;
654 if (r
->misa
& (1 << ('U' - 'A')))
655 tdata1
|= CSR_MCONTROL6_U
;
657 if (trigger
->execute
)
658 tdata1
|= CSR_MCONTROL6_EXECUTE
;
660 tdata1
|= CSR_MCONTROL6_LOAD
;
662 tdata1
|= CSR_MCONTROL6_STORE
;
664 riscv_set_register(target
, GDB_REGNO_TDATA1
, tdata1
);
667 int result
= riscv_get_register(target
, &tdata1_rb
, GDB_REGNO_TDATA1
);
668 if (result
!= ERROR_OK
)
670 LOG_DEBUG("tdata1=0x%" PRIx64
, tdata1_rb
);
672 if (tdata1
!= tdata1_rb
) {
673 LOG_DEBUG("Trigger doesn't support what we need; After writing 0x%"
674 PRIx64
" to tdata1 it contains 0x%" PRIx64
,
676 riscv_set_register(target
, GDB_REGNO_TDATA1
, 0);
677 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
680 riscv_set_register(target
, GDB_REGNO_TDATA2
, trigger
->address
);
685 static int add_trigger(struct target
*target
, struct trigger
*trigger
)
689 if (riscv_enumerate_triggers(target
) != ERROR_OK
)
693 if (riscv_get_register(target
, &tselect
, GDB_REGNO_TSELECT
) != ERROR_OK
)
697 for (i
= 0; i
< r
->trigger_count
; i
++) {
698 if (r
->trigger_unique_id
[i
] != -1)
701 riscv_set_register(target
, GDB_REGNO_TSELECT
, i
);
704 int result
= riscv_get_register(target
, &tdata1
, GDB_REGNO_TDATA1
);
705 if (result
!= ERROR_OK
)
707 int type
= get_field(tdata1
, MCONTROL_TYPE(riscv_xlen(target
)));
712 result
= maybe_add_trigger_t1(target
, trigger
, tdata1
);
715 result
= maybe_add_trigger_t2(target
, trigger
, tdata1
);
718 result
= maybe_add_trigger_t6(target
, trigger
, tdata1
);
721 LOG_DEBUG("trigger %d has unknown type %d", i
, type
);
725 if (result
!= ERROR_OK
)
728 LOG_DEBUG("[%d] Using trigger %d (type %d) for bp %d", target
->coreid
,
729 i
, type
, trigger
->unique_id
);
730 r
->trigger_unique_id
[i
] = trigger
->unique_id
;
734 riscv_set_register(target
, GDB_REGNO_TSELECT
, tselect
);
736 if (i
>= r
->trigger_count
) {
737 LOG_ERROR("Couldn't find an available hardware trigger.");
738 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
745 * Write one memory item of given "size". Use memory access of given "access_size".
746 * Utilize read-modify-write, if needed.
748 static int write_by_given_size(struct target
*target
, target_addr_t address
,
749 uint32_t size
, uint8_t *buffer
, uint32_t access_size
)
751 assert(size
== 1 || size
== 2 || size
== 4 || size
== 8);
752 assert(access_size
== 1 || access_size
== 2 || access_size
== 4 || access_size
== 8);
754 if (access_size
<= size
&& address
% access_size
== 0)
755 /* Can do the memory access directly without a helper buffer. */
756 return target_write_memory(target
, address
, access_size
, size
/ access_size
, buffer
);
758 unsigned int offset_head
= address
% access_size
;
759 unsigned int n_blocks
= ((size
+ offset_head
) <= access_size
) ? 1 : 2;
760 uint8_t helper_buf
[n_blocks
* access_size
];
762 /* Read from memory */
763 if (target_read_memory(target
, address
- offset_head
, access_size
, n_blocks
, helper_buf
) != ERROR_OK
)
766 /* Modify and write back */
767 memcpy(helper_buf
+ offset_head
, buffer
, size
);
768 return target_write_memory(target
, address
- offset_head
, access_size
, n_blocks
, helper_buf
);
772 * Read one memory item of given "size". Use memory access of given "access_size".
773 * Read larger section of memory and pick out the required portion, if needed.
775 static int read_by_given_size(struct target
*target
, target_addr_t address
,
776 uint32_t size
, uint8_t *buffer
, uint32_t access_size
)
778 assert(size
== 1 || size
== 2 || size
== 4 || size
== 8);
779 assert(access_size
== 1 || access_size
== 2 || access_size
== 4 || access_size
== 8);
781 if (access_size
<= size
&& address
% access_size
== 0)
782 /* Can do the memory access directly without a helper buffer. */
783 return target_read_memory(target
, address
, access_size
, size
/ access_size
, buffer
);
785 unsigned int offset_head
= address
% access_size
;
786 unsigned int n_blocks
= ((size
+ offset_head
) <= access_size
) ? 1 : 2;
787 uint8_t helper_buf
[n_blocks
* access_size
];
789 /* Read from memory */
790 if (target_read_memory(target
, address
- offset_head
, access_size
, n_blocks
, helper_buf
) != ERROR_OK
)
793 /* Pick the requested portion from the buffer */
794 memcpy(buffer
, helper_buf
+ offset_head
, size
);
799 * Write one memory item using any memory access size that will work.
800 * Utilize read-modify-write, if needed.
802 int riscv_write_by_any_size(struct target
*target
, target_addr_t address
, uint32_t size
, uint8_t *buffer
)
804 assert(size
== 1 || size
== 2 || size
== 4 || size
== 8);
806 /* Find access size that correspond to data size and the alignment. */
807 unsigned int preferred_size
= size
;
808 while (address
% preferred_size
!= 0)
811 /* First try the preferred (most natural) access size. */
812 if (write_by_given_size(target
, address
, size
, buffer
, preferred_size
) == ERROR_OK
)
815 /* On failure, try other access sizes.
816 Minimize the number of accesses by trying first the largest size. */
817 for (unsigned int access_size
= 8; access_size
> 0; access_size
/= 2) {
818 if (access_size
== preferred_size
)
819 /* Already tried this size. */
822 if (write_by_given_size(target
, address
, size
, buffer
, access_size
) == ERROR_OK
)
826 /* No access attempt succeeded. */
831 * Read one memory item using any memory access size that will work.
832 * Read larger section of memory and pick out the required portion, if needed.
834 int riscv_read_by_any_size(struct target
*target
, target_addr_t address
, uint32_t size
, uint8_t *buffer
)
836 assert(size
== 1 || size
== 2 || size
== 4 || size
== 8);
838 /* Find access size that correspond to data size and the alignment. */
839 unsigned int preferred_size
= size
;
840 while (address
% preferred_size
!= 0)
843 /* First try the preferred (most natural) access size. */
844 if (read_by_given_size(target
, address
, size
, buffer
, preferred_size
) == ERROR_OK
)
847 /* On failure, try other access sizes.
848 Minimize the number of accesses by trying first the largest size. */
849 for (unsigned int access_size
= 8; access_size
> 0; access_size
/= 2) {
850 if (access_size
== preferred_size
)
851 /* Already tried this size. */
854 if (read_by_given_size(target
, address
, size
, buffer
, access_size
) == ERROR_OK
)
858 /* No access attempt succeeded. */
862 int riscv_add_breakpoint(struct target
*target
, struct breakpoint
*breakpoint
)
864 LOG_DEBUG("[%d] @0x%" TARGET_PRIxADDR
, target
->coreid
, breakpoint
->address
);
866 if (breakpoint
->type
== BKPT_SOFT
) {
867 /** @todo check RVC for size/alignment */
868 if (!(breakpoint
->length
== 4 || breakpoint
->length
== 2)) {
869 LOG_ERROR("Invalid breakpoint length %d", breakpoint
->length
);
873 if (0 != (breakpoint
->address
% 2)) {
874 LOG_ERROR("Invalid breakpoint alignment for address 0x%" TARGET_PRIxADDR
, breakpoint
->address
);
878 /* Read the original instruction. */
879 if (riscv_read_by_any_size(
880 target
, breakpoint
->address
, breakpoint
->length
, breakpoint
->orig_instr
) != ERROR_OK
) {
881 LOG_ERROR("Failed to read original instruction at 0x%" TARGET_PRIxADDR
,
882 breakpoint
->address
);
886 uint8_t buff
[4] = { 0 };
887 buf_set_u32(buff
, 0, breakpoint
->length
* CHAR_BIT
, breakpoint
->length
== 4 ? ebreak() : ebreak_c());
888 /* Write the ebreak instruction. */
889 if (riscv_write_by_any_size(target
, breakpoint
->address
, breakpoint
->length
, buff
) != ERROR_OK
) {
890 LOG_ERROR("Failed to write %d-byte breakpoint instruction at 0x%"
891 TARGET_PRIxADDR
, breakpoint
->length
, breakpoint
->address
);
895 } else if (breakpoint
->type
== BKPT_HARD
) {
896 struct trigger trigger
;
897 trigger_from_breakpoint(&trigger
, breakpoint
);
898 int const result
= add_trigger(target
, &trigger
);
899 if (result
!= ERROR_OK
)
902 LOG_INFO("OpenOCD only supports hardware and software breakpoints.");
903 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
906 breakpoint
->is_set
= true;
910 static int remove_trigger(struct target
*target
, struct trigger
*trigger
)
914 if (riscv_enumerate_triggers(target
) != ERROR_OK
)
918 for (i
= 0; i
< r
->trigger_count
; i
++) {
919 if (r
->trigger_unique_id
[i
] == trigger
->unique_id
)
922 if (i
>= r
->trigger_count
) {
923 LOG_ERROR("Couldn't find the hardware resources used by hardware "
927 LOG_DEBUG("[%d] Stop using resource %d for bp %d", target
->coreid
, i
,
931 int result
= riscv_get_register(target
, &tselect
, GDB_REGNO_TSELECT
);
932 if (result
!= ERROR_OK
)
934 riscv_set_register(target
, GDB_REGNO_TSELECT
, i
);
935 riscv_set_register(target
, GDB_REGNO_TDATA1
, 0);
936 riscv_set_register(target
, GDB_REGNO_TSELECT
, tselect
);
937 r
->trigger_unique_id
[i
] = -1;
942 int riscv_remove_breakpoint(struct target
*target
,
943 struct breakpoint
*breakpoint
)
945 if (breakpoint
->type
== BKPT_SOFT
) {
946 /* Write the original instruction. */
947 if (riscv_write_by_any_size(
948 target
, breakpoint
->address
, breakpoint
->length
, breakpoint
->orig_instr
) != ERROR_OK
) {
949 LOG_ERROR("Failed to restore instruction for %d-byte breakpoint at "
950 "0x%" TARGET_PRIxADDR
, breakpoint
->length
, breakpoint
->address
);
954 } else if (breakpoint
->type
== BKPT_HARD
) {
955 struct trigger trigger
;
956 trigger_from_breakpoint(&trigger
, breakpoint
);
957 int result
= remove_trigger(target
, &trigger
);
958 if (result
!= ERROR_OK
)
962 LOG_INFO("OpenOCD only supports hardware and software breakpoints.");
963 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
966 breakpoint
->is_set
= false;
971 static void trigger_from_watchpoint(struct trigger
*trigger
,
972 const struct watchpoint
*watchpoint
)
974 trigger
->address
= watchpoint
->address
;
975 trigger
->length
= watchpoint
->length
;
976 trigger
->mask
= watchpoint
->mask
;
977 trigger
->value
= watchpoint
->value
;
978 trigger
->read
= (watchpoint
->rw
== WPT_READ
|| watchpoint
->rw
== WPT_ACCESS
);
979 trigger
->write
= (watchpoint
->rw
== WPT_WRITE
|| watchpoint
->rw
== WPT_ACCESS
);
980 trigger
->execute
= false;
981 /* unique_id is unique across both breakpoints and watchpoints. */
982 trigger
->unique_id
= watchpoint
->unique_id
;
985 int riscv_add_watchpoint(struct target
*target
, struct watchpoint
*watchpoint
)
987 struct trigger trigger
;
988 trigger_from_watchpoint(&trigger
, watchpoint
);
990 int result
= add_trigger(target
, &trigger
);
991 if (result
!= ERROR_OK
)
993 watchpoint
->is_set
= true;
998 int riscv_remove_watchpoint(struct target
*target
,
999 struct watchpoint
*watchpoint
)
1001 LOG_DEBUG("[%d] @0x%" TARGET_PRIxADDR
, target
->coreid
, watchpoint
->address
);
1003 struct trigger trigger
;
1004 trigger_from_watchpoint(&trigger
, watchpoint
);
1006 int result
= remove_trigger(target
, &trigger
);
1007 if (result
!= ERROR_OK
)
1009 watchpoint
->is_set
= false;
1014 /* Sets *hit_watchpoint to the first watchpoint identified as causing the
1017 * The GDB server uses this information to tell GDB what data address has
1018 * been hit, which enables GDB to print the hit variable along with its old
1020 int riscv_hit_watchpoint(struct target
*target
, struct watchpoint
**hit_watchpoint
)
1022 struct watchpoint
*wp
= target
->watchpoints
;
1024 LOG_DEBUG("Current hartid = %d", riscv_current_hartid(target
));
1026 /*TODO instead of disassembling the instruction that we think caused the
1027 * trigger, check the hit bit of each watchpoint first. The hit bit is
1028 * simpler and more reliable to check but as it is optional and relatively
1029 * new, not all hardware will implement it */
1031 riscv_get_register(target
, &dpc
, GDB_REGNO_DPC
);
1032 const uint8_t length
= 4;
1033 LOG_DEBUG("dpc is 0x%" PRIx64
, dpc
);
1035 /* fetch the instruction at dpc */
1036 uint8_t buffer
[length
];
1037 if (target_read_buffer(target
, dpc
, length
, buffer
) != ERROR_OK
) {
1038 LOG_ERROR("Failed to read instruction at dpc 0x%" PRIx64
, dpc
);
1042 uint32_t instruction
= 0;
1044 for (int i
= 0; i
< length
; i
++) {
1045 LOG_DEBUG("Next byte is %x", buffer
[i
]);
1046 instruction
+= (buffer
[i
] << 8 * i
);
1048 LOG_DEBUG("Full instruction is %x", instruction
);
1050 /* find out which memory address is accessed by the instruction at dpc */
1051 /* opcode is first 7 bits of the instruction */
1052 uint8_t opcode
= instruction
& 0x7F;
1055 riscv_reg_t mem_addr
;
1057 if (opcode
== MATCH_LB
|| opcode
== MATCH_SB
) {
1058 rs1
= (instruction
& 0xf8000) >> 15;
1059 riscv_get_register(target
, &mem_addr
, rs1
);
1061 if (opcode
== MATCH_SB
) {
1062 LOG_DEBUG("%x is store instruction", instruction
);
1063 imm
= ((instruction
& 0xf80) >> 7) | ((instruction
& 0xfe000000) >> 20);
1065 LOG_DEBUG("%x is load instruction", instruction
);
1066 imm
= (instruction
& 0xfff00000) >> 20;
1068 /* sign extend 12-bit imm to 16-bits */
1069 if (imm
& (1 << 11))
1072 LOG_DEBUG("memory address=0x%" PRIx64
, mem_addr
);
1074 LOG_DEBUG("%x is not a RV32I load or store", instruction
);
1079 /*TODO support length/mask */
1080 if (wp
->address
== mem_addr
) {
1081 *hit_watchpoint
= wp
;
1082 LOG_DEBUG("Hit address=%" TARGET_PRIxADDR
, wp
->address
);
1088 /* No match found - either we hit a watchpoint caused by an instruction that
1089 * this function does not yet disassemble, or we hit a breakpoint.
1091 * OpenOCD will behave as if this function had never been implemented i.e.
1092 * report the halt to GDB with no address information. */
1097 static int oldriscv_step(struct target
*target
, int current
, uint32_t address
,
1098 int handle_breakpoints
)
1100 struct target_type
*tt
= get_target_type(target
);
1101 return tt
->step(target
, current
, address
, handle_breakpoints
);
1104 static int old_or_new_riscv_step(struct target
*target
, int current
,
1105 target_addr_t address
, int handle_breakpoints
)
1108 LOG_DEBUG("handle_breakpoints=%d", handle_breakpoints
);
1110 return oldriscv_step(target
, current
, address
, handle_breakpoints
);
1112 return riscv_openocd_step(target
, current
, address
, handle_breakpoints
);
1116 static int riscv_examine(struct target
*target
)
1118 LOG_DEBUG("riscv_examine()");
1119 if (target_was_examined(target
)) {
1120 LOG_DEBUG("Target was already examined.");
1124 /* Don't need to select dbus, since the first thing we do is read dtmcontrol. */
1127 uint32_t dtmcontrol
= dtmcontrol_scan(target
, 0);
1128 LOG_DEBUG("dtmcontrol=0x%x", dtmcontrol
);
1129 info
->dtm_version
= get_field(dtmcontrol
, DTMCONTROL_VERSION
);
1130 LOG_DEBUG(" version=0x%x", info
->dtm_version
);
1132 struct target_type
*tt
= get_target_type(target
);
1136 int result
= tt
->init_target(info
->cmd_ctx
, target
);
1137 if (result
!= ERROR_OK
)
1140 return tt
->examine(target
);
1143 static int oldriscv_poll(struct target
*target
)
1145 struct target_type
*tt
= get_target_type(target
);
1146 return tt
->poll(target
);
1149 static int old_or_new_riscv_poll(struct target
*target
)
1153 return oldriscv_poll(target
);
1155 return riscv_openocd_poll(target
);
1158 int riscv_select_current_hart(struct target
*target
)
1160 return riscv_set_current_hartid(target
, target
->coreid
);
1163 int halt_prep(struct target
*target
)
1167 LOG_DEBUG("[%s] prep hart, debug_reason=%d", target_name(target
),
1168 target
->debug_reason
);
1169 if (riscv_select_current_hart(target
) != ERROR_OK
)
1171 if (riscv_is_halted(target
)) {
1172 LOG_DEBUG("[%s] Hart is already halted (reason=%d).",
1173 target_name(target
), target
->debug_reason
);
1175 if (r
->halt_prep(target
) != ERROR_OK
)
1183 int riscv_halt_go_all_harts(struct target
*target
)
1187 if (riscv_select_current_hart(target
) != ERROR_OK
)
1189 if (riscv_is_halted(target
)) {
1190 LOG_DEBUG("[%s] Hart is already halted.", target_name(target
));
1192 if (r
->halt_go(target
) != ERROR_OK
)
1196 riscv_invalidate_register_cache(target
);
1201 int halt_go(struct target
*target
)
1203 riscv_info_t
*r
= riscv_info(target
);
1205 if (!r
->is_halted
) {
1206 struct target_type
*tt
= get_target_type(target
);
1207 result
= tt
->halt(target
);
1209 result
= riscv_halt_go_all_harts(target
);
1211 target
->state
= TARGET_HALTED
;
1212 if (target
->debug_reason
== DBG_REASON_NOTHALTED
)
1213 target
->debug_reason
= DBG_REASON_DBGRQ
;
1218 static int halt_finish(struct target
*target
)
1220 return target_call_event_callbacks(target
, TARGET_EVENT_HALTED
);
1223 int riscv_halt(struct target
*target
)
1227 if (!r
->is_halted
) {
1228 struct target_type
*tt
= get_target_type(target
);
1229 return tt
->halt(target
);
1232 LOG_DEBUG("[%d] halting all harts", target
->coreid
);
1234 int result
= ERROR_OK
;
1236 struct target_list
*tlist
;
1237 foreach_smp_target(tlist
, target
->smp_targets
) {
1238 struct target
*t
= tlist
->target
;
1239 if (halt_prep(t
) != ERROR_OK
)
1240 result
= ERROR_FAIL
;
1243 foreach_smp_target(tlist
, target
->smp_targets
) {
1244 struct target
*t
= tlist
->target
;
1245 riscv_info_t
*i
= riscv_info(t
);
1247 if (halt_go(t
) != ERROR_OK
)
1248 result
= ERROR_FAIL
;
1252 foreach_smp_target(tlist
, target
->smp_targets
) {
1253 struct target
*t
= tlist
->target
;
1254 if (halt_finish(t
) != ERROR_OK
)
1259 if (halt_prep(target
) != ERROR_OK
)
1260 result
= ERROR_FAIL
;
1261 if (halt_go(target
) != ERROR_OK
)
1262 result
= ERROR_FAIL
;
1263 if (halt_finish(target
) != ERROR_OK
)
1270 static int riscv_assert_reset(struct target
*target
)
1272 LOG_DEBUG("[%d]", target
->coreid
);
1273 struct target_type
*tt
= get_target_type(target
);
1274 riscv_invalidate_register_cache(target
);
1275 return tt
->assert_reset(target
);
1278 static int riscv_deassert_reset(struct target
*target
)
1280 LOG_DEBUG("[%d]", target
->coreid
);
1281 struct target_type
*tt
= get_target_type(target
);
1282 return tt
->deassert_reset(target
);
1285 int riscv_resume_prep_all_harts(struct target
*target
)
1289 LOG_DEBUG("[%s] prep hart", target_name(target
));
1290 if (riscv_select_current_hart(target
) != ERROR_OK
)
1292 if (riscv_is_halted(target
)) {
1293 if (r
->resume_prep(target
) != ERROR_OK
)
1296 LOG_DEBUG("[%s] hart requested resume, but was already resumed",
1297 target_name(target
));
1300 LOG_DEBUG("[%s] mark as prepped", target_name(target
));
1306 /* state must be riscv_reg_t state[RISCV_MAX_HWBPS] = {0}; */
1307 static int disable_triggers(struct target
*target
, riscv_reg_t
*state
)
1311 LOG_DEBUG("deal with triggers");
1313 if (riscv_enumerate_triggers(target
) != ERROR_OK
)
1316 if (r
->manual_hwbp_set
) {
1317 /* Look at every trigger that may have been set. */
1318 riscv_reg_t tselect
;
1319 if (riscv_get_register(target
, &tselect
, GDB_REGNO_TSELECT
) != ERROR_OK
)
1321 for (unsigned int t
= 0; t
< r
->trigger_count
; t
++) {
1322 if (riscv_set_register(target
, GDB_REGNO_TSELECT
, t
) != ERROR_OK
)
1325 if (riscv_get_register(target
, &tdata1
, GDB_REGNO_TDATA1
) != ERROR_OK
)
1327 if (tdata1
& MCONTROL_DMODE(riscv_xlen(target
))) {
1329 if (riscv_set_register(target
, GDB_REGNO_TDATA1
, 0) != ERROR_OK
)
1333 if (riscv_set_register(target
, GDB_REGNO_TSELECT
, tselect
) != ERROR_OK
)
1337 /* Just go through the triggers we manage. */
1338 struct watchpoint
*watchpoint
= target
->watchpoints
;
1340 while (watchpoint
) {
1341 LOG_DEBUG("watchpoint %d: set=%d", i
, watchpoint
->is_set
);
1342 state
[i
] = watchpoint
->is_set
;
1343 if (watchpoint
->is_set
) {
1344 if (riscv_remove_watchpoint(target
, watchpoint
) != ERROR_OK
)
1347 watchpoint
= watchpoint
->next
;
1355 static int enable_triggers(struct target
*target
, riscv_reg_t
*state
)
1359 if (r
->manual_hwbp_set
) {
1360 /* Look at every trigger that may have been set. */
1361 riscv_reg_t tselect
;
1362 if (riscv_get_register(target
, &tselect
, GDB_REGNO_TSELECT
) != ERROR_OK
)
1364 for (unsigned int t
= 0; t
< r
->trigger_count
; t
++) {
1365 if (state
[t
] != 0) {
1366 if (riscv_set_register(target
, GDB_REGNO_TSELECT
, t
) != ERROR_OK
)
1368 if (riscv_set_register(target
, GDB_REGNO_TDATA1
, state
[t
]) != ERROR_OK
)
1372 if (riscv_set_register(target
, GDB_REGNO_TSELECT
, tselect
) != ERROR_OK
)
1376 struct watchpoint
*watchpoint
= target
->watchpoints
;
1378 while (watchpoint
) {
1379 LOG_DEBUG("watchpoint %d: cleared=%" PRId64
, i
, state
[i
]);
1381 if (riscv_add_watchpoint(target
, watchpoint
) != ERROR_OK
)
1384 watchpoint
= watchpoint
->next
;
1393 * Get everything ready to resume.
1395 static int resume_prep(struct target
*target
, int current
,
1396 target_addr_t address
, int handle_breakpoints
, int debug_execution
)
1399 LOG_DEBUG("[%d]", target
->coreid
);
1402 riscv_set_register(target
, GDB_REGNO_PC
, address
);
1404 if (target
->debug_reason
== DBG_REASON_WATCHPOINT
) {
1405 /* To be able to run off a trigger, disable all the triggers, step, and
1406 * then resume as usual. */
1407 riscv_reg_t trigger_state
[RISCV_MAX_HWBPS
] = {0};
1409 if (disable_triggers(target
, trigger_state
) != ERROR_OK
)
1412 if (old_or_new_riscv_step(target
, true, 0, false) != ERROR_OK
)
1415 if (enable_triggers(target
, trigger_state
) != ERROR_OK
)
1420 if (riscv_resume_prep_all_harts(target
) != ERROR_OK
)
1424 LOG_DEBUG("[%d] mark as prepped", target
->coreid
);
1431 * Resume all the harts that have been prepped, as close to instantaneous as
1434 static int resume_go(struct target
*target
, int current
,
1435 target_addr_t address
, int handle_breakpoints
, int debug_execution
)
1437 riscv_info_t
*r
= riscv_info(target
);
1439 if (!r
->is_halted
) {
1440 struct target_type
*tt
= get_target_type(target
);
1441 result
= tt
->resume(target
, current
, address
, handle_breakpoints
,
1444 result
= riscv_resume_go_all_harts(target
);
1450 static int resume_finish(struct target
*target
)
1452 register_cache_invalidate(target
->reg_cache
);
1454 target
->state
= TARGET_RUNNING
;
1455 target
->debug_reason
= DBG_REASON_NOTHALTED
;
1456 return target_call_event_callbacks(target
, TARGET_EVENT_RESUMED
);
1460 * @par single_hart When true, only resume a single hart even if SMP is
1461 * configured. This is used to run algorithms on just one hart.
1464 struct target
*target
,
1466 target_addr_t address
,
1467 int handle_breakpoints
,
1468 int debug_execution
,
1471 LOG_DEBUG("handle_breakpoints=%d", handle_breakpoints
);
1472 int result
= ERROR_OK
;
1473 if (target
->smp
&& !single_hart
) {
1474 struct target_list
*tlist
;
1475 foreach_smp_target_direction(resume_order
== RO_NORMAL
,
1476 tlist
, target
->smp_targets
) {
1477 struct target
*t
= tlist
->target
;
1478 if (resume_prep(t
, current
, address
, handle_breakpoints
,
1479 debug_execution
) != ERROR_OK
)
1480 result
= ERROR_FAIL
;
1483 foreach_smp_target_direction(resume_order
== RO_NORMAL
,
1484 tlist
, target
->smp_targets
) {
1485 struct target
*t
= tlist
->target
;
1486 riscv_info_t
*i
= riscv_info(t
);
1488 if (resume_go(t
, current
, address
, handle_breakpoints
,
1489 debug_execution
) != ERROR_OK
)
1490 result
= ERROR_FAIL
;
1494 foreach_smp_target_direction(resume_order
== RO_NORMAL
,
1495 tlist
, target
->smp_targets
) {
1496 struct target
*t
= tlist
->target
;
1497 if (resume_finish(t
) != ERROR_OK
)
1502 if (resume_prep(target
, current
, address
, handle_breakpoints
,
1503 debug_execution
) != ERROR_OK
)
1504 result
= ERROR_FAIL
;
1505 if (resume_go(target
, current
, address
, handle_breakpoints
,
1506 debug_execution
) != ERROR_OK
)
1507 result
= ERROR_FAIL
;
1508 if (resume_finish(target
) != ERROR_OK
)
1515 static int riscv_target_resume(struct target
*target
, int current
, target_addr_t address
,
1516 int handle_breakpoints
, int debug_execution
)
1518 return riscv_resume(target
, current
, address
, handle_breakpoints
,
1519 debug_execution
, false);
1522 static int riscv_mmu(struct target
*target
, int *enabled
)
1524 if (!riscv_enable_virt2phys
) {
1529 /* Don't use MMU in explicit or effective M (machine) mode */
1531 if (riscv_get_register(target
, &priv
, GDB_REGNO_PRIV
) != ERROR_OK
) {
1532 LOG_ERROR("Failed to read priv register.");
1536 riscv_reg_t mstatus
;
1537 if (riscv_get_register(target
, &mstatus
, GDB_REGNO_MSTATUS
) != ERROR_OK
) {
1538 LOG_ERROR("Failed to read mstatus register.");
1542 if ((get_field(mstatus
, MSTATUS_MPRV
) ? get_field(mstatus
, MSTATUS_MPP
) : priv
) == PRV_M
) {
1543 LOG_DEBUG("SATP/MMU ignored in Machine mode (mstatus=0x%" PRIx64
").", mstatus
);
1549 if (riscv_get_register(target
, &satp
, GDB_REGNO_SATP
) != ERROR_OK
) {
1550 LOG_DEBUG("Couldn't read SATP.");
1551 /* If we can't read SATP, then there must not be an MMU. */
1556 if (get_field(satp
, RISCV_SATP_MODE(riscv_xlen(target
))) == SATP_MODE_OFF
) {
1557 LOG_DEBUG("MMU is disabled.");
1560 LOG_DEBUG("MMU is enabled.");
1567 static int riscv_address_translate(struct target
*target
,
1568 target_addr_t
virtual, target_addr_t
*physical
)
1571 riscv_reg_t satp_value
;
1574 target_addr_t table_address
;
1575 const virt2phys_info_t
*info
;
1579 int result
= riscv_get_register(target
, &satp_value
, GDB_REGNO_SATP
);
1580 if (result
!= ERROR_OK
)
1583 unsigned xlen
= riscv_xlen(target
);
1584 mode
= get_field(satp_value
, RISCV_SATP_MODE(xlen
));
1586 case SATP_MODE_SV32
:
1589 case SATP_MODE_SV39
:
1592 case SATP_MODE_SV48
:
1596 LOG_ERROR("No translation or protection." \
1597 " (satp: 0x%" PRIx64
")", satp_value
);
1600 LOG_ERROR("The translation mode is not supported." \
1601 " (satp: 0x%" PRIx64
")", satp_value
);
1604 LOG_DEBUG("virtual=0x%" TARGET_PRIxADDR
"; mode=%s", virtual, info
->name
);
1606 /* verify bits xlen-1:va_bits-1 are all equal */
1607 target_addr_t mask
= ((target_addr_t
)1 << (xlen
- (info
->va_bits
- 1))) - 1;
1608 target_addr_t masked_msbs
= (virtual >> (info
->va_bits
- 1)) & mask
;
1609 if (masked_msbs
!= 0 && masked_msbs
!= mask
) {
1610 LOG_ERROR("Virtual address 0x%" TARGET_PRIxADDR
" is not sign-extended "
1611 "for %s mode.", virtual, info
->name
);
1615 ppn_value
= get_field(satp_value
, RISCV_SATP_PPN(xlen
));
1616 table_address
= ppn_value
<< RISCV_PGSHIFT
;
1617 i
= info
->level
- 1;
1619 uint64_t vpn
= virtual >> info
->vpn_shift
[i
];
1620 vpn
&= info
->vpn_mask
[i
];
1621 target_addr_t pte_address
= table_address
+
1622 (vpn
<< info
->pte_shift
);
1624 assert(info
->pte_shift
<= 3);
1625 int retval
= r
->read_memory(target
, pte_address
,
1626 4, (1 << info
->pte_shift
) / 4, buffer
, 4);
1627 if (retval
!= ERROR_OK
)
1630 if (info
->pte_shift
== 2)
1631 pte
= buf_get_u32(buffer
, 0, 32);
1633 pte
= buf_get_u64(buffer
, 0, 64);
1635 LOG_DEBUG("i=%d; PTE @0x%" TARGET_PRIxADDR
" = 0x%" PRIx64
, i
,
1638 if (!(pte
& PTE_V
) || (!(pte
& PTE_R
) && (pte
& PTE_W
)))
1641 if ((pte
& PTE_R
) || (pte
& PTE_X
)) /* Found leaf PTE. */
1647 ppn_value
= pte
>> PTE_PPN_SHIFT
;
1648 table_address
= ppn_value
<< RISCV_PGSHIFT
;
1652 LOG_ERROR("Couldn't find the PTE.");
1656 /* Make sure to clear out the high bits that may be set. */
1657 *physical
= virtual & (((target_addr_t
)1 << info
->va_bits
) - 1);
1659 while (i
< info
->level
) {
1660 ppn_value
= pte
>> info
->pte_ppn_shift
[i
];
1661 ppn_value
&= info
->pte_ppn_mask
[i
];
1662 *physical
&= ~(((target_addr_t
)info
->pa_ppn_mask
[i
]) <<
1663 info
->pa_ppn_shift
[i
]);
1664 *physical
|= (ppn_value
<< info
->pa_ppn_shift
[i
]);
1667 LOG_DEBUG("0x%" TARGET_PRIxADDR
" -> 0x%" TARGET_PRIxADDR
, virtual,
1673 static int riscv_virt2phys(struct target
*target
, target_addr_t
virtual, target_addr_t
*physical
)
1676 if (riscv_mmu(target
, &enabled
) == ERROR_OK
) {
1680 if (riscv_address_translate(target
, virtual, physical
) == ERROR_OK
)
1687 static int riscv_read_phys_memory(struct target
*target
, target_addr_t phys_address
,
1688 uint32_t size
, uint32_t count
, uint8_t *buffer
)
1691 if (riscv_select_current_hart(target
) != ERROR_OK
)
1693 return r
->read_memory(target
, phys_address
, size
, count
, buffer
, size
);
1696 static int riscv_read_memory(struct target
*target
, target_addr_t address
,
1697 uint32_t size
, uint32_t count
, uint8_t *buffer
)
1700 LOG_WARNING("0-length read from 0x%" TARGET_PRIxADDR
, address
);
1704 if (riscv_select_current_hart(target
) != ERROR_OK
)
1707 target_addr_t physical_addr
;
1708 if (target
->type
->virt2phys(target
, address
, &physical_addr
) == ERROR_OK
)
1709 address
= physical_addr
;
1712 return r
->read_memory(target
, address
, size
, count
, buffer
, size
);
1715 static int riscv_write_phys_memory(struct target
*target
, target_addr_t phys_address
,
1716 uint32_t size
, uint32_t count
, const uint8_t *buffer
)
1718 if (riscv_select_current_hart(target
) != ERROR_OK
)
1720 struct target_type
*tt
= get_target_type(target
);
1721 return tt
->write_memory(target
, phys_address
, size
, count
, buffer
);
1724 static int riscv_write_memory(struct target
*target
, target_addr_t address
,
1725 uint32_t size
, uint32_t count
, const uint8_t *buffer
)
1728 LOG_WARNING("0-length write to 0x%" TARGET_PRIxADDR
, address
);
1732 if (riscv_select_current_hart(target
) != ERROR_OK
)
1735 target_addr_t physical_addr
;
1736 if (target
->type
->virt2phys(target
, address
, &physical_addr
) == ERROR_OK
)
1737 address
= physical_addr
;
1739 struct target_type
*tt
= get_target_type(target
);
1740 return tt
->write_memory(target
, address
, size
, count
, buffer
);
1743 const char *riscv_get_gdb_arch(struct target
*target
)
1745 switch (riscv_xlen(target
)) {
1747 return "riscv:rv32";
1749 return "riscv:rv64";
1751 LOG_ERROR("Unsupported xlen: %d", riscv_xlen(target
));
1755 static int riscv_get_gdb_reg_list_internal(struct target
*target
,
1756 struct reg
**reg_list
[], int *reg_list_size
,
1757 enum target_register_class reg_class
, bool read
)
1760 LOG_DEBUG("[%s] {%d} reg_class=%d, read=%d",
1761 target_name(target
), r
->current_hartid
, reg_class
, read
);
1763 if (!target
->reg_cache
) {
1764 LOG_ERROR("Target not initialized. Return ERROR_FAIL.");
1768 if (riscv_select_current_hart(target
) != ERROR_OK
)
1771 switch (reg_class
) {
1772 case REG_CLASS_GENERAL
:
1773 *reg_list_size
= 33;
1776 *reg_list_size
= target
->reg_cache
->num_regs
;
1779 LOG_ERROR("Unsupported reg_class: %d", reg_class
);
1783 *reg_list
= calloc(*reg_list_size
, sizeof(struct reg
*));
1787 for (int i
= 0; i
< *reg_list_size
; i
++) {
1788 assert(!target
->reg_cache
->reg_list
[i
].valid
||
1789 target
->reg_cache
->reg_list
[i
].size
> 0);
1790 (*reg_list
)[i
] = &target
->reg_cache
->reg_list
[i
];
1792 target
->reg_cache
->reg_list
[i
].exist
&&
1793 !target
->reg_cache
->reg_list
[i
].valid
) {
1794 if (target
->reg_cache
->reg_list
[i
].type
->get(
1795 &target
->reg_cache
->reg_list
[i
]) != ERROR_OK
)
1803 static int riscv_get_gdb_reg_list_noread(struct target
*target
,
1804 struct reg
**reg_list
[], int *reg_list_size
,
1805 enum target_register_class reg_class
)
1807 return riscv_get_gdb_reg_list_internal(target
, reg_list
, reg_list_size
,
1811 static int riscv_get_gdb_reg_list(struct target
*target
,
1812 struct reg
**reg_list
[], int *reg_list_size
,
1813 enum target_register_class reg_class
)
1815 return riscv_get_gdb_reg_list_internal(target
, reg_list
, reg_list_size
,
1819 static int riscv_arch_state(struct target
*target
)
1821 struct target_type
*tt
= get_target_type(target
);
1822 return tt
->arch_state(target
);
1825 /* Algorithm must end with a software breakpoint instruction. */
1826 static int riscv_run_algorithm(struct target
*target
, int num_mem_params
,
1827 struct mem_param
*mem_params
, int num_reg_params
,
1828 struct reg_param
*reg_params
, target_addr_t entry_point
,
1829 target_addr_t exit_point
, int timeout_ms
, void *arch_info
)
1833 if (num_mem_params
> 0) {
1834 LOG_ERROR("Memory parameters are not supported for RISC-V algorithms.");
1838 if (target
->state
!= TARGET_HALTED
) {
1839 LOG_WARNING("target not halted");
1840 return ERROR_TARGET_NOT_HALTED
;
1843 /* Save registers */
1844 struct reg
*reg_pc
= register_get_by_name(target
->reg_cache
, "pc", true);
1845 if (!reg_pc
|| reg_pc
->type
->get(reg_pc
) != ERROR_OK
)
1847 uint64_t saved_pc
= buf_get_u64(reg_pc
->value
, 0, reg_pc
->size
);
1848 LOG_DEBUG("saved_pc=0x%" PRIx64
, saved_pc
);
1850 uint64_t saved_regs
[32];
1851 for (int i
= 0; i
< num_reg_params
; i
++) {
1852 LOG_DEBUG("save %s", reg_params
[i
].reg_name
);
1853 struct reg
*r
= register_get_by_name(target
->reg_cache
, reg_params
[i
].reg_name
, false);
1855 LOG_ERROR("Couldn't find register named '%s'", reg_params
[i
].reg_name
);
1859 if (r
->size
!= reg_params
[i
].size
) {
1860 LOG_ERROR("Register %s is %d bits instead of %d bits.",
1861 reg_params
[i
].reg_name
, r
->size
, reg_params
[i
].size
);
1865 if (r
->number
> GDB_REGNO_XPR31
) {
1866 LOG_ERROR("Only GPRs can be use as argument registers.");
1870 if (r
->type
->get(r
) != ERROR_OK
)
1872 saved_regs
[r
->number
] = buf_get_u64(r
->value
, 0, r
->size
);
1874 if (reg_params
[i
].direction
== PARAM_OUT
|| reg_params
[i
].direction
== PARAM_IN_OUT
) {
1875 if (r
->type
->set(r
, reg_params
[i
].value
) != ERROR_OK
)
1881 /* Disable Interrupts before attempting to run the algorithm. */
1882 uint64_t current_mstatus
;
1883 uint8_t mstatus_bytes
[8] = { 0 };
1885 LOG_DEBUG("Disabling Interrupts");
1886 struct reg
*reg_mstatus
= register_get_by_name(target
->reg_cache
,
1889 LOG_ERROR("Couldn't find mstatus!");
1893 reg_mstatus
->type
->get(reg_mstatus
);
1894 current_mstatus
= buf_get_u64(reg_mstatus
->value
, 0, reg_mstatus
->size
);
1895 uint64_t ie_mask
= MSTATUS_MIE
| MSTATUS_HIE
| MSTATUS_SIE
| MSTATUS_UIE
;
1896 buf_set_u64(mstatus_bytes
, 0, info
->xlen
, set_field(current_mstatus
,
1899 reg_mstatus
->type
->set(reg_mstatus
, mstatus_bytes
);
1902 LOG_DEBUG("resume at 0x%" TARGET_PRIxADDR
, entry_point
);
1903 if (riscv_resume(target
, 0, entry_point
, 0, 0, true) != ERROR_OK
)
1906 int64_t start
= timeval_ms();
1907 while (target
->state
!= TARGET_HALTED
) {
1908 LOG_DEBUG("poll()");
1909 int64_t now
= timeval_ms();
1910 if (now
- start
> timeout_ms
) {
1911 LOG_ERROR("Algorithm timed out after %" PRId64
" ms.", now
- start
);
1913 old_or_new_riscv_poll(target
);
1914 enum gdb_regno regnums
[] = {
1915 GDB_REGNO_RA
, GDB_REGNO_SP
, GDB_REGNO_GP
, GDB_REGNO_TP
,
1916 GDB_REGNO_T0
, GDB_REGNO_T1
, GDB_REGNO_T2
, GDB_REGNO_FP
,
1917 GDB_REGNO_S1
, GDB_REGNO_A0
, GDB_REGNO_A1
, GDB_REGNO_A2
,
1918 GDB_REGNO_A3
, GDB_REGNO_A4
, GDB_REGNO_A5
, GDB_REGNO_A6
,
1919 GDB_REGNO_A7
, GDB_REGNO_S2
, GDB_REGNO_S3
, GDB_REGNO_S4
,
1920 GDB_REGNO_S5
, GDB_REGNO_S6
, GDB_REGNO_S7
, GDB_REGNO_S8
,
1921 GDB_REGNO_S9
, GDB_REGNO_S10
, GDB_REGNO_S11
, GDB_REGNO_T3
,
1922 GDB_REGNO_T4
, GDB_REGNO_T5
, GDB_REGNO_T6
,
1924 GDB_REGNO_MSTATUS
, GDB_REGNO_MEPC
, GDB_REGNO_MCAUSE
,
1926 for (unsigned i
= 0; i
< ARRAY_SIZE(regnums
); i
++) {
1927 enum gdb_regno regno
= regnums
[i
];
1928 riscv_reg_t reg_value
;
1929 if (riscv_get_register(target
, ®_value
, regno
) != ERROR_OK
)
1931 LOG_ERROR("%s = 0x%" PRIx64
, gdb_regno_name(regno
), reg_value
);
1933 return ERROR_TARGET_TIMEOUT
;
1936 int result
= old_or_new_riscv_poll(target
);
1937 if (result
!= ERROR_OK
)
1941 /* The current hart id might have been changed in poll(). */
1942 if (riscv_select_current_hart(target
) != ERROR_OK
)
1945 if (reg_pc
->type
->get(reg_pc
) != ERROR_OK
)
1947 uint64_t final_pc
= buf_get_u64(reg_pc
->value
, 0, reg_pc
->size
);
1948 if (exit_point
&& final_pc
!= exit_point
) {
1949 LOG_ERROR("PC ended up at 0x%" PRIx64
" instead of 0x%"
1950 TARGET_PRIxADDR
, final_pc
, exit_point
);
1954 /* Restore Interrupts */
1955 LOG_DEBUG("Restoring Interrupts");
1956 buf_set_u64(mstatus_bytes
, 0, info
->xlen
, current_mstatus
);
1957 reg_mstatus
->type
->set(reg_mstatus
, mstatus_bytes
);
1959 /* Restore registers */
1960 uint8_t buf
[8] = { 0 };
1961 buf_set_u64(buf
, 0, info
->xlen
, saved_pc
);
1962 if (reg_pc
->type
->set(reg_pc
, buf
) != ERROR_OK
)
1965 for (int i
= 0; i
< num_reg_params
; i
++) {
1966 if (reg_params
[i
].direction
== PARAM_IN
||
1967 reg_params
[i
].direction
== PARAM_IN_OUT
) {
1968 struct reg
*r
= register_get_by_name(target
->reg_cache
, reg_params
[i
].reg_name
, false);
1969 if (r
->type
->get(r
) != ERROR_OK
) {
1970 LOG_ERROR("get(%s) failed", r
->name
);
1973 buf_cpy(r
->value
, reg_params
[i
].value
, reg_params
[i
].size
);
1975 LOG_DEBUG("restore %s", reg_params
[i
].reg_name
);
1976 struct reg
*r
= register_get_by_name(target
->reg_cache
, reg_params
[i
].reg_name
, false);
1977 buf_set_u64(buf
, 0, info
->xlen
, saved_regs
[r
->number
]);
1978 if (r
->type
->set(r
, buf
) != ERROR_OK
) {
1979 LOG_ERROR("set(%s) failed", r
->name
);
1987 static int riscv_checksum_memory(struct target
*target
,
1988 target_addr_t address
, uint32_t count
,
1991 struct working_area
*crc_algorithm
;
1992 struct reg_param reg_params
[2];
1995 LOG_DEBUG("address=0x%" TARGET_PRIxADDR
"; count=0x%" PRIx32
, address
, count
);
1997 static const uint8_t riscv32_crc_code
[] = {
1998 #include "../../../contrib/loaders/checksum/riscv32_crc.inc"
2000 static const uint8_t riscv64_crc_code
[] = {
2001 #include "../../../contrib/loaders/checksum/riscv64_crc.inc"
2004 static const uint8_t *crc_code
;
2006 unsigned xlen
= riscv_xlen(target
);
2007 unsigned crc_code_size
;
2009 crc_code
= riscv32_crc_code
;
2010 crc_code_size
= sizeof(riscv32_crc_code
);
2012 crc_code
= riscv64_crc_code
;
2013 crc_code_size
= sizeof(riscv64_crc_code
);
2016 if (count
< crc_code_size
* 4) {
2017 /* Don't use the algorithm for relatively small buffers. It's faster
2018 * just to read the memory. target_checksum_memory() will take care of
2019 * that if we fail. */
2023 retval
= target_alloc_working_area(target
, crc_code_size
, &crc_algorithm
);
2024 if (retval
!= ERROR_OK
)
2027 if (crc_algorithm
->address
+ crc_algorithm
->size
> address
&&
2028 crc_algorithm
->address
< address
+ count
) {
2029 /* Region to checksum overlaps with the work area we've been assigned.
2030 * Bail. (Would be better to manually checksum what we read there, and
2031 * use the algorithm for the rest.) */
2032 target_free_working_area(target
, crc_algorithm
);
2036 retval
= target_write_buffer(target
, crc_algorithm
->address
, crc_code_size
,
2038 if (retval
!= ERROR_OK
) {
2039 LOG_ERROR("Failed to write code to " TARGET_ADDR_FMT
": %d",
2040 crc_algorithm
->address
, retval
);
2041 target_free_working_area(target
, crc_algorithm
);
2045 init_reg_param(®_params
[0], "a0", xlen
, PARAM_IN_OUT
);
2046 init_reg_param(®_params
[1], "a1", xlen
, PARAM_OUT
);
2047 buf_set_u64(reg_params
[0].value
, 0, xlen
, address
);
2048 buf_set_u64(reg_params
[1].value
, 0, xlen
, count
);
2050 /* 20 second timeout/megabyte */
2051 int timeout
= 20000 * (1 + (count
/ (1024 * 1024)));
2053 retval
= target_run_algorithm(target
, 0, NULL
, 2, reg_params
,
2054 crc_algorithm
->address
,
2055 0, /* Leave exit point unspecified because we don't know. */
2058 if (retval
== ERROR_OK
)
2059 *checksum
= buf_get_u32(reg_params
[0].value
, 0, 32);
2061 LOG_ERROR("error executing RISC-V CRC algorithm");
2063 destroy_reg_param(®_params
[0]);
2064 destroy_reg_param(®_params
[1]);
2066 target_free_working_area(target
, crc_algorithm
);
2068 LOG_DEBUG("checksum=0x%" PRIx32
", result=%d", *checksum
, retval
);
2073 /*** OpenOCD Helper Functions ***/
2075 enum riscv_poll_hart
{
2077 RPH_DISCOVERED_HALTED
,
2078 RPH_DISCOVERED_RUNNING
,
2081 static enum riscv_poll_hart
riscv_poll_hart(struct target
*target
, int hartid
)
2084 if (riscv_set_current_hartid(target
, hartid
) != ERROR_OK
)
2087 LOG_DEBUG("polling hart %d, target->state=%d", hartid
, target
->state
);
2089 /* If OpenOCD thinks we're running but this hart is halted then it's time
2090 * to raise an event. */
2091 bool halted
= riscv_is_halted(target
);
2092 if (target
->state
!= TARGET_HALTED
&& halted
) {
2093 LOG_DEBUG(" triggered a halt");
2095 return RPH_DISCOVERED_HALTED
;
2096 } else if (target
->state
!= TARGET_RUNNING
&& !halted
) {
2097 LOG_DEBUG(" triggered running");
2098 target
->state
= TARGET_RUNNING
;
2099 target
->debug_reason
= DBG_REASON_NOTHALTED
;
2100 return RPH_DISCOVERED_RUNNING
;
2103 return RPH_NO_CHANGE
;
2106 int set_debug_reason(struct target
*target
, enum riscv_halt_reason halt_reason
)
2108 switch (halt_reason
) {
2109 case RISCV_HALT_BREAKPOINT
:
2110 target
->debug_reason
= DBG_REASON_BREAKPOINT
;
2112 case RISCV_HALT_TRIGGER
:
2113 target
->debug_reason
= DBG_REASON_WATCHPOINT
;
2115 case RISCV_HALT_INTERRUPT
:
2116 case RISCV_HALT_GROUP
:
2117 target
->debug_reason
= DBG_REASON_DBGRQ
;
2119 case RISCV_HALT_SINGLESTEP
:
2120 target
->debug_reason
= DBG_REASON_SINGLESTEP
;
2122 case RISCV_HALT_UNKNOWN
:
2123 target
->debug_reason
= DBG_REASON_UNDEFINED
;
2125 case RISCV_HALT_ERROR
:
2128 LOG_DEBUG("[%s] debug_reason=%d", target_name(target
), target
->debug_reason
);
2132 int sample_memory(struct target
*target
)
2136 if (!r
->sample_buf
.buf
|| !r
->sample_config
.enabled
)
2139 LOG_DEBUG("buf used/size: %d/%d", r
->sample_buf
.used
, r
->sample_buf
.size
);
2141 uint64_t start
= timeval_ms();
2142 riscv_sample_buf_maybe_add_timestamp(target
, true);
2143 int result
= ERROR_OK
;
2144 if (r
->sample_memory
) {
2145 result
= r
->sample_memory(target
, &r
->sample_buf
, &r
->sample_config
,
2146 start
+ TARGET_DEFAULT_POLLING_INTERVAL
);
2147 if (result
!= ERROR_NOT_IMPLEMENTED
)
2151 /* Default slow path. */
2152 while (timeval_ms() - start
< TARGET_DEFAULT_POLLING_INTERVAL
) {
2153 for (unsigned int i
= 0; i
< ARRAY_SIZE(r
->sample_config
.bucket
); i
++) {
2154 if (r
->sample_config
.bucket
[i
].enabled
&&
2155 r
->sample_buf
.used
+ 1 + r
->sample_config
.bucket
[i
].size_bytes
< r
->sample_buf
.size
) {
2156 assert(i
< RISCV_SAMPLE_BUF_TIMESTAMP_BEFORE
);
2157 r
->sample_buf
.buf
[r
->sample_buf
.used
] = i
;
2158 result
= riscv_read_phys_memory(
2159 target
, r
->sample_config
.bucket
[i
].address
,
2160 r
->sample_config
.bucket
[i
].size_bytes
, 1,
2161 r
->sample_buf
.buf
+ r
->sample_buf
.used
+ 1);
2162 if (result
== ERROR_OK
)
2163 r
->sample_buf
.used
+= 1 + r
->sample_config
.bucket
[i
].size_bytes
;
2171 riscv_sample_buf_maybe_add_timestamp(target
, false);
2172 if (result
!= ERROR_OK
) {
2173 LOG_INFO("Turning off memory sampling because it failed.");
2174 r
->sample_config
.enabled
= false;
2179 /*** OpenOCD Interface ***/
2180 int riscv_openocd_poll(struct target
*target
)
2182 LOG_DEBUG("polling all harts");
2183 int halted_hart
= -1;
2186 unsigned halts_discovered
= 0;
2187 unsigned should_remain_halted
= 0;
2188 unsigned should_resume
= 0;
2189 struct target_list
*list
;
2190 foreach_smp_target(list
, target
->smp_targets
) {
2191 struct target
*t
= list
->target
;
2192 riscv_info_t
*r
= riscv_info(t
);
2193 enum riscv_poll_hart out
= riscv_poll_hart(t
, r
->current_hartid
);
2197 case RPH_DISCOVERED_RUNNING
:
2198 t
->state
= TARGET_RUNNING
;
2199 t
->debug_reason
= DBG_REASON_NOTHALTED
;
2201 case RPH_DISCOVERED_HALTED
:
2203 t
->state
= TARGET_HALTED
;
2204 enum riscv_halt_reason halt_reason
=
2205 riscv_halt_reason(t
, r
->current_hartid
);
2206 if (set_debug_reason(t
, halt_reason
) != ERROR_OK
)
2209 if (halt_reason
== RISCV_HALT_BREAKPOINT
) {
2211 switch (riscv_semihosting(t
, &retval
)) {
2214 /* This hart should remain halted. */
2215 should_remain_halted
++;
2218 /* This hart should be resumed, along with any other
2219 * harts that halted due to haltgroups. */
2225 } else if (halt_reason
!= RISCV_HALT_GROUP
) {
2226 should_remain_halted
++;
2235 LOG_DEBUG("should_remain_halted=%d, should_resume=%d",
2236 should_remain_halted
, should_resume
);
2237 if (should_remain_halted
&& should_resume
) {
2238 LOG_WARNING("%d harts should remain halted, and %d should resume.",
2239 should_remain_halted
, should_resume
);
2241 if (should_remain_halted
) {
2242 LOG_DEBUG("halt all");
2244 } else if (should_resume
) {
2245 LOG_DEBUG("resume all");
2246 riscv_resume(target
, true, 0, 0, 0, false);
2249 /* Sample memory if any target is running. */
2250 foreach_smp_target(list
, target
->smp_targets
) {
2251 struct target
*t
= list
->target
;
2252 if (t
->state
== TARGET_RUNNING
) {
2253 sample_memory(target
);
2261 enum riscv_poll_hart out
= riscv_poll_hart(target
,
2262 riscv_current_hartid(target
));
2263 if (out
== RPH_NO_CHANGE
|| out
== RPH_DISCOVERED_RUNNING
) {
2264 if (target
->state
== TARGET_RUNNING
)
2265 sample_memory(target
);
2267 } else if (out
== RPH_ERROR
) {
2271 halted_hart
= riscv_current_hartid(target
);
2272 LOG_DEBUG(" hart %d halted", halted_hart
);
2274 enum riscv_halt_reason halt_reason
= riscv_halt_reason(target
, halted_hart
);
2275 if (set_debug_reason(target
, halt_reason
) != ERROR_OK
)
2277 target
->state
= TARGET_HALTED
;
2280 if (target
->debug_reason
== DBG_REASON_BREAKPOINT
) {
2282 switch (riscv_semihosting(target
, &retval
)) {
2285 target_call_event_callbacks(target
, TARGET_EVENT_HALTED
);
2288 if (riscv_resume(target
, true, 0, 0, 0, false) != ERROR_OK
)
2295 target_call_event_callbacks(target
, TARGET_EVENT_HALTED
);
2301 int riscv_openocd_step(struct target
*target
, int current
,
2302 target_addr_t address
, int handle_breakpoints
)
2304 LOG_DEBUG("stepping rtos hart");
2307 riscv_set_register(target
, GDB_REGNO_PC
, address
);
2309 riscv_reg_t trigger_state
[RISCV_MAX_HWBPS
] = {0};
2310 if (disable_triggers(target
, trigger_state
) != ERROR_OK
)
2313 int out
= riscv_step_rtos_hart(target
);
2314 if (out
!= ERROR_OK
) {
2315 LOG_ERROR("unable to step rtos hart");
2319 register_cache_invalidate(target
->reg_cache
);
2321 if (enable_triggers(target
, trigger_state
) != ERROR_OK
)
2324 target
->state
= TARGET_RUNNING
;
2325 target_call_event_callbacks(target
, TARGET_EVENT_RESUMED
);
2326 target
->state
= TARGET_HALTED
;
2327 target
->debug_reason
= DBG_REASON_SINGLESTEP
;
2328 target_call_event_callbacks(target
, TARGET_EVENT_HALTED
);
2332 /* Command Handlers */
2333 COMMAND_HANDLER(riscv_set_command_timeout_sec
)
2335 if (CMD_ARGC
!= 1) {
2336 LOG_ERROR("Command takes exactly 1 parameter");
2337 return ERROR_COMMAND_SYNTAX_ERROR
;
2339 int timeout
= atoi(CMD_ARGV
[0]);
2341 LOG_ERROR("%s is not a valid integer argument for command.", CMD_ARGV
[0]);
2345 riscv_command_timeout_sec
= timeout
;
2350 COMMAND_HANDLER(riscv_set_reset_timeout_sec
)
2352 if (CMD_ARGC
!= 1) {
2353 LOG_ERROR("Command takes exactly 1 parameter");
2354 return ERROR_COMMAND_SYNTAX_ERROR
;
2356 int timeout
= atoi(CMD_ARGV
[0]);
2358 LOG_ERROR("%s is not a valid integer argument for command.", CMD_ARGV
[0]);
2362 riscv_reset_timeout_sec
= timeout
;
2366 COMMAND_HANDLER(riscv_set_prefer_sba
)
2368 struct target
*target
= get_current_target(CMD_CTX
);
2371 LOG_WARNING("`riscv set_prefer_sba` is deprecated. Please use `riscv set_mem_access` instead.");
2372 if (CMD_ARGC
!= 1) {
2373 LOG_ERROR("Command takes exactly 1 parameter");
2374 return ERROR_COMMAND_SYNTAX_ERROR
;
2376 COMMAND_PARSE_ON_OFF(CMD_ARGV
[0], prefer_sba
);
2378 /* Use system bus with highest priority */
2379 r
->mem_access_methods
[0] = RISCV_MEM_ACCESS_SYSBUS
;
2380 r
->mem_access_methods
[1] = RISCV_MEM_ACCESS_PROGBUF
;
2381 r
->mem_access_methods
[2] = RISCV_MEM_ACCESS_ABSTRACT
;
2383 /* Use progbuf with highest priority */
2384 r
->mem_access_methods
[0] = RISCV_MEM_ACCESS_PROGBUF
;
2385 r
->mem_access_methods
[1] = RISCV_MEM_ACCESS_SYSBUS
;
2386 r
->mem_access_methods
[2] = RISCV_MEM_ACCESS_ABSTRACT
;
2389 /* Reset warning flags */
2390 r
->mem_access_progbuf_warn
= true;
2391 r
->mem_access_sysbus_warn
= true;
2392 r
->mem_access_abstract_warn
= true;
2397 COMMAND_HANDLER(riscv_set_mem_access
)
2399 struct target
*target
= get_current_target(CMD_CTX
);
2401 int progbuf_cnt
= 0;
2403 int abstract_cnt
= 0;
2405 if (CMD_ARGC
< 1 || CMD_ARGC
> RISCV_NUM_MEM_ACCESS_METHODS
) {
2406 LOG_ERROR("Command takes 1 to %d parameters", RISCV_NUM_MEM_ACCESS_METHODS
);
2407 return ERROR_COMMAND_SYNTAX_ERROR
;
2410 /* Check argument validity */
2411 for (unsigned int i
= 0; i
< CMD_ARGC
; i
++) {
2412 if (strcmp("progbuf", CMD_ARGV
[i
]) == 0) {
2414 } else if (strcmp("sysbus", CMD_ARGV
[i
]) == 0) {
2416 } else if (strcmp("abstract", CMD_ARGV
[i
]) == 0) {
2419 LOG_ERROR("Unknown argument '%s'. "
2420 "Must be one of: 'progbuf', 'sysbus' or 'abstract'.", CMD_ARGV
[i
]);
2421 return ERROR_COMMAND_SYNTAX_ERROR
;
2424 if (progbuf_cnt
> 1 || sysbus_cnt
> 1 || abstract_cnt
> 1) {
2425 LOG_ERROR("Syntax error - duplicate arguments to `riscv set_mem_access`.");
2426 return ERROR_COMMAND_SYNTAX_ERROR
;
2429 /* Args are valid, store them */
2430 for (unsigned int i
= 0; i
< RISCV_NUM_MEM_ACCESS_METHODS
; i
++)
2431 r
->mem_access_methods
[i
] = RISCV_MEM_ACCESS_UNSPECIFIED
;
2432 for (unsigned int i
= 0; i
< CMD_ARGC
; i
++) {
2433 if (strcmp("progbuf", CMD_ARGV
[i
]) == 0)
2434 r
->mem_access_methods
[i
] = RISCV_MEM_ACCESS_PROGBUF
;
2435 else if (strcmp("sysbus", CMD_ARGV
[i
]) == 0)
2436 r
->mem_access_methods
[i
] = RISCV_MEM_ACCESS_SYSBUS
;
2437 else if (strcmp("abstract", CMD_ARGV
[i
]) == 0)
2438 r
->mem_access_methods
[i
] = RISCV_MEM_ACCESS_ABSTRACT
;
2441 /* Reset warning flags */
2442 r
->mem_access_progbuf_warn
= true;
2443 r
->mem_access_sysbus_warn
= true;
2444 r
->mem_access_abstract_warn
= true;
2449 COMMAND_HANDLER(riscv_set_enable_virtual
)
2451 if (CMD_ARGC
!= 1) {
2452 LOG_ERROR("Command takes exactly 1 parameter");
2453 return ERROR_COMMAND_SYNTAX_ERROR
;
2455 COMMAND_PARSE_ON_OFF(CMD_ARGV
[0], riscv_enable_virtual
);
2459 int parse_ranges(struct list_head
*ranges
, const char *tcl_arg
, const char *reg_type
, unsigned int max_val
)
2461 char *args
= strdup(tcl_arg
);
2465 /* For backward compatibility, allow multiple parameters within one TCL argument, separated by ',' */
2466 char *arg
= strtok(args
, ",");
2472 char *dash
= strchr(arg
, '-');
2473 char *equals
= strchr(arg
, '=');
2476 if (!dash
&& !equals
) {
2477 /* Expecting single register number. */
2478 if (sscanf(arg
, "%u%n", &low
, &pos
) != 1 || pos
!= strlen(arg
)) {
2479 LOG_ERROR("Failed to parse single register number from '%s'.", arg
);
2481 return ERROR_COMMAND_SYNTAX_ERROR
;
2483 } else if (dash
&& !equals
) {
2484 /* Expecting register range - two numbers separated by a dash: ##-## */
2487 if (sscanf(arg
, "%u%n", &low
, &pos
) != 1 || pos
!= strlen(arg
)) {
2488 LOG_ERROR("Failed to parse single register number from '%s'.", arg
);
2490 return ERROR_COMMAND_SYNTAX_ERROR
;
2492 if (sscanf(dash
, "%u%n", &high
, &pos
) != 1 || pos
!= strlen(dash
)) {
2493 LOG_ERROR("Failed to parse single register number from '%s'.", dash
);
2495 return ERROR_COMMAND_SYNTAX_ERROR
;
2498 LOG_ERROR("Incorrect range encountered [%u, %u].", low
, high
);
2502 } else if (!dash
&& equals
) {
2503 /* Expecting single register number with textual name specified: ##=name */
2506 if (sscanf(arg
, "%u%n", &low
, &pos
) != 1 || pos
!= strlen(arg
)) {
2507 LOG_ERROR("Failed to parse single register number from '%s'.", arg
);
2509 return ERROR_COMMAND_SYNTAX_ERROR
;
2512 name
= calloc(1, strlen(equals
) + strlen(reg_type
) + 2);
2514 LOG_ERROR("Failed to allocate register name.");
2519 /* Register prefix: "csr_" or "custom_" */
2520 strcpy(name
, reg_type
);
2521 name
[strlen(reg_type
)] = '_';
2523 if (sscanf(equals
, "%[_a-zA-Z0-9]%n", name
+ strlen(reg_type
) + 1, &pos
) != 1 || pos
!= strlen(equals
)) {
2524 LOG_ERROR("Failed to parse register name from '%s'.", equals
);
2527 return ERROR_COMMAND_SYNTAX_ERROR
;
2530 LOG_ERROR("Invalid argument '%s'.", arg
);
2532 return ERROR_COMMAND_SYNTAX_ERROR
;
2535 high
= high
> low
? high
: low
;
2537 if (high
> max_val
) {
2538 LOG_ERROR("Cannot expose %s register number %u, maximum allowed value is %u.", reg_type
, high
, max_val
);
2544 /* Check for overlap, name uniqueness. */
2545 range_list_t
*entry
;
2546 list_for_each_entry(entry
, ranges
, list
) {
2547 if ((entry
->low
<= high
) && (low
<= entry
->high
)) {
2549 LOG_WARNING("Duplicate %s register number - "
2550 "Register %u has already been exposed previously", reg_type
, low
);
2552 LOG_WARNING("Overlapping register ranges - Register range starting from %u overlaps "
2553 "with already exposed register/range at %u.", low
, entry
->low
);
2556 if (entry
->name
&& name
&& (strcasecmp(entry
->name
, name
) == 0)) {
2557 LOG_ERROR("Duplicate register name \"%s\" found.", name
);
2564 range_list_t
*range
= calloc(1, sizeof(range_list_t
));
2566 LOG_ERROR("Failed to allocate range list.");
2575 list_add(&range
->list
, ranges
);
2577 arg
= strtok(NULL
, ",");
2584 COMMAND_HANDLER(riscv_set_expose_csrs
)
2586 if (CMD_ARGC
== 0) {
2587 LOG_ERROR("Command expects parameters");
2588 return ERROR_COMMAND_SYNTAX_ERROR
;
2591 struct target
*target
= get_current_target(CMD_CTX
);
2595 for (unsigned int i
= 0; i
< CMD_ARGC
; i
++) {
2596 ret
= parse_ranges(&info
->expose_csr
, CMD_ARGV
[i
], "csr", 0xfff);
2597 if (ret
!= ERROR_OK
)
2604 COMMAND_HANDLER(riscv_set_expose_custom
)
2606 if (CMD_ARGC
== 0) {
2607 LOG_ERROR("Command expects parameters");
2608 return ERROR_COMMAND_SYNTAX_ERROR
;
2611 struct target
*target
= get_current_target(CMD_CTX
);
2615 for (unsigned int i
= 0; i
< CMD_ARGC
; i
++) {
2616 ret
= parse_ranges(&info
->expose_custom
, CMD_ARGV
[i
], "custom", 0x3fff);
2617 if (ret
!= ERROR_OK
)
2624 COMMAND_HANDLER(riscv_authdata_read
)
2626 unsigned int index
= 0;
2627 if (CMD_ARGC
== 0) {
2629 } else if (CMD_ARGC
== 1) {
2630 COMMAND_PARSE_NUMBER(uint
, CMD_ARGV
[0], index
);
2632 LOG_ERROR("Command takes at most one parameter");
2633 return ERROR_COMMAND_SYNTAX_ERROR
;
2636 struct target
*target
= get_current_target(CMD_CTX
);
2638 LOG_ERROR("target is NULL!");
2644 LOG_ERROR("riscv_info is NULL!");
2648 if (r
->authdata_read
) {
2650 if (r
->authdata_read(target
, &value
, index
) != ERROR_OK
)
2652 command_print_sameline(CMD
, "0x%08" PRIx32
, value
);
2655 LOG_ERROR("authdata_read is not implemented for this target.");
2660 COMMAND_HANDLER(riscv_authdata_write
)
2663 unsigned int index
= 0;
2665 if (CMD_ARGC
== 0) {
2667 } else if (CMD_ARGC
== 1) {
2668 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], value
);
2669 } else if (CMD_ARGC
== 2) {
2670 COMMAND_PARSE_NUMBER(uint
, CMD_ARGV
[0], index
);
2671 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], value
);
2673 LOG_ERROR("Command takes at most 2 arguments");
2674 return ERROR_COMMAND_SYNTAX_ERROR
;
2677 struct target
*target
= get_current_target(CMD_CTX
);
2680 if (r
->authdata_write
) {
2681 return r
->authdata_write(target
, value
, index
);
2683 LOG_ERROR("authdata_write is not implemented for this target.");
2688 COMMAND_HANDLER(riscv_dmi_read
)
2690 if (CMD_ARGC
!= 1) {
2691 LOG_ERROR("Command takes 1 parameter");
2692 return ERROR_COMMAND_SYNTAX_ERROR
;
2695 struct target
*target
= get_current_target(CMD_CTX
);
2697 LOG_ERROR("target is NULL!");
2703 LOG_ERROR("riscv_info is NULL!");
2708 uint32_t address
, value
;
2709 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], address
);
2710 if (r
->dmi_read(target
, &value
, address
) != ERROR_OK
)
2712 command_print(CMD
, "0x%" PRIx32
, value
);
2715 LOG_ERROR("dmi_read is not implemented for this target.");
2721 COMMAND_HANDLER(riscv_dmi_write
)
2723 if (CMD_ARGC
!= 2) {
2724 LOG_ERROR("Command takes exactly 2 arguments");
2725 return ERROR_COMMAND_SYNTAX_ERROR
;
2728 struct target
*target
= get_current_target(CMD_CTX
);
2731 uint32_t address
, value
;
2732 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], address
);
2733 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], value
);
2736 return r
->dmi_write(target
, address
, value
);
2738 LOG_ERROR("dmi_write is not implemented for this target.");
2743 COMMAND_HANDLER(riscv_test_sba_config_reg
)
2745 if (CMD_ARGC
!= 4) {
2746 LOG_ERROR("Command takes exactly 4 arguments");
2747 return ERROR_COMMAND_SYNTAX_ERROR
;
2750 struct target
*target
= get_current_target(CMD_CTX
);
2753 target_addr_t legal_address
;
2755 target_addr_t illegal_address
;
2756 bool run_sbbusyerror_test
;
2758 COMMAND_PARSE_NUMBER(target_addr
, CMD_ARGV
[0], legal_address
);
2759 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], num_words
);
2760 COMMAND_PARSE_NUMBER(target_addr
, CMD_ARGV
[2], illegal_address
);
2761 COMMAND_PARSE_ON_OFF(CMD_ARGV
[3], run_sbbusyerror_test
);
2763 if (r
->test_sba_config_reg
) {
2764 return r
->test_sba_config_reg(target
, legal_address
, num_words
,
2765 illegal_address
, run_sbbusyerror_test
);
2767 LOG_ERROR("test_sba_config_reg is not implemented for this target.");
2772 COMMAND_HANDLER(riscv_reset_delays
)
2777 LOG_ERROR("Command takes at most one argument");
2778 return ERROR_COMMAND_SYNTAX_ERROR
;
2782 COMMAND_PARSE_NUMBER(int, CMD_ARGV
[0], wait
);
2784 struct target
*target
= get_current_target(CMD_CTX
);
2786 r
->reset_delays_wait
= wait
;
2790 COMMAND_HANDLER(riscv_set_ir
)
2792 if (CMD_ARGC
!= 2) {
2793 LOG_ERROR("Command takes exactly 2 arguments");
2794 return ERROR_COMMAND_SYNTAX_ERROR
;
2798 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], value
);
2800 if (!strcmp(CMD_ARGV
[0], "idcode"))
2801 buf_set_u32(ir_idcode
, 0, 32, value
);
2802 else if (!strcmp(CMD_ARGV
[0], "dtmcs"))
2803 buf_set_u32(ir_dtmcontrol
, 0, 32, value
);
2804 else if (!strcmp(CMD_ARGV
[0], "dmi"))
2805 buf_set_u32(ir_dbus
, 0, 32, value
);
2812 COMMAND_HANDLER(riscv_resume_order
)
2815 LOG_ERROR("Command takes at most one argument");
2816 return ERROR_COMMAND_SYNTAX_ERROR
;
2819 if (!strcmp(CMD_ARGV
[0], "normal")) {
2820 resume_order
= RO_NORMAL
;
2821 } else if (!strcmp(CMD_ARGV
[0], "reversed")) {
2822 resume_order
= RO_REVERSED
;
2824 LOG_ERROR("Unsupported resume order: %s", CMD_ARGV
[0]);
2831 COMMAND_HANDLER(riscv_use_bscan_tunnel
)
2834 int tunnel_type
= BSCAN_TUNNEL_NESTED_TAP
;
2837 LOG_ERROR("Command takes at most two arguments");
2838 return ERROR_COMMAND_SYNTAX_ERROR
;
2839 } else if (CMD_ARGC
== 1) {
2840 COMMAND_PARSE_NUMBER(int, CMD_ARGV
[0], irwidth
);
2841 } else if (CMD_ARGC
== 2) {
2842 COMMAND_PARSE_NUMBER(int, CMD_ARGV
[0], irwidth
);
2843 COMMAND_PARSE_NUMBER(int, CMD_ARGV
[1], tunnel_type
);
2845 if (tunnel_type
== BSCAN_TUNNEL_NESTED_TAP
)
2846 LOG_INFO("Nested Tap based Bscan Tunnel Selected");
2847 else if (tunnel_type
== BSCAN_TUNNEL_DATA_REGISTER
)
2848 LOG_INFO("Simple Register based Bscan Tunnel Selected");
2850 LOG_INFO("Invalid Tunnel type selected ! : selecting default Nested Tap Type");
2852 bscan_tunnel_type
= tunnel_type
;
2853 bscan_tunnel_ir_width
= irwidth
;
2857 COMMAND_HANDLER(riscv_set_enable_virt2phys
)
2859 if (CMD_ARGC
!= 1) {
2860 LOG_ERROR("Command takes exactly 1 parameter");
2861 return ERROR_COMMAND_SYNTAX_ERROR
;
2863 COMMAND_PARSE_ON_OFF(CMD_ARGV
[0], riscv_enable_virt2phys
);
2867 COMMAND_HANDLER(riscv_set_ebreakm
)
2869 if (CMD_ARGC
!= 1) {
2870 LOG_ERROR("Command takes exactly 1 parameter");
2871 return ERROR_COMMAND_SYNTAX_ERROR
;
2873 COMMAND_PARSE_ON_OFF(CMD_ARGV
[0], riscv_ebreakm
);
2877 COMMAND_HANDLER(riscv_set_ebreaks
)
2879 if (CMD_ARGC
!= 1) {
2880 LOG_ERROR("Command takes exactly 1 parameter");
2881 return ERROR_COMMAND_SYNTAX_ERROR
;
2883 COMMAND_PARSE_ON_OFF(CMD_ARGV
[0], riscv_ebreaks
);
2887 COMMAND_HANDLER(riscv_set_ebreaku
)
2889 if (CMD_ARGC
!= 1) {
2890 LOG_ERROR("Command takes exactly 1 parameter");
2891 return ERROR_COMMAND_SYNTAX_ERROR
;
2893 COMMAND_PARSE_ON_OFF(CMD_ARGV
[0], riscv_ebreaku
);
2897 COMMAND_HELPER(riscv_print_info_line
, const char *section
, const char *key
,
2901 snprintf(full_key
, sizeof(full_key
), "%s.%s", section
, key
);
2902 command_print(CMD
, "%-21s %3d", full_key
, value
);
2906 COMMAND_HANDLER(handle_info
)
2908 struct target
*target
= get_current_target(CMD_CTX
);
2911 /* This output format can be fed directly into TCL's "array set". */
2913 riscv_print_info_line(CMD
, "hart", "xlen", riscv_xlen(target
));
2914 riscv_enumerate_triggers(target
);
2915 riscv_print_info_line(CMD
, "hart", "trigger_count",
2919 return CALL_COMMAND_HANDLER(r
->print_info
, target
);
2924 static const struct command_registration riscv_exec_command_handlers
[] = {
2927 .handler
= handle_info
,
2928 .mode
= COMMAND_EXEC
,
2930 .help
= "Displays some information OpenOCD detected about the target."
2933 .name
= "set_command_timeout_sec",
2934 .handler
= riscv_set_command_timeout_sec
,
2935 .mode
= COMMAND_ANY
,
2937 .help
= "Set the wall-clock timeout (in seconds) for individual commands"
2940 .name
= "set_reset_timeout_sec",
2941 .handler
= riscv_set_reset_timeout_sec
,
2942 .mode
= COMMAND_ANY
,
2944 .help
= "Set the wall-clock timeout (in seconds) after reset is deasserted"
2947 .name
= "set_prefer_sba",
2948 .handler
= riscv_set_prefer_sba
,
2949 .mode
= COMMAND_ANY
,
2951 .help
= "When on, prefer to use System Bus Access to access memory. "
2952 "When off (default), prefer to use the Program Buffer to access memory."
2955 .name
= "set_mem_access",
2956 .handler
= riscv_set_mem_access
,
2957 .mode
= COMMAND_ANY
,
2958 .usage
= "method1 [method2] [method3]",
2959 .help
= "Set which memory access methods shall be used and in which order "
2960 "of priority. Method can be one of: 'progbuf', 'sysbus' or 'abstract'."
2963 .name
= "set_enable_virtual",
2964 .handler
= riscv_set_enable_virtual
,
2965 .mode
= COMMAND_ANY
,
2967 .help
= "When on, memory accesses are performed on physical or virtual "
2968 "memory depending on the current system configuration. "
2969 "When off (default), all memory accessses are performed on physical memory."
2972 .name
= "expose_csrs",
2973 .handler
= riscv_set_expose_csrs
,
2974 .mode
= COMMAND_CONFIG
,
2975 .usage
= "n0[-m0|=name0][,n1[-m1|=name1]]...",
2976 .help
= "Configure a list of inclusive ranges for CSRs to expose in "
2977 "addition to the standard ones. This must be executed before "
2981 .name
= "expose_custom",
2982 .handler
= riscv_set_expose_custom
,
2983 .mode
= COMMAND_CONFIG
,
2984 .usage
= "n0[-m0|=name0][,n1[-m1|=name1]]...",
2985 .help
= "Configure a list of inclusive ranges for custom registers to "
2986 "expose. custom0 is accessed as abstract register number 0xc000, "
2987 "etc. This must be executed before `init`."
2990 .name
= "authdata_read",
2991 .handler
= riscv_authdata_read
,
2993 .mode
= COMMAND_ANY
,
2994 .help
= "Return the 32-bit value read from authdata or authdata0 "
2995 "(index=0), or authdata1 (index=1)."
2998 .name
= "authdata_write",
2999 .handler
= riscv_authdata_write
,
3000 .mode
= COMMAND_ANY
,
3001 .usage
= "[index] value",
3002 .help
= "Write the 32-bit value to authdata or authdata0 (index=0), "
3003 "or authdata1 (index=1)."
3007 .handler
= riscv_dmi_read
,
3008 .mode
= COMMAND_ANY
,
3010 .help
= "Perform a 32-bit DMI read at address, returning the value."
3013 .name
= "dmi_write",
3014 .handler
= riscv_dmi_write
,
3015 .mode
= COMMAND_ANY
,
3016 .usage
= "address value",
3017 .help
= "Perform a 32-bit DMI write of value at address."
3020 .name
= "test_sba_config_reg",
3021 .handler
= riscv_test_sba_config_reg
,
3022 .mode
= COMMAND_ANY
,
3023 .usage
= "legal_address num_words "
3024 "illegal_address run_sbbusyerror_test[on/off]",
3025 .help
= "Perform a series of tests on the SBCS register. "
3026 "Inputs are a legal, 128-byte aligned address and a number of words to "
3027 "read/write starting at that address (i.e., address range [legal address, "
3028 "legal_address+word_size*num_words) must be legally readable/writable), "
3029 "an illegal, 128-byte aligned address for error flag/handling cases, "
3030 "and whether sbbusyerror test should be run."
3033 .name
= "reset_delays",
3034 .handler
= riscv_reset_delays
,
3035 .mode
= COMMAND_ANY
,
3037 .help
= "OpenOCD learns how many Run-Test/Idle cycles are required "
3038 "between scans to avoid encountering the target being busy. This "
3039 "command resets those learned values after `wait` scans. It's only "
3040 "useful for testing OpenOCD itself."
3043 .name
= "resume_order",
3044 .handler
= riscv_resume_order
,
3045 .mode
= COMMAND_ANY
,
3046 .usage
= "normal|reversed",
3047 .help
= "Choose the order that harts are resumed in when `hasel` is not "
3048 "supported. Normal order is from lowest hart index to highest. "
3049 "Reversed order is from highest hart index to lowest."
3053 .handler
= riscv_set_ir
,
3054 .mode
= COMMAND_ANY
,
3055 .usage
= "[idcode|dtmcs|dmi] value",
3056 .help
= "Set IR value for specified JTAG register."
3059 .name
= "use_bscan_tunnel",
3060 .handler
= riscv_use_bscan_tunnel
,
3061 .mode
= COMMAND_ANY
,
3062 .usage
= "value [type]",
3063 .help
= "Enable or disable use of a BSCAN tunnel to reach DM. Supply "
3064 "the width of the DM transport TAP's instruction register to "
3065 "enable. Supply a value of 0 to disable. Pass A second argument "
3066 "(optional) to indicate Bscan Tunnel Type {0:(default) NESTED_TAP , "
3070 .name
= "set_enable_virt2phys",
3071 .handler
= riscv_set_enable_virt2phys
,
3072 .mode
= COMMAND_ANY
,
3074 .help
= "When on (default), enable translation from virtual address to "
3078 .name
= "set_ebreakm",
3079 .handler
= riscv_set_ebreakm
,
3080 .mode
= COMMAND_ANY
,
3082 .help
= "Control dcsr.ebreakm. When off, M-mode ebreak instructions "
3083 "don't trap to OpenOCD. Defaults to on."
3086 .name
= "set_ebreaks",
3087 .handler
= riscv_set_ebreaks
,
3088 .mode
= COMMAND_ANY
,
3090 .help
= "Control dcsr.ebreaks. When off, S-mode ebreak instructions "
3091 "don't trap to OpenOCD. Defaults to on."
3094 .name
= "set_ebreaku",
3095 .handler
= riscv_set_ebreaku
,
3096 .mode
= COMMAND_ANY
,
3098 .help
= "Control dcsr.ebreaku. When off, U-mode ebreak instructions "
3099 "don't trap to OpenOCD. Defaults to on."
3101 COMMAND_REGISTRATION_DONE
3105 * To be noted that RISC-V targets use the same semihosting commands as
3108 * The main reason is compatibility with existing tools. For example the
3109 * Eclipse OpenOCD/SEGGER J-Link/QEMU plug-ins have several widgets to
3110 * configure semihosting, which generate commands like `arm semihosting
3112 * A secondary reason is the fact that the protocol used is exactly the
3113 * one specified by ARM. If RISC-V will ever define its own semihosting
3114 * protocol, then a command like `riscv semihosting enable` will make
3115 * sense, but for now all semihosting commands are prefixed with `arm`.
3117 extern const struct command_registration semihosting_common_handlers
[];
3119 const struct command_registration riscv_command_handlers
[] = {
3122 .mode
= COMMAND_ANY
,
3123 .help
= "RISC-V Command Group",
3125 .chain
= riscv_exec_command_handlers
3129 .mode
= COMMAND_ANY
,
3130 .help
= "ARM Command Group",
3132 .chain
= semihosting_common_handlers
3134 COMMAND_REGISTRATION_DONE
3137 static unsigned riscv_xlen_nonconst(struct target
*target
)
3139 return riscv_xlen(target
);
3142 static unsigned int riscv_data_bits(struct target
*target
)
3146 return r
->data_bits(target
);
3147 return riscv_xlen(target
);
3150 struct target_type riscv_target
= {
3153 .target_create
= riscv_create_target
,
3154 .init_target
= riscv_init_target
,
3155 .deinit_target
= riscv_deinit_target
,
3156 .examine
= riscv_examine
,
3158 /* poll current target status */
3159 .poll
= old_or_new_riscv_poll
,
3162 .resume
= riscv_target_resume
,
3163 .step
= old_or_new_riscv_step
,
3165 .assert_reset
= riscv_assert_reset
,
3166 .deassert_reset
= riscv_deassert_reset
,
3168 .read_memory
= riscv_read_memory
,
3169 .write_memory
= riscv_write_memory
,
3170 .read_phys_memory
= riscv_read_phys_memory
,
3171 .write_phys_memory
= riscv_write_phys_memory
,
3173 .checksum_memory
= riscv_checksum_memory
,
3176 .virt2phys
= riscv_virt2phys
,
3178 .get_gdb_arch
= riscv_get_gdb_arch
,
3179 .get_gdb_reg_list
= riscv_get_gdb_reg_list
,
3180 .get_gdb_reg_list_noread
= riscv_get_gdb_reg_list_noread
,
3182 .add_breakpoint
= riscv_add_breakpoint
,
3183 .remove_breakpoint
= riscv_remove_breakpoint
,
3185 .add_watchpoint
= riscv_add_watchpoint
,
3186 .remove_watchpoint
= riscv_remove_watchpoint
,
3187 .hit_watchpoint
= riscv_hit_watchpoint
,
3189 .arch_state
= riscv_arch_state
,
3191 .run_algorithm
= riscv_run_algorithm
,
3193 .commands
= riscv_command_handlers
,
3195 .address_bits
= riscv_xlen_nonconst
,
3196 .data_bits
= riscv_data_bits
3199 /*** RISC-V Interface ***/
3201 void riscv_info_init(struct target
*target
, riscv_info_t
*r
)
3203 memset(r
, 0, sizeof(*r
));
3205 r
->current_hartid
= target
->coreid
;
3206 r
->version_specific
= NULL
;
3208 memset(r
->trigger_unique_id
, 0xff, sizeof(r
->trigger_unique_id
));
3212 r
->mem_access_methods
[0] = RISCV_MEM_ACCESS_PROGBUF
;
3213 r
->mem_access_methods
[1] = RISCV_MEM_ACCESS_SYSBUS
;
3214 r
->mem_access_methods
[2] = RISCV_MEM_ACCESS_ABSTRACT
;
3216 r
->mem_access_progbuf_warn
= true;
3217 r
->mem_access_sysbus_warn
= true;
3218 r
->mem_access_abstract_warn
= true;
3220 INIT_LIST_HEAD(&r
->expose_csr
);
3221 INIT_LIST_HEAD(&r
->expose_custom
);
3224 static int riscv_resume_go_all_harts(struct target
*target
)
3228 LOG_DEBUG("[%s] resuming hart", target_name(target
));
3229 if (riscv_select_current_hart(target
) != ERROR_OK
)
3231 if (riscv_is_halted(target
)) {
3232 if (r
->resume_go(target
) != ERROR_OK
)
3235 LOG_DEBUG("[%s] hart requested resume, but was already resumed",
3236 target_name(target
));
3239 riscv_invalidate_register_cache(target
);
3243 int riscv_step_rtos_hart(struct target
*target
)
3246 if (riscv_select_current_hart(target
) != ERROR_OK
)
3248 LOG_DEBUG("[%s] stepping", target_name(target
));
3250 if (!riscv_is_halted(target
)) {
3251 LOG_ERROR("Hart isn't halted before single step!");
3254 riscv_invalidate_register_cache(target
);
3256 if (r
->step_current_hart(target
) != ERROR_OK
)
3258 riscv_invalidate_register_cache(target
);
3260 if (!riscv_is_halted(target
)) {
3261 LOG_ERROR("Hart was not halted after single step!");
3267 bool riscv_supports_extension(struct target
*target
, char letter
)
3271 if (letter
>= 'a' && letter
<= 'z')
3273 else if (letter
>= 'A' && letter
<= 'Z')
3277 return r
->misa
& BIT(num
);
3280 unsigned riscv_xlen(const struct target
*target
)
3286 int riscv_set_current_hartid(struct target
*target
, int hartid
)
3289 if (!r
->select_current_hart
)
3292 int previous_hartid
= riscv_current_hartid(target
);
3293 r
->current_hartid
= hartid
;
3294 LOG_DEBUG("setting hartid to %d, was %d", hartid
, previous_hartid
);
3295 if (r
->select_current_hart(target
) != ERROR_OK
)
3301 void riscv_invalidate_register_cache(struct target
*target
)
3303 LOG_DEBUG("[%d]", target
->coreid
);
3304 register_cache_invalidate(target
->reg_cache
);
3305 for (size_t i
= 0; i
< target
->reg_cache
->num_regs
; ++i
) {
3306 struct reg
*reg
= &target
->reg_cache
->reg_list
[i
];
3311 int riscv_current_hartid(const struct target
*target
)
3314 return r
->current_hartid
;
3317 int riscv_count_harts(struct target
*target
)
3322 if (!r
|| !r
->hart_count
)
3324 return r
->hart_count(target
);
3329 * return true iff we are guaranteed that the register will contain exactly
3330 * the value we just wrote when it's read.
3331 * If write is false:
3332 * return true iff we are guaranteed that the register will read the same
3333 * value in the future as the value we just read.
3335 static bool gdb_regno_cacheable(enum gdb_regno regno
, bool write
)
3337 /* GPRs, FPRs, vector registers are just normal data stores. */
3338 if (regno
<= GDB_REGNO_XPR31
||
3339 (regno
>= GDB_REGNO_FPR0
&& regno
<= GDB_REGNO_FPR31
) ||
3340 (regno
>= GDB_REGNO_V0
&& regno
<= GDB_REGNO_V31
))
3343 /* Most CSRs won't change value on us, but we can't assume it about arbitrary
3349 case GDB_REGNO_VSTART
:
3350 case GDB_REGNO_VXSAT
:
3351 case GDB_REGNO_VXRM
:
3352 case GDB_REGNO_VLENB
:
3354 case GDB_REGNO_VTYPE
:
3355 case GDB_REGNO_MISA
:
3356 case GDB_REGNO_DCSR
:
3357 case GDB_REGNO_DSCRATCH0
:
3358 case GDB_REGNO_MSTATUS
:
3359 case GDB_REGNO_MEPC
:
3360 case GDB_REGNO_MCAUSE
:
3361 case GDB_REGNO_SATP
:
3363 * WARL registers might not contain the value we just wrote, but
3364 * these ones won't spontaneously change their value either. *
3368 case GDB_REGNO_TSELECT
: /* I think this should be above, but then it doesn't work. */
3369 case GDB_REGNO_TDATA1
: /* Changes value when tselect is changed. */
3370 case GDB_REGNO_TDATA2
: /* Changse value when tselect is changed. */
3377 * This function is called when the debug user wants to change the value of a
3378 * register. The new value may be cached, and may not be written until the hart
3380 int riscv_set_register(struct target
*target
, enum gdb_regno regid
, riscv_reg_t value
)
3383 LOG_DEBUG("[%s] %s <- %" PRIx64
, target_name(target
), gdb_regno_name(regid
), value
);
3384 assert(r
->set_register
);
3388 /* TODO: Hack to deal with gdb that thinks these registers still exist. */
3389 if (regid
> GDB_REGNO_XPR15
&& regid
<= GDB_REGNO_XPR31
&& value
== 0 &&
3390 riscv_supports_extension(target
, 'E'))
3393 struct reg
*reg
= &target
->reg_cache
->reg_list
[regid
];
3394 buf_set_u64(reg
->value
, 0, reg
->size
, value
);
3396 int result
= r
->set_register(target
, regid
, value
);
3397 if (result
== ERROR_OK
)
3398 reg
->valid
= gdb_regno_cacheable(regid
, true);
3401 LOG_DEBUG("[%s] wrote 0x%" PRIx64
" to %s valid=%d",
3402 target_name(target
), value
, reg
->name
, reg
->valid
);
3406 int riscv_get_register(struct target
*target
, riscv_reg_t
*value
,
3407 enum gdb_regno regid
)
3413 struct reg
*reg
= &target
->reg_cache
->reg_list
[regid
];
3415 LOG_DEBUG("[%s] %s does not exist.",
3416 target_name(target
), gdb_regno_name(regid
));
3420 if (reg
&& reg
->valid
) {
3421 *value
= buf_get_u64(reg
->value
, 0, reg
->size
);
3422 LOG_DEBUG("[%s] %s: %" PRIx64
" (cached)", target_name(target
),
3423 gdb_regno_name(regid
), *value
);
3427 /* TODO: Hack to deal with gdb that thinks these registers still exist. */
3428 if (regid
> GDB_REGNO_XPR15
&& regid
<= GDB_REGNO_XPR31
&&
3429 riscv_supports_extension(target
, 'E')) {
3434 int result
= r
->get_register(target
, value
, regid
);
3436 if (result
== ERROR_OK
)
3437 reg
->valid
= gdb_regno_cacheable(regid
, false);
3439 LOG_DEBUG("[%s] %s: %" PRIx64
, target_name(target
),
3440 gdb_regno_name(regid
), *value
);
3444 bool riscv_is_halted(struct target
*target
)
3447 assert(r
->is_halted
);
3448 return r
->is_halted(target
);
3451 enum riscv_halt_reason
riscv_halt_reason(struct target
*target
, int hartid
)
3454 if (riscv_set_current_hartid(target
, hartid
) != ERROR_OK
)
3455 return RISCV_HALT_ERROR
;
3456 if (!riscv_is_halted(target
)) {
3457 LOG_ERROR("Hart is not halted!");
3458 return RISCV_HALT_UNKNOWN
;
3460 return r
->halt_reason(target
);
3463 size_t riscv_debug_buffer_size(struct target
*target
)
3466 return r
->debug_buffer_size
;
3469 int riscv_write_debug_buffer(struct target
*target
, int index
, riscv_insn_t insn
)
3472 r
->write_debug_buffer(target
, index
, insn
);
3476 riscv_insn_t
riscv_read_debug_buffer(struct target
*target
, int index
)
3479 return r
->read_debug_buffer(target
, index
);
3482 int riscv_execute_debug_buffer(struct target
*target
)
3485 return r
->execute_debug_buffer(target
);
3488 void riscv_fill_dmi_write_u64(struct target
*target
, char *buf
, int a
, uint64_t d
)
3491 r
->fill_dmi_write_u64(target
, buf
, a
, d
);
3494 void riscv_fill_dmi_read_u64(struct target
*target
, char *buf
, int a
)
3497 r
->fill_dmi_read_u64(target
, buf
, a
);
3500 void riscv_fill_dmi_nop_u64(struct target
*target
, char *buf
)
3503 r
->fill_dmi_nop_u64(target
, buf
);
3506 int riscv_dmi_write_u64_bits(struct target
*target
)
3509 return r
->dmi_write_u64_bits(target
);
3513 * Count triggers, and initialize trigger_count for each hart.
3514 * trigger_count is initialized even if this function fails to discover
3516 * Disable any hardware triggers that have dmode set. We can't have set them
3517 * ourselves. Maybe they're left over from some killed debug session.
3519 int riscv_enumerate_triggers(struct target
*target
)
3523 if (r
->triggers_enumerated
)
3526 r
->triggers_enumerated
= true; /* At the very least we tried. */
3528 riscv_reg_t tselect
;
3529 int result
= riscv_get_register(target
, &tselect
, GDB_REGNO_TSELECT
);
3530 /* If tselect is not readable, the trigger module is likely not
3531 * implemented. There are no triggers to enumerate then and no error
3532 * should be thrown. */
3533 if (result
!= ERROR_OK
) {
3534 LOG_DEBUG("[%s] Cannot access tselect register. "
3535 "Assuming that triggers are not implemented.", target_name(target
));
3536 r
->trigger_count
= 0;
3540 for (unsigned int t
= 0; t
< RISCV_MAX_TRIGGERS
; ++t
) {
3541 r
->trigger_count
= t
;
3543 /* If we can't write tselect, then this hart does not support triggers. */
3544 if (riscv_set_register(target
, GDB_REGNO_TSELECT
, t
) != ERROR_OK
)
3546 uint64_t tselect_rb
;
3547 result
= riscv_get_register(target
, &tselect_rb
, GDB_REGNO_TSELECT
);
3548 if (result
!= ERROR_OK
)
3550 /* Mask off the top bit, which is used as tdrmode in old
3551 * implementations. */
3552 tselect_rb
&= ~(1ULL << (riscv_xlen(target
) - 1));
3553 if (tselect_rb
!= t
)
3556 result
= riscv_get_register(target
, &tdata1
, GDB_REGNO_TDATA1
);
3557 if (result
!= ERROR_OK
)
3560 int type
= get_field(tdata1
, MCONTROL_TYPE(riscv_xlen(target
)));
3565 /* On these older cores we don't support software using
3567 riscv_set_register(target
, GDB_REGNO_TDATA1
, 0);
3570 if (tdata1
& MCONTROL_DMODE(riscv_xlen(target
)))
3571 riscv_set_register(target
, GDB_REGNO_TDATA1
, 0);
3574 if (tdata1
& MCONTROL_DMODE(riscv_xlen(target
)))
3575 riscv_set_register(target
, GDB_REGNO_TDATA1
, 0);
3580 riscv_set_register(target
, GDB_REGNO_TSELECT
, tselect
);
3582 LOG_INFO("[%s] Found %d triggers", target_name(target
), r
->trigger_count
);
3587 const char *gdb_regno_name(enum gdb_regno regno
)
3589 static char buf
[32];
3592 case GDB_REGNO_ZERO
:
3658 case GDB_REGNO_FPR0
:
3660 case GDB_REGNO_FPR31
:
3662 case GDB_REGNO_CSR0
:
3664 case GDB_REGNO_TSELECT
:
3666 case GDB_REGNO_TDATA1
:
3668 case GDB_REGNO_TDATA2
:
3670 case GDB_REGNO_MISA
:
3674 case GDB_REGNO_DCSR
:
3676 case GDB_REGNO_DSCRATCH0
:
3678 case GDB_REGNO_MSTATUS
:
3680 case GDB_REGNO_MEPC
:
3682 case GDB_REGNO_MCAUSE
:
3684 case GDB_REGNO_PRIV
:
3686 case GDB_REGNO_SATP
:
3688 case GDB_REGNO_VTYPE
:
3757 if (regno
<= GDB_REGNO_XPR31
)
3758 sprintf(buf
, "x%d", regno
- GDB_REGNO_ZERO
);
3759 else if (regno
>= GDB_REGNO_CSR0
&& regno
<= GDB_REGNO_CSR4095
)
3760 sprintf(buf
, "csr%d", regno
- GDB_REGNO_CSR0
);
3761 else if (regno
>= GDB_REGNO_FPR0
&& regno
<= GDB_REGNO_FPR31
)
3762 sprintf(buf
, "f%d", regno
- GDB_REGNO_FPR0
);
3764 sprintf(buf
, "gdb_regno_%d", regno
);
3769 static int register_get(struct reg
*reg
)
3771 riscv_reg_info_t
*reg_info
= reg
->arch_info
;
3772 struct target
*target
= reg_info
->target
;
3775 if (reg
->number
>= GDB_REGNO_V0
&& reg
->number
<= GDB_REGNO_V31
) {
3776 if (!r
->get_register_buf
) {
3777 LOG_ERROR("Reading register %s not supported on this RISC-V target.",
3778 gdb_regno_name(reg
->number
));
3782 if (r
->get_register_buf(target
, reg
->value
, reg
->number
) != ERROR_OK
)
3786 int result
= riscv_get_register(target
, &value
, reg
->number
);
3787 if (result
!= ERROR_OK
)
3789 buf_set_u64(reg
->value
, 0, reg
->size
, value
);
3791 reg
->valid
= gdb_regno_cacheable(reg
->number
, false);
3792 char *str
= buf_to_hex_str(reg
->value
, reg
->size
);
3793 LOG_DEBUG("[%s] read 0x%s from %s (valid=%d)", target_name(target
),
3794 str
, reg
->name
, reg
->valid
);
3799 static int register_set(struct reg
*reg
, uint8_t *buf
)
3801 riscv_reg_info_t
*reg_info
= reg
->arch_info
;
3802 struct target
*target
= reg_info
->target
;
3805 char *str
= buf_to_hex_str(buf
, reg
->size
);
3806 LOG_DEBUG("[%s] write 0x%s to %s (valid=%d)", target_name(target
),
3807 str
, reg
->name
, reg
->valid
);
3810 /* Exit early for writing x0, which on the hardware would be ignored, and we
3811 * don't want to update our cache. */
3812 if (reg
->number
== GDB_REGNO_ZERO
)
3815 memcpy(reg
->value
, buf
, DIV_ROUND_UP(reg
->size
, 8));
3816 reg
->valid
= gdb_regno_cacheable(reg
->number
, true);
3818 if (reg
->number
== GDB_REGNO_TDATA1
||
3819 reg
->number
== GDB_REGNO_TDATA2
) {
3820 r
->manual_hwbp_set
= true;
3821 /* When enumerating triggers, we clear any triggers with DMODE set,
3822 * assuming they were left over from a previous debug session. So make
3823 * sure that is done before a user might be setting their own triggers.
3825 if (riscv_enumerate_triggers(target
) != ERROR_OK
)
3829 if (reg
->number
>= GDB_REGNO_V0
&& reg
->number
<= GDB_REGNO_V31
) {
3830 if (!r
->set_register_buf
) {
3831 LOG_ERROR("Writing register %s not supported on this RISC-V target.",
3832 gdb_regno_name(reg
->number
));
3836 if (r
->set_register_buf(target
, reg
->number
, reg
->value
) != ERROR_OK
)
3839 uint64_t value
= buf_get_u64(buf
, 0, reg
->size
);
3840 if (riscv_set_register(target
, reg
->number
, value
) != ERROR_OK
)
3847 static struct reg_arch_type riscv_reg_arch_type
= {
3848 .get
= register_get
,
3857 static int cmp_csr_info(const void *p1
, const void *p2
)
3859 return (int) (((struct csr_info
*)p1
)->number
) - (int) (((struct csr_info
*)p2
)->number
);
3862 int riscv_init_registers(struct target
*target
)
3866 riscv_free_registers(target
);
3868 target
->reg_cache
= calloc(1, sizeof(*target
->reg_cache
));
3869 if (!target
->reg_cache
)
3871 target
->reg_cache
->name
= "RISC-V Registers";
3872 target
->reg_cache
->num_regs
= GDB_REGNO_COUNT
;
3874 if (!list_empty(&info
->expose_custom
)) {
3875 range_list_t
*entry
;
3876 list_for_each_entry(entry
, &info
->expose_custom
, list
)
3877 target
->reg_cache
->num_regs
+= entry
->high
- entry
->low
+ 1;
3880 LOG_DEBUG("create register cache for %d registers",
3881 target
->reg_cache
->num_regs
);
3883 target
->reg_cache
->reg_list
=
3884 calloc(target
->reg_cache
->num_regs
, sizeof(struct reg
));
3885 if (!target
->reg_cache
->reg_list
)
3888 const unsigned int max_reg_name_len
= 12;
3889 free(info
->reg_names
);
3891 calloc(target
->reg_cache
->num_regs
, max_reg_name_len
);
3892 if (!info
->reg_names
)
3894 char *reg_name
= info
->reg_names
;
3896 static struct reg_feature feature_cpu
= {
3897 .name
= "org.gnu.gdb.riscv.cpu"
3899 static struct reg_feature feature_fpu
= {
3900 .name
= "org.gnu.gdb.riscv.fpu"
3902 static struct reg_feature feature_csr
= {
3903 .name
= "org.gnu.gdb.riscv.csr"
3905 static struct reg_feature feature_vector
= {
3906 .name
= "org.gnu.gdb.riscv.vector"
3908 static struct reg_feature feature_virtual
= {
3909 .name
= "org.gnu.gdb.riscv.virtual"
3911 static struct reg_feature feature_custom
= {
3912 .name
= "org.gnu.gdb.riscv.custom"
3915 /* These types are built into gdb. */
3916 static struct reg_data_type type_ieee_single
= { .type
= REG_TYPE_IEEE_SINGLE
, .id
= "ieee_single" };
3917 static struct reg_data_type type_ieee_double
= { .type
= REG_TYPE_IEEE_DOUBLE
, .id
= "ieee_double" };
3918 static struct reg_data_type_union_field single_double_fields
[] = {
3919 {"float", &type_ieee_single
, single_double_fields
+ 1},
3920 {"double", &type_ieee_double
, NULL
},
3922 static struct reg_data_type_union single_double_union
= {
3923 .fields
= single_double_fields
3925 static struct reg_data_type type_ieee_single_double
= {
3926 .type
= REG_TYPE_ARCH_DEFINED
,
3928 .type_class
= REG_TYPE_CLASS_UNION
,
3929 .reg_type_union
= &single_double_union
3931 static struct reg_data_type type_uint8
= { .type
= REG_TYPE_UINT8
, .id
= "uint8" };
3932 static struct reg_data_type type_uint16
= { .type
= REG_TYPE_UINT16
, .id
= "uint16" };
3933 static struct reg_data_type type_uint32
= { .type
= REG_TYPE_UINT32
, .id
= "uint32" };
3934 static struct reg_data_type type_uint64
= { .type
= REG_TYPE_UINT64
, .id
= "uint64" };
3935 static struct reg_data_type type_uint128
= { .type
= REG_TYPE_UINT128
, .id
= "uint128" };
3937 /* This is roughly the XML we want:
3938 * <vector id="bytes" type="uint8" count="16"/>
3939 * <vector id="shorts" type="uint16" count="8"/>
3940 * <vector id="words" type="uint32" count="4"/>
3941 * <vector id="longs" type="uint64" count="2"/>
3942 * <vector id="quads" type="uint128" count="1"/>
3943 * <union id="riscv_vector_type">
3944 * <field name="b" type="bytes"/>
3945 * <field name="s" type="shorts"/>
3946 * <field name="w" type="words"/>
3947 * <field name="l" type="longs"/>
3948 * <field name="q" type="quads"/>
3952 info
->vector_uint8
.type
= &type_uint8
;
3953 info
->vector_uint8
.count
= info
->vlenb
;
3954 info
->type_uint8_vector
.type
= REG_TYPE_ARCH_DEFINED
;
3955 info
->type_uint8_vector
.id
= "bytes";
3956 info
->type_uint8_vector
.type_class
= REG_TYPE_CLASS_VECTOR
;
3957 info
->type_uint8_vector
.reg_type_vector
= &info
->vector_uint8
;
3959 info
->vector_uint16
.type
= &type_uint16
;
3960 info
->vector_uint16
.count
= info
->vlenb
/ 2;
3961 info
->type_uint16_vector
.type
= REG_TYPE_ARCH_DEFINED
;
3962 info
->type_uint16_vector
.id
= "shorts";
3963 info
->type_uint16_vector
.type_class
= REG_TYPE_CLASS_VECTOR
;
3964 info
->type_uint16_vector
.reg_type_vector
= &info
->vector_uint16
;
3966 info
->vector_uint32
.type
= &type_uint32
;
3967 info
->vector_uint32
.count
= info
->vlenb
/ 4;
3968 info
->type_uint32_vector
.type
= REG_TYPE_ARCH_DEFINED
;
3969 info
->type_uint32_vector
.id
= "words";
3970 info
->type_uint32_vector
.type_class
= REG_TYPE_CLASS_VECTOR
;
3971 info
->type_uint32_vector
.reg_type_vector
= &info
->vector_uint32
;
3973 info
->vector_uint64
.type
= &type_uint64
;
3974 info
->vector_uint64
.count
= info
->vlenb
/ 8;
3975 info
->type_uint64_vector
.type
= REG_TYPE_ARCH_DEFINED
;
3976 info
->type_uint64_vector
.id
= "longs";
3977 info
->type_uint64_vector
.type_class
= REG_TYPE_CLASS_VECTOR
;
3978 info
->type_uint64_vector
.reg_type_vector
= &info
->vector_uint64
;
3980 info
->vector_uint128
.type
= &type_uint128
;
3981 info
->vector_uint128
.count
= info
->vlenb
/ 16;
3982 info
->type_uint128_vector
.type
= REG_TYPE_ARCH_DEFINED
;
3983 info
->type_uint128_vector
.id
= "quads";
3984 info
->type_uint128_vector
.type_class
= REG_TYPE_CLASS_VECTOR
;
3985 info
->type_uint128_vector
.reg_type_vector
= &info
->vector_uint128
;
3987 info
->vector_fields
[0].name
= "b";
3988 info
->vector_fields
[0].type
= &info
->type_uint8_vector
;
3989 if (info
->vlenb
>= 2) {
3990 info
->vector_fields
[0].next
= info
->vector_fields
+ 1;
3991 info
->vector_fields
[1].name
= "s";
3992 info
->vector_fields
[1].type
= &info
->type_uint16_vector
;
3994 info
->vector_fields
[0].next
= NULL
;
3996 if (info
->vlenb
>= 4) {
3997 info
->vector_fields
[1].next
= info
->vector_fields
+ 2;
3998 info
->vector_fields
[2].name
= "w";
3999 info
->vector_fields
[2].type
= &info
->type_uint32_vector
;
4001 info
->vector_fields
[1].next
= NULL
;
4003 if (info
->vlenb
>= 8) {
4004 info
->vector_fields
[2].next
= info
->vector_fields
+ 3;
4005 info
->vector_fields
[3].name
= "l";
4006 info
->vector_fields
[3].type
= &info
->type_uint64_vector
;
4008 info
->vector_fields
[2].next
= NULL
;
4010 if (info
->vlenb
>= 16) {
4011 info
->vector_fields
[3].next
= info
->vector_fields
+ 4;
4012 info
->vector_fields
[4].name
= "q";
4013 info
->vector_fields
[4].type
= &info
->type_uint128_vector
;
4015 info
->vector_fields
[3].next
= NULL
;
4017 info
->vector_fields
[4].next
= NULL
;
4019 info
->vector_union
.fields
= info
->vector_fields
;
4021 info
->type_vector
.type
= REG_TYPE_ARCH_DEFINED
;
4022 info
->type_vector
.id
= "riscv_vector";
4023 info
->type_vector
.type_class
= REG_TYPE_CLASS_UNION
;
4024 info
->type_vector
.reg_type_union
= &info
->vector_union
;
4026 struct csr_info csr_info
[] = {
4027 #define DECLARE_CSR(name, number) { number, #name },
4028 #include "encoding.h"
4031 /* encoding.h does not contain the registers in sorted order. */
4032 qsort(csr_info
, ARRAY_SIZE(csr_info
), sizeof(*csr_info
), cmp_csr_info
);
4033 unsigned csr_info_index
= 0;
4035 int custom_within_range
= 0;
4037 riscv_reg_info_t
*shared_reg_info
= calloc(1, sizeof(riscv_reg_info_t
));
4038 if (!shared_reg_info
)
4040 shared_reg_info
->target
= target
;
4042 /* When gdb requests register N, gdb_get_register_packet() assumes that this
4043 * is register at index N in reg_list. So if there are certain registers
4044 * that don't exist, we need to leave holes in the list (or renumber, but
4045 * it would be nice not to have yet another set of numbers to translate
4047 for (uint32_t number
= 0; number
< target
->reg_cache
->num_regs
; number
++) {
4048 struct reg
*r
= &target
->reg_cache
->reg_list
[number
];
4052 r
->type
= &riscv_reg_arch_type
;
4053 r
->arch_info
= shared_reg_info
;
4055 r
->size
= riscv_xlen(target
);
4056 /* r->size is set in riscv_invalidate_register_cache, maybe because the
4057 * target is in theory allowed to change XLEN on us. But I expect a lot
4058 * of other things to break in that case as well. */
4059 if (number
<= GDB_REGNO_XPR31
) {
4060 r
->exist
= number
<= GDB_REGNO_XPR15
||
4061 !riscv_supports_extension(target
, 'E');
4062 /* TODO: For now we fake that all GPRs exist because otherwise gdb
4065 r
->caller_save
= true;
4067 case GDB_REGNO_ZERO
:
4164 r
->group
= "general";
4165 r
->feature
= &feature_cpu
;
4166 } else if (number
== GDB_REGNO_PC
) {
4167 r
->caller_save
= true;
4168 sprintf(reg_name
, "pc");
4169 r
->group
= "general";
4170 r
->feature
= &feature_cpu
;
4171 } else if (number
>= GDB_REGNO_FPR0
&& number
<= GDB_REGNO_FPR31
) {
4172 r
->caller_save
= true;
4173 if (riscv_supports_extension(target
, 'D')) {
4175 if (riscv_supports_extension(target
, 'F'))
4176 r
->reg_data_type
= &type_ieee_single_double
;
4178 r
->reg_data_type
= &type_ieee_double
;
4179 } else if (riscv_supports_extension(target
, 'F')) {
4180 r
->reg_data_type
= &type_ieee_single
;
4264 case GDB_REGNO_FS10
:
4267 case GDB_REGNO_FS11
:
4276 case GDB_REGNO_FT10
:
4279 case GDB_REGNO_FT11
:
4284 r
->feature
= &feature_fpu
;
4285 } else if (number
>= GDB_REGNO_CSR0
&& number
<= GDB_REGNO_CSR4095
) {
4287 r
->feature
= &feature_csr
;
4288 unsigned csr_number
= number
- GDB_REGNO_CSR0
;
4290 while (csr_info
[csr_info_index
].number
< csr_number
&&
4291 csr_info_index
< ARRAY_SIZE(csr_info
) - 1) {
4294 if (csr_info
[csr_info_index
].number
== csr_number
) {
4295 r
->name
= csr_info
[csr_info_index
].name
;
4297 sprintf(reg_name
, "csr%d", csr_number
);
4298 /* Assume unnamed registers don't exist, unless we have some
4299 * configuration that tells us otherwise. That's important
4300 * because eg. Eclipse crashes if a target has too many
4301 * registers, and apparently has no way of only showing a
4302 * subset of registers in any case. */
4306 switch (csr_number
) {
4310 r
->exist
= riscv_supports_extension(target
, 'F');
4312 r
->feature
= &feature_fpu
;
4318 case CSR_SCOUNTEREN
:
4324 r
->exist
= riscv_supports_extension(target
, 'S');
4328 /* "In systems with only M-mode, or with both M-mode and
4329 * U-mode but without U-mode trap support, the medeleg and
4330 * mideleg registers should not exist." */
4331 r
->exist
= riscv_supports_extension(target
, 'S') ||
4332 riscv_supports_extension(target
, 'N');
4340 case CSR_HPMCOUNTER3H
:
4341 case CSR_HPMCOUNTER4H
:
4342 case CSR_HPMCOUNTER5H
:
4343 case CSR_HPMCOUNTER6H
:
4344 case CSR_HPMCOUNTER7H
:
4345 case CSR_HPMCOUNTER8H
:
4346 case CSR_HPMCOUNTER9H
:
4347 case CSR_HPMCOUNTER10H
:
4348 case CSR_HPMCOUNTER11H
:
4349 case CSR_HPMCOUNTER12H
:
4350 case CSR_HPMCOUNTER13H
:
4351 case CSR_HPMCOUNTER14H
:
4352 case CSR_HPMCOUNTER15H
:
4353 case CSR_HPMCOUNTER16H
:
4354 case CSR_HPMCOUNTER17H
:
4355 case CSR_HPMCOUNTER18H
:
4356 case CSR_HPMCOUNTER19H
:
4357 case CSR_HPMCOUNTER20H
:
4358 case CSR_HPMCOUNTER21H
:
4359 case CSR_HPMCOUNTER22H
:
4360 case CSR_HPMCOUNTER23H
:
4361 case CSR_HPMCOUNTER24H
:
4362 case CSR_HPMCOUNTER25H
:
4363 case CSR_HPMCOUNTER26H
:
4364 case CSR_HPMCOUNTER27H
:
4365 case CSR_HPMCOUNTER28H
:
4366 case CSR_HPMCOUNTER29H
:
4367 case CSR_HPMCOUNTER30H
:
4368 case CSR_HPMCOUNTER31H
:
4371 case CSR_MHPMCOUNTER3H
:
4372 case CSR_MHPMCOUNTER4H
:
4373 case CSR_MHPMCOUNTER5H
:
4374 case CSR_MHPMCOUNTER6H
:
4375 case CSR_MHPMCOUNTER7H
:
4376 case CSR_MHPMCOUNTER8H
:
4377 case CSR_MHPMCOUNTER9H
:
4378 case CSR_MHPMCOUNTER10H
:
4379 case CSR_MHPMCOUNTER11H
:
4380 case CSR_MHPMCOUNTER12H
:
4381 case CSR_MHPMCOUNTER13H
:
4382 case CSR_MHPMCOUNTER14H
:
4383 case CSR_MHPMCOUNTER15H
:
4384 case CSR_MHPMCOUNTER16H
:
4385 case CSR_MHPMCOUNTER17H
:
4386 case CSR_MHPMCOUNTER18H
:
4387 case CSR_MHPMCOUNTER19H
:
4388 case CSR_MHPMCOUNTER20H
:
4389 case CSR_MHPMCOUNTER21H
:
4390 case CSR_MHPMCOUNTER22H
:
4391 case CSR_MHPMCOUNTER23H
:
4392 case CSR_MHPMCOUNTER24H
:
4393 case CSR_MHPMCOUNTER25H
:
4394 case CSR_MHPMCOUNTER26H
:
4395 case CSR_MHPMCOUNTER27H
:
4396 case CSR_MHPMCOUNTER28H
:
4397 case CSR_MHPMCOUNTER29H
:
4398 case CSR_MHPMCOUNTER30H
:
4399 case CSR_MHPMCOUNTER31H
:
4400 r
->exist
= riscv_xlen(target
) == 32;
4409 r
->exist
= riscv_supports_extension(target
, 'V');
4413 if (!r
->exist
&& !list_empty(&info
->expose_csr
)) {
4414 range_list_t
*entry
;
4415 list_for_each_entry(entry
, &info
->expose_csr
, list
)
4416 if ((entry
->low
<= csr_number
) && (csr_number
<= entry
->high
)) {
4419 r
->name
= entry
->name
;
4422 LOG_DEBUG("Exposing additional CSR %d (name=%s)",
4423 csr_number
, entry
->name
? entry
->name
: reg_name
);
4430 } else if (number
== GDB_REGNO_PRIV
) {
4431 sprintf(reg_name
, "priv");
4432 r
->group
= "general";
4433 r
->feature
= &feature_virtual
;
4436 } else if (number
>= GDB_REGNO_V0
&& number
<= GDB_REGNO_V31
) {
4437 r
->caller_save
= false;
4438 r
->exist
= riscv_supports_extension(target
, 'V') && info
->vlenb
;
4439 r
->size
= info
->vlenb
* 8;
4440 sprintf(reg_name
, "v%d", number
- GDB_REGNO_V0
);
4441 r
->group
= "vector";
4442 r
->feature
= &feature_vector
;
4443 r
->reg_data_type
= &info
->type_vector
;
4445 } else if (number
>= GDB_REGNO_COUNT
) {
4446 /* Custom registers. */
4447 assert(!list_empty(&info
->expose_custom
));
4449 range_list_t
*range
= list_first_entry(&info
->expose_custom
, range_list_t
, list
);
4451 unsigned custom_number
= range
->low
+ custom_within_range
;
4453 r
->group
= "custom";
4454 r
->feature
= &feature_custom
;
4455 r
->arch_info
= calloc(1, sizeof(riscv_reg_info_t
));
4458 ((riscv_reg_info_t
*) r
->arch_info
)->target
= target
;
4459 ((riscv_reg_info_t
*) r
->arch_info
)->custom_number
= custom_number
;
4460 sprintf(reg_name
, "custom%d", custom_number
);
4464 r
->name
= range
->name
;
4467 LOG_DEBUG("Exposing additional custom register %d (name=%s)",
4468 number
, range
->name
? range
->name
: reg_name
);
4470 custom_within_range
++;
4471 if (custom_within_range
> range
->high
- range
->low
) {
4472 custom_within_range
= 0;
4473 list_rotate_left(&info
->expose_custom
);
4479 reg_name
+= strlen(reg_name
) + 1;
4480 assert(reg_name
< info
->reg_names
+ target
->reg_cache
->num_regs
*
4483 r
->value
= calloc(1, DIV_ROUND_UP(r
->size
, 8));
4490 void riscv_add_bscan_tunneled_scan(struct target
*target
, struct scan_field
*field
,
4491 riscv_bscan_tunneled_scan_context_t
*ctxt
)
4493 jtag_add_ir_scan(target
->tap
, &select_user4
, TAP_IDLE
);
4495 memset(ctxt
->tunneled_dr
, 0, sizeof(ctxt
->tunneled_dr
));
4496 if (bscan_tunnel_type
== BSCAN_TUNNEL_DATA_REGISTER
) {
4497 ctxt
->tunneled_dr
[3].num_bits
= 1;
4498 ctxt
->tunneled_dr
[3].out_value
= bscan_one
;
4499 ctxt
->tunneled_dr
[2].num_bits
= 7;
4500 ctxt
->tunneled_dr_width
= field
->num_bits
;
4501 ctxt
->tunneled_dr
[2].out_value
= &ctxt
->tunneled_dr_width
;
4502 /* for BSCAN tunnel, there is a one-TCK skew between shift in and shift out, so
4503 scanning num_bits + 1, and then will right shift the input field after executing the queues */
4505 ctxt
->tunneled_dr
[1].num_bits
= field
->num_bits
+ 1;
4506 ctxt
->tunneled_dr
[1].out_value
= field
->out_value
;
4507 ctxt
->tunneled_dr
[1].in_value
= field
->in_value
;
4509 ctxt
->tunneled_dr
[0].num_bits
= 3;
4510 ctxt
->tunneled_dr
[0].out_value
= bscan_zero
;
4512 /* BSCAN_TUNNEL_NESTED_TAP */
4513 ctxt
->tunneled_dr
[0].num_bits
= 1;
4514 ctxt
->tunneled_dr
[0].out_value
= bscan_one
;
4515 ctxt
->tunneled_dr
[1].num_bits
= 7;
4516 ctxt
->tunneled_dr_width
= field
->num_bits
;
4517 ctxt
->tunneled_dr
[1].out_value
= &ctxt
->tunneled_dr_width
;
4518 /* for BSCAN tunnel, there is a one-TCK skew between shift in and shift out, so
4519 scanning num_bits + 1, and then will right shift the input field after executing the queues */
4520 ctxt
->tunneled_dr
[2].num_bits
= field
->num_bits
+ 1;
4521 ctxt
->tunneled_dr
[2].out_value
= field
->out_value
;
4522 ctxt
->tunneled_dr
[2].in_value
= field
->in_value
;
4523 ctxt
->tunneled_dr
[3].num_bits
= 3;
4524 ctxt
->tunneled_dr
[3].out_value
= bscan_zero
;
4526 jtag_add_dr_scan(target
->tap
, ARRAY_SIZE(ctxt
->tunneled_dr
), ctxt
->tunneled_dr
, TAP_IDLE
);