diff --git a/Platform/ApollolakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c b/Platform/ApollolakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c index 29f4d313..9a8fe908 100644 --- a/Platform/ApollolakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c +++ b/Platform/ApollolakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c @@ -629,6 +629,10 @@ UpdatePayloadId ( UINT32 PayloadId; UINT32 GpioLevel; + if (GetBootMode() == BOOT_ON_FLASH_UPDATE) { + return; + } + PayloadId = 0; GenericCfgData = (GEN_CFG_DATA *)FindConfigDataByTag (CDATA_GEN_TAG); if (GenericCfgData != NULL) { diff --git a/Platform/CoffeelakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c b/Platform/CoffeelakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c index bf0ea3ea..ddf3a659 100644 --- a/Platform/CoffeelakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c +++ b/Platform/CoffeelakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c @@ -91,7 +91,6 @@ ((UINT32) (((A).PinNum) | (((A).Group) << 16))) FVID_TABLE *mFvidPointer = NULL; -SILICON_CFG_DATA *mSiliconCfgData = NULL; /// /// Overcurrent pins, the values match the setting of EDS, please refer to EDS for more details /// @@ -617,7 +616,6 @@ PatchCpuSsdtTable ( } } - /** Update bootloader reserved region. @@ -1002,6 +1000,58 @@ GpioInit ( return GpioConfigurePads (GpioEntries, (GPIO_INIT_CONFIG *) GpioCfgDataBuffer); } +/** + Update current boot Payload ID. + +**/ +VOID +UpdatePayloadId ( + VOID + ) +{ + EFI_STATUS Status; + GEN_CFG_DATA *GenericCfgData; + SILICON_CFG_DATA *SiliconCfgData; + UINT32 PayloadSelGpioData; + UINT32 PayloadSelGpioPad; + UINT32 PayloadId; + + PayloadId = GetPayloadId (); + GenericCfgData = (GEN_CFG_DATA *)FindConfigDataByTag (CDATA_GEN_TAG); + if (GenericCfgData != NULL) { + if (GenericCfgData->PayloadId == AUTO_PAYLOAD_ID_SIGNATURE) { + PayloadId = 0; + } else { + PayloadId = GenericCfgData->PayloadId; + } + } + + // + // Switch payloads based on configured GPIO pin + // + SiliconCfgData = (SILICON_CFG_DATA *)FindConfigDataByTag (CDATA_SILICON_TAG); + if ((SiliconCfgData != NULL) && (SiliconCfgData->PayloadSelGpio.Enable != 0)){ + if (IsPchLp() == TRUE) { + PayloadSelGpioPad = GPIO_CFG_PIN_TO_PAD(SiliconCfgData->PayloadSelGpio) | (GPIO_CNL_LP_CHIPSET_ID << 24); + } else { + PayloadSelGpioPad = GPIO_CFG_PIN_TO_PAD(SiliconCfgData->PayloadSelGpio) | (GPIO_CNL_H_CHIPSET_ID << 24); + } + Status = GpioGetInputValue (PayloadSelGpioPad, &PayloadSelGpioData); + if (!EFI_ERROR (Status)) { + if (PayloadSelGpioData == 0) { + PayloadId = 0; + } else { + if ((GenericCfgData != NULL) && (GenericCfgData->PayloadId == AUTO_PAYLOAD_ID_SIGNATURE)) { + PayloadId = UEFI_PAYLOAD_ID_SIGNATURE; + } + } + DEBUG ((DEBUG_INFO, "Set PayloadId to 0x%08X based on GPIO config\n", PayloadId)); + } + } + + SetPayloadId (PayloadId); +} + /** Initialize Board specific things in Stage2 Phase @@ -1013,7 +1063,6 @@ BoardInit ( IN BOARD_INIT_PHASE InitPhase ) { - GEN_CFG_DATA *GenericCfgData; SILICON_CFG_DATA *SiliconCfgData; EFI_STATUS Status; UINT32 RgnBase; @@ -1025,9 +1074,7 @@ BoardInit ( UINT32 AddressPort; UINTN SpiBar0; UINT32 Length; - UINT32 PayloadSelGpioData; - UINT32 PayloadSelGpioPad; - UINT32 PayloadId; + EFI_PEI_GRAPHICS_INFO_HOB *FspGfxHob; LOADER_GLOBAL_DATA *LdrGlobal; @@ -1037,43 +1084,8 @@ BoardInit ( GpioInit (); SpiConstructor (); - PayloadId = GetPayloadId (); - GenericCfgData = (GEN_CFG_DATA *)FindConfigDataByTag (CDATA_GEN_TAG); - if (GenericCfgData != NULL) { - if (GenericCfgData->PayloadId == AUTO_PAYLOAD_ID_SIGNATURE) { - PayloadId = 0; - } else { - PayloadId = GenericCfgData->PayloadId; - } - } - - // - // Switch payloads based on configured GPIO pin - // - SiliconCfgData = (SILICON_CFG_DATA *)FindConfigDataByTag (CDATA_SILICON_TAG); - if ((SiliconCfgData != NULL) && (SiliconCfgData->PayloadSelGpio.Enable != 0)){ - if (IsPchLp() == TRUE) { - PayloadSelGpioPad = GPIO_CFG_PIN_TO_PAD(SiliconCfgData->PayloadSelGpio) | (GPIO_CNL_LP_CHIPSET_ID << 24); - } else { - PayloadSelGpioPad = GPIO_CFG_PIN_TO_PAD(SiliconCfgData->PayloadSelGpio) | (GPIO_CNL_H_CHIPSET_ID << 24); - } - Status = GpioGetInputValue (PayloadSelGpioPad, &PayloadSelGpioData); - if (!EFI_ERROR (Status)) { - if (PayloadSelGpioData == 0) { - PayloadId = 0; - } else { - if ((GenericCfgData != NULL) && (GenericCfgData->PayloadId == AUTO_PAYLOAD_ID_SIGNATURE)) { - PayloadId = UEFI_PAYLOAD_ID_SIGNATURE; - } - } - DEBUG ((DEBUG_INFO, "Set PayloadId to 0x%08X based on GPIO config\n", PayloadId)); - } - } - mSiliconCfgData = SiliconCfgData; - - SetPayloadId (PayloadId); - - if (GetLoaderGlobalDataPointer ()->BootMode != BOOT_ON_FLASH_UPDATE) { + if (GetBootMode() != BOOT_ON_FLASH_UPDATE) { + UpdatePayloadId (); UpdateBlRsvdRegion (); } Status = GetComponentInfo (FLASH_MAP_SIG_VARIABLE, &RgnBase, &RgnSize); @@ -2028,6 +2040,7 @@ PlatformUpdateAcpiTable ( UINT16 Size; LOADER_GLOBAL_DATA *LdrGlobal; EFI_STATUS Status; + SILICON_CFG_DATA *SiliconCfgData; LdrGlobal = (LOADER_GLOBAL_DATA *)GetLoaderGlobalDataPointer(); @@ -2038,7 +2051,8 @@ PlatformUpdateAcpiTable ( End = (UINT8 *)Table + Table->Length; if (Table->Signature == EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE) { - if ((mSiliconCfgData == NULL) || (mSiliconCfgData->ECEnable == 0)) { + SiliconCfgData = (SILICON_CFG_DATA *)FindConfigDataByTag (CDATA_SILICON_TAG); + if ((SiliconCfgData == NULL) || (SiliconCfgData->ECEnable == 0)) { return EFI_UNSUPPORTED; } }