* [PATCH v2 0/2] Romless QEMU shutdown patches
@ 2020-07-21 6:15 Pavel Dovgalyuk
2020-07-21 6:15 ` [PATCH v2 1/2] hw/mips: remove exit(1) in case of missing ROM Pavel Dovgalyuk
2020-07-21 6:15 ` [PATCH v2 2/2] hw/arm: " Pavel Dovgalyuk
0 siblings, 2 replies; 4+ messages in thread
From: Pavel Dovgalyuk @ 2020-07-21 6:15 UTC (permalink / raw)
To: qemu-devel
Cc: peter.maydell, pavel.dovgalyuk, f4bug, aleksandar.qemu.devel,
antonynpavlov, chenhc, aurelien
Some machines require custom ROMs or kernels. They can't be started without
-bios, -kernel, or -pflash options. But this requirement can't be detected
automatically.
Running a romless machine may be needed for automatic introspection of default
machine hardware, when QEMU is started with a single -machine option.
This series provides patches that enable QEMU execution for MIPS and ARM machines,
even when there is no ROM.
v2 changes:
- useless error reports were dropped (suggested by Peter Maydell)
---
Pavel Dovgalyuk (2):
hw/mips: remove exit(1) in case of missing ROM
hw/arm: remove exit(1) in case of missing ROM
hw/arm/digic_boards.c | 8 ++++++--
hw/arm/gumstix.c | 12 ------------
hw/arm/omap_sx1.c | 5 -----
hw/arm/palm.c | 8 +-------
hw/mips/fuloong2e.c | 8 +++-----
hw/mips/jazz.c | 8 +++-----
hw/mips/malta.c | 11 ++++-------
hw/mips/mipssim.c | 10 +++-------
8 files changed, 20 insertions(+), 50 deletions(-)
--
Pavel Dovgalyuk
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/2] hw/mips: remove exit(1) in case of missing ROM
2020-07-21 6:15 [PATCH v2 0/2] Romless QEMU shutdown patches Pavel Dovgalyuk
@ 2020-07-21 6:15 ` Pavel Dovgalyuk
2020-10-09 16:11 ` Philippe Mathieu-Daudé
2020-07-21 6:15 ` [PATCH v2 2/2] hw/arm: " Pavel Dovgalyuk
1 sibling, 1 reply; 4+ messages in thread
From: Pavel Dovgalyuk @ 2020-07-21 6:15 UTC (permalink / raw)
To: qemu-devel
Cc: peter.maydell, pavel.dovgalyuk, f4bug, aleksandar.qemu.devel,
antonynpavlov, chenhc, aurelien
This patch updates MIPS-based machines to allow starting them without ROM.
In this case CPU starts to execute instructions from the empty memory,
but QEMU allows introspecting the machine configuration.
Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
---
hw/mips/fuloong2e.c | 8 +++-----
hw/mips/jazz.c | 8 +++-----
hw/mips/malta.c | 11 ++++-------
hw/mips/mipssim.c | 10 +++-------
4 files changed, 13 insertions(+), 24 deletions(-)
diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c
index 8ca31e5162..3e8a073922 100644
--- a/hw/mips/fuloong2e.c
+++ b/hw/mips/fuloong2e.c
@@ -336,10 +336,8 @@ static void mips_fuloong2e_init(MachineState *machine)
kernel_entry = load_kernel(env);
write_bootloader(env, memory_region_get_ram_ptr(bios), kernel_entry);
} else {
- if (bios_name == NULL) {
- bios_name = FULOONG_BIOSNAME;
- }
- filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+ filename = qemu_find_file(QEMU_FILE_TYPE_BIOS,
+ bios_name ?: FULOONG_BIOSNAME);
if (filename) {
bios_size = load_image_targphys(filename, 0x1fc00000LL,
BIOS_SIZE);
@@ -349,7 +347,7 @@ static void mips_fuloong2e_init(MachineState *machine)
}
if ((bios_size < 0 || bios_size > BIOS_SIZE) &&
- !kernel_filename && !qtest_enabled()) {
+ bios_name && !qtest_enabled()) {
error_report("Could not load MIPS bios '%s'", bios_name);
exit(1);
}
diff --git a/hw/mips/jazz.c b/hw/mips/jazz.c
index 82a6e3220e..b6dee3eb1f 100644
--- a/hw/mips/jazz.c
+++ b/hw/mips/jazz.c
@@ -205,10 +205,7 @@ static void mips_jazz_init(MachineState *machine,
memory_region_add_subregion(address_space, 0xfff00000LL, bios2);
/* load the BIOS image. */
- if (bios_name == NULL) {
- bios_name = BIOS_FILENAME;
- }
- filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+ filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name ?: BIOS_FILENAME);
if (filename) {
bios_size = load_image_targphys(filename, 0xfff00000LL,
MAGNUM_BIOS_SIZE);
@@ -216,7 +213,8 @@ static void mips_jazz_init(MachineState *machine,
} else {
bios_size = -1;
}
- if ((bios_size < 0 || bios_size > MAGNUM_BIOS_SIZE) && !qtest_enabled()) {
+ if ((bios_size < 0 || bios_size > MAGNUM_BIOS_SIZE)
+ && bios_name && !qtest_enabled()) {
error_report("Could not load MIPS bios '%s'", bios_name);
exit(1);
}
diff --git a/hw/mips/malta.c b/hw/mips/malta.c
index a59e20c81c..838de0f905 100644
--- a/hw/mips/malta.c
+++ b/hw/mips/malta.c
@@ -1334,10 +1334,8 @@ void mips_malta_init(MachineState *machine)
/* Load firmware from flash. */
if (!dinfo) {
/* Load a BIOS image. */
- if (bios_name == NULL) {
- bios_name = BIOS_FILENAME;
- }
- filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+ filename = qemu_find_file(QEMU_FILE_TYPE_BIOS,
+ bios_name ?: BIOS_FILENAME);
if (filename) {
bios_size = load_image_targphys(filename, FLASH_ADDRESS,
BIOS_SIZE);
@@ -1346,9 +1344,8 @@ void mips_malta_init(MachineState *machine)
bios_size = -1;
}
if ((bios_size < 0 || bios_size > BIOS_SIZE) &&
- !kernel_filename && !qtest_enabled()) {
- error_report("Could not load MIPS bios '%s', and no "
- "-kernel argument was specified", bios_name);
+ bios_name && !qtest_enabled()) {
+ error_report("Could not load MIPS bios '%s'", bios_name);
exit(1);
}
}
diff --git a/hw/mips/mipssim.c b/hw/mips/mipssim.c
index 1b3b762203..f259e7041e 100644
--- a/hw/mips/mipssim.c
+++ b/hw/mips/mipssim.c
@@ -173,10 +173,7 @@ mips_mipssim_init(MachineState *machine)
/* Map the BIOS / boot exception handler. */
memory_region_add_subregion(address_space_mem, 0x1fc00000LL, bios);
/* Load a BIOS / boot exception handler image. */
- if (bios_name == NULL) {
- bios_name = BIOS_FILENAME;
- }
- filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+ filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name ?: BIOS_FILENAME);
if (filename) {
bios_size = load_image_targphys(filename, 0x1fc00000LL, BIOS_SIZE);
g_free(filename);
@@ -184,10 +181,9 @@ mips_mipssim_init(MachineState *machine)
bios_size = -1;
}
if ((bios_size < 0 || bios_size > BIOS_SIZE) &&
- !kernel_filename && !qtest_enabled()) {
+ bios_name && !qtest_enabled()) {
/* Bail out if we have neither a kernel image nor boot vector code. */
- error_report("Could not load MIPS bios '%s', and no "
- "-kernel argument was specified", bios_name);
+ error_report("Could not load MIPS bios '%s'", bios_name);
exit(1);
} else {
/* We have a boot vector start address. */
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] hw/arm: remove exit(1) in case of missing ROM
2020-07-21 6:15 [PATCH v2 0/2] Romless QEMU shutdown patches Pavel Dovgalyuk
2020-07-21 6:15 ` [PATCH v2 1/2] hw/mips: remove exit(1) in case of missing ROM Pavel Dovgalyuk
@ 2020-07-21 6:15 ` Pavel Dovgalyuk
1 sibling, 0 replies; 4+ messages in thread
From: Pavel Dovgalyuk @ 2020-07-21 6:15 UTC (permalink / raw)
To: qemu-devel
Cc: peter.maydell, pavel.dovgalyuk, f4bug, aleksandar.qemu.devel,
antonynpavlov, chenhc, aurelien
This patch updates ARM-based machines to allow starting them without ROM.
In this case CPU starts to execute instructions from the empty memory,
but QEMU allows introspecting the machine configuration.
Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
--
v2:
- useless error reports were dropped (suggested by Peter Maydell)
---
hw/arm/digic_boards.c | 8 ++++++--
hw/arm/gumstix.c | 12 ------------
hw/arm/omap_sx1.c | 5 -----
hw/arm/palm.c | 8 +-------
4 files changed, 7 insertions(+), 26 deletions(-)
diff --git a/hw/arm/digic_boards.c b/hw/arm/digic_boards.c
index d5524d3e72..4f39a001bb 100644
--- a/hw/arm/digic_boards.c
+++ b/hw/arm/digic_boards.c
@@ -101,8 +101,12 @@ static void digic_load_rom(DigicState *s, hwaddr addr,
char *fn = qemu_find_file(QEMU_FILE_TYPE_BIOS, filename);
if (!fn) {
- error_report("Couldn't find rom image '%s'.", filename);
- exit(1);
+ if (bios_name) {
+ error_report("Couldn't find rom image '%s'.", filename);
+ exit(1);
+ } else {
+ return;
+ }
}
rom_size = load_image_targphys(fn, addr, max_size);
diff --git a/hw/arm/gumstix.c b/hw/arm/gumstix.c
index 3a4bc332c4..fb9fd6ab9c 100644
--- a/hw/arm/gumstix.c
+++ b/hw/arm/gumstix.c
@@ -59,12 +59,6 @@ static void connex_init(MachineState *machine)
cpu = pxa255_init(address_space_mem, connex_ram);
dinfo = drive_get(IF_PFLASH, 0, 0);
- if (!dinfo && !qtest_enabled()) {
- error_report("A flash image must be given with the "
- "'pflash' parameter");
- exit(1);
- }
-
if (!pflash_cfi01_register(0x00000000, "connext.rom", connex_rom,
dinfo ? blk_by_legacy_dinfo(dinfo) : NULL,
sector_len, 2, 0, 0, 0, 0, 0)) {
@@ -89,12 +83,6 @@ static void verdex_init(MachineState *machine)
cpu = pxa270_init(address_space_mem, verdex_ram, machine->cpu_type);
dinfo = drive_get(IF_PFLASH, 0, 0);
- if (!dinfo && !qtest_enabled()) {
- error_report("A flash image must be given with the "
- "'pflash' parameter");
- exit(1);
- }
-
if (!pflash_cfi01_register(0x00000000, "verdex.rom", verdex_rom,
dinfo ? blk_by_legacy_dinfo(dinfo) : NULL,
sector_len, 2, 0, 0, 0, 0, 0)) {
diff --git a/hw/arm/omap_sx1.c b/hw/arm/omap_sx1.c
index 57829b3744..ea3236cfb7 100644
--- a/hw/arm/omap_sx1.c
+++ b/hw/arm/omap_sx1.c
@@ -190,11 +190,6 @@ static void sx1_init(MachineState *machine, const int version)
OMAP_CS1_BASE, &cs[1]);
}
- if (!machine->kernel_filename && !fl_idx && !qtest_enabled()) {
- error_report("Kernel or Flash image must be specified");
- exit(1);
- }
-
/* Load the kernel. */
arm_load_kernel(mpu->cpu, machine, &sx1_binfo);
diff --git a/hw/arm/palm.c b/hw/arm/palm.c
index e7bc9ea4c6..8225c252c4 100644
--- a/hw/arm/palm.c
+++ b/hw/arm/palm.c
@@ -231,7 +231,7 @@ static void palmte_init(MachineState *machine)
static uint32_t cs1val = 0x0000e1a0;
static uint32_t cs2val = 0x0000e1a0;
static uint32_t cs3val = 0xe1a0e1a0;
- int rom_size, rom_loaded = 0;
+ int rom_size;
MachineClass *mc = MACHINE_GET_CLASS(machine);
MemoryRegion *flash = g_new(MemoryRegion, 1);
MemoryRegion *cs = g_new(MemoryRegion, 4);
@@ -284,7 +284,6 @@ static void palmte_init(MachineState *machine)
if (rom_size > 0) {
rom_size = load_image_targphys(option_rom[0].name, OMAP_CS0_BASE,
flash_size);
- rom_loaded = 1;
}
if (rom_size < 0) {
fprintf(stderr, "%s: error loading '%s'\n",
@@ -292,11 +291,6 @@ static void palmte_init(MachineState *machine)
}
}
- if (!rom_loaded && !machine->kernel_filename && !qtest_enabled()) {
- fprintf(stderr, "Kernel or ROM image must be specified\n");
- exit(1);
- }
-
/* Load the kernel. */
arm_load_kernel(mpu->cpu, machine, &palmte_binfo);
}
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 1/2] hw/mips: remove exit(1) in case of missing ROM
2020-07-21 6:15 ` [PATCH v2 1/2] hw/mips: remove exit(1) in case of missing ROM Pavel Dovgalyuk
@ 2020-10-09 16:11 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 4+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-10-09 16:11 UTC (permalink / raw)
To: Pavel Dovgalyuk, qemu-devel
Cc: peter.maydell, aleksandar.qemu.devel, antonynpavlov, aurelien,
chenhc
On 7/21/20 8:15 AM, Pavel Dovgalyuk wrote:
> This patch updates MIPS-based machines to allow starting them without ROM.
> In this case CPU starts to execute instructions from the empty memory,
> but QEMU allows introspecting the machine configuration.
>
> Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
> ---
> hw/mips/fuloong2e.c | 8 +++-----
> hw/mips/jazz.c | 8 +++-----
> hw/mips/malta.c | 11 ++++-------
> hw/mips/mipssim.c | 10 +++-------
> 4 files changed, 13 insertions(+), 24 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
And added to mips-next, thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-10-09 16:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-07-21 6:15 [PATCH v2 0/2] Romless QEMU shutdown patches Pavel Dovgalyuk
2020-07-21 6:15 ` [PATCH v2 1/2] hw/mips: remove exit(1) in case of missing ROM Pavel Dovgalyuk
2020-10-09 16:11 ` Philippe Mathieu-Daudé
2020-07-21 6:15 ` [PATCH v2 2/2] hw/arm: " Pavel Dovgalyuk
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).