Change #ifdef SIM_ON to be a run-time arg
parent
de329f4004
commit
99f2f5a272
|
@ -2816,7 +2816,7 @@ void riscv013_fill_dmi_nop_u64(struct target *target, char *buf)
|
||||||
buf_set_u64((unsigned char *)buf, DTM_DMI_ADDRESS_OFFSET, info->abits, 0);
|
buf_set_u64((unsigned char *)buf, DTM_DMI_ADDRESS_OFFSET, info->abits, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_max_sbaccess(struct target *target)
|
static uint32_t get_max_sbaccess(struct target *target)
|
||||||
{
|
{
|
||||||
RISCV013_INFO(info);
|
RISCV013_INFO(info);
|
||||||
|
|
||||||
|
@ -2854,7 +2854,7 @@ static int riscv013_test_sba_config_reg(struct target *target,
|
||||||
|
|
||||||
int max_sbaccess = get_max_sbaccess(target);
|
int max_sbaccess = get_max_sbaccess(target);
|
||||||
|
|
||||||
if (max_sbaccess == ERROR_FAIL) {
|
if (max_sbaccess == -1) {
|
||||||
LOG_ERROR("System Bus Access not supported in this config.");
|
LOG_ERROR("System Bus Access not supported in this config.");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -2869,7 +2869,7 @@ static int riscv013_test_sba_config_reg(struct target *target,
|
||||||
sbcs = set_field(sbcs_orig, DMI_SBCS_SBAUTOINCREMENT, 0);
|
sbcs = set_field(sbcs_orig, DMI_SBCS_SBAUTOINCREMENT, 0);
|
||||||
dmi_write(target, DMI_SBCS, sbcs);
|
dmi_write(target, DMI_SBCS, sbcs);
|
||||||
|
|
||||||
for (int sbaccess = 0; sbaccess <= max_sbaccess; sbaccess++) {
|
for (uint32_t sbaccess = 0; sbaccess <= (uint32_t)max_sbaccess; sbaccess++) {
|
||||||
sbcs = set_field(sbcs, DMI_SBCS_SBACCESS, sbaccess);
|
sbcs = set_field(sbcs, DMI_SBCS_SBACCESS, sbaccess);
|
||||||
dmi_write(target, DMI_SBCS, sbcs);
|
dmi_write(target, DMI_SBCS, sbcs);
|
||||||
|
|
||||||
|
@ -2897,7 +2897,7 @@ static int riscv013_test_sba_config_reg(struct target *target,
|
||||||
sbcs = set_field(sbcs_orig, DMI_SBCS_SBAUTOINCREMENT, 1);
|
sbcs = set_field(sbcs_orig, DMI_SBCS_SBAUTOINCREMENT, 1);
|
||||||
dmi_write(target, DMI_SBCS, sbcs);
|
dmi_write(target, DMI_SBCS, sbcs);
|
||||||
|
|
||||||
for (int sbaccess = 0; sbaccess <= max_sbaccess; sbaccess++) {
|
for (uint32_t sbaccess = 0; sbaccess <= (uint32_t)max_sbaccess; sbaccess++) {
|
||||||
sbcs = set_field(sbcs, DMI_SBCS_SBACCESS, sbaccess);
|
sbcs = set_field(sbcs, DMI_SBCS_SBACCESS, sbaccess);
|
||||||
dmi_write(target, DMI_SBCS, sbcs);
|
dmi_write(target, DMI_SBCS, sbcs);
|
||||||
|
|
||||||
|
@ -2991,7 +2991,7 @@ static int riscv013_test_sba_config_reg(struct target *target,
|
||||||
|
|
||||||
/* Test 6: Set sbbusyerror, only run this case in simulation as it is likely
|
/* Test 6: Set sbbusyerror, only run this case in simulation as it is likely
|
||||||
* impossible to hit otherwise */
|
* impossible to hit otherwise */
|
||||||
#ifdef SIM_ON
|
if (run_sim_only_tests) {
|
||||||
sbcs = set_field(sbcs_orig, DMI_SBCS_SBREADONADDR, 1);
|
sbcs = set_field(sbcs_orig, DMI_SBCS_SBREADONADDR, 1);
|
||||||
dmi_write(target, DMI_SBCS, sbcs);
|
dmi_write(target, DMI_SBCS, sbcs);
|
||||||
|
|
||||||
|
@ -3041,7 +3041,7 @@ static int riscv013_test_sba_config_reg(struct target *target,
|
||||||
} else {
|
} else {
|
||||||
LOG_ERROR("System Bus Access Test 6: SBCS sbbusyerror test FAILED, unable to set");
|
LOG_ERROR("System Bus Access Test 6: SBCS sbbusyerror test FAILED, unable to set");
|
||||||
}
|
}
|
||||||
#endif
|
}
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
||||||
|
|
|
@ -190,6 +190,8 @@ uint64_t riscv_scratch_ram_address;
|
||||||
|
|
||||||
bool riscv_prefer_sba;
|
bool riscv_prefer_sba;
|
||||||
|
|
||||||
|
bool run_sim_only_tests;
|
||||||
|
|
||||||
/* In addition to the ones in the standard spec, we'll also expose additional
|
/* In addition to the ones in the standard spec, we'll also expose additional
|
||||||
* CSRs in this list.
|
* CSRs in this list.
|
||||||
* The list is either NULL, or a series of ranges (inclusive), terminated with
|
* The list is either NULL, or a series of ranges (inclusive), terminated with
|
||||||
|
@ -1430,8 +1432,8 @@ COMMAND_HANDLER(riscv_dmi_write)
|
||||||
|
|
||||||
COMMAND_HANDLER(riscv_test_sba_config_reg)
|
COMMAND_HANDLER(riscv_test_sba_config_reg)
|
||||||
{
|
{
|
||||||
if (CMD_ARGC != 2) {
|
if (CMD_ARGC != 3) {
|
||||||
LOG_ERROR("Command takes exactly 2 arguments");
|
LOG_ERROR("Command takes exactly 3 arguments");
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1442,6 +1444,7 @@ COMMAND_HANDLER(riscv_test_sba_config_reg)
|
||||||
target_addr_t illegal_address;
|
target_addr_t illegal_address;
|
||||||
COMMAND_PARSE_NUMBER(u64, CMD_ARGV[0], legal_address);
|
COMMAND_PARSE_NUMBER(u64, CMD_ARGV[0], legal_address);
|
||||||
COMMAND_PARSE_NUMBER(u64, CMD_ARGV[1], illegal_address);
|
COMMAND_PARSE_NUMBER(u64, CMD_ARGV[1], illegal_address);
|
||||||
|
COMMAND_PARSE_ON_OFF(CMD_ARGV[2], run_sim_only_tests);
|
||||||
|
|
||||||
if (r->test_sba_config_reg) {
|
if (r->test_sba_config_reg) {
|
||||||
return r->test_sba_config_reg(target, legal_address, illegal_address);
|
return r->test_sba_config_reg(target, legal_address, illegal_address);
|
||||||
|
@ -1522,10 +1525,12 @@ static const struct command_registration riscv_exec_command_handlers[] = {
|
||||||
.name = "test_sba_config_reg",
|
.name = "test_sba_config_reg",
|
||||||
.handler = riscv_test_sba_config_reg,
|
.handler = riscv_test_sba_config_reg,
|
||||||
.mode = COMMAND_ANY,
|
.mode = COMMAND_ANY,
|
||||||
.usage = "riscv test_sba_config_reg legal_address illegal_address",
|
.usage = "riscv test_sba_config_reg legal_address"
|
||||||
|
"illegal_address run_sim_only_tests[on/off]",
|
||||||
.help = "Perform a series of tests on the SBCS register."
|
.help = "Perform a series of tests on the SBCS register."
|
||||||
"Inputs are a legal address for read/write tests,"
|
"Inputs are a legal address for read/write tests,"
|
||||||
"and an illegal address for error flag/handling cases."
|
"an illegal address for error flag/handling cases, and"
|
||||||
|
"whether sim_only tests should be run."
|
||||||
},
|
},
|
||||||
COMMAND_REGISTRATION_DONE
|
COMMAND_REGISTRATION_DONE
|
||||||
};
|
};
|
||||||
|
|
|
@ -133,6 +133,8 @@ extern uint64_t riscv_scratch_ram_address;
|
||||||
|
|
||||||
extern bool riscv_prefer_sba;
|
extern bool riscv_prefer_sba;
|
||||||
|
|
||||||
|
extern bool run_sim_only_tests;
|
||||||
|
|
||||||
/* Everything needs the RISC-V specific info structure, so here's a nice macro
|
/* Everything needs the RISC-V specific info structure, so here's a nice macro
|
||||||
* that provides that. */
|
* that provides that. */
|
||||||
static inline riscv_info_t *riscv_info(const struct target *target) __attribute__((unused));
|
static inline riscv_info_t *riscv_info(const struct target *target) __attribute__((unused));
|
||||||
|
|
Loading…
Reference in New Issue