sencha/bancha: sync with upstream for ICache/DCache support Bypass-Presubmit-Reason:tested as part of chain Change-Id: I60f0a75c380316a7506614cfc8cfce9ef9f29dde
diff --git a/shodan_infrastructure/MpactCheriotCPU.cs b/shodan_infrastructure/MpactCheriotCPU.cs index fd4f858..211b05e 100644 --- a/shodan_infrastructure/MpactCheriotCPU.cs +++ b/shodan_infrastructure/MpactCheriotCPU.cs
@@ -89,6 +89,14 @@ config_names.Add("clintPeriod"); config_values.Add(clint_period.ToString("X")); } + if (icache_config != "") { + config_names.Add("iCache"); + config_values.Add(icache_config); + } + if (dcache_config != "") { + config_names.Add("dCache"); + config_values.Add(dcache_config); + } } public bool InstProfile { @@ -111,6 +119,16 @@ set => clint_period = value; } + public string ICache { + get => icache_config; + set => icache_config = value; + } + + public string DCache { + get => dcache_config; + set => dcache_config = value; + } + // ICPUWithHooks methods. public void AddHookAtInterruptBegin(Action<ulong> hook) { @@ -138,6 +156,7 @@ // ICluster methods. public new IEnumerable<ICluster<MpactCheriotCPU>> Clusters {get; } = new List<ICluster<MpactCheriotCPU>>(0); public new IEnumerable<MpactCheriotCPU> Clustered {get; } + // ICPUSupportingGdb methods. public void EnterSingleStepModeSafely(HaltArguments args) { @@ -186,6 +205,8 @@ private UInt64 revocationMemBase; private UInt64 clint_mmr_base = 0x0; private UInt64 clint_period = 0; + private string icache_config = ""; + private string dcache_config = ""; private List<GDBFeatureDescriptor> gdbFeatures = new List<GDBFeatureDescriptor>(); } // class MpactCheriotCPU
diff --git a/shodan_infrastructure/MpactRiscVCPU.cs b/shodan_infrastructure/MpactRiscVCPU.cs index ca93625..1d273f6 100644 --- a/shodan_infrastructure/MpactRiscVCPU.cs +++ b/shodan_infrastructure/MpactRiscVCPU.cs
@@ -45,7 +45,8 @@ // The MpactRiscvCPU class. This class derives from BaseCPU, which implements // a CPU in ReNode. It is the interface between ReNode and the mpact_riscv32/64 // simulator libraries. -public class MpactRiscVCPU : MpactBaseCPU, ICpuSupportingGdb { +public class MpactRiscVCPU : MpactBaseCPU, ICluster<MpactRiscVCPU>, + ICpuSupportingGdb { public MpactRiscVCPU(uint id, UInt64 memoryBase, UInt64 memorySize, string cpuType, IMachine machine, @@ -53,6 +54,7 @@ CpuBitness bitness = CpuBitness.Bits32) : base(id, memoryBase, memorySize, cpuType, machine, endianness, bitness) { + Clustered = new MpactRiscVCPU[] { this }; } ~MpactRiscVCPU() { @@ -81,6 +83,14 @@ config_names.Add("stackEnd"); config_values.Add(stack_end.ToString("X")); } + if (icache_config != "") { + config_names.Add("iCache"); + config_values.Add(icache_config); + } + if (dcache_config != "") { + config_names.Add("dCache"); + config_values.Add(dcache_config); + } } public bool InstProfile { @@ -109,6 +119,16 @@ } } + public string ICache { + get => icache_config; + set => icache_config = value; + } + + public string DCache { + get => dcache_config; + set => dcache_config = value; + } + // ICPUWithHooks methods. public void AddHookAtInterruptBegin(Action<ulong> hook) { @@ -133,6 +153,10 @@ public void RemoveHooksAt(ulong addr) { /* empty */ } public void RemoveAllHooks() { /* empty */ } + // ICluster methods. + public new IEnumerable<ICluster<MpactRiscVCPU>> Clusters {get; } = new List<ICluster<MpactRiscVCPU>>(0); + public new IEnumerable<MpactRiscVCPU> Clustered {get; } + // ICPUSupportingGdb methods. public void EnterSingleStepModeSafely(HaltArguments args) { @@ -182,6 +206,8 @@ private bool stack_size_set = false; private ulong stack_end; private bool stack_end_set = false; + private string icache_config = ""; + private string dcache_config = ""; private List<GDBFeatureDescriptor> gdbFeatures = new List<GDBFeatureDescriptor>(); } // class MpactRiscVCPU