OvmfPkg/RiscVVirt: Add SEC module
Add the SEC module for RISC-V Qemu virt machine support. It uses the PEI less design. 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> Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> Acked-by: Abner Chang <abner.chang@amd.com> Reviewed-by: Andrei Warkentin <andrei.warkentin@intel.com> Acked-by: Jiewen Yao <Jiewen.yao@intel.com> Acked-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
84
OvmfPkg/RiscVVirt/Sec/Platform.c
Normal file
84
OvmfPkg/RiscVVirt/Sec/Platform.c
Normal file
@@ -0,0 +1,84 @@
|
||||
/** @file
|
||||
The library call to pass the device tree to DXE via HOB.
|
||||
|
||||
Copyright (c) 2021, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
//
|
||||
//// The package level header files this module uses
|
||||
////
|
||||
#include <PiPei.h>
|
||||
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/HobLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/BaseRiscVSbiLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Include/Library/PrePiLib.h>
|
||||
#include <libfdt.h>
|
||||
#include <Guid/FdtHob.h>
|
||||
|
||||
/**
|
||||
@retval EFI_SUCCESS The address of FDT is passed in HOB.
|
||||
EFI_UNSUPPORTED Can't locate FDT.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PlatformPeimInitialization (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_RISCV_FIRMWARE_CONTEXT *FirmwareContext;
|
||||
VOID *FdtPointer;
|
||||
VOID *Base;
|
||||
VOID *NewBase;
|
||||
UINTN FdtSize;
|
||||
UINTN FdtPages;
|
||||
UINT64 *FdtHobData;
|
||||
|
||||
FirmwareContext = NULL;
|
||||
GetFirmwareContextPointer (&FirmwareContext);
|
||||
|
||||
if (FirmwareContext == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "%a: Firmware Context is NULL\n", __FUNCTION__));
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
FdtPointer = (VOID *)FirmwareContext->FlattenedDeviceTree;
|
||||
if (FdtPointer == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __FUNCTION__));
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "%a: Build FDT HOB - FDT at address: 0x%x \n", __FUNCTION__, FdtPointer));
|
||||
Base = FdtPointer;
|
||||
if (fdt_check_header (Base) != 0) {
|
||||
DEBUG ((DEBUG_ERROR, "%a: Corrupted DTB\n", __FUNCTION__));
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
FdtSize = fdt_totalsize (Base);
|
||||
FdtPages = EFI_SIZE_TO_PAGES (FdtSize);
|
||||
NewBase = AllocatePages (FdtPages);
|
||||
if (NewBase == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "%a: Could not allocate memory for DTB\n", __FUNCTION__));
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
fdt_open_into (Base, NewBase, EFI_PAGES_TO_SIZE (FdtPages));
|
||||
|
||||
FdtHobData = BuildGuidHob (&gFdtHobGuid, sizeof *FdtHobData);
|
||||
if (FdtHobData == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "%a: Could not build FDT Hob\n", __FUNCTION__));
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
*FdtHobData = (UINTN)NewBase;
|
||||
|
||||
BuildFvHob (PcdGet32 (PcdOvmfDxeMemFvBase), PcdGet32 (PcdOvmfDxeMemFvSize));
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
Reference in New Issue
Block a user