forked from rpms/qemu-kvm
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
7.0 KiB
165 lines
7.0 KiB
1 month ago
|
From fd6de3c5e97bdf13a39342fc71815a20c66867ae Mon Sep 17 00:00:00 2001
|
||
|
From: Bernhard Beschow <shentey@gmail.com>
|
||
|
Date: Wed, 8 May 2024 19:55:07 +0200
|
||
|
Subject: [PATCH 043/100] hw/i386/pc_sysfw: Alias rather than copy isa-bios
|
||
|
region
|
||
|
|
||
|
RH-Author: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
RH-MergeRequest: 245: SEV-SNP support
|
||
|
RH-Jira: RHEL-39544
|
||
|
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
||
|
RH-Acked-by: Bandan Das <bdas@redhat.com>
|
||
|
RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
|
||
|
RH-Commit: [43/91] f64dab2a091838a10a9b94e3d09ea11432b0809f (bonzini/rhel-qemu-kvm)
|
||
|
|
||
|
In the -bios case the "isa-bios" memory region is an alias to the BIOS mapped
|
||
|
to the top of the 4G memory boundary. Do the same in the -pflash case, but only
|
||
|
for new machine versions for migration compatibility. This establishes common
|
||
|
behavior and makes pflash commands work in the "isa-bios" region which some
|
||
|
real-world legacy bioses rely on.
|
||
|
|
||
|
Note that in the sev_enabled() case, the "isa-bios" memory region in the -pflash
|
||
|
case will now also point to encrypted memory, just like it already does in the
|
||
|
-bios case.
|
||
|
|
||
|
When running `info mtree` before and after this commit with
|
||
|
`qemu-system-x86_64 -S -drive \
|
||
|
if=pflash,format=raw,readonly=on,file=/usr/share/qemu/bios-256k.bin` and running
|
||
|
`diff -u before.mtree after.mtree` results in the following changes in the
|
||
|
memory tree:
|
||
|
|
||
|
| --- before.mtree
|
||
|
| +++ after.mtree
|
||
|
| @@ -71,7 +71,7 @@
|
||
|
| 0000000000000000-ffffffffffffffff (prio -1, i/o): pci
|
||
|
| 00000000000a0000-00000000000bffff (prio 1, i/o): vga-lowmem
|
||
|
| 00000000000c0000-00000000000dffff (prio 1, rom): pc.rom
|
||
|
| - 00000000000e0000-00000000000fffff (prio 1, rom): isa-bios
|
||
|
| + 00000000000e0000-00000000000fffff (prio 1, romd): alias isa-bios @system.flash0 0000000000020000-000000000003ffff
|
||
|
| 00000000000a0000-00000000000bffff (prio 1, i/o): alias smram-region @pci 00000000000a0000-00000000000bffff
|
||
|
| 00000000000c0000-00000000000c3fff (prio 1, i/o): alias pam-pci @pci 00000000000c0000-00000000000c3fff
|
||
|
| 00000000000c4000-00000000000c7fff (prio 1, i/o): alias pam-pci @pci 00000000000c4000-00000000000c7fff
|
||
|
| @@ -108,7 +108,7 @@
|
||
|
| 0000000000000000-ffffffffffffffff (prio -1, i/o): pci
|
||
|
| 00000000000a0000-00000000000bffff (prio 1, i/o): vga-lowmem
|
||
|
| 00000000000c0000-00000000000dffff (prio 1, rom): pc.rom
|
||
|
| - 00000000000e0000-00000000000fffff (prio 1, rom): isa-bios
|
||
|
| + 00000000000e0000-00000000000fffff (prio 1, romd): alias isa-bios @system.flash0 0000000000020000-000000000003ffff
|
||
|
| 00000000000a0000-00000000000bffff (prio 1, i/o): alias smram-region @pci 00000000000a0000-00000000000bffff
|
||
|
| 00000000000c0000-00000000000c3fff (prio 1, i/o): alias pam-pci @pci 00000000000c0000-00000000000c3fff
|
||
|
| 00000000000c4000-00000000000c7fff (prio 1, i/o): alias pam-pci @pci 00000000000c4000-00000000000c7fff
|
||
|
| @@ -131,11 +131,14 @@
|
||
|
| memory-region: pc.ram
|
||
|
| 0000000000000000-0000000007ffffff (prio 0, ram): pc.ram
|
||
|
|
|
||
|
| +memory-region: system.flash0
|
||
|
| + 00000000fffc0000-00000000ffffffff (prio 0, romd): system.flash0
|
||
|
| +
|
||
|
| memory-region: pci
|
||
|
| 0000000000000000-ffffffffffffffff (prio -1, i/o): pci
|
||
|
| 00000000000a0000-00000000000bffff (prio 1, i/o): vga-lowmem
|
||
|
| 00000000000c0000-00000000000dffff (prio 1, rom): pc.rom
|
||
|
| - 00000000000e0000-00000000000fffff (prio 1, rom): isa-bios
|
||
|
| + 00000000000e0000-00000000000fffff (prio 1, romd): alias isa-bios @system.flash0 0000000000020000-000000000003ffff
|
||
|
|
|
||
|
| memory-region: smram
|
||
|
| 00000000000a0000-00000000000bffff (prio 0, ram): alias smram-low @pc.ram 00000000000a0000-00000000000bffff
|
||
|
|
||
|
Note that in both cases the "system" memory region contains the entry
|
||
|
|
||
|
00000000fffc0000-00000000ffffffff (prio 0, romd): system.flash0
|
||
|
|
||
|
but the "system.flash0" memory region only appears standalone when "isa-bios" is
|
||
|
an alias.
|
||
|
|
||
|
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
|
||
|
Message-ID: <20240508175507.22270-7-shentey@gmail.com>
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
(cherry picked from commit a44ea3fa7f2aa1d809fdca1b84a52695b53d8ad0)
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
---
|
||
|
hw/i386/pc.c | 1 +
|
||
|
hw/i386/pc_piix.c | 1 +
|
||
|
hw/i386/pc_q35.c | 1 +
|
||
|
hw/i386/pc_sysfw.c | 8 +++++++-
|
||
|
include/hw/i386/pc.h | 1 +
|
||
|
5 files changed, 11 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
|
||
|
index 1a34bc4522..660a59c63b 100644
|
||
|
--- a/hw/i386/pc.c
|
||
|
+++ b/hw/i386/pc.c
|
||
|
@@ -1967,6 +1967,7 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
|
||
|
pcmc->has_reserved_memory = true;
|
||
|
pcmc->enforce_aligned_dimm = true;
|
||
|
pcmc->enforce_amd_1tb_hole = true;
|
||
|
+ pcmc->isa_bios_alias = true;
|
||
|
/* BIOS ACPI tables: 128K. Other BIOS datastructures: less than 4K reported
|
||
|
* to be used at the moment, 32K should be enough for a while. */
|
||
|
pcmc->acpi_data_size = 0x20000 + 0x8000;
|
||
|
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
|
||
|
index bef3e8b73e..dbb7f2ed17 100644
|
||
|
--- a/hw/i386/pc_piix.c
|
||
|
+++ b/hw/i386/pc_piix.c
|
||
|
@@ -975,6 +975,7 @@ static void pc_machine_rhel7_options(MachineClass *m)
|
||
|
m->alias = "pc";
|
||
|
m->is_default = 1;
|
||
|
m->smp_props.prefer_sockets = true;
|
||
|
+ pcmc->isa_bios_alias = false;
|
||
|
}
|
||
|
|
||
|
static void pc_init_rhel760(MachineState *machine)
|
||
|
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
|
||
|
index dedc86eec9..f9900ad798 100644
|
||
|
--- a/hw/i386/pc_q35.c
|
||
|
+++ b/hw/i386/pc_q35.c
|
||
|
@@ -735,6 +735,7 @@ static void pc_q35_machine_rhel940_options(MachineClass *m)
|
||
|
m->desc = "RHEL-9.4.0 PC (Q35 + ICH9, 2009)";
|
||
|
pcmc->smbios_stream_product = "RHEL";
|
||
|
pcmc->smbios_stream_version = "9.4.0";
|
||
|
+ pcmc->isa_bios_alias = false;
|
||
|
|
||
|
compat_props_add(m->compat_props, pc_rhel_9_5_compat,
|
||
|
pc_rhel_9_5_compat_len);
|
||
|
diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c
|
||
|
index 82d37cb376..ac88ad4eb9 100644
|
||
|
--- a/hw/i386/pc_sysfw.c
|
||
|
+++ b/hw/i386/pc_sysfw.c
|
||
|
@@ -135,6 +135,7 @@ static void pc_system_flash_map(PCMachineState *pcms,
|
||
|
MemoryRegion *rom_memory)
|
||
|
{
|
||
|
X86MachineState *x86ms = X86_MACHINE(pcms);
|
||
|
+ PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
|
||
|
hwaddr total_size = 0;
|
||
|
int i;
|
||
|
BlockBackend *blk;
|
||
|
@@ -184,7 +185,12 @@ static void pc_system_flash_map(PCMachineState *pcms,
|
||
|
|
||
|
if (i == 0) {
|
||
|
flash_mem = pflash_cfi01_get_memory(system_flash);
|
||
|
- pc_isa_bios_init(&x86ms->isa_bios, rom_memory, flash_mem);
|
||
|
+ if (pcmc->isa_bios_alias) {
|
||
|
+ x86_isa_bios_init(&x86ms->isa_bios, rom_memory, flash_mem,
|
||
|
+ true);
|
||
|
+ } else {
|
||
|
+ pc_isa_bios_init(&x86ms->isa_bios, rom_memory, flash_mem);
|
||
|
+ }
|
||
|
|
||
|
/* Encrypt the pflash boot ROM */
|
||
|
if (sev_enabled()) {
|
||
|
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
|
||
|
index 467e7fb52f..3f53ec73ac 100644
|
||
|
--- a/include/hw/i386/pc.h
|
||
|
+++ b/include/hw/i386/pc.h
|
||
|
@@ -122,6 +122,7 @@ struct PCMachineClass {
|
||
|
bool enforce_aligned_dimm;
|
||
|
bool broken_reserved_end;
|
||
|
bool enforce_amd_1tb_hole;
|
||
|
+ bool isa_bios_alias;
|
||
|
|
||
|
/* generate legacy CPU hotplug AML */
|
||
|
bool legacy_cpu_hotplug;
|
||
|
--
|
||
|
2.39.3
|
||
|
|