From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <bounce+27952+117104+7686176+12367111@groups.io> Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 94667AC0DF3 for <rebecca@openfw.io>; Tue, 26 Mar 2024 07:57:54 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=M2ZHUZZnNmxLvwpUa9PrULkRnexjMG8TTsdtz/4v03U=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20240206; t=1711439873; v=1; b=Z0Hx4PNjTSgj5bf+cqCtstIgXQw3Yg/TmxzcKjwqCBqqy8t3Z7h48u7ii5HcOe+6ZLEfqyEC n8RBx6yunKSWvzHfTndTki9AkqTLXdnzZqvUiL7kjBC3pQoMm9NYPJyY0Ho3wmM6f5ErsaS7AbT gtFPBSbB5EBufi+JNYz1+cyhpVjUZt7lHWnfnYw0n/tMNpYrgdxVMgdZ/RRO7p/vUoD7Dk2MFDE AtcdR1CsY5CY9NrNLPlqV8bmf9zQGditAbvbJat541IwBoWRWycannptzZlMU6mSBhZ2c78MPUH GH0MFYr8lDyVJhbYGHA3ZyyHwl30hDuSunUmR6D9v010A== X-Received: by 127.0.0.2 with SMTP id vx5yYY7687511xsJTxKLsQwH; Tue, 26 Mar 2024 00:57:53 -0700 X-Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.16]) by mx.groups.io with SMTP id smtpd.web11.3322.1711439872208848215 for <devel@edk2.groups.io>; Tue, 26 Mar 2024 00:57:52 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,11024"; a="6587439" X-IronPort-AV: E=Sophos;i="6.07,155,1708416000"; d="scan'208";a="6587439" X-Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa108.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Mar 2024 00:57:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,155,1708416000"; d="scan'208";a="16268477" X-Received: from shpfwdbuild004.ccr.corp.intel.com ([10.239.56.152]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Mar 2024 00:57:50 -0700 From: "Aaron Li" <aaron.li@intel.com> To: devel@edk2.groups.io Cc: 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> Subject: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/AcpiTableDxe: PCD switch to avoid using ACPI reclaim memory Date: Tue, 26 Mar 2024 15:57:33 +0800 Message-ID: <20240326075733.4223-1-aaron.li@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: <mailto:devel+subscribe@edk2.groups.io> List-Help: <mailto:devel+help@edk2.groups.io> Sender: devel@edk2.groups.io List-Id: <devel.edk2.groups.io> Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Tue, 26 Mar 2024 00:57:52 -0700 Reply-To: devel@edk2.groups.io,aaron.li@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: <https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/plugh> X-Gm-Message-State: JD5sdSftfhmCqUxhORed8mlVx7686176AA= Content-Transfer-Encoding: 8bit X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=Z0Hx4PNj; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io 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|UINT32|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|BOOLEAN|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_PROMPT #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 (#117104): https://edk2.groups.io/g/devel/message/117104 Mute This Topic: https://groups.io/mt/105154551/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-