Acknowledge and reinitialise debug register on unexpected target reset, in RISC-V translator

This commit is contained in:
Nav
2024-12-14 02:03:58 +00:00
parent 00919e4057
commit b5ffca6753

View File

@@ -172,7 +172,28 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
} }
TargetExecutionState DebugTranslator::getExecutionState() { TargetExecutionState DebugTranslator::getExecutionState() {
return this->readDebugModuleStatusRegister().anyRunning const auto statusRegister = this->readDebugModuleStatusRegister();
if (statusRegister.anyHaveReset) {
Logger::warning("Reset detected at RISC-V hart " + std::to_string(this->selectedHartIndex));
if (statusRegister.anyRunning) {
this->stop();
}
this->initDebugControlStatusRegister();
this->writeDebugModuleControlRegister(ControlRegister{
.debugModuleActive = true,
.selectedHartIndex = this->selectedHartIndex,
.acknowledgeHaveReset = true,
});
if (statusRegister.anyRunning) {
this->run();
}
}
return statusRegister.anyRunning
? TargetExecutionState::RUNNING ? TargetExecutionState::RUNNING
: TargetExecutionState::STOPPED; : TargetExecutionState::STOPPED;
} }
@@ -208,6 +229,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
void DebugTranslator::run() { void DebugTranslator::run() {
auto controlRegister = ControlRegister{ auto controlRegister = ControlRegister{
.debugModuleActive = true, .debugModuleActive = true,
.setResetHaltRequest = true,
.selectedHartIndex = this->selectedHartIndex, .selectedHartIndex = this->selectedHartIndex,
.resumeRequest = true, .resumeRequest = true,
}; };
@@ -243,6 +265,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
auto controlRegister = ControlRegister{ auto controlRegister = ControlRegister{
.debugModuleActive = true, .debugModuleActive = true,
.setResetHaltRequest = true,
.selectedHartIndex = this->selectedHartIndex, .selectedHartIndex = this->selectedHartIndex,
.resumeRequest = true, .resumeRequest = true,
}; };
@@ -283,7 +306,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
this->writeDebugModuleControlRegister(ControlRegister{ this->writeDebugModuleControlRegister(ControlRegister{
.debugModuleActive = true, .debugModuleActive = true,
.clearResetHaltRequest = true, .setResetHaltRequest = true,
.selectedHartIndex = this->selectedHartIndex, .selectedHartIndex = this->selectedHartIndex,
.acknowledgeHaveReset = true, .acknowledgeHaveReset = true,
.haltRequest = true, .haltRequest = true,