[AMD Official Use Only - General] Acked-by: Abner Chang <abner.ch...@amd.com>
> -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Sunil V L > via groups.io > Sent: Saturday, October 15, 2022 12:48 AM > To: devel@edk2.groups.io > Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org>; Jiewen Yao > <jiewen....@intel.com>; Jordan Justen <jordan.l.jus...@intel.com>; Gerd > Hoffmann <kra...@redhat.com>; Daniel Schaefer <g...@danielschaefer.me> > Subject: [edk2-devel] [edk2-staging/RiscV64QemuVirt PATCH V4 06/34] > OvmfPkg/PlatformInitLib: Add support for RISC-V > > Caution: This message originated from an External Source. Use proper > caution when opening attachments, clicking links, or responding. > > > REF: > https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugz > illa.tianocore.org%2Fshow_bug.cgi%3Fid%3D4076&data=05%7C01%7Ca > bner.chang%40amd.com%7C581b776c7f9b4661b45f08daae040f1e%7C3dd896 > 1fe4884e608e11a82d994e183d%7C0%7C0%7C638013629706513478%7CUnkn > own%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik > 1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=Jmzzl5amXOF9Z > 3npK%2FMlaiP91sDVKf1LwDcAuJ8jYXk%3D&reserved=0 > > This is copied from > edk2-platforms/Platform/RISC-V/PlatformPkg/Universal/FdtPeim > but added as part of library instead of a separate module. > > Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org> > Cc: Jiewen Yao <jiewen....@intel.com> > Cc: Jordan Justen <jordan.l.jus...@intel.com> > Cc: Gerd Hoffmann <kra...@redhat.com> > Cc: Daniel Schaefer <g...@danielschaefer.me> > Signed-off-by: Sunil V L <suni...@ventanamicro.com> > --- > OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf | 9 ++- > OvmfPkg/Include/Library/PlatformInitLib.h | 6 ++ > OvmfPkg/Library/PlatformInitLib/RiscV64/PlatformPeiLib.c | 72 > ++++++++++++++++++++ > 3 files changed, 86 insertions(+), 1 deletion(-) > > diff --git a/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf > b/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf > index 5d31cad1b670..b3a69bf9582c 100644 > --- a/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf > +++ b/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf > @@ -19,7 +19,7 @@ [Defines] > # > # The following information is for reference only and not required by the > build tools. > # > -# VALID_ARCHITECTURES = IA32 X64 EBC > +# VALID_ARCHITECTURES = IA32 X64 EBC RISCV64 > # > > [Sources.IA32, Sources.X64] > @@ -33,6 +33,9 @@ [Sources.IA32] > [Sources.X64] > Ia32X64/IntelTdx.c > > +[Sources.RISCV64] > + RiscV64/PlatformPeiLib.c > + > [Packages] > EmbeddedPkg/EmbeddedPkg.dec > MdeModulePkg/MdeModulePkg.dec > @@ -58,6 +61,10 @@ [LibraryClasses.IA32, LibraryClasses.X64] > [LibraryClasses.X64] > TdxLib > > +[LibraryClasses.RISCV64] > + RiscVSbiLib > + FdtLib > + > [Pcd] > gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress > > diff --git a/OvmfPkg/Include/Library/PlatformInitLib.h > b/OvmfPkg/Include/Library/PlatformInitLib.h > index c5234bf26d45..1b8d1fad3b49 100644 > --- a/OvmfPkg/Include/Library/PlatformInitLib.h > +++ b/OvmfPkg/Include/Library/PlatformInitLib.h > @@ -285,4 +285,10 @@ PlatformInitEmuVariableNvStore ( > IN VOID *EmuVariableNvStore > ); > > +EFI_STATUS > +EFIAPI > +PlatformPeim ( > + VOID > + ); > + > #endif // PLATFORM_INIT_LIB_H_ > diff --git a/OvmfPkg/Library/PlatformInitLib/RiscV64/PlatformPeiLib.c > b/OvmfPkg/Library/PlatformInitLib/RiscV64/PlatformPeiLib.c > new file mode 100644 > index 000000000000..266d5ddff58e > --- /dev/null > +++ b/OvmfPkg/Library/PlatformInitLib/RiscV64/PlatformPeiLib.c > @@ -0,0 +1,72 @@ > +/** @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 <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 > +PlatformPeim ( > + 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; ASSERT (Base != > + NULL); ASSERT (fdt_check_header (Base) == 0); > + > + FdtSize = fdt_totalsize (Base); > + FdtPages = EFI_SIZE_TO_PAGES (FdtSize); NewBase = AllocatePages > + (FdtPages); ASSERT (NewBase != NULL); fdt_open_into (Base, NewBase, > + EFI_PAGES_TO_SIZE (FdtPages)); > + > + FdtHobData = BuildGuidHob (&gFdtHobGuid, sizeof *FdtHobData); > ASSERT > + (FdtHobData != NULL); *FdtHobData = (UINTN)NewBase; > + > + return EFI_SUCCESS; > +} > -- > 2.38.0 > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#95258): https://edk2.groups.io/g/devel/message/95258 Mute This Topic: https://groups.io/mt/94330825/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-