From: "Leif Lindholm" <quic_llindhol@quicinc.com>
To: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
Cc: <devel@edk2.groups.io>,
Xiong Yining <xiongyining1480@phytium.com.cn>,
Ard Biesheuvel <ardb+tianocore@kernel.org>,
Graeme Gregory <graeme@xora.org.uk>,
Chen Baozi <chenbaozi@phytium.com.cn>
Subject: Re: [edk2-devel] [PATCH edk2-platforms v3 1/5] SbsaQemu: get the information of CPU topology via SMC calls
Date: Tue, 9 Jul 2024 13:42:06 +0100 [thread overview]
Message-ID: <ef8514c3-9369-46e9-9c95-35329db1405d@quicinc.com> (raw)
In-Reply-To: <17E08BE30DD079C5.26166@groups.io>
On 2024-07-09 13:40, Leif Lindholm wrote:
> On Tue, Jul 09, 2024 at 12:47:06 +0200, Marcin Juszkiewicz wrote:
>> Provide functions to check for CPU topology information:
>> - the number of sockets on sbsa-ref platform.
>> - the number of clusters in one socket.
>> - the number of cores in one cluster.
>> - the number of threads in one core.
>>
>> As SMC calls can return up to 4 return values, the number of sockets,
>> clusters and cores are read from TF-A using platform specific SMC call.
>> Number of threads is caluculated using the cpu count and the number of
>> sockets, clusters and cores.
>>
>> Signed-off-by: Xiong Yining <xiongyining1480@phytium.com.cn>
>> Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
>> ---
>> .../SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h | 1 +
>> .../Qemu/SbsaQemu/Include/Library/HardwareInfoLib.h | 26 ++++++++++++++
>> .../SbsaQemuHardwareInfoLib.c | 36 ++++++++++++++++++++
>> 3 files changed, 63 insertions(+)
>>
>> diff --git a/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h
>> index af6b120561ad..b57573735ace 100644
>> --- a/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h
>> +++ b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuSmc.h
>> @@ -16,6 +16,7 @@
>> #define SIP_SVC_GET_GIC_ITS SMC_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)
>> +#define SIP_SVC_GET_CPU_TOPOLOGY SMC_SIP_FUNCTION_ID(202)
>> #define SIP_SVC_GET_MEMORY_NODE_COUNT SMC_SIP_FUNCTION_ID(300)
>> #define SIP_SVC_GET_MEMORY_NODE SMC_SIP_FUNCTION_ID(301)
>>
>> diff --git a/Silicon/Qemu/SbsaQemu/Include/Library/HardwareInfoLib.h b/Silicon/Qemu/SbsaQemu/Include/Library/HardwareInfoLib.h
>> index e5076274fa0a..cef6f6f58194 100644
>> --- a/Silicon/Qemu/SbsaQemu/Include/Library/HardwareInfoLib.h
>> +++ b/Silicon/Qemu/SbsaQemu/Include/Library/HardwareInfoLib.h
>> @@ -15,6 +15,19 @@ typedef struct {
>> UINT64 AddressSize;
>> } MemoryInfo;
>>
>> +/**
>> + Sockets: the number of sockets on sbsa-ref platform.
>> + Clusters: the number of clusters in one socket.
>> + Cores: the number of cores in one cluster.
>> + Threads: the number of threads in one core.
>> +**/
>> +typedef struct {
>> + UINT32 Sockets;
>> + UINT32 Clusters;
>> + UINT32 Cores;
>> + UINT32 Threads;
>> +} CpuTopology;
>> +
>> /**
>> Get CPU count from information passed by Qemu.
>>
>> @@ -83,4 +96,17 @@ GetNumaNodeCount (
>> VOID
>> );
>>
>> +/**
>> + Get cpu topology(sockets, clusters, cores, threads) from device tree passed by Qemu.
>
> We don't need to talk about qemu internals that will change in the
> future. "Get cpu topology ... from Qemu.)
No, hang on, that's rubbish. "from TF-A".
/
Leif
>
> Other than that:
> Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
>
> /
> Leif
>
>> +
>> + @param [out] CpuTopo A pointer to the cpu topology.
>> +
>> +
>> + @retval the information of cpu topology.
>> +**/
>> +VOID
>> +GetCpuTopology (
>> + OUT CpuTopology *CpuTopo
>> + );
>> +
>> #endif /* HARDWARE_INFO_LIB */
>> diff --git a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c
>> index 596a3453c70f..b17a2ae99b4e 100644
>> --- a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c
>> +++ b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c
>> @@ -181,3 +181,39 @@ GetNumaNodeCount (
>>
>> return NumberNumaNodes;
>> }
>> +
>> +/**
>> + Get CPU topology.
>> +**/
>> +VOID
>> +GetCpuTopology (
>> + OUT CpuTopology *CpuTopo
>> + )
>> +{
>> + UINTN SmcResult;
>> + UINTN Arg0;
>> + UINTN Arg1;
>> + UINTN Arg2;
>> + UINT32 NumCores = GetCpuCount ();
>> +
>> + SmcResult = ArmCallSmc0 (SIP_SVC_GET_CPU_TOPOLOGY, &Arg0, &Arg1, &Arg2);
>> + if (SmcResult != SMC_SIP_CALL_SUCCESS) {
>> + DEBUG ((DEBUG_ERROR, "%a: SIP_SVC_GET_CPU_TOPOLOGY call failed. We have no cpu topology information.\n", __FUNCTION__));
>> + ResetShutdown ();
>> + } else {
>> + CpuTopo->Sockets = Arg0;
>> + CpuTopo->Clusters = Arg1;
>> + CpuTopo->Cores = Arg2;
>> + CpuTopo->Threads = NumCores / (CpuTopo->Sockets * CpuTopo->Clusters * CpuTopo->Cores);
>> + }
>> +
>> + DEBUG ((
>> + DEBUG_INFO,
>> + "%a: CPU Topology: sockets are %d, clusters are %d, cores are %d, threads are %d\n",
>> + __FUNCTION__,
>> + CpuTopo->Sockets,
>> + CpuTopo->Clusters,
>> + CpuTopo->Cores,
>> + CpuTopo->Threads
>> + ));
>> +}
>>
>> --
>> 2.45.2
>>
>
>
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#119837): https://edk2.groups.io/g/devel/message/119837
Mute This Topic: https://groups.io/mt/107120143/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
next prev parent reply other threads:[~2024-07-09 12:42 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-09 10:47 [edk2-devel] [PATCH edk2-platforms v3 0/5] SbsaQemu: Align the PPTT tables with QEMU Marcin Juszkiewicz
2024-07-09 10:47 ` [edk2-devel] [PATCH edk2-platforms v3 1/5] SbsaQemu: get the information of CPU topology via SMC calls Marcin Juszkiewicz
2024-07-09 12:40 ` Leif Lindholm
[not found] ` <17E08BE30DD079C5.26166@groups.io>
2024-07-09 12:42 ` Leif Lindholm [this message]
2024-07-09 10:47 ` [edk2-devel] [PATCH edk2-platforms v3 2/5] SbsaQemu: align the PPTT tables with QEMU Marcin Juszkiewicz
2024-07-09 12:43 ` Leif Lindholm
2024-07-09 10:47 ` [edk2-devel] [PATCH edk2-platforms v3 3/5] SbsaQemu: update PPTT to ACPI 6.5 Marcin Juszkiewicz
2024-07-09 12:44 ` Leif Lindholm
2024-07-09 10:47 ` [edk2-devel] [PATCH edk2-platforms v3 4/5] SbsaQemu: provide cache info per core in PPTT Marcin Juszkiewicz
2024-07-09 13:01 ` Leif Lindholm
2024-07-10 13:58 ` Jonathan Cameron via groups.io
2024-07-10 14:39 ` Leif Lindholm
2024-07-09 10:47 ` [edk2-devel] [PATCH edk2-platforms v3 5/5] SbsaQemu: introduce helper in PPTT generation Marcin Juszkiewicz
2024-07-09 13:00 ` Leif Lindholm
2024-07-09 13:12 ` Marcin Juszkiewicz
2024-07-09 13:15 ` Leif Lindholm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ef8514c3-9369-46e9-9c95-35329db1405d@quicinc.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox