From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 9E9F6AC1177 for ; Thu, 14 Mar 2024 15:16:48 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=fGdHikhEdqgcKp3VJOZz77Vx4pVFNikuVHaCRmbH7rQ=; c=relaxed/simple; d=groups.io; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:To:Cc:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type; s=20240206; t=1710429407; v=1; b=1jw1X+7p/Hs441IeftJQin2+rZl1Mjd78HgT6/u+S5elK4MGEKftmwUCTmuA0o5Ipne6OOZS fTONT1kP/gqVR1BEM8qhfU951ofiGbonroBHrRJEr2owP5hNwu9RtaJ2UvsEKxLx7pSGqEV2BZp RNwCwiRA+tSLqQSDdPKMaWbuePnSIq/TR/MbK0cMUW42+kyBcO5ETlE5KGbNaeoDuWCS31oC52a WIqO5QREj89fuPOPYGAlun7u4fX8Fddkimed/ekstWH0svU+HJzuXXsUDouZRC6pAyEX6L5vNT0 x5MWqQ84IyO/U7OoXSK4pksohAXKqnZQ8AYHaFGIj2U3g== X-Received: by 127.0.0.2 with SMTP id z7LfYY7687511xVfRURQNEtX; Thu, 14 Mar 2024 08:16:47 -0700 X-Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by mx.groups.io with SMTP id smtpd.web11.15354.1710429406183492868 for ; Thu, 14 Mar 2024 08:16:46 -0700 X-Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id EA56CCE1BFB for ; Thu, 14 Mar 2024 15:16:43 +0000 (UTC) X-Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D5D1C433A6 for ; Thu, 14 Mar 2024 15:16:43 +0000 (UTC) X-Received: by mail-lj1-f175.google.com with SMTP id 38308e7fff4ca-2d47a92cfefso8978191fa.1 for ; Thu, 14 Mar 2024 08:16:43 -0700 (PDT) X-Gm-Message-State: 8Z4QpXlYv7Zu1jIA5HMWD3pxx7686176AA= X-Google-Smtp-Source: AGHT+IEeahuYhKNGGTH7V7RJKGR2w+VYEoyVj61Pk/8Y5cONfn0x8jT12XHoCA7++leUVYjAHMW2NrktyePaJaPff70= X-Received: by 2002:a2e:a9a7:0:b0:2d4:1700:34a2 with SMTP id x39-20020a2ea9a7000000b002d4170034a2mr245024ljq.33.1710429401401; Thu, 14 Mar 2024 08:16:41 -0700 (PDT) MIME-Version: 1.0 References: <20240306-no-dt-for-cpu-v6-0-acd8727a1b59@linaro.org> <20240306-no-dt-for-cpu-v6-4-acd8727a1b59@linaro.org> In-Reply-To: <20240306-no-dt-for-cpu-v6-4-acd8727a1b59@linaro.org> From: "Ard Biesheuvel" Date: Thu, 14 Mar 2024 16:16:30 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [edk2-devel] [PATCH edk2-platforms v6 4/7] Platform/SbsaQemu: move FdtHandlerLib to SbsaQemuHardwareInfoLib To: Marcin Juszkiewicz Cc: devel@edk2.groups.io, Leif Lindholm , Ard Biesheuvel , Graeme Gregory , Xiong Yining , Chen Baozi Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Thu, 14 Mar 2024 08:16:46 -0700 Reply-To: devel@edk2.groups.io,ardb@kernel.org List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: Content-Type: text/plain; charset="UTF-8" X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=1jw1X+7p; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=kernel.org (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io On Wed, 6 Mar 2024 at 12:42, Marcin Juszkiewicz wrote: > > There is no need for EDK2 to know that there is DeviceTree around. > All hardware information is read using functions from > SbsaQemuHardwareInfoLib library. > > Library fallbacks to parsing DT if needed. > I'd prefer to have only a single method of obtaining this information. > Signed-off-by: Marcin Juszkiewicz > Reviewed-by: Leif Lindholm > --- > Platform/Qemu/SbsaQemu/SbsaQemu.dsc | 1 - > .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf | 4 +- > .../SbsaQemu/Library/FdtHelperLib/FdtHelperLib.inf | 33 ------- > .../SbsaQemuHardwareInfoLib.inf | 2 + > .../Qemu/SbsaQemu/Include/Library/FdtHelperLib.h | 36 ------- > .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c | 4 +- > .../SbsaQemu/Library/FdtHelperLib/FdtHelperLib.c | 98 ------------------ > .../SbsaQemuHardwareInfoLib.c | 104 ++++++++++++++++++++ > 8 files changed, 110 insertions(+), 172 deletions(-) > > diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > index 07cb3490f4cf..bde61651da2e 100644 > --- a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > +++ b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > @@ -126,7 +126,6 @@ [LibraryClasses.common] > # ARM PL011 UART Driver > PL011UartLib|ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.inf > > - FdtHelperLib|Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.inf > OemMiscLib|Platform/Qemu/SbsaQemu/OemMiscLib/OemMiscLib.inf > SbsaQemuHardwareInfoLib|Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > > diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf > index 291743b19115..9bf0a13de5d1 100644 > --- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf > +++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf > @@ -1,7 +1,7 @@ > ## @file > # This driver modifies ACPI tables for the Qemu SBSA platform > # > -# Copyright (c) 2020, Linaro Ltd. All rights reserved. > +# Copyright (c) Linaro Ltd. All rights reserved. > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -35,9 +35,9 @@ [LibraryClasses] > BaseLib > DebugLib > DxeServicesLib > - FdtHelperLib > PcdLib > PrintLib > + SbsaQemuHardwareInfoLib > UefiDriverEntryPoint > UefiLib > UefiRuntimeServicesTableLib > diff --git a/Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.inf b/Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.inf > deleted file mode 100644 > index 9c059f3e5851..000000000000 > --- a/Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.inf > +++ /dev/null > @@ -1,33 +0,0 @@ > -#/** @file > -# > -# Component description file for FdtHelperLib module > -# > -# Copyright (c) 2021, NUVIA Inc. All rights reserved. > -# > -# SPDX-License-Identifier: BSD-2-Clause-Patent > -# > -#**/ > - > -[Defines] > - INF_VERSION = 1.29 > - BASE_NAME = FdtHelperLib > - FILE_GUID = 34e4396f-c2fc-4f9e-ad58-0f98e99e3875 > - MODULE_TYPE = BASE > - VERSION_STRING = 1.0 > - LIBRARY_CLASS = FdtHelperLib > - > -[Sources.common] > - FdtHelperLib.c > - > -[Packages] > - EmbeddedPkg/EmbeddedPkg.dec > - MdePkg/MdePkg.dec > - Silicon/Qemu/SbsaQemu/SbsaQemu.dec > - > -[LibraryClasses] > - DebugLib > - FdtLib > - PcdLib > - > -[FixedPcd] > - gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdDeviceTreeBaseAddress > diff --git a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > index 8c2def1878e6..5358dd339eb3 100644 > --- a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > +++ b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > @@ -27,6 +27,8 @@ [LibraryClasses] > ArmSmcLib > BaseMemoryLib > DebugLib > + FdtLib > > [Pcd] > + gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdDeviceTreeBaseAddress > gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdCoreCount > diff --git a/Silicon/Qemu/SbsaQemu/Include/Library/FdtHelperLib.h b/Silicon/Qemu/SbsaQemu/Include/Library/FdtHelperLib.h > deleted file mode 100644 > index ea9159857215..000000000000 > --- a/Silicon/Qemu/SbsaQemu/Include/Library/FdtHelperLib.h > +++ /dev/null > @@ -1,36 +0,0 @@ > -/** @file > -* FdtHelperLib.h > -* > -* Copyright (c) 2021, NUVIA Inc. All rights reserved. > -* > -* SPDX-License-Identifier: BSD-2-Clause-Patent > -* > -**/ > - > -#ifndef FDT_HELPER_LIB_ > -#define FDT_HELPER_LIB_ > - > -/** > - Get MPIDR for a given cpu from device tree passed by Qemu. > - > - @param [in] CpuId Index of cpu to retrieve MPIDR value for. > - > - @retval MPIDR value of CPU at index > -**/ > -UINT64 > -FdtHelperGetMpidr ( > - IN UINTN CpuId > - ); > - > -/** Walks through the Device Tree created by Qemu and counts the number > - of CPUs present in it. > - > - @return The number of CPUs present. > -**/ > -EFIAPI > -UINT32 > -FdtHelperCountCpus ( > - VOID > - ); > - > -#endif /* FDT_HELPER_LIB_ */ > diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c > index 59536ea9575e..03f7a34977a0 100644 > --- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c > +++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c > @@ -15,10 +15,10 @@ > #include > #include > #include > -#include > #include > #include > #include > +#include > #include > #include > #include > @@ -296,7 +296,7 @@ AddMadtTable ( > CopyMem (New, &Gicc, sizeof (EFI_ACPI_6_0_GIC_STRUCTURE)); > GiccPtr = (EFI_ACPI_6_0_GIC_STRUCTURE *) New; > GiccPtr->AcpiProcessorUid = CoreIndex; > - GiccPtr->MPIDR = FdtHelperGetMpidr (CoreIndex); > + GiccPtr->MPIDR = SbsaQemuGetMpidr (CoreIndex); > New += sizeof (EFI_ACPI_6_0_GIC_STRUCTURE); > } > > diff --git a/Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.c b/Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.c > deleted file mode 100644 > index 7fdfb055db76..000000000000 > --- a/Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.c > +++ /dev/null > @@ -1,98 +0,0 @@ > -/** @file > -* FdtHelperLib.c > -* > -* Copyright (c) 2021, NUVIA Inc. All rights reserved. > -* Copyright (c) 2020, Linaro Ltd. All rights reserved. > -* > -* SPDX-License-Identifier: BSD-2-Clause-Patent > -* > -**/ > - > -#include > -#include > -#include > -#include > -#include > - > -STATIC INT32 mFdtFirstCpuOffset; > -STATIC INT32 mFdtCpuNodeSize; > - > -/** > - Get MPIDR for a given cpu from device tree passed by Qemu. > - > - @param [in] CpuId Index of cpu to retrieve MPIDR value for. > - > - @retval MPIDR value of CPU at index > -**/ > -UINT64 > -FdtHelperGetMpidr ( > - IN UINTN CpuId > - ) > -{ > - VOID *DeviceTreeBase; > - CONST UINT64 *RegVal; > - INT32 Len; > - > - DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeBaseAddress); > - ASSERT (DeviceTreeBase != NULL); > - > - RegVal = fdt_getprop (DeviceTreeBase, > - mFdtFirstCpuOffset + (CpuId * mFdtCpuNodeSize), > - "reg", > - &Len); > - if (!RegVal) { > - DEBUG ((DEBUG_ERROR, "Couldn't find reg property for CPU:%d\n", CpuId)); > - return 0; > - } > - > - return (fdt64_to_cpu (ReadUnaligned64 (RegVal))); > -} > - > -/** Walks through the Device Tree created by Qemu and counts the number > - of CPUs present in it. > - > - @return The number of CPUs present. > -**/ > -EFIAPI > -UINT32 > -FdtHelperCountCpus ( > - VOID > - ) > -{ > - VOID *DeviceTreeBase; > - INT32 Node; > - INT32 Prev; > - INT32 CpuNode; > - UINT32 CpuCount; > - > - DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeBaseAddress); > - ASSERT (DeviceTreeBase != NULL); > - > - // Make sure we have a valid device tree blob > - ASSERT (fdt_check_header (DeviceTreeBase) == 0); > - > - CpuNode = fdt_path_offset (DeviceTreeBase, "/cpus"); > - if (CpuNode <= 0) { > - DEBUG ((DEBUG_ERROR, "Unable to locate /cpus in device tree\n")); > - return 0; > - } > - > - CpuCount = 0; > - > - // Walk through /cpus node and count the number of subnodes. > - // The count of these subnodes corresponds to the number of > - // CPUs created by Qemu. > - Prev = fdt_first_subnode (DeviceTreeBase, CpuNode); > - mFdtFirstCpuOffset = Prev; > - while (1) { > - CpuCount++; > - Node = fdt_next_subnode (DeviceTreeBase, Prev); > - if (Node < 0) { > - break; > - } > - mFdtCpuNodeSize = Node - Prev; > - Prev = Node; > - } > - > - return CpuCount; > -} > diff --git a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c > index 134fe73a5284..6315cce3fb7f 100644 > --- a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c > +++ b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c > @@ -11,8 +11,112 @@ > #include > #include > #include > +#include > #include > > +/** > + Get MPIDR for a given cpu from device tree passed by Qemu. > + > + @param [in] CpuId Index of cpu to retrieve MPIDR value for. > + > + @retval MPIDR value of CPU at index > +**/ > +UINT64 > +FdtHelperGetMpidr ( > + IN UINTN CpuId > + ) > +{ > + VOID *DeviceTreeBase; > + INT32 Node; > + INT32 Prev; > + UINT32 CpuCount; > + CONST UINT64 *RegVal; > + > + DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeBaseAddress); > + ASSERT (DeviceTreeBase != NULL); > + > + // Make sure we have a valid device tree blob > + ASSERT (fdt_check_header (DeviceTreeBase) == 0); > + > + Node = fdt_path_offset (DeviceTreeBase, "/cpus"); > + if (Node <= 0) { > + DEBUG ((DEBUG_ERROR, "Unable to locate /cpus in DeviceTree\n")); > + return 0; > + } > + > + CpuCount = 0; > + > + Prev = fdt_first_subnode (DeviceTreeBase, Node); > + while (1) { > + if (CpuCount == CpuId) { > + RegVal = fdt_getprop (DeviceTreeBase, Prev, "reg", NULL); > + if (!RegVal) { > + DEBUG ((DEBUG_ERROR, "Couldn't find reg property for CPU:%d\n", CpuId)); > + return 0; > + } > + > + return (fdt64_to_cpu (ReadUnaligned64 (RegVal))); > + } > + > + Node = fdt_next_subnode (DeviceTreeBase, Prev); > + if (Node < 0) { > + break; > + } > + > + Prev = Node; > + CpuCount++; > + } > + > + return 0; /* We did not found MPIDR */ > +} > + > +/** Walks through the Device Tree created by Qemu and counts the number > + of CPUs present in it. > + > + @return The number of CPUs present. > +**/ > +EFIAPI > +UINT32 > +FdtHelperCountCpus ( > + VOID > + ) > +{ > + VOID *DeviceTreeBase; > + INT32 Node; > + INT32 Prev; > + UINT32 CpuCount; > + > + DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeBaseAddress); > + ASSERT (DeviceTreeBase != NULL); > + > + // Make sure we have a valid device tree blob > + ASSERT (fdt_check_header (DeviceTreeBase) == 0); > + > + Node = fdt_path_offset (DeviceTreeBase, "/cpus"); > + if (Node <= 0) { > + DEBUG ((DEBUG_ERROR, "Unable to locate /cpus in DeviceTree\n")); > + return 0; > + } > + > + CpuCount = 0; > + > + // Walk through /cpus node and count the number of subnodes. > + // The count of these subnodes corresponds to the number of > + // CPUs created by Qemu. > + Prev = fdt_first_subnode (DeviceTreeBase, Node); > + while (1) { > + CpuCount++; > + Node = fdt_next_subnode (DeviceTreeBase, Prev); > + if (Node < 0) { > + break; > + } > + > + Prev = Node; > + } > + > + return CpuCount; > +} > + > /** > Get CPU count from information passed by Qemu. > > > -- > 2.44.0 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116769): https://edk2.groups.io/g/devel/message/116769 Mute This Topic: https://groups.io/mt/104763766/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-