[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v1 04/21] ArmVirtualizationPkg: move early UART discovery to PlatformPeim
On 01/23/15 16:02, Ard Biesheuvel wrote: > 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 <lersek@xxxxxxxxxx> > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> > --- > .../Library/ArmVirtualizationPlatformLib/Virt.c | 46 +-------------------- > .../Library/PlatformPeiLib/PlatformPeiLib.c | 48 > ++++++++++++++++++++++ > 2 files changed, 50 insertions(+), 44 deletions(-) > > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/Virt.c > > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/Virt.c > index 3e3074af72f1..17f268697583 100644 > --- > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/Virt.c > +++ > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/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/PlatformPeiLib.c > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.c > index af0d6e87da9f..58bc2b828dcd 100644 > --- > a/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.c > +++ > b/ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.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; > This patch is identical to the one in http://lists.linaro.org/pipermail/linaro-uefi/2014-December/000603.html (modulo the FixedPcdGet64 -> PcdGet64 changed previously), and that's where it has my R-b from. Which is okay, but you forgot to update the commit message the way I requested at the top of http://lists.linaro.org/pipermail/linaro-uefi/2014-December/000611.html Thanks, Laszlo _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |