As discussed off line, this file is not referenced by the .inf so it
can be removed.
It looks like the MADT describes a GICv3 unconditionally? This is
fine, and my intention was to build runtime detection on top of these
patches. But we should probably mention the v2/v3 change in the commit
log, since the code it replaces describes GICv2 only.
I can make both changes when committing, if necessary.
--
Ard.
> Platforms/ARM/VExpress/AcpiTables/Spcr.aslc | 88 ++++++++++++++
> 8 files changed, 662 insertions(+)
> create mode 100644 Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf
> create mode 100644 Platforms/ARM/VExpress/AcpiTables/Dbg2.asl
> create mode 100644 Platforms/ARM/VExpress/AcpiTables/Dsdt.asl
> create mode 100644 Platforms/ARM/VExpress/AcpiTables/Fadt.aslc
> create mode 100644 Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h
> create mode 100644 Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc
> create mode 100644 Platforms/ARM/VExpress/AcpiTables/Madt.aslc
> create mode 100644 Platforms/ARM/VExpress/AcpiTables/Spcr.aslc
>
> diff --git a/Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf b/Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf
> new file mode 100644
> index 0000000..59d3238
> --- /dev/null
> +++ b/Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf
> @@ -0,0 +1,43 @@
> +## @file
> +#
> +# ACPI table data and ASL sources required to boot the platform.
> +#
> +# Copyright (c) 2014-2016, 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 = FvpAcpiTables
> + FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD
> + MODULE_TYPE = USER_DEFINED
> + VERSION_STRING = 1.0
> +
> +[Sources]
> + Dsdt.asl
> + Spcr.aslc
> + Fadt.aslc
> + Gtdt.aslc
> + Madt.aslc
> +
> +[Packages]
> + ArmPkg/ArmPkg.dec
> + ArmPlatformPkg/ArmPlatformPkg.dec
> + ArmPlatformPkg/ArmVExpressPkg/ArmVExpressPkg.dec
> + EmbeddedPkg/EmbeddedPkg.dec
> + MdePkg/MdePkg.dec
> + MdeModulePkg/MdeModulePkg.dec
> +
> +
> +[FixedPcd]
> + gArmTokenSpaceGuid.PcdGicDistributorBase
> + gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
> + gArmTokenSpaceGuid.PcdGicRedistributorsBase
> diff --git a/Platforms/ARM/VExpress/AcpiTables/Dbg2.asl b/Platforms/ARM/VExpress/AcpiTables/Dbg2.asl
> new file mode 100644
> index 0000000..f57fa7e
> --- /dev/null
> +++ b/Platforms/ARM/VExpress/AcpiTables/Dbg2.asl
> @@ -0,0 +1,72 @@
> +/*
> + * Copyright (c) 2015, Graeme Gregory
graeme.gregory@linaro.org
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + *
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + *
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
> + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
> + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
> + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + *
> + * NB: This License is also known as the "BSD 2-Clause License".
> + *
> + *
> + * [DBG2] ACPI Table
> + *
> + */
> +
> +[0004] Signature : "DBG2" [Debug Port table type 2]
> +[0004] Table Length : 0000005A
> +[0001] Revision : 00
> +[0001] Checksum : 06
> +[0006] Oem ID : "LINARO"
> +[0008] Oem Table ID : "ARM-JUNO"
> +[0004] Oem Revision : 00000000
> +[0004] Asl Compiler ID : "INTL"
> +[0004] Asl Compiler Revision : 20140926
> +
> +[0004] Info Offset : 0000002C
> +[0004] Info Count : 00000001
> +
> +[0001] Revision : 00
> +[0002] Length : 002C
> +[0001] Register Count : 01
> +[0002] Namepath Length : 0005
> +[0002] Namepath Offset : 0026
> +[0002] OEM Data Length : 0000 [Optional field not present]
> +[0002] OEM Data Offset : 0000 [Optional field not present]
> +[0002] Port Type : 8000
> +[0002] Port Subtype : 0003
> +[0002] Reserved : 0000
> +[0002] Base Address Offset : 0016
> +[0002] Address Size Offset : 0022
> +
> +[000C] Base Address Register : [Generic Address Structure]
> +[0001] Space ID : 00 [SystemMemory]
> +[0001] Bit Width : 20
> +[0001] Bit Offset : 00
> +[0001] Encoded Access Width : 03 [DWord Access:32]
> +[0008] Address : 000000007FF80000
> +
> +[0004] Address Size : 00001000
> +
> +[0004] Namepath : "COM1"
> +[0001] OEM Data : 00
> diff --git a/Platforms/ARM/VExpress/AcpiTables/Dsdt.asl b/Platforms/ARM/VExpress/AcpiTables/Dsdt.asl
> new file mode 100644
> index 0000000..172ca3a
> --- /dev/null
> +++ b/Platforms/ARM/VExpress/AcpiTables/Dsdt.asl
> @@ -0,0 +1,144 @@
> +/*
> +* Copyright (c) 2013, Al Stone
al.stone@linaro.org
> +* All rights reserved.
> +*
> +* Redistribution and use in source and binary forms, with or without
> +* modification, are permitted provided that the following conditions
> +* are met:
> +*
> +* 1. Redistributions of source code must retain the above copyright
> +* notice, this list of conditions and the following disclaimer.
> +*
> +* 2. Redistributions in binary form must reproduce the above copyright
> +* notice, this list of conditions and the following disclaimer in the
> +* documentation and/or other materials provided with the distribution.
> +*
> +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> +* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
> +* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
> +* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
> +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +*
> +*
> +* NB: This License is also known as the "BSD 2-Clause License".
> +*
> +*
> +* [DSDT] Description of the armv8 VE Model
> +*
> +*/
> +
> +DefinitionBlock (
> + "dsdt.aml", // output filename
> + "DSDT", // table signature
> + 2, // DSDT compliance revision
> + "LINARO", // OEM ID
> + "RTSMVEV8", // table ID
> + 0x00000004) // OEM revision
> +{
> + Scope (_SB)
> + {
> + Method (_OSC, 4, NotSerialized)
> + {
> + /* Platform-Wide OSPM Capabilities */
> + If(LEqual(Arg0,ToUUID("0811B06E-4A27-44F9-8D60-3CBBC22E7B48")))
> + {
> + /* APEI support unconditionally */
> + Return (Arg3)
> + } Else {
> + CreateDWordField (Arg3, Zero, CDW1)
> + /* Set invalid UUID error bit */
> + Or (CDW1, 0x04, CDW1)
> + Return (Arg3)
> + }
> + }
> +
> + //
> + // Two Emulated aarch64 CPUs each with 4 cores
> + //
> + Device(CPU0) { // Cluster 0, Cpu 0
> + Name(_HID, "ACPI0007")
> + Name(_UID, 0)
> + }
> + Device(CPU1) { // Cluster 0, Cpu 1
> + Name(_HID, "ACPI0007")
> + Name(_UID, 1)
> + }
> + Device(CPU2) { // Cluster 0, Cpu 2
> + Name(_HID, "ACPI0007")
> + Name(_UID, 2)
> + }
> + Device(CPU3) { // Cluster 0, Cpu 3
> + Name(_HID, "ACPI0007")
> + Name(_UID, 3)
> + }
> + Device(CPU4) { // Cluster 1, Cpu 0
> + Name(_HID, "ACPI0007")
> + Name(_UID, 4)
> + }
> + Device(CPU5) { // Cluster 1, Cpu 1
> + Name(_HID, "ACPI0007")
> + Name(_UID, 5)
> + }
> + Device(CPU6) { // Cluster 1, Cpu 2
> + Name(_HID, "ACPI0007")
> + Name(_UID, 6)
> + }
> + Device(CPU7) { // Cluster 1, Cpu 3
> + Name(_HID, "ACPI0007")
> + Name(_UID, 7)
> + }
> +
> + // SMC91X
> + Device (NET0) {
> + Name (_HID, "LNRO0003")
> + Name (_UID, 0)
> +
> + Name (_CRS, ResourceTemplate () {
> + Memory32Fixed (ReadWrite, 0x1a000000, 0x00010000)
> + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {0x2F}
> + })
> + }
> +
> + // SYSREG
> + Device (SREG) {
> + Name (_HID, "LNRO0009")
> + Name (_UID, 0)
> +
> + Method (_CRS, 0x0, Serialized) {
> + Name (RBUF, ResourceTemplate() {
> + Memory32Fixed (ReadWrite, 0x1c010000, 0x1000)
> + })
> + Return (RBUF)
> + }
> + }
> +
> + // VIRTIO
> + Device (VIRT) {
> + Name (_HID, "LNRO0005")
> + Name (_UID, 0)
> +
> + Name (_CRS, ResourceTemplate() {
> + Memory32Fixed (ReadWrite, 0x1c130000, 0x1000)
> + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) {0x4A}
> + })
> + }
> +
> + // UART PL011
> + Device(COM0) {
> + Name(_HID, "ARMH0011")
> + Name(_CID, "PL011")
> + Name(_UID, Zero)
> +
> + Name(_CRS, ResourceTemplate() {
> + Memory32Fixed(ReadWrite, 0x1c090000, 0x1000)
> + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 0x25 }
> + })
> + }
> + }
> +}
> diff --git a/Platforms/ARM/VExpress/AcpiTables/Fadt.aslc b/Platforms/ARM/VExpress/AcpiTables/Fadt.aslc
> new file mode 100644
> index 0000000..087c191
> --- /dev/null
> +++ b/Platforms/ARM/VExpress/AcpiTables/Fadt.aslc
> @@ -0,0 +1,86 @@
> +/** @file
> +* Fixed ACPI Description Table (FADT)
> +*
> +* Copyright (c) 2012 - 2016, 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 "FvpPlatform.h"
> +#include <Library/AcpiLib.h>
> +#include <IndustryStandard/Acpi.h>
> +
> +EFI_ACPI_6_1_FIXED_ACPI_DESCRIPTION_TABLE Fadt = {
> + ARM_ACPI_HEADER (
> + EFI_ACPI_6_1_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
> + EFI_ACPI_6_1_FIXED_ACPI_DESCRIPTION_TABLE,
> + EFI_ACPI_6_1_FIXED_ACPI_DESCRIPTION_TABLE_REVISION
> + ),
> + 0, // UINT32 FirmwareCtrl
> + 0, // UINT32 Dsdt
> + EFI_ACPI_RESERVED_BYTE, // UINT8 Reserved0
> + EFI_ACPI_6_1_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_6_1_HW_REDUCED_ACPI | EFI_ACPI_6_1_LOW_POWER_S0_IDLE_CAPABLE, // UINT32 Flags
> + NULL_GAS, // EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE ResetReg
> + 0, // UINT8 ResetValue
> + EFI_ACPI_6_1_ARM_PSCI_COMPLIANT, // UINT16 ArmBootArchFlags
> + EFI_ACPI_6_1_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION, // UINT8 MinorRevision
> + 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
> +};
> +
> +//
> +// Reference the table being generated to prevent the optimizer from removing the
> +// data structure from the executable
> +//
> +VOID* CONST ReferenceAcpiTable = &Fadt;
> diff --git a/Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h b/Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h
> new file mode 100644
> index 0000000..e3582bf
> --- /dev/null
> +++ b/Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h
> @@ -0,0 +1,46 @@
> +/** @file
> +*
> +* Copyright (c) 2011-2015, ARM Limited. All rights reserved.
> +* Copyright (c) 2015, Hisilicon Limited. All rights reserved.
> +* Copyright (c) 2015, Linaro 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.
> +*
> +* Based on the files under ArmPlatformPkg/ArmJunoPkg/AcpiTables/
> +*
> +**/
> +
> +
> +#ifndef _FVP_PLATFORM_H_
> +#define _FVP_PLATFORM_H_
> +
> +//
> +// ACPI table information used to initialize tables.
> +//
> +#define EFI_ACPI_ARM_OEM_ID 'L','I','N','A','R','O' // OEMID 6 bytes long
> +#define EFI_ACPI_ARM_OEM_TABLE_ID SIGNATURE_64('R','T','S','M','V','E','V','8') // OEM table id 8 bytes long
> +#define EFI_ACPI_ARM_OEM_REVISION 0x00000002
> +#define EFI_ACPI_ARM_CREATOR_ID SIGNATURE_32('L','N','R','O')
> +#define EFI_ACPI_ARM_CREATOR_REVISION 0x00000002
> +
> +// 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
> diff --git a/Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc b/Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc
> new file mode 100644
> index 0000000..142249f
> --- /dev/null
> +++ b/Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc
> @@ -0,0 +1,92 @@
> +/** @file
> +* Generic Timer Description Table (GTDT)
> +*
> +* Copyright (c) 2012 - 2014, ARM Limited. All rights reserved.
> +* Copyright (c) 2016, Linaro 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.
> +*
> +**/
> +
> +#include "FvpPlatform.h"
> +#include <Library/AcpiLib.h>
> +#include <Library/PcdLib.h>
> +#include <IndustryStandard/Acpi61.h>
> +
> +#define SECURE_TIMER_EL1_GSIV 0x1D
> +#define NON_SECURE_TIMER_EL1_GSIV 0x1E
> +#define VIRTUAL_TIMER_GSIV 0x1B
> +#define NON_SECURE_EL2_GSIV 0x1A
> +
> +#define GT_BLOCK_CTL_BASE 0x000000002A810000
> +#define GT_BLOCK_FRAME1_CTL_BASE 0x000000002A820000
> +#define GT_BLOCK_FRAME1_GSIV 0x29
> +
> +#pragma pack (1)
> +
> +typedef struct {
> + EFI_ACPI_6_1_GENERIC_TIMER_DESCRIPTION_TABLE Gtdt;
> + EFI_ACPI_6_1_GTDT_GT_BLOCK_STRUCTURE GtBlock;
> + EFI_ACPI_6_1_GTDT_GT_BLOCK_TIMER_STRUCTURE Frames[1];
> +} FVP_GENERIC_TIMER_DESCRIPTION_TABLES;
> +
> +#pragma pack ()
> +
> +FVP_GENERIC_TIMER_DESCRIPTION_TABLES Gtdt = {
> + {
> + ARM_ACPI_HEADER(
> + EFI_ACPI_6_1_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,
> + FVP_GENERIC_TIMER_DESCRIPTION_TABLES,
> + EFI_ACPI_6_1_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION
> + ),
> + 0xFFFFFFFFFFFFFFFF, // UINT64 PhysicalAddress
> + EFI_ACPI_RESERVED_DWORD, // UINT32 Reserved
> + SECURE_TIMER_EL1_GSIV, // UINT32 SecurePL1TimerGSIV
> + EFI_ACPI_6_1_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE, // UINT32 SecurePL1TimerFlags
> + NON_SECURE_TIMER_EL1_GSIV, // UINT32 NonSecurePL1TimerGSIV
> + EFI_ACPI_6_1_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE, // UINT32 NonSecurePL1TimerFlags
> + VIRTUAL_TIMER_GSIV, // UINT32 VirtualTimerGSIV
> + EFI_ACPI_6_1_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE, // UINT32 VirtualTimerFlags
> + NON_SECURE_EL2_GSIV, // UINT32 NonSecurePL2TimerGSIV
> + EFI_ACPI_6_1_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE, // UINT32 NonSecurePL2TimerFlags
> + 0xFFFFFFFFFFFFFFFF, // UINT64 CntReadBasePhysicalAddress
> + 1, // UINT32 PlatformTimerCount
> + sizeof (EFI_ACPI_6_1_GENERIC_TIMER_DESCRIPTION_TABLE) // UINT32 PlatfromTimerOffset
> + },
> + {
> + EFI_ACPI_6_1_GTDT_GT_BLOCK, // UINT8 Type
> + sizeof(EFI_ACPI_6_1_GTDT_GT_BLOCK_STRUCTURE) // UINT16 Length
> + + sizeof(EFI_ACPI_6_1_GTDT_GT_BLOCK_TIMER_STRUCTURE),
> + EFI_ACPI_RESERVED_BYTE, // UINT8 Reserved
> + GT_BLOCK_CTL_BASE, // UINT64 CntCtlBase
> + 1, // UINT32 GTBlockTimerCount
> + sizeof(EFI_ACPI_6_1_GTDT_GT_BLOCK_STRUCTURE) // UINT32 GTBlockTimerOffset
> + },
> + {
> + {
> + 0, // UINT8 GTFrameNumber
> + {EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE}, // UINT8 Reserved[3]
> + GT_BLOCK_FRAME1_CTL_BASE, // UINT64 CntBaseX
> + 0xFFFFFFFFFFFFFFFF, // UINT64 CntEL0BaseX
> + GT_BLOCK_FRAME1_GSIV, // UINT32 GTxPhysicalTimerGSIV
> + 0, // UINT32 GTxPhysicalTimerFlags
> + 0, // UINT32 GTxVirtualTimerGSIV
> + 0, // UINT32 GTxVirtualTimerFlags
> + 0 // UINT32 GTxCommonFlags
> + }
> + }
> +};
> +
> +//
> +// Reference the table being generated to prevent the optimizer from removing the
> +// data structure from the executable
> +//
> +VOID* CONST ReferenceAcpiTable = &Gtdt;
> diff --git a/Platforms/ARM/VExpress/AcpiTables/Madt.aslc b/Platforms/ARM/VExpress/AcpiTables/Madt.aslc
> new file mode 100644
> index 0000000..5130548
> --- /dev/null
> +++ b/Platforms/ARM/VExpress/AcpiTables/Madt.aslc
> @@ -0,0 +1,91 @@
> +/** @file
> +* Multiple APIC Description Table (MADT)
> +*
> +* Copyright (c) 2012 - 2015, ARM Limited. All rights reserved.
> +* Copyright (c) 2016 Linaro 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.
> +*
> +**/
> +
> +#include "FvpPlatform.h"
> +#include <Library/AcpiLib.h>
> +#include <Library/ArmLib.h>
> +#include <Library/PcdLib.h>
> +#include <IndustryStandard/Acpi61.h>
> +
> +//
> +// Multiple APIC Description Table
> +//
> +#pragma pack (1)
> +
> +typedef struct {
> + EFI_ACPI_6_1_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;
> + EFI_ACPI_6_1_GIC_STRUCTURE GicInterfaces[8];
> + EFI_ACPI_6_1_GIC_DISTRIBUTOR_STRUCTURE GicDistributor;
> + EFI_ACPI_6_1_GICR_STRUCTURE Gicr;
> +} FVP_MULTIPLE_APIC_DESCRIPTION_TABLE;
> +
> +#pragma pack ()
> +
> +FVP_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {
> + {
> + ARM_ACPI_HEADER (
> + EFI_ACPI_6_1_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
> + FVP_MULTIPLE_APIC_DESCRIPTION_TABLE,
> + EFI_ACPI_6_1_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION
> + ),
> + //
> + // MADT specific fields
> + //
> + 0, // LocalApicAddress
> + 0, // Flags
> + },
> + {
> + EFI_ACPI_6_0_GICC_STRUCTURE_INIT(
> + 0, 0, GET_MPID(0, 0), EFI_ACPI_6_0_GIC_ENABLED, 0, FixedPcdGet32 (PcdGicInterruptInterfaceBase),
> + 0x2C02F000, 0x2C010000, 0x19, 0, 0),
> + EFI_ACPI_6_0_GICC_STRUCTURE_INIT(
> + 1, 1, GET_MPID(0, 1), EFI_ACPI_6_0_GIC_ENABLED, 0, FixedPcdGet32 (PcdGicInterruptInterfaceBase),
> + 0x2C02F000, 0x2C010000, 0x19, 0, 0),
> + EFI_ACPI_6_0_GICC_STRUCTURE_INIT(
> + 2, 2, GET_MPID(0, 2), EFI_ACPI_6_0_GIC_ENABLED, 0, FixedPcdGet32 (PcdGicInterruptInterfaceBase),
> + 0x2C02F000, 0x2C010000, 0x19, 0, 0),
> + EFI_ACPI_6_0_GICC_STRUCTURE_INIT(
> + 3, 3, GET_MPID(0, 3), EFI_ACPI_6_0_GIC_ENABLED, 0, FixedPcdGet32 (PcdGicInterruptInterfaceBase),
> + 0x2C02F000, 0x2C010000, 0x19, 0, 0),
> + EFI_ACPI_6_0_GICC_STRUCTURE_INIT(
> + 4, 4, GET_MPID(1, 0), EFI_ACPI_6_0_GIC_ENABLED, 0, FixedPcdGet32 (PcdGicInterruptInterfaceBase),
> + 0x2C02F000, 0x2C010000, 0x19, 0, 0),
> + EFI_ACPI_6_0_GICC_STRUCTURE_INIT(
> + 5, 5, GET_MPID(1, 1), EFI_ACPI_6_0_GIC_ENABLED, 0, FixedPcdGet32 (PcdGicInterruptInterfaceBase),
> + 0x2C02F000, 0x2C010000, 0x19, 0, 0),
> + EFI_ACPI_6_0_GICC_STRUCTURE_INIT(
> + 6, 6, GET_MPID(1, 2), EFI_ACPI_6_0_GIC_ENABLED, 0, FixedPcdGet32 (PcdGicInterruptInterfaceBase),
> + 0x2C02F000, 0x2C010000, 0x19, 0, 0),
> + EFI_ACPI_6_0_GICC_STRUCTURE_INIT(
> + 7, 7, GET_MPID(1, 3), EFI_ACPI_6_0_GIC_ENABLED, 0, FixedPcdGet32 (PcdGicInterruptInterfaceBase),
> + 0x2C02F000, 0x2C010000, 0x19, 0, 0),
> + },
> + EFI_ACPI_6_0_GIC_DISTRIBUTOR_INIT(0, FixedPcdGet32 (PcdGicDistributorBase), 0, 3),
> + /* GIC Redistributor */
> + {
> + EFI_ACPI_6_1_GICR, // UINT8 Type
> + sizeof(EFI_ACPI_6_1_GICR_STRUCTURE), // UINT8 Length
> + EFI_ACPI_RESERVED_WORD, // UINT16 Reserved
> + FixedPcdGet32 (PcdGicRedistributorsBase), // UINT64 DiscoveryRangeBaseAddress
> + 0x00200000, // UINT32 DiscoveryRangeLength
> + }
> +};
> +
> +//
> +// Reference the table being generated to prevent the optimizer from removing the
> +// data structure from the executable
> +//
> +VOID* CONST ReferenceAcpiTable = &Madt;
> diff --git a/Platforms/ARM/VExpress/AcpiTables/Spcr.aslc b/Platforms/ARM/VExpress/AcpiTables/Spcr.aslc
> new file mode 100644
> index 0000000..68caa24
> --- /dev/null
> +++ b/Platforms/ARM/VExpress/AcpiTables/Spcr.aslc
> @@ -0,0 +1,88 @@
> +/** @file
> +* SPCR Table
> +*
> +* Copyright (c) 2014 - 2016, ARM Limited. All rights reserved.
> +* Copyright (c) 2016, Linaro 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.
> +*
> +**/
> +
> +#include "FvpPlatform.h"
> +#include <Library/AcpiLib.h>
> +#include <IndustryStandard/Acpi61.h>
> +#include <IndustryStandard/SerialPortConsoleRedirectionTable.h>
> +
> +/**
> + * References:
> + * Serial Port Console Redirection Table Specification Version 1.03 - August 10, 2015
> + **/
> +
> +
> +///
> +/// SPCR Flow Control
> +///
> +#define SPCR_FLOW_CONTROL_NONE 0
> +
> +
> +STATIC EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE Spcr = {
> + ARM_ACPI_HEADER (EFI_ACPI_6_1_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,
> + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE,
> + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION),
> + // UINT8 InterfaceType;
> + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_ARM_PL011_UART,
> + // UINT8 Reserved1[3];
> + {
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE
> + },
> + // EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE BaseAddress;
> + ARM_GAS32 (0x1C090000),
> + // UINT8 InterruptType;
> + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERRUPT_TYPE_GIC,
> + // UINT8 Irq;
> + 0, // Not used on ARM
> + // UINT32 GlobalSystemInterrupt;
> + 0x25,
> + // UINT8 BaudRate;
> + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_115200,
> + // UINT8 Parity;
> + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_PARITY_NO_PARITY,
> + // UINT8 StopBits;
> + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_STOP_BITS_1,
> + // UINT8 FlowControl;
> + SPCR_FLOW_CONTROL_NONE,
> + // UINT8 TerminalType;
> + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_TERMINAL_TYPE_ANSI,
> + // UINT8 Reserved2;
> + EFI_ACPI_RESERVED_BYTE,
> + // UINT16 PciDeviceId;
> + 0xFFFF,
> + // UINT16 PciVendorId;
> + 0xFFFF,
> + // UINT8 PciBusNumber;
> + 0x00,
> + // UINT8 PciDeviceNumber;
> + 0x00,
> + // UINT8 PciFunctionNumber;
> + 0x00,
> + // UINT32 PciFlags;
> + 0x00000000,
> + // UINT8 PciSegment;
> + 0x00,
> + // UINT32 Reserved3;
> + EFI_ACPI_RESERVED_DWORD
> +};
> +
> +//
> +// Reference the table being generated to prevent the optimizer from removing the
> +// data structure from the executable
> +//
> +VOID* CONST ReferenceAcpiTable = &Spcr;
> --
> 2.8.1
>