Revision: 16959
http://sourceforge.net/p/edk2/code/16959
Author: lersek
Date: 2015-02-28 20:26:00 +0000 (Sat, 28 Feb 2015)
Log Message:
-----------
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.
This also adds MemoryAllocationLib to the [LibraryClasses] section of
ArmVirtualizationPlatformLib/ArmVirtualizationPlatformLib.inf, as this
dependency was formerly satisfied transitively through one of the
library dependencies that were dropped.
Contributed-under: TianoCore Contribution Agreement 1.0
Reviewed-by: Laszlo Ersek <[email protected]>
Reviewed-by: Olivier Martin <[email protected]>
Signed-off-by: Ard Biesheuvel <[email protected]>
Signed-off-by: Laszlo Ersek <[email protected]>
Modified Paths:
--------------
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ArmVirtualizationPlatformLib.inf
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.c
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf
trunk/edk2/EmbeddedPkg/EmbeddedPkg.dec
Added Paths:
-----------
trunk/edk2/EmbeddedPkg/Include/Guid/FdtHob.h
Modified:
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
2015-02-28 20:25:48 UTC (rev 16958)
+++ trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
2015-02-28 20:26:00 UTC (rev 16959)
@@ -44,8 +44,6 @@
gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress|0x0|UINT64|0x00000001
[PcdsDynamic, PcdsFixedAtBuild]
-
gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress|0x0|UINT64|0x00000002
-
#
# ARM PSCI function invocations can be done either through hypervisor
# calls (HVC) or secure monitor calls (SMC).
Modified:
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
2015-02-28 20:25:48 UTC (rev 16958)
+++ trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
2015-02-28 20:26:00 UTC (rev 16959)
@@ -176,9 +176,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
Modified:
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ArmVirtualizationPlatformLib.inf
===================================================================
---
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ArmVirtualizationPlatformLib.inf
2015-02-28 20:25:48 UTC (rev 16958)
+++
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ArmVirtualizationPlatformLib.inf
2015-02-28 20:26:00 UTC (rev 16959)
@@ -30,11 +30,10 @@
[LibraryClasses]
IoLib
+ MemoryAllocationLib
ArmLib
PrintLib
FdtLib
- SerialPortLib
- HobLib
[Sources.common]
Virt.c
Modified:
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.c
===================================================================
---
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.c
2015-02-28 20:25:48 UTC (rev 16958)
+++
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.c
2015-02-28 20:26:00 UTC (rev 16959)
@@ -22,6 +22,7 @@
#include <libfdt.h>
#include <Guid/EarlyPL011BaseAddress.h>
+#include <Guid/FdtHob.h>
EFI_STATUS
EFIAPI
@@ -32,6 +33,7 @@
VOID *Base;
VOID *NewBase;
UINTN FdtSize;
+ UINT64 *FdtHobData;
UINT64 *UartHobData;
INT32 Node, Prev;
CONST CHAR8 *Compatible;
@@ -41,16 +43,19 @@
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);
*UartHobData = 0;
Modified:
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
===================================================================
---
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
2015-02-28 20:25:48 UTC (rev 16958)
+++
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
2015-02-28 20:26:00 UTC (rev 16959)
@@ -41,11 +41,9 @@
gArmTokenSpaceGuid.PcdFvSize
gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress
-[Pcd]
- gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress
-
[Guids]
gEarlyPL011BaseAddressGuid
+ gFdtHobGuid
[Depex]
gEfiPeiMemoryDiscoveredPpiGuid
Modified: trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
2015-02-28 20:25:48 UTC (rev 16958)
+++ trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
2015-02-28 20:26:00 UTC (rev 16959)
@@ -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 {
@@ -277,6 +279,7 @@
IN EFI_SYSTEM_TABLE *SystemTable
)
{
+ VOID *Hob;
VOID *DeviceTreeBase;
INT32 Node, Prev;
INT32 RtcNode;
@@ -297,8 +300,11 @@
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));
Modified:
trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf
2015-02-28 20:25:48 UTC (rev 16958)
+++ trunk/edk2/ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf
2015-02-28 20:26:00 UTC (rev 16959)
@@ -41,13 +41,14 @@
DxeServicesLib
FdtLib
VirtioMmioDeviceLib
+ HobLib
[Guids]
gFdtTableGuid
gVirtioMmioTransportGuid
+ gFdtHobGuid
[Pcd]
- gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress
gArmVirtualizationTokenSpaceGuid.PcdArmPsciMethod
gArmVirtualizationTokenSpaceGuid.PcdFwCfgSelectorAddress
gArmVirtualizationTokenSpaceGuid.PcdFwCfgDataAddress
Modified: trunk/edk2/EmbeddedPkg/EmbeddedPkg.dec
===================================================================
--- trunk/edk2/EmbeddedPkg/EmbeddedPkg.dec 2015-02-28 20:25:48 UTC (rev
16958)
+++ trunk/edk2/EmbeddedPkg/EmbeddedPkg.dec 2015-02-28 20:26:00 UTC (rev
16959)
@@ -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 } }
gFdtVariableGuid = { 0x25a4fd4a, 0x9703, 0x4ba9, { 0xa1, 0x90, 0xb7, 0xc8,
0x4e, 0xfb, 0x3e, 0x57 } }
[Protocols.common]
Added: trunk/edk2/EmbeddedPkg/Include/Guid/FdtHob.h
===================================================================
--- trunk/edk2/EmbeddedPkg/Include/Guid/FdtHob.h
(rev 0)
+++ trunk/edk2/EmbeddedPkg/Include/Guid/FdtHob.h 2015-02-28 20:26:00 UTC
(rev 16959)
@@ -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
------------------------------------------------------------------------------
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-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits