Corrected bug in RISC-V debug translator where a reset wasn't always keeping the target halted

This commit is contained in:
Nav
2024-10-19 14:22:12 +01:00
parent 1bb2214721
commit 00d6f5fb71

View File

@@ -204,20 +204,20 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
} }
void DebugTranslator::reset() { void DebugTranslator::reset() {
auto controlRegister = ControlRegister{ this->writeDebugModuleControlRegister(ControlRegister{
.debugModuleActive = true, .debugModuleActive = true,
.ndmReset = true, .ndmReset = true,
.setResetHaltRequest = true, .setResetHaltRequest = true,
.selectedHartIndex = this->selectedHartIndex, .selectedHartIndex = this->selectedHartIndex,
.haltRequest = true, .haltRequest = true,
}; });
this->writeDebugModuleControlRegister(ControlRegister{
.debugModuleActive = true,
.selectedHartIndex = this->selectedHartIndex,
.haltRequest = true,
});
this->writeDebugModuleControlRegister(controlRegister);
controlRegister.ndmReset = false;
this->writeDebugModuleControlRegister(controlRegister);
auto statusRegister = this->readDebugModuleStatusRegister(); auto statusRegister = this->readDebugModuleStatusRegister();
for ( for (
auto attempts = 0; auto attempts = 0;
!statusRegister.allHaveReset !statusRegister.allHaveReset
@@ -233,6 +233,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
.clearResetHaltRequest = true, .clearResetHaltRequest = true,
.selectedHartIndex = this->selectedHartIndex, .selectedHartIndex = this->selectedHartIndex,
.acknowledgeHaveReset = true, .acknowledgeHaveReset = true,
.haltRequest = true,
}); });
if (!statusRegister.allHaveReset) { if (!statusRegister.allHaveReset) {