From d2316d2d2313794e27dce73e6983fe61f8ab62e8 Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Mon, 14 Aug 2023 08:32:25 +0200 Subject: [PATCH] repl: bring up second cpu Bring up the second cpu. This requires the most recent version of Renode. Signed-off-by: Sean Cross --- badge.repl | 7 ++++++- badge.resc | 39 +++++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/badge.repl b/badge.repl index f440f03..7ef7b50 100644 --- a/badge.repl +++ b/badge.repl @@ -1,4 +1,9 @@ -cpu: CPU.Xtensa @ sysbus +cpu1: CPU.Xtensa @ sysbus + cpuId: 1 + cpuType: "esp32s3" + +cpu2: CPU.Xtensa @ sysbus + cpuId: 2 cpuType: "esp32s3" // External data memory diff --git a/badge.resc b/badge.resc index 22d344e..116a3a8 100644 --- a/badge.resc +++ b/badge.resc @@ -37,9 +37,11 @@ sysbus LoadBinary @esp32s3-drom.bin 0x3FF00000 #sysbus LoadBinary @esp32s3-efuses.bin 0x60007000 sysbus LoadELF @bootloader.elf #copy_bootrom_data -setup_hooks sysbus.cpu -#sysbus WriteDoubleWord 0x600c40a0 0x8 -cpu PC 0x40000400 +setup_hooks sysbus.cpu1 sysbus.cpu2 +drom WriteByte 0x41a6b 0x1d +drom WriteByte 0x41a6c 0xf0 +cpu1 PC 0x40000400 +cpu2 IsHalted true """ python @@ -48,11 +50,12 @@ def memcpy(dest, src, n): data = self.Machine.SystemBus.ReadBytes(src, n) self.Machine.SystemBus.WriteBytes(data, dest) -def mc_setup_hooks(cpu): +def mc_setup_hooks(cpu1, cpu2): from Antmicro.Renode.Peripherals.CPU import RegisterValue # LR, SP, R0 A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 = 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 - cpu = self.Machine[cpu] + cpu1 = self.Machine[cpu1] + cpu2 = self.Machine[cpu2] def format_val(v): try: @@ -61,10 +64,10 @@ def mc_setup_hooks(cpu): return str(v) def log(*args): - cpu.Log(LogLevel.Warning, "{0}", ", ".join(map(format_val, args))) + cpu1.Log(LogLevel.Warning, "{0}", ", ".join(map(format_val, args))) def get(reg, raw=True): - v = cpu.GetRegisterUnsafe(reg) + v = cpu1.GetRegisterUnsafe(reg) if raw: return v.RawValue return v @@ -76,7 +79,7 @@ def mc_setup_hooks(cpu): return list(map(get, (A2, A3, A4))) def set(reg, val): - cpu.SetRegisterUnsafe(reg, RegisterValue.Create(val, 32)) + cpu1.SetRegisterUnsafe(reg, RegisterValue.Create(val, 32)) def cstr(addr): out = bytearray() @@ -93,38 +96,38 @@ def mc_setup_hooks(cpu): addr = self.Machine.SystemBus.GetSymbolAddress(addr_or_name) else: addr = addr_or_name - cpu.AddHook(addr, fn) + cpu1.AddHook(addr, fn) return fn return wrap @hook(0x4004578f) - def ets_run_flash_bootloader_hook(cpu, pc): + def ets_run_flash_bootloader_hook(cpu1, pc): log("ets_run_flash_bootloader", *args()) # this function loads software bootloader # we have it already loaded, just jump before # executing user code (software bootloader) - cpu.PC = RegisterValue.Create(0x40043ca3,32) + cpu1.PC = RegisterValue.Create(0x40043ca3,32) @hook(0x40043ca6) - def hook_soft_address(cpu, pc): + def hook_soft_address(cpu1, pc): log("hook_soft_address", *args()) # write address already loaded software bootloader to register self.Machine.SystemBus.WriteDoubleWord(0x3fcedf14, 0x403c9908) @hook(0x403c9a1c) - def hook_cpu_rev_check(cpu, pc): + def hook_cpu_rev_check(cpu1, pc): log("cpu_rev_check", *args()) - cpu.PC = RegisterValue.Create(0x403c9a1f,32) + cpu1.PC = RegisterValue.Create(0x403c9a1f,32) @hook (0x403ce971) - def hook_skip_part_size_check(cpu, pc): + def hook_skip_part_size_check(cpu1, pc): log("skip_part_size_check", *args()) - cpu.PC = RegisterValue.Create(0x403ce9a3,32) + cpu1.PC = RegisterValue.Create(0x403ce9a3,32) @hook (0x403ce129) - def hook_skip_flash_check(cpu, pc): + def hook_skip_flash_check(cpu1, pc): log("skip_flash_check", *args()) - cpu.PC = RegisterValue.Create(0x403ce1b0,32) + cpu1.PC = RegisterValue.Create(0x403ce1b0,32) """ runMacro $reset