From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: edk2-devel@lists.01.org, lersek@redhat.com
Cc: leif.lindholm@linaro.org, jordan.l.justen@intel.com,
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [RFC PATCH] OvmfPkg/AcpiPlatformDxe: lift 4 GB alloc limit for modern ACPI systems
Date: Thu, 1 Jun 2017 11:22:41 +0000 [thread overview]
Message-ID: <20170601112241.2580-1-ard.biesheuvel@linaro.org> (raw)
ACPI supports architectures such as arm64, which did not exist when the
original 32-bit ACPI 1.0 was introduced. These days, ACPI tables can all
support 64-bit memory addresses, and so QEMU has been updated to emit
64-bit table and entry point types on arm64/mach-virt.
For the UEFI side, this means we no longer have to serve allocation
requests from the 32-bit addressable region. So lift this restriction
when the platform has been configured without ACPI 1.0b support.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
This is an RFC because this change breaks compatibility with older versions
of QEMU. At the least, this means I should sit on this patch for another
while, but perhaps it also means we need some runtime logic to detect which
QEMU we are dealing with? Comments welcome.
OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf | 3 +++
OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c | 13 +++++++++++--
OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpiPlatformDxe.inf | 3 +++
3 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf b/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
index 9a9b2e6bb2e5..9b883871bc23 100644
--- a/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
+++ b/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
@@ -73,5 +73,8 @@ [Pcd]
gPcAtChipsetPkgTokenSpaceGuid.Pcd8259LegacyModeEdgeLevel
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress
+[FixedPcd]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions
+
[Depex]
gEfiAcpiTableProtocolGuid
diff --git a/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c b/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c
index 1bc5fe297a96..97632bc636c0 100644
--- a/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c
+++ b/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c
@@ -24,6 +24,7 @@
#include <Library/PcdLib.h>
#include <Library/OrderedCollectionLib.h>
#include <IndustryStandard/Acpi.h>
+#include <Protocol/AcpiSystemDescriptionTable.h>
//
@@ -173,6 +174,7 @@ ProcessCmdAllocate (
UINTN NumPages;
EFI_PHYSICAL_ADDRESS Address;
BLOB *Blob;
+ EFI_ALLOCATE_TYPE AllocType;
if (Allocate->File[QEMU_LOADER_FNAME_SIZE - 1] != '\0') {
DEBUG ((EFI_D_ERROR, "%a: malformed file name\n", __FUNCTION__));
@@ -192,9 +194,16 @@ ProcessCmdAllocate (
return Status;
}
+ if ((FixedPcdGet32 (PcdAcpiExposedTableVersions) &
+ EFI_ACPI_TABLE_VERSION_1_0B) != 0) {
+ Address = 0xFFFFFFFF;
+ AllocType = AllocateMaxAddress;
+ } else {
+ AllocType = AllocateAnyPages;
+ }
+
NumPages = EFI_SIZE_TO_PAGES (FwCfgSize);
- Address = 0xFFFFFFFF;
- Status = gBS->AllocatePages (AllocateMaxAddress, EfiACPIMemoryNVS, NumPages,
+ Status = gBS->AllocatePages (AllocType, EfiACPIMemoryNVS, NumPages,
&Address);
if (EFI_ERROR (Status)) {
return Status;
diff --git a/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpiPlatformDxe.inf b/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpiPlatformDxe.inf
index adc50cfd9f76..64db80dd9cbc 100644
--- a/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpiPlatformDxe.inf
+++ b/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpiPlatformDxe.inf
@@ -58,5 +58,8 @@ [Guids]
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration
+[FixedPcd]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions
+
[Depex]
gEfiAcpiTableProtocolGuid
--
2.9.3
next reply other threads:[~2017-06-01 11:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-01 11:22 Ard Biesheuvel [this message]
2017-06-01 12:25 ` [RFC PATCH] OvmfPkg/AcpiPlatformDxe: lift 4 GB alloc limit for modern ACPI systems Laszlo Ersek
2017-06-01 15:16 ` Igor Mammedov
2017-06-01 16:37 ` Laszlo Ersek
2017-06-01 20:40 ` Laszlo Ersek
2017-06-02 14:56 ` Gerd Hoffmann
2017-06-02 22:40 ` Laszlo Ersek
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=20170601112241.2580-1-ard.biesheuvel@linaro.org \
--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