From d248ab3cc78892ccdcbdc4b306bb88a224c712d2 Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Thu, 15 Jul 2021 18:22:15 +0800 Subject: [PATCH] emulation: engine: always update registers on write These registers get reset when the hardware is reset, however the engine may still be running. Ensure it's not running when the device is reset. Signed-off-by: Sean Cross --- emulation/peripherals/engine.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/emulation/peripherals/engine.cs b/emulation/peripherals/engine.cs index 82151b098..e3911eb5e 100644 --- a/emulation/peripherals/engine.cs +++ b/emulation/peripherals/engine.cs @@ -480,15 +480,15 @@ namespace Antmicro.Renode.Peripherals.Miscellaneous private void DefineRegisters() { Registers.WINDOW.Define(this) - .WithValueField(0, 4, name: "WINDOW", valueProviderCallback: (_) => this.window, changeCallback: (_, value) => this.window = (byte)(value & 0xf)) + .WithValueField(0, 4, name: "WINDOW", valueProviderCallback: (_) => this.window, writeCallback: (_, value) => this.window = (byte)(value & 0xf)) ; Registers.MPSTART.Define(this) - .WithValueField(0, 11, name: "MPSTART", valueProviderCallback: (_) => this.mpstart, changeCallback: (_, value) => this.mpstart = (UInt16)(value & 0x7ff)) + .WithValueField(0, 11, name: "MPSTART", valueProviderCallback: (_) => this.mpstart, writeCallback: (_, value) => this.mpstart = (UInt16)(value & 0x7ff)) ; Registers.MPLEN.Define(this) - .WithValueField(0, 11, name: "MPLEN", valueProviderCallback: _ => this.mplen, changeCallback: (_, value) => this.mplen = (UInt16)(value & 0x7ff)) + .WithValueField(0, 11, name: "MPLEN", valueProviderCallback: _ => this.mplen, writeCallback: (_, value) => this.mplen = (UInt16)(value & 0x7ff)) ; Registers.CONTROL.Define(this) @@ -510,7 +510,7 @@ namespace Antmicro.Renode.Peripherals.Miscellaneous ; Registers.MPRESUME.Define(this) - .WithValueField(0, 11, name: "MPRESUME", valueProviderCallback: _ => this.mpresume, changeCallback: (_, value) => { this.mpresume = (UInt16)(value & 0x7ff); }) + .WithValueField(0, 11, name: "MPRESUME", valueProviderCallback: _ => this.mpresume, writeCallback: (_, value) => { this.mpresume = (UInt16)(value & 0x7ff); }) ; Registers.POWER.Define(this) @@ -578,6 +578,12 @@ namespace Antmicro.Renode.Peripherals.Miscellaneous this.mplen = 0; this.mpresume = 0; this.mpc = 0; + if (this.engineExecution != null) { + if (this.engineExecution.IsAlive) { + this.engineExecution.Abort(); + } + this.engineExecution = null; + } if (this.powerIsOn != null) { this.powerIsOn.Value = false;