Set cmderr when data is accessed while busy.
authorTim Newsome <tim@sifive.com>
Thu, 16 Feb 2017 04:41:06 +0000 (20:41 -0800)
committerTim Newsome <tim@sifive.com>
Thu, 16 Feb 2017 04:41:06 +0000 (20:41 -0800)
riscv/debug_module.cc

index 8d93e9e423385316cb2891233490989cf216461d..af719746a286495a3caf946e9a4161653223f056 100644 (file)
@@ -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;