summaryrefslogtreecommitdiffstats
path: root/src/device
diff options
context:
space:
mode:
Diffstat (limited to 'src/device')
-rw-r--r--src/device/pci_rom.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/device/pci_rom.c b/src/device/pci_rom.c
index a454c9e0ae02..debefb248ce3 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;
}