public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Aaron Li" <aaron.li@intel.com>
To: gaoliming <gaoliming@byosoft.com.cn>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Liu, Zhiguang" <zhiguang.liu@intel.com>,
	"Bi, Dandan" <dandan.bi@intel.com>,
	"Liu, Yun Y" <yun.y.liu@intel.com>,
	"Yao, Jiewen" <jiewen.yao@intel.com>,
	"Ni, Ray" <ray.ni@intel.com>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>
Subject: Re: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/AcpiTableDxe: PCD switch to avoid using ACPI reclaim memory
Date: Thu, 28 Mar 2024 03:59:02 +0000	[thread overview]
Message-ID: <DM4PR11MB5455E1EB0529507D21FA7CD7973B2@DM4PR11MB5455.namprd11.prod.outlook.com> (raw)
In-Reply-To: <062901da80ad$4cff2ca0$e6fd85e0$@byosoft.com.cn>

Hi Liming,

Currently this patch does not have a related Bugzilla.

According to UEFI spec, the ACPI Tables at boot time can be contained in memory of type EfiACPIReclaimMemory or EfiAcpiMemoryNVS.
Current implementation in AcpiTableDxe only allocate memory with type EfiACPIReclaimMemory by default.
This patch provides an option method to let ACPI Tables be allocated in memory with type EfiAcpiMemoryNVS controlled by PCD. 


Best,
Aaron

-----Original Message-----
From: gaoliming <gaoliming@byosoft.com.cn> 
Sent: Thursday, March 28, 2024 9:15 AM
To: Li, Aaron <aaron.li@intel.com>; devel@edk2.groups.io
Cc: Liu, Zhiguang <zhiguang.liu@intel.com>; Bi, Dandan <dandan.bi@intel.com>; Liu, Yun Y <yun.y.liu@intel.com>; Yao, Jiewen <jiewen.yao@intel.com>; Ni, Ray <ray.ni@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>
Subject: 回复: [PATCH v2 1/1] MdeModulePkg/AcpiTableDxe: PCD switch to avoid using ACPI reclaim memory

Aaron:
 Is there a Bugzilla for this issue? What problem will be resolved with this
change? 

Thanks
Liming
> -----邮件原件-----
> 发件人: Aaron Li <aaron.li@intel.com>
> 发送时间: 2024年3月26日 15:58
> 收件人: devel@edk2.groups.io
> 抄送: Zhiguang Liu <zhiguang.liu@intel.com>; Dandan Bi
> <dandan.bi@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Liu Yun
> <yun.y.liu@intel.com>; Jiewen Yao <jiewen.yao@intel.com>; Ray Ni
> <ray.ni@intel.com>; Michael D Kinney <michael.d.kinney@intel.com>
> 主题: [PATCH v2 1/1] MdeModulePkg/AcpiTableDxe: PCD switch to avoid
> using ACPI reclaim memory
> 
> 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 avoid using
> EfiACPIReclaimMemory, by setting the PCD PcdNoACPIReclaimMemory to
> TRUE,
> all ACPI allocated memory will use EfiAcpiMemoryNVS instead.
> 
> 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>
> Cc: Jiewen Yao <jiewen.yao@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Signed-off-by: Aaron Li <aaron.li@intel.com>
> ---
>  MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c | 37
> +++++++++++++++-----
>  MdeModulePkg/MdeModulePkg.dec
> |  7 ++++
>  MdeModulePkg/MdeModulePkg.uni
> |  8 +++++
>  MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf    |  1 +
>  4 files changed, 45 insertions(+), 8 deletions(-)
> 
> diff --git a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c
> b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c
> index e09bc9b704f5..080768033cfa 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 (PcdNoACPIReclaimMemory)) {
> +    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 (PcdNoACPIReclaimMemory)) {
> +    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 (PcdNoACPIReclaimMemory)) {
> +    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 a82dedc070df..a91058e5b5df 100644
> --- a/MdeModulePkg/MdeModulePkg.dec
> +++ b/MdeModulePkg/MdeModulePkg.dec
> @@ -1533,6 +1533,13 @@ [PcdsFixedAtBuild, PcdsPatchableInModule]
>    # @Prompt Exposed ACPI table versions.
> 
> gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x3E|UIN
> T32|0x0001004c
> 
> +  ## Indicates whether ACPI Reclaim memory is not available
> +  # Default is FALSE that means ACPI Reclaim memory is available
> +  # If it is set to TRUE that means ACPI Reclaim memory is not available
> +  # For example ACPI Table protocol will use ACPI NVS memory instead of
> ACPI Reclaim memory
> +  # @Prompt ACPI Reclaim memory is not available.
> +
> gEfiMdeModulePkgTokenSpaceGuid.PcdNoACPIReclaimMemory|FALSE|BOOL
> EAN|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..6079285e3f8b 100644
> --- a/MdeModulePkg/MdeModulePkg.uni
> +++ b/MdeModulePkg/MdeModulePkg.uni
> @@ -955,6 +955,14 @@
> 
> "BIT 4 - EFI_ACPI_TABLE_VERSION_4_0.<BR>\n"
> 
> "BIT 5 - EFI_ACPI_TABLE_VERSION_5_0.<BR>"
> 
> +#string
> STR_gEfiMdeModulePkgTokenSpaceGuid_PcdNoACPIReclaimMemory_PROM
> PT  #language en-US "ACPI Reclaim memory is not available."
> +
> +#string
> STR_gEfiMdeModulePkgTokenSpaceGuid_PcdNoACPIReclaimMemory_HELP
> #language en-US "Indicates whether ACPI Reclaim memory is not available\n"
> +
> "Default is FALSE that means ACPI Reclaim memory is available\n"
> +
> "If it is set to TRUE that means ACPI Reclaim memory is not available\n"
> +
> "For example ACPI Table protocol will use ACPI NVS memory instead of ACPI
> Reclaim memory"
> +
> +
>  #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..be498a56cff0 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.PcdNoACPIReclaimMemory
> ## CONSUMES
> 
>  [Protocols]
>    gEfiAcpiTableProtocolGuid                     ## PRODUCES
> --
> 2.44.0.windows.1





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117190): https://edk2.groups.io/g/devel/message/117190
Mute This Topic: https://groups.io/mt/105191315/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



  reply	other threads:[~2024-03-28  3:59 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-26  7:57 [edk2-devel] [PATCH v2 1/1] MdeModulePkg/AcpiTableDxe: PCD switch to avoid using ACPI reclaim memory Aaron Li
2024-03-28  1:14 ` [edk2-devel] 回复: " gaoliming via groups.io
2024-03-28  3:59   ` Aaron Li [this message]
2024-03-28  5:59     ` [edk2-devel] " Ard Biesheuvel
2024-03-28  7:23       ` Aaron Li
2024-04-01  2:05 ` Zhiguang Liu
2024-04-01  2:31   ` Aaron Li
2024-04-02  1:26     ` 回复: " gaoliming via groups.io
2024-04-07  1:56       ` Aaron Li
2024-04-09  6:23     ` 回复: " gaoliming via groups.io

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=DM4PR11MB5455E1EB0529507D21FA7CD7973B2@DM4PR11MB5455.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