OvmfPkg/RiscVVirt: Check "no-map" and mark EfiReservedMemoryType

OpenSBI now marks PMP regions with "no-map" attribute.
So, remove the workaround and add the ReservedMemory only
when no-map is set so that it follows DT spec.

Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Andrei Warkentin <andrei.warkentin@intel.com>

Signed-off-by: Sunil V L <sunilvl@ventanamicro.com>
Reviewed-by: Ranbir Singh <rsingh@ventanamicro.com>
This commit is contained in:
Sunil V L 2023-07-17 14:21:15 +05:30 committed by mergify[bot]
parent c6b512962e
commit 7427dd3fc0
1 changed files with 17 additions and 20 deletions

View File

@ -141,21 +141,10 @@ GetNumCells (
/** Mark reserved memory ranges in the EFI memory map /** Mark reserved memory ranges in the EFI memory map
The M-mode firmware ranges should not be used by the * As per DT spec v0.4 Section 3.5.4,
EDK2/OS. These ranges are passed via device tree using reserved * "Reserved regions with the no-map property must be listed in the
memory nodes. Parse the DT and mark those ranges as of * memory map with type EfiReservedMemoryType. All other reserved
type EfiReservedMemoryType. * regions must be listed with type EfiBootServicesData."
NOTE: Device Tree spec section 3.5.4 says reserved memory regions
without no-map property should be installed as EfiBootServicesData.
As per UEFI spec, memory of type EfiBootServicesData can be used
by the OS after ExitBootServices().
This is not an issue for DT since OS can parse the DT also along
with EFI memory map and avoid using these ranges. But with ACPI,
there is no such mechanisms possible.
Since EDK2 needs to support both DT and ACPI, we are deviating
from the DT spec and marking all reserved memory ranges as
EfiReservedMemoryType itself irrespective of no-map.
@param FdtPointer Pointer to FDT @param FdtPointer Pointer to FDT
@ -228,11 +217,19 @@ AddReservedMemoryMap (
Size Size
)); ));
BuildMemoryAllocationHob ( if (fdt_getprop (FdtPointer, SubNode, "no-map", &Len)) {
Addr, BuildMemoryAllocationHob (
Size, Addr,
EfiReservedMemoryType Size,
); EfiReservedMemoryType
);
} else {
BuildMemoryAllocationHob (
Addr,
Size,
EfiBootServicesData
);
}
} }
} }
} }