Revision: 16652
          http://sourceforge.net/p/edk2/code/16652
Author:   oliviermartin
Date:     2015-01-23 16:03:09 +0000 (Fri, 23 Jan 2015)
Log Message:
-----------
ArmPlatformPkg/ArmJunoPkg: Added the ACPI 5.0 Tables

These tables are:
- Differentiated System Description Table Fields (DSDT)
- Firmware ACPI Control Structure (FACS)
- Fixed ACPI Description Table (FADT)
- Generic Timer Description Table (GTDT)
- Multiple APIC Description Table (MADT)
- Secondary System Description Table Fields (SSDT)

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <[email protected]>
Reviewed-by: Graeme Gregory <[email protected]>

Modified Paths:
--------------
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/ArmJuno.dsc
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/ArmJuno.fdf
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h

Added Paths:
-----------
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/AcpiTables.inf
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Dsdt.asl
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Facs.aslc
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Fadt.aslc
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Gtdt.aslc
    trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Madt.aslc

Added: trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/AcpiTables.inf
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/AcpiTables.inf              
                (rev 0)
+++ trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/AcpiTables.inf      
2015-01-23 16:03:09 UTC (rev 16652)
@@ -0,0 +1,48 @@
+## @file
+#
+#  ACPI table data and ASL sources required to boot the platform.
+#
+#  Copyright (c) 2014, ARM Ltd. All rights reserved.
+#
+#  This program and the accompanying materials
+#  are licensed and made available under the terms and conditions of the BSD 
License
+#  which accompanies this distribution.  The full text of the license may be 
found at
+#  http://opensource.org/licenses/bsd-license.php
+#
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED.
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = JunoAcpiTables
+  FILE_GUID                      = a1dd808e-1e95-4399-abc0-653c82e8530c
+  MODULE_TYPE                    = USER_DEFINED
+  VERSION_STRING                 = 1.0
+
+[Sources]
+  Dsdt.asl
+  Facs.aslc
+  Fadt.aslc
+  Gtdt.aslc
+  Madt.aslc
+
+[Packages]
+  ArmPkg/ArmPkg.dec
+  ArmPlatformPkg/ArmPlatformPkg.dec
+  ArmPlatformPkg/ArmVExpressPkg/ArmVExpressPkg.dec
+  ArmPlatformPkg/ArmJunoPkg/ArmJuno.dec
+  EmbeddedPkg/EmbeddedPkg.dec
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+[FixedPcd]
+  gArmPlatformTokenSpaceGuid.PcdCoreCount
+  gArmTokenSpaceGuid.PcdGicDistributorBase
+  gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
+
+  gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum
+  gArmTokenSpaceGuid.PcdArmArchTimerIntrNum
+  gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum
+  gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum

Added: trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Dsdt.asl
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Dsdt.asl                    
        (rev 0)
+++ trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Dsdt.asl    2015-01-23 
16:03:09 UTC (rev 16652)
@@ -0,0 +1,172 @@
+/** @file
+  Differentiated System Description Table Fields (DSDT)
+
+  Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>
+    This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 
License
+  which accompanies this distribution.  The full text of the license may be 
found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include "ArmPlatform.h"
+
+DefinitionBlock("DsdtTable.aml", "DSDT", 1, "ARMLTD", "ARM-JUNO", 
EFI_ACPI_ARM_OEM_REVISION) {
+  Scope(_SB) {
+    //
+    // A57x2-A53x4 Processor declaration
+    //
+    Device(CPU0) { // A57-0: Cluster 0, Cpu 0
+      Name(_HID, "ACPI0007")
+      Name(_UID, 0)
+    }
+    Device(CPU1) { // A57-1: Cluster 0, Cpu 1
+      Name(_HID, "ACPI0007")
+      Name(_UID, 1)
+    }
+    Device(CPU2) { // A53-0: Cluster 1, Cpu 0
+      Name(_HID, "ACPI0007")
+      Name(_UID, 2)
+    }
+    Device(CPU3) { // A53-1: Cluster 1, Cpu 1
+      Name(_HID, "ACPI0007")
+      Name(_UID, 3)
+    }
+    Device(CPU4) { // A53-2: Cluster 1, Cpu 2
+      Name(_HID, "ACPI0007")
+      Name(_UID, 4)
+    }
+    Device(CPU5) { // A53-3: Cluster 1, Cpu 3
+      Name(_HID, "ACPI0007")
+      Name(_UID, 5)
+    }
+
+    //
+    // Keyboard and Mouse
+    //
+    Device(KMI0) {
+      Name(_HID, "ARMH0501")
+      Name(_CID, "PL050_KBD")
+      Name(_CRS, ResourceTemplate() {
+              Memory32Fixed(ReadWrite, 0x1C060008, 0x4)
+              Memory32Fixed(ReadWrite, 0x1C060000, 0x4)
+              Memory32Fixed(ReadOnly, 0x1C060004, 0x4)
+              Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 197 }
+      })
+    }
+
+    //
+    // LAN9118 Ethernet
+    //
+    Device(ETH0) {
+      Name(_HID, "ARMH9118")
+      Name(_CRS, ResourceTemplate() {
+              Memory32Fixed(ReadWrite, 0x1A000000, 0x1000)
+              Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 192 }
+      })
+    }
+
+    //
+    // USB Host Controller
+    //
+    Device(USB0){
+        Name(_HID, "ARMH0D20")
+        Name(_CID, "PNP0D20")
+        Name(_UID, 2)
+
+        Method(_CRS, 0x0, Serialized){
+            Name(RBUF, ResourceTemplate(){
+                Memory32Fixed(ReadWrite, 0x7FFC0000, 0x000000B0)
+                Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) 
{149}  // INT ID=149 GIC IRQ ID=117 for Juno SoC USB EHCI Controller
+            })
+            Return(RBUF)
+        }
+
+        //
+        // Root Hub
+        //
+        Device(RHUB){
+            Name(_ADR, 0x00000000)  // Address of Root Hub should be 0 as per 
ACPI 5.0 spec
+
+            //
+            // Ports connected to Root Hub
+            //
+            Device(HUB1){
+                Name(_ADR, 0x00000001)
+                Name(_UPC, Package(){
+                    0x00,       // Port is NOT connectable
+                    0xFF,       // Don't care
+                    0x00000000, // Reserved 0 must be zero
+                    0x00000000  // Reserved 1 must be zero
+                })
+
+                Device(PRT1){
+                    Name(_ADR, 0x00000001)
+                    Name(_UPC, Package(){
+                        0xFF,        // Port is connectable
+                        0x00,        // Port connector is A
+                        0x00000000,
+                        0x00000000
+                    })
+                    Name(_PLD, Package(){
+                        Buffer(0x10){
+                            0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+                        }
+                    })
+                } // USB0_RHUB_HUB1_PRT1
+                Device(PRT2){
+                    Name(_ADR, 0x00000002)
+                    Name(_UPC, Package(){
+                        0xFF,        // Port is connectable
+                        0x00,        // Port connector is A
+                        0x00000000,
+                        0x00000000
+                    })
+                    Name(_PLD, Package(){
+                        Buffer(0x10){
+                            0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+                        }
+                    })
+                } // USB0_RHUB_HUB1_PRT2
+
+                Device(PRT3){
+                    Name(_ADR, 0x00000003)
+                    Name(_UPC, Package(){
+                        0xFF,        // Port is connectable
+                        0x00,        // Port connector is A
+                        0x00000000,
+                        0x00000000
+                    })
+                    Name(_PLD, Package(){
+                        Buffer(0x10){
+                            0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+                        }
+                    })
+                } // USB0_RHUB_HUB1_PRT3
+
+                Device(PRT4){
+                    Name(_ADR, 0x00000004)
+                    Name(_UPC, Package(){
+                        0xFF,        // Port is connectable
+                        0x00,        // Port connector is A
+                        0x00000000,
+                        0x00000000
+                    })
+                    Name(_PLD, Package(){
+                        Buffer(0x10){
+                            0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+                        }
+                    })
+                } // USB0_RHUB_HUB1_PRT4
+            } // USB0_RHUB_HUB1
+        } // USB0_RHUB
+    } // USB0
+  } // Scope(_SB)
+}

Added: trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Facs.aslc
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Facs.aslc                   
        (rev 0)
+++ trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Facs.aslc   2015-01-23 
16:03:09 UTC (rev 16652)
@@ -0,0 +1,68 @@
+/** @file
+*  Firmware ACPI Control Structure (FACS)
+*
+*  Copyright (c) 2012 - 2014, ARM Limited. All rights reserved.
+*
+*  This program and the accompanying materials
+*  are licensed and made available under the terms and conditions of the BSD 
License
+*  which accompanies this distribution.  The full text of the license may be 
found at
+*  http://opensource.org/licenses/bsd-license.php
+*
+*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED.
+*
+**/
+
+#include <IndustryStandard/Acpi.h>
+
+EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE Facs = {
+  EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE, // UINT32  Signature
+  sizeof (EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE),  // UINT32  Length
+  0xA152,                                                 // UINT32  
HardwareSignature
+  0,                                                      // UINT32  
FirmwareWakingVector
+  0,                                                      // UINT32  GlobalLock
+  0,                                                      // UINT32  Flags
+  0,                                                      // UINT64  
XFirmwareWakingVector
+  EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION,   // UINT8   Version;
+    { EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved0[0]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved0[1]
+      EFI_ACPI_RESERVED_BYTE },                           // UINT8   
Reserved0[2]
+  0,                                                      // UINT32  OspmFlags 
 "Platform firmware must
+                                                          //                   
 initialize this field to zero."
+    { EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[0]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[1]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[2]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[3]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[4]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[5]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[6]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[7]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[8]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[9]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[10]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[11]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[12]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[13]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[14]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[15]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[16]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[17]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[18]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[19]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[20]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[21]
+      EFI_ACPI_RESERVED_BYTE,                             // UINT8   
Reserved1[22]
+      EFI_ACPI_RESERVED_BYTE },                           // UINT8   
Reserved1[23]
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+{
+  //
+  // Reference the table being generated to prevent the optimizer from 
removing the
+  // data structure from the executable
+  //
+  return (VOID*)&Facs;
+}

Added: trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Fadt.aslc
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Fadt.aslc                   
        (rev 0)
+++ trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Fadt.aslc   2015-01-23 
16:03:09 UTC (rev 16652)
@@ -0,0 +1,91 @@
+/** @file
+*  Fixed ACPI Description Table (FADT)
+*
+*  Copyright (c) 2012 - 2014, ARM Limited. All rights reserved.
+*
+*  This program and the accompanying materials
+*  are licensed and made available under the terms and conditions of the BSD 
License
+*  which accompanies this distribution.  The full text of the license may be 
found at
+*  http://opensource.org/licenses/bsd-license.php
+*
+*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED.
+*
+**/
+
+#include "ArmPlatform.h"
+#include <Library/AcpiLib.h>
+#include <IndustryStandard/Acpi.h>
+
+EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE Fadt = {
+  ARM_ACPI_HEADER (
+    EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
+    EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE,
+    EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION
+  ),
+  0,                                                                        // 
UINT32     FirmwareCtrl
+  0,                                                                        // 
UINT32     Dsdt
+  EFI_ACPI_RESERVED_BYTE,                                                   // 
UINT8      Reserved0
+  EFI_ACPI_5_0_PM_PROFILE_UNSPECIFIED,                                      // 
UINT8      PreferredPmProfile
+  0,                                                                        // 
UINT16     SciInt
+  0,                                                                        // 
UINT32     SmiCmd
+  0,                                                                        // 
UINT8      AcpiEnable
+  0,                                                                        // 
UINT8      AcpiDisable
+  0,                                                                        // 
UINT8      S4BiosReq
+  0,                                                                        // 
UINT8      PstateCnt
+  0,                                                                        // 
UINT32     Pm1aEvtBlk
+  0,                                                                        // 
UINT32     Pm1bEvtBlk
+  0,                                                                        // 
UINT32     Pm1aCntBlk
+  0,                                                                        // 
UINT32     Pm1bCntBlk
+  0,                                                                        // 
UINT32     Pm2CntBlk
+  0,                                                                        // 
UINT32     PmTmrBlk
+  0,                                                                        // 
UINT32     Gpe0Blk
+  0,                                                                        // 
UINT32     Gpe1Blk
+  0,                                                                        // 
UINT8      Pm1EvtLen
+  0,                                                                        // 
UINT8      Pm1CntLen
+  0,                                                                        // 
UINT8      Pm2CntLen
+  0,                                                                        // 
UINT8      PmTmrLen
+  0,                                                                        // 
UINT8      Gpe0BlkLen
+  0,                                                                        // 
UINT8      Gpe1BlkLen
+  0,                                                                        // 
UINT8      Gpe1Base
+  0,                                                                        // 
UINT8      CstCnt
+  0,                                                                        // 
UINT16     PLvl2Lat
+  0,                                                                        // 
UINT16     PLvl3Lat
+  0,                                                                        // 
UINT16     FlushSize
+  0,                                                                        // 
UINT16     FlushStride
+  0,                                                                        // 
UINT8      DutyOffset
+  0,                                                                        // 
UINT8      DutyWidth
+  0,                                                                        // 
UINT8      DayAlrm
+  0,                                                                        // 
UINT8      MonAlrm
+  0,                                                                        // 
UINT8      Century
+  0,                                                                        // 
UINT16     IaPcBootArch
+  0,                                                                        // 
UINT8      Reserved1
+  EFI_ACPI_5_0_HW_REDUCED_ACPI | EFI_ACPI_5_0_LOW_POWER_S0_IDLE_CAPABLE,    // 
UINT32     Flags
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  ResetReg
+  0,                                                                        // 
UINT8      ResetValue
+  {EFI_ACPI_RESERVED_BYTE,EFI_ACPI_RESERVED_BYTE,EFI_ACPI_RESERVED_BYTE},   // 
UINT8      Reserved2[3]
+  0,                                                                        // 
UINT64     XFirmwareCtrl
+  0,                                                                        // 
UINT64     XDsdt
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1bEvtBlk
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1aCntBlk
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1bCntBlk
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm2CntBlk
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPmTmrBlk
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XGpe0Blk
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XGpe1Blk
+  NULL_GAS,                                                                 // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  SleepControlReg
+  NULL_GAS                                                                  // 
EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  SleepStatusReg
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+{
+  //
+  // Reference the table being generated to prevent the optimizer from 
removing the
+  // data structure from the executable
+  //
+  return (VOID*)&Fadt;
+}

Added: trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Gtdt.aslc
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Gtdt.aslc                   
        (rev 0)
+++ trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Gtdt.aslc   2015-01-23 
16:03:09 UTC (rev 16652)
@@ -0,0 +1,70 @@
+/** @file
+*  Generic Timer Description Table (GTDT)
+*
+*  Copyright (c) 2012 - 2014, ARM Limited. All rights reserved.
+*
+*  This program and the accompanying materials
+*  are licensed and made available under the terms and conditions of the BSD 
License
+*  which accompanies this distribution.  The full text of the license may be 
found at
+*  http://opensource.org/licenses/bsd-license.php
+*
+*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED.
+*
+**/
+
+#include "ArmPlatform.h"
+#include <Library/AcpiLib.h>
+#include <Library/PcdLib.h>
+#include <IndustryStandard/Acpi.h>
+
+#define GTDT_GLOBAL_FLAGS_MAPPED      
EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_MEMORY_MAPPED_BLOCK_PRESENT
+#define GTDT_GLOBAL_FLAGS_NOT_MAPPED  0
+#define GTDT_GLOBAL_FLAGS_EDGE        
EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_INTERRUPT_MODE
+#define GTDT_GLOBAL_FLAGS_LEVEL       0
+
+// Note: We could have a build flag that switches between memory 
mapped/non-memory mapped timer
+#ifdef SYSTEM_TIMER_BASE_ADDRESS
+  #define GTDT_GLOBAL_FLAGS             (GTDT_GLOBAL_FLAGS_MAPPED | 
GTDT_GLOBAL_FLAGS_LEVEL)
+#else
+  #define GTDT_GLOBAL_FLAGS             (GTDT_GLOBAL_FLAGS_NOT_MAPPED | 
GTDT_GLOBAL_FLAGS_LEVEL)
+  #define SYSTEM_TIMER_BASE_ADDRESS     0
+#endif
+
+#define GTDT_TIMER_EDGE_TRIGGERED   (1 << 
EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE)
+#define GTDT_TIMER_LEVEL_TRIGGERED  (0 << 
EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE)
+#define GTDT_TIMER_ACTIVE_LOW       (1 << 
EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY)
+#define GTDT_TIMER_ACTIVE_HIGH      (0 << 
EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY)
+
+#define GTDT_GTIMER_FLAGS           (GTDT_TIMER_ACTIVE_LOW | 
GTDT_TIMER_LEVEL_TRIGGERED)
+
+EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE Gtdt = {
+    ARM_ACPI_HEADER(
+      EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,
+      EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE,
+      EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION
+    ),
+  SYSTEM_TIMER_BASE_ADDRESS,                    // UINT64  PhysicalAddress
+  GTDT_GLOBAL_FLAGS,                            // UINT32  GlobalFlags
+  FixedPcdGet32 (PcdArmArchTimerSecIntrNum),    // UINT32  SecurePL1TimerGSIV
+  GTDT_GTIMER_FLAGS,                            // UINT32  SecurePL1TimerFlags
+  FixedPcdGet32 (PcdArmArchTimerIntrNum),       // UINT32  
NonSecurePL1TimerGSIV
+  GTDT_GTIMER_FLAGS,                            // UINT32  
NonSecurePL1TimerFlags
+  FixedPcdGet32 (PcdArmArchTimerVirtIntrNum),   // UINT32  VirtualTimerGSIV
+  GTDT_GTIMER_FLAGS,                            // UINT32  VirtualTimerFlags
+  FixedPcdGet32 (PcdArmArchTimerHypIntrNum),    // UINT32  
NonSecurePL2TimerGSIV
+  GTDT_GTIMER_FLAGS                             // UINT32  
NonSecurePL2TimerFlags
+};
+
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+{
+  //
+  // Reference the table being generated to prevent the optimizer from 
removing the
+  // data structure from the exeutable
+  //
+  return (VOID*)&Gtdt;
+}

Added: trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Madt.aslc
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Madt.aslc                   
        (rev 0)
+++ trunk/edk2/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Madt.aslc   2015-01-23 
16:03:09 UTC (rev 16652)
@@ -0,0 +1,76 @@
+/** @file
+*  Multiple APIC Description Table (MADT)
+*
+*  Copyright (c) 2012 - 2014, ARM Limited. All rights reserved.
+*
+*  This program and the accompanying materials
+*  are licensed and made available under the terms and conditions of the BSD 
License
+*  which accompanies this distribution.  The full text of the license may be 
found at
+*  http://opensource.org/licenses/bsd-license.php
+*
+*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED.
+*
+**/
+
+#include "ArmPlatform.h"
+#include <Library/AcpiLib.h>
+#include <Library/PcdLib.h>
+#include <IndustryStandard/Acpi.h>
+
+#pragma pack (1)
+
+typedef struct {
+  EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER   Header;
+  EFI_ACPI_5_0_GIC_STRUCTURE                            
GicInterfaces[FixedPcdGet32 (PcdCoreCount)];
+  EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE                GicDistributor;
+} EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE;
+
+#pragma pack ()
+
+//
+// Multiple APIC Description Table
+//
+EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {
+  {
+    ARM_ACPI_HEADER (
+      EFI_ACPI_1_0_APIC_SIGNATURE,
+      EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE,
+      EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION
+    ),
+    //
+    // MADT specific fields
+    //
+    0, // LocalApicAddress
+    0, // Flags
+  },
+  {
+    // Format: EFI_ACPI_5_0_GIC_STRUCTURE_INIT(GicId, AcpiCpuId, Flags, 
PmuIrq, GicBase)
+    // Note: The GIC Structure of the primary CPU must be the first entry (see 
note in 5.2.12.14 GIC Structure of
+    //       ACPI v5.0).
+    //       On Juno we can change the primary CPU changing the SCC register. 
It is not currently supported in the
+    //       Trusted Firmware. When supported, we will need to code to 
dynamically change the ordering.
+    //       For now we leave CPU2 (A53-0) at the first position.
+    //       The cores from a same cluster are kept together. It is not an 
ACPI requirement but in case the OSPM uses
+    //       the ACPI ARM Parking protocol, it might want to wake up the cores 
in the order of this table.
+    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(2, 2, EFI_ACPI_5_0_GIC_ENABLED, 50, 
FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-0
+    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(3, 3, EFI_ACPI_5_0_GIC_ENABLED, 54, 
FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-1
+    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(4, 4, EFI_ACPI_5_0_GIC_ENABLED, 58, 
FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-2
+    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(5, 5, EFI_ACPI_5_0_GIC_ENABLED, 62, 
FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A53-3
+    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(0, 0, EFI_ACPI_5_0_GIC_ENABLED, 34, 
FixedPcdGet32 (PcdGicInterruptInterfaceBase)), // A57-0
+    EFI_ACPI_5_0_GIC_STRUCTURE_INIT(1, 1, EFI_ACPI_5_0_GIC_ENABLED, 38, 
FixedPcdGet32 (PcdGicInterruptInterfaceBase))  // A57-1
+  },
+  EFI_ACPI_5_0_GIC_DISTRIBUTOR_INIT(0, FixedPcdGet32 (PcdGicDistributorBase), 
0)
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+{
+  //
+  // Reference the table being generated to prevent the optimizer from 
removing the
+  // data structure from the executable
+  //
+  return (VOID*)&Madt;
+}

Modified: trunk/edk2/ArmPlatformPkg/ArmJunoPkg/ArmJuno.dsc
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmJunoPkg/ArmJuno.dsc    2015-01-23 16:01:11 UTC 
(rev 16651)
+++ trunk/edk2/ArmPlatformPkg/ArmJunoPkg/ArmJuno.dsc    2015-01-23 16:03:09 UTC 
(rev 16652)
@@ -200,6 +200,7 @@
   # ACPI Support
   #
   MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
+  ArmPlatformPkg/ArmJunoPkg/AcpiTables/AcpiTables.inf
 
   MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
 

Modified: trunk/edk2/ArmPlatformPkg/ArmJunoPkg/ArmJuno.fdf
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmJunoPkg/ArmJuno.fdf    2015-01-23 16:01:11 UTC 
(rev 16651)
+++ trunk/edk2/ArmPlatformPkg/ArmJunoPkg/ArmJuno.fdf    2015-01-23 16:03:09 UTC 
(rev 16652)
@@ -106,6 +106,7 @@
   # ACPI Support
   #
   INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
+  INF RuleOverride=ACPITABLE 
ArmPlatformPkg/ArmJunoPkg/AcpiTables/AcpiTables.inf
 
   INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
 
@@ -327,3 +328,9 @@
     UI        STRING="$(MODULE_NAME)" Optional
     VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
   }
+
+[Rule.Common.USER_DEFINED.ACPITABLE]
+  FILE FREEFORM = $(NAMED_GUID) {
+    RAW ACPI               |.acpi
+    RAW ASL                |.aml
+  }

Modified: trunk/edk2/ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h
===================================================================
--- trunk/edk2/ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h  2015-01-23 
16:01:11 UTC (rev 16651)
+++ trunk/edk2/ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h  2015-01-23 
16:03:09 UTC (rev 16652)
@@ -52,4 +52,27 @@
 #define ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE     0x0880000000
 #define ARM_JUNO_EXTRA_SYSTEM_MEMORY_SZ       (SIZE_2GB + SIZE_4GB)
 
+//
+// ACPI table information used to initialize tables.
+//
+#define EFI_ACPI_ARM_OEM_ID           'A','R','M','L','T','D'   // OEMID 6 
bytes long
+#define EFI_ACPI_ARM_OEM_TABLE_ID     
SIGNATURE_64('A','R','M','-','J','U','N','O') // OEM table id 8 bytes long
+#define EFI_ACPI_ARM_OEM_REVISION     0x20140727
+#define EFI_ACPI_ARM_CREATOR_ID       SIGNATURE_32('A','R','M',' ')
+#define EFI_ACPI_ARM_CREATOR_REVISION 0x00000099
+
+// A macro to initialise the common header part of EFI ACPI tables as defined 
by
+// EFI_ACPI_DESCRIPTION_HEADER structure.
+#define ARM_ACPI_HEADER(Signature, Type, Revision) {              \
+    Signature,                      /* UINT32  Signature */       \
+    sizeof (Type),                  /* UINT32  Length */          \
+    Revision,                       /* UINT8   Revision */        \
+    0,                              /* UINT8   Checksum */        \
+    { EFI_ACPI_ARM_OEM_ID },        /* UINT8   OemId[6] */        \
+    EFI_ACPI_ARM_OEM_TABLE_ID,      /* UINT64  OemTableId */      \
+    EFI_ACPI_ARM_OEM_REVISION,      /* UINT32  OemRevision */     \
+    EFI_ACPI_ARM_CREATOR_ID,        /* UINT32  CreatorId */       \
+    EFI_ACPI_ARM_CREATOR_REVISION   /* UINT32  CreatorRevision */ \
+  }
+
 #endif


------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to