[PATCH v5 23/46] pci: Allow the video BIOS to work in SPL with QEMU
Simon Glass
sjg at chromium.org
Thu Jul 27 02:49:56 CEST 2023
Hi Bin,
On Mon, 17 Jul 2023 at 00:20, Bin Meng <bmeng.cn at gmail.com> wrote:
>
> Hi Simon,
>
> On Sun, Jul 16, 2023 at 11:39 AM Simon Glass <sjg at chromium.org> wrote:
> >
> > QEMU emulates two common machines (Q35 and i440fx) which use mapping to
> > determine whether RAM is present below 1MB. In order to copy the video
> > BIOS to c0000 we need to flip this mapping over to RAM. This does not
> > happen automatically until SPL has finished running.
> >
> > Switch in RAM at these address so that the video BIOS can be loaded and
> > run.
> >
> > Create a generic qemu.h header to avoid having to #ifdef the header in
> > pci_rom.c
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > Changes in v5:
> > - Use the existing QEMU code instead
> >
> > arch/x86/cpu/qemu/qemu.c | 5 +++--
> > drivers/pci/pci_rom.c | 5 +++++
> > include/qemu.h | 14 ++++++++++++++
> > 3 files changed, 22 insertions(+), 2 deletions(-)
> > create mode 100644 include/qemu.h
> >
> > diff --git a/arch/x86/cpu/qemu/qemu.c b/arch/x86/cpu/qemu/qemu.c
> > index 274978c023b6..a84d2aceda3c 100644
> > --- a/arch/x86/cpu/qemu/qemu.c
> > +++ b/arch/x86/cpu/qemu/qemu.c
> > @@ -7,6 +7,7 @@
> > #include <cpu_func.h>
> > #include <init.h>
> > #include <pci.h>
> > +#include <qemu.h>
> > #include <qfw.h>
> > #include <dm/platdata.h>
> > #include <asm/irq.h>
> > @@ -48,7 +49,7 @@ static void enable_pm_ich9(void)
> > pci_write_config32(ICH9_PM, PMBA, CONFIG_ACPI_PM1_BASE | 1);
> > }
> >
> > -static void qemu_chipset_init(void)
> > +void qemu_x86_chipset_init(void)
> > {
> > u16 device, xbcs;
> > int pam, i;
> > @@ -119,7 +120,7 @@ int print_cpuinfo(void)
> >
> > int arch_early_init_r(void)
> > {
> > - qemu_chipset_init();
> > + qemu_x86_chipset_init();
> >
> > return 0;
> > }
> > diff --git a/drivers/pci/pci_rom.c b/drivers/pci/pci_rom.c
> > index f0dfe6314907..447957fb23aa 100644
> > --- a/drivers/pci/pci_rom.c
> > +++ b/drivers/pci/pci_rom.c
> > @@ -34,6 +34,7 @@
> > #include <malloc.h>
> > #include <pci.h>
> > #include <pci_rom.h>
> > +#include <qemu.h>
> > #include <vesa.h>
> > #include <video.h>
> > #include <acpi/acpi_s3.h>
> > @@ -185,6 +186,10 @@ static int pci_rom_load(struct pci_rom_header *rom_header,
> > return -ENOMEM;
> > *allocedp = true;
> > #endif
> > + /* QEMU hacks */
> > + if (IS_ENABLED(CONFIG_X86) && IS_ENABLED(CONFIG_QEMU))
> > + qemu_x86_chipset_init();
> > +
>
> Maybe I did not say it clearly in the previous version. I think we
> should avoid polluting the generic pci_rom.c codes.
>
> First of all, these are not QEMU hacks, but are required operations
> against a specific Intel chipset. QEMU just emulates the real hardware
> behavior.
>
> Second, we should update x86 SPL codes to call qemu_chipset_init() for
> QEMU x86_64.
OK I understand now. I sent a new series that includes a new patch\.
Regards,
Simon
More information about the U-Boot
mailing list