public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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]
-=-=-=-=-=-=-=-=-=-=-=-



  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