diff options
Diffstat (limited to 'src/device')
-rw-r--r-- | src/device/pci_rom.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/device/pci_rom.c b/src/device/pci_rom.c index a454c9e0ae..debefb248c 100644 --- a/src/device/pci_rom.c +++ b/src/device/pci_rom.c @@ -245,10 +245,19 @@ pci_rom_acpi_fill_vfct(const struct device *device, acpi_vfct_t *vfct_struct, header->PCIFunction = PCI_FUNC(device->path.pci.devfn); header->PCIDevice = PCI_SLOT(device->path.pci.devfn); header->ImageLength = rom->size * 512; - memcpy((void *)&header->VbiosContent, rom, header->ImageLength); + memcpy((void *)header->VbiosContent, rom, header->ImageLength); vfct_struct->VBIOSImageOffset = (size_t)header - (size_t)vfct_struct; + /* Calculate and set checksum for VBIOS data if FSP GOP driver used, + Since GOP driver modifies ATOMBIOS tables at end of VBIOS */ + if (CONFIG(RUN_FSP_GOP)) { + /* Clear existing checksum before recalculating */ + header->VbiosContent[VFCT_VBIOS_CHECKSUM_OFFSET] = 0; + header->VbiosContent[VFCT_VBIOS_CHECKSUM_OFFSET] = + acpi_checksum(header->VbiosContent, header->ImageLength); + } + current += header->ImageLength; return current; } |