123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- /** @file
- Copyright (c) 2017, Linaro, Ltd. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <IndustryStandard/IoRemappingTable.h>
- #include "AcpiPlatform.h"
- #define FIELD_OFFSET(type, name) __builtin_offsetof(type, name)
- #define STYX_PCIE_SMMU_BASE 0xE0A00000
- #define STYX_PCIE_SMMU_SIZE 0x10000
- #define STYX_PCIE_SMMU_INTERRUPT 0x16d
- #define STYX_ETH0_SMMU_BASE 0xE0600000
- #define STYX_ETH0_SMMU_SIZE 0x10000
- #define STYX_ETH0_SMMU_INTERRUPT 0x170
- #define STYX_ETH1_SMMU_BASE 0xE0800000
- #define STYX_ETH1_SMMU_SIZE 0x10000
- #define STYX_ETH1_SMMU_INTERRUPT 0x16f
- #define STYX_SATA0_SMMU_BASE 0xE0200000
- #define STYX_SATA0_SMMU_SIZE 0x10000
- #define STYX_SATA0_SMMU_INTERRUPT 0x16c
- #define STYX_SATA1_SMMU_BASE 0xE0C00000
- #define STYX_SATA1_SMMU_SIZE 0x10000
- #define STYX_SATA1_SMMU_INTERRUPT 0x16b
- #pragma pack(1)
- typedef struct {
- EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE Node;
- EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT Context[1];
- } STYX_SMMU_NODE;
- typedef struct {
- EFI_ACPI_6_0_IO_REMAPPING_RC_NODE Node;
- EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE RcIdMapping[1];
- } STYX_RC_NODE;
- typedef struct {
- EFI_ACPI_6_0_IO_REMAPPING_NAMED_COMP_NODE Node;
- CONST CHAR8 Name[11];
- EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE RcIdMapping[16];
- } STYX_NC_NODE;
- typedef struct {
- EFI_ACPI_6_0_IO_REMAPPING_TABLE Iort;
- STYX_SMMU_NODE PciSmmuNode;
- STYX_RC_NODE PciRcNode;
- STYX_SMMU_NODE Eth0SmmuNode;
- STYX_NC_NODE Eth0NamedNode;
- STYX_SMMU_NODE Eth1SmmuNode;
- STYX_NC_NODE Eth1NamedNode;
- STYX_SMMU_NODE Sata0SmmuNode;
- STYX_NC_NODE Sata0NamedNode;
- STYX_SMMU_NODE Sata1SmmuNode;
- STYX_NC_NODE Sata1NamedNode;
- STYX_NC_NODE CcpNamedNode;
- } STYX_IO_REMAPPING_STRUCTURE;
- #define __STYX_SMMU_NODE(Base, Size, Irq) \
- { \
- { \
- EFI_ACPI_IORT_TYPE_SMMUv1v2, \
- sizeof(STYX_SMMU_NODE), \
- 0x0, \
- 0x0, \
- 0x0, \
- 0x0, \
- }, \
- Base, \
- Size, \
- EFI_ACPI_IORT_SMMUv1v2_MODEL_MMU401, \
- EFI_ACPI_IORT_SMMUv1v2_FLAG_COH_WALK, \
- FIELD_OFFSET(EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE, \
- SMMU_NSgIrpt), \
- 0x1, \
- sizeof(EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE), \
- 0x0, \
- 0x0, \
- Irq, \
- EFI_ACPI_IORT_SMMUv1v2_INT_FLAG_LEVEL, \
- 0x0, \
- 0x0, \
- }, { \
- { \
- Irq, \
- EFI_ACPI_IORT_SMMUv1v2_INT_FLAG_LEVEL, \
- }, \
- }
- #define __STYX_ID_MAPPING(In, Num, Out, Ref, Flags) \
- { \
- In, \
- Num, \
- Out, \
- FIELD_OFFSET(STYX_IO_REMAPPING_STRUCTURE, Ref), \
- Flags \
- }
- #define __STYX_ID_MAPPING_SINGLE(Out, Ref) \
- { \
- 0x0, \
- 0x0, \
- Out, \
- FIELD_OFFSET(STYX_IO_REMAPPING_STRUCTURE, Ref), \
- EFI_ACPI_IORT_ID_MAPPING_FLAGS_SINGLE \
- }
- #define __STYX_NAMED_COMPONENT_NODE(Name, Num) \
- { \
- { \
- EFI_ACPI_IORT_TYPE_NAMED_COMP, \
- sizeof(STYX_NC_NODE), \
- 0x0, \
- 0x0, \
- Num, \
- FIELD_OFFSET(STYX_NC_NODE, RcIdMapping), \
- }, \
- 0x0, \
- EFI_ACPI_IORT_MEM_ACCESS_PROP_CCA, \
- 0x0, \
- 0x0, \
- EFI_ACPI_IORT_MEM_ACCESS_FLAGS_CPM | \
- EFI_ACPI_IORT_MEM_ACCESS_FLAGS_DACS, \
- 40, \
- }, \
- Name
- STATIC STYX_IO_REMAPPING_STRUCTURE AcpiIort = {
- {
- AMD_ACPI_HEADER(EFI_ACPI_6_0_IO_REMAPPING_TABLE_SIGNATURE,
- STYX_IO_REMAPPING_STRUCTURE,
- EFI_ACPI_IO_REMAPPING_TABLE_REVISION_00),
- 11, // NumNodes
- sizeof(EFI_ACPI_6_0_IO_REMAPPING_TABLE), // NodeOffset
- 0 // Reserved
- }, {
- // PciSmmuNode
- __STYX_SMMU_NODE(STYX_PCIE_SMMU_BASE,
- STYX_PCIE_SMMU_SIZE,
- STYX_PCIE_SMMU_INTERRUPT)
- }, {
- // PciRcNode
- {
- {
- EFI_ACPI_IORT_TYPE_ROOT_COMPLEX, // Type
- sizeof(STYX_RC_NODE), // Length
- 0x0, // Revision
- 0x0, // Reserved
- 0x1, // NumIdMappings
- FIELD_OFFSET(STYX_RC_NODE, RcIdMapping), // IdReference
- },
- EFI_ACPI_IORT_MEM_ACCESS_PROP_CCA, // CacheCoherent
- 0x0, // AllocationHints
- 0x0, // Reserved
- EFI_ACPI_IORT_MEM_ACCESS_FLAGS_CPM |
- EFI_ACPI_IORT_MEM_ACCESS_FLAGS_DACS, // MemoryAccessFlags
- EFI_ACPI_IORT_ROOT_COMPLEX_ATS_UNSUPPORTED, // AtsAttribute
- 0x0, // PciSegmentNumber
- }, {
- __STYX_ID_MAPPING(0x0, 0xffff, 0x0, PciSmmuNode, 0x0),
- }
- }, {
- // Eth0SmmuNode
- __STYX_SMMU_NODE(STYX_ETH0_SMMU_BASE,
- STYX_ETH0_SMMU_SIZE,
- STYX_ETH0_SMMU_INTERRUPT)
- }, {
- // Eth0NamedNode
- __STYX_NAMED_COMPONENT_NODE("\\_SB_.ETH0", 16),
- {
- __STYX_ID_MAPPING_SINGLE(0x00, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x01, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x02, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x03, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x04, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x05, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x06, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x07, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x10, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x11, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x12, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x13, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x14, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x15, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x16, Eth0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x17, Eth0SmmuNode),
- }
- }, {
- // Eth1SmmuNode
- __STYX_SMMU_NODE(STYX_ETH1_SMMU_BASE,
- STYX_ETH1_SMMU_SIZE,
- STYX_ETH1_SMMU_INTERRUPT)
- }, {
- // Eth1NamedNode
- __STYX_NAMED_COMPONENT_NODE("\\_SB_.ETH1", 16),
- {
- __STYX_ID_MAPPING_SINGLE(0x00, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x01, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x02, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x03, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x04, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x05, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x06, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x07, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x10, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x11, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x12, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x13, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x14, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x15, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x16, Eth1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x17, Eth1SmmuNode),
- }
- }, {
- // Sata0SmmuNode
- __STYX_SMMU_NODE(STYX_SATA0_SMMU_BASE,
- STYX_SATA0_SMMU_SIZE,
- STYX_SATA0_SMMU_INTERRUPT)
- }, {
- // Sata0NamedNode
- __STYX_NAMED_COMPONENT_NODE("\\_SB_.AHC0", 9),
- {
- __STYX_ID_MAPPING_SINGLE(0x00, Sata0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x01, Sata0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x0A, Sata0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x0B, Sata0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x0E, Sata0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x0F, Sata0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x10, Sata0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x1A, Sata0SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x1E, Sata0SmmuNode),
- }
- }, {
- // Sata1SmmuNode
- __STYX_SMMU_NODE(STYX_SATA1_SMMU_BASE,
- STYX_SATA1_SMMU_SIZE,
- STYX_SATA1_SMMU_INTERRUPT)
- }, {
- // Sata1NamedNode
- __STYX_NAMED_COMPONENT_NODE("\\_SB_.AHC1", 3),
- {
- __STYX_ID_MAPPING_SINGLE(0x0E, Sata1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x0F, Sata1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x1E, Sata1SmmuNode),
- }
- }, {
- // CcpNamedNode
- __STYX_NAMED_COMPONENT_NODE("\\_SB_.CCP0", 4),
- {
- __STYX_ID_MAPPING_SINGLE(0x00, Sata1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x02, Sata1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x40, Sata1SmmuNode),
- __STYX_ID_MAPPING_SINGLE(0x42, Sata1SmmuNode),
- }
- }
- };
- #pragma pack()
- VOID* CONST ReferenceAcpiTable = &AcpiIort;
|