In the original code vga_inited is set, then run_bios() is
called, which does printk(), which is allowed using the VGA.
The patch puts vga_inited=1 and run_bios() in the right order.
Roman
----------------------
Index: src/devices/pci_rom.c
===================================================================
--- src/devices/pci_rom.c (revision 2536)
+++ src/devices/pci_rom.c (working copy)
@@ -69,7 +69,7 @@
#endif
#endif
-struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_header)
+struct rom_header *pci_rom_load_and_run(struct device *dev, struct rom_header *rom_header)
{
struct pci_data * rom_data;
unsigned long rom_address;
@@ -96,6 +96,7 @@
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);
memcpy(PCI_VGA_RAM_IMAGE_START, rom_header, rom_size);
+ run_bios(dev,(unsigned long)PCI_VGA_RAM_IMAGE_START);
vga_inited = 1;
return (struct rom_header *) (PCI_VGA_RAM_IMAGE_START);
#endif
@@ -103,6 +104,7 @@
printk_debug("copying non-VGA ROM Image from 0x%x to 0x%x, 0x%x bytes\n",
rom_header, pci_ram_image_start, rom_size);
memcpy(pci_ram_image_start, rom_header, rom_size);
+ run_bios(dev,(unsigned long)pci_ram_image_start);
pci_ram_image_start += rom_size;
return (struct rom_header *) (pci_ram_image_start-rom_size);
}
Index: src/devices/pci_device.c
===================================================================
--- src/devices/pci_device.c (revision 2536)
+++ src/devices/pci_device.c (working copy)
@@ -634,16 +634,12 @@
void pci_dev_init(struct device *dev)
{
#if CONFIG_PCI_ROM_RUN == 1
- struct rom_header *rom, *ram;
+ struct rom_header *rom;
rom = pci_rom_probe(dev);
if (rom == NULL)
return;
- ram = pci_rom_load(dev, rom);
- if (ram == NULL)
- return;
-
- run_bios(dev, ram);
+ pci_rom_load_and_run(dev, rom);
#endif
}
Index: src/include/device/pci_rom.h
===================================================================
--- src/include/device/pci_rom.h (revision 2536)
+++ src/include/device/pci_rom.h (working copy)
@@ -34,7 +34,8 @@
};
extern struct rom_header * pci_rom_probe(struct device *dev);
-extern struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_header);
+extern struct rom_header *pci_rom_load_and_run(struct device *dev, struct rom_header *rom_header);
+void run_bios(struct device *dev,unsigned long addr);
extern void pci_dev_init(struct device *dev);