Patrick Rudolph (siro@das-labor.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14220
-gerrit
commit ceb39483ac4be6c3e84f053b791610777c287ef7 Author: Patrick Rudolph siro@das-labor.org Date: Fri Mar 18 18:14:35 2016 +0100
device/pci_rom: Move Option Rom code into pci_rom
Move the Option Rom code out of pci_device.c into pci_rom.c. As more changes the the code will follow, this is only for a clear view purpose.
Change-Id: Iacdff8618d080d7c928d307756662fe33ee13cf0 Signed-off-by: Patrick Rudolph siro@das-labor.org --- src/device/pci_device.c | 68 +-------------------------------------- src/device/pci_rom.c | 76 ++++++++++++++++++++++++++++++++++++++++++++ src/include/device/pci_rom.h | 1 + 3 files changed, 78 insertions(+), 67 deletions(-)
diff --git a/src/device/pci_device.c b/src/device/pci_device.c index 5123229..5f02955 100644 --- a/src/device/pci_device.c +++ b/src/device/pci_device.c @@ -24,9 +24,7 @@ * Copyright 1997 -- 1999 Martin Mares mj@atrey.karlin.mff.cuni.cz */
-#include <arch/acpi.h> #include <arch/io.h> -#include <bootmode.h> #include <console/console.h> #include <stdlib.h> #include <stdint.h> @@ -651,74 +649,10 @@ void pci_dev_set_subsystem(struct device *dev, unsigned vendor, unsigned device) ((device & 0xffff) << 16) | (vendor & 0xffff)); }
-#if CONFIG_VGA_ROM_RUN -static int should_run_oprom(struct device *dev) -{ - static int should_run = -1; - - if (should_run >= 0) - return should_run; - - /* Don't run VGA option ROMs, unless we have to print - * something on the screen before the kernel is loaded. - */ - should_run = !IS_ENABLED(CONFIG_BOOTMODE_STRAPS) || - developer_mode_enabled() || recovery_mode_enabled(); - -#if CONFIG_CHROMEOS - if (!should_run) - should_run = vboot_wants_oprom(); -#endif - if (!should_run) - printk(BIOS_DEBUG, "Not running VGA Option ROM\n"); - return should_run; -} - -static int should_load_oprom(struct device *dev) -{ - /* If S3_VGA_ROM_RUN is disabled, skip running VGA option - * ROMs when coming out of an S3 resume. - */ - if (!IS_ENABLED(CONFIG_S3_VGA_ROM_RUN) && acpi_is_wakeup_s3() && - ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA)) - return 0; - if (IS_ENABLED(CONFIG_ALWAYS_LOAD_OPROM)) - return 1; - if (should_run_oprom(dev)) - return 1; - - return 0; -} -#endif /* CONFIG_VGA_ROM_RUN */ - /** Default handler: only runs the relevant PCI BIOS. */ void pci_dev_init(struct device *dev) { -#if CONFIG_VGA_ROM_RUN - struct rom_header *rom, *ram; - - /* Only execute VGA ROMs. */ - if (((dev->class >> 8) != PCI_CLASS_DISPLAY_VGA)) - return; - - if (!should_load_oprom(dev)) - return; - - rom = pci_rom_probe(dev); - if (rom == NULL) - return; - - ram = pci_rom_load(dev, rom); - if (ram == NULL) - return; - - if (!should_run_oprom(dev)) - return; - - run_bios(dev, (unsigned long)ram); - gfx_set_init_done(1); - printk(BIOS_DEBUG, "VGA Option ROM was run\n"); -#endif /* CONFIG_VGA_ROM_RUN */ + pci_rom_load_and_run(dev); }
/** Default device operation for PCI devices */ diff --git a/src/device/pci_rom.c b/src/device/pci_rom.c index 8366fea..acda996 100644 --- a/src/device/pci_rom.c +++ b/src/device/pci_rom.c @@ -24,6 +24,8 @@ #include <device/pci_ops.h> #include <string.h> #include <cbfs.h> +#include <bootmode.h> +#include <arch/acpi.h>
/* Rmodules don't like weak symbols. */ u32 __attribute__((weak)) map_oprom_vendev(u32 vendev) { return vendev; } @@ -169,3 +171,77 @@ struct rom_header *pci_rom_load(struct device *dev, pci_ram_image_start += rom_size; return (struct rom_header *) (pci_ram_image_start-rom_size); } + +#if CONFIG_VGA_ROM_RUN +static int should_run_oprom(struct device *dev) +{ + static int should_run = -1; + + if (should_run >= 0) + return should_run; + + /* Don't run VGA option ROMs, unless we have to print + * something on the screen before the kernel is loaded. + */ + should_run = !IS_ENABLED(CONFIG_BOOTMODE_STRAPS) || + developer_mode_enabled() || recovery_mode_enabled(); + +#if CONFIG_CHROMEOS + if (!should_run) + should_run = vboot_wants_oprom(); +#endif + if (!should_run) + printk(BIOS_DEBUG, "Not running VGA Option ROM\n"); + return should_run; +} + +static int should_load_oprom(struct device *dev) +{ + /* If S3_VGA_ROM_RUN is disabled, skip running VGA option + * ROMs when coming out of an S3 resume. + */ + if (!IS_ENABLED(CONFIG_S3_VGA_ROM_RUN) && acpi_is_wakeup_s3() && + ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA)) + return 0; + if (IS_ENABLED(CONFIG_ALWAYS_LOAD_OPROM)) + return 1; + if (should_run_oprom(dev)) + return 1; + + return 0; +} +#endif /* CONFIG_VGA_ROM_RUN */ + +/* TODO: find a good name for this function */ +/** + * Load or run PCI Option Roms. + * TODO: support non VGA Option Roms. + * @param dev Pointer to the device + */ +void pci_rom_load_and_run(struct device *dev) +{ +#if CONFIG_VGA_ROM_RUN + struct rom_header *rom, *ram; + /* Only execute VGA ROMs. */ + if (((dev->class >> 8) != PCI_CLASS_DISPLAY_VGA)) + return; + + if (!should_load_oprom(dev)) + return; + + rom = pci_rom_probe(dev); + if (rom == NULL) + return; + + ram = pci_rom_load(dev, rom); + if (ram == NULL) + return; + + if (!should_run_oprom(dev)) + return; + + run_bios(dev, (unsigned long)ram); + gfx_set_init_done(1); + printk(BIOS_DEBUG, "VGA Option ROM was run\n"); +#endif /* CONFIG_VGA_ROM_RUN */ +} diff --git a/src/include/device/pci_rom.h b/src/include/device/pci_rom.h index 2fb2f7a..26b7c23 100644 --- a/src/include/device/pci_rom.h +++ b/src/include/device/pci_rom.h @@ -35,6 +35,7 @@ struct pci_data {
struct rom_header *pci_rom_probe(struct device *dev); struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_header); +void pci_rom_load_and_run(struct device *dev); u32 map_oprom_vendev(u32 vendev);
#endif