Reviewed-by: jiewen....@intel.com
> -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Chasel, > Chiu > Sent: Thursday, November 23, 2017 10:30 AM > To: edk2-devel@lists.01.org > Cc: Yao, Jiewen <jiewen....@intel.com> > Subject: [edk2] [PATCH] IntelFsp2WrapperPkg: Support UPD allocation outside > FspWrapper > > UPD allocation and patching can be done outside FspWrapper > as implementation choice so adding a PCD to select between > original FspWrapper allocation model or outside model > > Cc: Jiewen Yao <jiewen....@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Chasel Chiu <chasel.c...@intel.com> > --- > .../FspmWrapperPeim/FspmWrapperPeim.c | 25 ++++--- > .../FspmWrapperPeim/FspmWrapperPeim.inf | 3 +- > .../FspsWrapperPeim/FspsWrapperPeim.c | 84 > +++++++++++----------- > .../FspsWrapperPeim/FspsWrapperPeim.inf | 3 +- > IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec | 13 +++- > 5 files changed, 76 insertions(+), 52 deletions(-) > > diff --git a/IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.c > b/IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.c > index f1d1cd6421..7b7c5f5d86 100644 > --- a/IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.c > +++ b/IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.c > @@ -3,7 +3,7 @@ > register TemporaryRamDonePpi to call TempRamExit API, and register > MemoryDiscoveredPpi > notify to call FspSiliconInit API. > > - Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR> > This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD > License > which accompanies this distribution. The full text of the license may be > found at > @@ -63,20 +63,29 @@ PeiFspMemoryInit ( > DEBUG ((DEBUG_INFO, "PeiFspMemoryInit enter\n")); > > FspHobListPtr = NULL; > + FspmUpdDataPtr = NULL; > > - // > - // Copy default FSP-M UPD data from Flash > - // > FspmHeaderPtr = (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 > (PcdFspmBaseAddress)); > DEBUG ((DEBUG_INFO, "FspmHeaderPtr - 0x%x\n", FspmHeaderPtr)); > if (FspmHeaderPtr == NULL) { > return EFI_DEVICE_ERROR; > } > > - FspmUpdDataPtr = (FSPM_UPD_COMMON *)AllocateZeroPool > ((UINTN)FspmHeaderPtr->CfgRegionSize); > - ASSERT (FspmUpdDataPtr != NULL); > - SourceData = (UINTN *)((UINTN)FspmHeaderPtr->ImageBase + > (UINTN)FspmHeaderPtr->CfgRegionOffset); > - CopyMem (FspmUpdDataPtr, SourceData, > (UINTN)FspmHeaderPtr->CfgRegionSize); > + if (PcdGet32 (PcdFspmUpdDataAddress) == 0 && > (FspmHeaderPtr->CfgRegionSize != 0) && (FspmHeaderPtr->CfgRegionOffset != > 0)) { > + // > + // Copy default FSP-M UPD data from Flash > + // > + FspmUpdDataPtr = (FSPM_UPD_COMMON *)AllocateZeroPool > ((UINTN)FspmHeaderPtr->CfgRegionSize); > + ASSERT (FspmUpdDataPtr != NULL); > + SourceData = (UINTN *)((UINTN)FspmHeaderPtr->ImageBase + > (UINTN)FspmHeaderPtr->CfgRegionOffset); > + CopyMem (FspmUpdDataPtr, SourceData, > (UINTN)FspmHeaderPtr->CfgRegionSize); > + } else { > + // > + // External UPD is ready, get the buffer from PCD pointer. > + // > + FspmUpdDataPtr = (FSPM_UPD_COMMON *)PcdGet32 > (PcdFspmUpdDataAddress); > + ASSERT (FspmUpdDataPtr != NULL); > + } > > DEBUG ((DEBUG_INFO, "UpdateFspmUpdData enter\n")); > UpdateFspmUpdData ((VOID *)FspmUpdDataPtr); > diff --git a/IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf > b/IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf > index 2b3d240d08..542356b582 100644 > --- a/IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf > +++ b/IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf > @@ -59,7 +59,8 @@ > IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > > [Pcd] > - gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress ## CONSUMES > + gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress ## > CONSUMES > + gIntelFsp2WrapperTokenSpaceGuid.PcdFspmUpdDataAddress ## > CONSUMES > > [Sources] > FspmWrapperPeim.c > diff --git a/IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c > b/IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c > index ddc19c7e8f..70dac7a414 100644 > --- a/IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c > +++ b/IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c > @@ -3,7 +3,7 @@ > register TemporaryRamDonePpi to call TempRamExit API, and register > MemoryDiscoveredPpi > notify to call FspSiliconInit API. > > - Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR> > This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD > License > which accompanies this distribution. The full text of the license may be > found at > @@ -44,14 +44,14 @@ extern EFI_PEI_NOTIFY_DESCRIPTOR > mS3EndOfPeiNotifyDesc; > extern EFI_GUID gFspHobGuid; > > /** > -This function handles S3 resume task at the end of PEI > + This function handles S3 resume task at the end of PEI > > -@param[in] PeiServices Pointer to PEI Services Table. > -@param[in] NotifyDesc Pointer to the descriptor for the Notification > event > that > -caused this function to execute. > -@param[in] Ppi Pointer to the PPI data associated with this > function. > + @param[in] PeiServices Pointer to PEI Services Table. > + @param[in] NotifyDesc Pointer to the descriptor for the Notification > event that > + caused this function to execute. > + @param[in] Ppi Pointer to the PPI data associated with this > function. > > -@retval EFI_STATUS Always return EFI_SUCCESS > + @retval EFI_STATUS Always return EFI_SUCCESS > **/ > EFI_STATUS > EFIAPI > @@ -68,14 +68,14 @@ EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc > = { > }; > > /** > -This function handles S3 resume task at the end of PEI > + This function handles S3 resume task at the end of PEI > > -@param[in] PeiServices Pointer to PEI Services Table. > -@param[in] NotifyDesc Pointer to the descriptor for the Notification > event > that > -caused this function to execute. > -@param[in] Ppi Pointer to the PPI data associated with this > function. > + @param[in] PeiServices Pointer to PEI Services Table. > + @param[in] NotifyDesc Pointer to the descriptor for the Notification > event that > + caused this function to execute. > + @param[in] Ppi Pointer to the PPI data associated with this > function. > > -@retval EFI_STATUS Always return EFI_SUCCESS > + @retval EFI_STATUS Always return EFI_SUCCESS > **/ > EFI_STATUS > EFIAPI > @@ -130,13 +130,13 @@ S3EndOfPeiNotify( > } > > /** > -Return Hob list produced by FSP. > + Return Hob list produced by FSP. > > -@param[in] PeiServices The pointer to the PEI Services Table. > -@param[in] This The pointer to this instance of this PPI. > -@param[out] FspHobList The pointer to Hob list produced by FSP. > + @param[in] PeiServices The pointer to the PEI Services Table. > + @param[in] This The pointer to this instance of this PPI. > + @param[out] FspHobList The pointer to Hob list produced by FSP. > > -@return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > + @return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > **/ > EFI_STATUS > EFIAPI > @@ -157,13 +157,13 @@ EFI_PEI_PPI_DESCRIPTOR > mPeiFspSiliconInitDonePpi = { > }; > > /** > -Return Hob list produced by FSP. > + Return Hob list produced by FSP. > > -@param[in] PeiServices The pointer to the PEI Services Table. > -@param[in] This The pointer to this instance of this PPI. > -@param[out] FspHobList The pointer to Hob list produced by FSP. > + @param[in] PeiServices The pointer to the PEI Services Table. > + @param[in] This The pointer to this instance of this PPI. > + @param[out] FspHobList The pointer to Hob list produced by FSP. > > -@return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > + @return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > **/ > EFI_STATUS > EFIAPI > @@ -209,14 +209,14 @@ EFI_PEI_NOTIFY_DESCRIPTOR > mPeiMemoryDiscoveredNotifyDesc = { > }; > > /** > -This function is called after PEI core discover memory and finish migration. > + This function is called after PEI core discover memory and finish > migration. > > -@param[in] PeiServices Pointer to PEI Services Table. > -@param[in] NotifyDesc Pointer to the descriptor for the Notification > event > that > -caused this function to execute. > -@param[in] Ppi Pointer to the PPI data associated with this > function. > + @param[in] PeiServices Pointer to PEI Services Table. > + @param[in] NotifyDesc Pointer to the descriptor for the Notification > event that > + caused this function to execute. > + @param[in] Ppi Pointer to the PPI data associated with this > function. > > -@retval EFI_STATUS Always return EFI_SUCCESS > + @retval EFI_STATUS Always return EFI_SUCCESS > **/ > EFI_STATUS > EFIAPI > @@ -234,22 +234,27 @@ PeiMemoryDiscoveredNotify ( > FSPS_UPD_COMMON *FspsUpdDataPtr; > UINTN *SourceData; > > - > DEBUG ((DEBUG_INFO, "PeiMemoryDiscoveredNotify enter\n")); > - > - // > - // Copy default FSP-S UPD data from Flash > - // > + FspsUpdDataPtr = NULL; > + > FspsHeaderPtr = (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 > (PcdFspsBaseAddress)); > DEBUG ((DEBUG_INFO, "FspsHeaderPtr - 0x%x\n", FspsHeaderPtr)); > if (FspsHeaderPtr == NULL) { > return EFI_DEVICE_ERROR; > } > > - FspsUpdDataPtr = (FSPS_UPD_COMMON *)AllocateZeroPool > ((UINTN)FspsHeaderPtr->CfgRegionSize); > - ASSERT (FspsUpdDataPtr != NULL); > - SourceData = (UINTN *)((UINTN)FspsHeaderPtr->ImageBase + > (UINTN)FspsHeaderPtr->CfgRegionOffset); > - CopyMem (FspsUpdDataPtr, SourceData, > (UINTN)FspsHeaderPtr->CfgRegionSize); > + if (PcdGet32 (PcdFspsUpdDataAddress) == 0 && > (FspsHeaderPtr->CfgRegionSize != 0) && (FspsHeaderPtr->CfgRegionOffset != 0)) > { > + // > + // Copy default FSP-S UPD data from Flash > + // > + FspsUpdDataPtr = (FSPS_UPD_COMMON *)AllocateZeroPool > ((UINTN)FspsHeaderPtr->CfgRegionSize); > + ASSERT (FspsUpdDataPtr != NULL); > + SourceData = (UINTN *)((UINTN)FspsHeaderPtr->ImageBase + > (UINTN)FspsHeaderPtr->CfgRegionOffset); > + CopyMem (FspsUpdDataPtr, SourceData, > (UINTN)FspsHeaderPtr->CfgRegionSize); > + } else { > + FspsUpdDataPtr = (FSPS_UPD_COMMON *)PcdGet32 > (PcdFspsUpdDataAddress); > + ASSERT (FspsUpdDataPtr != NULL); > + } > > UpdateFspsUpdData ((VOID *)FspsUpdDataPtr); > > @@ -314,7 +319,7 @@ FspsWrapperInit ( > // > Status = PeiServicesNotifyPpi (&mPeiMemoryDiscoveredNotifyDesc); > ASSERT_EFI_ERROR (Status); > - > + > // > // Register EndOfPei Notify for S3 to run FSP NotifyPhase > // > @@ -342,7 +347,6 @@ FspsWrapperPeimEntryPoint ( > IN CONST EFI_PEI_SERVICES **PeiServices > ) > { > - > DEBUG ((DEBUG_INFO, "FspsWrapperPeimEntryPoint\n")); > > FspsWrapperInit (); > diff --git a/IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf > b/IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf > index c858e7097d..cd87a99c40 100644 > --- a/IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf > +++ b/IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf > @@ -66,7 +66,8 @@ > gEfiPeiMemoryDiscoveredPpiGuid ## NOTIFY > > [Pcd] > - gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress ## CONSUMES > + gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress ## > CONSUMES > + gIntelFsp2WrapperTokenSpaceGuid.PcdFspsUpdDataAddress ## > CONSUMES > > [Guids] > gFspHobGuid ## CONSUMES ## HOB > diff --git a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > b/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > index c0881852c5..7634619f80 100644 > --- a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > +++ b/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > @@ -1,7 +1,7 @@ > ## @file > # Provides drivers and definitions to support fsp in EDKII bios. > # > -# Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR> > +# Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR> > # This program and the accompanying materials are licensed and made > available under > # the terms and conditions of the BSD License that accompanies this > distribution. > # The full text of the license may be found at > @@ -95,4 +95,13 @@ > > [PcdsFixedAtBuild, PcdsPatchableInModule,PcdsDynamic,PcdsDynamicEx] > > gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress|0x00000000|UINT32| > 0x00001001 > - > \ No newline at end of file > + # > + # To provide flexibility for platform to pre-allocate FSP UPD buffer > + # > + # The PCDs define the pre-allocated FSPM and FSPS UPD Data Buffer > Address. > + # 0x00000000 - Platform will not pre-allocate UPD buffer before > FspWrapper module > + # non-zero - Platform will pre-allocate UPD buffer and patch this value > to > + # buffer address before FspWrapper module executing. > + # > + > gIntelFsp2WrapperTokenSpaceGuid.PcdFspmUpdDataAddress|0x00000000|UI > NT32|0x50000000 > + > gIntelFsp2WrapperTokenSpaceGuid.PcdFspsUpdDataAddress|0x00000000|UIN > T32|0x50000001 > \ No newline at end of file > -- > 2.13.3.windows.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel