Message ID | 1467749930-6455-3-git-send-email-graeme.gregory@linaro.org |
---|---|
State | Accepted |
Commit | d1991b6bda6972d69abba87f0881410afcbffd4d |
Headers | show |
On 5 July 2016 at 22:18, Graeme Gregory <graeme.gregory@linaro.org> wrote: > .asl files can end up being modified to later versions of spec when FADT > is tied to an earlier version. This can cause builds to break > unexpectedly on tools upgrades. Convert to aslc to fix the version of > ACPI in use for this platform to 6.1 > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org> > --- > Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf | 43 +++++++ > Platforms/ARM/VExpress/AcpiTables/Dbg2.asl | 72 ++++++++++++ As discussed off line, this file is not referenced by the .inf so it can be removed. > Platforms/ARM/VExpress/AcpiTables/Dsdt.asl | 144 +++++++++++++++++++++++ > Platforms/ARM/VExpress/AcpiTables/Fadt.aslc | 86 ++++++++++++++ > Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h | 46 ++++++++ > Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc | 92 +++++++++++++++ > Platforms/ARM/VExpress/AcpiTables/Madt.aslc | 91 ++++++++++++++ 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.
On Wed, Jul 06, 2016 at 11:55:22AM +0200, Ard Biesheuvel wrote: > On 5 July 2016 at 22:18, Graeme Gregory <graeme.gregory@linaro.org> wrote: > > .asl files can end up being modified to later versions of spec when FADT > > is tied to an earlier version. This can cause builds to break > > unexpectedly on tools upgrades. Convert to aslc to fix the version of > > ACPI in use for this platform to 6.1 > > > > Contributed-under: TianoCore Contribution Agreement 1.0 > > Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org> > > --- > > Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf | 43 +++++++ > > Platforms/ARM/VExpress/AcpiTables/Dbg2.asl | 72 ++++++++++++ > > As discussed off line, this file is not referenced by the .inf so it > can be removed. > > > Platforms/ARM/VExpress/AcpiTables/Dsdt.asl | 144 +++++++++++++++++++++++ > > Platforms/ARM/VExpress/AcpiTables/Fadt.aslc | 86 ++++++++++++++ > > Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h | 46 ++++++++ > > Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc | 92 +++++++++++++++ > > Platforms/ARM/VExpress/AcpiTables/Madt.aslc | 91 ++++++++++++++ > > 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. > That is fine with me if there are no other changes. I based the files off your patch to go to GICv3 and just forgot to mention it. Graeme > -- > 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 > >
On 6 July 2016 at 12:39, Graeme Gregory <graeme.gregory@linaro.org> wrote: > On Wed, Jul 06, 2016 at 11:55:22AM +0200, Ard Biesheuvel wrote: >> On 5 July 2016 at 22:18, Graeme Gregory <graeme.gregory@linaro.org> wrote: >> > .asl files can end up being modified to later versions of spec when FADT >> > is tied to an earlier version. This can cause builds to break >> > unexpectedly on tools upgrades. Convert to aslc to fix the version of >> > ACPI in use for this platform to 6.1 >> > >> > Contributed-under: TianoCore Contribution Agreement 1.0 >> > Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org> >> > --- >> > Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf | 43 +++++++ >> > Platforms/ARM/VExpress/AcpiTables/Dbg2.asl | 72 ++++++++++++ >> >> As discussed off line, this file is not referenced by the .inf so it >> can be removed. >> >> > Platforms/ARM/VExpress/AcpiTables/Dsdt.asl | 144 +++++++++++++++++++++++ >> > Platforms/ARM/VExpress/AcpiTables/Fadt.aslc | 86 ++++++++++++++ >> > Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h | 46 ++++++++ >> > Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc | 92 +++++++++++++++ >> > Platforms/ARM/VExpress/AcpiTables/Madt.aslc | 91 ++++++++++++++ >> >> 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. >> > > That is fine with me if there are no other changes. I based the files > off your patch to go to GICv3 and just forgot to mention it. > No, other than that the patches look fine to me, and they are working as expected afaict So unless Leif has any comments, I'll proceed and commit them (with the above changes applied) Thanks, Ard.
On Wed, Jul 06, 2016 at 01:13:15PM +0200, Ard Biesheuvel wrote: > On 6 July 2016 at 12:39, Graeme Gregory <graeme.gregory@linaro.org> wrote: > > On Wed, Jul 06, 2016 at 11:55:22AM +0200, Ard Biesheuvel wrote: > >> On 5 July 2016 at 22:18, Graeme Gregory <graeme.gregory@linaro.org> wrote: > >> > .asl files can end up being modified to later versions of spec when FADT > >> > is tied to an earlier version. This can cause builds to break > >> > unexpectedly on tools upgrades. Convert to aslc to fix the version of > >> > ACPI in use for this platform to 6.1 > >> > > >> > Contributed-under: TianoCore Contribution Agreement 1.0 > >> > Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org> > >> > --- > >> > Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf | 43 +++++++ > >> > Platforms/ARM/VExpress/AcpiTables/Dbg2.asl | 72 ++++++++++++ > >> > >> As discussed off line, this file is not referenced by the .inf so it > >> can be removed. > >> > >> > Platforms/ARM/VExpress/AcpiTables/Dsdt.asl | 144 +++++++++++++++++++++++ > >> > Platforms/ARM/VExpress/AcpiTables/Fadt.aslc | 86 ++++++++++++++ > >> > Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h | 46 ++++++++ > >> > Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc | 92 +++++++++++++++ > >> > Platforms/ARM/VExpress/AcpiTables/Madt.aslc | 91 ++++++++++++++ > >> > >> 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. > >> > > > > That is fine with me if there are no other changes. I based the files > > off your patch to go to GICv3 and just forgot to mention it. > > > > No, other than that the patches look fine to me, and they are working > as expected afaict > So unless Leif has any comments, I'll proceed and commit them (with > the above changes applied) If you're happy to do the changes, I'm happy for it to go in. Regards, Leif
(+ Ryan) On 6 July 2016 at 15:29, Leif Lindholm <leif.lindholm@linaro.org> wrote: > On Wed, Jul 06, 2016 at 01:13:15PM +0200, Ard Biesheuvel wrote: >> On 6 July 2016 at 12:39, Graeme Gregory <graeme.gregory@linaro.org> wrote: >> > On Wed, Jul 06, 2016 at 11:55:22AM +0200, Ard Biesheuvel wrote: >> >> On 5 July 2016 at 22:18, Graeme Gregory <graeme.gregory@linaro.org> wrote: >> >> > .asl files can end up being modified to later versions of spec when FADT >> >> > is tied to an earlier version. This can cause builds to break >> >> > unexpectedly on tools upgrades. Convert to aslc to fix the version of >> >> > ACPI in use for this platform to 6.1 >> >> > >> >> > Contributed-under: TianoCore Contribution Agreement 1.0 >> >> > Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org> >> >> > --- >> >> > Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf | 43 +++++++ >> >> > Platforms/ARM/VExpress/AcpiTables/Dbg2.asl | 72 ++++++++++++ >> >> >> >> As discussed off line, this file is not referenced by the .inf so it >> >> can be removed. >> >> >> >> > Platforms/ARM/VExpress/AcpiTables/Dsdt.asl | 144 +++++++++++++++++++++++ >> >> > Platforms/ARM/VExpress/AcpiTables/Fadt.aslc | 86 ++++++++++++++ >> >> > Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h | 46 ++++++++ >> >> > Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc | 92 +++++++++++++++ >> >> > Platforms/ARM/VExpress/AcpiTables/Madt.aslc | 91 ++++++++++++++ >> >> >> >> 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. >> >> >> > >> > That is fine with me if there are no other changes. I based the files >> > off your patch to go to GICv3 and just forgot to mention it. >> > >> >> No, other than that the patches look fine to me, and they are working >> as expected afaict >> So unless Leif has any comments, I'll proceed and commit them (with >> the above changes applied) > > If you're happy to do the changes, I'm happy for it to go in. > OK, I will push them later today or tomorrow. @Ryan: as a head's up, this series will require Graeme's patch 6ff71a134f5b EmbeddedPkg/AcpiLib: add GICC table init macro for ACPI 6.0 on the EDK2 side, which I committed this morning. Thanks, Ard.
On 6 July 2016 at 15:04, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > (+ Ryan) > > On 6 July 2016 at 15:29, Leif Lindholm <leif.lindholm@linaro.org> wrote: >> On Wed, Jul 06, 2016 at 01:13:15PM +0200, Ard Biesheuvel wrote: >>> On 6 July 2016 at 12:39, Graeme Gregory <graeme.gregory@linaro.org> wrote: >>> > On Wed, Jul 06, 2016 at 11:55:22AM +0200, Ard Biesheuvel wrote: >>> >> On 5 July 2016 at 22:18, Graeme Gregory <graeme.gregory@linaro.org> wrote: >>> >> > .asl files can end up being modified to later versions of spec when FADT >>> >> > is tied to an earlier version. This can cause builds to break >>> >> > unexpectedly on tools upgrades. Convert to aslc to fix the version of >>> >> > ACPI in use for this platform to 6.1 >>> >> > >>> >> > Contributed-under: TianoCore Contribution Agreement 1.0 >>> >> > Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org> >>> >> > --- >>> >> > Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf | 43 +++++++ >>> >> > Platforms/ARM/VExpress/AcpiTables/Dbg2.asl | 72 ++++++++++++ >>> >> >>> >> As discussed off line, this file is not referenced by the .inf so it >>> >> can be removed. >>> >> >>> >> > Platforms/ARM/VExpress/AcpiTables/Dsdt.asl | 144 +++++++++++++++++++++++ >>> >> > Platforms/ARM/VExpress/AcpiTables/Fadt.aslc | 86 ++++++++++++++ >>> >> > Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h | 46 ++++++++ >>> >> > Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc | 92 +++++++++++++++ >>> >> > Platforms/ARM/VExpress/AcpiTables/Madt.aslc | 91 ++++++++++++++ >>> >> >>> >> 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. >>> >> >>> > >>> > That is fine with me if there are no other changes. I based the files >>> > off your patch to go to GICv3 and just forgot to mention it. >>> > >>> >>> No, other than that the patches look fine to me, and they are working >>> as expected afaict >>> So unless Leif has any comments, I'll proceed and commit them (with >>> the above changes applied) >> >> If you're happy to do the changes, I'm happy for it to go in. >> > > OK, I will push them later today or tomorrow. > > @Ryan: as a head's up, this series will require Graeme's patch > > 6ff71a134f5b EmbeddedPkg/AcpiLib: add GICC table init macro for ACPI 6.0 > > on the EDK2 side, which I committed this morning. > Thanks for the heads up, knowing that will save me some trouble. > Thanks, > Ard.
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;
.asl files can end up being modified to later versions of spec when FADT is tied to an earlier version. This can cause builds to break unexpectedly on tools upgrades. Convert to aslc to fix the version of ACPI in use for this platform to 6.1 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org> --- Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf | 43 +++++++ Platforms/ARM/VExpress/AcpiTables/Dbg2.asl | 72 ++++++++++++ Platforms/ARM/VExpress/AcpiTables/Dsdt.asl | 144 +++++++++++++++++++++++ Platforms/ARM/VExpress/AcpiTables/Fadt.aslc | 86 ++++++++++++++ Platforms/ARM/VExpress/AcpiTables/FvpPlatform.h | 46 ++++++++ Platforms/ARM/VExpress/AcpiTables/Gtdt.aslc | 92 +++++++++++++++ Platforms/ARM/VExpress/AcpiTables/Madt.aslc | 91 ++++++++++++++ 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