[Linaro-uefi,2/4] Platforms/ARM/FVP: convert to alsc to improve build reliability

Message ID 1467749930-6455-3-git-send-email-graeme.gregory@linaro.org
State Accepted
Commit d1991b6bda6972d69abba87f0881410afcbffd4d
Headers show

Commit Message

Graeme Gregory July 5, 2016, 8:18 p.m.
.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

Comments

Ard Biesheuvel July 6, 2016, 9:55 a.m. | #1
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.
Graeme Gregory July 6, 2016, 10:39 a.m. | #2
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
> >
Ard Biesheuvel July 6, 2016, 11:13 a.m. | #3
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.
Leif Lindholm July 6, 2016, 1:29 p.m. | #4
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
Ard Biesheuvel July 6, 2016, 2:04 p.m. | #5
(+ 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.
Ryan Harkin July 6, 2016, 2:57 p.m. | #6
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.

Patch

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;