https://bugzilla.tianocore.org/show_bug.cgi?id=3525
After PciSegmentLib using Dynamic PCD for Pcie base address such long delay found in FSP. The root cause is some of the PCD service PPIs not shadowed to memory and flash cache may have been disabled in NotifyPhase stage. Solution is to shadow all PCD service PPIs to memory. Signed-off-by: GregX Yeh <[email protected]> Cc: Jian J Wang <[email protected]> Cc: Hao A Wu <[email protected]> Cc: Dandan Bi <[email protected]> Cc: Liming Gao <[email protected]> Reviewed-by: Dandan Bi <[email protected]> --- MdeModulePkg/Universal/PCD/Pei/Pcd.c | 71 +++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Universal/PCD/Pei/Pcd.c b/MdeModulePkg/Universal/PCD/Pei/Pcd.c index 9c6346924f..f31e0be35f 100644 --- a/MdeModulePkg/Universal/PCD/Pei/Pcd.c +++ b/MdeModulePkg/Universal/PCD/Pei/Pcd.c @@ -1,7 +1,7 @@ /** @file All Pcd Ppi services are implemented here. -Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR> (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -339,6 +339,75 @@ PcdPeimInit ( { EFI_STATUS Status; + Status = PeiServicesRegisterForShadow (FileHandle); + if (Status == EFI_ALREADY_STARTED) { + // + // This is now starting in memory, the second time starting. + // + EFI_PEI_PPI_DESCRIPTOR *OldPpiList; + EFI_PEI_PPI_DESCRIPTOR *OldPpiList2; + VOID *Ppi; + VOID *Ppi2; + + OldPpiList = NULL; + Status = PeiServicesLocatePpi ( + &gPcdPpiGuid, + 0, + &OldPpiList, + &Ppi + ); + ASSERT_EFI_ERROR (Status); + + if (OldPpiList != NULL) { + Status = PeiServicesReInstallPpi (OldPpiList, &mPpiList[0]); + ASSERT_EFI_ERROR (Status); + } + + OldPpiList2 = NULL; + Status = PeiServicesLocatePpi ( + &gGetPcdInfoPpiGuid, + 0, + &OldPpiList2, + &Ppi2 + ); + ASSERT_EFI_ERROR (Status); + + if (OldPpiList2 != NULL) { + Status = PeiServicesReInstallPpi (OldPpiList2, &mPpiList2[0]); + ASSERT_EFI_ERROR (Status); + } + + OldPpiList = NULL; + Status = PeiServicesLocatePpi ( + &gEfiPeiPcdPpiGuid, + 0, + &OldPpiList, + &Ppi + ); + ASSERT_EFI_ERROR (Status); + + if (OldPpiList != NULL) { + Status = PeiServicesReInstallPpi (OldPpiList, &mPpiList[1]); + ASSERT_EFI_ERROR (Status); + } + + OldPpiList2 = NULL; + Status = PeiServicesLocatePpi ( + &gEfiGetPcdInfoPpiGuid, + 0, + &OldPpiList2, + &Ppi2 + ); + ASSERT_EFI_ERROR (Status); + + if (OldPpiList2 != NULL) { + Status = PeiServicesReInstallPpi (OldPpiList2, &mPpiList2[1]); + ASSERT_EFI_ERROR (Status); + } + + return Status; + } + BuildPcdDatabase (FileHandle); // -- 2.32.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#79152): https://edk2.groups.io/g/devel/message/79152 Mute This Topic: https://groups.io/mt/84835142/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
