From: "Ni, Ray" <ray.ni@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"Li, Aaron" <aaron.li@intel.com>
Cc: "Liu, Zhiguang" <zhiguang.liu@intel.com>,
"Bi, Dandan" <dandan.bi@intel.com>,
Liming Gao <gaoliming@byosoft.com.cn>,
"Liu, Yun Y" <yun.y.liu@intel.com>
Subject: Re: [edk2-devel] [PATCH v1 1/1] MdeModulePkg/AcpiTableDxe: Select ACPI memory type by PCD
Date: Fri, 1 Mar 2024 06:37:17 +0000 [thread overview]
Message-ID: <MN6PR11MB824412C1B3CA095C3C151F788C5E2@MN6PR11MB8244.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20240301060330.996-1-aaron.li@intel.com>
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.liu@intel.com>; Bi, Dandan
> <dandan.bi@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Liu, Yun Y
> <yun.y.liu@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.liu@intel.com>
> Cc: Dandan Bi <dandan.bi@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Liu Yun <yun.y.liu@intel.com>
> Signed-off-by: Aaron Li <aaron.li@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/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
prev parent reply other threads:[~2024-03-01 6:37 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-01 6:03 [edk2-devel] [PATCH v1 1/1] MdeModulePkg/AcpiTableDxe: Select ACPI memory type by PCD Aaron Li
2024-03-01 6:37 ` Ni, Ray [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=MN6PR11MB824412C1B3CA095C3C151F788C5E2@MN6PR11MB8244.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox