[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2 07/29] ArmVirtualizationPkg: use a HOB to store device tree blob



On 28 January 2015 at 15:04, Olivier Martin <olivier.martin@xxxxxxx> wrote:
> I do not have a strong opinion on this patch.
> It would be better to keep the dynamic PCD support in this patch. But I am
> aware it is not possible with PrePi (I had the issue a couple of weeks ago).
> Dynamic Pcds are actually supported when you use the PeiCore with PcdPeim.
> But the PeiCore only make sense at the moment on platforms that have DRAM
> initialized by the UEFI firmware.
> I would like to extend the PI spec to also be able to use PeiCore in the
> case where the DRAM is already initialized at the time of the UEFI firmware.
> That would mean we could use the PcdPeim and Dynamic Pcd. But it will take
> time before we have support for it.
> And I do not want to gate the patch set for this reason.
>

OK.

> I am ok to accept it if no one reject it.
>
>
> Anyway, this patch breaks the ARM Toolchain build:
>
> "armlink" --partial -o
> /tianocore/Build/ArmVirtualizationQemu-ARM/DEBUG_RVCTLINUX/ARM/ArmPlatformPk
> g/PrePeiCore/PrePeiCoreUniCore/OUTPUT/ArmPlatformPrePeiCore.lib --via
> /tianocore/Build/ArmVirtualizationQemu-ARM/DEBUG_RVCTLINUX/ARM/ArmPlatformPk
> g/PrePeiCore/PrePeiCoreUniCore/OUTPUT/object_files.lst
> "armlink"  --ro-base 0 --no_scanlib --reloc --no_exceptions --datacompressor
> off --strict --symbols --diag_style=ide --entry _ModuleEntryPoint --map
> --list
> /tianocore/Build/ArmVirtualizationQemu-ARM/DEBUG_RVCTLINUX/ARM/ArmPlatformPk
> g/PrePeiCore/PrePeiCoreUniCore/DEBUG/ArmPlatformPrePeiCore.map -o
> /tianocore/Build/ArmVirtualizationQemu-ARM/DEBUG_RVCTLINUX/ARM/ArmPlatformPk
> g/PrePeiCore/PrePeiCoreUniCore/DEBUG/ArmPlatformPrePeiCore.dll  --via
> /tianocore/Build/ArmVirtualizationQemu-ARM/DEBUG_RVCTLINUX/ARM/ArmPlatformPk
> g/PrePeiCore/PrePeiCoreUniCore/OUTPUT/static_library_files.lst
> armlink : error L6218:  Undefined symbol AllocatePages (referred from
> ArmVirtualizationPlatformLib.lib).
> armlink : Not enough information to list image symbols.
> armlink : Finished: 1 information, 0 warning and 1 error messages.
>

Probably just a missing MemoryAllocationLib dependency in
ArmVirtualizationPlatformLib.inf


>
>> -----Original Message-----
>> From: Ard Biesheuvel [mailto:ard.biesheuvel@xxxxxxxxxx]
>> Sent: 26 January 2015 19:03
>> To: edk2-devel@xxxxxxxxxxxxxxxxxxxxx; lersek@xxxxxxxxxx; Olivier
>> Martin; roy.franz@xxxxxxxxxx; leif.lindholm@xxxxxxxxxx;
>> stefano.stabellini@xxxxxxxxxxxxx; Ian.Campbell@xxxxxxxxxx;
>> anthony.perard@xxxxxxxxxx; christoffer.dall@xxxxxxxxxx; xen-
>> devel@xxxxxxxxxxxxx; ilias.biris@xxxxxxxxxx
>> Cc: Ard Biesheuvel
>> Subject: [PATCH v2 07/29] 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 <ard.biesheuvel@xxxxxxxxxx>
>> ---
>>  ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
>> |  2 --
>>  ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
>> |  3 ---
>>
>> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLi
>> b/ArmVirtualizationPlatformLib.inf |  2 --
>>
>> ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiL
>> ib.c                               | 11 ++++++++---
>>
>> ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiL
>> ib.inf                             |  4 +---
>>  ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
>> | 10 ++++++++--
>>  ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf
>> |  3 ++-
>>  EmbeddedPkg/EmbeddedPkg.dec
>> |  2 ++
>>  EmbeddedPkg/Include/Guid/FdtHob.h
>> | 26 ++++++++++++++++++++++++++
>>  9 files changed, 47 insertions(+), 16 deletions(-)
>>
>> diff --git
>> a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
>> b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
>> index d83117fc6abe..868488906643 100644
>> --- a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
>> +++ b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
>> @@ -44,8 +44,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/Library/ArmVirtualizationPlatform
>> Lib/ArmVirtualizationPlatformLib.inf
>> b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform
>> Lib/ArmVirtualizationPlatformLib.inf
>> index 43b3c6ca1bef..c57002f3e9da 100644
>> ---
>> a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform
>> Lib/ArmVirtualizationPlatformLib.inf
>> +++
>> b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform
>> Lib/ArmVirtualizationPlatformLib.inf
>> @@ -33,8 +33,6 @@
>>    ArmLib
>>    PrintLib
>>    FdtLib
>> -  SerialPortLib
>> -  HobLib
>>
>>  [Sources.common]
>>    Virt.c
>> diff --git
>> a/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe
>> iLib.c
>> b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe
>> iLib.c
>> index 58bc2b828dcd..c500d5964b25 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;
>> +  UINT64             *FdtHobData;
>>    UINT64             *UartHobData;
>>    INT32              Node, Prev;
>>    CONST CHAR8        *Compatible;
>> @@ -41,15 +43,18 @@ PlatformPeim (
>>    UINT64             UartBase;
>>
>>
>> -  Base = (VOID*)(UINTN)FixedPcdGet64
>> (PcdDeviceTreeInitialBaseAddress);
>> +  Base = (VOID*)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress);
>> +  ASSERT (Base != NULL);
>>    ASSERT (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 a376fbd1f345..96019e4009ff 100644
>> ---
>> a/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe
>> iLib.inf
>> +++
>> b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe
>> iLib.inf
>> @@ -41,11 +41,9 @@
>>    gArmTokenSpaceGuid.PcdFvSize
>>    gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress
>>
>> -[Pcd]
>> -  gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress
>> -
>>  [Guids]
>>    gEarlyPL011BaseAddressGuid
>> +  gFdtHobGuid
>>
>>  [Depex]
>>    gEfiPeiMemoryDiscoveredPpiGuid
>> diff --git
>> a/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
>> b/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
>> index 31164905d34e..34fac40fa803 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 (UINT64))
>> {
>> +    return EFI_NOT_FOUND;
>> +  }
>> +  DeviceTreeBase = (VOID *)(UINTN)*(UINT64 *)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
>> diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
>> index 600d0e54c4b3..2f261ece9212 100644
>> --- a/EmbeddedPkg/EmbeddedPkg.dec
>> +++ b/EmbeddedPkg/EmbeddedPkg.dec
>> @@ -52,6 +52,8 @@
>>    ## FDT Configuration Table
>>    # Include/Guid/Fdt.h
>>    gFdtTableGuid = { 0xb1b621d5, 0xf19c, 0x41a5, { 0x83, 0x0b, 0xd9,
>> 0x15, 0x2c, 0x69, 0xaa, 0xe0 } }
>> +  # Include/Guid/FdtHob.h
>> +  gFdtHobGuid   = { 0x16958446, 0x19B7, 0x480B, { 0xB0, 0x47, 0x74,
>> 0x85, 0xAD, 0x3F, 0x71, 0x6D } }
>>
>>  [Protocols.common]
>>    gHardwareInterruptProtocolGuid =  { 0x2890B3EA, 0x053D, 0x1643, {
>> 0xAD, 0x0C, 0xD6, 0x48, 0x08, 0xDA, 0x3F, 0xF1 } }
>> diff --git a/EmbeddedPkg/Include/Guid/FdtHob.h
>> b/EmbeddedPkg/Include/Guid/FdtHob.h
>> new file mode 100644
>> index 000000000000..287729e0c350
>> --- /dev/null
>> +++ b/EmbeddedPkg/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
>> --
>> 1.8.3.2
>>
>
>
>
>

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.