On Thu, 26 Mar 2020 at 17:41, Pete Batard <p...@akeo.ie> wrote: > > On 2020.03.26 16:36, Ard Biesheuvel wrote: > > On Thu, 26 Mar 2020 at 17:30, Pete Batard <p...@akeo.ie> wrote: > >> > >> From: Jeremy Linton <lintonrjer...@gmail.com> > >> > >> ACPI 6.2 adds a new table, which describes how processing units > >> are related to each other in tree like fashion. Caches are > >> also sprinkled throughout the tree and describe the properties > >> of the caches in relation to other caches and processing units. > >> > >> Add a static PPTT table with one L2 cache and an L1I/L1D cache > >> for each of the 4 cores. The cache size/assc/policy/etc are from > >> the public docs. > >> > > > > So the RPi3 and RPi4 have the exact same cache topology? > > I'll let Jeremy elaborate if he wants, but we do set Pi 3 vs Pi 4 > specifics (cache sizes and stuff) in AcpiTables.h constants below. > > In other words, the PPTT aslc code only looks the same for both because > the differences are hidden in macros. >
Duh. Thanks for pointing that out :-) Reviewed-by: Ard Biesheuvel <ard.biesheu...@linaro.org> Pushed as fcc2a81066a2..6beb1692b09b > > > >> The source from the aslc is derived from the one in: > >> Silicon/AMD/Styx/Drivers/AcpiPlatformDxe/Pptt.aslc > >> > >> Signed-off-by: Pete Batard <p...@akeo.ie> > >> --- > >> Platform/RaspberryPi/AcpiTables/AcpiTables.h | 18 +++ > >> Platform/RaspberryPi/AcpiTables/AcpiTables.inf | 1 + > >> Platform/RaspberryPi/AcpiTables/Pptt.aslc | 169 ++++++++++++++++++++ > >> 3 files changed, 188 insertions(+) > >> > >> diff --git a/Platform/RaspberryPi/AcpiTables/AcpiTables.h > >> b/Platform/RaspberryPi/AcpiTables/AcpiTables.h > >> index dfae763d8107..9ee202255939 100644 > >> --- a/Platform/RaspberryPi/AcpiTables/AcpiTables.h > >> +++ b/Platform/RaspberryPi/AcpiTables/AcpiTables.h > >> @@ -136,6 +136,15 @@ typedef struct > >> #define BCM2836_MMCHS1_INTERRUPT 0x5E > >> #define BCM2836_MINI_UART_INTERRUPT 0x3D > >> #define BCM2836_PL011_UART_INTERRUPT 0x59 > >> +#define CORTEX_L1D_SIZE SIZE_16KB > >> +#define CORTEX_L1D_SETS 64 > >> +#define CORTEX_L1D_ASSC 4 > >> +#define CORTEX_L1I_SIZE SIZE_16KB > >> +#define CORTEX_L1I_SETS 128 > >> +#define CORTEX_L1I_ASSC 2 > >> +#define CORTEX_L2_SIZE SIZE_512KB > >> +#define CORTEX_L2_SETS 512 > >> +#define CORTEX_L2_ASSC 16 > >> #elif (RPI_MODEL == 4) > >> #define BCM2836_V3D_BUS_INTERRUPT 0x2A > >> #define BCM2836_DMA_INTERRUPT 0x3B > >> @@ -163,6 +172,15 @@ typedef struct > >> #define BCM2836_PL011_UART_INTERRUPT 0x99 > >> #define GENET_INTERRUPT0 0xBD > >> #define GENET_INTERRUPT1 0xBE > >> +#define CORTEX_L1D_SIZE SIZE_32KB > >> +#define CORTEX_L1D_SETS 256 > >> +#define CORTEX_L1D_ASSC 2 > >> +#define CORTEX_L1I_SIZE (3*SIZE_16KB) > >> +#define CORTEX_L1I_SETS 256 > >> +#define CORTEX_L1I_ASSC 3 > >> +#define CORTEX_L2_SIZE SIZE_1MB > >> +#define CORTEX_L2_SETS 1024 > >> +#define CORTEX_L2_ASSC 16 > >> #endif > >> > >> #endif // __ACPITABLES_H__ > >> diff --git a/Platform/RaspberryPi/AcpiTables/AcpiTables.inf > >> b/Platform/RaspberryPi/AcpiTables/AcpiTables.inf > >> index 6642541d6a0a..e6b7d791ab47 100644 > >> --- a/Platform/RaspberryPi/AcpiTables/AcpiTables.inf > >> +++ b/Platform/RaspberryPi/AcpiTables/AcpiTables.inf > >> @@ -32,6 +32,7 @@ [Sources] > >> Dsdt.asl > >> Csrt.aslc > >> Spcr.aslc > >> + Pptt.aslc > >> > >> [Packages] > >> ArmPkg/ArmPkg.dec > >> diff --git a/Platform/RaspberryPi/AcpiTables/Pptt.aslc > >> b/Platform/RaspberryPi/AcpiTables/Pptt.aslc > >> new file mode 100644 > >> index 000000000000..bc09e5fdaee4 > >> --- /dev/null > >> +++ b/Platform/RaspberryPi/AcpiTables/Pptt.aslc > >> @@ -0,0 +1,169 @@ > >> +/** @file > >> + * > >> + * Processor Properties Topology Table (PPTT) > >> + * > >> + * Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR> > >> + * > >> + * SPDX-License-Identifier: BSD-2-Clause-Patent > >> + * > >> + **/ > >> + > >> +#include <IndustryStandard/Acpi.h> > >> + > >> +#include "AcpiTables.h" > >> + > >> +#define NUM_CORES 4 > >> +#define NUM_CLUSTERS 1 > >> + > >> +#define FIELD_OFFSET(type, name) __builtin_offsetof(type, name) > >> + > >> +#pragma pack(1) > >> +typedef struct { > >> + EFI_ACPI_6_3_PPTT_STRUCTURE_PROCESSOR Core; > >> + UINT32 Offset[2]; > >> + EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE DCache; > >> + EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE ICache; > >> +} ACPI_6_3_PPTT_CORE; > >> + > >> +typedef struct { > >> + EFI_ACPI_6_3_PPTT_STRUCTURE_PROCESSOR Cluster; > >> + UINT32 Offset[1]; > >> + EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE L2Cache; > >> + ACPI_6_3_PPTT_CORE > >> Cores[NUM_CORES]; > >> +} ACPI_6_3_PPTT_CLUSTER; > >> + > >> +typedef struct { > >> + EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_HEADER Pptt; > >> + ACPI_6_3_PPTT_CLUSTER > >> Packages[NUM_CLUSTERS]; > >> +} ACPI_6_3_PPTT_STRUCTURE; > >> +#pragma pack() > >> + > >> +#define PPTT_CORE(pid, cid, id) { > >> \ > >> + { > >> \ > >> + EFI_ACPI_6_3_PPTT_TYPE_PROCESSOR, > >> \ > >> + FIELD_OFFSET (ACPI_6_3_PPTT_CORE, DCache), > >> \ > >> + {}, > >> \ > >> + { > >> \ > >> + EFI_ACPI_6_3_PPTT_PACKAGE_NOT_PHYSICAL, /* Not PhysicalPackage > >> */ \ > >> + EFI_ACPI_6_3_PPTT_PROCESSOR_ID_VALID, /* AcpiProcessorIdValid > >> */ \ > >> + EFI_ACPI_6_3_PPTT_PROCESSOR_IS_NOT_THREAD, /* Is not a Thread */ > >> \ > >> + EFI_ACPI_6_3_PPTT_NODE_IS_LEAF, /* Leaf */ > >> \ > >> + EFI_ACPI_6_3_PPTT_IMPLEMENTATION_IDENTICAL, /* identical ignored */ > >> \ > >> + }, > >> \ > >> + FIELD_OFFSET (ACPI_6_3_PPTT_STRUCTURE, > >> \ > >> + Packages[pid]), /* Parent */ > >> \ > >> + 256 * (cid) + (id), /* AcpiProcessorId */ > >> \ > >> + 2, /* > >> NumberOfPrivateResources */ \ > >> + }, { > >> \ > >> + FIELD_OFFSET (ACPI_6_3_PPTT_STRUCTURE, > >> \ > >> + Packages[pid].Cores[id].DCache), > >> \ > >> + FIELD_OFFSET (ACPI_6_3_PPTT_STRUCTURE, > >> \ > >> + Packages[pid].Cores[id].ICache), > >> \ > >> + }, { > >> \ > >> + EFI_ACPI_6_3_PPTT_TYPE_CACHE, > >> \ > >> + sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE), > >> \ > >> + {}, > >> \ > >> + { > >> \ > >> + 1, /* SizePropertyValid */ > >> \ > >> + 1, /* NumberOfSetsValid */ > >> \ > >> + 1, /* AssociativityValid */ > >> \ > >> + 1, /* AllocationTypeValid */ > >> \ > >> + 1, /* CacheTypeValid */ > >> \ > >> + 1, /* WritePolicyValid */ > >> \ > >> + 1, /* LineSizeValid */ > >> \ > >> + }, > >> \ > >> + 0, /* NextLevelOfCache */ > >> \ > >> + CORTEX_L1D_SIZE, /* Size */ > >> \ > >> + CORTEX_L1D_SETS, /* NumberOfSets */ > >> \ > >> + CORTEX_L1D_ASSC, /* Associativity */ > >> \ > >> + { > >> \ > >> + EFI_ACPI_6_3_CACHE_ATTRIBUTES_ALLOCATION_READ_WRITE, > >> \ > >> + EFI_ACPI_6_3_CACHE_ATTRIBUTES_CACHE_TYPE_DATA, > >> \ > >> + EFI_ACPI_6_3_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_BACK, > >> \ > >> + }, > >> \ > >> + 64 /* LineSize */ > >> \ > >> + }, { > >> \ > >> + EFI_ACPI_6_3_PPTT_TYPE_CACHE, > >> \ > >> + sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE), > >> \ > >> + {}, > >> \ > >> + { > >> \ > >> + 1, /* SizePropertyValid */ > >> \ > >> + 1, /* NumberOfSetsValid */ > >> \ > >> + 1, /* AssociativityValid */ > >> \ > >> + 1, /* AllocationTypeValid */ > >> \ > >> + 1, /* CacheTypeValid */ > >> \ > >> + 0, /* WritePolicyValid */ > >> \ > >> + 1, /* LineSizeValid */ > >> \ > >> + }, > >> \ > >> + 0, /* NextLevelOfCache */ > >> \ > >> + CORTEX_L1I_SIZE, /* Size */ > >> \ > >> + CORTEX_L1I_SETS, /* NumberOfSets */ > >> \ > >> + CORTEX_L1I_ASSC, /* Associativity */ > >> \ > >> + { > >> \ > >> + EFI_ACPI_6_3_CACHE_ATTRIBUTES_ALLOCATION_READ, /* AllocationType > >> */ \ > >> + EFI_ACPI_6_3_CACHE_ATTRIBUTES_CACHE_TYPE_INSTRUCTION, > >> \ > >> + 0, /* WritePolicy */ > >> \ > >> + }, > >> \ > >> + 64 /* LineSize */ > >> \ > >> + } > >> \ > >> +} > >> + > >> +#define PPTT_CLUSTER(pid, cid) { > >> \ > >> + { > >> \ > >> + EFI_ACPI_6_3_PPTT_TYPE_PROCESSOR, > >> \ > >> + FIELD_OFFSET (ACPI_6_3_PPTT_CLUSTER, L2Cache), > >> \ > >> + {}, > >> \ > >> + { > >> \ > >> + EFI_ACPI_6_3_PPTT_PACKAGE_PHYSICAL, /* PhysicalPackage */ > >> \ > >> + EFI_ACPI_6_3_PPTT_PROCESSOR_ID_INVALID, /* AcpiProcessorIdValid > >> */ \ > >> + EFI_ACPI_6_3_PPTT_PROCESSOR_IS_NOT_THREAD, /* Is not a Thread */ > >> \ > >> + EFI_ACPI_6_3_PPTT_NODE_IS_NOT_LEAF, /* not Leaf */ > >> \ > >> + EFI_ACPI_6_3_PPTT_IMPLEMENTATION_IDENTICAL, /* identical cores */ > >> \ > >> + }, > >> \ > >> + 0, /* Parent */ > >> \ > >> + 0, /* AcpiProcessorId */ > >> \ > >> + 1, /* NumberOfPrivateResources > >> */ \ > >> + }, { > >> \ > >> + FIELD_OFFSET (ACPI_6_3_PPTT_STRUCTURE, Packages[pid].L2Cache), \ > >> + }, { > >> \ > >> + EFI_ACPI_6_3_PPTT_TYPE_CACHE, > >> \ > >> + sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE), > >> \ > >> + {}, > >> \ > >> + { > >> \ > >> + 1, /* SizePropertyValid */ > >> \ > >> + 1, /* NumberOfSetsValid */ > >> \ > >> + 1, /* AssociativityValid */ > >> \ > >> + 1, /* AllocationTypeValid */ > >> \ > >> + 1, /* CacheTypeValid */ > >> \ > >> + 1, /* WritePolicyValid */ > >> \ > >> + 1, /* LineSizeValid */ > >> \ > >> + }, > >> \ > >> + 0, /* NextLevelOfCache */ > >> \ > >> + CORTEX_L2_SIZE, /* Size */ > >> \ > >> + CORTEX_L2_SETS, /* NumberOfSets */ > >> \ > >> + CORTEX_L2_ASSC, /* Associativity */ > >> \ > >> + { > >> \ > >> + EFI_ACPI_6_3_CACHE_ATTRIBUTES_ALLOCATION_READ_WRITE, > >> \ > >> + EFI_ACPI_6_3_CACHE_ATTRIBUTES_CACHE_TYPE_UNIFIED, > >> \ > >> + EFI_ACPI_6_3_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_BACK, > >> \ > >> + }, > >> \ > >> + 64 /* LineSize */ > >> \ > >> + }, { > >> \ > >> + PPTT_CORE(pid, cid, 0), > >> \ > >> + PPTT_CORE(pid, cid, 1), > >> \ > >> + PPTT_CORE(pid, cid, 2), > >> \ > >> + PPTT_CORE(pid, cid, 3), > >> \ > >> + } > >> \ > >> +} > >> + > >> +ACPI_6_3_PPTT_STRUCTURE Pptt = { > >> + { > >> + > >> ACPI_HEADER(EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE, > >> + ACPI_6_3_PPTT_STRUCTURE, > >> + > >> EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_REVISION), > >> + }, { > >> + PPTT_CLUSTER (0, 0), > >> + } > >> +}; > >> + > >> +VOID * CONST ReferenceAcpiTable = &Pptt; > >> -- > >> 2.21.0.windows.1 > >> > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#56410): https://edk2.groups.io/g/devel/message/56410 Mute This Topic: https://groups.io/mt/72567697/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-