Re: [edk2-devel] [PATCH edk2-platforms v6 1/7] Platform/SbsaQemu: add SbsaQemuHardwareInfoLib
W dniu 14.03.2024 o 16:14, Ard Biesheuvel pisze: +++ b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf @@ -0,0 +1,32 @@ +#/* @file +# +# Copyright (c) Linaro Ltd. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#*/ + +[Defines] + INF_VERSION= 0x0001001c + BASE_NAME = SbsaQemuHardwareInfoLib + FILE_GUID = 6454006f-6502-46e2-9be4-4bba8d4b29fb + MODULE_TYPE= BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = ArmPlatformLib + This is a new library class, so you should name it and define it in the associated .DEC file (which does not exist yet) You can look at Platform/Qemu/QemuOpenBoardPkg/QemuOpenBoardPkg.dec for inspiration (but please use 1.27 and not 0x00010005 for the version) Just noticed there is already a .DEC in Silicon/Qemu/SbsaQemu/ so better to put it there. I based on other libraries in Silicon/Qemu/SbsaQemu/Library/ directory. One C source file, one INF and then a line in Platform/Qemu/SbsaQemu/SbsaQemu.dsc file to tell where it is. -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116814): https://edk2.groups.io/g/devel/message/116814 Mute This Topic: https://groups.io/mt/104763762/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [PATCH edk2-platforms v6 1/7] Platform/SbsaQemu: add SbsaQemuHardwareInfoLib
On Thu, 14 Mar 2024 at 16:09, Ard Biesheuvel wrote: > > On Wed, 6 Mar 2024 at 12:42, Marcin Juszkiewicz > wrote: > > > > This library provides functions to check for hardware information. > > For now it covers CPU ones: > > > > - amount of cpu cores > > - MPIDR value for cpu core > > - NUMA node id for cpu core > > > > Values are read from TF-A using platform specific SMC calls. > > > > Signed-off-by: Marcin Juszkiewicz > > --- > > Platform/Qemu/SbsaQemu/SbsaQemu.dsc | 3 +- > > .../SbsaQemuHardwareInfoLib.inf | 32 +++ > > .../SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h | 15 ++- > > .../Include/Library/SbsaQemuHardwareInfoLib.h| 45 + > > .../SbsaQemuHardwareInfoLib.c| 98 > > > > 5 files changed, 189 insertions(+), 4 deletions(-) > > > > diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > > b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > > index 378600050df9..07cb3490f4cf 100644 > > --- a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > > +++ b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > > @@ -1,6 +1,6 @@ > > # > > # Copyright (c) 2021, NUVIA Inc. All rights reserved. > > -# Copyright (c) 2019, Linaro Limited. All rights reserved. > > +# Copyright (c) 2019-2024, Linaro Ltd. All rights reserved. > > # > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > @@ -128,6 +128,7 @@ [LibraryClasses.common] > > > >FdtHelperLib|Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.inf > >OemMiscLib|Platform/Qemu/SbsaQemu/OemMiscLib/OemMiscLib.inf > > + > > SbsaQemuHardwareInfoLib|Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > > > ># Debug Support > > > > PeCoffExtraActionLib|ArmPkg/Library/DebugPeCoffExtraActionLib/DebugPeCoffExtraActionLib.inf > > diff --git > > a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > > > > b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > > new file mode 100644 > > index ..8c2def1878e6 > > --- /dev/null > > +++ > > b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > > @@ -0,0 +1,32 @@ > > +#/* @file > > +# > > +# Copyright (c) Linaro Ltd. All rights reserved. > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +#*/ > > + > > +[Defines] > > + INF_VERSION= 0x0001001c > > + BASE_NAME = SbsaQemuHardwareInfoLib > > + FILE_GUID = 6454006f-6502-46e2-9be4-4bba8d4b29fb > > + MODULE_TYPE= BASE > > + VERSION_STRING = 1.0 > > + LIBRARY_CLASS = ArmPlatformLib > > + > > This is a new library class, so you should name it and define it in > the associated .DEC file (which does not exist yet) > > You can look at Platform/Qemu/QemuOpenBoardPkg/QemuOpenBoardPkg.dec > for inspiration (but please use 1.27 and not 0x00010005 for the > version) > Just noticed there is already a .DEC in Silicon/Qemu/SbsaQemu/ so better to put it there. > > > +[Sources] > > + SbsaQemuHardwareInfoLib.c > > + > > +[Packages] > > + ArmPkg/ArmPkg.dec > > + EmbeddedPkg/EmbeddedPkg.dec > > + MdePkg/MdePkg.dec > > + Silicon/Qemu/SbsaQemu/SbsaQemu.dec > > + > > +[LibraryClasses] > > + ArmSmcLib > > + BaseMemoryLib > > + DebugLib > > + > > + [Pcd] > > + gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdCoreCount > > diff --git a/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h > > b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h > > index 7934875e4aba..d9faee7fa5b2 100644 > > --- a/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h > > +++ b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h > > @@ -11,8 +11,17 @@ > > > > #include > > > > -#define SIP_SVC_VERSION SMC_SIP_FUNCTION_ID(1) > > -#define SIP_SVC_GET_GIC SMC_SIP_FUNCTION_ID(100) > > -#define SIP_SVC_GET_GIC_ITS SMC_SIP_FUNCTION_ID(101) > > +#define SIP_SVC_VERSIONSMC_SIP_FUNCTION_ID(1) > > +#define SIP_SVC_GET_GICSMC_SIP_FUNCTION_ID(100) > > +#define SIP_SVC_GET_GIC_ITSSMC_SIP_FUNCTION_ID(101) > > +#define SIP_SVC_GET_CPU_COUNT SMC_SIP_FUNCTION_ID(200) > > +#define SIP_SVC_GET_CPU_NODE SMC_SIP_FUNCTION_ID(201) > > + > > +/* > > + * SMCC does not define return codes for SiP functions. > > + * We use Architecture ones then. > > + */ > > + > > +#define SMC_SIP_CALL_SUCCESS SMC_ARCH_CALL_SUCCESS > > > > #endif /* SBSA_QEMU_SMC_H_ */ > > diff --git > > a/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h > > b/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h > > new file mode 100644 > > index ..ca52c6b27093 > > --- /dev/null > > +++ b/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h > > @@ -0,0 +1,45 @@ > > +/** @file > > +* > > +* Copyright (c) Linaro Ltd. All rights reserved. > > +* > > +* SPDX-License-Identifier:
Re: [edk2-devel] [PATCH edk2-platforms v6 1/7] Platform/SbsaQemu: add SbsaQemuHardwareInfoLib
On Wed, 6 Mar 2024 at 12:42, Marcin Juszkiewicz wrote: > > This library provides functions to check for hardware information. > For now it covers CPU ones: > > - amount of cpu cores > - MPIDR value for cpu core > - NUMA node id for cpu core > > Values are read from TF-A using platform specific SMC calls. > > Signed-off-by: Marcin Juszkiewicz > --- > Platform/Qemu/SbsaQemu/SbsaQemu.dsc | 3 +- > .../SbsaQemuHardwareInfoLib.inf | 32 +++ > .../SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h | 15 ++- > .../Include/Library/SbsaQemuHardwareInfoLib.h| 45 + > .../SbsaQemuHardwareInfoLib.c| 98 > > 5 files changed, 189 insertions(+), 4 deletions(-) > > diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > index 378600050df9..07cb3490f4cf 100644 > --- a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > +++ b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc > @@ -1,6 +1,6 @@ > # > # Copyright (c) 2021, NUVIA Inc. All rights reserved. > -# Copyright (c) 2019, Linaro Limited. All rights reserved. > +# Copyright (c) 2019-2024, Linaro Ltd. All rights reserved. > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -128,6 +128,7 @@ [LibraryClasses.common] > >FdtHelperLib|Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.inf >OemMiscLib|Platform/Qemu/SbsaQemu/OemMiscLib/OemMiscLib.inf > + > SbsaQemuHardwareInfoLib|Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > ># Debug Support > > PeCoffExtraActionLib|ArmPkg/Library/DebugPeCoffExtraActionLib/DebugPeCoffExtraActionLib.inf > diff --git > a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > > b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > new file mode 100644 > index ..8c2def1878e6 > --- /dev/null > +++ > b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf > @@ -0,0 +1,32 @@ > +#/* @file > +# > +# Copyright (c) Linaro Ltd. All rights reserved. > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +#*/ > + > +[Defines] > + INF_VERSION= 0x0001001c > + BASE_NAME = SbsaQemuHardwareInfoLib > + FILE_GUID = 6454006f-6502-46e2-9be4-4bba8d4b29fb > + MODULE_TYPE= BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = ArmPlatformLib > + This is a new library class, so you should name it and define it in the associated .DEC file (which does not exist yet) You can look at Platform/Qemu/QemuOpenBoardPkg/QemuOpenBoardPkg.dec for inspiration (but please use 1.27 and not 0x00010005 for the version) > +[Sources] > + SbsaQemuHardwareInfoLib.c > + > +[Packages] > + ArmPkg/ArmPkg.dec > + EmbeddedPkg/EmbeddedPkg.dec > + MdePkg/MdePkg.dec > + Silicon/Qemu/SbsaQemu/SbsaQemu.dec > + > +[LibraryClasses] > + ArmSmcLib > + BaseMemoryLib > + DebugLib > + > + [Pcd] > + gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdCoreCount > diff --git a/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h > b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h > index 7934875e4aba..d9faee7fa5b2 100644 > --- a/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h > +++ b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h > @@ -11,8 +11,17 @@ > > #include > > -#define SIP_SVC_VERSION SMC_SIP_FUNCTION_ID(1) > -#define SIP_SVC_GET_GIC SMC_SIP_FUNCTION_ID(100) > -#define SIP_SVC_GET_GIC_ITS SMC_SIP_FUNCTION_ID(101) > +#define SIP_SVC_VERSIONSMC_SIP_FUNCTION_ID(1) > +#define SIP_SVC_GET_GICSMC_SIP_FUNCTION_ID(100) > +#define SIP_SVC_GET_GIC_ITSSMC_SIP_FUNCTION_ID(101) > +#define SIP_SVC_GET_CPU_COUNT SMC_SIP_FUNCTION_ID(200) > +#define SIP_SVC_GET_CPU_NODE SMC_SIP_FUNCTION_ID(201) > + > +/* > + * SMCC does not define return codes for SiP functions. > + * We use Architecture ones then. > + */ > + > +#define SMC_SIP_CALL_SUCCESS SMC_ARCH_CALL_SUCCESS > > #endif /* SBSA_QEMU_SMC_H_ */ > diff --git a/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h > b/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h > new file mode 100644 > index ..ca52c6b27093 > --- /dev/null > +++ b/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h > @@ -0,0 +1,45 @@ > +/** @file > +* > +* Copyright (c) Linaro Ltd. All rights reserved. > +* > +* SPDX-License-Identifier: BSD-2-Clause-Patent > +* > +**/ > + > +#ifndef SBSA_QEMU_HARDWARE_INFO_ > +#define SBSA_QEMU_HARDWARE_INFO_ > + > +/** > + Get CPU count from information passed by Qemu. > + > +**/ > +VOID > +SbsaQemuGetCpuCount ( > + VOID > + ); > + > +/** > + Get MPIDR for a given cpu from device tree passed by Qemu. > + > + @param [in] CpuIdIndex of cpu to retrieve MPIDR value for. > + > + @retvalMPIDR value
[edk2-devel] [PATCH edk2-platforms v6 1/7] Platform/SbsaQemu: add SbsaQemuHardwareInfoLib
This library provides functions to check for hardware information. For now it covers CPU ones: - amount of cpu cores - MPIDR value for cpu core - NUMA node id for cpu core Values are read from TF-A using platform specific SMC calls. Signed-off-by: Marcin Juszkiewicz --- Platform/Qemu/SbsaQemu/SbsaQemu.dsc | 3 +- .../SbsaQemuHardwareInfoLib.inf | 32 +++ .../SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h | 15 ++- .../Include/Library/SbsaQemuHardwareInfoLib.h| 45 + .../SbsaQemuHardwareInfoLib.c| 98 5 files changed, 189 insertions(+), 4 deletions(-) diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc index 378600050df9..07cb3490f4cf 100644 --- a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc +++ b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc @@ -1,6 +1,6 @@ # # Copyright (c) 2021, NUVIA Inc. All rights reserved. -# Copyright (c) 2019, Linaro Limited. All rights reserved. +# Copyright (c) 2019-2024, Linaro Ltd. All rights reserved. # # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -128,6 +128,7 @@ [LibraryClasses.common] FdtHelperLib|Silicon/Qemu/SbsaQemu/Library/FdtHelperLib/FdtHelperLib.inf OemMiscLib|Platform/Qemu/SbsaQemu/OemMiscLib/OemMiscLib.inf + SbsaQemuHardwareInfoLib|Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf # Debug Support PeCoffExtraActionLib|ArmPkg/Library/DebugPeCoffExtraActionLib/DebugPeCoffExtraActionLib.inf diff --git a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf new file mode 100644 index ..8c2def1878e6 --- /dev/null +++ b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.inf @@ -0,0 +1,32 @@ +#/* @file +# +# Copyright (c) Linaro Ltd. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#*/ + +[Defines] + INF_VERSION= 0x0001001c + BASE_NAME = SbsaQemuHardwareInfoLib + FILE_GUID = 6454006f-6502-46e2-9be4-4bba8d4b29fb + MODULE_TYPE= BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = ArmPlatformLib + +[Sources] + SbsaQemuHardwareInfoLib.c + +[Packages] + ArmPkg/ArmPkg.dec + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + Silicon/Qemu/SbsaQemu/SbsaQemu.dec + +[LibraryClasses] + ArmSmcLib + BaseMemoryLib + DebugLib + + [Pcd] + gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdCoreCount diff --git a/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h index 7934875e4aba..d9faee7fa5b2 100644 --- a/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h +++ b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h @@ -11,8 +11,17 @@ #include -#define SIP_SVC_VERSION SMC_SIP_FUNCTION_ID(1) -#define SIP_SVC_GET_GIC SMC_SIP_FUNCTION_ID(100) -#define SIP_SVC_GET_GIC_ITS SMC_SIP_FUNCTION_ID(101) +#define SIP_SVC_VERSIONSMC_SIP_FUNCTION_ID(1) +#define SIP_SVC_GET_GICSMC_SIP_FUNCTION_ID(100) +#define SIP_SVC_GET_GIC_ITSSMC_SIP_FUNCTION_ID(101) +#define SIP_SVC_GET_CPU_COUNT SMC_SIP_FUNCTION_ID(200) +#define SIP_SVC_GET_CPU_NODE SMC_SIP_FUNCTION_ID(201) + +/* + * SMCC does not define return codes for SiP functions. + * We use Architecture ones then. + */ + +#define SMC_SIP_CALL_SUCCESS SMC_ARCH_CALL_SUCCESS #endif /* SBSA_QEMU_SMC_H_ */ diff --git a/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h b/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h new file mode 100644 index ..ca52c6b27093 --- /dev/null +++ b/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h @@ -0,0 +1,45 @@ +/** @file +* +* Copyright (c) Linaro Ltd. All rights reserved. +* +* SPDX-License-Identifier: BSD-2-Clause-Patent +* +**/ + +#ifndef SBSA_QEMU_HARDWARE_INFO_ +#define SBSA_QEMU_HARDWARE_INFO_ + +/** + Get CPU count from information passed by Qemu. + +**/ +VOID +SbsaQemuGetCpuCount ( + VOID + ); + +/** + Get MPIDR for a given cpu from device tree passed by Qemu. + + @param [in] CpuIdIndex of cpu to retrieve MPIDR value for. + + @retvalMPIDR value of CPU at index +**/ +UINT64 +SbsaQemuGetMpidr ( + IN UINTN CpuId + ); + +/** + Get NUMA node id for a given cpu from device tree passed by Qemu. + + @param [in] CpuIdIndex of cpu to retrieve NUMA node id for. + + @retvalNUMA node id for CPU at index +**/ +UINT64 +SbsaQemuGetCpuNumaNode ( + IN UINTN CpuId + ); + +#endif /* SBSA_QEMU_HARDWARE_INFO_ */ diff --git a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c new file mode 100644 index