202 lines
7.2 KiB
Diff
202 lines
7.2 KiB
Diff
|
From 36f64f38b39f2a2e0f0682f62f669d5e23074875 Mon Sep 17 00:00:00 2001
|
||
|
From: Thomas Huth <thuth@redhat.com>
|
||
|
Date: Thu, 20 Jun 2024 16:59:28 +0200
|
||
|
Subject: [PATCH 06/38] hw/s390x: Remove the possibility to load the
|
||
|
s390-netboot.img binary
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
RH-Author: Thomas Huth <thuth@redhat.com>
|
||
|
RH-MergeRequest: 278: Full boot order support for s390x [Centos 10]
|
||
|
RH-Jira: RHEL-58153
|
||
|
RH-Acked-by: Cédric Le Goater <clg@redhat.com>
|
||
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||
|
RH-Commit: [5/23] ff245b81b45ddd3a78343d1a8cfdd725a8255d87 (thuth/qemu-kvm-cs9)
|
||
|
|
||
|
Since the netboot code has now been merged into the main s390-ccw.img
|
||
|
binary, we don't need the separate s390-netboot.img anymore. Remove
|
||
|
it and the code that was responsible for loading it.
|
||
|
|
||
|
Message-Id: <20240621082422.136217-6-thuth@redhat.com>
|
||
|
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
||
|
(cherry picked from commit 188e255bf8ed68fa64bcb63577cb100eeb326254)
|
||
|
---
|
||
|
hw/s390x/ipl.c | 55 --------------------------------------
|
||
|
hw/s390x/ipl.h | 12 +++------
|
||
|
hw/s390x/s390-virtio-ccw.c | 10 ++-----
|
||
|
pc-bios/meson.build | 1 -
|
||
|
4 files changed, 6 insertions(+), 72 deletions(-)
|
||
|
|
||
|
diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
|
||
|
index 9362de0b6f..8a0a3e6961 100644
|
||
|
--- a/hw/s390x/ipl.c
|
||
|
+++ b/hw/s390x/ipl.c
|
||
|
@@ -288,7 +288,6 @@ static Property s390_ipl_properties[] = {
|
||
|
DEFINE_PROP_STRING("initrd", S390IPLState, initrd),
|
||
|
DEFINE_PROP_STRING("cmdline", S390IPLState, cmdline),
|
||
|
DEFINE_PROP_STRING("firmware", S390IPLState, firmware),
|
||
|
- DEFINE_PROP_STRING("netboot_fw", S390IPLState, netboot_fw),
|
||
|
DEFINE_PROP_BOOL("enforce_bios", S390IPLState, enforce_bios, false),
|
||
|
DEFINE_PROP_BOOL("iplbext_migration", S390IPLState, iplbext_migration,
|
||
|
true),
|
||
|
@@ -480,56 +479,6 @@ int s390_ipl_set_loadparm(uint8_t *loadparm)
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
-static int load_netboot_image(Error **errp)
|
||
|
-{
|
||
|
- MachineState *ms = MACHINE(qdev_get_machine());
|
||
|
- S390IPLState *ipl = get_ipl_device();
|
||
|
- char *netboot_filename;
|
||
|
- MemoryRegion *sysmem = get_system_memory();
|
||
|
- MemoryRegion *mr = NULL;
|
||
|
- void *ram_ptr = NULL;
|
||
|
- int img_size = -1;
|
||
|
-
|
||
|
- mr = memory_region_find(sysmem, 0, 1).mr;
|
||
|
- if (!mr) {
|
||
|
- error_setg(errp, "Failed to find memory region at address 0");
|
||
|
- return -1;
|
||
|
- }
|
||
|
-
|
||
|
- ram_ptr = memory_region_get_ram_ptr(mr);
|
||
|
- if (!ram_ptr) {
|
||
|
- error_setg(errp, "No RAM found");
|
||
|
- goto unref_mr;
|
||
|
- }
|
||
|
-
|
||
|
- netboot_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, ipl->netboot_fw);
|
||
|
- if (netboot_filename == NULL) {
|
||
|
- error_setg(errp, "Could not find network bootloader '%s'",
|
||
|
- ipl->netboot_fw);
|
||
|
- goto unref_mr;
|
||
|
- }
|
||
|
-
|
||
|
- img_size = load_elf_ram(netboot_filename, NULL, NULL, NULL,
|
||
|
- &ipl->start_addr,
|
||
|
- NULL, NULL, NULL, 1, EM_S390, 0, 0, NULL,
|
||
|
- false);
|
||
|
-
|
||
|
- if (img_size < 0) {
|
||
|
- img_size = load_image_size(netboot_filename, ram_ptr, ms->ram_size);
|
||
|
- ipl->start_addr = KERN_IMAGE_START;
|
||
|
- }
|
||
|
-
|
||
|
- if (img_size < 0) {
|
||
|
- error_setg(errp, "Failed to load network bootloader");
|
||
|
- }
|
||
|
-
|
||
|
- g_free(netboot_filename);
|
||
|
-
|
||
|
-unref_mr:
|
||
|
- memory_region_unref(mr);
|
||
|
- return img_size;
|
||
|
-}
|
||
|
-
|
||
|
static bool is_virtio_ccw_device_of_type(IplParameterBlock *iplb,
|
||
|
int virtio_id)
|
||
|
{
|
||
|
@@ -754,10 +703,6 @@ void s390_ipl_prepare_cpu(S390CPU *cpu)
|
||
|
ipl->iplb_valid = s390_gen_initial_iplb(ipl);
|
||
|
}
|
||
|
}
|
||
|
- if (ipl->netboot) {
|
||
|
- load_netboot_image(&error_fatal);
|
||
|
- ipl->qipl.netboot_start_addr = cpu_to_be64(ipl->start_addr);
|
||
|
- }
|
||
|
s390_ipl_set_boot_menu(ipl);
|
||
|
s390_ipl_prepare_qipl(cpu);
|
||
|
}
|
||
|
diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h
|
||
|
index 57cd125769..b2105b616a 100644
|
||
|
--- a/hw/s390x/ipl.h
|
||
|
+++ b/hw/s390x/ipl.h
|
||
|
@@ -134,11 +134,8 @@ void s390_ipl_clear_reset_request(void);
|
||
|
/*
|
||
|
* The QEMU IPL Parameters will be stored at absolute address
|
||
|
* 204 (0xcc) which means it is 32-bit word aligned but not
|
||
|
- * double-word aligned.
|
||
|
- * Placement of data fields in this area must account for
|
||
|
- * their alignment needs. E.g., netboot_start_address must
|
||
|
- * have an offset of 4 + n * 8 bytes within the struct in order
|
||
|
- * to keep it double-word aligned.
|
||
|
+ * double-word aligned. Placement of 64-bit data fields in this
|
||
|
+ * area must account for their alignment needs.
|
||
|
* The total size of the struct must never exceed 28 bytes.
|
||
|
* This definition must be kept in sync with the definition
|
||
|
* in pc-bios/s390-ccw/iplb.h.
|
||
|
@@ -146,9 +143,9 @@ void s390_ipl_clear_reset_request(void);
|
||
|
struct QemuIplParameters {
|
||
|
uint8_t qipl_flags;
|
||
|
uint8_t reserved1[3];
|
||
|
- uint64_t netboot_start_addr;
|
||
|
+ uint64_t reserved2;
|
||
|
uint32_t boot_menu_timeout;
|
||
|
- uint8_t reserved2[12];
|
||
|
+ uint8_t reserved3[12];
|
||
|
} QEMU_PACKED;
|
||
|
typedef struct QemuIplParameters QemuIplParameters;
|
||
|
|
||
|
@@ -178,7 +175,6 @@ struct S390IPLState {
|
||
|
char *initrd;
|
||
|
char *cmdline;
|
||
|
char *firmware;
|
||
|
- char *netboot_fw;
|
||
|
uint8_t cssid;
|
||
|
uint8_t ssid;
|
||
|
uint16_t devno;
|
||
|
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
|
||
|
index b61392bac1..29a89a0c31 100644
|
||
|
--- a/hw/s390x/s390-virtio-ccw.c
|
||
|
+++ b/hw/s390x/s390-virtio-ccw.c
|
||
|
@@ -197,11 +197,10 @@ static void s390_memory_init(MemoryRegion *ram)
|
||
|
static void s390_init_ipl_dev(const char *kernel_filename,
|
||
|
const char *kernel_cmdline,
|
||
|
const char *initrd_filename, const char *firmware,
|
||
|
- const char *netboot_fw, bool enforce_bios)
|
||
|
+ bool enforce_bios)
|
||
|
{
|
||
|
Object *new = object_new(TYPE_S390_IPL);
|
||
|
DeviceState *dev = DEVICE(new);
|
||
|
- char *netboot_fw_prop;
|
||
|
|
||
|
if (kernel_filename) {
|
||
|
qdev_prop_set_string(dev, "kernel", kernel_filename);
|
||
|
@@ -212,11 +211,6 @@ static void s390_init_ipl_dev(const char *kernel_filename,
|
||
|
qdev_prop_set_string(dev, "cmdline", kernel_cmdline);
|
||
|
qdev_prop_set_string(dev, "firmware", firmware);
|
||
|
qdev_prop_set_bit(dev, "enforce_bios", enforce_bios);
|
||
|
- netboot_fw_prop = object_property_get_str(new, "netboot_fw", &error_abort);
|
||
|
- if (!strlen(netboot_fw_prop)) {
|
||
|
- qdev_prop_set_string(dev, "netboot_fw", netboot_fw);
|
||
|
- }
|
||
|
- g_free(netboot_fw_prop);
|
||
|
object_property_add_child(qdev_get_machine(), TYPE_S390_IPL,
|
||
|
new);
|
||
|
object_unref(new);
|
||
|
@@ -284,7 +278,7 @@ static void ccw_init(MachineState *machine)
|
||
|
s390_init_ipl_dev(machine->kernel_filename, machine->kernel_cmdline,
|
||
|
machine->initrd_filename,
|
||
|
machine->firmware ?: "s390-ccw.img",
|
||
|
- "s390-netboot.img", true);
|
||
|
+ true);
|
||
|
|
||
|
dev = qdev_new(TYPE_S390_PCI_HOST_BRIDGE);
|
||
|
object_property_add_child(qdev_get_machine(), TYPE_S390_PCI_HOST_BRIDGE,
|
||
|
diff --git a/pc-bios/meson.build b/pc-bios/meson.build
|
||
|
index 8602b45b9b..ea85c54c86 100644
|
||
|
--- a/pc-bios/meson.build
|
||
|
+++ b/pc-bios/meson.build
|
||
|
@@ -66,7 +66,6 @@ blobs = [
|
||
|
'kvmvapic.bin',
|
||
|
'pvh.bin',
|
||
|
's390-ccw.img',
|
||
|
- 's390-netboot.img',
|
||
|
'slof.bin',
|
||
|
'skiboot.lid',
|
||
|
'palcode-clipper',
|
||
|
--
|
||
|
2.39.3
|
||
|
|