OpenOCD
riscv.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #ifndef OPENOCD_TARGET_RISCV_RISCV_H
4 #define OPENOCD_TARGET_RISCV_RISCV_H
5 
6 struct riscv_program;
7 
8 #include <stdint.h>
9 #include "opcodes.h"
10 #include "gdb_regs.h"
11 #include "jtag/jtag.h"
13 #include "target/target.h"
14 #include "target/register.h"
15 #include <helper/command.h>
16 #include <helper/bits.h>
17 
18 #define RISCV_COMMON_MAGIC 0x52495356U
19 
20 #define RISCV_MAX_TRIGGERS 32
21 #define RISCV_MAX_DMS 100
22 
23 #define DEFAULT_COMMAND_TIMEOUT_SEC 5
24 
25 #define RISCV_SATP_MODE(xlen) ((xlen) == 32 ? SATP32_MODE : SATP64_MODE)
26 #define RISCV_SATP_PPN(xlen) ((xlen) == 32 ? SATP32_PPN : SATP64_PPN)
27 #define RISCV_HGATP_MODE(xlen) ((xlen) == 32 ? HGATP32_MODE : HGATP64_MODE)
28 #define RISCV_HGATP_PPN(xlen) ((xlen) == 32 ? HGATP32_PPN : HGATP64_PPN)
29 #define RISCV_PGSHIFT 12
30 #define RISCV_PGSIZE BIT(RISCV_PGSHIFT)
31 #define RISCV_PGBASE(addr) ((addr) & ~(RISCV_PGSIZE - 1))
32 #define RISCV_PGOFFSET(addr) ((addr) & (RISCV_PGSIZE - 1))
33 
34 #define PG_MAX_LEVEL 5
35 
36 #define RISCV_BATCH_ALLOC_SIZE 128
37 
38 extern struct target_type riscv011_target;
39 extern struct target_type riscv013_target;
40 
41 /*
42  * Definitions shared by code supporting all RISC-V versions.
43  */
44 typedef uint64_t riscv_reg_t;
45 typedef uint32_t riscv_insn_t;
46 typedef uint64_t riscv_addr_t;
47 
51  YNM_NO
52 };
53 
59 };
60 
65 };
66 
68 
78 };
79 
81  /* RISCV_ISRMASK_AUTO, */ /* not supported yet */
83  /* RISCV_ISRMASK_ON, */ /* not supported yet */
85 };
86 
92 };
93 
94 /* RISC-V-specific data assigned to a register. */
95 typedef struct {
96  struct target *target;
97  /* Abstract command's regno for a custom register. */
98  unsigned int custom_number;
100 
101 #define RISCV_SAMPLE_BUF_TIMESTAMP_BEFORE 0x80
102 #define RISCV_SAMPLE_BUF_TIMESTAMP_AFTER 0x81
104  uint8_t *buf;
105  unsigned int used;
106  unsigned int size;
107 };
108 
109 typedef struct {
110  bool enabled;
111  struct {
112  bool enabled;
114  uint32_t size_bytes;
115  } bucket[16];
117 
118 typedef struct {
119  struct list_head list;
120  uint16_t low, high;
121  char *name;
122 } range_list_t;
123 
124 #define DTM_DTMCS_VERSION_UNKNOWN ((unsigned int)-1)
125 #define RISCV_TINFO_VERSION_UNKNOWN (-1)
126 
127 #define RISCV013_DTMCS_ABITS_MIN 7
128 #define RISCV013_DTMCS_ABITS_MAX 32
129 
131  unsigned int num_entries;
132  char **reg_names;
133 };
134 
142 };
143 
146  enum riscv_priv_mode mode;
147 
148  const uint8_t *write_buffer;
149  uint8_t *read_buffer;
150 
151  uint32_t size;
152  uint32_t count;
153  uint32_t increment;
154 };
155 
156 static inline bool
158 {
159  return !args.read_buffer != !args.write_buffer;
160 }
161 
162 static inline bool
164 {
165  assert(riscv_mem_access_is_valid(args));
166  return !args.write_buffer && args.read_buffer;
167 }
168 
169 static inline bool
171 {
172  assert(riscv_mem_access_is_valid(args));
173  return !args.read_buffer && args.write_buffer;
174 }
175 
176 
177 struct riscv_info {
178  unsigned int common_magic;
179 
180  unsigned int dtm_version;
181 
184 
186  char **reg_names;
187 
188  /* It's possible that each core has a different supported ISA set. */
189  int xlen;
190  /* TODO: use the value from the register cache instead. */
192  /* TODO: use the value from the register cache instead.
193  * Cached value of vlenb. 0 indicates there is no vector support.
194  * Note that you can have vector support without misa.V set, because
195  * Zve* extensions implement vector registers without setting misa.V. */
196  unsigned int vlenb;
197 
198  /* The number of triggers per hart. */
199  unsigned int trigger_count;
200 
201  /* Data structure to record known unsupported tdata1+tdata2 trigger CSR values.
202  * This is to avoid repetitive attempts to set trigger configurations that are already
203  * known to be unsupported in the HW.
204  * A separate data structure is created for each trigger. */
206 
207  /* record the tinfo of each trigger */
209 
210  /* Version of the implemented Sdtrig extension */
212 
213  /* Record if single-step is needed prior to resuming
214  * from a software breakpoint or trigger.
215  * Single-step is needed if the instruction that
216  * caused the halt was not retired. That is,
217  * when we halted "before" that instruction.
218  */
220 
221  /* For each physical trigger contains:
222  * -1: the hwbp is available
223  * -4: The trigger is used by the itrigger command
224  * -5: The trigger is used by the etrigger command
225  * >= 0: unique_id of the breakpoint/watchpoint that is using it.
226  * Note that in RTOS mode the triggers are the same across all harts the
227  * target controls, while otherwise only a single hart is controlled. */
229 
230  /* The unique id of the trigger that caused the most recent halt. If the
231  * most recent halt was not caused by a trigger, then this is -1. */
232  int64_t trigger_hit;
233 
234  /* The configured approach to translate virtual addresses to physical */
236 
238 
239  /* Decremented every scan, and when it reaches 0 we clear the learned
240  * delays, causing them to be relearned. Used for testing. */
242 
243  /* This target has been prepped and is ready to step/resume. */
244  bool prepped;
245  /* This target was selected using hasel. */
246  bool selected;
247 
248  /* Used by riscv_openocd_poll(). */
252 
254 
255  /* Helper functions that target the various RISC-V debug spec
256  * implementations. */
257  int (*select_target)(struct target *target);
259  /* Resume this target, as well as every other prepped target that can be
260  * resumed near-simultaneously. Clear the prepped flag on any target that
261  * was resumed. */
262  int (*resume_go)(struct target *target);
263  int (*step_current_hart)(struct target *target);
264 
265  /* These get called from riscv_poll_hart(), which is a house of cards
266  * together with openocd_poll(), so be careful not to upset things too
267  * much. */
269  enum riscv_hart_state previous_riscv_state);
271  enum riscv_hart_state previous_riscv_state);
273  enum riscv_hart_state previous_riscv_state);
274 
275  /* Called periodically (no guarantees about frequency), while there's
276  * nothing else going on. */
277  int (*tick)(struct target *target);
278 
279  /* Get this target as ready as possible to resume, without actually
280  * resuming. */
281  int (*resume_prep)(struct target *target);
282  int (*halt_prep)(struct target *target);
283  int (*halt_go)(struct target *target);
284  int (*on_step)(struct target *target);
285  enum riscv_halt_reason (*halt_reason)(struct target *target);
286  int (*write_progbuf)(struct target *target, unsigned int index, riscv_insn_t d);
287  riscv_insn_t (*read_progbuf)(struct target *target, unsigned int index);
288  int (*execute_progbuf)(struct target *target, uint32_t *cmderr);
290  unsigned int (*get_dmi_address_bits)(const struct target *target);
291  void (*fill_dmi_write)(const struct target *target, uint8_t *buf, uint32_t a, uint32_t d);
292  void (*fill_dmi_read)(const struct target *target, uint8_t *buf, uint32_t a);
293  void (*fill_dm_nop)(const struct target *target, uint8_t *buf);
294 
295  int (*authdata_read)(struct target *target, uint32_t *value, unsigned int index);
296  int (*authdata_write)(struct target *target, uint32_t value, unsigned int index);
297 
298  int (*dmi_read)(struct target *target, uint32_t *value, uint32_t address);
299  int (*dmi_write)(struct target *target, uint32_t address, uint32_t value);
300 
301  bool (*get_impebreak)(const struct target *target);
302  unsigned int (*get_progbufsize)(const struct target *target);
303 
304  /* Get the DMI address of target's DM's register.
305  * The function should return the passed address
306  * if the target is not assigned a DM yet.
307  */
308  uint32_t (*get_dmi_address)(const struct target *target, uint32_t dm_address);
309 
310  int (*sample_memory)(struct target *target,
311  struct riscv_sample_buf *buf,
313  int64_t until_ms);
314 
315  int (*access_memory)(struct target *target, const struct riscv_mem_access_args args);
316 
317  unsigned int (*data_bits)(struct target *target);
318 
319  COMMAND_HELPER((*print_info), struct target *target);
320 
321  /* Storage for arch_info of non-custom registers. */
323 
324  /* Storage for vector register types. */
337  struct reg_data_type type_vector;
338 
340 
341  /* Memory access methods to use, ordered by priority, highest to lowest. */
343 
345 
346  /* Different memory regions may need different methods but single configuration is applied
347  * for all. Following flags are used to warn only once about failing memory access method. */
349 
350  /* In addition to the ones in the standard spec, we'll also expose additional
351  * CSRs in this list. */
352  struct list_head expose_csr;
353  /* Same, but for custom registers.
354  * Custom registers are for non-standard extensions and use abstract register numbers
355  * from range 0xc000 ... 0xffff. */
356  struct list_head expose_custom;
357 
358  /* The list of registers to mark as "hidden". Hidden registers are available
359  * but do not appear in gdb targets description or reg command output. */
360  struct list_head hide_csr;
361 
364 
365  /* Track when we were last asked to do something substantial. */
366  int64_t last_activity;
367 
369 
371 
375 
376  bool autofence;
377 };
378 
380 {
381  switch (mode) {
382  case RISCV_MODE_M:
383  return PRV_M;
384  case RISCV_MODE_S:
385  case RISCV_MODE_VS:
386  return PRV_S;
387  case RISCV_MODE_U:
388  case RISCV_MODE_VU:
389  return PRV_U;
390  default:
391  assert(false);
392  return PRV_M;
393  }
394 }
395 
399 };
400 
401 static inline struct riscv_private_config
403 {
404  assert(target->private_config);
405  return target->private_config;
406 }
407 
408 COMMAND_HELPER(riscv_print_info_line, const char *section, const char *key,
409  unsigned int value);
410 
411 typedef struct {
412  uint8_t tunneled_dr_width;
413  struct scan_field tunneled_dr[4];
415 
416 typedef struct {
417  const char *name;
418  int level;
419  unsigned int va_bits;
420  /* log2(PTESIZE) */
421  unsigned int pte_shift;
422  unsigned int vpn_shift[PG_MAX_LEVEL];
423  unsigned int vpn_mask[PG_MAX_LEVEL];
424  unsigned int pte_ppn_shift[PG_MAX_LEVEL];
425  unsigned int pte_ppn_mask[PG_MAX_LEVEL];
426  unsigned int pa_ppn_shift[PG_MAX_LEVEL];
427  unsigned int pa_ppn_mask[PG_MAX_LEVEL];
429 
430 /* Wall-clock timeout for a command/access. Settable via RISC-V Target commands.*/
432 
433 /* Everything needs the RISC-V specific info structure, so here's a nice macro
434  * that provides that. */
435 static inline struct riscv_info *riscv_info(const struct target *target) __attribute__((unused));
436 static inline struct riscv_info *riscv_info(const struct target *target)
437 {
438  assert(target->arch_info);
439  return target->arch_info;
440 }
441 #define RISCV_INFO(R) struct riscv_info *R = riscv_info(target);
442 
443 static inline bool is_riscv(const struct riscv_info *riscv_info)
444 {
446 }
447 
448 extern struct scan_field select_dtmcontrol;
449 extern struct scan_field select_dbus;
450 extern struct scan_field select_idcode;
451 
452 int dtmcs_scan(struct jtag_tap *tap, uint32_t out, uint32_t *in_ptr);
453 
457 extern uint8_t bscan_tunnel_ir_width;
458 
459 void select_dmi_via_bscan(struct jtag_tap *tap);
460 
461 /*** OpenOCD Interface */
462 int riscv_openocd_poll(struct target *target);
463 
464 int riscv_halt(struct target *target);
465 
467  struct target *target,
468  bool current,
470  bool handle_breakpoints
471 );
472 
473 /*** RISC-V Interface ***/
474 
475 bool riscv_supports_extension(const struct target *target, char letter);
476 
477 /* Returns XLEN for the given (or current) hart. */
478 unsigned int riscv_xlen(const struct target *target);
479 
480 /* Returns VLENB for the given (or current) hart. */
481 unsigned int riscv_vlenb(const struct target *target);
482 
483 /*** Support functions for the RISC-V 'RTOS', which provides multihart support
484  * without requiring multiple targets. */
485 
486 /* Checks the state of the current hart -- "is_halted" checks the actual
487  * on-device register. */
489 
490 /* These helper functions let the generic program interface get target-specific
491  * information. */
492 unsigned int riscv_progbuf_size(struct target *target);
493 
494 riscv_insn_t riscv_read_progbuf(struct target *target, int index);
495 int riscv_write_progbuf(struct target *target, unsigned int index, riscv_insn_t insn);
496 int riscv_execute_progbuf(struct target *target, uint32_t *cmderr);
497 
498 void riscv_fill_dm_nop(const struct target *target, uint8_t *buf);
499 void riscv_fill_dmi_write(const struct target *target, uint8_t *buf, uint32_t a, uint32_t d);
500 void riscv_fill_dmi_read(const struct target *target, uint8_t *buf, uint32_t a);
501 unsigned int riscv_get_dmi_address_bits(const struct target *target);
502 
503 uint32_t riscv_get_dmi_address(const struct target *target, uint32_t dm_address);
504 
506 
509  struct watchpoint *watchpoint);
510 
511 void riscv_semihosting_init(struct target *target);
512 
513 enum semihosting_result riscv_semihosting(struct target *target, int *retval);
514 
515 void riscv_add_bscan_tunneled_scan(struct jtag_tap *tap, const struct scan_field *field,
517 
518 int riscv_read_by_any_size(struct target *target, target_addr_t address, uint32_t size, uint8_t *buffer);
519 int riscv_write_by_any_size(struct target *target, target_addr_t address, uint32_t size, uint8_t *buffer);
520 
521 #endif /* OPENOCD_TARGET_RISCV_RISCV_H */
enum arm_mode mode
Definition: armv4_5.c:280
uint64_t buffer
Pointer to data buffer to send over SPI.
Definition: dw-spi-helper.h:0
uint32_t size
Size of dw_spi_transaction::buffer.
Definition: dw-spi-helper.h:4
uint32_t address
Starting address. Sector aligned.
Definition: dw-spi-helper.h:0
#define PRV_U
Definition: encoding.h:234
#define PRV_S
Definition: encoding.h:235
#define PRV_M
Definition: encoding.h:236
The JTAG interface can be implemented with a software or hardware fifo.
struct qn908x_flash_bank __attribute__
Definition: armv8.c:1059
static bool riscv_mem_access_is_valid(const struct riscv_mem_access_args args)
Definition: riscv.h:157
struct scan_field select_idcode
Definition: riscv.c:54
unsigned int riscv_xlen(const struct target *target)
Definition: riscv.c:6288
struct target_type riscv011_target
Definition: riscv-011.c:2460
uint32_t bscan_tunneled_select_dmi_num_fields
struct scan_field select_dbus
Definition: riscv.c:49
void riscv_add_bscan_tunneled_scan(struct jtag_tap *tap, const struct scan_field *field, riscv_bscan_tunneled_scan_context_t *ctxt)
Definition: riscv.c:6529
static struct riscv_info * riscv_info(const struct target *target) __attribute__((unused))
Definition: riscv.h:436
static bool is_riscv(const struct riscv_info *riscv_info)
Definition: riscv.h:443
#define PG_MAX_LEVEL
Definition: riscv.h:34
unsigned int riscv_get_dmi_address_bits(const struct target *target)
Definition: riscv.c:6359
bool riscv_supports_extension(const struct target *target, char letter)
Definition: riscv.c:6275
void select_dmi_via_bscan(struct jtag_tap *tap)
Definition: riscv.c:326
int riscv_read_by_any_size(struct target *target, target_addr_t address, uint32_t size, uint8_t *buffer)
Read one memory item using any memory access size that will work.
Definition: riscv.c:1608
void riscv_semihosting_init(struct target *target)
Initialize RISC-V semihosting.
int riscv_halt(struct target *target)
Definition: riscv.c:2748
riscv_mem_access_method
Definition: riscv.h:54
@ RISCV_MEM_ACCESS_MAX_METHODS_NUM
Definition: riscv.h:58
@ RISCV_MEM_ACCESS_SYSBUS
Definition: riscv.h:56
@ RISCV_MEM_ACCESS_PROGBUF
Definition: riscv.h:55
@ RISCV_MEM_ACCESS_ABSTRACT
Definition: riscv.h:57
int riscv_write_by_any_size(struct target *target, target_addr_t address, uint32_t size, uint8_t *buffer)
Write one memory item using any memory access size that will work.
Definition: riscv.c:1576
unsigned int riscv_vlenb(const struct target *target)
Definition: riscv.c:6294
int riscv_get_hart_state(struct target *target, enum riscv_hart_state *state)
Definition: riscv.c:6300
riscv_hart_state
Definition: riscv.h:87
@ RISCV_STATE_RUNNING
Definition: riscv.h:89
@ RISCV_STATE_UNAVAILABLE
Definition: riscv.h:91
@ RISCV_STATE_NON_EXISTENT
Definition: riscv.h:88
@ RISCV_STATE_HALTED
Definition: riscv.h:90
struct target_type riscv013_target
Definition: riscv-013.c:5191
COMMAND_HELPER(riscv_print_info_line, const char *section, const char *key, unsigned int value)
Definition: riscv.c:5562
unsigned int riscv_progbuf_size(struct target *target)
Definition: riscv.c:6317
static riscv_reg_t riscv_priv_mode_to_prv(enum riscv_priv_mode mode)
Definition: riscv.h:379
enum semihosting_result riscv_semihosting(struct target *target, int *retval)
Check for and process a semihosting request using the ARM protocol).
#define RISCV_MAX_TRIGGERS
Definition: riscv.h:20
uint8_t bscan_tunnel_ir_width
Definition: riscv.c:61
struct scan_field * bscan_tunneled_select_dmi
riscv_priv_mode
Definition: riscv.h:135
@ RISCV_MODE_M
Definition: riscv.h:136
@ RISCV_MODE_U
Definition: riscv.h:138
@ N_RISCV_MODE
Definition: riscv.h:141
@ RISCV_MODE_VU
Definition: riscv.h:140
@ RISCV_MODE_VS
Definition: riscv.h:139
@ RISCV_MODE_S
Definition: riscv.h:137
struct scan_field select_dtmcontrol
Definition: riscv.c:44
void riscv_fill_dmi_write(const struct target *target, uint8_t *buf, uint32_t a, uint32_t d)
Definition: riscv.c:6341
uint64_t riscv_reg_t
Definition: riscv.h:44
int dtmcs_scan(struct jtag_tap *tap, uint32_t out, uint32_t *in_ptr)
Definition: riscv.c:423
const char * riscv_virt2phys_mode_to_str(enum riscv_virt2phys_mode mode)
Definition: riscv.c:165
int riscv_openocd_poll(struct target *target)
Definition: riscv.c:4149
int riscv_add_watchpoint(struct target *target, struct watchpoint *watchpoint)
Definition: riscv.c:1764
#define RISCV_COMMON_MAGIC
Definition: riscv.h:18
uint32_t riscv_get_dmi_address(const struct target *target, uint32_t dm_address)
Definition: riscv.c:4812
static bool riscv_mem_access_is_write(const struct riscv_mem_access_args args)
Definition: riscv.h:170
int riscv_write_progbuf(struct target *target, unsigned int index, riscv_insn_t insn)
Definition: riscv.c:6323
riscv_insn_t riscv_read_progbuf(struct target *target, int index)
Definition: riscv.c:6329
bscan_tunnel_type_t
Definition: riscv.h:456
@ BSCAN_TUNNEL_NESTED_TAP
Definition: riscv.h:456
@ BSCAN_TUNNEL_DATA_REGISTER
Definition: riscv.h:456
void riscv_fill_dm_nop(const struct target *target, uint8_t *buf)
Definition: riscv.c:6353
static bool riscv_mem_access_is_read(const struct riscv_mem_access_args args)
Definition: riscv.h:163
void riscv_fill_dmi_read(const struct target *target, uint8_t *buf, uint32_t a)
Definition: riscv.c:6347
int riscv_execute_progbuf(struct target *target, uint32_t *cmderr)
Definition: riscv.c:6335
static struct riscv_private_config * riscv_private_config(const struct target *target)
Definition: riscv.h:402
yes_no_maybe
Definition: riscv.h:48
@ YNM_YES
Definition: riscv.h:50
@ YNM_MAYBE
Definition: riscv.h:49
@ YNM_NO
Definition: riscv.h:51
int riscv_remove_watchpoint(struct target *target, struct watchpoint *watchpoint)
Definition: riscv.c:1784
uint32_t riscv_insn_t
Definition: riscv.h:45
riscv_halt_reason
Definition: riscv.h:69
@ RISCV_HALT_INTERRUPT
Definition: riscv.h:70
@ RISCV_HALT_CRITICAL_ERROR
Definition: riscv.h:76
@ RISCV_HALT_SINGLESTEP
Definition: riscv.h:72
@ RISCV_HALT_EBREAK
Definition: riscv.h:71
@ RISCV_HALT_UNKNOWN
Definition: riscv.h:74
@ RISCV_HALT_ERROR
Definition: riscv.h:77
@ RISCV_HALT_GROUP
Definition: riscv.h:75
@ RISCV_HALT_TRIGGER
Definition: riscv.h:73
int riscv_get_command_timeout_sec(void)
Definition: riscv.c:186
int riscv_enumerate_triggers(struct target *target)
Count triggers, and initialize trigger_count for each hart.
Definition: riscv.c:6444
uint64_t riscv_addr_t
Definition: riscv.h:46
int riscv_openocd_step(struct target *target, bool current, target_addr_t address, bool handle_breakpoints)
Definition: riscv.c:4420
riscv_virt2phys_mode
Definition: riscv.h:61
@ RISCV_VIRT2PHYS_MODE_HW
Definition: riscv.h:62
@ RISCV_VIRT2PHYS_MODE_OFF
Definition: riscv.h:64
@ RISCV_VIRT2PHYS_MODE_SW
Definition: riscv.h:63
riscv_isrmasking_mode
Definition: riscv.h:80
@ RISCV_ISRMASK_OFF
Definition: riscv.h:82
@ RISCV_ISRMASK_STEPONLY
Definition: riscv.h:84
struct target * target
Definition: rtt/rtt.c:26
semihosting_result
Definition: jtag.h:101
Definition: list.h:41
char * name
Definition: riscv.h:121
uint16_t high
Definition: riscv.h:120
char ** reg_names
Definition: riscv.h:132
unsigned int num_entries
Definition: riscv.h:131
int(* on_step)(struct target *target)
Definition: riscv.h:284
bool(* get_impebreak)(const struct target *target)
Definition: riscv.h:301
void * version_specific
Definition: riscv.h:183
int(* tick)(struct target *target)
Definition: riscv.h:277
int(* dmi_read)(struct target *target, uint32_t *value, uint32_t address)
Definition: riscv.h:298
struct reg_data_type_vector vector_uint8
Definition: riscv.h:325
enum target_event halted_callback_event
Definition: riscv.h:250
int(* select_target)(struct target *target)
Definition: riscv.h:257
enum riscv_virt2phys_mode virt2phys_mode
Definition: riscv.h:235
struct reg_data_type type_uint64_vector
Definition: riscv.h:333
unsigned int trigger_tinfo[RISCV_MAX_TRIGGERS]
Definition: riscv.h:208
struct reg_data_type type_uint16_vector
Definition: riscv.h:331
bool wp_allow_equality_match_trigger
Definition: riscv.h:372
struct list_head expose_custom
Definition: riscv.h:356
struct reg_data_type_vector vector_uint16
Definition: riscv.h:326
struct list_head * wp_triggers_negative_cache
Definition: riscv.h:205
int(* handle_became_unavailable)(struct target *target, enum riscv_hart_state previous_riscv_state)
Definition: riscv.h:272
int(* halt_go)(struct target *target)
Definition: riscv.h:283
struct reg_data_type type_vector
Definition: riscv.h:337
int tinfo_version
Definition: riscv.h:211
int(* handle_became_halted)(struct target *target, enum riscv_hart_state previous_riscv_state)
Definition: riscv.h:268
struct reg_data_type_union_field vector_fields[5]
Definition: riscv.h:335
unsigned int(* get_progbufsize)(const struct target *target)
Definition: riscv.h:302
riscv_insn_t(* read_progbuf)(struct target *target, unsigned int index)
Definition: riscv.h:287
bool selected
Definition: riscv.h:246
bool * reserved_triggers
Definition: riscv.h:339
bool triggers_enumerated
Definition: riscv.h:237
int xlen
Definition: riscv.h:189
struct reg_data_type type_uint128_vector
Definition: riscv.h:334
unsigned int vlenb
Definition: riscv.h:196
bool prepped
Definition: riscv.h:244
unsigned int num_enabled_mem_access_methods
Definition: riscv.h:344
enum riscv_isrmasking_mode isrmask_mode
Definition: riscv.h:253
int(* handle_became_running)(struct target *target, enum riscv_hart_state previous_riscv_state)
Definition: riscv.h:270
unsigned int(* get_dmi_address_bits)(const struct target *target)
Definition: riscv.h:290
int(* authdata_write)(struct target *target, uint32_t value, unsigned int index)
Definition: riscv.h:296
int(* write_progbuf)(struct target *target, unsigned int index, riscv_insn_t d)
Definition: riscv.h:286
int64_t last_activity
Definition: riscv.h:366
unsigned int dtm_version
Definition: riscv.h:180
struct reg_name_table custom_register_names
Definition: riscv.h:185
int(* execute_progbuf)(struct target *target, uint32_t *cmderr)
Definition: riscv.h:288
unsigned int halt_group_repoll_count
Definition: riscv.h:251
unsigned int(* data_bits)(struct target *target)
Definition: riscv.h:317
struct list_head expose_csr
Definition: riscv.h:352
bool halted_needs_event_callback
Definition: riscv.h:249
struct reg_data_type type_uint32_vector
Definition: riscv.h:332
int(* resume_prep)(struct target *target)
Definition: riscv.h:281
int(* halt_prep)(struct target *target)
Definition: riscv.h:282
int64_t trigger_hit
Definition: riscv.h:232
int reset_delays_wait
Definition: riscv.h:241
enum yes_no_maybe vsew64_supported
Definition: riscv.h:368
int(* dmi_write)(struct target *target, uint32_t address, uint32_t value)
Definition: riscv.h:299
bool autofence
Definition: riscv.h:376
void(* fill_dmi_write)(const struct target *target, uint8_t *buf, uint32_t a, uint32_t d)
Definition: riscv.h:291
riscv_reg_t misa
Definition: riscv.h:191
void(* fill_dmi_read)(const struct target *target, uint8_t *buf, uint32_t a)
Definition: riscv.h:292
riscv_sample_config_t sample_config
Definition: riscv.h:362
COMMAND_HELPER((*print_info), struct target *target)
bool range_trigger_fallback_encountered
Definition: riscv.h:370
unsigned int common_magic
Definition: riscv.h:178
bool mem_access_warn[RISCV_MEM_ACCESS_MAX_METHODS_NUM]
Definition: riscv.h:348
int64_t trigger_unique_id[RISCV_MAX_TRIGGERS]
Definition: riscv.h:228
int(* sample_memory)(struct target *target, struct riscv_sample_buf *buf, riscv_sample_config_t *config, int64_t until_ms)
Definition: riscv.h:310
int(* authdata_read)(struct target *target, uint32_t *value, unsigned int index)
Definition: riscv.h:295
int(* access_memory)(struct target *target, const struct riscv_mem_access_args args)
Definition: riscv.h:315
uint32_t(* get_dmi_address)(const struct target *target, uint32_t dm_address)
Definition: riscv.h:308
struct reg_data_type type_uint8_vector
Definition: riscv.h:330
bool wp_allow_ge_lt_trigger
Definition: riscv.h:374
int(* get_hart_state)(struct target *target, enum riscv_hart_state *state)
Definition: riscv.h:258
riscv_reg_info_t shared_reg_info
Definition: riscv.h:322
struct reg_data_type_vector vector_uint32
Definition: riscv.h:327
struct riscv_sample_buf sample_buf
Definition: riscv.h:363
char ** reg_names
Definition: riscv.h:186
struct reg_data_type_union vector_union
Definition: riscv.h:336
unsigned int trigger_count
Definition: riscv.h:199
int(* step_current_hart)(struct target *target)
Definition: riscv.h:263
struct reg_data_type_vector vector_uint64
Definition: riscv.h:328
struct command_context * cmd_ctx
Definition: riscv.h:182
void(* fill_dm_nop)(const struct target *target, uint8_t *buf)
Definition: riscv.h:293
enum riscv_halt_reason(* halt_reason)(struct target *target)
Definition: riscv.h:285
int(* invalidate_cached_progbuf)(struct target *target)
Definition: riscv.h:289
enum riscv_mem_access_method mem_access_methods[RISCV_MEM_ACCESS_MAX_METHODS_NUM]
Definition: riscv.h:342
bool wp_allow_napot_trigger
Definition: riscv.h:373
struct list_head hide_csr
Definition: riscv.h:360
bool need_single_step
Definition: riscv.h:219
struct reg_data_type_vector vector_uint128
Definition: riscv.h:329
int(* resume_go)(struct target *target)
Definition: riscv.h:262
uint32_t increment
Definition: riscv.h:153
uint8_t * read_buffer
Definition: riscv.h:149
const uint8_t * write_buffer
Definition: riscv.h:148
target_addr_t address
Definition: riscv.h:145
uint32_t count
Definition: riscv.h:152
enum riscv_priv_mode mode
Definition: riscv.h:146
bool dcsr_ebreak_fields[N_RISCV_MODE]
Definition: riscv.h:397
struct target * target
Definition: riscv.h:96
unsigned int custom_number
Definition: riscv.h:98
unsigned int size
Definition: riscv.h:106
uint8_t * buf
Definition: riscv.h:104
unsigned int used
Definition: riscv.h:105
target_addr_t address
Definition: riscv.h:113
This structure defines a single scan field in the scan.
Definition: jtag.h:87
This holds methods shared between all instances of a given target type.
Definition: target_type.h:27
Definition: target.h:119
void * private_config
Definition: target.h:175
void * arch_info
Definition: target.h:174
unsigned int pte_shift
Definition: riscv.h:421
const char * name
Definition: riscv.h:417
unsigned int va_bits
Definition: riscv.h:419
target_event
Definition: target.h:254
uint64_t target_addr_t
Definition: types.h:279
static struct ublast_lowlevel low
uint8_t state[4]
Definition: vdebug.c:21