mirror of https://github.com/acidanthera/audk.git
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 <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@16652 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
05e56470cd
commit
3399d5beb8
|
@ -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
|
|
@ -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)
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -200,6 +200,7 @@
|
||||||
# ACPI Support
|
# ACPI Support
|
||||||
#
|
#
|
||||||
MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
||||||
|
ArmPlatformPkg/ArmJunoPkg/AcpiTables/AcpiTables.inf
|
||||||
|
|
||||||
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
|
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,7 @@ READ_LOCK_STATUS = TRUE
|
||||||
# ACPI Support
|
# ACPI Support
|
||||||
#
|
#
|
||||||
INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
||||||
|
INF RuleOverride=ACPITABLE ArmPlatformPkg/ArmJunoPkg/AcpiTables/AcpiTables.inf
|
||||||
|
|
||||||
INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
|
INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
|
||||||
|
|
||||||
|
@ -327,3 +328,9 @@ READ_LOCK_STATUS = TRUE
|
||||||
UI STRING="$(MODULE_NAME)" Optional
|
UI STRING="$(MODULE_NAME)" Optional
|
||||||
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
|
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Rule.Common.USER_DEFINED.ACPITABLE]
|
||||||
|
FILE FREEFORM = $(NAMED_GUID) {
|
||||||
|
RAW ACPI |.acpi
|
||||||
|
RAW ASL |.aml
|
||||||
|
}
|
||||||
|
|
|
@ -52,4 +52,27 @@
|
||||||
#define ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE 0x0880000000
|
#define ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE 0x0880000000
|
||||||
#define ARM_JUNO_EXTRA_SYSTEM_MEMORY_SZ (SIZE_2GB + SIZE_4GB)
|
#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
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue