aboutsummaryrefslogtreecommitdiff
path: root/riscv/debug_module.cc
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2019-01-09 11:32:30 -0800
committerGitHub <noreply@github.com>2019-01-09 11:32:30 -0800
commitc544846020608d8ae471b53c8558c61e1702671f (patch)
tree1b072aa9790a889b1c26f90244c2c49f8aae9dbb /riscv/debug_module.cc
parent06bafbf547564f14efac995ab4887d6b0dd9be71 (diff)
parent5c1849722546813bae3fe6002ce8961dfd14f2f1 (diff)
downloadspike-c544846020608d8ae471b53c8558c61e1702671f.zip
spike-c544846020608d8ae471b53c8558c61e1702671f.tar.gz
spike-c544846020608d8ae471b53c8558c61e1702671f.tar.bz2
Merge pull request #265 from riscv/debug_test
Add --dmi-rti and --abstract-rti to test OpenOCD.
Diffstat (limited to 'riscv/debug_module.cc')
-rw-r--r--riscv/debug_module.cc17
1 files changed, 15 insertions, 2 deletions
diff --git a/riscv/debug_module.cc b/riscv/debug_module.cc
index 1972542..18a7a64 100644
--- a/riscv/debug_module.cc
+++ b/riscv/debug_module.cc
@@ -18,11 +18,12 @@
///////////////////////// debug_module_t
debug_module_t::debug_module_t(sim_t *sim, unsigned progbufsize, unsigned max_bus_master_bits,
- bool require_authentication) :
+ bool require_authentication, unsigned abstract_rti) :
progbufsize(progbufsize),
program_buffer_bytes(4 + 4*progbufsize),
max_bus_master_bits(max_bus_master_bits),
require_authentication(require_authentication),
+ abstract_rti(abstract_rti),
debug_progbuf_start(debug_data_start - program_buffer_bytes),
debug_abstract_start(debug_progbuf_start - debug_abstract_size*4),
custom_base(0),
@@ -183,7 +184,7 @@ bool debug_module_t::store(reg_t addr, size_t len, const uint8_t* bytes)
if (dmcontrol.hartsel == id) {
if (0 == (debug_rom_flags[id] & (1 << DEBUG_ROM_FLAG_GO))){
if (dmcontrol.hartsel == id) {
- abstractcs.busy = false;
+ abstract_command_completed = true;
}
}
}
@@ -490,6 +491,16 @@ bool debug_module_t::dmi_read(unsigned address, uint32_t *value)
return true;
}
+void debug_module_t::run_test_idle()
+{
+ if (rti_remaining > 0) {
+ rti_remaining--;
+ }
+ if (rti_remaining == 0 && abstractcs.busy && abstract_command_completed) {
+ abstractcs.busy = false;
+ }
+}
+
bool debug_module_t::perform_abstract_command()
{
if (abstractcs.cmderr != CMDERR_NONE)
@@ -631,6 +642,8 @@ bool debug_module_t::perform_abstract_command()
}
debug_rom_flags[dmcontrol.hartsel] |= 1 << DEBUG_ROM_FLAG_GO;
+ rti_remaining = abstract_rti;
+ abstract_command_completed = false;
abstractcs.busy = true;
} else {