On Tue, Jul 09, 2024 at 12:47:09 +0200, Marcin Juszkiewicz wrote:
> During Linaro Connect MAD24 I was asked to move cache information from
> being 'per cluster' to be 'per core'. This is a move for implementing
> MPAM support.
> 
> So topology moves from:
> 
> Socket -> Clusters -> Cores + Caches -> Threads (if exist)
> 
> to:
> 
> Socket -> Clusters -> Cores -> Caches + Threads (if exist)
> 
> Cache sizes are still 32+32+512KB (L1d, L1i, L2) as QEMU does not
> implement them at all so we can tell whatever.
> 
> Signed-off-by: Marcin Juszkiewicz <marcin.juszkiew...@linaro.org>

Reviewed-by: Leif Lindholm <quic_llind...@quicinc.com>

/
    Leif

> ---
>  .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c        | 47 
> +++++++++++---------
>  1 file changed, 25 insertions(+), 22 deletions(-)
> 
> diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c 
> b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
> index cf0102d11f1f..a7a9664abdcb 100644
> --- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
> +++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
> @@ -562,8 +562,8 @@ AddPpttTable (
>    TableSize = sizeof (EFI_ACPI_DESCRIPTION_HEADER) +
>                CpuTopo.Sockets * (sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR) +
>                                   CpuTopo.Clusters * (sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR) +
> -                                                     sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE) * 3 +
>                                                       CpuTopo.Cores * (sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR) +
> +                                                                      sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE) * 3 +
>                                                                        sizeof 
> (UINT32) * 2)));
>  
>    if (CpuTopo.Threads > 1) {
> @@ -609,10 +609,7 @@ AddPpttTable (
>  
>      ClusterIndex = SocketIndex + sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR);
>      for (ClusterNum = 0; ClusterNum < CpuTopo.Clusters; ClusterNum++) {
> -      L1DCacheIndex = ClusterIndex + sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR);
> -      L1ICacheIndex = L1DCacheIndex + sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> -      L2CacheIndex  = L1ICacheIndex + sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> -      CoreIndex     = L2CacheIndex + sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> +      CoreIndex = ClusterIndex + sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR);
>  
>        // Add the Cluster PPTT structure
>        EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR  Cluster = 
> SBSAQEMU_ACPI_PROCESSOR_HIERARCHY_NODE_STRUCTURE_INIT (
> @@ -624,27 +621,15 @@ AddPpttTable (
>        CopyMem (New, &Cluster, sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR));
>        New += sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR);
>  
> -      // Add L1 D Cache structure
> -      L1DCache.CacheId = CacheId++;
> -      CopyMem (New, &L1DCache, sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE));
> -      ((EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE *)New)->NextLevelOfCache = 
> L2CacheIndex;
> -      New                                                         += sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> -
> -      // Add L1 I Cache structure
> -      L1ICache.CacheId = CacheId++;
> -      CopyMem (New, &L1ICache, sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE));
> -      ((EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE *)New)->NextLevelOfCache = 
> L2CacheIndex;
> -      New                                                         += sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> -
> -      // Add L2 Cache structure
> -      L2Cache.CacheId = CacheId++;
> -      CopyMem (New, &L2Cache, sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE));
> -      New += sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> -
>        for (CoreNum = 0; CoreNum < CpuTopo.Cores; CoreNum++) {
>          UINT32  *PrivateResourcePtr;
>          UINT32  CoreCpuId;
>  
> +        // two UINT32s for PrivateResourcePtr data
> +        L1DCacheIndex = CoreIndex + sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR) + sizeof (UINT32) * 2;
> +        L1ICacheIndex = L1DCacheIndex + sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> +        L2CacheIndex  = L1ICacheIndex + sizeof 
> (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> +
>          if (CpuTopo.Threads == 1) {
>            CoreCpuId = CpuId;
>          } else {
> @@ -665,6 +650,23 @@ AddPpttTable (
>          PrivateResourcePtr[1] = L1ICacheIndex;
>          New                  += (2 * sizeof (UINT32));
>  
> +        // Add L1 D Cache structure
> +        L1DCache.CacheId = CacheId++;
> +        CopyMem (New, &L1DCache, sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE));
> +        ((EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE *)New)->NextLevelOfCache = 
> L2CacheIndex;
> +        New                                                         += 
> sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> +
> +        // Add L1 I Cache structure
> +        L1ICache.CacheId = CacheId++;
> +        CopyMem (New, &L1ICache, sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE));
> +        ((EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE *)New)->NextLevelOfCache = 
> L2CacheIndex;
> +        New                                                         += 
> sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> +
> +        // Add L2 Cache structure
> +        L2Cache.CacheId = CacheId++;
> +        CopyMem (New, &L2Cache, sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE));
> +        New += sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE);
> +
>          if (CpuTopo.Threads == 1) {
>            CpuId++;
>          } else {
> @@ -685,6 +687,7 @@ AddPpttTable (
>          }
>  
>          CoreIndex += sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_PROCESSOR) + sizeof 
> (UINT32) * 2;
> +        CoreIndex += sizeof (EFI_ACPI_6_5_PPTT_STRUCTURE_CACHE) * 3;
>        }
>  
>        ClusterIndex = CoreIndex;
> 
> -- 
> 2.45.2
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#119842): https://edk2.groups.io/g/devel/message/119842
Mute This Topic: https://groups.io/mt/107120146/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to