Corrected bug in RISC-V debug translator where a reset wasn't always keeping the target halted
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user