From: Anthony PERARD Date: Tue, 13 Aug 2019 11:31:08 +0000 (+0100) Subject: OvmfPkg/XenPlatformPei: Reserve VGA memory region, to boot Linux X-Git-Tag: edk2-stable201908~18 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=77d35f50080ad8dc1995a79f4056ee0567188c7c OvmfPkg/XenPlatformPei: Reserve VGA memory region, to boot Linux Linux panic if the VGA region isn't reserved. When Linux is booted on EFI system, it expects the memory at 0xa0000 to _not_ be conventional memory. Otherwise a variable isn't initialised properly and Linux panic when a virtual console/terminal is asked to be created. See for more detail: https://lists.xenproject.org/archives/html/xen-devel/2019-03/msg02139.html Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1689 Signed-off-by: Anthony PERARD Acked-by: Laszlo Ersek Message-Id: <20190813113119.14804-25-anthony.perard@citrix.com> --- diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c index c4506def9a..c41fecdc48 100644 --- a/OvmfPkg/XenPlatformPei/Xen.c +++ b/OvmfPkg/XenPlatformPei/Xen.c @@ -294,6 +294,12 @@ XenPublishRamRegions ( Status = XenGetE820Map (&E820Map, &E820EntriesCount); ASSERT_EFI_ERROR (Status); + AddMemoryBaseSizeHob (0, 0xA0000); + // + // Video memory + Legacy BIOS region, to allow Linux to boot. + // + AddReservedMemoryBaseSizeHob (0xA0000, BASE_1MB - 0xA0000, TRUE); + LapicBase = PcdGet32 (PcdCpuLocalApicBaseAddress); LapicEnd = LapicBase + SIZE_1MB; AddIoMemoryRangeHob (LapicBase, LapicEnd); @@ -312,6 +318,16 @@ XenPublishRamRegions ( Base = ALIGN_VALUE (Entry->BaseAddr, (UINT64)EFI_PAGE_SIZE); End = (Entry->BaseAddr + Entry->Length) & ~(UINT64)EFI_PAGE_MASK; + // + // Ignore the first 1MB, this is handled before the loop. + // + if (Base < BASE_1MB) { + Base = BASE_1MB; + } + if (Base >= End) { + continue; + } + switch (Entry->Type) { case EfiAcpiAddressRangeMemory: AddMemoryRangeHob (Base, End);