From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mx.groups.io with SMTP id smtpd.web09.12119.1647966100018493992 for ; Tue, 22 Mar 2022 09:21:40 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@linux.microsoft.com header.s=default header.b=RmmTOnvJ; spf=pass (domain: linux.microsoft.com, ip: 13.77.154.182, mailfrom: mikuback@linux.microsoft.com) Received: from localhost.localdomain (unknown [47.202.59.224]) by linux.microsoft.com (Postfix) with ESMTPSA id 8300420B4783; Tue, 22 Mar 2022 09:21:38 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 8300420B4783 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1647966099; bh=B6XbTAeKd5/FJEiVS3fcbNXwGIvjK8PptKp94Rdxd8k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RmmTOnvJtIxynrgEQYQWJE7SdPs5m1k0H3n+iyEV3pTUA3tgftU6SAcGw/l0CYD6c y1igU0VOn/Ez5q9UcxM4uTE94O8jqj+fPjnyciBLj/TXwVmMf1jkFdJSt0TcgdjbIY S+TUQJ5nhqhR9+KnTOdZs9/O6SWx4ULSlNBqfCZA= From: "Michael Kubacki" To: devel@edk2.groups.io Cc: Andrew Fish , Kang Gao , Michael D Kinney , Michael Kubacki , Leif Lindholm , Benjamin You , Liu Yun , Ankit Sinha , Nate DeSimone Subject: [PATCH v1 17/41] PrmPkg: Remove ALLOCATE_CONTEXT_BUFFER_IN_FW build flag Date: Tue, 22 Mar 2022 12:19:23 -0400 Message-Id: <20220322161947.9319-18-mikuback@linux.microsoft.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20220322161947.9319-1-mikuback@linux.microsoft.com> References: <20220322161947.9319-1-mikuback@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Kubacki The POR is firmly to use an OS allocated context buffer now so the build flag that allows firmware to allocate the context buffer is removed along with supporting code. Cc: Andrew Fish Cc: Kang Gao Cc: Michael D Kinney Cc: Michael Kubacki Cc: Leif Lindholm Cc: Benjamin You Cc: Liu Yun Cc: Ankit Sinha Cc: Nate DeSimone Signed-off-by: Michael Kubacki --- PrmPkg/PrmConfigDxe/PrmConfigDxe.c = | 72 -------------------- PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c = | 4 -- PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBufferModu= leConfigLib/DxeContextBufferModuleConfigLib.c | 12 +--- PrmPkg/PrmLoaderDxe/PrmAcpiTable.h = | 6 -- PrmPkg/PrmPkg.dsc = | 5 -- PrmPkg/Readme.md = | 12 +--- 6 files changed, 4 insertions(+), 107 deletions(-) diff --git a/PrmPkg/PrmConfigDxe/PrmConfigDxe.c b/PrmPkg/PrmConfigDxe/Prm= ConfigDxe.c index 7215c2e1dc6f..c547db3eca5e 100644 --- a/PrmPkg/PrmConfigDxe/PrmConfigDxe.c +++ b/PrmPkg/PrmConfigDxe/PrmConfigDxe.c @@ -26,10 +26,8 @@ #define _DBGMSGID_ "[PRMCONFIG]" =20 STATIC UINTN mMaxRuntimeMmioRangeCount; -STATIC UINTN mMaxStaticDataBufferCount; =20 GLOBAL_REMOVE_IF_UNREFERENCED STATIC PRM_RUNTIME_MMIO_RANGES **mRunti= meMmioRanges; -GLOBAL_REMOVE_IF_UNREFERENCED STATIC PRM_DATA_BUFFER ***mStat= icDataBuffers; =20 /** Converts the runtime memory range physical addresses to virtual addres= ses. @@ -181,32 +179,12 @@ StoreVirtualMemoryAddressChangePointers ( UINTN HandleCount; UINTN HandleIndex; UINTN RangeIndex; -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - UINTN BufferIndex; - UINTN StaticDataBufferIndex; - PRM_CONTEXT_BUFFER *CurrentContextBuffer; -#endif EFI_HANDLE *HandleBuffer; PRM_CONFIG_PROTOCOL *PrmConfigProtocol; =20 DEBUG ((DEBUG_INFO, "%a %a - Entry.\n", _DBGMSGID_, __FUNCTION__)); =20 RangeIndex =3D 0; -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - StaticDataBufferIndex =3D 0; - - mStaticDataBuffers =3D AllocateRuntimeZeroPool (sizeof (*mStaticDataBu= ffers) * mMaxStaticDataBufferCount); - if (mStaticDataBuffers =3D=3D NULL && mMaxStaticDataBufferCount > 0) { - DEBUG (( - DEBUG_ERROR, - " %a %a: Memory allocation for PRM static data buffer pointer arr= ay failed.\n", - _DBGMSGID_, - __FUNCTION__ - )); - ASSERT (FALSE); - return; - } -#endif =20 mRuntimeMmioRanges =3D AllocateRuntimeZeroPool (sizeof (*mRuntimeMmioR= anges) * mMaxRuntimeMmioRangeCount); if (mRuntimeMmioRanges =3D=3D NULL && mMaxRuntimeMmioRangeCount > 0) { @@ -240,28 +218,6 @@ StoreVirtualMemoryAddressChangePointers ( continue; } =20 -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - for (BufferIndex =3D 0; BufferIndex < PrmConfigProtocol->ModuleCon= textBuffers.BufferCount; BufferIndex++) { - CurrentContextBuffer =3D &(PrmConfigProtocol->ModuleContextBuffe= rs.Buffer[BufferIndex]); - - if (CurrentContextBuffer->StaticDataBuffer !=3D NULL) { - if (StaticDataBufferIndex >=3D mMaxStaticDataBufferCount) { - Status =3D EFI_BUFFER_TOO_SMALL; - DEBUG (( - DEBUG_ERROR, - " %a %a: Index out of bounds - Actual count (%d) of PRM d= ata buffers exceeds maximum count (%d).\n", - _DBGMSGID_, - __FUNCTION__, - StaticDataBufferIndex + 1, - mMaxStaticDataBufferCount - )); - ASSERT_EFI_ERROR (Status); - return; - } - mStaticDataBuffers[StaticDataBufferIndex++] =3D &CurrentContex= tBuffer->StaticDataBuffer; - } - } -#endif if (PrmConfigProtocol->ModuleContextBuffers.RuntimeMmioRanges !=3D= NULL) { if (RangeIndex >=3D mMaxRuntimeMmioRangeCount) { Status =3D EFI_BUFFER_TOO_SMALL; @@ -286,15 +242,6 @@ StoreVirtualMemoryAddressChangePointers ( __FUNCTION__, RangeIndex )); -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - DEBUG (( - DEBUG_INFO, - " %a %a: %d static buffers saved for future virtual memory conver= sion.\n", - _DBGMSGID_, - __FUNCTION__, - StaticDataBufferIndex - )); -#endif } } =20 @@ -396,15 +343,6 @@ PrmConfigVirtualAddressChangeEvent ( { UINTN Index; =20 -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - // - // Convert static data buffer pointers - // - for (Index =3D 0; Index < mMaxStaticDataBufferCount; Index++) { - gRT->ConvertPointer (0x0, (VOID **) mStaticDataBuffers[Index]); - } -#endif - // // Convert runtime MMIO ranges // @@ -485,9 +423,6 @@ PrmConfigEndOfDxeNotification ( CurrentContextBuffer->HandlerGuid )); } - if (CurrentContextBuffer->StaticDataBuffer !=3D NULL) { - mMaxStaticDataBufferCount++; - } } DEBUG ((DEBUG_INFO, " %a %a: Module context buffer validation= complete.\n", _DBGMSGID_, __FUNCTION__)); =20 @@ -551,13 +486,6 @@ PrmConfigEntryPoint ( ); ASSERT_EFI_ERROR (Status); =20 - DEBUG ((DEBUG_INFO, " %a %a: Context buffers will be allocated in ", = _DBGMSGID_, __FUNCTION__)); -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - DEBUG ((DEBUG_INFO, "firmware.\n")); -#else - DEBUG ((DEBUG_INFO, "the operating system.\n")); -#endif - // // Register a notification function for virtual address change // diff --git a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c b/PrmPkg/PrmLoaderDxe/Prm= LoaderDxe.c index e2a838ea29bd..433d81cf8009 100644 --- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c +++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c @@ -738,11 +738,7 @@ ProcessPrmModules ( &CurrentContextBuffer ); if (!EFI_ERROR (Status)) { -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - CurrentHandlerInfoStruct->PrmContextBuffer =3D (UINT64) (UINTN) = CurrentContextBuffer; -#else CurrentHandlerInfoStruct->StaticDataBuffer =3D (UINT64) (UINTN) = CurrentContextBuffer->StaticDataBuffer; -#endif } =20 Status =3D GetExportEntryAddress ( diff --git a/PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeConte= xtBufferModuleConfigLib/DxeContextBufferModuleConfigLib.c b/PrmPkg/Sample= s/PrmSampleContextBufferModule/Library/DxeContextBufferModuleConfigLib/Dx= eContextBufferModuleConfigLib.c index b0b12c012a41..c222c961f23b 100644 --- a/PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBuffe= rModuleConfigLib/DxeContextBufferModuleConfigLib.c +++ b/PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBuffe= rModuleConfigLib/DxeContextBufferModuleConfigLib.c @@ -151,16 +151,7 @@ ContextBufferModuleConfigLibConstructor ( // // Allocate and populate the context buffer // -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - // - // The context buffer allocated in FW will continue being used at OS r= untime so it must - // be a runtime services data buffer. - // - // This sample module uses a single context buffer for all the handler= s - // Todo: This can be done more elegantly in the future. Likely though = a library service. - // - PrmContextBuffer =3D AllocateRuntimeZeroPool (sizeof (*PrmContextBuffe= r)); -#else + // // This context buffer is not actually used by PRM handler at OS runti= me. The OS will allocate // the actual context buffer passed to the PRM handler. @@ -170,7 +161,6 @@ ContextBufferModuleConfigLibConstructor ( // PRM_HANDLER_INFORMATION_STRUCT and PRM_MODULE_INFORMATION_STRUCT re= spectively for the PRM handler. // PrmContextBuffer =3D AllocateZeroPool (sizeof (*PrmContextBuffer)); -#endif ASSERT (PrmContextBuffer !=3D NULL); if (PrmContextBuffer =3D=3D NULL) { Status =3D EFI_OUT_OF_RESOURCES; diff --git a/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h b/PrmPkg/PrmLoaderDxe/Prm= AcpiTable.h index ca09be389235..ec3be529d119 100644 --- a/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h +++ b/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h @@ -30,10 +30,6 @@ typedef struct { UINT16 StructureLength; ///< L= ength in bytes of this structure GUID Identifier; ///< G= UID of the PRM handler for this structure UINT64 PhysicalAddress; ///< P= hysical address of this PRM handler -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - UINT64 PrmContextBuffer; ///< P= hysical address of the context buffer for this - ///< P= RM handler (PRM_CONTEXT_BUFFER *) -#else UINT64 StaticDataBuffer; ///< P= hysical address of the static data buffer for ///< t= his PRM handler (PRM_DATA_BUFFER *) UINT64 AcpiParameterBuffer; ///< P= hysical address of the parameter buffer @@ -41,8 +37,6 @@ typedef struct { ///< t= hat is only used in the case of _DSM invocation. ///< I= f _DSM invocation is not used, this value is ///< i= gnored. -#endif - } PRM_HANDLER_INFORMATION_STRUCT; =20 typedef struct { diff --git a/PrmPkg/PrmPkg.dsc b/PrmPkg/PrmPkg.dsc index d3aeffa152e0..6d352dfadb26 100644 --- a/PrmPkg/PrmPkg.dsc +++ b/PrmPkg/PrmPkg.dsc @@ -110,8 +110,3 @@ [Components] [BuildOptions] # Force deprecated interfaces off *_*_*_CC_FLAGS =3D -D DISABLE_NEW_DEPRECATED_INTERFACES - -# Append package-specific build settings -!ifdef $(ALLOCATE_CONTEXT_BUFFER_IN_FW) - *_*_*_CC_FLAGS =3D -D ALLOCATE_CONTEXT_BUFFER_IN_FW -!endif diff --git a/PrmPkg/Readme.md b/PrmPkg/Readme.md index f430006905c5..52b44a95ddbc 100644 --- a/PrmPkg/Readme.md +++ b/PrmPkg/Readme.md @@ -68,17 +68,11 @@ record (POR) configuration. The following list are the currently defined build flags (if any) that m= ay be passed to the `build` command (e.g. -D FLAG=3DVALUE). =20 -* `ALLOCATE_CONTEXT_BUFFER_IN_FW` - Allocates the context buffer for eac= h PRM handler in the firmware instead of - the operating system (OS). +* NONE - No build flags are currently used. =20 Additional detail: The context buffer structure is defined in [PrmCon= textBuffer.h](PrmPkg/Include/PrmContextBuffer.h). - This structure can be instantiated by either firmware with a physical= pointer to the buffer placed in the - `PRM_HANDLER_INFORMATION_STRUCT` for each handler wherein the OS woul= d convert that physical pointer and pass it - as a virtual address pointer to each PRM handler. Alternatively, the = context buffer can be allocated and populated - by the OS where it would get all the information to populate the cont= ext buffer from other structures. - - The default is for the OS to allocate and populate the buffer. The al= ternative option of the firmware doing this - work is kept in the source code until broader OS testing is completed= . + This structure is passed as the context buffer to PRM handlers. The s= tructure actually passed to PRM handlers is + allocated and populated by the OS where it gets all the information t= o populate the context buffer from other structures. =20 ## Overview At a high-level, PRM can be viewed from three levels of granularity: --=20 2.28.0.windows.1