mirror of https://github.com/acidanthera/audk.git
ArmVirtPkg: Add Kvmtool Platform Pei Lib
The PlatformPeim() in the PlatformPeiLib is invoked by the PrePiMain() and provides the platform an opportunity to setup the plaform specific HOBs. This PlatfromPeiLib initialises the Kvmtool platform HOBs like the Fdt, 16550BaseAddress, etc. Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Ard Biesheuvel <Ard.Biesheuvel@arm.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
a482f08d99
commit
e556cebb2f
|
@ -0,0 +1,79 @@
|
|||
/** @file
|
||||
Kvmtool platform PEI library.
|
||||
|
||||
Copyright (c) 2020, ARM Limited. All rights reserved.
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include <PiPei.h>
|
||||
|
||||
#include <Guid/Early16550UartBaseAddress.h>
|
||||
#include <Guid/FdtHob.h>
|
||||
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/HobLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/PeiServicesLib.h>
|
||||
#include <libfdt.h>
|
||||
|
||||
/** Initialise Platform HOBs
|
||||
|
||||
@retval EFI_SUCCESS Success.
|
||||
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
||||
@retval EFI_OUT_OF_RESOURCES Out of resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PlatformPeim (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
VOID *Base;
|
||||
VOID *NewBase;
|
||||
UINTN FdtSize;
|
||||
UINTN FdtPages;
|
||||
UINT64 *FdtHobData;
|
||||
UINT64 *UartHobData;
|
||||
|
||||
Base = (VOID*)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress);
|
||||
if ((Base == NULL) || (fdt_check_header (Base) != 0)) {
|
||||
ASSERT (0);
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
FdtSize = fdt_totalsize (Base) + PcdGet32 (PcdDeviceTreeAllocationPadding);
|
||||
FdtPages = EFI_SIZE_TO_PAGES (FdtSize);
|
||||
NewBase = AllocatePages (FdtPages);
|
||||
if (NewBase == NULL) {
|
||||
ASSERT (0);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
fdt_open_into (Base, NewBase, EFI_PAGES_TO_SIZE (FdtPages));
|
||||
|
||||
FdtHobData = BuildGuidHob (&gFdtHobGuid, sizeof (*FdtHobData));
|
||||
if (FdtHobData == NULL) {
|
||||
ASSERT (0);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
*FdtHobData = (UINTN)NewBase;
|
||||
|
||||
UartHobData = BuildGuidHob (
|
||||
&gEarly16550UartBaseAddressGuid,
|
||||
sizeof (*UartHobData)
|
||||
);
|
||||
if (UartHobData == NULL) {
|
||||
ASSERT (0);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
*UartHobData = PcdGet64 (PcdSerialRegisterBase);
|
||||
|
||||
BuildFvHob (PcdGet64 (PcdFvBaseAddress), PcdGet32 (PcdFvSize));
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
## @file
|
||||
# Kvmtool platform PEI library.
|
||||
#
|
||||
# Copyright (c) 2020, ARM Limited. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x0001001B
|
||||
BASE_NAME = PlatformPeiLib
|
||||
FILE_GUID = 21073FB3-BA6F-43EB-83F0-4A840C648165
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = KvmtoolPlatformPeiLib
|
||||
|
||||
[Sources]
|
||||
KvmtoolPlatformPeiLib.c
|
||||
|
||||
[Packages]
|
||||
ArmPkg/ArmPkg.dec
|
||||
ArmVirtPkg/ArmVirtPkg.dec
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
DebugLib
|
||||
HobLib
|
||||
FdtLib
|
||||
PcdLib
|
||||
PeiServicesLib
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdFvSize
|
||||
gArmVirtTokenSpaceGuid.PcdDeviceTreeAllocationPadding
|
||||
|
||||
[Pcd]
|
||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
||||
gArmVirtTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase
|
||||
|
||||
[Guids]
|
||||
gFdtHobGuid
|
||||
gEarly16550UartBaseAddressGuid
|
||||
|
||||
[Depex]
|
||||
gEfiPeiMemoryDiscoveredPpiGuid
|
Loading…
Reference in New Issue