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
The M-mode firmware ranges should not be used by the
EDK2/OS. These ranges are passed via device tree using reserved
memory nodes. Parse the DT and mark those ranges as of
type EfiReservedMemoryType.
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.
* As per DT spec v0.4 Section 3.5.4,
* "Reserved regions with the no-map property must be listed in the
* memory map with type EfiReservedMemoryType. All other reserved
* regions must be listed with type EfiBootServicesData."
@param FdtPointer Pointer to FDT
@ -228,11 +217,19 @@ AddReservedMemoryMap (
Size
));
BuildMemoryAllocationHob (
Addr,
Size,
EfiReservedMemoryType
);
if (fdt_getprop (FdtPointer, SubNode, "no-map", &Len)) {
BuildMemoryAllocationHob (
Addr,
Size,
EfiReservedMemoryType
);
} else {
BuildMemoryAllocationHob (
Addr,
Size,
EfiBootServicesData
);
}
}
}
}