summaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
Diffstat (limited to 'src/device')
-rw-r--r--src/device/pci_rom.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/device/pci_rom.c b/src/device/pci_rom.c
index 7322e57f45..31fe115c89 100644
--- a/src/device/pci_rom.c
+++ b/src/device/pci_rom.c
@@ -209,8 +209,6 @@ pci_rom_acpi_fill_vfct(struct device *device, struct acpi_vfct *vfct_struct,
struct acpi_vfct_image_hdr *header = &vfct_struct->image_hdr;
struct rom_header *rom;
- vfct_struct->VBIOSImageOffset = (size_t)header - (size_t)vfct_struct;
-
rom = check_initialized(device);
if (!rom)
rom = pci_rom_probe(device);
@@ -233,6 +231,8 @@ pci_rom_acpi_fill_vfct(struct device *device, struct acpi_vfct *vfct_struct,
header->ImageLength = rom->size * 512;
memcpy((void *)&header->VbiosContent, rom, header->ImageLength);
+ vfct_struct->VBIOSImageOffset = (size_t)header - (size_t)vfct_struct;
+
current += header->ImageLength;
return current;
}
@@ -241,9 +241,6 @@ unsigned long
pci_rom_write_acpi_tables(struct device *device, unsigned long current,
struct acpi_rsdp *rsdp)
{
- struct acpi_vfct *vfct;
- struct rom_header *rom;
-
/* Only handle VGA devices */
if ((device->class >> 8) != PCI_CLASS_DISPLAY_VGA)
return current;
@@ -252,19 +249,18 @@ pci_rom_write_acpi_tables(struct device *device, unsigned long current,
if (!device->enabled)
return current;
- /* Probe for option rom */
- rom = pci_rom_probe(device);
- if (!rom)
- return current;
-
/* AMD/ATI uses VFCT */
if (device->vendor == PCI_VENDOR_ID_ATI) {
+ struct acpi_vfct *vfct;
+
current = ALIGN_UP(current, 8);
- printk(BIOS_DEBUG, "ACPI: * VFCT at %lx\n", current);
vfct = (struct acpi_vfct *)current;
acpi_create_vfct(device, vfct, pci_rom_acpi_fill_vfct);
- current += vfct->header.length;
- acpi_add_table(rsdp, vfct);
+ if (vfct->header.length) {
+ printk(BIOS_DEBUG, "ACPI: * VFCT at %lx\n", current);
+ current += vfct->header.length;
+ acpi_add_table(rsdp, vfct);
+ }
}
return current;