From nobody Tue Feb 10 01:15:58 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+50641+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+50641+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1573712561; cv=none; d=zoho.com; s=zohoarc; b=WCnFJnv2pwsKk2HBncav7pzz7J3vM5IP0Zib+tsAOfg+fGSmsoL9WiuoP5wT01uG5Q2z/GEuYlydaQ4lAfRPlecZpOVXSBxbF9rJdMVNmZqYCS1Gq3W1OZGOJvLI14vtv1gQKI6L3PcqrVzkWVchP1HqnNB4VRNJt+1MOmZvrRU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1573712561; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=7EDDM/aFqe7zr7qbrye3IeUygO+kXTNRaCgTGL/uLDg=; b=m7M0Hj+gQ8cXfQfVTy9dzVke2OVX6TGSc9Iz/ZJxNQkhccm7J/ZH2v4I54/XTTfFSCDDryccmytyZxQzYrbI3BZ10lpAf4SaDjZsJSgefTd68KufFT1sUVgCDCnrbLpcLuTYj917zF3zPlsOl+q8PT4BWOThyJ34tyCAknZQjfU= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+50641+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1573712561121223.0232089218316; Wed, 13 Nov 2019 22:22:41 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id VG22YY1788612xdNwOG4S6cI; Wed, 13 Nov 2019 22:22:40 -0800 X-Received: from mga09.intel.com (mga09.intel.com []) by mx.groups.io with SMTP id smtpd.web11.413.1573712557549508303 for ; Wed, 13 Nov 2019 22:22:38 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Nov 2019 22:22:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,302,1569308400"; d="scan'208";a="216641634" X-Received: from nldesimo-desk1.amr.corp.intel.com ([10.7.159.63]) by orsmga002.jf.intel.com with ESMTP; 13 Nov 2019 22:22:35 -0800 From: "Nate DeSimone" To: devel@edk2.groups.io Cc: Michael Kubacki , Chasel Chiu , Liming Gao Subject: [edk2-devel] [edk2-platforms] [PATCH V1 13/13] MinPlatformPkg: Remove BoardInitLib dependency from PlatformSecLib Date: Wed, 13 Nov 2019 22:06:55 -0800 Message-Id: <20191114060655.5161-14-nathaniel.l.desimone@intel.com> In-Reply-To: <20191114060655.5161-1-nathaniel.l.desimone@intel.com> References: <20191114060655.5161-1-nathaniel.l.desimone@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,nathaniel.l.desimone@intel.com X-Gm-Message-State: IJxfWsqhjauZsOoaGGroYjsVx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1573712560; bh=pnrxyDC/cpP9jDswuc4VOwZeyXCPVTW+iduv/mvRd2g=; h=Cc:Date:From:Reply-To:Subject:To; b=MpzZiQ3XF+qKt5x70WSQLa6tYEgj9vsgn5mMizeba4DzQc06EfLiOqhDBNRYTVdYLLd CH27kBmYhAyZn2BU45XZZlEhxmdeLxC0e9pa4iG4Qj9DXjqjtGA4rFtvXwLFpM1zgijpS G8aJsOs4HKRBieMhQrvOF9Lu+n8/IoUhYME= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" SecFspWrapperPlatformSecLib contains the implementation of SecPlatformDisableTemporaryMemory(), which SecMain in UefiCpuPkg will call as part of its implementation of EFI_PEI_TEMPORARY_RAM_DONE_PPI. For platforms that use FSP, the implementation of SecPlatformDisableTemporaryMemory() can be made generic since the chipset specifics will be contained in FspTempRamExit(). The Minimum Platform Specification provides the BoardPkg two interface hook points, BoardInitBeforeTempRamExit() and BoardInitAfterTempRamExit() which must be called during SecPlatformDisableTemporaryMemory(). Due to EFI_PEI_TEMPORARY_RAM_DONE_PPI being a special case of a PPI that is implemented in SEC, these two functions are the only ones in BoardInitLib that need to be called by SEC. Linking BoardInitLib with SEC places many restrictions on the implementation of that library. The features available to SEC phase code are very minimal. Since this code runs during PEI phase, these restrictions are not actually required. Instead of directly linking with BoardInitLib, SecPlatformDisableTemporaryMemory() shall call BoardInitLib indirectly through a PPI (PLATFORM_INIT_TEMP_RAM_EXIT_PPI.) This PPI is produced by PlatformInitPreMem, which implements the other BoardInitLib calls already, so this change should also slightly reduce the size of the final binary image since less PE/COFF images will need to link with BoardInitLib. Cc: Michael Kubacki Cc: Chasel Chiu Cc: Liming Gao Signed-off-by: Nate DeSimone Reviewed-by: Chasel Chiu --- .../SecFspWrapperPlatformSecLib.inf | 1 + .../SecTempRamDone.c | 36 +++++++-- .../Include/Ppi/PlatformInitTempRamExitPpi.h | 55 ++++++++++++++ .../Intel/MinPlatformPkg/MinPlatformPkg.dec | 2 + .../PlatformInitPei/PlatformInitPreMem.c | 76 ++++++++++++++++++- .../PlatformInitPei/PlatformInitPreMem.inf | 1 + 6 files changed, 159 insertions(+), 12 deletions(-) create mode 100644 Platform/Intel/MinPlatformPkg/Include/Ppi/PlatformInitT= empRamExitPpi.h diff --git a/Platform/Intel/MinPlatformPkg/FspWrapper/Library/SecFspWrapper= PlatformSecLib/SecFspWrapperPlatformSecLib.inf b/Platform/Intel/MinPlatform= Pkg/FspWrapper/Library/SecFspWrapperPlatformSecLib/SecFspWrapperPlatformSec= Lib.inf index 02c720c73d..3465f50126 100644 --- a/Platform/Intel/MinPlatformPkg/FspWrapper/Library/SecFspWrapperPlatfor= mSecLib/SecFspWrapperPlatformSecLib.inf +++ b/Platform/Intel/MinPlatformPkg/FspWrapper/Library/SecFspWrapperPlatfor= mSecLib/SecFspWrapperPlatformSecLib.inf @@ -80,6 +80,7 @@ gTopOfTemporaryRamPpiGuid ## PRODUCES gEfiPeiFirmwareVolumeInfoPpiGuid ## PRODUCES gFspTempRamExitPpiGuid ## CONSUMES + gPlatformInitTempRamExitPpiGuid ## CONSUMES =20 [Pcd] gUefiCpuPkgTokenSpaceGuid.PcdPeiTemporaryRamStackSize ## C= ONSUMES diff --git a/Platform/Intel/MinPlatformPkg/FspWrapper/Library/SecFspWrapper= PlatformSecLib/SecTempRamDone.c b/Platform/Intel/MinPlatformPkg/FspWrapper/= Library/SecFspWrapperPlatformSecLib/SecTempRamDone.c index 922e4ec204..b22cf57d6c 100644 --- a/Platform/Intel/MinPlatformPkg/FspWrapper/Library/SecFspWrapperPlatfor= mSecLib/SecTempRamDone.c +++ b/Platform/Intel/MinPlatformPkg/FspWrapper/Library/SecFspWrapperPlatfor= mSecLib/SecTempRamDone.c @@ -10,6 +10,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent =20 #include #include +#include =20 #include #include @@ -17,7 +18,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include -#include #include =20 /** @@ -29,14 +29,35 @@ SecPlatformDisableTemporaryMemory ( VOID ) { - EFI_STATUS Status; - VOID *TempRamExitParam; - CONST EFI_PEI_SERVICES **PeiServices; - FSP_TEMP_RAM_EXIT_PPI *TempRamExitPpi; + EFI_STATUS Status; + VOID *TempRamExitParam; + CONST EFI_PEI_SERVICES **PeiServices; + FSP_TEMP_RAM_EXIT_PPI *TempRamExitPpi; + PLATFORM_INIT_TEMP_RAM_EXIT_PPI *PlatformInitTempRamExitPpi; =20 DEBUG ((DEBUG_INFO, "SecPlatformDisableTemporaryMemory enter\n")); + PeiServices =3D GetPeiServicesTablePointer (); + ASSERT (PeiServices !=3D NULL); + if (PeiServices =3D=3D NULL) { + return; + } + ASSERT ((*PeiServices) !=3D NULL); + if ((*PeiServices) =3D=3D NULL) { + return; + } + Status =3D (*PeiServices)->LocatePpi ( + PeiServices, + &gPlatformInitTempRamExitPpiGuid, + 0, + NULL, + (VOID **) &PlatformInitTempRamExitPpi + ); + ASSERT_EFI_ERROR (Status); + if (EFI_ERROR (Status)) { + return; + } =20 - Status =3D BoardInitBeforeTempRamExit (); + Status =3D PlatformInitTempRamExitPpi->PlatformInitBeforeTempRamExit (); ASSERT_EFI_ERROR (Status); =20 if (PcdGet8 (PcdFspModeSelection) =3D=3D 1) { @@ -51,7 +72,6 @@ SecPlatformDisableTemporaryMemory ( // // FSP Dispatch mode // - PeiServices =3D GetPeiServicesTablePointer (); Status =3D (*PeiServices)->LocatePpi ( PeiServices, &gFspTempRamExitPpiGuid, @@ -66,7 +86,7 @@ SecPlatformDisableTemporaryMemory ( TempRamExitPpi->TempRamExit (NULL); } =20 - Status =3D BoardInitAfterTempRamExit (); + Status =3D PlatformInitTempRamExitPpi->PlatformInitAfterTempRamExit (); ASSERT_EFI_ERROR (Status); =20 return ; diff --git a/Platform/Intel/MinPlatformPkg/Include/Ppi/PlatformInitTempRamE= xitPpi.h b/Platform/Intel/MinPlatformPkg/Include/Ppi/PlatformInitTempRamExi= tPpi.h new file mode 100644 index 0000000000..590647738c --- /dev/null +++ b/Platform/Intel/MinPlatformPkg/Include/Ppi/PlatformInitTempRamExitPpi.h @@ -0,0 +1,55 @@ +/** @file + This file defines the PPI for notifying PlatformInitPreMem + of temporary memory being disabled. + +Copyright (c) 2019, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef _PLATFORM_INIT_TEMP_RAM_EXIT_PPI_H_ +#define _PLATFORM_INIT_TEMP_RAM_EXIT_PPI_H_ + +#include + +// +// Forward declaration for the PLATFORM_INIT_TEMP_RAM_EXIT_PPI. +// +typedef struct _PLATFORM_INIT_TEMP_RAM_EXIT_PPI PLATFORM_INIT_TEMP_RAM_EXI= T_PPI; + +/** + A hook for platform-specific initialization prior to disabling temporary= RAM. + + @retval EFI_SUCCESS The platform initialization was successful. + @retval EFI_NOT_READY The platform has not been detected yet. +**/ +typedef +EFI_STATUS +(EFIAPI *PLATFORM_INIT_BEFORE_TEMP_RAM_EXIT) ( + VOID + ); + +/** + A hook for platform-specific initialization after disabling temporary RA= M. + + @retval EFI_SUCCESS The platform initialization was successful. + @retval EFI_NOT_READY The platform has not been detected yet. +**/ +typedef +EFI_STATUS +(EFIAPI *PLATFORM_INIT_AFTER_TEMP_RAM_EXIT) ( + VOID + ); + +/// +/// This PPI provides functions for notifying PlatformInitPreMem +/// of temporary memory being disabled. +/// +struct _PLATFORM_INIT_TEMP_RAM_EXIT_PPI { + PLATFORM_INIT_BEFORE_TEMP_RAM_EXIT PlatformInitBeforeTempRamExit; + PLATFORM_INIT_AFTER_TEMP_RAM_EXIT PlatformInitAfterTempRamExit; +}; + +extern EFI_GUID gPlatformInitTempRamExitPpiGuid; + +#endif // _PLATFORM_INIT_TEMP_RAM_EXIT_PPI_H_ diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec b/Platform/In= tel/MinPlatformPkg/MinPlatformPkg.dec index c6b5881646..5dfa4d420e 100644 --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec @@ -28,6 +28,8 @@ gPeiBaseMemoryTestPpiGuid =3D {0xb6ec423c, 0x21d2, 0x490d, {0x85= , 0xc6, 0xdd, 0x58, 0x64, 0xea, 0xa6, 0x74}} gPeiPlatformMemorySizePpiGuid =3D {0x9a7ef41e, 0xc140, 0x4bd1, {0xb8= , 0x84, 0x1e, 0x11, 0x24, 0x0b, 0x4c, 0xe6}} =20 + gPlatformInitTempRamExitPpiGuid =3D {0xbae23646, 0xbd60, 0x4f8b, {0xb3= , 0xf9, 0xf3, 0x91, 0xee, 0x7e, 0xe6, 0xc8}} + [Guids] gMinPlatformPkgTokenSpaceGuid =3D {0x69d13bf0, 0xaf91, 0x4d96, {0xaa= , 0x9f, 0x21, 0x84, 0xc5, 0xce, 0x3b, 0xc0}} =20 diff --git a/Platform/Intel/MinPlatformPkg/PlatformInit/PlatformInitPei/Pla= tformInitPreMem.c b/Platform/Intel/MinPlatformPkg/PlatformInit/PlatformInit= Pei/PlatformInitPreMem.c index c579ff008e..efdeb6a91c 100644 --- a/Platform/Intel/MinPlatformPkg/PlatformInit/PlatformInitPei/PlatformIn= itPreMem.c +++ b/Platform/Intel/MinPlatformPkg/PlatformInit/PlatformInitPei/PlatformIn= itPreMem.c @@ -29,6 +29,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include +#include =20 EFI_STATUS EFIAPI @@ -72,7 +73,31 @@ BaseMemoryTest ( OUT EFI_PHYSICAL_ADDRESS *ErrorAddress ); =20 -static EFI_PEI_NOTIFY_DESCRIPTOR mMemDiscoveredNotifyList =3D { +/** + A hook for platform-specific initialization prior to disabling temporary= RAM. + + @retval EFI_SUCCESS The platform initialization was successful. + @retval EFI_NOT_READY The platform has not been detected yet. +**/ +EFI_STATUS +EFIAPI +PlatformInitBeforeTempRamExit ( + VOID + ); + +/** + A hook for platform-specific initialization after disabling temporary RA= M. + + @retval EFI_SUCCESS The platform initialization was successful. + @retval EFI_NOT_READY The platform has not been detected yet. +**/ +EFI_STATUS +EFIAPI +PlatformInitAfterTempRamExit ( + VOID + ); + +GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_NOTIFY_DESCRIPTOR mMemDiscoveredNoti= fyList =3D { (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINA= TE_LIST), &gEfiPeiMemoryDiscoveredPpiGuid, (EFI_PEIM_NOTIFY_ENTRY_POINT) MemoryDiscoveredPpiNotifyCallback @@ -90,11 +115,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_PPI_DESCRIPTOR m= PpiBootMode =3D { NULL }; =20 -static PEI_BASE_MEMORY_TEST_PPI mPeiBaseMemoryTestPpi =3D { BaseMemory= Test }; +GLOBAL_REMOVE_IF_UNREFERENCED PEI_BASE_MEMORY_TEST_PPI mPeiBaseMemoryT= estPpi =3D { BaseMemoryTest }; =20 -static PEI_PLATFORM_MEMORY_SIZE_PPI mMemoryMemorySizePpi =3D { GetPlatfor= mMemorySize }; +GLOBAL_REMOVE_IF_UNREFERENCED PEI_PLATFORM_MEMORY_SIZE_PPI mMemoryMemorySi= zePpi =3D { GetPlatformMemorySize }; =20 -static EFI_PEI_PPI_DESCRIPTOR mMemPpiList[] =3D { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_PPI_DESCRIPTOR mMemPpiList[] = =3D { { EFI_PEI_PPI_DESCRIPTOR_PPI, &gPeiBaseMemoryTestPpiGuid, @@ -107,6 +132,17 @@ static EFI_PEI_PPI_DESCRIPTOR mMemPpiList[] =3D { }, }; =20 +GLOBAL_REMOVE_IF_UNREFERENCED PLATFORM_INIT_TEMP_RAM_EXIT_PPI mPlatformIni= tTempRamExitPpi =3D { + PlatformInitBeforeTempRamExit, + PlatformInitAfterTempRamExit +}; + +GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_PPI_DESCRIPTOR mPlatformInitTempRamE= xitPpiDesc =3D { + (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), + &gPlatformInitTempRamExitPpiGuid, + &mPlatformInitTempRamExitPpi +}; + /// /// Memory Reserved should be between 125% to 150% of the Current required= memory /// otherwise BdsMisc.c would do a reset to make it 125% to avoid s4 resum= e issues. @@ -391,6 +427,35 @@ MemoryDiscoveredPpiNotifyCallback ( return Status; } =20 +/** + A hook for platform-specific initialization prior to disabling temporary= RAM. + + @retval EFI_SUCCESS The platform initialization was successful. + @retval EFI_NOT_READY The platform has not been detected yet. +**/ +EFI_STATUS +EFIAPI +PlatformInitBeforeTempRamExit ( + VOID + ) +{ + return BoardInitBeforeTempRamExit (); +} + +/** + A hook for platform-specific initialization after disabling temporary RA= M. + + @retval EFI_SUCCESS The platform initialization was successful. + @retval EFI_NOT_READY The platform has not been detected yet. +**/ +EFI_STATUS +EFIAPI +PlatformInitAfterTempRamExit ( + VOID + ) +{ + return BoardInitAfterTempRamExit (); +} =20 /** This function handles PlatformInit task after PeiReadOnlyVariable2 PPI p= roduced @@ -446,6 +511,9 @@ PlatformInitPreMem ( Status =3D BoardInitBeforeMemoryInit (); ASSERT_EFI_ERROR (Status); =20 + Status =3D PeiServicesInstallPpi (&mPlatformInitTempRamExitPpiDesc); + ASSERT_EFI_ERROR (Status); + return Status; } =20 diff --git a/Platform/Intel/MinPlatformPkg/PlatformInit/PlatformInitPei/Pla= tformInitPreMem.inf b/Platform/Intel/MinPlatformPkg/PlatformInit/PlatformIn= itPei/PlatformInitPreMem.inf index af5dbe8772..7ee18eb6d5 100644 --- a/Platform/Intel/MinPlatformPkg/PlatformInit/PlatformInitPei/PlatformIn= itPreMem.inf +++ b/Platform/Intel/MinPlatformPkg/PlatformInit/PlatformInitPei/PlatformIn= itPreMem.inf @@ -53,6 +53,7 @@ gEfiPeiMemoryDiscoveredPpiGuid gEfiPeiMasterBootModePpiGuid ## PRODUCES gEfiPeiBootInRecoveryModePpiGuid ## PRODUCES + gPlatformInitTempRamExitPpiGuid ## PRODUCES gEfiPeiReadOnlyVariable2PpiGuid gPeiBaseMemoryTestPpiGuid gPeiPlatformMemorySizePpiGuid --=20 2.23.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#50641): https://edk2.groups.io/g/devel/message/50641 Mute This Topic: https://groups.io/mt/57059597/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-