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

Go to the source code of this file.

Data Structures

struct  match_triggers_tdata1_fields
 
struct  tdata1_cache
 
struct  tdata2_cache
 
struct  trigger
 
struct  trigger_request_info
 

Macros

#define BSCAN_TUNNEL_IR_WIDTH_NBITS   7
 
#define DBUS   0x11
 
#define DTMCONTROL   0x10
 
#define DTMCONTROL_VERSION   (0xf)
 
#define RISCV_EBREAK_MODE_INVALID   -1
 
#define RISCV_HALT_GROUP_REPOLL_LIMIT   5
 
#define RISCV_TRIGGER_HIT_NOT_FOUND   ((int64_t)-1)
 

Enumerations

enum  { RO_NORMAL , RO_REVERSED }
 
enum  mctrl6hitstatus {
  M6_HIT_ERROR , M6_HIT_NOT_SUPPORTED , M6_NOT_HIT , M6_HIT_BEFORE ,
  M6_HIT_AFTER , M6_HIT_IMM_AFTER
}
 
enum  riscv_cfg_opts { RISCV_CFG_EBREAK , RISCV_CFG_INVALID = -1 }
 
enum  riscv_next_action { RPH_NONE , RPH_RESUME , RPH_REMAIN_HALTED }
 

Functions

static int add_trigger (struct target *target, struct trigger *trigger)
 
static struct riscv_private_configalloc_default_riscv_private_config (void)
 
static bool can_use_napot_match (struct trigger *trigger)
 
static int check_if_trigger_exists (struct target *target, unsigned int index)
 
static enum mctrl6hitstatus check_mcontrol6_hit_status (struct target *target, riscv_reg_t tdata1, uint64_t hit_mask)
 
static int check_virt_memory_access (struct target *target, target_addr_t address, uint32_t size, uint32_t count, bool is_write)
 
 COMMAND_HANDLER (handle_dump_sample_buf_command)
 
 COMMAND_HANDLER (handle_info)
 
 COMMAND_HANDLER (handle_memory_sample_command)
 
 COMMAND_HANDLER (handle_repeat_read)
 
 COMMAND_HANDLER (handle_reserve_trigger)
 
 COMMAND_HANDLER (handle_riscv_dm_read)
 
 COMMAND_HANDLER (handle_riscv_dm_write)
 
 COMMAND_HANDLER (handle_riscv_dmi_read)
 
 COMMAND_HANDLER (handle_riscv_dmi_write)
 
 COMMAND_HANDLER (handle_riscv_virt2phys_mode)
 
 COMMAND_HANDLER (riscv_authdata_read)
 
 COMMAND_HANDLER (riscv_authdata_write)
 
 COMMAND_HANDLER (riscv_etrigger)
 
 COMMAND_HANDLER (riscv_exec_progbuf)
 
 COMMAND_HANDLER (riscv_hide_csrs)
 
 COMMAND_HANDLER (riscv_icount)
 
 COMMAND_HANDLER (riscv_itrigger)
 
 COMMAND_HANDLER (riscv_reset_delays)
 
 COMMAND_HANDLER (riscv_resume_order)
 
 COMMAND_HANDLER (riscv_set_autofence)
 
 COMMAND_HANDLER (riscv_set_bscan_tunnel_ir)
 
 COMMAND_HANDLER (riscv_set_command_timeout_sec)
 
 COMMAND_HANDLER (riscv_set_ebreakm)
 
 COMMAND_HANDLER (riscv_set_ebreaks)
 
 COMMAND_HANDLER (riscv_set_ebreaku)
 
 COMMAND_HANDLER (riscv_set_enable_trigger_feature)
 
 COMMAND_HANDLER (riscv_set_expose_csrs)
 
 COMMAND_HANDLER (riscv_set_expose_custom)
 
 COMMAND_HANDLER (riscv_set_ir)
 
 COMMAND_HANDLER (riscv_set_maskisr)
 
 COMMAND_HANDLER (riscv_set_mem_access)
 
 COMMAND_HANDLER (riscv_set_reset_timeout_sec)
 
 COMMAND_HANDLER (riscv_use_bscan_tunnel)
 
 COMMAND_HELPER (ebreakx_deprecation_helper, enum riscv_priv_mode mode)
 
static COMMAND_HELPER (report_reserved_triggers, struct target *target)
 
 COMMAND_HELPER (riscv_clear_trigger, int trigger_id, const char *name)
 
 COMMAND_HELPER (riscv_print_info_line, const char *section, const char *key, unsigned int value)
 
static COMMAND_HELPER (riscv_print_info_line_if_available, const char *section, const char *key, unsigned int value, bool is_available)
 
static unsigned int count_trailing_ones (riscv_reg_t reg)
 
static void create_wp_trigger_cache (struct target *target)
 
static enum target_debug_reason derive_debug_reason_without_hitbit (const struct target *target, riscv_reg_t dpc)
 
static int disable_trigger_if_dmode (struct target *target, riscv_reg_t tdata1)
 
static int disable_watchpoints (struct target *target, bool *wp_is_set)
 
int dtmcs_scan (struct jtag_tap *tap, uint32_t out, uint32_t *in_ptr)
 
static int dtmcs_scan_via_bscan (struct jtag_tap *tap, uint32_t out, uint32_t *in_ptr)
 
static int ebreak_config_to_tcl_dict (const struct riscv_private_config *config, char *buffer)
 Obtain dcsr.ebreak* configuration as a Tcl dictionary. More...
 
static int enable_watchpoints (struct target *target, bool *wp_is_set)
 
static struct match_triggers_tdata1_fields fill_match_triggers_tdata1_fields_t2 (struct target *target, struct trigger *trigger)
 
static struct match_triggers_tdata1_fields fill_match_triggers_tdata1_fields_t6 (struct target *target, struct trigger *trigger)
 
static int find_first_trigger_by_id (struct target *target, int unique_id)
 
static int find_next_free_trigger (struct target *target, int type, bool chained, unsigned int *idx)
 
static void free_wp_triggers_cache (struct target *target)
 
static int get_loadstore_membase_regno (struct target *target, const riscv_insn_t instruction, int *regid)
 
static int get_loadstore_memoffset (struct target *target, const riscv_insn_t instruction, int16_t *memoffset)
 
static uint16_t get_offset_cld (riscv_insn_t instruction)
 
static uint16_t get_offset_cldsp (riscv_insn_t instruction)
 
static uint16_t get_offset_clq (riscv_insn_t instruction)
 
static uint16_t get_offset_clqsp (riscv_insn_t instruction)
 
static uint16_t get_offset_clw (riscv_insn_t instruction)
 
static uint16_t get_offset_clwsp (riscv_insn_t instruction)
 These functions are needed to extract individual bits (for offset) from the instruction. More...
 
static uint16_t get_offset_csdsp (riscv_insn_t instruction)
 
static uint16_t get_offset_csqsp (riscv_insn_t instruction)
 
static uint16_t get_offset_cswsp (riscv_insn_t instruction)
 
static uint32_t get_opcode (const riscv_insn_t instruction)
 
static uint32_t get_rs1_c (riscv_insn_t instruction)
 Decode rs1' register num for RVC. More...
 
static struct target_typeget_target_type (struct target *target)
 
static int get_trigger_types (struct target *target, unsigned int *trigger_tinfo, riscv_reg_t tdata1)
 This function reads tinfo or tdata1, when reading tinfo fails, to determine trigger types supported by a trigger. More...
 
static int halt_finish (struct target *target)
 
static int halt_go (struct target *target)
 
static int halt_prep (struct target *target)
 
static int jim_configure_ebreak (struct riscv_private_config *config, struct jim_getopt_info *goi)
 
static int jim_report_ebreak_config (const struct riscv_private_config *config, Jim_Interp *interp)
 
static void log_trigger_request_info (struct trigger_request_info trig_info)
 
static int maybe_add_trigger_t1 (struct target *target, struct trigger *trigger)
 
static int maybe_add_trigger_t2_t6 (struct target *target, struct trigger *trigger, struct match_triggers_tdata1_fields fields)
 
static int maybe_add_trigger_t2_t6_for_bp (struct target *target, struct trigger *trigger, struct match_triggers_tdata1_fields fields)
 
static int maybe_add_trigger_t2_t6_for_wp (struct target *target, struct trigger *trigger, struct match_triggers_tdata1_fields fields)
 
static int maybe_add_trigger_t3 (struct target *target, bool vs, bool vu, bool m, bool s, bool u, bool pending, unsigned int count, int unique_id)
 
static int maybe_add_trigger_t4 (struct target *target, bool vs, bool vu, bool nmi, bool m, bool s, bool u, riscv_reg_t interrupts, int unique_id)
 
static int maybe_add_trigger_t5 (struct target *target, bool vs, bool vu, bool m, bool s, bool u, riscv_reg_t exception_codes, int unique_id)
 
static int old_or_new_riscv_poll (struct target *target)
 
static int old_or_new_riscv_step (struct target *target, bool current, target_addr_t address, bool handle_breakpoints)
 
static int old_or_new_riscv_step_impl (struct target *target, bool current, target_addr_t address, bool handle_breakpoints, int handle_callbacks)
 
static int oldriscv_poll (struct target *target)
 
static int oldriscv_step (struct target *target, bool current, uint32_t address, bool handle_breakpoints)
 
static bool parse_csr_address (const char *reg_address_str, unsigned int *reg_addr)
 
static int parse_reg_ranges (struct list_head *ranges, const char *tcl_arg, const char *reg_type, unsigned int max_val)
 
static int parse_reg_ranges_impl (struct list_head *ranges, char *args, const char *reg_type, unsigned int max_val, char **const name_buffer)
 
static int read_by_given_size (struct target *target, target_addr_t address, uint32_t size, uint8_t *buffer, uint32_t access_size)
 Read one memory item of given "size". More...
 
static int remove_trigger (struct target *target, int unique_id)
 
static int resume_finish (struct target *target, bool debug_execution)
 
static int resume_go (struct target *target, bool current, target_addr_t address, bool handle_breakpoints, bool debug_execution)
 Resume all the harts that have been prepped, as close to instantaneous as possible. More...
 
static int resume_prep (struct target *target, bool current, target_addr_t address, bool handle_breakpoints, bool debug_execution)
 Get everything ready to resume. More...
 
static int riscv_add_breakpoint (struct target *target, struct breakpoint *breakpoint)
 
void riscv_add_bscan_tunneled_scan (struct jtag_tap *tap, const struct scan_field *field, riscv_bscan_tunneled_scan_context_t *ctxt)
 
int riscv_add_watchpoint (struct target *target, struct watchpoint *watchpoint)
 
static int riscv_address_translate (struct target *target, const virt2phys_info_t *info, target_addr_t ppn, const virt2phys_info_t *extra_info, target_addr_t extra_ppn, target_addr_t virtual, target_addr_t *physical)
 
static int riscv_arch_state (struct target *target)
 
static int riscv_assert_reset (struct target *target)
 
static int riscv_checksum_memory (struct target *target, target_addr_t address, uint32_t count, uint32_t *checksum)
 
static int riscv_create_target (struct target *target)
 
static unsigned int riscv_data_bits (struct target *target)
 
static int riscv_deassert_reset (struct target *target)
 
static void riscv_deinit_target (struct target *target)
 
static int riscv_dmi_read (struct target *target, uint32_t *value, uint32_t address)
 
static int riscv_dmi_write (struct target *target, uint32_t dmi_address, uint32_t value)
 
static int riscv_effective_privilege_mode (struct target *target, int *v_mode, int *effective_mode)
 
int riscv_enumerate_triggers (struct target *target)
 Count triggers, and initialize trigger_count for each hart. More...
 
static int riscv_examine (struct target *target)
 
int riscv_execute_progbuf (struct target *target, uint32_t *cmderr)
 
void riscv_fill_dm_nop (const struct target *target, uint8_t *buf)
 
void riscv_fill_dmi_read (const struct target *target, uint8_t *buf, uint32_t a)
 
void riscv_fill_dmi_write (const struct target *target, uint8_t *buf, uint32_t a, uint32_t d)
 
int riscv_get_command_timeout_sec (void)
 
uint32_t riscv_get_dmi_address (const struct target *target, uint32_t dm_address)
 
unsigned int riscv_get_dmi_address_bits (const struct target *target)
 
static const char * riscv_get_gdb_arch (const struct target *target)
 
static int riscv_get_gdb_reg_list (struct target *target, struct reg **reg_list[], int *reg_list_size, enum target_register_class reg_class)
 
static int riscv_get_gdb_reg_list_internal (struct target *target, struct reg **reg_list[], int *reg_list_size, enum target_register_class reg_class, bool is_read)
 
static int riscv_get_gdb_reg_list_noread (struct target *target, struct reg **reg_list[], int *reg_list_size, enum target_register_class reg_class)
 
int riscv_get_hart_state (struct target *target, enum riscv_hart_state *state)
 
int riscv_halt (struct target *target)
 
static int riscv_halt_go_all_harts (struct target *target)
 
static enum riscv_halt_reason riscv_halt_reason (struct target *target)
 
static int riscv_hit_watchpoint (struct target *target, struct watchpoint **hit_watchpoint)
 
static void riscv_info_init (struct target *target, struct riscv_info *r)
 
static int riscv_init_target (struct command_context *cmd_ctx, struct target *target)
 
static int riscv_interrupts_disable (struct target *target, riscv_reg_t *old_mstatus)
 
static int riscv_interrupts_restore (struct target *target, riscv_reg_t old_mstatus)
 
static int riscv_jim_configure (struct target *target, struct jim_getopt_info *goi)
 
static int riscv_mmu (struct target *target, bool *enabled)
 
int riscv_openocd_poll (struct target *target)
 
int riscv_openocd_step (struct target *target, bool current, target_addr_t address, bool handle_breakpoints)
 
static int riscv_openocd_step_impl (struct target *target, bool current, target_addr_t address, bool handle_breakpoints, int handle_callbacks)
 
static int riscv_poll_hart (struct target *target, enum riscv_next_action *next_action)
 
unsigned int riscv_progbuf_size (struct target *target)
 
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. More...
 
static int riscv_read_memory (struct target *target, target_addr_t address, uint32_t size, uint32_t count, uint8_t *buffer)
 
static int riscv_read_phys_memory (struct target *target, target_addr_t phys_address, uint32_t size, uint32_t count, uint8_t *buffer)
 
riscv_insn_t riscv_read_progbuf (struct target *target, int index)
 
static int riscv_remove_breakpoint (struct target *target, struct breakpoint *breakpoint)
 
int riscv_remove_watchpoint (struct target *target, struct watchpoint *watchpoint)
 
static int riscv_resume (struct target *target, bool current, target_addr_t address, bool handle_breakpoints, bool debug_execution, bool single_hart)
 
static int riscv_resume_go_all_harts (struct target *target)
 
static int riscv_run_algorithm (struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_params, struct reg_param *reg_params, target_addr_t entry_point, target_addr_t exit_point, unsigned int timeout_ms, void *arch_info)
 
static int riscv_rw_memory (struct target *target, const struct riscv_mem_access_args args)
 
static void riscv_sample_buf_maybe_add_timestamp (struct target *target, bool before)
 
static int riscv_step_rtos_hart (struct target *target)
 
bool riscv_supports_extension (const struct target *target, char letter)
 
static int riscv_target_resume (struct target *target, bool current, target_addr_t address, bool handle_breakpoints, bool debug_execution)
 
static int riscv_trigger_detect_hit_bits (struct target *target, int64_t *unique_id, bool *need_single_step)
 Look at the trigger hit bits to find out which trigger is the reason we're halted. More...
 
static int riscv_virt2phys (struct target *target, target_addr_t virtual, target_addr_t *physical)
 
bool riscv_virt2phys_mode_is_hw (const struct target *target)
 
bool riscv_virt2phys_mode_is_sw (const struct target *target)
 
const char * riscv_virt2phys_mode_to_str (enum riscv_virt2phys_mode mode)
 
static int riscv_virt2phys_v (struct target *target, target_addr_t virtual, target_addr_t *physical)
 
unsigned int riscv_vlenb (const struct target *target)
 
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. More...
 
static int riscv_write_memory (struct target *target, target_addr_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
 
static int riscv_write_phys_memory (struct target *target, target_addr_t phys_address, uint32_t size, uint32_t count, const uint8_t *buffer)
 
int riscv_write_progbuf (struct target *target, unsigned int index, riscv_insn_t insn)
 
unsigned int riscv_xlen (const struct target *target)
 
static unsigned int riscv_xlen_nonconst (struct target *target)
 
static int sample_memory (struct target *target)
 
void select_dmi_via_bscan (struct jtag_tap *tap)
 
static int set_debug_reason (struct target *target, enum riscv_halt_reason halt_reason)
 Set OpenOCD's generic debug reason from the RISC-V halt reason. More...
 
static int set_trigger (struct target *target, unsigned int idx, riscv_reg_t tdata1, riscv_reg_t tdata2)
 
static struct tdata1_cachetdata1_cache_alloc (struct list_head *tdata1_cache_head, riscv_reg_t tdata1)
 
struct tdata1_cachetdata1_cache_search (struct list_head *tdata1_cache_head, riscv_reg_t find_tdata1)
 
static void tdata2_cache_alloc (struct list_head *tdata2_cache_head, riscv_reg_t tdata2)
 
struct tdata2_cachetdata2_cache_search (struct list_head *tdata2_cache_head, riscv_reg_t find_tdata2)
 
static void trigger_from_breakpoint (struct trigger *trigger, const struct breakpoint *breakpoint)
 
static void trigger_from_watchpoint (struct trigger *trigger, const struct watchpoint *watchpoint)
 
static int try_setup_chained_match_triggers (struct target *target, struct trigger *trigger, struct trigger_request_info t1, struct trigger_request_info t2)
 
static int try_setup_single_match_trigger (struct target *target, struct trigger *trigger, struct trigger_request_info trig_info)
 
static int try_use_trigger_and_cache_result (struct target *target, unsigned int idx, riscv_reg_t tdata1, riscv_reg_t tdata2)
 
static int verify_loadstore (struct target *target, const riscv_insn_t instruction, bool *is_read)
 
static void wp_triggers_cache_add (struct target *target, unsigned int idx, riscv_reg_t tdata1, riscv_reg_t tdata2, int error_code)
 
static bool wp_triggers_cache_search (struct target *target, unsigned int idx, riscv_reg_t tdata1, riscv_reg_t tdata2)
 
static int write_by_given_size (struct target *target, target_addr_t address, uint32_t size, uint8_t *buffer, uint32_t access_size)
 Write one memory item of given "size". More...
 

Variables

static struct scan_field _bscan_tunnel_data_register_select_dmi []
 
static struct scan_field _bscan_tunnel_nested_tap_select_dmi []
 
static const uint8_t bscan_one [4] = {1}
 
static struct scan_fieldbscan_tunnel_data_register_select_dmi = _bscan_tunnel_data_register_select_dmi
 
static uint32_t bscan_tunnel_data_register_select_dmi_num_fields = ARRAY_SIZE(_bscan_tunnel_data_register_select_dmi)
 
static int bscan_tunnel_ir_id
 
uint8_t bscan_tunnel_ir_width
 
static struct scan_fieldbscan_tunnel_nested_tap_select_dmi = _bscan_tunnel_nested_tap_select_dmi
 
static uint32_t bscan_tunnel_nested_tap_select_dmi_num_fields = ARRAY_SIZE(_bscan_tunnel_nested_tap_select_dmi)
 
static bscan_tunnel_type_t bscan_tunnel_type
 
static const uint8_t bscan_zero [4] = {0}
 
static uint8_t ir_dbus [4] = {DBUS}
 
static uint8_t ir_dtmcontrol [4] = {DTMCONTROL}
 
static uint8_t ir_idcode [4] = {0x1}
 
static uint8_t ir_user4 [4]
 
static const riscv_reg_t mstatus_ie_mask = MSTATUS_MIE | MSTATUS_HIE | MSTATUS_SIE | MSTATUS_UIE
 
static struct jim_nvp nvp_config_opts []
 
static struct jim_nvp nvp_ebreak_config_opts []
 
static struct jim_nvp nvp_ebreak_mode_opts []
 
static enum { ... }  resume_order
 
static const struct command_registration riscv_command_handlers []
 
static int riscv_command_timeout_sec_value = DEFAULT_COMMAND_TIMEOUT_SEC
 
static const struct command_registration riscv_exec_command_handlers []
 
static int riscv_reset_timeout_sec = DEFAULT_COMMAND_TIMEOUT_SEC
 
struct target_type riscv_target
 
struct scan_field select_dbus
 
struct scan_field select_dtmcontrol
 
struct scan_field select_idcode
 
static struct scan_field select_user4
 
static const virt2phys_info_t sv32
 
static const virt2phys_info_t sv32x4
 
static const virt2phys_info_t sv39
 
static const virt2phys_info_t sv39x4
 
static const virt2phys_info_t sv48
 
static const virt2phys_info_t sv48x4
 
static const virt2phys_info_t sv57
 
static const virt2phys_info_t sv57x4
 

Macro Definition Documentation

◆ BSCAN_TUNNEL_IR_WIDTH_NBITS

#define BSCAN_TUNNEL_IR_WIDTH_NBITS   7

Definition at line 59 of file riscv.c.

◆ DBUS

#define DBUS   0x11

Definition at line 36 of file riscv.c.

◆ DTMCONTROL

#define DTMCONTROL   0x10

Definition at line 33 of file riscv.c.

◆ DTMCONTROL_VERSION

#define DTMCONTROL_VERSION   (0xf)

Definition at line 34 of file riscv.c.

◆ RISCV_EBREAK_MODE_INVALID

#define RISCV_EBREAK_MODE_INVALID   -1

Definition at line 520 of file riscv.c.

◆ RISCV_HALT_GROUP_REPOLL_LIMIT

#define RISCV_HALT_GROUP_REPOLL_LIMIT   5

Definition at line 40 of file riscv.c.

◆ RISCV_TRIGGER_HIT_NOT_FOUND

#define RISCV_TRIGGER_HIT_NOT_FOUND   ((int64_t)-1)

Definition at line 38 of file riscv.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
RO_NORMAL 
RO_REVERSED 

Definition at line 184 of file riscv.c.

◆ mctrl6hitstatus

Enumerator
M6_HIT_ERROR 
M6_HIT_NOT_SUPPORTED 
M6_NOT_HIT 
M6_HIT_BEFORE 
M6_HIT_AFTER 
M6_HIT_IMM_AFTER 

Definition at line 1771 of file riscv.c.

◆ riscv_cfg_opts

Enumerator
RISCV_CFG_EBREAK 
RISCV_CFG_INVALID 

Definition at line 614 of file riscv.c.

◆ riscv_next_action

Enumerator
RPH_NONE 
RPH_RESUME 
RPH_REMAIN_HALTED 

Definition at line 3832 of file riscv.c.

Function Documentation

◆ add_trigger()

◆ alloc_default_riscv_private_config()

static struct riscv_private_config* alloc_default_riscv_private_config ( void  )
static

Definition at line 478 of file riscv.c.

References ARRAY_SIZE, config, LOG_ERROR, and NULL.

Referenced by riscv_jim_configure().

◆ can_use_napot_match()

static bool can_use_napot_match ( struct trigger trigger)
static

Definition at line 775 of file riscv.c.

References addr, trigger::address, trigger::length, and size.

Referenced by maybe_add_trigger_t2_t6_for_wp().

◆ check_if_trigger_exists()

static int check_if_trigger_exists ( struct target target,
unsigned int  index 
)
static

◆ check_mcontrol6_hit_status()

static enum mctrl6hitstatus check_mcontrol6_hit_status ( struct target target,
riscv_reg_t  tdata1,
uint64_t  hit_mask 
)
static

◆ check_virt_memory_access()

static int check_virt_memory_access ( struct target target,
target_addr_t  address,
uint32_t  size,
uint32_t  count,
bool  is_write 
)
static

Definition at line 3357 of file riscv.c.

References address, count, ERROR_FAIL, ERROR_OK, LOG_TARGET_ERROR, RISCV_PGBASE, size, and TARGET_PRIxADDR.

Referenced by riscv_rw_memory().

◆ COMMAND_HANDLER() [1/33]

◆ COMMAND_HANDLER() [2/33]

COMMAND_HANDLER ( handle_info  )

◆ COMMAND_HANDLER() [3/33]

◆ COMMAND_HANDLER() [4/33]

◆ COMMAND_HANDLER() [5/33]

◆ COMMAND_HANDLER() [6/33]

COMMAND_HANDLER ( handle_riscv_dm_read  )

◆ COMMAND_HANDLER() [7/33]

COMMAND_HANDLER ( handle_riscv_dm_write  )

◆ COMMAND_HANDLER() [8/33]

COMMAND_HANDLER ( handle_riscv_dmi_read  )

◆ COMMAND_HANDLER() [9/33]

COMMAND_HANDLER ( handle_riscv_dmi_write  )

◆ COMMAND_HANDLER() [10/33]

◆ COMMAND_HANDLER() [11/33]

◆ COMMAND_HANDLER() [12/33]

COMMAND_HANDLER ( riscv_authdata_write  )

◆ COMMAND_HANDLER() [13/33]

◆ COMMAND_HANDLER() [14/33]

◆ COMMAND_HANDLER() [15/33]

COMMAND_HANDLER ( riscv_hide_csrs  )

◆ COMMAND_HANDLER() [16/33]

◆ COMMAND_HANDLER() [17/33]

◆ COMMAND_HANDLER() [18/33]

COMMAND_HANDLER ( riscv_reset_delays  )

◆ COMMAND_HANDLER() [19/33]

COMMAND_HANDLER ( riscv_resume_order  )

◆ COMMAND_HANDLER() [20/33]

COMMAND_HANDLER ( riscv_set_autofence  )

◆ COMMAND_HANDLER() [21/33]

COMMAND_HANDLER ( riscv_set_bscan_tunnel_ir  )

◆ COMMAND_HANDLER() [22/33]

COMMAND_HANDLER ( riscv_set_command_timeout_sec  )

◆ COMMAND_HANDLER() [23/33]

COMMAND_HANDLER ( riscv_set_ebreakm  )

Definition at line 4971 of file riscv.c.

References CALL_COMMAND_HANDLER, and RISCV_MODE_M.

◆ COMMAND_HANDLER() [24/33]

COMMAND_HANDLER ( riscv_set_ebreaks  )

Definition at line 4977 of file riscv.c.

References CALL_COMMAND_HANDLER, and RISCV_MODE_S.

◆ COMMAND_HANDLER() [25/33]

COMMAND_HANDLER ( riscv_set_ebreaku  )

Definition at line 4983 of file riscv.c.

References CALL_COMMAND_HANDLER, and RISCV_MODE_U.

◆ COMMAND_HANDLER() [26/33]

COMMAND_HANDLER ( riscv_set_enable_trigger_feature  )

◆ COMMAND_HANDLER() [27/33]

COMMAND_HANDLER ( riscv_set_expose_csrs  )

◆ COMMAND_HANDLER() [28/33]

COMMAND_HANDLER ( riscv_set_expose_custom  )

◆ COMMAND_HANDLER() [29/33]

COMMAND_HANDLER ( riscv_set_ir  )

◆ COMMAND_HANDLER() [30/33]

◆ COMMAND_HANDLER() [31/33]

◆ COMMAND_HANDLER() [32/33]

COMMAND_HANDLER ( riscv_set_reset_timeout_sec  )

◆ COMMAND_HANDLER() [33/33]

◆ COMMAND_HELPER() [1/5]

◆ COMMAND_HELPER() [2/5]

static COMMAND_HELPER ( report_reserved_triggers  ,
struct target target 
)
static

◆ COMMAND_HELPER() [3/5]

COMMAND_HELPER ( riscv_clear_trigger  ,
int  trigger_id,
const char *  name 
)

◆ COMMAND_HELPER() [4/5]

COMMAND_HELPER ( riscv_print_info_line  ,
const char *  section,
const char *  key,
unsigned int  value 
)

Definition at line 5378 of file riscv.c.

References CALL_COMMAND_HANDLER.

◆ COMMAND_HELPER() [5/5]

static COMMAND_HELPER ( riscv_print_info_line_if_available  ,
const char *  section,
const char *  key,
unsigned int  value,
bool  is_available 
)
static

Definition at line 5366 of file riscv.c.

References CMD, and command_print().

◆ count_trailing_ones()

static unsigned int count_trailing_ones ( riscv_reg_t  reg)
static

Definition at line 831 of file riscv.c.

Referenced by set_trigger().

◆ create_wp_trigger_cache()

static void create_wp_trigger_cache ( struct target target)
static

Definition at line 1020 of file riscv.c.

References INIT_LIST_HEAD(), and RISCV_INFO.

Referenced by riscv_enumerate_triggers().

◆ derive_debug_reason_without_hitbit()

static enum target_debug_reason derive_debug_reason_without_hitbit ( const struct target target,
riscv_reg_t  dpc 
)
static

Definition at line 2520 of file riscv.c.

References oldriscv_poll(), RISCV_INFO, and riscv_openocd_poll().

Referenced by set_debug_reason().

◆ disable_trigger_if_dmode()

◆ disable_watchpoints()

static int disable_watchpoints ( struct target target,
bool *  wp_is_set 
)
static

◆ dtmcs_scan()

◆ dtmcs_scan_via_bscan()

◆ ebreak_config_to_tcl_dict()

static int ebreak_config_to_tcl_dict ( const struct riscv_private_config config,
char *  buffer 
)
static

Obtain dcsr.ebreak* configuration as a Tcl dictionary.

Print the resulting string to the "buffer" and return the string length. The "buffer" can be NULL, in which case only the length is computed but nothing is written.

Definition at line 577 of file riscv.c.

References buffer, config, jim_nvp_value2name_simple(), mode, N_RISCV_MODE, jim_nvp::name, NULL, nvp_ebreak_config_opts, and nvp_ebreak_mode_opts.

Referenced by jim_report_ebreak_config().

◆ enable_watchpoints()

static int enable_watchpoints ( struct target target,
bool *  wp_is_set 
)
static

◆ fill_match_triggers_tdata1_fields_t2()

◆ fill_match_triggers_tdata1_fields_t6()

static struct match_triggers_tdata1_fields fill_match_triggers_tdata1_fields_t6 ( struct target target,
struct trigger trigger 
)
static

Definition at line 1104 of file riscv.c.

Referenced by add_trigger().

◆ find_first_trigger_by_id()

static int find_first_trigger_by_id ( struct target target,
int  unique_id 
)
static

Definition at line 820 of file riscv.c.

References RISCV_INFO.

Referenced by COMMAND_HANDLER(), COMMAND_HELPER(), riscv_add_breakpoint(), and riscv_add_watchpoint().

◆ find_next_free_trigger()

static int find_next_free_trigger ( struct target target,
int  type,
bool  chained,
unsigned int *  idx 
)
static

◆ free_wp_triggers_cache()

static void free_wp_triggers_cache ( struct target target)
static

◆ get_loadstore_membase_regno()

◆ get_loadstore_memoffset()

◆ get_offset_cld()

static uint16_t get_offset_cld ( riscv_insn_t  instruction)
static

Definition at line 1974 of file riscv.c.

References get_field32(), INSN_FIELD_C_UIMM8HI, and INSN_FIELD_C_UIMM8LO.

Referenced by get_loadstore_memoffset().

◆ get_offset_cldsp()

static uint16_t get_offset_cldsp ( riscv_insn_t  instruction)
static

Definition at line 1932 of file riscv.c.

References get_field32(), INSN_FIELD_C_UIMM9SPHI, and INSN_FIELD_C_UIMM9SPLO.

Referenced by get_loadstore_memoffset().

◆ get_offset_clq()

static uint16_t get_offset_clq ( riscv_insn_t  instruction)
static

Definition at line 1982 of file riscv.c.

References get_field32(), INSN_FIELD_C_UIMM9HI, and INSN_FIELD_C_UIMM9LO.

Referenced by get_loadstore_memoffset().

◆ get_offset_clqsp()

static uint16_t get_offset_clqsp ( riscv_insn_t  instruction)
static

Definition at line 1994 of file riscv.c.

References get_field32(), INSN_FIELD_C_UIMM10SPHI, and INSN_FIELD_C_UIMM10SPLO.

Referenced by get_loadstore_memoffset().

◆ get_offset_clw()

static uint16_t get_offset_clw ( riscv_insn_t  instruction)
static

Definition at line 1964 of file riscv.c.

References get_field32(), INSN_FIELD_C_UIMM7HI, and INSN_FIELD_C_UIMM7LO.

Referenced by get_loadstore_memoffset().

◆ get_offset_clwsp()

static uint16_t get_offset_clwsp ( riscv_insn_t  instruction)
static

These functions are needed to extract individual bits (for offset) from the instruction.

Definition at line 1920 of file riscv.c.

References get_field32(), INSN_FIELD_C_UIMM8SPHI, and INSN_FIELD_C_UIMM8SPLO.

Referenced by get_loadstore_memoffset().

◆ get_offset_csdsp()

static uint16_t get_offset_csdsp ( riscv_insn_t  instruction)
static

Definition at line 1954 of file riscv.c.

References get_field32(), and INSN_FIELD_C_UIMM9SP_S.

Referenced by get_loadstore_memoffset().

◆ get_offset_csqsp()

static uint16_t get_offset_csqsp ( riscv_insn_t  instruction)
static

Definition at line 2005 of file riscv.c.

References get_field32(), and INSN_FIELD_C_UIMM10SP_S.

Referenced by get_loadstore_memoffset().

◆ get_offset_cswsp()

static uint16_t get_offset_cswsp ( riscv_insn_t  instruction)
static

Definition at line 1944 of file riscv.c.

References get_field32(), and INSN_FIELD_C_UIMM8SP_S.

Referenced by get_loadstore_memoffset().

◆ get_opcode()

static uint32_t get_opcode ( const riscv_insn_t  instruction)
static

Definition at line 2025 of file riscv.c.

References INSN_FIELD_OPCODE, and MASK_C_LD.

Referenced by get_loadstore_membase_regno(), get_loadstore_memoffset(), and verify_loadstore().

◆ get_rs1_c()

static uint32_t get_rs1_c ( riscv_insn_t  instruction)
static

Decode rs1' register num for RVC.

See "Table: Registers specified by the three-bit rs1′, rs2′, and rd′ fields of the CIW, CL, CS, CA, and CB formats" in "The RISC-V Instruction Set Manual Volume I: Unprivileged ISA".

Definition at line 2020 of file riscv.c.

References GDB_REGNO_S0, get_field32(), and INSN_FIELD_C_SREG1.

Referenced by get_loadstore_membase_regno().

◆ get_target_type()

◆ get_trigger_types()

static int get_trigger_types ( struct target target,
unsigned int *  trigger_tinfo,
riscv_reg_t  tdata1 
)
static

This function reads tinfo or tdata1, when reading tinfo fails, to determine trigger types supported by a trigger.

It is assumed that the trigger is already selected via writing tselect.

Definition at line 6158 of file riscv.c.

References CSR_TDATA1_TYPE, ERROR_OK, ERROR_TARGET_RESOURCE_NOT_AVAILABLE, GDB_REGNO_TINFO, get_field(), riscv_reg_get(), riscv_xlen(), and type.

Referenced by riscv_enumerate_triggers().

◆ halt_finish()

static int halt_finish ( struct target target)
static

Definition at line 2703 of file riscv.c.

References target_call_event_callbacks(), and TARGET_EVENT_HALTED.

Referenced by riscv_halt().

◆ halt_go()

static int halt_go ( struct target target)
static

◆ halt_prep()

static int halt_prep ( struct target target)
static

◆ jim_configure_ebreak()

◆ jim_report_ebreak_config()

static int jim_report_ebreak_config ( const struct riscv_private_config config,
Jim_Interp *  interp 
)
static

Definition at line 599 of file riscv.c.

References config, ebreak_config_to_tcl_dict(), LOG_ERROR, and NULL.

Referenced by riscv_jim_configure().

◆ log_trigger_request_info()

static void log_trigger_request_info ( struct trigger_request_info  trig_info)
static

◆ maybe_add_trigger_t1()

◆ maybe_add_trigger_t2_t6()

static int maybe_add_trigger_t2_t6 ( struct target target,
struct trigger trigger,
struct match_triggers_tdata1_fields  fields 
)
static

◆ maybe_add_trigger_t2_t6_for_bp()

◆ maybe_add_trigger_t2_t6_for_wp()

◆ maybe_add_trigger_t3()

static int maybe_add_trigger_t3 ( struct target target,
bool  vs,
bool  vu,
bool  m,
bool  s,
bool  u,
bool  pending,
unsigned int  count,
int  unique_id 
)
static

◆ maybe_add_trigger_t4()

static int maybe_add_trigger_t4 ( struct target target,
bool  vs,
bool  vu,
bool  nmi,
bool  m,
bool  s,
bool  u,
riscv_reg_t  interrupts,
int  unique_id 
)
static

◆ maybe_add_trigger_t5()

static int maybe_add_trigger_t5 ( struct target target,
bool  vs,
bool  vu,
bool  m,
bool  s,
bool  u,
riscv_reg_t  exception_codes,
int  unique_id 
)
static

◆ old_or_new_riscv_poll()

static int old_or_new_riscv_poll ( struct target target)
static

Definition at line 2520 of file riscv.c.

Referenced by riscv_run_algorithm().

◆ old_or_new_riscv_step()

static int old_or_new_riscv_step ( struct target target,
bool  current,
target_addr_t  address,
bool  handle_breakpoints 
)
static

Definition at line 2465 of file riscv.c.

References address, and old_or_new_riscv_step_impl().

◆ old_or_new_riscv_step_impl()

static int old_or_new_riscv_step_impl ( struct target target,
bool  current,
target_addr_t  address,
bool  handle_breakpoints,
int  handle_callbacks 
)
static

◆ oldriscv_poll()

static int oldriscv_poll ( struct target target)
static

Definition at line 2512 of file riscv.c.

References ERROR_FAIL, get_target_type(), and target_type::poll.

Referenced by derive_debug_reason_without_hitbit().

◆ oldriscv_step()

static int oldriscv_step ( struct target target,
bool  current,
uint32_t  address,
bool  handle_breakpoints 
)
static

Definition at line 2440 of file riscv.c.

References address, ERROR_FAIL, get_target_type(), and target_type::step.

Referenced by old_or_new_riscv_step_impl().

◆ parse_csr_address()

static bool parse_csr_address ( const char *  reg_address_str,
unsigned int *  reg_addr 
)
static

Definition at line 4379 of file riscv.c.

Referenced by parse_reg_ranges_impl().

◆ parse_reg_ranges()

static int parse_reg_ranges ( struct list_head ranges,
const char *  tcl_arg,
const char *  reg_type,
unsigned int  max_val 
)
static

Definition at line 4522 of file riscv.c.

References ERROR_FAIL, LOG_ERROR, NULL, and parse_reg_ranges_impl().

Referenced by COMMAND_HANDLER().

◆ parse_reg_ranges_impl()

static int parse_reg_ranges_impl ( struct list_head ranges,
char *  args,
const char *  reg_type,
unsigned int  max_val,
char **const  name_buffer 
)
static

◆ read_by_given_size()

static int read_by_given_size ( struct target target,
target_addr_t  address,
uint32_t  size,
uint8_t *  buffer,
uint32_t  access_size 
)
static

Read one memory item of given "size".

Use memory access of given "access_size". Read larger section of memory and pick out the required portion, if needed.

Definition at line 1520 of file riscv.c.

References address, buffer, ERROR_FAIL, ERROR_OK, size, and target_read_memory().

Referenced by riscv_read_by_any_size().

◆ remove_trigger()

◆ resume_finish()

◆ resume_go()

static int resume_go ( struct target target,
bool  current,
target_addr_t  address,
bool  handle_breakpoints,
bool  debug_execution 
)
static

Resume all the harts that have been prepped, as close to instantaneous as possible.

Definition at line 2872 of file riscv.c.

References address, ERROR_FAIL, get_target_type(), target_type::resume, RISCV_INFO, riscv_resume_go_all_harts(), target::state, and TARGET_HALTED.

Referenced by riscv_resume().

◆ resume_prep()

static int resume_prep ( struct target target,
bool  current,
target_addr_t  address,
bool  handle_breakpoints,
bool  debug_execution 
)
static

◆ riscv_add_breakpoint()

◆ riscv_add_bscan_tunneled_scan()

◆ riscv_add_watchpoint()

◆ riscv_address_translate()

static int riscv_address_translate ( struct target target,
const virt2phys_info_t info,
target_addr_t  ppn,
const virt2phys_info_t extra_info,
target_addr_t  extra_ppn,
target_addr_t  virtual,
target_addr_t physical 
)
static

◆ riscv_arch_state()

static int riscv_arch_state ( struct target target)
static

◆ riscv_assert_reset()

static int riscv_assert_reset ( struct target target)
static

◆ riscv_checksum_memory()

◆ riscv_create_target()

static int riscv_create_target ( struct target target)
static

Definition at line 492 of file riscv.c.

◆ riscv_data_bits()

static unsigned int riscv_data_bits ( struct target target)
static

Definition at line 5884 of file riscv.c.

References RISCV_INFO, and riscv_xlen().

◆ riscv_deassert_reset()

static int riscv_deassert_reset ( struct target target)
static

Definition at line 2771 of file riscv.c.

References target_type::deassert_reset, ERROR_FAIL, get_target_type(), and LOG_TARGET_DEBUG.

◆ riscv_deinit_target()

◆ riscv_dmi_read()

static int riscv_dmi_read ( struct target target,
uint32_t *  value,
uint32_t  address 
)
static

Definition at line 4658 of file riscv.c.

References address, ERROR_FAIL, LOG_ERROR, LOG_TARGET_ERROR, and RISCV_INFO.

Referenced by COMMAND_HANDLER().

◆ riscv_dmi_write()

static int riscv_dmi_write ( struct target target,
uint32_t  dmi_address,
uint32_t  value 
)
static

◆ riscv_effective_privilege_mode()

static int riscv_effective_privilege_mode ( struct target target,
int *  v_mode,
int *  effective_mode 
)
static

◆ riscv_enumerate_triggers()

int riscv_enumerate_triggers ( struct target target)

Count triggers, and initialize trigger_count for each hart.

trigger_count is initialized even if this function fails to discover something. Disable any hardware triggers that have dmode set. We can't have set them ourselves. Maybe they're left over from some killed debug session.

Definition at line 6216 of file riscv.c.

References ARRAY_SIZE, check_if_trigger_exists(), create_wp_trigger_cache(), CSR_TINFO_VERSION, disable_trigger_if_dmode(), ERROR_FAIL, ERROR_OK, ERROR_TARGET_NOT_HALTED, ERROR_TARGET_RESOURCE_NOT_AVAILABLE, GDB_REGNO_TDATA1, GDB_REGNO_TINFO, GDB_REGNO_TSELECT, get_field(), get_trigger_types(), LOG_TARGET_DEBUG, LOG_TARGET_ERROR, LOG_TARGET_INFO, NULL, RISCV_INFO, riscv_reg_get(), riscv_reg_set(), RISCV_TINFO_VERSION_UNKNOWN, target::state, and TARGET_HALTED.

Referenced by add_trigger(), COMMAND_HANDLER(), COMMAND_HELPER(), handle_halt(), remove_trigger(), and riscv_openocd_step_impl().

◆ riscv_examine()

◆ riscv_execute_progbuf()

int riscv_execute_progbuf ( struct target target,
uint32_t *  cmderr 
)

Definition at line 6107 of file riscv.c.

References RISCV_INFO.

Referenced by riscv_program_exec().

◆ riscv_fill_dm_nop()

void riscv_fill_dm_nop ( const struct target target,
uint8_t *  buf 
)

Definition at line 6125 of file riscv.c.

References RISCV_INFO.

Referenced by riscv_batch_add_dmi_read(), riscv_batch_add_dmi_write(), and riscv_batch_add_nop().

◆ riscv_fill_dmi_read()

void riscv_fill_dmi_read ( const struct target target,
uint8_t *  buf,
uint32_t  a 
)

Definition at line 6119 of file riscv.c.

References RISCV_INFO.

Referenced by riscv_batch_add_dmi_read().

◆ riscv_fill_dmi_write()

void riscv_fill_dmi_write ( const struct target target,
uint8_t *  buf,
uint32_t  a,
uint32_t  d 
)

Definition at line 6113 of file riscv.c.

References RISCV_INFO.

Referenced by riscv_batch_add_dmi_write().

◆ riscv_get_command_timeout_sec()

◆ riscv_get_dmi_address()

uint32_t riscv_get_dmi_address ( const struct target target,
uint32_t  dm_address 
)

◆ riscv_get_dmi_address_bits()

unsigned int riscv_get_dmi_address_bits ( const struct target target)

Definition at line 6131 of file riscv.c.

References RISCV_INFO.

Referenced by get_dmi_scan_length(), and log_batch().

◆ riscv_get_gdb_arch()

static const char* riscv_get_gdb_arch ( const struct target target)
static

Definition at line 3489 of file riscv.c.

References LOG_TARGET_ERROR, NULL, and riscv_xlen().

◆ riscv_get_gdb_reg_list()

static int riscv_get_gdb_reg_list ( struct target target,
struct reg **  reg_list[],
int *  reg_list_size,
enum target_register_class  reg_class 
)
static

Definition at line 3551 of file riscv.c.

References riscv_get_gdb_reg_list_internal().

◆ riscv_get_gdb_reg_list_internal()

static int riscv_get_gdb_reg_list_internal ( struct target target,
struct reg **  reg_list[],
int *  reg_list_size,
enum target_register_class  reg_class,
bool  is_read 
)
static

◆ riscv_get_gdb_reg_list_noread()

static int riscv_get_gdb_reg_list_noread ( struct target target,
struct reg **  reg_list[],
int *  reg_list_size,
enum target_register_class  reg_class 
)
static

Definition at line 3543 of file riscv.c.

References riscv_get_gdb_reg_list_internal().

◆ riscv_get_hart_state()

int riscv_get_hart_state ( struct target target,
enum riscv_hart_state state 
)

Definition at line 6072 of file riscv.c.

References RISCV_INFO, and state.

Referenced by examine(), riscv_halt_go_all_harts(), and riscv_poll_hart().

◆ riscv_halt()

◆ riscv_halt_go_all_harts()

◆ riscv_halt_reason()

static enum riscv_halt_reason riscv_halt_reason ( struct target target)
static

Definition at line 6072 of file riscv.c.

Referenced by riscv_halt_go_all_harts(), and riscv_poll_hart().

◆ riscv_hit_watchpoint()

◆ riscv_info_init()

◆ riscv_init_target()

◆ riscv_interrupts_disable()

static int riscv_interrupts_disable ( struct target target,
riscv_reg_t old_mstatus 
)
static

◆ riscv_interrupts_restore()

static int riscv_interrupts_restore ( struct target target,
riscv_reg_t  old_mstatus 
)
static

◆ riscv_jim_configure()

◆ riscv_mmu()

◆ riscv_openocd_poll()

◆ riscv_openocd_step()

int riscv_openocd_step ( struct target target,
bool  current,
target_addr_t  address,
bool  handle_breakpoints 
)

Definition at line 4287 of file riscv.c.

References address, and riscv_openocd_step_impl().

◆ riscv_openocd_step_impl()

◆ riscv_poll_hart()

◆ riscv_progbuf_size()

unsigned int riscv_progbuf_size ( struct target target)

Definition at line 6089 of file riscv.c.

References RISCV_INFO.

Referenced by COMMAND_HANDLER(), riscv_program_ebreak(), riscv_program_exec(), and riscv_program_insert().

◆ riscv_read_by_any_size()

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.

Read larger section of memory and pick out the required portion, if needed.

Definition at line 1579 of file riscv.c.

References address, buffer, ERROR_FAIL, ERROR_OK, read_by_given_size(), and size.

Referenced by riscv_add_breakpoint(), and riscv_semihosting_detect_magic_sequence().

◆ riscv_read_memory()

static int riscv_read_memory ( struct target target,
target_addr_t  address,
uint32_t  size,
uint32_t  count,
uint8_t *  buffer 
)
static

Definition at line 3461 of file riscv.c.

References address, riscv_mem_access_args::address, buffer, count, riscv_rw_memory(), and size.

◆ riscv_read_phys_memory()

static int riscv_read_phys_memory ( struct target target,
target_addr_t  phys_address,
uint32_t  size,
uint32_t  count,
uint8_t *  buffer 
)
static

Definition at line 3372 of file riscv.c.

References riscv_mem_access_args::address, buffer, count, RISCV_INFO, and size.

Referenced by sample_memory().

◆ riscv_read_progbuf()

riscv_insn_t riscv_read_progbuf ( struct target target,
int  index 
)

Definition at line 6101 of file riscv.c.

References RISCV_INFO.

◆ riscv_remove_breakpoint()

◆ riscv_remove_watchpoint()

int riscv_remove_watchpoint ( struct target target,
struct watchpoint watchpoint 
)

Definition at line 1755 of file riscv.c.

Referenced by disable_watchpoints(), and strict_step().

◆ riscv_resume()

static int riscv_resume ( struct target target,
bool  current,
target_addr_t  address,
bool  handle_breakpoints,
bool  debug_execution,
bool  single_hart 
)
static

◆ riscv_resume_go_all_harts()

static int riscv_resume_go_all_harts ( struct target target)
static

Definition at line 5983 of file riscv.c.

References ERROR_FAIL, ERROR_OK, LOG_TARGET_DEBUG, RISCV_INFO, target::state, and TARGET_HALTED.

Referenced by resume_go().

◆ riscv_run_algorithm()

static int riscv_run_algorithm ( struct target target,
int  num_mem_params,
struct mem_param mem_params,
int  num_reg_params,
struct reg_param reg_params,
target_addr_t  entry_point,
target_addr_t  exit_point,
unsigned int  timeout_ms,
void *  arch_info 
)
static

◆ riscv_rw_memory()

◆ riscv_sample_buf_maybe_add_timestamp()

static void riscv_sample_buf_maybe_add_timestamp ( struct target target,
bool  before 
)
static

◆ riscv_step_rtos_hart()

static int riscv_step_rtos_hart ( struct target target)
static

◆ riscv_supports_extension()

bool riscv_supports_extension ( const struct target target,
char  letter 
)

◆ riscv_target_resume()

static int riscv_target_resume ( struct target target,
bool  current,
target_addr_t  address,
bool  handle_breakpoints,
bool  debug_execution 
)
static

◆ riscv_trigger_detect_hit_bits()

static int riscv_trigger_detect_hit_bits ( struct target target,
int64_t *  unique_id,
bool *  need_single_step 
)
static

◆ riscv_virt2phys()

◆ riscv_virt2phys_mode_is_hw()

bool riscv_virt2phys_mode_is_hw ( const struct target target)

◆ riscv_virt2phys_mode_is_sw()

bool riscv_virt2phys_mode_is_sw ( const struct target target)

Definition at line 151 of file riscv.c.

References RISCV_INFO, and RISCV_VIRT2PHYS_MODE_SW.

Referenced by riscv_mmu().

◆ riscv_virt2phys_mode_to_str()

const char* riscv_virt2phys_mode_to_str ( enum riscv_virt2phys_mode  mode)

Definition at line 158 of file riscv.c.

References mode, RISCV_VIRT2PHYS_MODE_HW, RISCV_VIRT2PHYS_MODE_OFF, and RISCV_VIRT2PHYS_MODE_SW.

Referenced by COMMAND_HANDLER().

◆ riscv_virt2phys_v()

◆ riscv_vlenb()

unsigned int riscv_vlenb ( const struct target target)

Definition at line 6066 of file riscv.c.

References RISCV_INFO.

Referenced by gdb_regno_size(), riscv_reg_impl_init_vector_reg_type(), and vlenb_exists().

◆ riscv_write_by_any_size()

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.

Utilize read-modify-write, if needed.

Definition at line 1547 of file riscv.c.

References address, buffer, ERROR_FAIL, ERROR_OK, size, and write_by_given_size().

Referenced by riscv_add_breakpoint(), and riscv_remove_breakpoint().

◆ riscv_write_memory()

static int riscv_write_memory ( struct target target,
target_addr_t  address,
uint32_t  size,
uint32_t  count,
const uint8_t *  buffer 
)
static

Definition at line 3475 of file riscv.c.

References address, riscv_mem_access_args::address, buffer, count, riscv_rw_memory(), and size.

◆ riscv_write_phys_memory()

static int riscv_write_phys_memory ( struct target target,
target_addr_t  phys_address,
uint32_t  size,
uint32_t  count,
const uint8_t *  buffer 
)
static

Definition at line 3386 of file riscv.c.

References riscv_mem_access_args::address, buffer, count, RISCV_INFO, and size.

◆ riscv_write_progbuf()

int riscv_write_progbuf ( struct target target,
unsigned int  index,
riscv_insn_t  insn 
)

Definition at line 6095 of file riscv.c.

References RISCV_INFO.

Referenced by riscv_program_write().

◆ riscv_xlen()

◆ riscv_xlen_nonconst()

static unsigned int riscv_xlen_nonconst ( struct target target)
static

Definition at line 5879 of file riscv.c.

References riscv_xlen().

◆ sample_memory()

◆ select_dmi_via_bscan()

◆ set_debug_reason()

◆ set_trigger()

◆ tdata1_cache_alloc()

static struct tdata1_cache* tdata1_cache_alloc ( struct list_head tdata1_cache_head,
riscv_reg_t  tdata1 
)
static

◆ tdata1_cache_search()

struct tdata1_cache* tdata1_cache_search ( struct list_head tdata1_cache_head,
riscv_reg_t  find_tdata1 
)

◆ tdata2_cache_alloc()

static void tdata2_cache_alloc ( struct list_head tdata2_cache_head,
riscv_reg_t  tdata2 
)
static

Definition at line 993 of file riscv.c.

References tdata2_cache::elem_tdata2, list_add(), and tdata2_cache::tdata2.

Referenced by wp_triggers_cache_add().

◆ tdata2_cache_search()

struct tdata2_cache* tdata2_cache_search ( struct list_head tdata2_cache_head,
riscv_reg_t  find_tdata2 
)

◆ trigger_from_breakpoint()

static void trigger_from_breakpoint ( struct trigger trigger,
const struct breakpoint breakpoint 
)
static

◆ trigger_from_watchpoint()

◆ try_setup_chained_match_triggers()

static int try_setup_chained_match_triggers ( struct target target,
struct trigger trigger,
struct trigger_request_info  t1,
struct trigger_request_info  t2 
)
static

Definition at line 1104 of file riscv.c.

Referenced by maybe_add_trigger_t2_t6_for_wp().

◆ try_setup_single_match_trigger()

◆ try_use_trigger_and_cache_result()

static int try_use_trigger_and_cache_result ( struct target target,
unsigned int  idx,
riscv_reg_t  tdata1,
riscv_reg_t  tdata2 
)
static

◆ verify_loadstore()

◆ wp_triggers_cache_add()

static void wp_triggers_cache_add ( struct target target,
unsigned int  idx,
riscv_reg_t  tdata1,
riscv_reg_t  tdata2,
int  error_code 
)
static

◆ wp_triggers_cache_search()

static bool wp_triggers_cache_search ( struct target target,
unsigned int  idx,
riscv_reg_t  tdata1,
riscv_reg_t  tdata2 
)
static

◆ write_by_given_size()

static int write_by_given_size ( struct target target,
target_addr_t  address,
uint32_t  size,
uint8_t *  buffer,
uint32_t  access_size 
)
static

Write one memory item of given "size".

Use memory access of given "access_size". Utilize read-modify-write, if needed.

Definition at line 1493 of file riscv.c.

References address, buffer, ERROR_FAIL, ERROR_OK, size, target_read_memory(), and target_write_memory().

Referenced by riscv_write_by_any_size().

Variable Documentation

◆ _bscan_tunnel_data_register_select_dmi

struct scan_field _bscan_tunnel_data_register_select_dmi[]
static
Initial value:
= {
{
.num_bits = 3,
.out_value = bscan_zero,
.in_value = NULL,
},
{
.num_bits = 5,
.out_value = ir_dbus,
.in_value = NULL,
},
{
.out_value = &bscan_tunnel_ir_width,
.in_value = NULL,
},
{
.num_bits = 1,
.out_value = bscan_zero,
.in_value = NULL,
}
}
uint8_t bscan_tunnel_ir_width
Definition: riscv.c:60
static uint8_t ir_dbus[4]
Definition: riscv.c:47
#define BSCAN_TUNNEL_IR_WIDTH_NBITS
Definition: riscv.c:59
static const uint8_t bscan_zero[4]
Definition: riscv.c:63
#define NULL
Definition: usb.h:16

Definition at line 66 of file riscv.c.

◆ _bscan_tunnel_nested_tap_select_dmi

struct scan_field _bscan_tunnel_nested_tap_select_dmi[]
static
Initial value:
= {
{
.num_bits = 1,
.out_value = bscan_zero,
.in_value = NULL,
},
{
.out_value = &bscan_tunnel_ir_width,
.in_value = NULL,
},
{
.num_bits = 0,
.out_value = ir_dbus,
.in_value = NULL,
},
{
.num_bits = 3,
.out_value = bscan_zero,
.in_value = NULL,
}
}

Definition at line 66 of file riscv.c.

◆ bscan_one

const uint8_t bscan_one[4] = {1}
static

Definition at line 64 of file riscv.c.

Referenced by dtmcs_scan_via_bscan(), and riscv_add_bscan_tunneled_scan().

◆ bscan_tunnel_data_register_select_dmi

struct scan_field* bscan_tunnel_data_register_select_dmi = _bscan_tunnel_data_register_select_dmi
static

Definition at line 121 of file riscv.c.

Referenced by riscv_init_target(), and select_dmi_via_bscan().

◆ bscan_tunnel_data_register_select_dmi_num_fields

uint32_t bscan_tunnel_data_register_select_dmi_num_fields = ARRAY_SIZE(_bscan_tunnel_data_register_select_dmi)
static

Definition at line 122 of file riscv.c.

Referenced by select_dmi_via_bscan().

◆ bscan_tunnel_ir_id

int bscan_tunnel_ir_id
static

Definition at line 61 of file riscv.c.

Referenced by COMMAND_HANDLER(), and riscv_init_target().

◆ bscan_tunnel_ir_width

uint8_t bscan_tunnel_ir_width

◆ bscan_tunnel_nested_tap_select_dmi

struct scan_field* bscan_tunnel_nested_tap_select_dmi = _bscan_tunnel_nested_tap_select_dmi
static

Definition at line 118 of file riscv.c.

Referenced by riscv_init_target(), and select_dmi_via_bscan().

◆ bscan_tunnel_nested_tap_select_dmi_num_fields

uint32_t bscan_tunnel_nested_tap_select_dmi_num_fields = ARRAY_SIZE(_bscan_tunnel_nested_tap_select_dmi)
static

Definition at line 119 of file riscv.c.

Referenced by select_dmi_via_bscan().

◆ bscan_tunnel_type

◆ bscan_zero

const uint8_t bscan_zero[4] = {0}
static

Definition at line 63 of file riscv.c.

Referenced by dtmcs_scan_via_bscan(), and riscv_add_bscan_tunneled_scan().

◆ ir_dbus

uint8_t ir_dbus[4] = {DBUS}
static

Definition at line 47 of file riscv.c.

Referenced by COMMAND_HANDLER().

◆ ir_dtmcontrol

uint8_t ir_dtmcontrol[4] = {DTMCONTROL}
static

Definition at line 42 of file riscv.c.

Referenced by COMMAND_HANDLER(), and dtmcs_scan_via_bscan().

◆ ir_idcode

uint8_t ir_idcode[4] = {0x1}
static

Definition at line 52 of file riscv.c.

Referenced by COMMAND_HANDLER().

◆ ir_user4

uint8_t ir_user4[4]
static

Definition at line 66 of file riscv.c.

Referenced by riscv_init_target().

◆ mstatus_ie_mask

const riscv_reg_t mstatus_ie_mask = MSTATUS_MIE | MSTATUS_HIE | MSTATUS_SIE | MSTATUS_UIE
static

Definition at line 297 of file riscv.c.

Referenced by riscv_interrupts_disable(), and riscv_interrupts_restore().

◆ nvp_config_opts

struct jim_nvp nvp_config_opts[]
static
Initial value:
= {
{ .name = "-ebreak", .value = RISCV_CFG_EBREAK },
{ .name = NULL, .value = RISCV_CFG_INVALID }
}
@ RISCV_CFG_EBREAK
Definition: riscv.c:615
@ RISCV_CFG_INVALID
Definition: riscv.c:616

Definition at line 599 of file riscv.c.

Referenced by riscv_jim_configure().

◆ nvp_ebreak_config_opts

struct jim_nvp nvp_ebreak_config_opts[]
static
Initial value:
= {
{ .name = "m", .value = RISCV_MODE_M },
{ .name = "s", .value = RISCV_MODE_S },
{ .name = "u", .value = RISCV_MODE_U },
{ .name = "vs", .value = RISCV_MODE_VS },
{ .name = "vu", .value = RISCV_MODE_VU },
{ .name = NULL, .value = N_RISCV_MODE }
}
@ RISCV_MODE_M
Definition: riscv.h:371
@ RISCV_MODE_U
Definition: riscv.h:373
@ N_RISCV_MODE
Definition: riscv.h:376
@ RISCV_MODE_VU
Definition: riscv.h:375
@ RISCV_MODE_VS
Definition: riscv.h:374
@ RISCV_MODE_S
Definition: riscv.h:372

Definition at line 492 of file riscv.c.

Referenced by ebreak_config_to_tcl_dict(), and jim_configure_ebreak().

◆ nvp_ebreak_mode_opts

struct jim_nvp nvp_ebreak_mode_opts[]
static
Initial value:
= {
{ .name = "exception", .value = false },
{ .name = "halt", .value = true },
{ .name = NULL, .value = RISCV_EBREAK_MODE_INVALID }
}
#define RISCV_EBREAK_MODE_INVALID
Definition: riscv.c:520

Definition at line 492 of file riscv.c.

Referenced by ebreak_config_to_tcl_dict(), and jim_configure_ebreak().

◆ 

enum { ... } resume_order

Referenced by COMMAND_HANDLER(), and riscv_resume().

◆ riscv_command_handlers

const struct command_registration riscv_command_handlers[]
static
Initial value:
= {
{
.name = "riscv",
.mode = COMMAND_ANY,
.help = "RISC-V Command Group",
.usage = "",
},
{
.name = "arm",
.mode = COMMAND_ANY,
.help = "ARM Command Group",
.usage = "",
},
}
#define COMMAND_REGISTRATION_DONE
Use this as the last entry in an array of command_registration records.
Definition: command.h:251
@ COMMAND_ANY
Definition: command.h:42
static const struct command_registration riscv_exec_command_handlers[]
Definition: riscv.c:5579
const struct command_registration semihosting_common_handlers[]
const char * name
Definition: command.h:234

Definition at line 5549 of file riscv.c.

◆ riscv_command_timeout_sec_value

int riscv_command_timeout_sec_value = DEFAULT_COMMAND_TIMEOUT_SEC
static

Definition at line 174 of file riscv.c.

Referenced by COMMAND_HANDLER(), and riscv_get_command_timeout_sec().

◆ riscv_exec_command_handlers

const struct command_registration riscv_exec_command_handlers[]
static

Definition at line 5549 of file riscv.c.

◆ riscv_reset_timeout_sec

int riscv_reset_timeout_sec = DEFAULT_COMMAND_TIMEOUT_SEC
static

Definition at line 177 of file riscv.c.

Referenced by COMMAND_HANDLER(), and riscv_get_command_timeout_sec().

◆ riscv_target

struct target_type riscv_target

Definition at line 5884 of file riscv.c.

◆ select_dbus

struct scan_field select_dbus
Initial value:
= {
.in_value = NULL,
.out_value = ir_dbus
}

Definition at line 47 of file riscv.c.

Referenced by assert_reset(), deassert_reset(), dtmcs_scan(), halt(), idcode_scan(), poll_target(), read_memory(), riscv011_resume(), riscv_init_target(), select_dmi(), step(), and write_memory().

◆ select_dtmcontrol

struct scan_field select_dtmcontrol
Initial value:
= {
.in_value = NULL,
.out_value = ir_dtmcontrol
}
static uint8_t ir_dtmcontrol[4]
Definition: riscv.c:42

Definition at line 42 of file riscv.c.

Referenced by dtmcs_scan(), and riscv_init_target().

◆ select_idcode

struct scan_field select_idcode
Initial value:
= {
.in_value = NULL,
.out_value = ir_idcode
}
static uint8_t ir_idcode[4]
Definition: riscv.c:52

Definition at line 52 of file riscv.c.

Referenced by idcode_scan(), and riscv_init_target().

◆ select_user4

struct scan_field select_user4
static
Initial value:
= {
.in_value = NULL,
.out_value = ir_user4
}
static uint8_t ir_user4[4]
Definition: riscv.c:66

Definition at line 66 of file riscv.c.

Referenced by dtmcs_scan_via_bscan(), riscv_add_bscan_tunneled_scan(), riscv_init_target(), and select_dmi_via_bscan().

◆ sv32

const virt2phys_info_t sv32
static
Initial value:
= {
.name = "Sv32",
.va_bits = 32,
.level = 2,
.pte_shift = 2,
.vpn_shift = {12, 22},
.vpn_mask = {0x3ff, 0x3ff},
.pte_ppn_shift = {10, 20},
.pte_ppn_mask = {0x3ff, 0xfff},
.pa_ppn_shift = {12, 22},
.pa_ppn_mask = {0x3ff, 0xfff},
}

Definition at line 189 of file riscv.c.

Referenced by riscv_virt2phys(), and riscv_virt2phys_v().

◆ sv32x4

const virt2phys_info_t sv32x4
static
Initial value:
= {
.name = "Sv32x4",
.va_bits = 34,
.level = 2,
.pte_shift = 2,
.vpn_shift = {12, 22},
.vpn_mask = {0x3ff, 0xfff},
.pte_ppn_shift = {10, 20},
.pte_ppn_mask = {0x3ff, 0xfff},
.pa_ppn_shift = {12, 22},
.pa_ppn_mask = {0x3ff, 0xfff},
}

Definition at line 202 of file riscv.c.

Referenced by riscv_virt2phys_v().

◆ sv39

const virt2phys_info_t sv39
static
Initial value:
= {
.name = "Sv39",
.va_bits = 39,
.level = 3,
.pte_shift = 3,
.vpn_shift = {12, 21, 30},
.vpn_mask = {0x1ff, 0x1ff, 0x1ff},
.pte_ppn_shift = {10, 19, 28},
.pte_ppn_mask = {0x1ff, 0x1ff, 0x3ffffff},
.pa_ppn_shift = {12, 21, 30},
.pa_ppn_mask = {0x1ff, 0x1ff, 0x3ffffff},
}

Definition at line 215 of file riscv.c.

Referenced by riscv_virt2phys(), and riscv_virt2phys_v().

◆ sv39x4

const virt2phys_info_t sv39x4
static
Initial value:
= {
.name = "Sv39x4",
.va_bits = 41,
.level = 3,
.pte_shift = 3,
.vpn_shift = {12, 21, 30},
.vpn_mask = {0x1ff, 0x1ff, 0x7ff},
.pte_ppn_shift = {10, 19, 28},
.pte_ppn_mask = {0x1ff, 0x1ff, 0x3ffffff},
.pa_ppn_shift = {12, 21, 30},
.pa_ppn_mask = {0x1ff, 0x1ff, 0x3ffffff},
}

Definition at line 228 of file riscv.c.

Referenced by riscv_virt2phys_v().

◆ sv48

const virt2phys_info_t sv48
static
Initial value:
= {
.name = "Sv48",
.va_bits = 48,
.level = 4,
.pte_shift = 3,
.vpn_shift = {12, 21, 30, 39},
.vpn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ff},
.pte_ppn_shift = {10, 19, 28, 37},
.pte_ppn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ffff},
.pa_ppn_shift = {12, 21, 30, 39},
.pa_ppn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ffff},
}

Definition at line 241 of file riscv.c.

Referenced by riscv_virt2phys(), and riscv_virt2phys_v().

◆ sv48x4

const virt2phys_info_t sv48x4
static
Initial value:
= {
.name = "Sv48x4",
.va_bits = 50,
.level = 4,
.pte_shift = 3,
.vpn_shift = {12, 21, 30, 39},
.vpn_mask = {0x1ff, 0x1ff, 0x1ff, 0x7ff},
.pte_ppn_shift = {10, 19, 28, 37},
.pte_ppn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ffff},
.pa_ppn_shift = {12, 21, 30, 39},
.pa_ppn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ffff},
}

Definition at line 254 of file riscv.c.

Referenced by riscv_virt2phys_v().

◆ sv57

const virt2phys_info_t sv57
static
Initial value:
= {
.name = "Sv57",
.va_bits = 57,
.level = 5,
.pte_shift = 3,
.vpn_shift = {12, 21, 30, 39, 48},
.vpn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff},
.pte_ppn_shift = {10, 19, 28, 37, 46},
.pte_ppn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ff, 0xff},
.pa_ppn_shift = {12, 21, 30, 39, 48},
.pa_ppn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff},
}

Definition at line 267 of file riscv.c.

Referenced by riscv_virt2phys(), and riscv_virt2phys_v().

◆ sv57x4

const virt2phys_info_t sv57x4
static
Initial value:
= {
.name = "Sv57x4",
.va_bits = 59,
.level = 5,
.pte_shift = 3,
.vpn_shift = {12, 21, 30, 39, 48},
.vpn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x7ff},
.pte_ppn_shift = {10, 19, 28, 37, 46},
.pte_ppn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ff, 0xff},
.pa_ppn_shift = {12, 21, 30, 39, 48},
.pa_ppn_mask = {0x1ff, 0x1ff, 0x1ff, 0x1ff, 0xff},
}

Definition at line 280 of file riscv.c.

Referenced by riscv_virt2phys_v().