I would suggest to move gFdtHobGuid definition and Include/Guid/FdtHob.h into EmbeddedPkg. They are not specific to ArmVirtualizationPkg and could even be used by HW platforms and non ARM architectures.
> -----Original Message----- > From: Ard Biesheuvel [mailto:[email protected]] > Sent: 23 January 2015 15:03 > To: [email protected]; [email protected]; Olivier > Martin; [email protected]; [email protected]; > [email protected]; [email protected]; > [email protected]; [email protected]; xen- > [email protected]; [email protected] > Cc: Ard Biesheuvel > Subject: [PATCH v1 05/21] ArmVirtualizationPkg: use a HOB to store > device tree blob > > Instead of using a dynamic PCD, store the device tree address in a HOB > so that we can also run under a configuration that does not support > dynamic PCDs. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ard Biesheuvel <[email protected]> > --- > .../ArmVirtualizationPkg/ArmVirtualizationPkg.dec | 3 +-- > .../ArmVirtualizationPkg/ArmVirtualizationQemu.dsc | 3 --- > .../ArmVirtualizationPkg/Include/Guid/FdtHob.h | 26 > ++++++++++++++++++++++ > .../ArmVirtualizationPlatformLib.inf | 1 + > .../Library/PlatformPeiLib/PlatformPeiLib.c | 12 ++++++---- > .../Library/PlatformPeiLib/PlatformPeiLib.inf | 3 --- > .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c | 10 +++++++-- > .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf | 3 ++- > 8 files changed, 46 insertions(+), 15 deletions(-) > create mode 100644 > ArmPlatformPkg/ArmVirtualizationPkg/Include/Guid/FdtHob.h > > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec > b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec > index 99411548aff6..cc7d31d62d6c 100644 > --- a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec > +++ b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec > @@ -33,6 +33,7 @@ > [Guids.common] > gArmVirtualizationTokenSpaceGuid = { 0x0B6F5CA7, 0x4F53, 0x445A, { > 0xB7, 0x6E, 0x2E, 0x36, 0x5B, 0x80, 0x63, 0x66 } } > gEarlyPL011BaseAddressGuid = { 0xB199DEA9, 0xFD5C, 0x4A84, { > 0x80, 0x82, 0x2F, 0x41, 0x70, 0x78, 0x03, 0x05 } } > + gFdtHobGuid = { 0x16958446, 0x19B7, 0x480B, { > 0xB0, 0x47, 0x74, 0x85, 0xAD, 0x3F, 0x71, 0x6D } } > > [PcdsFixedAtBuild] > # > @@ -44,8 +45,6 @@ > > gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress|0x0|UI > NT64|0x00000001 > > [PcdsDynamic, PcdsFixedAtBuild] > - > gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress|0x0|UINT64|0x > 00000002 > - > # > # ARM PSCI function invocations can be done either through > hypervisor > # calls (HVC) or secure monitor calls (SMC). > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc > b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc > index dff4e2507058..4f8eb632143c 100644 > --- a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc > +++ b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc > @@ -160,9 +160,6 @@ > # System Memory Size -- 1 MB initially, actual size will be fetched > from DT > gArmTokenSpaceGuid.PcdSystemMemorySize|0x00100000 > > - # location of the device tree blob passed by QEMU > - gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress|0x0 > - > gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum|0x0 > gArmTokenSpaceGuid.PcdArmArchTimerIntrNum|0x0 > gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum|0x0 > diff --git a/ArmPlatformPkg/ArmVirtualizationPkg/Include/Guid/FdtHob.h > b/ArmPlatformPkg/ArmVirtualizationPkg/Include/Guid/FdtHob.h > new file mode 100644 > index 000000000000..287729e0c350 > --- /dev/null > +++ b/ArmPlatformPkg/ArmVirtualizationPkg/Include/Guid/FdtHob.h > @@ -0,0 +1,26 @@ > +/** @file > + GUID for the HOB that contains the copy of the flattened device tree > blob > + > + Copyright (C) 2014, Linaro Ltd. > + > + This program and the accompanying materials are licensed and made > available > + under the terms and conditions of the BSD License that accompanies > this > + distribution. The full text of the license may be found at > + http://opensource.org/licenses/bsd-license.php. > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, WITHOUT > + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > IMPLIED. > + > +**/ > + > +#ifndef __FDT_HOB_H__ > +#define __FDT_HOB_H__ > + > +#define FDT_HOB_GUID { \ > + 0x16958446, 0x19B7, 0x480B, \ > + { 0xB0, 0x47, 0x74, 0x85, 0xAD, 0x3F, 0x71, 0x6D } \ > + } > + > +extern EFI_GUID gFdtHobGuid; > + > +#endif > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform > Lib/ArmVirtualizationPlatformLib.inf > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform > Lib/ArmVirtualizationPlatformLib.inf > index d1572882af1b..cb048232c0c0 100644 > --- > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform > Lib/ArmVirtualizationPlatformLib.inf > +++ > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform > Lib/ArmVirtualizationPlatformLib.inf > @@ -65,3 +65,4 @@ > > [Guids] > gEarlyPL011BaseAddressGuid > + gFdtHobGuid > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.c > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.c > index 58bc2b828dcd..f2404f89d152 100644 > --- > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.c > +++ > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.c > @@ -22,6 +22,7 @@ > #include <libfdt.h> > > #include <Guid/EarlyPL011BaseAddress.h> > +#include <Guid/FdtHob.h> > > EFI_STATUS > EFIAPI > @@ -32,6 +33,7 @@ PlatformPeim ( > VOID *Base; > VOID *NewBase; > UINTN FdtSize; > + UINTN *FdtHobData; > UINT64 *UartHobData; > INT32 Node, Prev; > CONST CHAR8 *Compatible; > @@ -41,15 +43,17 @@ PlatformPeim ( > UINT64 UartBase; > > > - Base = (VOID*)(UINTN)FixedPcdGet64 > (PcdDeviceTreeInitialBaseAddress); > - ASSERT (fdt_check_header (Base) == 0); > + Base = (VOID*)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress); > + ASSERT (Base != NULL && fdt_check_header (Base) == 0); > > FdtSize = fdt_totalsize (Base); > NewBase = AllocatePages (EFI_SIZE_TO_PAGES (FdtSize)); > ASSERT (NewBase != NULL); > - > CopyMem (NewBase, Base, FdtSize); > - PcdSet64 (PcdDeviceTreeBaseAddress, (UINT64)(UINTN)NewBase); > + > + FdtHobData = BuildGuidHob (&gFdtHobGuid, sizeof *FdtHobData); > + ASSERT (FdtHobData != NULL); > + *FdtHobData = (UINTN)NewBase; > > UartHobData = BuildGuidHob (&gEarlyPL011BaseAddressGuid, sizeof > *UartHobData); > ASSERT (UartHobData != NULL); > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.inf > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.inf > index e544b528d261..12b24db63313 100644 > --- > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.inf > +++ > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.inf > @@ -41,8 +41,5 @@ > gArmTokenSpaceGuid.PcdFvSize > gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress > > -[Pcd] > - gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress > - > [Depex] > gEfiPeiMemoryDiscoveredPpiGuid > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c > b/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c > index 8953f78f5fe4..96aeec61ee7f 100644 > --- a/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c > +++ b/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c > @@ -24,10 +24,12 @@ > #include <Library/DevicePathLib.h> > #include <Library/PcdLib.h> > #include <Library/DxeServicesLib.h> > +#include <Library/HobLib.h> > #include <libfdt.h> > > #include <Guid/Fdt.h> > #include <Guid/VirtioMmioTransport.h> > +#include <Guid/FdtHob.h> > > #pragma pack (1) > typedef struct { > @@ -105,6 +107,7 @@ InitializeVirtFdtDxe ( > IN EFI_SYSTEM_TABLE *SystemTable > ) > { > + VOID *Hob; > VOID *DeviceTreeBase; > INT32 Node, Prev; > INT32 RtcNode; > @@ -125,8 +128,11 @@ InitializeVirtFdtDxe ( > UINT64 FwCfgDataAddress; > UINT64 FwCfgDataSize; > > - DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeBaseAddress); > - ASSERT (DeviceTreeBase != NULL); > + Hob = GetFirstGuidHob(&gFdtHobGuid); > + if (Hob == NULL || GET_GUID_HOB_DATA_SIZE (Hob) != sizeof > DeviceTreeBase) { > + return EFI_NOT_FOUND; > + } > + DeviceTreeBase = (VOID *)*(UINTN *)GET_GUID_HOB_DATA (Hob); > > if (fdt_check_header (DeviceTreeBase) != 0) { > DEBUG ((EFI_D_ERROR, "%a: No DTB found @ 0x%p\n", __FUNCTION__, > DeviceTreeBase)); > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf > b/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf > index 514ce2fdf658..1392c7c3fa45 100644 > --- a/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf > +++ b/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf > @@ -40,13 +40,14 @@ > DxeServicesLib > FdtLib > VirtioMmioDeviceLib > + HobLib > > [Guids] > gFdtTableGuid > gVirtioMmioTransportGuid > + gFdtHobGuid > > [Pcd] > - gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress > gArmVirtualizationTokenSpaceGuid.PcdArmPsciMethod > gArmVirtualizationTokenSpaceGuid.PcdFwCfgSelectorAddress > gArmVirtualizationTokenSpaceGuid.PcdFwCfgDataAddress > -- > 1.8.3.2 > ------------------------------------------------------------------------------ Dive into the World of Parallel Programming. The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
