|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 15/17] hvmloader: Set MCFG in ACPI table
This patch extends hvmloader_acpi_build_tables() to detect if MMCONFIG
is available by obtaining its base address and size from the hypercall
HVMOP_get_ecam_space and sets the flag ACPI_HAS_MCFG in the ACPI config
if needed.
This also sets the MMCONFIG area in E820 map using the same method.
Signed-off-by: Thierry Escande <thierry.escande@xxxxxxxxxx>
---
tools/firmware/hvmloader/e820.c | 11 +++++++++++
tools/firmware/hvmloader/util.c | 9 +++++++++
2 files changed, 20 insertions(+)
diff --git a/tools/firmware/hvmloader/e820.c b/tools/firmware/hvmloader/e820.c
index 86d39544e8..ff5c270f57 100644
--- a/tools/firmware/hvmloader/e820.c
+++ b/tools/firmware/hvmloader/e820.c
@@ -158,6 +158,8 @@ int build_e820_table(struct e820entry *e820,
unsigned long acpi_mem_end = acpi_enabled ?
ACPI_MEMORY_DYNAMIC_START + (acpi_pages_allocated() << PAGE_SHIFT) :
RESERVED_MEMBASE;
+ uint64_t mmconfig_addr;
+ uint32_t mmconfig_size;
if ( !lowmem_reserved_base )
lowmem_reserved_base = 0xA0000;
@@ -260,6 +262,15 @@ int build_e820_table(struct e820entry *e820,
nr++;
}
+ /* mark MMCONFIG area */
+ if ( ! hvm_get_ecam_space(&mmconfig_addr, &mmconfig_size) )
+ {
+ e820[nr].addr = mmconfig_addr;
+ e820[nr].size = mmconfig_size;
+ e820[nr].type = E820_RESERVED;
+ nr++;
+ }
+
/* Low RAM goes here. Reserve space for special pages. */
BUG_ON(low_mem_end < MB(2));
diff --git a/tools/firmware/hvmloader/util.c b/tools/firmware/hvmloader/util.c
index ee7a09b5bc..2cd1cadfc3 100644
--- a/tools/firmware/hvmloader/util.c
+++ b/tools/firmware/hvmloader/util.c
@@ -903,6 +903,8 @@ void hvmloader_acpi_build_tables(struct acpi_config *config,
struct acpi_ctxt ctxt;
long long tpm_version;
char *end;
+ uint64_t mmconfig_addr;
+ uint32_t mmconfig_size;
/* Allocate and initialise the acpi info area. */
mem_hole_populate_ram(ACPI_INFO_PHYSICAL_ADDRESS >> PAGE_SHIFT, 1);
@@ -953,6 +955,13 @@ void hvmloader_acpi_build_tables(struct acpi_config
*config,
config->pci_hi_len = pci_hi_mem_end - pci_hi_mem_start;
}
+ if ( ! hvm_get_ecam_space(&mmconfig_addr, &mmconfig_size) )
+ {
+ config->table_flags |= ACPI_HAS_MCFG;
+ config->mmconfig_addr = mmconfig_addr;
+ config->mmconfig_size = mmconfig_size;
+ }
+
s = xenstore_read("platform/generation-id", "0:0");
if ( s )
{
--
2.51.0
--
Thierry Escande | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |