Aaron, Can you share more background of this change? Thanks, Ray > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Aaron Li > Sent: Friday, March 1, 2024 2:04 PM > To: devel@edk2.groups.io > Cc: Liu, Zhiguang <zhiguang....@intel.com>; Bi, Dandan > <dandan...@intel.com>; Liming Gao <gaolim...@byosoft.com.cn>; Liu, Yun Y > <yun.y....@intel.com> > Subject: [edk2-devel] [PATCH v1 1/1] MdeModulePkg/AcpiTableDxe: Select > ACPI memory type by PCD > > UEFI spec defined ACPI Tables at boot time can be contained in memory of > type EfiACPIReclaimMemory or EfiAcpiMemoryNVS, although InstallAcpiTable > with AcpiTableProtocol will only allocate memory with type > EfiACPIReclaimMemory (Except FACS). > > This patch provides an optional method controlled by PCD to switch all > ACPI allocated memory from EfiACPIReclaimMemory to EfiAcpiMemoryNVS. > If the PcdAcpiMemoryUseNvs is set to TRUE, all ACPI allocated memory > will using EfiAcpiMemoryNVS. > > Cc: Zhiguang Liu <zhiguang....@intel.com> > Cc: Dandan Bi <dandan...@intel.com> > Cc: Liming Gao <gaolim...@byosoft.com.cn> > Cc: Liu Yun <yun.y....@intel.com> > Signed-off-by: Aaron Li <aaron...@intel.com> > --- > MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c | 37 > +++++++++++++++----- > MdeModulePkg/MdeModulePkg.dec > | 6 ++++ > MdeModulePkg/MdeModulePkg.uni > | 7 ++++ > MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf | 1 + > 4 files changed, 43 insertions(+), 8 deletions(-) > > diff --git a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > index e09bc9b704f5..6c3dbad90345 100644 > --- a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > +++ b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > @@ -340,6 +340,7 @@ ReallocateAcpiTableBuffer ( > EFI_ACPI_TABLE_INSTANCE TempPrivateData; > EFI_STATUS Status; > UINT64 CurrentData; > + EFI_MEMORY_TYPE AcpiAllocateMemoryType; > > CopyMem (&TempPrivateData, AcpiTableInstance, sizeof > (EFI_ACPI_TABLE_INSTANCE)); > // > @@ -359,6 +360,12 @@ ReallocateAcpiTableBuffer ( > NewMaxTableNumber * sizeof (UINT32); > } > > + if (PcdGetBool (PcdAcpiMemoryUseNvs)) { > + AcpiAllocateMemoryType = EfiACPIMemoryNVS; > + } else { > + AcpiAllocateMemoryType = EfiACPIReclaimMemory; > + } > + > if (mAcpiTableAllocType != AllocateAnyPages) { > // > // Allocate memory in the lower 32 bit of address range for > @@ -372,13 +379,13 @@ ReallocateAcpiTableBuffer ( > PageAddress = 0xFFFFFFFF; > Status = gBS->AllocatePages ( > mAcpiTableAllocType, > - EfiACPIReclaimMemory, > + AcpiAllocateMemoryType, > EFI_SIZE_TO_PAGES (TotalSize), > &PageAddress > ); > } else { > Status = gBS->AllocatePool ( > - EfiACPIReclaimMemory, > + AcpiAllocateMemoryType, > TotalSize, > (VOID **)&Pointer > ); > @@ -512,6 +519,7 @@ AddTableToList ( > EFI_PHYSICAL_ADDRESS AllocPhysAddress; > UINT64 Buffer64; > BOOLEAN AddToRsdt; > + EFI_MEMORY_TYPE AcpiAllocateMemoryType; > > // > // Check for invalid input parameters > @@ -550,6 +558,12 @@ AddTableToList ( > CurrentTableList->TableSize = CurrentTableSize; > CurrentTableList->PoolAllocation = FALSE; > > + if (PcdGetBool (PcdAcpiMemoryUseNvs)) { > + AcpiAllocateMemoryType = EfiACPIMemoryNVS; > + } else { > + AcpiAllocateMemoryType = EfiACPIReclaimMemory; > + } > + > // > // Allocation memory type depends on the type of the table > // > @@ -585,7 +599,7 @@ AddTableToList ( > // such as AArch64 that allocate multiples of 64 KB > // > Status = gBS->AllocatePool ( > - EfiACPIReclaimMemory, > + AcpiAllocateMemoryType, > CurrentTableList->TableSize, > (VOID **)&CurrentTableList->Table > ); > @@ -596,7 +610,7 @@ AddTableToList ( > // > Status = gBS->AllocatePages ( > mAcpiTableAllocType, > - EfiACPIReclaimMemory, > + AcpiAllocateMemoryType, > EFI_SIZE_TO_PAGES (CurrentTableList->TableSize), > &AllocPhysAddress > ); > @@ -1944,6 +1958,7 @@ AcpiTableAcpiTableConstructor ( > UINTN RsdpTableSize; > UINT8 *Pointer; > EFI_PHYSICAL_ADDRESS PageAddress; > + EFI_MEMORY_TYPE AcpiAllocateMemoryType; > > // > // Check for invalid input parameters > @@ -1978,17 +1993,23 @@ AcpiTableAcpiTableConstructor ( > RsdpTableSize += sizeof > (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER); > } > > + if (PcdGetBool (PcdAcpiMemoryUseNvs)) { > + AcpiAllocateMemoryType = EfiACPIMemoryNVS; > + } else { > + AcpiAllocateMemoryType = EfiACPIReclaimMemory; > + } > + > if (mAcpiTableAllocType != AllocateAnyPages) { > PageAddress = 0xFFFFFFFF; > Status = gBS->AllocatePages ( > mAcpiTableAllocType, > - EfiACPIReclaimMemory, > + AcpiAllocateMemoryType, > EFI_SIZE_TO_PAGES (RsdpTableSize), > &PageAddress > ); > } else { > Status = gBS->AllocatePool ( > - EfiACPIReclaimMemory, > + AcpiAllocateMemoryType, > RsdpTableSize, > (VOID **)&Pointer > ); > @@ -2037,13 +2058,13 @@ AcpiTableAcpiTableConstructor ( > PageAddress = 0xFFFFFFFF; > Status = gBS->AllocatePages ( > mAcpiTableAllocType, > - EfiACPIReclaimMemory, > + AcpiAllocateMemoryType, > EFI_SIZE_TO_PAGES (TotalSize), > &PageAddress > ); > } else { > Status = gBS->AllocatePool ( > - EfiACPIReclaimMemory, > + AcpiAllocateMemoryType, > TotalSize, > (VOID **)&Pointer > ); > diff --git a/MdeModulePkg/MdeModulePkg.dec > b/MdeModulePkg/MdeModulePkg.dec > index a2cd83345f5b..324fb5e69ae6 100644 > --- a/MdeModulePkg/MdeModulePkg.dec > +++ b/MdeModulePkg/MdeModulePkg.dec > @@ -1523,6 +1523,12 @@ [PcdsFixedAtBuild, PcdsPatchableInModule] > # @Prompt Exposed ACPI table versions. > > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x3E|UIN > T32|0x0001004c > > + ## Indicates whether ACPI memory is using NVS > + # Default is FALSE that means ACPI memory is using > EfiACPIReclaimMemory type > + # If it is set to TRUE that means ACPI memory is using EfiACPIMemoryNVS > type > + # @Prompt ACPI memory is using NVS. > + > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiMemoryUseNvs|FALSE|BOOLEA > N|0x0001008b > + > ## This PCD defines the MAX repair count. > # The default value is 0 that means infinite. > # @Prompt MAX repair count > diff --git a/MdeModulePkg/MdeModulePkg.uni > b/MdeModulePkg/MdeModulePkg.uni > index a17d34d60b21..a2c10774bb54 100644 > --- a/MdeModulePkg/MdeModulePkg.uni > +++ b/MdeModulePkg/MdeModulePkg.uni > @@ -955,6 +955,13 @@ > > "BIT 4 - EFI_ACPI_TABLE_VERSION_4_0.<BR>\n" > > "BIT 5 - EFI_ACPI_TABLE_VERSION_5_0.<BR>" > > +#string > STR_gEfiMdeModulePkgTokenSpaceGuid_PcdAcpiMemoryUseNvs_PROMPT > #language en-US "ACPI memory is using NVS." > + > +#string > STR_gEfiMdeModulePkgTokenSpaceGuid_PcdAcpiMemoryUseNvs_HELP > #language en-US "Indicates whether ACPI memory is using NVS\n" > + > "Default is FALSE that means ACPI memory is using EfiACPIReclaimMemory > type\n" > + > "If it is set to TRUE that means ACPI memory is using EfiACPIMemoryNVS > type" > + > + > #string > STR_gEfiMdeModulePkgTokenSpaceGuid_PcdHiiOsRuntimeSupport_PROMPT > #language en-US "Enable export HII data and configuration to be used in OS > runtime." > > #string > STR_gEfiMdeModulePkgTokenSpaceGuid_PcdHiiOsRuntimeSupport_HELP > #language en-US "Indicates if HII data and configuration has been > exported.<BR><BR>\n" > diff --git a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > index 86dea43e27e4..38d64913a28c 100644 > --- a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > +++ b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > @@ -68,6 +68,7 @@ [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId ## > CONSUMES > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision ## > CONSUMES > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiMemoryUseNvs > ## CONSUMES > > [Protocols] > gEfiAcpiTableProtocolGuid ## PRODUCES > -- > 2.29.2.windows.2 > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116211): https://edk2.groups.io/g/devel/message/116211 Mute This Topic: https://groups.io/mt/104659443/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-