From bbc34d2a123d274c8f772828181b29a95d27ab8d Mon Sep 17 00:00:00 2001 From: Davids Paskevics <davip00@mi.fu-berlin.de> Date: Mon, 22 May 2023 20:15:59 +0200 Subject: [PATCH] Register a dummy RAM region for ESP32-C3 so we can properly initialize all others --- hw/riscv/esp32_c3.c | 11 ++++++----- include/hw/riscv/esp32_c3.h | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/hw/riscv/esp32_c3.c b/hw/riscv/esp32_c3.c index e82b9b8eab2..78da9c67848 100644 --- a/hw/riscv/esp32_c3.c +++ b/hw/riscv/esp32_c3.c @@ -32,6 +32,7 @@ static const struct MemmapEntry { hwaddr base; hwaddr size; } esp32_c3_memmap[] = { + [ESP32_C3_DUMMY] = { 0x3C800000, 0x0000F }, [ESP32_C3_DROM] = { 0x3FF00000, 0x1FFFF }, [ESP32_C3_IROM] = { 0x40000000, 0x5FFFF }, [ESP32_C3_IRAM] = { 0x4037C000, 0x63FFF }, @@ -42,7 +43,7 @@ static const struct MemmapEntry { // Reset vector according to technical manual page 217 static const hwaddr esp32_c3_entry = 0x40000400; -static void esp32_c3_setup_reset_vec() { +static void esp32_c3_setup_reset_vec(void) { // TODO: Implement } @@ -105,7 +106,8 @@ static void esp32_c3_machine_class_init(ObjectClass *klass, void *data) mc->desc = "RISC-V Board compatible with ES32-C3 SDK"; mc->init = esp32_c3_machine_state_init; mc->default_cpu_type = TYPE_RISCV_CPU_ESP32_C3; - mc->default_ram_id = "riscv.esp32.c.dram"; + // We have to pass something here, but want to initialize the RAM ourselves + mc->default_ram_id = "riscv.esp32.c.dummyram"; } static const TypeInfo esp32_c3_machine_type_info = { @@ -146,13 +148,12 @@ static void esp32_c3_soc_state_realize(DeviceState *dev, Error **errp) esp32_c3_memmap[ESP32_C3_IRAM].size, &error_fatal); memory_region_add_subregion(sys_mem, esp32_c3_memmap[ESP32_C3_IRAM].base, &sss->iram); - /* TODO: How is this supposed to work with the default RAM region? - We have to specify one (otherwise segfault), but then it can't be initialized here. memory_region_init_ram(&sss->dram, OBJECT(dev), "riscv.esp32.c.dram", esp32_c3_memmap[ESP32_C3_DRAM].size, &error_fatal); memory_region_add_subregion(sys_mem, esp32_c3_memmap[ESP32_C3_DRAM].base, &sss->dram); - */ + + // TODO: Do we need to register dummy RAM here? } static void esp32_c3_soc_class_init(ObjectClass *klass, void *data) diff --git a/include/hw/riscv/esp32_c3.h b/include/hw/riscv/esp32_c3.h index 841af273a9b..fb79fbc1bb5 100644 --- a/include/hw/riscv/esp32_c3.h +++ b/include/hw/riscv/esp32_c3.h @@ -39,6 +39,7 @@ typedef struct Esp32C3SoCState { /*< public >*/ RISCVHartArrayState cpus; DeviceState *plic; + MemoryRegion dummy; MemoryRegion irom; MemoryRegion drom; MemoryRegion iram; @@ -58,6 +59,7 @@ typedef struct Esp32C3MachineState { } Esp32C3MachineState; enum { + ESP32_C3_DUMMY, ESP32_C3_DROM, ESP32_C3_IROM, ESP32_C3_IRAM, -- GitLab