]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/ArmJunoPkg/AcpiTables: Updated with new ACPI 5.1 Tables & Definitions
authorOlivier Martin <olivier.martin@arm.com>
Fri, 23 Jan 2015 16:07:38 +0000 (16:07 +0000)
committeroliviermartin <oliviermartin@Edk2>
Fri, 23 Jan 2015 16:07:38 +0000 (16:07 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
Reviewed-by: Graeme Gregory <graeme.gregory@linaro.org>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16654 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/ArmJunoPkg/AcpiTables/AcpiTables.inf
ArmPlatformPkg/ArmJunoPkg/AcpiTables/Dsdt.asl
ArmPlatformPkg/ArmJunoPkg/AcpiTables/Fadt.aslc
ArmPlatformPkg/ArmJunoPkg/AcpiTables/Gtdt.aslc
ArmPlatformPkg/ArmJunoPkg/AcpiTables/Madt.aslc
ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h

index 1d108206fe6deb06d7bae0cf4e02677477e1c0a6..76a0d0aa349b08055a53d0a97bbd08ec3c0922bb 100644 (file)
@@ -46,3 +46,6 @@
   gArmTokenSpaceGuid.PcdArmArchTimerIntrNum\r
   gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum\r
   gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum\r
+\r
+  gArmTokenSpaceGuid.PcdGenericWatchdogControlBase\r
+  gArmTokenSpaceGuid.PcdGenericWatchdogRefreshBase\r
index 32d066748a44372236a24163cebf130f3875145f..7a56f001a64b94ecfdf73db5983709b302a31194 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Differentiated System Description Table Fields (DSDT)\r
 \r
-  Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>\r
+  Copyright (c) 2014-2015, ARM Ltd. All rights reserved.<BR>\r
     This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
@@ -19,27 +19,27 @@ DefinitionBlock("DsdtTable.aml", "DSDT", 1, "ARMLTD", "ARM-JUNO", EFI_ACPI_ARM_O
     //\r
     // A57x2-A53x4 Processor declaration\r
     //\r
-    Device(CPU0) { // A57-0: Cluster 0, Cpu 0\r
+    Device(CPU0) { // A53-0: Cluster 1, Cpu 0\r
       Name(_HID, "ACPI0007")\r
       Name(_UID, 0)\r
     }\r
-    Device(CPU1) { // A57-1: Cluster 0, Cpu 1\r
+    Device(CPU1) { // A53-1: Cluster 1, Cpu 1\r
       Name(_HID, "ACPI0007")\r
       Name(_UID, 1)\r
     }\r
-    Device(CPU2) { // A53-0: Cluster 1, Cpu 0\r
+    Device(CPU2) { // A53-2: Cluster 1, Cpu 2\r
       Name(_HID, "ACPI0007")\r
       Name(_UID, 2)\r
     }\r
-    Device(CPU3) { // A53-1: Cluster 1, Cpu 1\r
+    Device(CPU3) { // A53-3: Cluster 1, Cpu 3\r
       Name(_HID, "ACPI0007")\r
       Name(_UID, 3)\r
     }\r
-    Device(CPU4) { // A53-2: Cluster 1, Cpu 2\r
+    Device(CPU4) { // A57-0: Cluster 0, Cpu 0\r
       Name(_HID, "ACPI0007")\r
       Name(_UID, 4)\r
     }\r
-    Device(CPU5) { // A53-3: Cluster 1, Cpu 3\r
+    Device(CPU5) { // A57-1: Cluster 0, Cpu 1\r
       Name(_HID, "ACPI0007")\r
       Name(_UID, 5)\r
     }\r
@@ -63,12 +63,24 @@ DefinitionBlock("DsdtTable.aml", "DSDT", 1, "ARMLTD", "ARM-JUNO", EFI_ACPI_ARM_O
     //\r
     Device(ETH0) {\r
       Name(_HID, "ARMH9118")\r
+      Name(_UID, Zero)\r
       Name(_CRS, ResourceTemplate() {\r
               Memory32Fixed(ReadWrite, 0x1A000000, 0x1000)\r
               Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 192 }\r
       })\r
     }\r
 \r
+    // UART PL011\r
+    Device(COM0) {\r
+      Name(_HID, "ARMH0011")\r
+      Name(_CID, "PL011")\r
+      Name(_UID, Zero)\r
+      Name(_CRS, ResourceTemplate() {\r
+        Memory32Fixed(ReadWrite, 0x7FF80000, 0x1000)\r
+        Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 115 }\r
+      })\r
+    }\r
+\r
     //\r
     // USB Host Controller\r
     //\r
index 6c1070a256d971aca8c7e9a8c6c6563ab1bcdebe..ef6d786b7c4d2aa411b10fe9b43d181216f6b1f2 100644 (file)
 #include <Library/AcpiLib.h>\r
 #include <IndustryStandard/Acpi.h>\r
 \r
+#ifdef ARM_JUNO_ACPI_5_0\r
 EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE Fadt = {\r
   ARM_ACPI_HEADER (\r
     EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,\r
     EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE,\r
     EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION\r
   ),\r
+#else\r
+EFI_ACPI_5_1_FIXED_ACPI_DESCRIPTION_TABLE Fadt = {\r
+  ARM_ACPI_HEADER (\r
+    EFI_ACPI_5_1_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,\r
+    EFI_ACPI_5_1_FIXED_ACPI_DESCRIPTION_TABLE,\r
+    EFI_ACPI_5_1_FIXED_ACPI_DESCRIPTION_TABLE_REVISION\r
+  ),\r
+#endif\r
   0,                                                                        // UINT32     FirmwareCtrl\r
   0,                                                                        // UINT32     Dsdt\r
   EFI_ACPI_RESERVED_BYTE,                                                   // UINT8      Reserved0\r
@@ -63,7 +72,12 @@ EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE Fadt = {
   EFI_ACPI_5_0_HW_REDUCED_ACPI | EFI_ACPI_5_0_LOW_POWER_S0_IDLE_CAPABLE,    // UINT32     Flags\r
   NULL_GAS,                                                                 // EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  ResetReg\r
   0,                                                                        // UINT8      ResetValue\r
+#if ARM_JUNO_ACPI_5_0\r
   {EFI_ACPI_RESERVED_BYTE,EFI_ACPI_RESERVED_BYTE,EFI_ACPI_RESERVED_BYTE},   // UINT8      Reserved2[3]\r
+#else\r
+  EFI_ACPI_5_1_ARM_PSCI_COMPLIANT,                                          // UINT16     ArmBootArchFlags\r
+  EFI_ACPI_5_1_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION,                 // UINT8      MinorRevision\r
+#endif\r
   0,                                                                        // UINT64     XFirmwareCtrl\r
   0,                                                                        // UINT64     XDsdt\r
   NULL_GAS,                                                                 // EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk\r
index ac74fbcabfccd00526cabd2a724d09ea308a05fd..49d6e8e2136cf43e5f51f11ebe52862cc3575786 100644 (file)
   #define GTDT_GLOBAL_FLAGS             (GTDT_GLOBAL_FLAGS_MAPPED | GTDT_GLOBAL_FLAGS_LEVEL)\r
 #else\r
   #define GTDT_GLOBAL_FLAGS             (GTDT_GLOBAL_FLAGS_NOT_MAPPED | GTDT_GLOBAL_FLAGS_LEVEL)\r
-  #define SYSTEM_TIMER_BASE_ADDRESS     0\r
+  #define SYSTEM_TIMER_BASE_ADDRESS     0xFFFFFFFFFFFFFFFF
 #endif\r
 \r
-#define GTDT_TIMER_EDGE_TRIGGERED   (1 << EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE)\r
-#define GTDT_TIMER_LEVEL_TRIGGERED  (0 << EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE)\r
-#define GTDT_TIMER_ACTIVE_LOW       (1 << EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY)\r
-#define GTDT_TIMER_ACTIVE_HIGH      (0 << EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY)\r
+#define GTDT_TIMER_EDGE_TRIGGERED   EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE
+#define GTDT_TIMER_LEVEL_TRIGGERED  
+#define GTDT_TIMER_ACTIVE_LOW       EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY
+#define GTDT_TIMER_ACTIVE_HIGH      0
 \r
 #define GTDT_GTIMER_FLAGS           (GTDT_TIMER_ACTIVE_LOW | GTDT_TIMER_LEVEL_TRIGGERED)\r
 \r
-EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE Gtdt = {\r
+#ifdef ARM_JUNO_ACPI_5_0\r
+  EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE Gtdt = {\r
     ARM_ACPI_HEADER(\r
       EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,\r
       EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE,\r
       EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION\r
     ),\r
-  SYSTEM_TIMER_BASE_ADDRESS,                    // UINT64  PhysicalAddress\r
-  GTDT_GLOBAL_FLAGS,                            // UINT32  GlobalFlags\r
-  FixedPcdGet32 (PcdArmArchTimerSecIntrNum),    // UINT32  SecurePL1TimerGSIV\r
-  GTDT_GTIMER_FLAGS,                            // UINT32  SecurePL1TimerFlags\r
-  FixedPcdGet32 (PcdArmArchTimerIntrNum),       // UINT32  NonSecurePL1TimerGSIV\r
-  GTDT_GTIMER_FLAGS,                            // UINT32  NonSecurePL1TimerFlags\r
-  FixedPcdGet32 (PcdArmArchTimerVirtIntrNum),   // UINT32  VirtualTimerGSIV\r
-  GTDT_GTIMER_FLAGS,                            // UINT32  VirtualTimerFlags\r
-  FixedPcdGet32 (PcdArmArchTimerHypIntrNum),    // UINT32  NonSecurePL2TimerGSIV\r
-  GTDT_GTIMER_FLAGS                             // UINT32  NonSecurePL2TimerFlags\r
-};\r
+    SYSTEM_TIMER_BASE_ADDRESS,                    // UINT64  PhysicalAddress\r
+    GTDT_GLOBAL_FLAGS,                            // UINT32  GlobalFlags\r
+    FixedPcdGet32 (PcdArmArchTimerSecIntrNum),    // UINT32  SecurePL1TimerGSIV\r
+    GTDT_GTIMER_FLAGS,                            // UINT32  SecurePL1TimerFlags\r
+    FixedPcdGet32 (PcdArmArchTimerIntrNum),       // UINT32  NonSecurePL1TimerGSIV\r
+    GTDT_GTIMER_FLAGS,                            // UINT32  NonSecurePL1TimerFlags\r
+    FixedPcdGet32 (PcdArmArchTimerVirtIntrNum),   // UINT32  VirtualTimerGSIV\r
+    GTDT_GTIMER_FLAGS,                            // UINT32  VirtualTimerFlags\r
+    FixedPcdGet32 (PcdArmArchTimerHypIntrNum),    // UINT32  NonSecurePL2TimerGSIV\r
+    GTDT_GTIMER_FLAGS                             // UINT32  NonSecurePL2TimerFlags\r
+  };\r
+#else\r
+  #pragma pack (1)\r
+\r
+  typedef struct {\r
+    EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLE          Gtdt;\r
+    EFI_ACPI_5_1_GTDT_SBSA_GENERIC_WATCHDOG_STRUCTURE     Watchdogs[JUNO_WATCHDOG_COUNT];\r
+  } EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLES;\r
 \r
+  #pragma pack ()\r
+\r
+  EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLES Gtdt = {\r
+    {\r
+      ARM_ACPI_HEADER(\r
+        EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,\r
+        EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLE,\r
+        EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION\r
+      ),\r
+      SYSTEM_TIMER_BASE_ADDRESS,                    // UINT64  PhysicalAddress\r
+      0,                                            // UINT32  Reserved\r
+      FixedPcdGet32 (PcdArmArchTimerSecIntrNum),    // UINT32  SecurePL1TimerGSIV\r
+      GTDT_GTIMER_FLAGS,                            // UINT32  SecurePL1TimerFlags\r
+      FixedPcdGet32 (PcdArmArchTimerIntrNum),       // UINT32  NonSecurePL1TimerGSIV\r
+      GTDT_GTIMER_FLAGS,                            // UINT32  NonSecurePL1TimerFlags\r
+      FixedPcdGet32 (PcdArmArchTimerVirtIntrNum),   // UINT32  VirtualTimerGSIV\r
+      GTDT_GTIMER_FLAGS,                            // UINT32  VirtualTimerFlags\r
+      FixedPcdGet32 (PcdArmArchTimerHypIntrNum),    // UINT32  NonSecurePL2TimerGSIV\r
+      GTDT_GTIMER_FLAGS,                            // UINT32  NonSecurePL2TimerFlags\r
+      0xFFFFFFFFFFFFFFFF,                           // UINT64  CntReadBasePhysicalAddress\r
+      JUNO_WATCHDOG_COUNT,                          // UINT32  PlatformTimerCount\r
+      sizeof (EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLE) // UINT32 PlatfromTimerOffset\r
+    },\r
+    {\r
+      EFI_ACPI_5_1_SBSA_GENERIC_WATCHDOG_STRUCTURE_INIT(\r
+          FixedPcdGet32 (PcdGenericWatchdogRefreshBase), FixedPcdGet32 (PcdGenericWatchdogControlBase), 93, 0),\r
+      EFI_ACPI_5_1_SBSA_GENERIC_WATCHDOG_STRUCTURE_INIT(\r
+          FixedPcdGet32 (PcdGenericWatchdogRefreshBase), FixedPcdGet32 (PcdGenericWatchdogControlBase), 94, EFI_ACPI_5_1_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_SECURE_TIMER)\r
+    }\r
+  };\r
+#endif\r
 \r
 VOID*\r
 ReferenceAcpiTable (\r
index a55ca656bf758a6cc1c68cb47f39f6a0785e4e11..76236a17c33d1d2907bf432725aa0240a5ec1fca 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
 *  Multiple APIC Description Table (MADT)\r
 *\r
-*  Copyright (c) 2012 - 2014, ARM Limited. All rights reserved.\r
+*  Copyright (c) 2012 - 2015, ARM Limited. All rights reserved.\r
 *\r
 *  This program and the accompanying materials\r
 *  are licensed and made available under the terms and conditions of the BSD License\r
 \r
 #include "ArmPlatform.h"\r
 #include <Library/AcpiLib.h>\r
+#include <Library/ArmLib.h>\r
 #include <Library/PcdLib.h>\r
 #include <IndustryStandard/Acpi.h>\r
 \r
-#pragma pack (1)\r
-\r
-typedef struct {\r
-  EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER   Header;\r
-  EFI_ACPI_5_0_GIC_STRUCTURE                            GicInterfaces[FixedPcdGet32 (PcdCoreCount)];\r
-  EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE                GicDistributor;\r
-} EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE;\r
-\r
-#pragma pack ()\r
-\r
 //\r
 // Multiple APIC Description Table\r
 //\r
-EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {\r
-  {\r
-    ARM_ACPI_HEADER (\r
-      EFI_ACPI_1_0_APIC_SIGNATURE,\r
-      EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE,\r
-      EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION\r
-    ),\r
-    //\r
-    // MADT specific fields\r
-    //\r
-    0, // LocalApicAddress\r
-    0, // Flags\r
-  },\r
-  {\r
-    // Format: EFI_ACPI_5_0_GIC_STRUCTURE_INIT(GicId, AcpiCpuId, Flags, PmuIrq, GicBase)\r
-    // Note: The GIC Structure of the primary CPU must be the first entry (see note in 5.2.12.14 GIC Structure of\r
-    //       ACPI v5.0).\r
-    //       On Juno we can change the primary CPU changing the SCC register. It is not currently supported in the\r
-    //       Trusted Firmware. When supported, we will need to code to dynamically change the ordering.\r
-    //       For now we leave CPU2 (A53-0) at the first position.\r
-    //       The cores from a same cluster are kept together. It is not an ACPI requirement but in case the OSPM uses\r
-    //       the ACPI ARM Parking protocol, it might want to wake up the cores in the order of this table.\r
-    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(2, 2, EFI_ACPI_5_0_GIC_ENABLED, 50, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-0\r
-    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(3, 3, EFI_ACPI_5_0_GIC_ENABLED, 54, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-1\r
-    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(4, 4, EFI_ACPI_5_0_GIC_ENABLED, 58, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-2\r
-    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(5, 5, EFI_ACPI_5_0_GIC_ENABLED, 62, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-3\r
-    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(0, 0, EFI_ACPI_5_0_GIC_ENABLED, 34, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A57-0\r
-    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(1, 1, EFI_ACPI_5_0_GIC_ENABLED, 38, FixedPcdGet32 (PcdGicInterruptInterfaceBase))  // A57-1\r
-  },\r
-  EFI_ACPI_5_0_GIC_DISTRIBUTOR_INIT(0, FixedPcdGet32 (PcdGicDistributorBase), 0)\r
-};\r
+#ifdef ARM_JUNO_ACPI_5_0\r
+  #pragma pack (1)\r
+\r
+  typedef struct {\r
+    EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER   Header;\r
+    EFI_ACPI_5_0_GIC_STRUCTURE                            GicInterfaces[FixedPcdGet32 (PcdCoreCount)];\r
+    EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE                GicDistributor;\r
+  } EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE;\r
+\r
+  #pragma pack ()\r
+\r
+  EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {\r
+    {\r
+      ARM_ACPI_HEADER (\r
+        EFI_ACPI_1_0_APIC_SIGNATURE,\r
+        EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE,\r
+        EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION\r
+      ),\r
+      //\r
+      // MADT specific fields\r
+      //\r
+      0, // LocalApicAddress\r
+      0, // Flags\r
+    },\r
+    {\r
+      // Format: EFI_ACPI_5_0_GIC_STRUCTURE_INIT(GicId, AcpiCpuId, Flags, PmuIrq, GicBase)\r
+      // Note: The GIC Structure of the primary CPU must be the first entry (see note in 5.2.12.14 GIC Structure of\r
+      //       ACPI v5.0).\r
+      //       On Juno we can change the primary CPU changing the SCC register. It is not currently supported in the\r
+      //       Trusted Firmware. When supported, we will need to code to dynamically change the ordering.\r
+      //       For now we leave CPU2 (A53-0) at the first position.\r
+      //       The cores from a same cluster are kept together. It is not an ACPI requirement but in case the OSPM uses\r
+      //       the ACPI ARM Parking protocol, it might want to wake up the cores in the order of this table.\r
+      EFI_ACPI_5_0_GIC_STRUCTURE_INIT(2, 0, EFI_ACPI_5_0_GIC_ENABLED, 50, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-0\r
+      EFI_ACPI_5_0_GIC_STRUCTURE_INIT(3, 1, EFI_ACPI_5_0_GIC_ENABLED, 54, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-1\r
+      EFI_ACPI_5_0_GIC_STRUCTURE_INIT(4, 2, EFI_ACPI_5_0_GIC_ENABLED, 58, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-2\r
+      EFI_ACPI_5_0_GIC_STRUCTURE_INIT(5, 3, EFI_ACPI_5_0_GIC_ENABLED, 62, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-3\r
+      EFI_ACPI_5_0_GIC_STRUCTURE_INIT(0, 4, EFI_ACPI_5_0_GIC_ENABLED, 34, FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A57-0\r
+      EFI_ACPI_5_0_GIC_STRUCTURE_INIT(1, 5, EFI_ACPI_5_0_GIC_ENABLED, 38, FixedPcdGet32 (PcdGicInterruptInterfaceBase))  // A57-1\r
+    },\r
+    EFI_ACPI_5_0_GIC_DISTRIBUTOR_INIT(0, FixedPcdGet32 (PcdGicDistributorBase), 0)\r
+  };\r
+#else\r
+  #pragma pack (1)\r
+\r
+  typedef struct {\r
+    EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER   Header;\r
+    EFI_ACPI_5_1_GIC_STRUCTURE                            GicInterfaces[FixedPcdGet32 (PcdCoreCount)];\r
+    EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE                GicDistributor;\r
+  } EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE;\r
+\r
+  #pragma pack ()\r
+\r
+  EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {\r
+    {\r
+      ARM_ACPI_HEADER (\r
+        EFI_ACPI_1_0_APIC_SIGNATURE,\r
+        EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE,\r
+        EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION\r
+      ),\r
+      //\r
+      // MADT specific fields\r
+      //\r
+      0, // LocalApicAddress\r
+      0, // Flags\r
+    },\r
+    {\r
+      // Format: EFI_ACPI_5_1_GICC_STRUCTURE_INIT(GicId, AcpiCpuUid, Flags, PmuIrq, GicBase, GicVBase, GicHBase,\r
+      //                                          GsivId, GicRBase, Mpidr)\r
+      // Note: The GIC Structure of the primary CPU must be the first entry (see note in 5.2.12.14 GICC Structure of\r
+      //       ACPI v5.1).\r
+      //       On Juno we can change the primary CPU changing the SCC register. It is not currently supported in the\r
+      //       Trusted Firmware. When supported, we will need to code to dynamically change the ordering.\r
+      //       For now we leave CPU2 (A53-0) at the first position.\r
+      //       The cores from a same cluster are kept together. It is not an ACPI requirement but in case the OSPM uses\r
+      //       the ACPI ARM Parking protocol, it might want to wake up the cores in the order of this table.\r
+      EFI_ACPI_5_1_GICC_STRUCTURE_INIT( // A53-0\r
+          2, 0, GET_MPID(1, 0), EFI_ACPI_5_0_GIC_ENABLED, 50, FixedPcdGet32 (PcdGicInterruptInterfaceBase),\r
+          0x2C06F000, 0x2C04F000, 25, 0 /* GicRBase */),\r
+      EFI_ACPI_5_1_GICC_STRUCTURE_INIT( // A53-1\r
+          3, 1, GET_MPID(1, 1),  EFI_ACPI_5_0_GIC_ENABLED, 54, FixedPcdGet32 (PcdGicInterruptInterfaceBase),\r
+          0x2C06F000, 0x2C04F000, 25, 0 /* GicRBase */),\r
+      EFI_ACPI_5_1_GICC_STRUCTURE_INIT( // A53-2\r
+          4, 2, GET_MPID(1, 2),  EFI_ACPI_5_0_GIC_ENABLED, 58, FixedPcdGet32 (PcdGicInterruptInterfaceBase),\r
+          0x2C06F000, 0x2C04F000, 25, 0 /* GicRBase */),\r
+      EFI_ACPI_5_1_GICC_STRUCTURE_INIT( // A53-3\r
+          5, 3, GET_MPID(1, 3),  EFI_ACPI_5_0_GIC_ENABLED, 62, FixedPcdGet32 (PcdGicInterruptInterfaceBase),\r
+          0x2C06F000, 0x2C04F000, 25, 0 /* GicRBase */),\r
+      EFI_ACPI_5_1_GICC_STRUCTURE_INIT( // A57-0\r
+          0, 4, GET_MPID(0, 0),  EFI_ACPI_5_0_GIC_ENABLED, 34, FixedPcdGet32 (PcdGicInterruptInterfaceBase),\r
+          0x2C06F000, 0x2C04F000, 25, 0 /* GicRBase */),\r
+      EFI_ACPI_5_1_GICC_STRUCTURE_INIT( // A57-1\r
+          1, 5, GET_MPID(0, 1),  EFI_ACPI_5_0_GIC_ENABLED, 38, FixedPcdGet32 (PcdGicInterruptInterfaceBase),\r
+          0x2C06F000, 0x2C04F000, 25, 0 /* GicRBase */),\r
+    },\r
+    EFI_ACPI_5_0_GIC_DISTRIBUTOR_INIT(0, FixedPcdGet32 (PcdGicDistributorBase), 0)\r
+  };\r
+#endif\r
 \r
 VOID*\r
 ReferenceAcpiTable (\r
index 959bfc2fa41baa4eb48ae5818b097d95b7125acc..badd7a64fb5459eb6b7c6f936967415bb2767c03 100644 (file)
@@ -75,4 +75,9 @@
     EFI_ACPI_ARM_CREATOR_REVISION   /* UINT32  CreatorRevision */ \\r
   }\r
 \r
+#define JUNO_WATCHDOG_COUNT  2\r
+\r
+// Define if the exported ACPI Tables are based on ACPI 5.0 spec or latest\r
+//#define ARM_JUNO_ACPI_5_0\r
+\r
 #endif\r