/** @file * * Copyright (c) 2020, Linaro Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef SBSAQEMUACPI_H #define SBSAQEMUACPI_H // A macro to initialise the common header part of EFI ACPI tables as defined by // EFI_ACPI_DESCRIPTION_HEADER structure. #define SBSAQEMU_ACPI_HEADER(Signature, Type, Revision) { \ Signature, /* UINT32 Signature */ \ sizeof (Type), /* UINT32 Length */ \ Revision, /* UINT8 Revision */ \ 0, /* UINT8 Checksum */ \ { 'L', 'I', 'N', 'A', 'R', 'O' }, /* UINT8 OemId[6] */ \ FixedPcdGet64 (PcdAcpiDefaultOemTableId), /* UINT64 OemTableId */ \ FixedPcdGet32 (PcdAcpiDefaultOemRevision), /* UINT32 OemRevision */ \ FixedPcdGet32 (PcdAcpiDefaultCreatorId), /* UINT32 CreatorId */ \ FixedPcdGet32 (PcdAcpiDefaultCreatorRevision)/* UINT32 CreatorRevision */ \ } // Defines for MADT #define SBSAQEMU_MADT_GIC_VBASE 0x2c020000 #define SBSAQEMU_MADT_GIC_HBASE 0x2c010000 #define SBSAQEMU_MADT_GIC_PMU_IRQ 23 #define SBSAQEMU_MADT_GICR_SIZE 0x4000000 // Macro for MADT GIC Redistributor Structure #define SBSAQEMU_MADT_GICR_INIT() { \ EFI_ACPI_6_0_GICR, /* Type */ \ sizeof (EFI_ACPI_6_0_GICR_STRUCTURE), /* Length */ \ EFI_ACPI_RESERVED_WORD, /* Reserved */ \ FixedPcdGet32 (PcdGicRedistributorsBase), /* DiscoveryRangeBaseAddress */ \ SBSAQEMU_MADT_GICR_SIZE /* DiscoveryRangeLength */ \ } #define SBSAQEMU_ACPI_SCOPE_OP_MAX_LENGTH 5 #define SBSAQEMU_ACPI_SCOPE_NAME { '_', 'S', 'B', '_' } #define SBSAQEMU_ACPI_CPU_DEV_LEN 0x1C #define SBSAQEMU_ACPI_CPU_DEV_NAME { 'C', '0', '0', '0' } #define SBSAQEMU_ACPI_CPU_HID { \ AML_NAME_OP, AML_NAME_CHAR__, 'H', 'I', 'D', \ AML_STRING_PREFIX, 'A', 'C', 'P', 'I', '0', '0', '0', '7', \ AML_ZERO_OP \ } #define SBSAQEMU_ACPI_CPU_UID { \ AML_NAME_OP, AML_NAME_CHAR__, 'U', 'I', 'D', AML_WORD_PREFIX, \ AML_ZERO_OP, AML_ZERO_OP \ } typedef struct { UINT8 device_header[2]; UINT8 length; UINT8 dev_name[4]; UINT8 hid[15]; UINT8 uid[8]; } SBSAQEMU_ACPI_CPU_DEVICE; #define SBSAQEMU_L1_D_CACHE_SIZE SIZE_32KB #define SBSAQEMU_L1_D_CACHE_SETS 256 #define SBSAQEMU_L1_D_CACHE_ASSC 2 #define SBSAQEMU_L1_I_CACHE_SIZE SIZE_32KB #define SBSAQEMU_L1_I_CACHE_SETS 256 #define SBSAQEMU_L1_I_CACHE_ASSC 2 #define SBSAQEMU_L2_CACHE_SIZE SIZE_512KB #define SBSAQEMU_L2_CACHE_SETS 1024 #define SBSAQEMU_L2_CACHE_ASSC 8 #define CLUSTER_INDEX (sizeof (EFI_ACPI_DESCRIPTION_HEADER)) #define L1_D_CACHE_INDEX (CLUSTER_INDEX + sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_PROCESSOR)) #define L1_I_CACHE_INDEX (L1_D_CACHE_INDEX + sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE)) #define L2_CACHE_INDEX (L1_I_CACHE_INDEX + sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE)) #define SBSAQEMU_ACPI_PPTT_L1_D_CACHE_STRUCT { \ EFI_ACPI_6_3_PPTT_TYPE_CACHE, \ sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE), \ { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE }, \ { \ 1, /* SizePropertyValid */ \ 1, /* NumberOfSetsValid */ \ 1, /* AssociativityValid */ \ 1, /* AllocationTypeValid */ \ 1, /* CacheTypeValid */ \ 1, /* WritePolicyValid */ \ 1, /* LineSizeValid */ \ }, \ 0, /* NextLevelOfCache */ \ SBSAQEMU_L1_D_CACHE_SIZE, /* Size */ \ SBSAQEMU_L1_D_CACHE_SETS, /* NumberOfSets */ \ SBSAQEMU_L1_D_CACHE_ASSC, /* 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 */ \ } #define SBSAQEMU_ACPI_PPTT_L1_I_CACHE_STRUCT { \ EFI_ACPI_6_3_PPTT_TYPE_CACHE, \ sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE), \ { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE }, \ { \ 1, /* SizePropertyValid */ \ 1, /* NumberOfSetsValid */ \ 1, /* AssociativityValid */ \ 1, /* AllocationTypeValid */ \ 1, /* CacheTypeValid */ \ 0, /* WritePolicyValid */ \ 1, /* LineSizeValid */ \ }, \ 0, /* NextLevelOfCache */ \ SBSAQEMU_L1_I_CACHE_SIZE, /* Size */ \ SBSAQEMU_L1_I_CACHE_SETS, /* NumberOfSets */ \ SBSAQEMU_L1_I_CACHE_ASSC, /* Associativity */ \ { \ EFI_ACPI_6_3_CACHE_ATTRIBUTES_ALLOCATION_READ, \ EFI_ACPI_6_3_CACHE_ATTRIBUTES_CACHE_TYPE_INSTRUCTION, \ 0, \ }, \ 64 /* LineSize */ \ } #define SBSAQEMU_ACPI_PPTT_L2_CACHE_STRUCT { \ EFI_ACPI_6_3_PPTT_TYPE_CACHE, \ sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE), \ { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE }, \ { \ 1, /* SizePropertyValid */ \ 1, /* NumberOfSetsValid */ \ 1, /* AssociativityValid */ \ 1, /* AllocationTypeValid */ \ 1, /* CacheTypeValid */ \ 1, /* WritePolicyValid */ \ 1, /* LineSizeValid */ \ }, \ 0, /* NextLevelOfCache */ \ SBSAQEMU_L2_CACHE_SIZE, /* Size */ \ SBSAQEMU_L2_CACHE_SETS, /* NumberOfSets */ \ SBSAQEMU_L2_CACHE_ASSC, /* 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 */ \ } #define SBSAQEMU_ACPI_PPTT_CLUSTER_STRUCT { \ EFI_ACPI_6_3_PPTT_TYPE_PROCESSOR, \ sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_PROCESSOR), \ { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE }, \ { \ 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 */ \ 0, /* NumberOfPrivateResources */ \ } #define SBSAQEMU_ACPI_PPTT_CORE_STRUCT { \ EFI_ACPI_6_3_PPTT_TYPE_PROCESSOR, \ (sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_PROCESSOR) + (2 * sizeof (UINT32))), \ { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE }, \ { \ EFI_ACPI_6_3_PPTT_PACKAGE_NOT_PHYSICAL, /* PhysicalPackage */ \ EFI_ACPI_6_3_PPTT_PROCESSOR_ID_VALID, /* AcpiProcessorValid */ \ 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 Cores */ \ }, \ 0, /* Parent */ \ 0, /* AcpiProcessorId */ \ 2, /* NumberOfPrivateResources */ \ } #endif