This patch makes sure that VGA is initialized before it is used. Without
this fix, LinuxBIOS crashes if the CONSOLE_LOG_LEVEL is high enough. Additionally, The VGA option rom will be executed if either CONFIG_PCI_ROM_RUN=1 or CONFIG_CONSOLE_VGA=1. Signed-off-by: Roman Kononov <kononov195-lbl@yahoo.com> Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2587 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
ba43064d32
commit
778a42b129
|
@ -633,17 +633,39 @@ void pci_dev_set_subsystem(device_t dev, unsigned vendor, unsigned device)
|
||||||
|
|
||||||
void pci_dev_init(struct device *dev)
|
void pci_dev_init(struct device *dev)
|
||||||
{
|
{
|
||||||
#if CONFIG_PCI_ROM_RUN == 1
|
#if CONFIG_CONSOLE_VGA == 1
|
||||||
|
extern int vga_inited;
|
||||||
|
#endif
|
||||||
|
#if CONFIG_PCI_ROM_RUN == 1 || CONFIG_CONSOLE_VGA == 1
|
||||||
struct rom_header *rom, *ram;
|
struct rom_header *rom, *ram;
|
||||||
|
|
||||||
|
#if CONFIG_PCI_ROM_RUN != 1
|
||||||
|
/* We want to execute VGA option ROMs when CONFIG_CONSOLE_VGA
|
||||||
|
* is set but CONFIG_PCI_ROM_RUN is not. In this case we skip
|
||||||
|
* all other option ROM types.
|
||||||
|
*/
|
||||||
|
if (dev->class!=PCI_CLASS_DISPLAY_VGA)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
rom = pci_rom_probe(dev);
|
rom = pci_rom_probe(dev);
|
||||||
if (rom == NULL)
|
if (rom == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ram = pci_rom_load(dev, rom);
|
ram = pci_rom_load(dev, rom);
|
||||||
if (ram == NULL)
|
if (ram == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
run_bios(dev, ram);
|
run_bios(dev, ram);
|
||||||
|
|
||||||
|
#if CONFIG_CONSOLE_VGA == 1
|
||||||
|
/* vga_inited is a trigger of the VGA console code.
|
||||||
|
*
|
||||||
|
* Only set it if we enabled VGA console, and if we
|
||||||
|
* just initialized a VGA card.
|
||||||
|
*/
|
||||||
|
vga_inited|=dev->class==PCI_CLASS_DISPLAY_VGA;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,12 +62,9 @@ struct rom_header * pci_rom_probe(struct device *dev)
|
||||||
|
|
||||||
static void *pci_ram_image_start = (void *)PCI_RAM_IMAGE_START;
|
static void *pci_ram_image_start = (void *)PCI_RAM_IMAGE_START;
|
||||||
|
|
||||||
#if CONFIG_CONSOLE_VGA == 1
|
#if CONFIG_CONSOLE_VGA == 1 && CONFIG_CONSOLE_VGA_MULTI == 0
|
||||||
extern int vga_inited; // defined in vga_console.c
|
|
||||||
#if CONFIG_CONSOLE_VGA_MULTI == 0
|
|
||||||
extern device_t vga_pri; // the primary vga device, defined in device.c
|
extern device_t vga_pri; // the primary vga device, defined in device.c
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_header)
|
struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_header)
|
||||||
{
|
{
|
||||||
|
@ -96,7 +93,6 @@ struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_heade
|
||||||
printk_debug("copying VGA ROM Image from 0x%x to 0x%x, 0x%x bytes\n",
|
printk_debug("copying VGA ROM Image from 0x%x to 0x%x, 0x%x bytes\n",
|
||||||
rom_header, PCI_VGA_RAM_IMAGE_START, rom_size);
|
rom_header, PCI_VGA_RAM_IMAGE_START, rom_size);
|
||||||
memcpy(PCI_VGA_RAM_IMAGE_START, rom_header, rom_size);
|
memcpy(PCI_VGA_RAM_IMAGE_START, rom_header, rom_size);
|
||||||
vga_inited = 1;
|
|
||||||
return (struct rom_header *) (PCI_VGA_RAM_IMAGE_START);
|
return (struct rom_header *) (PCI_VGA_RAM_IMAGE_START);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue