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:40:55 +0100	[thread overview]
Message-ID: <Zo0v13JwcVOr+dLS@qc-i7.hemma.eciton.net> (raw)
In-Reply-To: <20240709-acpi65-v3-1-ee93ba536fcf@linaro.org>

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.)

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 (#119836): https://edk2.groups.io/g/devel/message/119836
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]
-=-=-=-=-=-=-=-=-=-=-=-



  reply	other threads:[~2024-07-09 12:41 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 [this message]
     [not found]   ` <17E08BE30DD079C5.26166@groups.io>
2024-07-09 12:42     ` Leif Lindholm
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=Zo0v13JwcVOr+dLS@qc-i7.hemma.eciton.net \
    --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