CoffeeLake Intel(R) Firmware Support Package (FSP) Integration Guide
|
4 FSP Porting Recommendation
Here listed some notes or recommendation when porting with FSP.
4.1 Locking PAM register
FSP 2.0 introduced EndOfFirmware Notify phase callback which is a recommended place for locking PAM registers so FSP by default implemented this way. If it is still too early to lock PAM registers then the PAM locking code inside FSP can be disabled by UPD -> FSP_S_TEST_CONFIG -> SkipPamLock or SA policy -> _SI_PREMEM_POLICY_STRUCT -> SA_MISC_PEI_CONFIG -> SkipPamLock, and platform or wrapper code should do the PAM locking right before booting OS (so do it outside FSP instead) by programming one PCI config space register as below.
This PAM locking step has to been applied in all boot paths including S3 resume. To lock PAM regsiter:
4.2 Locking SMRAM register
Since SMRAM locking is recommended to be locked before any 3rd party OpROM execution and highly depending on platform code implementation, the FSP code by default will not lock it. The platform or FSP Wrapper code should lock SMRAM by below programming step before any 3rd partiy OpRom execution (and should be locked in S3 resume right before OS waking vector).
4.3 Locking SMI register
Global SMI bit is recommended to be locked before any 3rd party OpROM execution and highly depending on platform code implementation after SMM configuration. FSP by default will not lock it. Boot loader is responsible for locking below regsiters after SMM configuration. Set AcpiBase + 0x30[0] to 1b to enable global SMI. Set PMC PCI offset A0h[4] = 1b to lock SMI.
4.4 Verify below settings are correct for your platforms
PMC PciCfgSpace is not PCI compliant.FSP will hide the PMC controller to avoid external software or OS from corrupting the BAR addresses. FSP will program the PMC controller IO and MMIO BAR's with below addresses. Please use this addrerss in the wrapper code instead of reading from PMC controller.
Register | Values |
---|---|
ABASE | 0x1800 |
PWRMBASE | 0xFE000000 |
PCIEXBAR_BASE_ADDRESS | 0xE0000000 |
- Note
- :
- Boot Loader can use different value for PCIEXBAR_BASE_ADDRESS either by modifying the UPD (under FSP-T) or by overriding the PCIEXBAR (B0:D0:F0:R60h) before calling FspMemoryInit Api.
- Boot Loader should avoid using conflicting address when reprogramming PCIEXBAR_BASE_ADDRESS than the recommended one.
4.5 FSP_STATUS_RESET_REQUIRED
As per FSP External Architecture Specification version 2.0, Any reset required in the FSP flow will be reported as return status FSP_STATUS_RESET_REQUIREDx by the API.It is the bootloader responsibility to reset the system according to the reset type requested.
Below table specifies the return status returned by FSP API and the requested reset type.
FSP_STATUS_RESET_REQUIRED Code | Reset Type requested |
---|---|
0x40000001 | Cold Reset |
0x40000002 | Warm Reset |
0x40000003 | Global Reset - Puts the system to Global reset through Heci or Full Reset through PCH |
0x40000004 | Reserved |
0x40000005 | Reserved |
0x40000006 | Reserved |
0x40000007 | Reserved |
0x40000008 | Reserved |
Generated on Wed Aug 22 2018 17:48:55 for CoffeeLake Intel(R) Firmware Support Package (FSP) Integration Guide by 1.8.10