Reviewed-By: Olivier Martin <[email protected]> > -----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 04/21] ArmVirtualizationPkg: move early UART > discovery to PlatformPeim > > This is partially motivated by the desire to use PrePi in a virt > environment, and in that configuration, ArmPlatformInitializeMemory() > is never called. But actually, this is a more suitable place anyway. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Reviewed-by: Laszlo Ersek <[email protected]> > Signed-off-by: Ard Biesheuvel <[email protected]> > --- > .../Library/ArmVirtualizationPlatformLib/Virt.c | 46 +------------- > ------- > .../Library/PlatformPeiLib/PlatformPeiLib.c | 48 > ++++++++++++++++++++++ > 2 files changed, 50 insertions(+), 44 deletions(-) > > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform > Lib/Virt.c > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform > Lib/Virt.c > index 3e3074af72f1..17f268697583 100644 > --- > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform > Lib/Virt.c > +++ > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatform > Lib/Virt.c > @@ -24,9 +24,6 @@ > #include <Pi/PiBootMode.h> > #include <Uefi/UefiBaseType.h> > #include <Uefi/UefiMultiPhase.h> > -#include <Pi/PiHob.h> > -#include <Library/HobLib.h> > -#include <Guid/EarlyPL011BaseAddress.h> > > /** > Return the current Boot Mode > @@ -77,25 +74,13 @@ ArmPlatformInitializeSystemMemory ( > INT32 Node, Prev; > UINT64 NewBase; > UINT64 NewSize; > - BOOLEAN HaveMemory, HaveUART; > - UINT64 *HobData; > CONST CHAR8 *Type; > - CONST CHAR8 *Compatible; > - CONST CHAR8 *CompItem; > INT32 Len; > CONST UINT64 *RegProp; > - UINT64 UartBase; > > NewBase = 0; > NewSize = 0; > > - HaveMemory = FALSE; > - HaveUART = FALSE; > - > - HobData = BuildGuidHob (&gEarlyPL011BaseAddressGuid, sizeof > *HobData); > - ASSERT (HobData != NULL); > - *HobData = 0; > - > DeviceTreeBase = (VOID *)(UINTN)PcdGet64 > (PcdDeviceTreeInitialBaseAddress); > ASSERT (DeviceTreeBase != NULL); > > @@ -107,7 +92,7 @@ ArmPlatformInitializeSystemMemory ( > // > // Look for a memory node > // > - for (Prev = 0; !(HaveMemory && HaveUART); Prev = Node) { > + for (Prev = 0;; Prev = Node) { > Node = fdt_next_node (DeviceTreeBase, Prev, NULL); > if (Node < 0) { > break; > @@ -140,34 +125,7 @@ ArmPlatformInitializeSystemMemory ( > DEBUG ((EFI_D_ERROR, "%a: Failed to parse FDT memory node\n", > __FUNCTION__)); > } > - HaveMemory = TRUE; > - continue; > - } > - > - // > - // Check for UART node > - // > - Compatible = fdt_getprop (DeviceTreeBase, Node, "compatible", > &Len); > - > - // > - // Iterate over the NULL-separated items in the compatible string > - // > - for (CompItem = Compatible; CompItem != NULL && CompItem < > Compatible + Len; > - CompItem += 1 + AsciiStrLen (CompItem)) { > - > - if (AsciiStrCmp (CompItem, "arm,pl011") == 0) { > - RegProp = fdt_getprop (DeviceTreeBase, Node, "reg", &Len); > - ASSERT (Len == 16); > - > - UartBase = fdt64_to_cpu (ReadUnaligned64 (RegProp)); > - > - DEBUG ((EFI_D_INFO, "%a: PL011 UART @ 0x%lx\n", __FUNCTION__, > UartBase)); > - > - *HobData = UartBase; > - > - HaveUART = TRUE; > - continue; > - } > + break; > } > } > > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.c > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.c > index af0d6e87da9f..58bc2b828dcd 100644 > --- > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.c > +++ > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPe > iLib.c > @@ -21,6 +21,8 @@ > #include <Library/PcdLib.h> > #include <libfdt.h> > > +#include <Guid/EarlyPL011BaseAddress.h> > + > EFI_STATUS > EFIAPI > PlatformPeim ( > @@ -30,6 +32,14 @@ PlatformPeim ( > VOID *Base; > VOID *NewBase; > UINTN FdtSize; > + UINT64 *UartHobData; > + INT32 Node, Prev; > + CONST CHAR8 *Compatible; > + CONST CHAR8 *CompItem; > + INT32 Len; > + CONST UINT64 *RegProp; > + UINT64 UartBase; > + > > Base = (VOID*)(UINTN)FixedPcdGet64 > (PcdDeviceTreeInitialBaseAddress); > ASSERT (fdt_check_header (Base) == 0); > @@ -41,6 +51,44 @@ PlatformPeim ( > CopyMem (NewBase, Base, FdtSize); > PcdSet64 (PcdDeviceTreeBaseAddress, (UINT64)(UINTN)NewBase); > > + UartHobData = BuildGuidHob (&gEarlyPL011BaseAddressGuid, sizeof > *UartHobData); > + ASSERT (UartHobData != NULL); > + *UartHobData = 0; > + > + // > + // Look for a UART node > + // > + for (Prev = 0;; Prev = Node) { > + Node = fdt_next_node (Base, Prev, NULL); > + if (Node < 0) { > + break; > + } > + > + // > + // Check for UART node > + // > + Compatible = fdt_getprop (Base, Node, "compatible", &Len); > + > + // > + // Iterate over the NULL-separated items in the compatible string > + // > + for (CompItem = Compatible; CompItem != NULL && CompItem < > Compatible + Len; > + CompItem += 1 + AsciiStrLen (CompItem)) { > + > + if (AsciiStrCmp (CompItem, "arm,pl011") == 0) { > + RegProp = fdt_getprop (Base, Node, "reg", &Len); > + ASSERT (Len == 16); > + > + UartBase = fdt64_to_cpu (ReadUnaligned64 (RegProp)); > + > + DEBUG ((EFI_D_INFO, "%a: PL011 UART @ 0x%lx\n", __FUNCTION__, > UartBase)); > + > + *UartHobData = UartBase; > + break; > + } > + } > + } > + > BuildFvHob (PcdGet64 (PcdFvBaseAddress), PcdGet32 (PcdFvSize)); > > return EFI_SUCCESS; > -- > 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
