From d881c6ddf556dfb5032db04733dfa86aa891e7f8 Mon Sep 17 00:00:00 2001 From: Abner Chang Date: Mon, 11 Oct 2021 21:27:33 +0800 Subject: ArmVirtPkg/HighMemDxe: Relocate HighMemDxe to OvmfPkg Relocate HighMemDxe to OvmfPkg/Fdt, this library is leverage by both ARM and RISC-V archs. Signed-off-by: Abner Chang Cc: Ard Biesheuvel Cc: Leif Lindholm Cc: Sami Mujawar Cc: Jiewen Yao Cc: Jordan Justen Cc: Gerd Hoffmann Cc: Daniel Schaefer Cc: Sunil V L Reviewed-by: Daniel Schaefer Reviewed-by: Sunil V L Acked-by: Gerd Hoffmann Cc: Jiewen Yao --- ArmVirtPkg/ArmVirtCloudHv.dsc | 2 +- ArmVirtPkg/ArmVirtCloudHv.fdf | 2 +- ArmVirtPkg/ArmVirtKvmTool.dsc | 2 +- ArmVirtPkg/ArmVirtKvmTool.fdf | 2 +- ArmVirtPkg/ArmVirtQemu.dsc | 2 +- ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc | 2 +- ArmVirtPkg/ArmVirtQemuKernel.dsc | 2 +- ArmVirtPkg/HighMemDxe/HighMemDxe.c | 128 ----------------------------------- ArmVirtPkg/HighMemDxe/HighMemDxe.inf | 45 ------------ 9 files changed, 7 insertions(+), 180 deletions(-) delete mode 100644 ArmVirtPkg/HighMemDxe/HighMemDxe.c delete mode 100644 ArmVirtPkg/HighMemDxe/HighMemDxe.inf (limited to 'ArmVirtPkg') diff --git a/ArmVirtPkg/ArmVirtCloudHv.dsc b/ArmVirtPkg/ArmVirtCloudHv.dsc index 9ad88e981b..2b722917e3 100644 --- a/ArmVirtPkg/ArmVirtCloudHv.dsc +++ b/ArmVirtPkg/ArmVirtCloudHv.dsc @@ -295,7 +295,7 @@ # ArmVirtPkg/VirtioFdtDxe/VirtioFdtDxe.inf EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf - ArmVirtPkg/HighMemDxe/HighMemDxe.inf + OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf OvmfPkg/VirtioBlkDxe/VirtioBlk.inf OvmfPkg/VirtioScsiDxe/VirtioScsi.inf OvmfPkg/VirtioNetDxe/VirtioNet.inf diff --git a/ArmVirtPkg/ArmVirtCloudHv.fdf b/ArmVirtPkg/ArmVirtCloudHv.fdf index 1bb452ebb8..7ecf5ca88d 100644 --- a/ArmVirtPkg/ArmVirtCloudHv.fdf +++ b/ArmVirtPkg/ArmVirtCloudHv.fdf @@ -107,7 +107,7 @@ READ_LOCK_STATUS = TRUE INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf INF ArmVirtPkg/VirtioFdtDxe/VirtioFdtDxe.inf INF EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf - INF ArmVirtPkg/HighMemDxe/HighMemDxe.inf + INF OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf # # PI DXE Drivers producing Architectural Protocols (EFI Services) diff --git a/ArmVirtPkg/ArmVirtKvmTool.dsc b/ArmVirtPkg/ArmVirtKvmTool.dsc index 3cc182545c..97fc98d778 100644 --- a/ArmVirtPkg/ArmVirtKvmTool.dsc +++ b/ArmVirtPkg/ArmVirtKvmTool.dsc @@ -293,7 +293,7 @@ ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.inf ArmVirtPkg/VirtioFdtDxe/VirtioFdtDxe.inf EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf - ArmVirtPkg/HighMemDxe/HighMemDxe.inf + OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf OvmfPkg/VirtioBlkDxe/VirtioBlk.inf OvmfPkg/VirtioScsiDxe/VirtioScsi.inf OvmfPkg/VirtioNetDxe/VirtioNet.inf diff --git a/ArmVirtPkg/ArmVirtKvmTool.fdf b/ArmVirtPkg/ArmVirtKvmTool.fdf index 1dac8b7880..0535d36b7d 100644 --- a/ArmVirtPkg/ArmVirtKvmTool.fdf +++ b/ArmVirtPkg/ArmVirtKvmTool.fdf @@ -122,7 +122,7 @@ READ_LOCK_STATUS = TRUE INF ArmVirtPkg/VirtioFdtDxe/VirtioFdtDxe.inf INF EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf INF ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.inf - INF ArmVirtPkg/HighMemDxe/HighMemDxe.inf + INF OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf # # PI DXE Drivers producing Architectural Protocols (EFI Services) diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index 2f1a3cea05..86417f8797 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -407,7 +407,7 @@ # ArmVirtPkg/VirtioFdtDxe/VirtioFdtDxe.inf EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf - ArmVirtPkg/HighMemDxe/HighMemDxe.inf + OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf OvmfPkg/VirtioBlkDxe/VirtioBlk.inf OvmfPkg/VirtioScsiDxe/VirtioScsi.inf OvmfPkg/VirtioNetDxe/VirtioNet.inf diff --git a/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc b/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc index e9518dd273..279b905edd 100644 --- a/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc +++ b/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc @@ -42,7 +42,7 @@ READ_LOCK_STATUS = TRUE INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf INF ArmVirtPkg/VirtioFdtDxe/VirtioFdtDxe.inf INF EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf - INF ArmVirtPkg/HighMemDxe/HighMemDxe.inf + INF OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf # # PI DXE Drivers producing Architectural Protocols (EFI Services) diff --git a/ArmVirtPkg/ArmVirtQemuKernel.dsc b/ArmVirtPkg/ArmVirtQemuKernel.dsc index 3a0c3fb4f0..3fad481e29 100644 --- a/ArmVirtPkg/ArmVirtQemuKernel.dsc +++ b/ArmVirtPkg/ArmVirtQemuKernel.dsc @@ -342,7 +342,7 @@ # ArmVirtPkg/VirtioFdtDxe/VirtioFdtDxe.inf EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf - ArmVirtPkg/HighMemDxe/HighMemDxe.inf + OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf OvmfPkg/VirtioBlkDxe/VirtioBlk.inf OvmfPkg/VirtioScsiDxe/VirtioScsi.inf OvmfPkg/VirtioNetDxe/VirtioNet.inf diff --git a/ArmVirtPkg/HighMemDxe/HighMemDxe.c b/ArmVirtPkg/HighMemDxe/HighMemDxe.c deleted file mode 100644 index c383757364..0000000000 --- a/ArmVirtPkg/HighMemDxe/HighMemDxe.c +++ /dev/null @@ -1,128 +0,0 @@ -/** @file -* High memory node enumeration DXE driver for ARM Virtual Machines -* -* Copyright (c) 2015-2016, Linaro Ltd. All rights reserved. -* -* SPDX-License-Identifier: BSD-2-Clause-Patent -* -**/ - -#include -#include -#include -#include -#include - -#include -#include - -EFI_STATUS -EFIAPI -InitializeHighMemDxe ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - FDT_CLIENT_PROTOCOL *FdtClient; - EFI_CPU_ARCH_PROTOCOL *Cpu; - EFI_STATUS Status, FindNodeStatus; - INT32 Node; - CONST UINT32 *Reg; - UINT32 RegSize; - UINTN AddressCells, SizeCells; - UINT64 CurBase; - UINT64 CurSize; - UINT64 Attributes; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; - - Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL, - (VOID **)&FdtClient); - ASSERT_EFI_ERROR (Status); - - Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, - (VOID **)&Cpu); - ASSERT_EFI_ERROR (Status); - - // - // Check for memory node and add the memory spaces except the lowest one - // - for (FindNodeStatus = FdtClient->FindMemoryNodeReg (FdtClient, &Node, - (CONST VOID **) &Reg, &AddressCells, - &SizeCells, &RegSize); - !EFI_ERROR (FindNodeStatus); - FindNodeStatus = FdtClient->FindNextMemoryNodeReg (FdtClient, Node, - &Node, (CONST VOID **) &Reg, &AddressCells, - &SizeCells, &RegSize)) { - ASSERT (AddressCells <= 2); - ASSERT (SizeCells <= 2); - - while (RegSize > 0) { - CurBase = SwapBytes32 (*Reg++); - if (AddressCells > 1) { - CurBase = (CurBase << 32) | SwapBytes32 (*Reg++); - } - CurSize = SwapBytes32 (*Reg++); - if (SizeCells > 1) { - CurSize = (CurSize << 32) | SwapBytes32 (*Reg++); - } - RegSize -= (AddressCells + SizeCells) * sizeof (UINT32); - - Status = gDS->GetMemorySpaceDescriptor (CurBase, &GcdDescriptor); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, - "%a: Region 0x%lx - 0x%lx not found in the GCD memory space map\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1)); - continue; - } - if (GcdDescriptor.GcdMemoryType == EfiGcdMemoryTypeNonExistent) { - Status = gDS->AddMemorySpace (EfiGcdMemoryTypeSystemMemory, CurBase, - CurSize, EFI_MEMORY_WB); - - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_ERROR, - "%a: Failed to add System RAM @ 0x%lx - 0x%lx (%r)\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1, Status)); - continue; - } - - Status = gDS->SetMemorySpaceAttributes (CurBase, CurSize, - EFI_MEMORY_WB); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, - "%a: gDS->SetMemorySpaceAttributes() failed on region 0x%lx - 0x%lx (%r)\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1, Status)); - } - - // - // Due to the ambiguous nature of the RO/XP GCD memory space attributes, - // it is impossible to add a memory space with the XP attribute in a way - // that does not result in the XP attribute being set on *all* UEFI - // memory map entries that are carved from it, including code regions - // that require executable permissions. - // - // So instead, we never set the RO/XP attributes in the GCD memory space - // capabilities or attribute fields, and apply any protections directly - // on the page table mappings by going through the cpu arch protocol. - // - Attributes = EFI_MEMORY_WB; - if ((PcdGet64 (PcdDxeNxMemoryProtectionPolicy) & - (1U << (UINT32)EfiConventionalMemory)) != 0) { - Attributes |= EFI_MEMORY_XP; - } - - Status = Cpu->SetMemoryAttributes (Cpu, CurBase, CurSize, Attributes); - - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_ERROR, - "%a: Failed to set System RAM @ 0x%lx - 0x%lx attribute (%r)\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1, Status)); - } else { - DEBUG ((EFI_D_INFO, "%a: Add System RAM @ 0x%lx - 0x%lx\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1)); - } - } - } - } - - return EFI_SUCCESS; -} diff --git a/ArmVirtPkg/HighMemDxe/HighMemDxe.inf b/ArmVirtPkg/HighMemDxe/HighMemDxe.inf deleted file mode 100644 index 168fc90d2a..0000000000 --- a/ArmVirtPkg/HighMemDxe/HighMemDxe.inf +++ /dev/null @@ -1,45 +0,0 @@ -## @file -# High memory node enumeration DXE driver for ARM Virtual Machines -# -# Copyright (c) 2015-2016, Linaro Ltd. All rights reserved. -# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = HighMemDxe - FILE_GUID = 63EA1463-FBFA-428A-B97F-E222755852D7 - MODULE_TYPE = DXE_DRIVER - VERSION_STRING = 1.0 - - ENTRY_POINT = InitializeHighMemDxe - -[Sources] - HighMemDxe.c - -[Packages] - EmbeddedPkg/EmbeddedPkg.dec - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - ArmPkg/ArmPkg.dec - ArmVirtPkg/ArmVirtPkg.dec - -[LibraryClasses] - BaseLib - DebugLib - DxeServicesTableLib - PcdLib - UefiBootServicesTableLib - UefiDriverEntryPoint - -[Protocols] - gEfiCpuArchProtocolGuid ## CONSUMES - gFdtClientProtocolGuid ## CONSUMES - -[Pcd] - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy - -[Depex] - gEfiCpuArchProtocolGuid AND gFdtClientProtocolGuid -- cgit v1.2.3