123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- /** @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
- #if (RPI_MODEL == 3)
- #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 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
- #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;
|