soc/intel/cannonlake: Allow setting of PCIe subsystem IDs after FSP SiliconInit

Change-Id: Ie5c7d497e4a64a2f5e2960a2cdca8e5780dc07ea
This commit is contained in:
Jeremy Soller
2020-08-24 14:49:06 -06:00
parent 264a0fee22
commit fbf0bd5b7e

View File

@@ -646,6 +646,53 @@ void platform_fsp_silicon_init_params_cb(FSPS_UPD *supd)
params->PeiGraphicsPeimInit = 1; params->PeiGraphicsPeimInit = 1;
else else
params->PeiGraphicsPeimInit = 0; params->PeiGraphicsPeimInit = 0;
/* Disable setting subsystem ID, which causes it to lock */
struct svid_ssid_init_entry {
union {
struct {
uint64_t reg:12;
uint64_t function:3;
uint64_t device:5;
uint64_t bus:8;
uint64_t reserved1:4;
uint64_t segment:16;
uint64_t reserved2:16;
};
uint64_t segbusdevfuncregister;
};
struct {
uint16_t svid;
uint16_t ssid;
};
uint32_t reserved;
};
const struct svid_ssid_init_entry ssid_table[] = {{{}, {}, }, };
params->SiSsidTablePtr = (uintptr_t)ssid_table;
params->SiNumberOfSsidTableEntry = 1;
uint16_t svid = CONFIG_SUBSYSTEM_VENDOR_ID;
uint16_t sdid = CONFIG_SUBSYSTEM_DEVICE_ID;
/* Program XHCI SSID/SVID before FSP silicon init */
dev = pcidev_path_on_root(PCH_DEVFN_XHCI);
if (!svid || !sdid) {
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
pci_read_config32(dev, PCI_VENDOR_ID));
} else {
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
((sdid & 0xffff) << 16) | (svid & 0xffff));
}
/* Program HDAudio SSID/SVID before FSP silicon init */
dev = pcidev_path_on_root(PCH_DEVFN_HDA);
if (!svid || !sdid) {
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
pci_read_config32(dev, PCI_VENDOR_ID));
} else {
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
((sdid & 0xffff) << 16) | (svid & 0xffff));
}
} }
/* Mainboard GPIO Configuration */ /* Mainboard GPIO Configuration */