aboutsummaryrefslogtreecommitdiff
path: root/riscv/debug_module.cc
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2017-02-15 20:41:06 -0800
committerTim Newsome <tim@sifive.com>2017-02-15 20:41:06 -0800
commit8dd673b74499d0195f6b1308a6709e05db6fa571 (patch)
tree4abbe94e532cf3af9ee8b8aca45088ba31eb78bb /riscv/debug_module.cc
parentf88504000a7c7a16685dc59bdbb9be314a35d0b2 (diff)
downloadspike-8dd673b74499d0195f6b1308a6709e05db6fa571.zip
spike-8dd673b74499d0195f6b1308a6709e05db6fa571.tar.gz
spike-8dd673b74499d0195f6b1308a6709e05db6fa571.tar.bz2
Set cmderr when data is accessed while busy.
Diffstat (limited to 'riscv/debug_module.cc')
-rw-r--r--riscv/debug_module.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/riscv/debug_module.cc b/riscv/debug_module.cc
index 8d93e9e..af71974 100644
--- a/riscv/debug_module.cc
+++ b/riscv/debug_module.cc
@@ -221,6 +221,10 @@ bool debug_module_t::dmi_read(unsigned address, uint32_t *value)
unsigned i = address - DMI_DATA0;
result = dmdata.read32(4 * i);
+ if (abstractcs.busy && abstractcs.cmderr == abstractcs.CMDERR_NONE) {
+ abstractcs.cmderr = abstractcs.CMDERR_BUSY;
+ }
+
bool autoexec = false;
switch (i) {
case 0: autoexec = abstractcs.autoexec0; break;
@@ -376,6 +380,10 @@ bool debug_module_t::dmi_write(unsigned address, uint32_t value)
unsigned i = address - DMI_DATA0;
dmdata.write32(4 * i, value);
+ if (abstractcs.busy && abstractcs.cmderr == abstractcs.CMDERR_NONE) {
+ abstractcs.cmderr = abstractcs.CMDERR_BUSY;
+ }
+
bool autoexec = false;
switch (i) {
case 0: autoexec = abstractcs.autoexec0; break;