Better error message when doing DMI operations and we're busy
authorPalmer Dabbelt <palmer@dabbelt.com>
Tue, 16 May 2017 01:33:27 +0000 (18:33 -0700)
committerPalmer Dabbelt <palmer@dabbelt.com>
Tue, 16 May 2017 01:33:27 +0000 (18:33 -0700)
riscv/debug_module.cc

index fafddf14ab3d6fdd9328b6c811eda57feac92589..db035e3313d42d2cf0d4b1386c44cc815fa1911f 100644 (file)
@@ -205,7 +205,11 @@ bool debug_module_t::dmi_read(unsigned address, uint32_t *value)
   D(fprintf(stderr, "dmi_read(0x%x) -> ", address));
   if (address >= DMI_DATA0 && address < DMI_DATA0 + abstractcs.datacount) {
     unsigned i = address - DMI_DATA0;
-    result = abstractcs.busy ? -1 : read32(dmdata, i);
+    result = read32(dmdata, i);
+    if (abstractcs.busy) {
+      result = -1;
+      fprintf(stderr, "\ndmi_read(0x%02x (data[%d]) -> -1 because abstractcs.busy==true\n", address, i);
+    }
 
     if (abstractcs.busy && abstractcs.cmderr == CMDERR_NONE) {
       abstractcs.cmderr = CMDERR_BUSY;
@@ -216,7 +220,11 @@ bool debug_module_t::dmi_read(unsigned address, uint32_t *value)
     }
   } else if (address >= DMI_PROGBUF0 && address < DMI_PROGBUF0 + progsize) {
     unsigned i = address - DMI_PROGBUF0;
-    result = abstractcs.busy ? -1 : read32(program_buffer, i);
+    result = read32(program_buffer, i);
+    if (abstractcs.busy) {
+      result = -1;
+      fprintf(stderr, "\ndmi_read(0x%02x (progbuf[%d]) -> -1 because abstractcs.busy==true\n", address, i);
+    }
     if (!abstractcs.busy && ((abstractauto.autoexecprogbuf >> i) & 1)) {
       perform_abstract_command();
     }