diff --git a/hw/riscv/esp32_c3.c b/hw/riscv/esp32_c3.c index 47f7c00a78ada52df9283bdc00a19a3aad44c5eb..6d7f425da3ada6fbfd7241e2d0f37c82a81ba7fa 100644 --- a/hw/riscv/esp32_c3.c +++ b/hw/riscv/esp32_c3.c @@ -44,7 +44,7 @@ static const struct MemmapEntry { }; /* Reset vector according to technical manual page 217 */ -static const hwaddr esp32_c3_entry = 0x40000400; +// static const hwaddr esp32_c3_entry = 0x40000400; /* System I/O memory (TRM p. 91) */ static const hwaddr esp32_c3_sysregs = 0x600C0000; static const hwaddr esp32_c3_sysregs_size = 4096; @@ -99,9 +99,9 @@ static void esp32_c3_machine_state_init(MachineState *mstate) esp32_c3_setup_reset_vec(); - if (mstate->firmware) { - // We don't have any (separate) firmware to load, as this is an MCU - error_report("This board can't load firmware"); + if (!mstate->firmware) { + // Firmware is required for most programs, as they call directly into it + error_report("This board requires a firmware image to run"); exit(1); } @@ -194,6 +194,9 @@ static void esp32_c3_soc_state_realize(DeviceState *dev, Error **errp) memory_region_add_subregion_overlap(&sss->container, esp32_c3_clkcfg, &sss->clock, -1); create_unimplemented_device("riscv.esp32.c.sysregs", esp32_c3_sysregs, esp32_c3_sysregs_size); + + /* Load boot ROM dump into emulated ROM */ + riscv_load_firmware(ms->firmware, esp32_c3_memmap[ESP32_C3_IROM].base, NULL); } static void esp32_c3_soc_class_init(ObjectClass *klass, void *data)