|
|
@ -413,14 +413,14 @@ bool debug_module_t::dmi_read(unsigned address, uint32_t *value) |
|
|
dmstatus.allresumeack = false; |
|
|
dmstatus.allresumeack = false; |
|
|
} |
|
|
} |
|
|
auto hart = sim->get_harts().at(hart_id); |
|
|
auto hart = sim->get_harts().at(hart_id); |
|
|
if (hart_state[hart_id].halted) { |
|
|
if (!hart_available(hart_id)) { |
|
|
dmstatus.allrunning = false; |
|
|
|
|
|
dmstatus.anyhalted = true; |
|
|
|
|
|
dmstatus.allunavail = false; |
|
|
|
|
|
} else if (!hart_available(hart_id)) { |
|
|
|
|
|
dmstatus.allrunning = false; |
|
|
dmstatus.allrunning = false; |
|
|
dmstatus.allhalted = false; |
|
|
dmstatus.allhalted = false; |
|
|
dmstatus.anyunavail = true; |
|
|
dmstatus.anyunavail = true; |
|
|
|
|
|
} else if (hart_state[hart_id].halted) { |
|
|
|
|
|
dmstatus.allrunning = false; |
|
|
|
|
|
dmstatus.anyhalted = true; |
|
|
|
|
|
dmstatus.allunavail = false; |
|
|
} else { |
|
|
} else { |
|
|
dmstatus.allhalted = false; |
|
|
dmstatus.allhalted = false; |
|
|
dmstatus.anyrunning = true; |
|
|
dmstatus.anyrunning = true; |
|
|
@ -579,6 +579,10 @@ bool debug_module_t::perform_abstract_command() |
|
|
abstractcs.cmderr = CMDERR_BUSY; |
|
|
abstractcs.cmderr = CMDERR_BUSY; |
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
|
|
|
if (!hart_available(dmcontrol.hartsel)) { |
|
|
|
|
|
abstractcs.cmderr = CMDERR_HALTRESUME; |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if ((command >> 24) == 0) { |
|
|
if ((command >> 24) == 0) { |
|
|
// register access
|
|
|
// register access
|
|
|
|