From 8cc2cab42733049636233098931a913093989e46 Mon Sep 17 00:00:00 2001 From: stanley Date: Sat, 15 Jul 2023 06:50:01 +0800 Subject: [PATCH] feat: [EHL] enable BoardNotifyPhase during FWU (#1939) The FSP may request for a reboot when some features are enable/disable. The SiliconInit FW update is one case for the "FSP requested boot". Without the patch, SBL has no way to get the notification from CallFspNotifyPhase. The patch introduces a feature, PcdEnableFwuNotify, to allow SBL to keep BoardNotifyPhase during firmware update. On EHL, the feature can be enabled by "disable BIOS Lock". Verify: EHL-CRB Signed-off-by: Stanley Chang --- BootloaderCorePkg/BootloaderCorePkg.dec | 3 ++- BootloaderCorePkg/BootloaderCorePkg.dsc | 1 + BootloaderCorePkg/Stage2/Stage2.c | 2 +- BootloaderCorePkg/Stage2/Stage2.inf | 3 ++- Platform/ElkhartlakeBoardPkg/BoardConfig.py | 2 ++ .../Library/Stage2BoardInitLib/Stage2BoardInitLib.c | 1 + 6 files changed, 9 insertions(+), 3 deletions(-) diff --git a/BootloaderCorePkg/BootloaderCorePkg.dec b/BootloaderCorePkg/BootloaderCorePkg.dec index 223d41a3..35745e39 100644 --- a/BootloaderCorePkg/BootloaderCorePkg.dec +++ b/BootloaderCorePkg/BootloaderCorePkg.dec @@ -245,6 +245,7 @@ gPlatformModuleTokenSpaceGuid.PcdLegacyEfSegmentEnabled | TRUE | BOOLEAN | 0x20000214 gPlatformModuleTokenSpaceGuid.PcdEnableDts | FALSE | BOOLEAN | 0x20000215 gPlatformModuleTokenSpaceGuid.PcdEnablePciePm | FALSE | BOOLEAN | 0x20000222 + gPlatformModuleTokenSpaceGuid.PcdEnableFwuNotify | FALSE | BOOLEAN | 0x20000225 [PcdsDynamic] - gPlatformModuleTokenSpaceGuid.PcdFspResetStatus | 0 | UINT32 | 0x20000224 \ No newline at end of file + gPlatformModuleTokenSpaceGuid.PcdFspResetStatus | 0 | UINT32 | 0x20000224 diff --git a/BootloaderCorePkg/BootloaderCorePkg.dsc b/BootloaderCorePkg/BootloaderCorePkg.dsc index abaf4a19..efe6d590 100644 --- a/BootloaderCorePkg/BootloaderCorePkg.dsc +++ b/BootloaderCorePkg/BootloaderCorePkg.dsc @@ -346,6 +346,7 @@ gPlatformModuleTokenSpaceGuid.PcdEnableDts | $(ENABLE_DTS) gPlatformModuleTokenSpaceGuid.PcdEnablePciePm | $(ENABLE_PCIE_PM) gPlatformCommonLibTokenSpaceGuid.PcdFspNoEop | $(HAVE_NO_FSP_EOP) + gPlatformModuleTokenSpaceGuid.PcdEnableFwuNotify | $(ENABLE_FWU_NOTIFY) !ifdef $(S3_DEBUG) gPlatformModuleTokenSpaceGuid.PcdS3DebugEnabled | $(S3_DEBUG) diff --git a/BootloaderCorePkg/Stage2/Stage2.c b/BootloaderCorePkg/Stage2/Stage2.c index 51bdf213..5f05cc64 100644 --- a/BootloaderCorePkg/Stage2/Stage2.c +++ b/BootloaderCorePkg/Stage2/Stage2.c @@ -557,7 +557,7 @@ SecStartup ( AddMeasurePoint (0x30B0); if (!EFI_ERROR (Status)) { - if (BootMode != BOOT_ON_FLASH_UPDATE) { + if (FeaturePcdGet(PcdEnableFwuNotify) || (BootMode != BOOT_ON_FLASH_UPDATE)) { BoardNotifyPhase (PostPciEnumeration); AddMeasurePoint (0x30C0); } diff --git a/BootloaderCorePkg/Stage2/Stage2.inf b/BootloaderCorePkg/Stage2/Stage2.inf index 8090b298..f7a787e4 100755 --- a/BootloaderCorePkg/Stage2/Stage2.inf +++ b/BootloaderCorePkg/Stage2/Stage2.inf @@ -1,6 +1,6 @@ ## @file # -# Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.
+# Copyright (c) 2016 - 2023, Intel Corporation. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -152,6 +152,7 @@ gPlatformCommonLibTokenSpaceGuid.PcdBuildSmmHobs gPlatformCommonLibTokenSpaceGuid.PcdBootPerformanceMask gPlatformModuleTokenSpaceGuid.PcdSblResiliencyEnabled + gPlatformModuleTokenSpaceGuid.PcdEnableFwuNotify [Depex] TRUE diff --git a/Platform/ElkhartlakeBoardPkg/BoardConfig.py b/Platform/ElkhartlakeBoardPkg/BoardConfig.py index 35e78929..b95e6275 100644 --- a/Platform/ElkhartlakeBoardPkg/BoardConfig.py +++ b/Platform/ElkhartlakeBoardPkg/BoardConfig.py @@ -56,6 +56,8 @@ class Board(BaseBoard): # 0: Disable 1: Enable 2: Auto (disable for UEFI payload, enable for others) self.ENABLE_SMM_REBASE = 2 self.ENABLE_FRAMEBUFFER_INIT = 1 + # allow FSP notify during FWU + self.ENABLE_FWU_NOTIFY = 1 # EHL FSP Ready To Boot does not call EOP self.HAVE_NO_FSP_EOP = 1 diff --git a/Platform/ElkhartlakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c b/Platform/ElkhartlakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c index 8c996c6f..6d83ecbe 100644 --- a/Platform/ElkhartlakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c +++ b/Platform/ElkhartlakeBoardPkg/Library/Stage2BoardInitLib/Stage2BoardInitLib.c @@ -1890,6 +1890,7 @@ UpdateFspConfig ( if (GetBootMode () == BOOT_ON_FLASH_UPDATE) { Fspscfg->PchLockDownBiosInterface = FALSE; + Fspscfg->PchLockDownBiosLock = FALSE; Fspscfg->RtcBiosInterfaceLock = FALSE; Fspscfg->PchSbAccessUnlock = TRUE; Fspscfg->SkipMpInit = TRUE;