/** @file
|
Phytium ACPI ASL Sources.
|
|
Copyright (C) 2020, Phytium Technology Co Ltd. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
#include <IndustryStandard/Acpi.h>
|
#include <Platform.h>
|
|
#define FIELD_OFFSET(type, name) __builtin_offsetof(type, name)
|
|
#pragma pack(1)
|
typedef struct {
|
EFI_ACPI_6_2_PPTT_STRUCTURE_PROCESSOR Core;
|
UINT32 Offset[2];
|
EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE DCache;
|
EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE ICache;
|
} PHYTIUM_PPTT_CORE;
|
|
typedef struct {
|
EFI_ACPI_6_2_PPTT_STRUCTURE_PROCESSOR Cluster;
|
UINT32 Offset[1];
|
EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE L2Cache;
|
PHYTIUM_PPTT_CORE Cores[2];
|
} PHYTIUM_PPTT_CLUSTER;
|
|
typedef struct {
|
EFI_ACPI_6_2_PPTT_STRUCTURE_PROCESSOR Package;
|
UINT32 Offset[1];
|
EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE L3Cache;
|
PHYTIUM_PPTT_CLUSTER Clusters[2];
|
EFI_ACPI_6_2_PPTT_STRUCTURE_ID ID;
|
} PHYTIUM_PPTT_PACKAGE;
|
|
typedef struct {
|
EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_HEADER Pptt;
|
PHYTIUM_PPTT_PACKAGE Packages[1];
|
} PHYTIUM_PPTT_TABLE;
|
#pragma pack()
|
|
#define PPTT_CORE(pid, cid, id) { \
|
{ \
|
EFI_ACPI_6_2_PPTT_TYPE_PROCESSOR, \
|
FIELD_OFFSET (PHYTIUM_PPTT_CORE, DCache), \
|
{}, \
|
{ \
|
0, /* PhysicalPackage */ \
|
EFI_ACPI_6_2_PPTT_PROCESSOR_ID_VALID, /* AcpiProcessorIdValid */ \
|
}, \
|
FIELD_OFFSET (PHYTIUM_PPTT_TABLE, \
|
Packages[pid].Clusters[cid]), /* Parent */ \
|
8 * (pid) + 4 * (cid) + (id), /* AcpiProcessorId */ \
|
2, /* NumberOfPrivateResources */\
|
}, { \
|
FIELD_OFFSET (PHYTIUM_PPTT_TABLE, \
|
Packages[pid].Clusters[cid].Cores[id].DCache), \
|
FIELD_OFFSET (PHYTIUM_PPTT_TABLE, \
|
Packages[pid].Clusters[cid].Cores[id].ICache), \
|
}, { \
|
EFI_ACPI_6_2_PPTT_TYPE_CACHE, \
|
sizeof (EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE), \
|
{}, \
|
{ \
|
1, /* SizePropertyValid */ \
|
1, /* NumberOfSetsValid */ \
|
1, /* AssociativityValid */ \
|
1, /* AllocationTypeValid */ \
|
1, /* CacheTypeValid */ \
|
1, /* WritePolicyValid */ \
|
1, /* LineSizeValid */ \
|
}, \
|
0, /* NextLevelOfCache */ \
|
SIZE_32KB, /* Size */ \
|
256, /* NumberOfSets */ \
|
2, /* Associativity */ \
|
{ \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_ALLOCATION_READ_WRITE, \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_CACHE_TYPE_DATA, \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_BACK, \
|
}, \
|
64 /* LineSize */ \
|
}, { \
|
EFI_ACPI_6_2_PPTT_TYPE_CACHE, \
|
sizeof (EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE), \
|
{}, \
|
{ \
|
1, /* SizePropertyValid */ \
|
1, /* NumberOfSetsValid */ \
|
1, /* AssociativityValid */ \
|
1, /* AllocationTypeValid */ \
|
1, /* CacheTypeValid */ \
|
0, /* WritePolicyValid */ \
|
1, /* LineSizeValid */ \
|
}, \
|
0, /* NextLevelOfCache */ \
|
SIZE_32KB, /* Size */ \
|
256, /* NumberOfSets */ \
|
2, /* Associativity */ \
|
{ \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_ALLOCATION_READ, /* AllocationType */ \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_CACHE_TYPE_INSTRUCTION, \
|
0, /* WritePolicy */ \
|
}, \
|
64 /* LineSize */ \
|
} \
|
}
|
|
#define PPTT_CLUSTER(pid, cid) { \
|
{ \
|
EFI_ACPI_6_2_PPTT_TYPE_PROCESSOR, \
|
FIELD_OFFSET (PHYTIUM_PPTT_CLUSTER, L2Cache), \
|
{}, \
|
{ \
|
0, /* PhysicalPackage */ \
|
EFI_ACPI_6_2_PPTT_PROCESSOR_ID_INVALID, /* AcpiProcessorIdValid */ \
|
}, \
|
FIELD_OFFSET (PHYTIUM_PPTT_TABLE, Packages[pid]), /* Parent */ \
|
0, /* AcpiProcessorId */ \
|
1, /* NumberOfPrivateResources */ \
|
}, { \
|
FIELD_OFFSET (PHYTIUM_PPTT_TABLE, Packages[pid].Clusters[cid].L2Cache), \
|
}, { \
|
EFI_ACPI_6_2_PPTT_TYPE_CACHE, \
|
sizeof (EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE), \
|
{}, \
|
{ \
|
1, /* SizePropertyValid */ \
|
1, /* NumberOfSetsValid */ \
|
1, /* AssociativityValid */ \
|
1, /* AllocationTypeValid */ \
|
1, /* CacheTypeValid */ \
|
1, /* WritePolicyValid */ \
|
1, /* LineSizeValid */ \
|
}, \
|
0, /* NextLevelOfCache */ \
|
SIZE_2MB, /* Size */ \
|
2048, /* NumberOfSets */ \
|
16, /* Associativity */ \
|
{ \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_ALLOCATION_READ_WRITE, \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_CACHE_TYPE_UNIFIED, \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_BACK, \
|
}, \
|
64 /* LineSize */ \
|
}, { \
|
PPTT_CORE (pid, cid, 0), \
|
PPTT_CORE (pid, cid, 1), \
|
} \
|
}
|
|
#define PPTT_PANEL(pid) { \
|
{ \
|
EFI_ACPI_6_2_PPTT_TYPE_PROCESSOR, \
|
FIELD_OFFSET (PHYTIUM_PPTT_PACKAGE, L3Cache), \
|
{}, \
|
{ \
|
1, /* PhysicalPackage */ \
|
EFI_ACPI_6_2_PPTT_PROCESSOR_ID_INVALID, /* AcpiProcessorIdValid */ \
|
}, \
|
0, /* Parent */ \
|
0, /* AcpiProcessorId */ \
|
1, /* NumberOfPrivateResources */ \
|
}, { \
|
FIELD_OFFSET (PHYTIUM_PPTT_TABLE, Packages[pid].L3Cache), \
|
}, { \
|
EFI_ACPI_6_2_PPTT_TYPE_CACHE, \
|
sizeof (EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE), \
|
{}, \
|
{ \
|
1, /* SizePropertyValid */ \
|
1, /* NumberOfSetsValid */ \
|
1, /* AssociativityValid */ \
|
0, /* AllocationTypeValid */ \
|
1, /* CacheTypeValid */ \
|
1, /* WritePolicyValid */ \
|
1, /* LineSizeValid */ \
|
}, \
|
0, /* NextLevelOfCache */ \
|
SIZE_4MB, /* Size */ \
|
4096, /* NumberOfSets */ \
|
16, /* Associativity */ \
|
{ \
|
0, \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_CACHE_TYPE_UNIFIED, \
|
EFI_ACPI_6_2_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_BACK, \
|
}, \
|
64 /* LineSize */ \
|
}, { \
|
PPTT_CLUSTER (pid, 0), \
|
PPTT_CLUSTER (pid, 1), \
|
}, { \
|
EFI_ACPI_6_2_PPTT_TYPE_ID, \
|
sizeof (EFI_ACPI_6_2_PPTT_STRUCTURE_ID), \
|
{0}, \
|
0x54594850, \
|
0x3, \
|
0x1, \
|
0, \
|
0, \
|
0, \
|
} \
|
}
|
|
|
STATIC PHYTIUM_PPTT_TABLE mPhytiumPpttTable = {
|
{
|
PHYTIUM_ACPI_HEADER (EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE,
|
PHYTIUM_PPTT_TABLE,
|
EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_REVISION),
|
},
|
{
|
PPTT_PANEL (0)
|
}
|
};
|
|
VOID * CONST ReferenceAcpiTable = &mPhytiumPpttTable;
|