diff mbox series

[v2] rx: move BIOS load from MCU to board

Message ID 20201026190540.3106013-1-pbonzini@redhat.com
State Accepted
Commit ac6dd9b9f3dd6f0914a9c822fdeb43149bc9c9ff
Headers show
Series [v2] rx: move BIOS load from MCU to board | expand

Commit Message

Paolo Bonzini Oct. 26, 2020, 7:05 p.m. UTC
The ROM loader state is global and not part of the MCU, and the
BIOS is in machine->firmware.  So just like the kernel case,
load it in the board.

Due to the ordering between CPU reset and ROM reset, the ROM
has to be registered before the CPU is realized, otherwise
the reset vector is loaded before the ROM is there.

Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/rx/rx-gdbsim.c | 10 ++++++++++
 hw/rx/rx62n.c     |  9 ---------
 2 files changed, 10 insertions(+), 9 deletions(-)

Comments

Philippe Mathieu-Daudé Oct. 26, 2020, 7:09 p.m. UTC | #1
On 10/26/20 8:05 PM, Paolo Bonzini wrote:
> The ROM loader state is global and not part of the MCU, and the

> BIOS is in machine->firmware.  So just like the kernel case,

> load it in the board.

> 

> Due to the ordering between CPU reset and ROM reset, the ROM

> has to be registered before the CPU is realized, otherwise

> the reset vector is loaded before the ROM is there.

> 

> Cc: Philippe Mathieu-Daudé <philmd@redhat.com>

> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

> ---

>   hw/rx/rx-gdbsim.c | 10 ++++++++++

>   hw/rx/rx62n.c     |  9 ---------

>   2 files changed, 10 insertions(+), 9 deletions(-)


Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
diff mbox series

Patch

diff --git a/hw/rx/rx-gdbsim.c b/hw/rx/rx-gdbsim.c
index 417ec0564b..6bf4a620e1 100644
--- a/hw/rx/rx-gdbsim.c
+++ b/hw/rx/rx-gdbsim.c
@@ -106,6 +106,16 @@  static void rx_gdbsim_init(MachineState *machine)
                              rxc->xtal_freq_hz, &error_abort);
     object_property_set_bool(OBJECT(&s->mcu), "load-kernel",
                              kernel_filename != NULL, &error_abort);
+
+    if (!kernel_filename) {
+        if (machine->firmware) {
+            rom_add_file_fixed(machine->firmware, RX62N_CFLASH_BASE, 0);
+        } else if (!qtest_enabled()) {
+            error_report("No bios or kernel specified");
+            exit(1);
+        }
+    }
+
     qdev_realize(DEVICE(&s->mcu), NULL, &error_abort);
 
     /* Load kernel and dtb */
diff --git a/hw/rx/rx62n.c b/hw/rx/rx62n.c
index 6eb4eea700..17ec73fc7b 100644
--- a/hw/rx/rx62n.c
+++ b/hw/rx/rx62n.c
@@ -245,15 +245,6 @@  static void rx62n_realize(DeviceState *dev, Error **errp)
                            rxc->rom_flash_size, &error_abort);
     memory_region_add_subregion(s->sysmem, RX62N_CFLASH_BASE, &s->c_flash);
 
-    if (!s->kernel) {
-        if (bios_name) {
-            rom_add_file_fixed(bios_name, RX62N_CFLASH_BASE, 0);
-        }  else if (!qtest_enabled()) {
-            error_report("No bios or kernel specified");
-            exit(1);
-        }
-    }
-
     /* Initialize CPU */
     object_initialize_child(OBJECT(s), "cpu", &s->cpu, TYPE_RX62N_CPU);
     qdev_realize(DEVICE(&s->cpu), NULL, &error_abort);