From ab49dde065574297dd5a3ea0ce71fa16df53561f Mon Sep 17 00:00:00 2001 From: Yi Li Date: Thu, 26 Sep 2013 11:00:33 -0500 Subject: ACPI:Convert the table and asl from acpi-asl Convert the tables and asl code from acpi-asl[ https://git.linaro.org/gitweb?p=arm/acpi/acpi-asl.git;a=summary] Add Arndale/Foundation-V8/RTSM-V8/RTSM-V7 ACPI source. Signed-off-by: Yi Li Signed-off-by: Steven Kinney --- .../AcpiTables/exynos5250-arndale/AcpiTables.inf | 87 ++++++ .../AcpiTables/exynos5250-arndale/Apic.aslc | 246 ++++++++++++++++ .../AcpiTables/exynos5250-arndale/Bert.aslc | 84 ++++++ .../AcpiTables/exynos5250-arndale/Csrt.aslc | 274 ++++++++++++++++++ .../Drivers/AcpiTables/exynos5250-arndale/Dsdt.asl | 172 +++++++++++ .../AcpiTables/exynos5250-arndale/Ecdt.aslc | 70 +++++ .../AcpiTables/exynos5250-arndale/Einj.aslc | 202 +++++++++++++ .../AcpiTables/exynos5250-arndale/Erst.aslc | 319 +++++++++++++++++++++ .../AcpiTables/exynos5250-arndale/Facp.aslc | 177 ++++++++++++ .../AcpiTables/exynos5250-arndale/Facs.aslc | 88 ++++++ .../AcpiTables/exynos5250-arndale/Gtdt.aslc | 53 ++++ .../AcpiTables/exynos5250-arndale/Hest.aslc | 86 ++++++ .../AcpiTables/exynos5250-arndale/Mcfg.aslc | 66 +++++ .../AcpiTables/exynos5250-arndale/Mpst.aslc | 142 +++++++++ .../AcpiTables/exynos5250-arndale/Msct.aslc | 106 +++++++ .../AcpiTables/exynos5250-arndale/Oem0.aslc | 49 ++++ .../AcpiTables/exynos5250-arndale/Platform.h | 78 +++++ .../AcpiTables/exynos5250-arndale/Pmtt.aslc | 216 ++++++++++++++ .../AcpiTables/exynos5250-arndale/Slit.aslc | 87 ++++++ .../AcpiTables/exynos5250-arndale/Spmi.aslc | 86 ++++++ .../AcpiTables/exynos5250-arndale/Srat.aslc | 106 +++++++ .../AcpiTables/exynos5250-arndale/Ssdt0.asl | 17 ++ .../AcpiTables/exynos5250-arndale/Uefi.aslc | 57 ++++ .../AcpiTables/foundation-v8/AcpiTables.inf | 86 ++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Apic.aslc | 216 ++++++++++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Bert.aslc | 84 ++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Csrt.aslc | 274 ++++++++++++++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Dsdt.asl | 269 +++++++++++++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Ecdt.aslc | 70 +++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Einj.aslc | 202 +++++++++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Erst.aslc | 319 +++++++++++++++++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Facp.aslc | 175 +++++++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Facs.aslc | 86 ++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Gtdt.aslc | 51 ++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Hest.aslc | 84 ++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Mcfg.aslc | 62 ++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Mpst.aslc | 141 +++++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Msct.aslc | 106 +++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Oem0.aslc | 48 ++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Platform.h | 78 +++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Pmtt.aslc | 216 ++++++++++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Slit.aslc | 87 ++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Spmi.aslc | 86 ++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Srat.aslc | 106 +++++++ ArmPkg/Drivers/AcpiTables/foundation-v8/Ssdt0.asl | 17 ++ ArmPkg/Drivers/AcpiTables/foundation-v8/Uefi.aslc | 57 ++++ .../AcpiTables/rtsm_ve-aemv8a/AcpiTables.inf | 70 +++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Apic.aslc | 216 ++++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Bert.aslc | 84 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Dsdt.asl | 255 ++++++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ecdt.aslc | 70 +++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Einj.aslc | 202 +++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Erst.aslc | 319 +++++++++++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facp.aslc | 175 +++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facs.aslc | 86 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Gtdt.aslc | 51 ++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Hest.aslc | 84 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mcfg.aslc | 62 ++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mpst.aslc | 141 +++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Msct.aslc | 106 +++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Oem0.aslc | 48 ++++ .../Drivers/AcpiTables/rtsm_ve-aemv8a/Platform.h | 75 +++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Pmtt.aslc | 216 ++++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Slit.aslc | 87 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Spmi.aslc | 86 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Srat.aslc | 106 +++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ssdt0.asl | 17 ++ ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Uefi.aslc | 57 ++++ .../Drivers/AcpiTables/rtsm_ve-v7/AcpiTables.inf | 70 +++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Apic.aslc | 216 ++++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Bert.aslc | 84 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Dsdt.asl | 255 ++++++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ecdt.aslc | 70 +++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Einj.aslc | 202 +++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Erst.aslc | 319 +++++++++++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facp.aslc | 175 +++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facs.aslc | 86 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Gtdt.aslc | 51 ++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Hest.aslc | 84 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mcfg.aslc | 62 ++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mpst.aslc | 141 +++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Msct.aslc | 106 +++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Oem0.aslc | 48 ++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Platform.h | 75 +++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Pmtt.aslc | 216 ++++++++++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Slit.aslc | 87 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Spmi.aslc | 86 ++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Srat.aslc | 106 +++++++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ssdt0.asl | 17 ++ ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Uefi.aslc | 57 ++++ 90 files changed, 11014 insertions(+) create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/AcpiTables.inf create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Apic.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Bert.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Csrt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Dsdt.asl create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Ecdt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Einj.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Erst.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Facp.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Facs.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Gtdt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Hest.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Mcfg.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Mpst.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Msct.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Oem0.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Platform.h create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Pmtt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Slit.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Spmi.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Srat.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Ssdt0.asl create mode 100644 ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Uefi.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/AcpiTables.inf create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Apic.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Bert.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Csrt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Dsdt.asl create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Ecdt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Einj.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Erst.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Facp.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Facs.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Gtdt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Hest.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Mcfg.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Mpst.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Msct.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Oem0.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Platform.h create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Pmtt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Slit.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Spmi.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Srat.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Ssdt0.asl create mode 100644 ArmPkg/Drivers/AcpiTables/foundation-v8/Uefi.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/AcpiTables.inf create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Apic.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Bert.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Dsdt.asl create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ecdt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Einj.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Erst.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facp.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facs.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Gtdt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Hest.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mcfg.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mpst.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Msct.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Oem0.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Platform.h create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Pmtt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Slit.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Spmi.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Srat.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ssdt0.asl create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Uefi.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/AcpiTables.inf create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Apic.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Bert.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Dsdt.asl create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ecdt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Einj.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Erst.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facp.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facs.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Gtdt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Hest.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mcfg.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mpst.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Msct.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Oem0.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Platform.h create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Pmtt.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Slit.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Spmi.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Srat.aslc create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ssdt0.asl create mode 100644 ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Uefi.aslc diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/AcpiTables.inf b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/AcpiTables.inf new file mode 100644 index 000000000..cced449f4 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/AcpiTables.inf @@ -0,0 +1,87 @@ +## @file +# Component description file for PlatformAcpiTables module. +# +# ACPI table data and ASL sources required to boot the platform. +# +# Copyright (c) 2008 - 2010, Intel Corporation. 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. +# +## + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = PlatformAcpiTables + FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD + MODULE_TYPE = USER_DEFINED + VERSION_STRING = 1.0 + FFS_EXT = SEC + COMPILE_SELECT = .c=acpi_c + +[Sources] + Platform.h + Apic.aslc + Bert.aslc + Csrt.aslc + Dsdt.asl + Ecdt.aslc + Einj.aslc + Erst.aslc + Facp.aslc + Facs.aslc + Gtdt.aslc + Hest.aslc + Mcfg.aslc + Mpst.aslc + Msct.aslc + Oem0.aslc + Pmtt.aslc + Slit.aslc + Spmi.aslc + Srat.aslc + Ssdt0.asl + Uefi.aslc + + ###rsdp/xsdt created by building the acpi table + ###tables need to change format + #asf!.asl + #bgrt.asl + #boot.asl + #cpep.asl + #dbgp.asl + #dmar.asl + #fpdt.asl + #hpet.asl + #ivrs.asl + #mchi.asl + #r3pt.asl + #sbst.asl + #slic.asl + #spcr.asl + #tcpa.asl + #tpm2.asl + #waet.asl + #wadt.asl + #wddt.asl + #wdrt.asl + #wdrt.asl + +[Packages] + MdePkg/MdePkg.dec \ No newline at end of file diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Apic.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Apic.aslc new file mode 100644 index 000000000..5e81c5fda --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Apic.aslc @@ -0,0 +1,246 @@ +/** @file + MADT Table + + This file contains a structure definition for the ACPI 1.0 Multiple APIC + Description Table (MADT). + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +// +// Local APIC address +// +#define EFI_ACPI_LOCAL_APIC_ADDRESS 0x00000000 // TBD + +// +// Multiple APIC Flags are defined in AcpiX.0.h +// +#define EFI_ACPI_5_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_1_0_PCAT_COMPAT) + +#define ACPI_PROCESSOR_LOCAL_GIC 0xb +#define ACPI_GIC_DISTRIBUTOR 0xc + +//These addresses are defined by the MP shared region defined in the UEFI memory map. +#define MP_REGISTER_ADDRESS_GIC0 0x80301000 +#define DISTRIBUTOR_PHYSICAL_ADDRESS 0x02000000 + +#define ACPI_GICC_NUM 0x8 + +// +// Ensure proper structure formats +// +#pragma pack (1) +typedef struct +{ + EFI_ACPI_5_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE stu; + UINT8 str[6]; +}EFI_ACPI_5_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE_EX; + +// +// ACPI 5.0 MADT structure +// +typedef struct { + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header; + EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalGicApic; + EFI_ACPI_5_0_IO_APIC_STRUCTURE IOACPI; + EFI_ACPI_5_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE IntSource; + EFI_ACPI_5_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE Nmi; + EFI_ACPI_5_0_LOCAL_APIC_NMI_STRUCTURE LocalApicNmi; + EFI_ACPI_5_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE LocalAcpiAddr; + EFI_ACPI_5_0_IO_SAPIC_STRUCTURE IOSapic; + EFI_ACPI_5_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE_EX LocalSapic; + EFI_ACPI_5_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE PlatFormIntSource; + EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE LocalX2Apic; + EFI_ACPI_5_0_LOCAL_X2APIC_NMI_STRUCTURE LocalX2ApicNmi; + EFI_ACPI_5_0_GIC_STRUCTURE Gic; + EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE Distributor; +} EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE; + +#pragma pack () + +// +// Multiple APIC Description Table +// +EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = { + { + { + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE), + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + + // + // MADT specific fields + // + EFI_ACPI_LOCAL_APIC_ADDRESS, + EFI_ACPI_5_0_MULTIPLE_APIC_FLAGS + }, + + //Processor Local APIC + { + 0x00, //Type:Processor Local APIC + sizeof (EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_STRUCTURE), //Length + 0x00, //Processor ID + 0x00, //Local Apic ID + 0x00000001, //Flags + }, + //I/O APIC + { + 0x01, //Type:I/O APIC + sizeof (EFI_ACPI_5_0_IO_APIC_STRUCTURE), //Length + 0x01, //I/O Apic ID + 0x00, //Reserved + 0x00000000, //Address + 0x00000000, //Interrupt + }, + //Interrupt Source Override + { + 0x02, //Type:Interrupt Source Override + sizeof (EFI_ACPI_5_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE), //Length + 0x00, //Bus + 0x00, //Source + 0x0000000000, //Interrupt + 0x0000, //Flags + }, + //NMI Source + { + 0x03, //Type:NMI Source + sizeof (EFI_ACPI_5_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE), //Length + 0x000D, //Flags + 0x00000001, //Interrupt + }, + //Local APIC NMI + { + 0x04, //Type:Local APIC NMI + sizeof (EFI_ACPI_5_0_LOCAL_APIC_NMI_STRUCTURE), //Length + 0x00, //Processor ID + 0x0005, //Flags + 0x01, //Interrupt Input LINT + + }, + //Local APIC Address Override + { + 0x05, //Type:Local APIC Address Override + sizeof (EFI_ACPI_5_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE), //Length + 0x00, //Reserved + 0x0000000000000000, //APIC Address + }, + //I/O SAPIC + { + 0x06, //Type:I/O SAPIC + sizeof (EFI_ACPI_5_0_IO_SAPIC_STRUCTURE), //Length + 0x00, //I/O Sapic ID + 0x00, //Reserved + 0x00000000, //Interrupt Base + 0x0000000000000000 , //Address + }, + //Local SAPIC + { + 0x07, //Type:Local SAPIC + sizeof (EFI_ACPI_5_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE_EX), //Length + 0x00, //Processor ID + 0x00, //Local Sapic ID + 0x00, //Local Sapic EID + {0,0,0}, //Reserved + 0x00000001, //Flags + 0x00000000, //Processor UID + {'\\','C','P','U','0','\0'}, + }, + //Platform Interrupt Sources + { + 0x08, //Type:Platform Interrupt Sources + sizeof (EFI_ACPI_5_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE), //Length + 0x0005, //Flags + 0x00, //InterruptType + 0x00, //Processor ID + 0x00, //Processor EID + 0x00, //I/O Sapic Vector + 0x00000001, //Interrupt + 0x00000001, //Flags + }, + //Processor Local x2APIC + { + 0x09, //Type:Processor Local x2APIC + sizeof (EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE), //Length + {0,0}, //Reserved + 0x00000000, //Processor x2Apic ID + 0x00000001, //Flags + 0x00000000, //Processor UID + }, + //Local x2APIC NMI + { + 0x0A, //Type:Local x2APIC NMI + sizeof (EFI_ACPI_5_0_LOCAL_X2APIC_NMI_STRUCTURE), //Length + 0x0005, //Flags + 0x00000000, //Processor UID + 0x00, //Interrupt Input LINT + {0,0,0}, //Reserved + }, + + //Generic Interrupt Controller + { + 0x0B, //Type:Generic Interrupt Controller + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x00, //Local GIC Hardware ID + 0x00, //AcpiProcessorUid + 0x00000001, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x0000000000000000, //PhysicalBaseAddress + }, + //Distributor + { + 0x0C, //Type + sizeof (EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE), //Length + 0, //Reserved1 + 0, //GicId + 0x0000000000000000, //PhysicalBaseAddress + 0, //SystemVectorBase + 0 //Reserved2 + } + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Madt; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Bert.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Bert.aslc new file mode 100644 index 000000000..dac7b5d6a --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Bert.aslc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +// Generic error severity in data entry +#define BOOT_ERROR_SEVERITY_RECOVERABLE 0 +#define BOOT_ERROR_SEVERITY_FATAL 1 +#define BOOT_ERROR_SEVERITY_CORRECTED 2 +#define BOOT_ERROR_SEVERITY_NONE 3 + +#pragma pack(1) + +// ErrorStatus block record definitions for various errors +typedef struct { + UINT32 UeValid:1; + UINT32 CeValid:1; + UINT32 MultipleUeValid:1; + UINT32 MultipleCeValid:1; + UINT32 NumErrorDataEntry:10; + UINT32 Resv1:18; +} BOOT_ERROR_BLOCK_STATUS; + + +typedef struct { + // Error Status block + BOOT_ERROR_BLOCK_STATUS BlockStatus; + UINT32 RawDataOffset; + UINT32 RawDataSize; + UINT32 ErrDataSize; + UINT32 Severity; + // Error Status data... +} EFI_ACPI_5_0_BOOT_ERROR_REGION; + + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 BootErrorRegionLen; + UINT64 BootErrorRegion; +} EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE; + +#pragma pack() + + + +EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE Bert = { + { + EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE), + EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x02, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x9D, //BootErrorRegionLen + 0x43000008 //BootErrorRegion + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Bert; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Csrt.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Csrt.aslc new file mode 100644 index 000000000..44e516fe6 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Csrt.aslc @@ -0,0 +1,274 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_CSRT_VERSION 0x1 + +#define ACPI_RESOURCE_GROUP_NUM 0x2 +#define ACPI_RESOURCE_DESCRIPTOR_NUM0 0x7 +#define ACPI_RESOURCE_DESCRIPTOR_NUM1 0x9 + +/*resource group header*/ +typedef struct +{ + UINT32 Length; + UINT32 VendorID; + UINT32 SubvendorID; + UINT16 DeviceID; + UINT16 SubdeviceID; + UINT16 Revision; + UINT16 Reserved; + UINT32 SharedInfoLength; +}EFI_ACPI_5_0_CRST_RESOURCE_GROUP_HEADER; + +/*resource descriptor header*/ +typedef struct +{ + UINT32 Length; + UINT16 ResourceType; + UINT16 ResourceSubType; + UINT32 UID; +}EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR; + + +/*timer share info*/ +typedef struct +{ + UINT16 usMajorVersion; + UINT16 usMinorVersion; + UINT32 uwMMIOBaseAddressLow; + UINT32 uwMMIOBaseAddressHigh; + UINT32 uwGSIInterrupt; + UINT8 ucInterruptPolarity; + UINT8 ucInterruptMode; + UINT8 ucNumChannels; + UINT8 ucDMAAddressWidth; + UINT16 usDMAAddressWidth; + UINT16 usNumHandshakeSignals; + UINT32 uwMaxBlockSize; +}EFI_ACPI_5_0_CRST_SHARE_INFO; + + + +/*timer resource group header*/ +typedef struct +{ + EFI_ACPI_5_0_CRST_RESOURCE_GROUP_HEADER head; + EFI_ACPI_5_0_CRST_SHARE_INFO ShareInfo; /*share info*/ + EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR ResourceDescriptor[ACPI_RESOURCE_DESCRIPTOR_NUM0]; +}EFI_ACPI_5_0_CRST_RESOURCE_GROUP0; + +/*timer resource group header*/ +typedef struct +{ + EFI_ACPI_5_0_CRST_RESOURCE_GROUP_HEADER head; + EFI_ACPI_5_0_CRST_SHARE_INFO ShareInfo; /*share info*/ + EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR ResourceDescriptor[ACPI_RESOURCE_DESCRIPTOR_NUM1]; +}EFI_ACPI_5_0_CRST_RESOURCE_GROUP1; + + + + +/*CSRT structure*/ +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + EFI_ACPI_5_0_CRST_RESOURCE_GROUP0 ResourceGroup0; + EFI_ACPI_5_0_CRST_RESOURCE_GROUP1 ResourceGroup1; +} EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE; + + + + +EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE Csrt = { + { + EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE), + ACPI_5_0_CSRT_VERSION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID_INTEL}, + EFI_ACPI_OEM_TABLE_ID_INTEL, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + /*EFI_ACPI_5_0_CRST_RESOURCE_GROUP0*/ + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_GROUP0), /*Length*/ + EFI_ACPI_CREATOR_ID, /*VendorID*/ + 0, /*SubvendorID*/ + 0x9C60, /*DeviceID*/ + 0x0, /*SubdeviceID*/ + 0002, /*Revision*/ + 0, /*Reserved*/ + sizeof(EFI_ACPI_5_0_CRST_SHARE_INFO), /*SharedInfoLength*/ + /*share info*/ + { + 0x1, /*Major Version*/ + 0x0, /*Minor Version*/ + 0xB3A00000, /*MMIO Base Address Low*/ + 0x00000000, /*MMIO Base Address High*/ + 0x0000002A, /*GSI Interrupt*/ + 0x2, /*Interrupt Polarity*/ + 0x0, /*Interrupt Mode*/ + 0x6, /*Num Channels*/ + 0x20, /*DMA Address Width*/ + 0x0, /*Base Request Line*/ + 0x10, /*Num Handshake Signals*/ + 0xfff, /*Max Block Size*/ + }, + { + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x1, /*ResourceSubType*/ + 0x20495053 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x30414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x31414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x32414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x33414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x34414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x35414843 /*UID*/ + }, + } + }, + { + /*header*/ + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_GROUP1), /*Length*/ + EFI_ACPI_CREATOR_ID, /*VendorID*/ + 0, /*SubvendorID*/ + 0x9C60, /*DeviceID*/ + 0x0, /*SubdeviceID*/ + 0003, /*Revision*/ + 0, /*Reserved*/ + sizeof(EFI_ACPI_5_0_CRST_SHARE_INFO), /*SharedInfoLength*/ + }, + /*share info*/ + { + 0x1, /*Major Version*/ + 0x0, /*Minor Version*/ + 0x0, /*MMIO Base Address Low*/ + 0x00000000, /*MMIO Base Address High*/ + 0x0000002B, /*GSI Interrupt*/ + 0x2, /*Interrupt Polarity*/ + 0x0, /*Interrupt Mode*/ + 0x8, /*Num Channels*/ + 0x20, /*DMA Address Width*/ + 0x10, /*Base Request Line*/ + 0x10, /*Num Handshake Signals*/ + 0xfff, /*Max Block Size*/ + }, + { + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x1, /*ResourceSubType*/ + 0x20433249 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x30414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x31414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x32414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x33414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x34414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x35414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x36414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x37414843 /*UID*/ + }, + }, + }, + + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Csrt; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Dsdt.asl b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Dsdt.asl new file mode 100644 index 000000000..4f97ba9d8 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Dsdt.asl @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2013, Al Stone + * + * [DSDT] Description of the Arndale board (exynos5250) + * + * This source is released under the terms of the GPLv2. + */ + +DefinitionBlock ( + "dsdt.aml", // output filename + "DSDT", // table signature + 2, // DSDT compliance revision + "LINARO", // OEM ID + "ARNDALE ", // table ID + 0x00000003) // OEM revision +{ + Scope (\_SB) + { + Device (GPB3) { + } + + Device (I2C) { + Name (_HID, "LINA0001") + Name (_UID, 0) + + Method (_CRS, 0x0, Serialized) { + Name (RBUF, ResourceTemplate () + { + Memory32Fixed (ReadWrite, 0x12C60000, 0x00000100) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {0x58} + GpioIo (Exclusive, PullDefault, , , , "\\_SB.GPB3") {0x2A, 0x2B} + }) + Return (RBUF) + } + + Method (DLAY, 0x0, NotSerialized) { + Return (100) + } + + Method (SADD, 0x0, NotSerialized) { + Return (0x66) + } + + Method (FREQ, 0x0, NotSerialized) { + Return (20000) + } + } + + 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) + } + } + + Device (HED) + { + Name (_HID, EisaId ("PNP0C33")) + Name (_UID, 0x00) + } + + Device (SCK0) + { + Name (_HID, "ACPI0004") + Name (_UID, 0x00) + Method (_STA, 0, NotSerialized) + { + Return (0x0F) + } + + Device (PRC0) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x00) + + /* CPU0 will be always present */ + Method (_STA, 0, NotSerialized) + { + Return (0x0F) + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* type, len, reserved, gic_id */ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* uid, flags */ + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parking_version, performance_interrupt */ + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parked_address */ + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* base_address */ + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC1) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x01) + + Name (STA1, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA1) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA1, 0x0F)) + { + Store (0x00, STA1) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* type, len, reserved, gic_id */ + /* 0008 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, /* uid, flags */ + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parking_version, performance_interrupt */ + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parked_address */ + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* base_address */ + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + /* 0008 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + } + } +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Ecdt.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Ecdt.aslc new file mode 100644 index 000000000..d817d5988 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Ecdt.aslc @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +typedef struct +{ + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE table; + UINT8 ucNamepath; +}EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX; + + +EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX Ecdt= { + { + { + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX), + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + /*Command/Status Register Generic Address Structure*/ + { + 0x01, //Space ID:SystemIO + 0x08, //Bit Width + 0x00, //Bit Offset + 0x00, //Encoded Access Width + 0x0000000000000066, //Address + }, + /*Data Register Generic Address Structure*/ + { + 0x01, //Space ID:SystemIO + 0x08, //Bit Width + 0x00, //Bit Offset + 0x00, //Encoded Access Width + 0x0000000000000062, //Address + }, + 0x00000000, //UID + 0x9, //GPE Number + }, + 0x0 //Namepath +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Ecdt; +} + diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Einj.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Einj.aslc new file mode 100644 index 000000000..7392cc2f3 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Einj.aslc @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#pragma pack (1) +typedef struct { + UINT8 Operation; + UINT8 Instruction; + UINT8 Flags; + UINT8 Reserved8; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE Register; + UINT64 Value; + UINT64 Mask; +} EFI_ACPI_WHEA_SERIALIZATION_ACTION; + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 InjectionHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; +} EFI_ACPI_WHEA_ERROR_INJECTION_HEADER; + +typedef struct { + EFI_ACPI_WHEA_ERROR_INJECTION_HEADER header; + EFI_ACPI_WHEA_SERIALIZATION_ACTION InstructionEntry[8]; +} EFI_ACPI_5_0_ERROR_INJECTION_TABLE; + +#pragma pack () + + +EFI_ACPI_5_0_ERROR_INJECTION_TABLE Einj = { + { + { + EFI_ACPI_5_0_ERROR_INJECTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_ERROR_INJECTION_TABLE), + EFI_ACPI_5_0_ERROR_INJECTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00000002, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + sizeof(EFI_ACPI_WHEA_ERROR_INJECTION_HEADER), + EFI_ACPI_RESERVED_DWORD, + 0x08, /*Injection Entry Count*/ + }, + + { + { //Action0 + 0x00, // Action:Begin Operation + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action1 + 0x01, // Action:Get Trigger Table + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action2 + 0x02, // Action:Set Error Type + 0x2, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action3 + 0x03, // Action:Get Error Type + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action4 + 0x04, // Action:End Operation + 0x3, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action5 + 0x05, // Action:Execute Operation + 0x3, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_IO, //Space ID + 0x10, //Bit Width + 0x0, //Bit Offset + 0x2, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action6 + 0x06, // Action:Check Busy Status + 0x1, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action7 + 0x07, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Einj; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Erst.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Erst.aslc new file mode 100644 index 000000000..cbceeb2b8 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Erst.aslc @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACTION_BEGIN_WRITE_OPERATION 0x00 +#define ACTION_BEGIN_READ_OPERATION 0x01 +#define ACTION_BEGIN_CLEAR_OPERATION 0x02 +#define ACTION_END_OPERATION 0x03 +#define ACTION_SET_RECORD_OFFSET 0x04 +#define ACTION_EXECUTE_OPEARTION 0x05 +#define ACTION_CHECK_BUSY_STATUS 0x06 +#define ACTION_GET_COMMAND_STATUS 0x07 +#define ACTION_GET_RECORD_IDENTIFIER 0x08 +#define ACTION_SET_RECORD_IDENTIFIER 0x09 +#define ACTION_GET_RECORD_COUNT 0x0A +#define ACTION_BEGIN_DUMMY_WRITE_OPERATION 0x0B +#define ACTION_GET_NEXT_RECORD_IDENTIFIER 0x0C +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE 0x0D +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH 0x0E +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES 0x0F + + +#pragma pack (1) + +typedef struct { + UINT8 Operation; + UINT8 Instruction; + UINT8 Flags; + UINT8 Reserved8; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE Register; + UINT64 Value; + UINT64 Mask; +} EFI_ACPI_5_0_SERIALIZATION_ACTION; + + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 SerializationHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; + EFI_ACPI_5_0_SERIALIZATION_ACTION InstructionEntry[16]; +} EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE; + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 SerializationHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; +} EFI_ACPI_5_0_SERIALIZATION_ACTION_HEADER; +#pragma pack () + + + +EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE Erst = { + { + EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE), + EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00000002, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + sizeof(EFI_ACPI_5_0_SERIALIZATION_ACTION_HEADER), + EFI_ACPI_RESERVED_DWORD, + 0x10, + { + { //Action0 + 0x00, // Action:Begin Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000100, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action1 + 0x01, // Action:Begin Read Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000108, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action2 + 0x02, // Action:Begin Clear Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000110, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action3 + 0x03, // Action:Begin Clear Operation + 0x4, // Instruction:Noop + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000118, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action4 + 0x04, // Action:Begin Clear Operation + 0x2, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000120, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action5 + 0x05, // Action:Execute Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_5_0_SYSTEM_MEMORY, //Space ID + 0x8, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x43000128, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action6 + 0x06, // Action:Check Busy Status + 0x1, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000130, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action7 + 0x07, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000138, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action8 + 0x08, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000140, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action9 + 0x09, // Action:Set Record Identifier + 0x2, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000148, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action10 + 0x0A, // Action:Get Record Count + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000150, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action11 + 0x0B, // Action:Begin Dummy Write + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000158, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action12 + 0x0C, // Action:Unused/Unknown Action + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000160, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action13 + 0x0D, // Action:Get Error Address Range + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000168, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action14 + 0x0E, // Action:Get Error Address Length + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000170, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action15 + 0x0F, // Action:Get Error Attributes + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x43000178, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + } + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Erst; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Facp.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Facp.aslc new file mode 100644 index 000000000..686a3d293 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Facp.aslc @@ -0,0 +1,177 @@ +/** @file + FACP Table + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include "Platform.h" + +EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE Facp = { + { + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE), + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION, + 0, // to make sum of entire table == 0 + {EFI_ACPI_OEM_ID}, // OEMID is a 6 bytes long field + EFI_ACPI_OEM_TABLE_ID, // OEM table identification(8 bytes long) + 0x00, // OEM revision number + EFI_ACPI_CREATOR_ID, // ASL compiler vendor ID + EFI_ACPI_CREATOR_REVISION // ASL compiler revision number + }, + 0, // Physical addesss of FACS + 0x00000010, // Physical address of DSDT + 0x0, // System Interrupt Model + 0x4, // PM Profile + SCI_INT_VECTOR, // System vector of SCI interrupt + SMI_CMD_IO_PORT, // Port address of SMI command port + ACPI_ENABLE, // value to write to port smi_cmd to enable ACPI + ACPI_DISABLE, // value to write to port smi_cmd to disable ACPI + S4BIOS_REQ, // Value to write to SMI CMD port to enter the S4BIOS state + 0, // PState control + PM1a_EVT_BLK, // Port address of Power Mgt 1a Event Reg Blk + PM1b_EVT_BLK, // Port address of Power Mgt 1b Event Reg Blk + PM1a_CNT_BLK, // Port address of Power Mgt 1a Ctrl Reg Blk + PM1b_CNT_BLK, // Port address of Power Mgt 1b Ctrl Reg Blk + PM2_CNT_BLK, // Port address of Power Mgt 2 Ctrl Reg Blk + PM_TMR_BLK, // Port address of Power Mgt Timer Ctrl Reg Blk + GPE0_BLK, // Port addr of General Purpose Event 0 Reg Blk + GPE1_BLK, // Port addr of General Purpose Event 1 Reg Blk + PM1_EVT_LEN, // Byte Length of ports at pm1X_evt_blk + PM1_CNT_LEN, // Byte Length of ports at pm1X_cnt_blk + PM2_CNT_LEN, // Byte Length of ports at pm2_cnt_blk + PM_TM_LEN, // Byte Length of ports at pm_tm_blk + GPE0_BLK_LEN, // Byte Length of ports at gpe0_blk + GPE1_BLK_LEN, // Byte Length of ports at gpe1_blk + GPE1_BASE, // offset in gpe model where gpe1 events start + 0, // _CST support + P_LVL2_LAT, // worst case HW latency to enter/exit C2 state + P_LVL3_LAT, // worst case HW latency to enter/exit C3 state + FLUSH_SIZE, // Size of area read to flush caches + FLUSH_STRIDE, // Stride used in flushing caches + DUTY_OFFSET, // bit location of duty cycle field in p_cnt reg + DUTY_WIDTH, // bit width of duty cycle field in p_cnt reg + DAY_ALRM, // index to day-of-month alarm in RTC CMOS RAM + MON_ALRM, // index to month-of-year alarm in RTC CMOS RAM + CENTURY, // index to century in RTC CMOS RAM + 0x0000, // Boot architecture flag + 0x00, // reserved + FLAG, + + { + 0x01, //Space ID + 0x8, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000001,//Address + }, + + 0x0, //Value to cause reset + {0,0,0}, //Reserved + 0x0000000000000000,//FACS Address + 0x0000000000000010,//DSDT Address + + + /*PM1A Event Block*/ + 0x1, //Space ID:SystemIO + 0x20, //Bit Width + 0x0, //Bit Offset + 0x2, //Encoded Access Width + 0x0000000000000001, //Address + + /*PM1B Event Block*/ + 0x1, //Space ID:SystemIO + 0x0, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*PM1A Control Block*/ + 0x1, //Space ID:SystemIO + 0x10, //Bit Width + 0x0, //Bit Offset + 0x02, //Encoded Access Width + 0000000000000001, //Address + + /*PM1B Control Block*/ + 0x1, //Space ID:SystemIO + 0x00, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*PM2 Control Block*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000001, //Address + + /*PM Timer Block*/ + 0x1, //Space ID:SystemIO + 0x20, //Bit Width + 0x0, //Bit Offset + 0x3, //Encoded Access Width + 0x0000000000000001, //Address + + /*GPE0 Block*/ + 0x1, //Space ID:SystemIO + 0x80, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000001, //Address + + /*GPE1 Block*/ + 0x1, //Space ID:SystemIO + 0x00, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*Sleep Control Register*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000000, //Address + + /*Sleep Status Register*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000000, //Address + +}; + + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Facp; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Facs.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Facs.aslc new file mode 100644 index 000000000..14a10d469 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Facs.aslc @@ -0,0 +1,88 @@ +/** @file + FACS Table + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include + +EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE Facs = { + EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE, + sizeof (EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE), + + // + // Hardware Signature will be updated at runtime + // + 0x00000000, //HardwareSignature + 0x00, //FirmwareWakingVector + 0x00, //GlobalLock + 0x00, //Flags + 0x0000000000000000, //XFirmwareWakingVector + 0x02, //Version + { + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE + }, + 0x00, + { + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE + } +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Facs; +} + diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Gtdt.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Gtdt.aslc new file mode 100644 index 000000000..dbde66f78 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Gtdt.aslc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE Gtdt = +{ + { + EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE), + EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x0000000000000000, //Timer Address + 0x00000001, //Flags + 0x00000000, //Secure PL1 Interrupt + 0x00000000, //SPL1 Flags + 0x00000000, //Non-Secure PL1 Interrupt + 0x00000000, //NSPL1 Flags + 0x00000000, //Virtual Timer Interrupt + 0x00000000, //VT Flags + 0x00000000, //Non-Secure PL2 Interrupt + 0x00000000, //NSPL2 Flags +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Gtdt; +} + + diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Hest.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Hest.aslc new file mode 100644 index 000000000..4c4868dc8 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Hest.aslc @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#pragma pack(1) + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 ErrorEntryCount; + EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE GenHardWareError; + +} EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE; + +#pragma pack() + +EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE Hest = { + { + EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE), + EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x02, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00000001, //Error Source Count +{ + 0x0009, //Subtable Type:Generic Hardware Error Source + 0x0002, //Source Id + 0xFFFF, //Related Source Id + 0x00, //Reserved + 0x01, //Enabled + 0x00000001, //Records To Preallocate + 0x00000001, //Max Sections Per Record + 0x00001000, //Max Raw Data Length + + /* Error Status Address : [Generic Address Structure]*/ + { + 0x00, //Space ID:SystemMemory + 0x40, //Bit Width + 0x00, //Bit Offset + 0x04, //Encoded Access Width + 0x43000000, //Address + }, + /*Notify : [Hardware Error Notification Structure]*/ + { + 0x03, //Notify Type:SCI + 0x1c, //Notify Length + 0x0000, //Configuration Write Enable + 0x00000000, //PollInterval + 0x00000000, //Vector + 0x00000000, //Polling Threshold Value + 0x00000000, //Polling Threshold Window + 0x00000000, //Error Threshold Value + 0x00000000, //Error Threshold Window + }, + 0x00001000, //Error Status Block Length +}, + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Hest; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Mcfg.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Mcfg.aslc new file mode 100644 index 000000000..d7e855fa7 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Mcfg.aslc @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_MCFG_VERSION 0x1 + +#pragma pack(1) +typedef struct +{ + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT64 Reserved1; + UINT64 ullBaseAddress; + UINT16 usSegGroupNum; + UINT8 ucStartBusNum; + UINT8 ucEndBusNum; + UINT32 Reserved2; +}EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE; +#pragma pack() + +EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE Mcfg= +{ + { + EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE), + ACPI_5_0_MCFG_VERSION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x0000000000000000, //Reserved + 0x0000000000000000, //Base Address + 0x0000, //Segment Group Number + 0x00, //Start Bus Number + 0x00, //End Bus Number + 0x00000000, //Reserved +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Mcfg; +} + + + + diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Mpst.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Mpst.aslc new file mode 100644 index 000000000..7a46496f7 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Mpst.aslc @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define MAX_POWER_STATES_NUM 0x2 +#define MAX_PHYSICAL_COMPONENTS_NUM 0x3 +#define MAX_MEMORY_POWER_NODE_COUNT 0x2 +#define MAX_CHARACTERISTICS_COUNT 0x2 + +#pragma pack (1) +typedef struct +{ + EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE structre; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE state[MAX_POWER_STATES_NUM]; + UINT16 components[MAX_PHYSICAL_COMPONENTS_NUM]; +}EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_EX; + +typedef struct +{ + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE structre; + UINT64 ulResverd; +}EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_EX; + +typedef struct +{ + EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE table; + EFI_ACPI_5_0_MPST_MEMORY_POWER_NODE_TABLE node; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_EX powerNode[MAX_MEMORY_POWER_NODE_COUNT]; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE Characteristics; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_EX powerChar[MAX_CHARACTERISTICS_COUNT]; +}EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE_EX; +#pragma pack () + + +EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE_EX Mpst ={ + { + { + EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_SIGNATURE, + 0x000000B6, + EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00, //Channel ID + {0,0,0}, //Reserved + + }, + 0x0002, //Power Node Count + {0,0}, //Reserved + { + { + 0x00, //Flags + 0x00, //Reserved + 0x0000, //Node ID + 0x0000000000, //Length + 0x00000000000000000000, //ange Address + 0x00000000000000000000, //Range Length + 0x00000002, // Num Power + 0x00000003, // Num Physical Components + { + { + 0x00, //Power State + 0x00, //InfoIndex + }, + { + 0x00, //Power State + 0x00, //InfoIndex + }, + }, + 0x0000, //Component Id + 0x0001, //Component Id + 0x0002, //Component Id + }, + { + 0x00, //Flags + 0x00, //Reserved + 0x0000, //Node ID + 0x0000000000, //Length + 0x00000000000000000000, //ange Address + 0x00000000000000000000, //Range Length + 0x00000001, // Num Power + 0x00000001, // Num Physical Components + { + 0x00, //Power State + 0x00, //InfoIndex + }, + 0x0000, //Component Id + + }, + }, + + 0x0002, //Characteristics Count + {0,0}, //Reserved + { + { + 0x01, //Structure ID + 0x00, //Flags + 0x0000, //Reserved + 0x00000000, //Average Power + 0x00000000, //Power Saving + 0x0000000000000000, //Exit Latency + 0x0000000000000000, //Reserved + }, + { + 0x01, //Structure ID + 0x00, //Flags + 0x0000, //Reserved + 0x00000000, //Average Power + 0x00000000, //Power Saving + 0x0000000000000000, //Exit Latency + 0x0000000000000000, //Reserved + }, + }, +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Mpst; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Msct.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Msct.aslc new file mode 100644 index 000000000..80c9d59b4 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Msct.aslc @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION 0x1 +// +// MSCT Table definition +// +#pragma pack (1) +typedef struct { + UINT8 Revision; + UINT8 Length; + UINT32 ProxDomRangeLow; + UINT32 ProxDomRangeHigh; + UINT32 MaxProcessorCapacity; + UINT64 MaxMemoryCapacity; +} EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE; + +typedef struct { + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER Header; + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE ProxDomInfoStructure[4]; +} EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE; + +#pragma pack () + +EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE Msct = { + { + { + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE, + sizeof (EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE), + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + // + // Beginning of MSCT specific fields + // + 0x00000038, // OffsetProxDomInfo + 4 - 1, // MaxNumProxDom + 0x00000000, // MaxNumClockDom + 0x00000FFFFFFFFFFF, // MaxPhysicalAddress + }, + { + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000003, // ProxDomRangeHigh + 0x00000010, // MaxProcessorCapacity + 0x0000004000000000 // MaxMemoryCapacity + }, + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Msct; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Oem0.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Oem0.aslc new file mode 100644 index 000000000..c69bb0220 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Oem0.aslc @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_5_0_OEM0_SIGNATURE SIGNATURE_32('O', 'E', 'M', '0') +#define ACPI_5_0_OEM0_REVISION 0x1 + +typedef struct{ + EFI_ACPI_DESCRIPTION_HEADER Header; +}EFI_ACPI_5_0_OEM0_TABLE; + +EFI_ACPI_5_0_OEM0_TABLE Oem0= +{ + { + EFI_ACPI_5_0_OEM0_SIGNATURE, + sizeof (EFI_ACPI_5_0_OEM0_TABLE), + ACPI_5_0_OEM0_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x0000000A, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Oem0; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Platform.h b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Platform.h new file mode 100644 index 000000000..ae35f99d8 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Platform.h @@ -0,0 +1,78 @@ +/** @file + Platform specific defines for constructing ACPI tables + + Copyright (c) 2008, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#ifndef _Platform_h_INCLUDED_ +#define _Platform_h_INCLUDED_ + +#include +#include + +// +// ACPI table information used to initialize tables. +// +#define EFI_ACPI_OEM_ID 'L','I','N','A','R','O' // OEMID 6 bytes long +#define EFI_ACPI_OEM_TABLE_ID SIGNATURE_64('A','R','N','D','A','L','E',' ' ) // OEM table id 8 bytes long +#define EFI_ACPI_OEM_REVISION 0x00000001 +#define EFI_ACPI_CREATOR_ID SIGNATURE_32('I','N','T','L') +#define EFI_ACPI_CREATOR_REVISION 0x20130517 + +#define EFI_ACPI_OEM_ID_INTEL 'I','N','T','E','L',' ' // OEMID 6 bytes long +#define EFI_ACPI_OEM_TABLE_ID_INTEL SIGNATURE_64('T','E','M','P','L','A','T','E' ) // OEM table id 8 bytes long + + +#define INT_MODEL 0x01 +#define SCI_INT_VECTOR 0x0 +#define SMI_CMD_IO_PORT 0x0 +#define ACPI_ENABLE 0x0 +#define ACPI_DISABLE 0x0 +#define S4BIOS_REQ 0x00 +#define PM1a_EVT_BLK 0x00000001 +#define PM1b_EVT_BLK 0x00000000 +#define PM1a_CNT_BLK 0x00000001 +#define PM1b_CNT_BLK 0x00000000 +#define PM2_CNT_BLK 0x00000001 +#define PM_TMR_BLK 0x00000001 +#define GPE0_BLK 0x00000001 +#define GPE1_BLK 0x00000000 +#define PM1_EVT_LEN 0x04 +#define PM1_CNT_LEN 0x02 +#define PM2_CNT_LEN 0x01 +#define PM_TM_LEN 0x04 +#define GPE0_BLK_LEN 0x08 +#define GPE1_BLK_LEN 0x00 +#define GPE1_BASE 0x00 +#define RESERVED 0x00 +#define P_LVL2_LAT 0x0000 +#define P_LVL3_LAT 0x0000 +#define FLUSH_SIZE 0x0000 +#define FLUSH_STRIDE 0x0000 +#define DUTY_OFFSET 0x00 +#define DUTY_WIDTH 0x00 +#define DAY_ALRM 0x00 +#define MON_ALRM 0x00 +#define CENTURY 0x00 +#define FLAG 0x00321033 +#endif diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Pmtt.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Pmtt.aslc new file mode 100644 index 000000000..f0b4f6cfe --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Pmtt.aslc @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_SOCKET 00 //socket +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_MEMCTRL 01 //Memory Controller +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_DIMM 02 //DIMM +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_RESVERVED 03 //RESVERVED + +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG_TLAD 01 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG_PHYELEMENT 02 // BIT1 - set to 1 since socket is a physical element of the topology +//Bit 2 and 3 - If 00, indicates that all components aggregated by this device implements volatile memory +// If 01, indicates that components aggregated by this device implements both volatile and non-volatile memory +// If 10, indicates that all components aggregated by this device implements non-volatile memory +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__VOLATILE 00 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__MIXED 4 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__NONVOLATILE 0x08 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__RSVD 0x0C + +#define MAXNUMBER_OF_PROXIMITY_DOMAINS 0x3 + +#define MAX_SOCKET 0x2 +#define NUM_MEM_CONTROLLERS 0x2 +#define MAX_DIMM 0x02 + +#pragma pack (1) +// PMMT Table fields +typedef struct { + UINT32 ReadLatency; + UINT32 WriteLatency; + UINT32 ReadBW; + UINT32 WriteBW; + UINT16 OptimalAccUnit; + UINT16 OptimalAccAlignment; +} EFI_ACPI_MEMCTRL_CHAR_TABLE; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + UINT16 PhyCompIdentifier; + UINT16 Rsvd2; + UINT32 Size; + UINT32 SmBiosHandle; +} EFI_ACPI_MEMORY_AGGREGATOR_DIMM_STRUC; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + EFI_ACPI_MEMCTRL_CHAR_TABLE MemCtrlCharTable; + UINT16 Rsvd2; + UINT16 NumProxDomains; + UINT32 ProxDomain[MAXNUMBER_OF_PROXIMITY_DOMAINS]; + EFI_ACPI_MEMORY_AGGREGATOR_DIMM_STRUC PhyCompIdentStruc[MAX_DIMM]; +} EFI_ACPI_MEMORY_AGGREGATOR_MEMCTRL_STRUC; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + UINT16 SckIdent; + UINT16 Rsvd2; + EFI_ACPI_MEMORY_AGGREGATOR_MEMCTRL_STRUC MemCtrlStruc[NUM_MEM_CONTROLLERS]; +} EFI_ACPI_MEMORY_AGGREGATOR_SOCKET_STRUC; + +typedef struct { + EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE Header; + EFI_ACPI_MEMORY_AGGREGATOR_SOCKET_STRUC TopLevelmemAggrDevStruc[MAX_SOCKET]; +} EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE; +#pragma pack () + + +EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE Pmtt = { + { + { + EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE), // Length + EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE_REVISION, // Revision + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + EFI_ACPI_RESERVED_DWORD, // Reserved[0] + }, + { + /*Socket 0*/ + { + 0x00, //Subtable Type:Socket + 0x00, //Reserved + 0x0080, //Length + 0x0001, //Flags + 0x0000, //Reserved + 0x0000, //Socket ID + 0x0000, //Reserved + { + /*Memory Controller 1*/ + + { + 0x01, //Subtable Type:Memory Controller + 0x00, //Reserved + 0x0054, //Length + 0x0005, //Flags + 0x0000, //Reserved + { + 0x00000000, //Read Latency + 0x00000000, //Write Latency + 0x00000000, //Read Bandwidth + 0x00000000, //Write Bandwidth + 0x0000, //Access Width + 0x0000, //Alignment + }, + 0x0000, //Reserved + MAXNUMBER_OF_PROXIMITY_DOMAINS, //Domain Count + 0x00000000, //Proximity Domain + 0x00000000, //Proximity Domain + 0x00000000, //Proximity Domain + { + /*DIMM 0*/ + { + 0x02, //Subtable Type:Physical Component (DIMM) + 0x00, //Reserved + 0x0014, //Length + 0x0002, //Flags + 0x0000, //Reserved + 0x0000, //Component ID + 0x0000, //Reserved + 0x00000000, //Memory Size + 0x00000000, //Bios Handle + }, + /*DIMM 1*/ + { + 0x02, //Subtable Type:Physical Component (DIMM) + 0x00, //Reserved + 0x0014, //Length + 0x0002, //Flags + 0x0000, //Reserved + 0x0000, //Component ID + 0x0000, //Reserved + 0x00000000, //Memory Size + 0x00000000, //Bios Handle + }, + }, + }, + + /*Memory Controller 2*/ + { + 0x01, //Subtable Type:Memory Controller + 0x00, //Reserved + 0x0020, //Length + 0x0001, //Flags + 0x0000, //Reserved + { + 0x00000000, //Read Latency + 0x00000000, //Write Latency + 0x00000000, //Read Bandwidth + 0x00000000, //Write Bandwidth + 0x0000, //Access Width + 0x0000 //Alignment + }, + 0x0000, //Reserved + 0x0000, //Domain Count + {0}, + {0}, + + }, + }, + }, + + + /*Socket 1*/ + { + 0x00, //Subtable Type:Socket + 0x00, //Reserved + 0x000c, //Length + 0x0001, //Flags + 0x0000, //Reserved + 0x0000, //Socket ID + 0x0000 //Reserved + }, + }, + + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Pmtt; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Slit.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Slit.aslc new file mode 100644 index 000000000..05d96e029 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Slit.aslc @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT 0x0000000000000014 + +#pragma pack(1) +typedef struct { + UINT8 Entry[EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT]; +} EFI_ACPI_5_0_NUMBER_OF_SYSTEM_LOCALITIES_STRUCTURE; + +typedef struct { + EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER Header; + EFI_ACPI_5_0_NUMBER_OF_SYSTEM_LOCALITIES_STRUCTURE NumSlit[EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT]; + +} EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE; +#pragma pack() + +// +// System Locality Information Table +// Please modify all values in Slit.h only. +// +EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE Slit = { + { + { + EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE), + EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION, + }, + // + // Beginning of SLIT specific fields + // + EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT, + }, + { + {0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27}, //Locality 0 + {0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,}, //Locality 1 + {0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,}, //Locality 2 + {0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,}, //Locality 3 + {0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23,}, //Locality 4 + {0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,}, //Locality 5 + {0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21,}, //Locality 6 + {0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,}, //Locality 7 + {0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,}, //Locality 8 + {0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,}, //Locality 9 + {0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,}, //Locality 10 + {0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,}, //Locality 11 + {0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,}, //Locality 12 + {0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,}, //Locality 13 + {0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19,}, //Locality 14 + {0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18,}, //Locality 15 + {0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17,}, //Locality 16 + {0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16,}, //Locality 17 + {0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10,}, //Locality 18 + {0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A,}, //Locality 19 + }, +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Slit; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Spmi.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Spmi.aslc new file mode 100644 index 000000000..77836a471 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Spmi.aslc @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_SPMI_REVISION 0x4 + +#pragma pack(1) +typedef struct +{ + + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT8 ucInterfaceType; + UINT8 Reserved; + UINT16 usIPMISpecVersion; + UINT8 ucInterruptType; + UINT8 ucGPENumber; + UINT8 Reserved2; + UINT8 ucPCIDeviceFlag; + UINT32 uwInterrupt; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE IPMIRegister; + UINT8 ucPCISegment; + UINT8 ucPCIBus; + UINT8 ucPCIDevice; + UINT8 ucPCIFunction; + UINT8 Reserved3; +}EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE; +#pragma pack() + +EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE Spmi = +{ + { + EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE), + ACPI_5_0_SPMI_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00, //Interface Type + 0x00, //Reserved + 0x0000, //IPMI Spec Version + 0x00, //Interrupt Type + 0x00, //GPE Number + 0x00, //Reserved + 0x00, //PCI Device Flag + 0x00000000, //Interrupt + { + 0x00, //Space ID:SystemMemory + 0x08, //Bit Width + 0x00, //Bit Offset + 0x01, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x00, //PCI Segment + 0x00, //PCI Bus + 0x00, //PCI Device + 0x00, //PCI Function + 0x00, //Reserved +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Spmi; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Srat.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Srat.aslc new file mode 100644 index 000000000..d5c433ffc --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Srat.aslc @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + + +// +// Define the number of each table type. +// This is where the table layout is modified. +// +#define EFI_ACPI_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE_COUNT 4 +#define EFI_ACPI_MEMORY_AFFINITY_STRUCTURE_COUNT 4 + + +#pragma pack(1) +typedef struct { + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER Header; + EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE Apic; + EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE Memory; + EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE x2APIC; +} EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE; + +#pragma pack() + + +// +// Static Resource Affinity Table definition +// +EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE Srat = { + { + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE), + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION, + /*Reserved*/ + 0x00000001, // Reserved to be 1 for backward compatibility + EFI_ACPI_RESERVED_QWORD + }, + /**/ + { + 0x00, // Subtable Type:Processor Local APIC/SAPIC Affinity + sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE), //Length + 0x00, //Proximity Domain Low(8) + 0x00, //Apic ID + 0x00000001, //Flags + 0x00, //Local Sapic EID + {0,0,0}, //Proximity Domain High(24) + 0x00000000, //ClockDomain + }, + // + // + // Memory Affinity + // + { + 0x01, // Subtable Type:Memory Affinity + sizeof (EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE), // Length + 0x00000000, // Proximity Domain + EFI_ACPI_RESERVED_WORD, // Reserved + 0x00000000, // Address Base Low + 0x00000000, // Address Base High + 0x0009FC00, // Length Low + 0x00000000, // Length High + EFI_ACPI_RESERVED_DWORD, // Reserved + 0x00000001, // Flags disabled, until enabled by Platform driver + EFI_ACPI_RESERVED_QWORD , // Reserved + }, + + /*Processor Local x2APIC Affinity*/ + { + 0x02, // Subtable Type:Processor Local x2APIC Affinity + sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE), + {0,0}, //Reserved1 + 0x00000000, //Proximity Domain + 0x00000000, //Apic ID + 0x00000001, //Flags + 0x00000000, //Clock Domain + {0,0,0,0}, //Reserved2 + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Srat; +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Ssdt0.asl b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Ssdt0.asl new file mode 100644 index 000000000..69dce10b4 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Ssdt0.asl @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2013, Al Stone + * + * [SSDT] Description of the Arndale board (exynos5250) GPIO structure + * + * This source is released under the terms of the GPLv2. + */ + +DefinitionBlock ( + "ssdt0.aml", // output filename + "SSDT", // table signature + 2, // SSDT compliance revision + "LINARO", // OEM ID + "ARNDALE ", // table ID + 0x00000001) // OEM revision +{ +} diff --git a/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Uefi.aslc b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Uefi.aslc new file mode 100644 index 000000000..c3bbce3ed --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/exynos5250-arndale/Uefi.aslc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + + +#define ACPI_5_0_UEFI_REVISION 0x1 + +#pragma pack(1) + +typedef struct +{ + EFI_ACPI_DESCRIPTION_HEADER Header; + EFI_GUID guid; + UINT16 usDataOffset; +}EFI_ACPI_5_0_UEFI_TABLE; +#pragma pack() + +EFI_ACPI_5_0_UEFI_TABLE Uefi= +{ + { + EFI_ACPI_5_0_UEFI_ACPI_DATA_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_UEFI_TABLE), + ACPI_5_0_UEFI_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + //03020100-0504-0706-0809-0A0B0C0D0E0F + { 0x03020100, 0x0504, 0x0706, { 0x08, 0x09, 0x0A, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }, + 0x0036 //Data Offset +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Uefi; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/AcpiTables.inf b/ArmPkg/Drivers/AcpiTables/foundation-v8/AcpiTables.inf new file mode 100644 index 000000000..2157280bf --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/AcpiTables.inf @@ -0,0 +1,86 @@ +## @file +# Component description file for PlatformAcpiTables module. +# +# ACPI table data and ASL sources required to boot the platform. +# +# Copyright (c) 2008 - 2010, Intel Corporation. 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. +# +## + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = PlatformAcpiTables + FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD + MODULE_TYPE = USER_DEFINED + VERSION_STRING = 1.0 + FFS_EXT = SEC + COMPILE_SELECT = .c=acpi_c + +[Sources] + Platform.h + Apic.aslc + Bert.aslc + Csrt.aslc + Dsdt.asl + Ecdt.aslc + Einj.aslc + Erst.aslc + Facp.aslc + Facs.aslc + Gtdt.aslc + Hest.aslc + Mcfg.aslc + Mpst.aslc + Msct.aslc + Oem0.aslc + Pmtt.aslc + Slit.aslc + Spmi.aslc + Srat.aslc + Ssdt0.asl + Uefi.aslc + + ###rsdp/xsdt created by building the acpi table + ###tables need to change format + #asf!.asl + #bgrt.asl + #boot.asl + #cpep.asl + #dbgp.asl + #dmar.asl + #fpdt.asl + #hpet.asl + #ivrs.asl + #mchi.asl + #r3pt.asl + #sbst.asl + #slic.asl + #spcr.asl + #tcpa.asl + #tpm2.asl + #waet.asl + #wadt.asl + #wddt.asl + #wdrt.asl + #wdrt.asl + +[Packages] + MdePkg/MdePkg.dec diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Apic.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Apic.aslc new file mode 100644 index 000000000..e18c1a555 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Apic.aslc @@ -0,0 +1,216 @@ +/** @file + MADT Table + + This file contains a structure definition for the ACPI 1.0 Multiple APIC + Description Table (MADT). + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ +#include +#include + +// +// Local APIC address +// +#define EFI_ACPI_LOCAL_APIC_ADDRESS 0x2C002000 // TBD + + +#define ACPI_PROCESSOR_LOCAL_GIC 0xb +#define ACPI_GIC_DISTRIBUTOR 0xc + +//These addresses are defined by the MP shared region defined in the UEFI memory map. +#define MP_REGISTER_ADDRESS_GIC0 0x80301000 +#define DISTRIBUTOR_PHYSICAL_ADDRESS 0x02000000 + +#define ACPI_GICC_NUM 0x8 + +// +// Ensure proper structure formats +// +#pragma pack (1) +// +// ACPI 5.0 MADT structure +// +typedef struct { + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header; + EFI_ACPI_5_0_GIC_STRUCTURE Gic[ACPI_GICC_NUM]; + EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE Distributor; + +} EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE; + +#pragma pack () + +// +// Multiple APIC Description Table +// +EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = { + { + { + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE), + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + + // + // MADT specific fields + // + EFI_ACPI_LOCAL_APIC_ADDRESS, + 0x00000000 + }, + { + //LocalGic0 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x00, //GicId + 0x00, //AcpiProcessorUid + 0x00000001, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic1 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x01, //GicId + 0x01, //AcpiProcessorUid + EFI_ACPI_5_0_GIC_ENABLED, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000 //PhysicalBaseAddress + }, + //LocalGic2 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type: + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x02, //GicId + 0x02, //AcpiProcessorUid + EFI_ACPI_5_0_GIC_ENABLED, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic3 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x03, //GicId + 0x03, //AcpiProcessorUid + EFI_ACPI_5_0_GIC_ENABLED, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic4 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x04, //GicId + 0x04, //AcpiProcessorUid + 0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic5 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x05, //GicId + 0x05, //AcpiProcessorUid + 0x0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic6 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x06, //GicId + 0x06, //AcpiProcessorUid + 0x0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000 , //PhysicalBaseAddress + }, + //LocalGic7 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x07, //GicId + 0x07, //AcpiProcessorUid + 0x0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + }, + //Distributor + { + ACPI_GIC_DISTRIBUTOR, //Type + sizeof (EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE), //Length + 0, //Reserved1 + 0, //GicId + 0x000000002C001000, //PhysicalBaseAddress + 0, //SystemVectorBase + 0 //Reserved2 + } + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Madt; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Bert.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Bert.aslc new file mode 100644 index 000000000..0fe2bc43a --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Bert.aslc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +// Generic error severity in data entry +#define BOOT_ERROR_SEVERITY_RECOVERABLE 0 +#define BOOT_ERROR_SEVERITY_FATAL 1 +#define BOOT_ERROR_SEVERITY_CORRECTED 2 +#define BOOT_ERROR_SEVERITY_NONE 3 + +#pragma pack(1) + +// ErrorStatus block record definitions for various errors +typedef struct { + UINT32 UeValid:1; + UINT32 CeValid:1; + UINT32 MultipleUeValid:1; + UINT32 MultipleCeValid:1; + UINT32 NumErrorDataEntry:10; + UINT32 Resv1:18; +} BOOT_ERROR_BLOCK_STATUS; + + +typedef struct { + // Error Status block + BOOT_ERROR_BLOCK_STATUS BlockStatus; + UINT32 RawDataOffset; + UINT32 RawDataSize; + UINT32 ErrDataSize; + UINT32 Severity; + // Error Status data... +} EFI_ACPI_5_0_BOOT_ERROR_REGION; + + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 BootErrorRegionLen; + UINT64 BootErrorRegion; +} EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE; + +#pragma pack() + + + +EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE Bert = { + { + EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE), + EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x02, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x9D, //BootErrorRegionLen + 0xFFFF0008 //BootErrorRegion + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Bert; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Csrt.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Csrt.aslc new file mode 100644 index 000000000..44e516fe6 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Csrt.aslc @@ -0,0 +1,274 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_CSRT_VERSION 0x1 + +#define ACPI_RESOURCE_GROUP_NUM 0x2 +#define ACPI_RESOURCE_DESCRIPTOR_NUM0 0x7 +#define ACPI_RESOURCE_DESCRIPTOR_NUM1 0x9 + +/*resource group header*/ +typedef struct +{ + UINT32 Length; + UINT32 VendorID; + UINT32 SubvendorID; + UINT16 DeviceID; + UINT16 SubdeviceID; + UINT16 Revision; + UINT16 Reserved; + UINT32 SharedInfoLength; +}EFI_ACPI_5_0_CRST_RESOURCE_GROUP_HEADER; + +/*resource descriptor header*/ +typedef struct +{ + UINT32 Length; + UINT16 ResourceType; + UINT16 ResourceSubType; + UINT32 UID; +}EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR; + + +/*timer share info*/ +typedef struct +{ + UINT16 usMajorVersion; + UINT16 usMinorVersion; + UINT32 uwMMIOBaseAddressLow; + UINT32 uwMMIOBaseAddressHigh; + UINT32 uwGSIInterrupt; + UINT8 ucInterruptPolarity; + UINT8 ucInterruptMode; + UINT8 ucNumChannels; + UINT8 ucDMAAddressWidth; + UINT16 usDMAAddressWidth; + UINT16 usNumHandshakeSignals; + UINT32 uwMaxBlockSize; +}EFI_ACPI_5_0_CRST_SHARE_INFO; + + + +/*timer resource group header*/ +typedef struct +{ + EFI_ACPI_5_0_CRST_RESOURCE_GROUP_HEADER head; + EFI_ACPI_5_0_CRST_SHARE_INFO ShareInfo; /*share info*/ + EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR ResourceDescriptor[ACPI_RESOURCE_DESCRIPTOR_NUM0]; +}EFI_ACPI_5_0_CRST_RESOURCE_GROUP0; + +/*timer resource group header*/ +typedef struct +{ + EFI_ACPI_5_0_CRST_RESOURCE_GROUP_HEADER head; + EFI_ACPI_5_0_CRST_SHARE_INFO ShareInfo; /*share info*/ + EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR ResourceDescriptor[ACPI_RESOURCE_DESCRIPTOR_NUM1]; +}EFI_ACPI_5_0_CRST_RESOURCE_GROUP1; + + + + +/*CSRT structure*/ +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + EFI_ACPI_5_0_CRST_RESOURCE_GROUP0 ResourceGroup0; + EFI_ACPI_5_0_CRST_RESOURCE_GROUP1 ResourceGroup1; +} EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE; + + + + +EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE Csrt = { + { + EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE), + ACPI_5_0_CSRT_VERSION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID_INTEL}, + EFI_ACPI_OEM_TABLE_ID_INTEL, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + /*EFI_ACPI_5_0_CRST_RESOURCE_GROUP0*/ + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_GROUP0), /*Length*/ + EFI_ACPI_CREATOR_ID, /*VendorID*/ + 0, /*SubvendorID*/ + 0x9C60, /*DeviceID*/ + 0x0, /*SubdeviceID*/ + 0002, /*Revision*/ + 0, /*Reserved*/ + sizeof(EFI_ACPI_5_0_CRST_SHARE_INFO), /*SharedInfoLength*/ + /*share info*/ + { + 0x1, /*Major Version*/ + 0x0, /*Minor Version*/ + 0xB3A00000, /*MMIO Base Address Low*/ + 0x00000000, /*MMIO Base Address High*/ + 0x0000002A, /*GSI Interrupt*/ + 0x2, /*Interrupt Polarity*/ + 0x0, /*Interrupt Mode*/ + 0x6, /*Num Channels*/ + 0x20, /*DMA Address Width*/ + 0x0, /*Base Request Line*/ + 0x10, /*Num Handshake Signals*/ + 0xfff, /*Max Block Size*/ + }, + { + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x1, /*ResourceSubType*/ + 0x20495053 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x30414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x31414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x32414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x33414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x34414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x35414843 /*UID*/ + }, + } + }, + { + /*header*/ + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_GROUP1), /*Length*/ + EFI_ACPI_CREATOR_ID, /*VendorID*/ + 0, /*SubvendorID*/ + 0x9C60, /*DeviceID*/ + 0x0, /*SubdeviceID*/ + 0003, /*Revision*/ + 0, /*Reserved*/ + sizeof(EFI_ACPI_5_0_CRST_SHARE_INFO), /*SharedInfoLength*/ + }, + /*share info*/ + { + 0x1, /*Major Version*/ + 0x0, /*Minor Version*/ + 0x0, /*MMIO Base Address Low*/ + 0x00000000, /*MMIO Base Address High*/ + 0x0000002B, /*GSI Interrupt*/ + 0x2, /*Interrupt Polarity*/ + 0x0, /*Interrupt Mode*/ + 0x8, /*Num Channels*/ + 0x20, /*DMA Address Width*/ + 0x10, /*Base Request Line*/ + 0x10, /*Num Handshake Signals*/ + 0xfff, /*Max Block Size*/ + }, + { + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x1, /*ResourceSubType*/ + 0x20433249 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x30414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x31414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x32414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x33414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x34414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x35414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x36414843 /*UID*/ + }, + { + sizeof(EFI_ACPI_5_0_CRST_RESOURCE_DESCRIPTOR), /*Length*/ + 0x3, /*ResourceType*/ + 0x0, /*ResourceSubType*/ + 0x37414843 /*UID*/ + }, + }, + }, + + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Csrt; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Dsdt.asl b/ArmPkg/Drivers/AcpiTables/foundation-v8/Dsdt.asl new file mode 100644 index 000000000..58dfd12eb --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Dsdt.asl @@ -0,0 +1,269 @@ +/* + * Copyright (c) 2013, Al Stone + * + * [DSDT] Description of the ARMv8 foundation model + * + * This source is released under the terms of the GPLv2. + */ + +DefinitionBlock ( + "dsdt.aml", // output filename + "DSDT", // table signature + 2, // DSDT compliance revision + "LINARO", // OEM ID + "FOUNDATI", // table ID + 0x00000003) // 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) + } + } + + Device (HED) + { + Name (_HID, EisaId ("PNP0C33")) + Name (_UID, 0x00) + } + + Device (SCK0) + { + Name (_HID, "ACPI0004") + Name (_UID, 0x00) + Method (_STA, 0, NotSerialized) + { + Return (0x0F) + } + + Device (PRC0) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x00) + + /* CPU0 will be always present */ + Method (_STA, 0, NotSerialized) + { + Return (0x0F) + } + + Name (MAT0, Buffer (0x28) + { + /* Be careful, little-endian here */ + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* type, len, reserved, gic_id */ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, /* uid, flags */ + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parking_version, performance_interrupt */ + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parked_address */ + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* base_address */ + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC1) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x01) + + Name (STA1, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA1) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA1, 0x0F)) + { + Store (0x00, STA1) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + /* 0008 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + /* 0008 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC2) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x02) + + Name (STA2, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA2) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA2, 0x0F)) + { + Store (0x00, STA2) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + /* 0008 */ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + /* 0008 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC3) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x03) + + Name (STA3, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA3) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA3, 0x0F)) + { + Store (0x00, STA3) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + /* 0008 */ 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + /* 0008 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + } + + Device (NET0) { + Name (_HID, "LINA0003") + Name (_UID, 0) + + Method (_CRS, 0x0, Serialized) { + Name (RBUF, ResourceTemplate () { + Memory32Fixed (ReadWrite, 0x1a000000, 0x00010000) + Interrupt (ResourceConsumer, Edge, ActiveBoth, Exclusive, , , ) {0x2F} + }) + Return (RBUF) + } + } + + Device (VIRT) { + Name (_HID, "LINA0005") + Name (_UID, 0) + + Method (_CRS, 0x0, Serialized) { + Name (RBUF, ResourceTemplate() { + Memory32Fixed (ReadWrite, 0x1c130000, 0x1000) + Interrupt (ResourceConsumer, Edge, ActiveBoth, Exclusive, , , ) {0x4A} + }) + Return (RBUF) + } + } + } +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Ecdt.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Ecdt.aslc new file mode 100644 index 000000000..d817d5988 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Ecdt.aslc @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +typedef struct +{ + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE table; + UINT8 ucNamepath; +}EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX; + + +EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX Ecdt= { + { + { + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX), + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + /*Command/Status Register Generic Address Structure*/ + { + 0x01, //Space ID:SystemIO + 0x08, //Bit Width + 0x00, //Bit Offset + 0x00, //Encoded Access Width + 0x0000000000000066, //Address + }, + /*Data Register Generic Address Structure*/ + { + 0x01, //Space ID:SystemIO + 0x08, //Bit Width + 0x00, //Bit Offset + 0x00, //Encoded Access Width + 0x0000000000000062, //Address + }, + 0x00000000, //UID + 0x9, //GPE Number + }, + 0x0 //Namepath +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Ecdt; +} + diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Einj.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Einj.aslc new file mode 100644 index 000000000..7392cc2f3 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Einj.aslc @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#pragma pack (1) +typedef struct { + UINT8 Operation; + UINT8 Instruction; + UINT8 Flags; + UINT8 Reserved8; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE Register; + UINT64 Value; + UINT64 Mask; +} EFI_ACPI_WHEA_SERIALIZATION_ACTION; + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 InjectionHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; +} EFI_ACPI_WHEA_ERROR_INJECTION_HEADER; + +typedef struct { + EFI_ACPI_WHEA_ERROR_INJECTION_HEADER header; + EFI_ACPI_WHEA_SERIALIZATION_ACTION InstructionEntry[8]; +} EFI_ACPI_5_0_ERROR_INJECTION_TABLE; + +#pragma pack () + + +EFI_ACPI_5_0_ERROR_INJECTION_TABLE Einj = { + { + { + EFI_ACPI_5_0_ERROR_INJECTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_ERROR_INJECTION_TABLE), + EFI_ACPI_5_0_ERROR_INJECTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00000002, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + sizeof(EFI_ACPI_WHEA_ERROR_INJECTION_HEADER), + EFI_ACPI_RESERVED_DWORD, + 0x08, /*Injection Entry Count*/ + }, + + { + { //Action0 + 0x00, // Action:Begin Operation + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action1 + 0x01, // Action:Get Trigger Table + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action2 + 0x02, // Action:Set Error Type + 0x2, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action3 + 0x03, // Action:Get Error Type + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action4 + 0x04, // Action:End Operation + 0x3, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action5 + 0x05, // Action:Execute Operation + 0x3, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_IO, //Space ID + 0x10, //Bit Width + 0x0, //Bit Offset + 0x2, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action6 + 0x06, // Action:Check Busy Status + 0x1, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action7 + 0x07, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Einj; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Erst.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Erst.aslc new file mode 100644 index 000000000..0170b99f4 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Erst.aslc @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACTION_BEGIN_WRITE_OPERATION 0x00 +#define ACTION_BEGIN_READ_OPERATION 0x01 +#define ACTION_BEGIN_CLEAR_OPERATION 0x02 +#define ACTION_END_OPERATION 0x03 +#define ACTION_SET_RECORD_OFFSET 0x04 +#define ACTION_EXECUTE_OPEARTION 0x05 +#define ACTION_CHECK_BUSY_STATUS 0x06 +#define ACTION_GET_COMMAND_STATUS 0x07 +#define ACTION_GET_RECORD_IDENTIFIER 0x08 +#define ACTION_SET_RECORD_IDENTIFIER 0x09 +#define ACTION_GET_RECORD_COUNT 0x0A +#define ACTION_BEGIN_DUMMY_WRITE_OPERATION 0x0B +#define ACTION_GET_NEXT_RECORD_IDENTIFIER 0x0C +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE 0x0D +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH 0x0E +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES 0x0F + + +#pragma pack (1) + +typedef struct { + UINT8 Operation; + UINT8 Instruction; + UINT8 Flags; + UINT8 Reserved8; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE Register; + UINT64 Value; + UINT64 Mask; +} EFI_ACPI_5_0_SERIALIZATION_ACTION; + + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 SerializationHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; + EFI_ACPI_5_0_SERIALIZATION_ACTION InstructionEntry[16]; +} EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE; + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 SerializationHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; +} EFI_ACPI_5_0_SERIALIZATION_ACTION_HEADER; +#pragma pack () + + + +EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE Erst = { + { + EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE), + EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00000002, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + sizeof(EFI_ACPI_5_0_SERIALIZATION_ACTION_HEADER), + EFI_ACPI_RESERVED_DWORD, + 0x10, + { + { //Action0 + 0x00, // Action:Begin Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0100, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action1 + 0x01, // Action:Begin Read Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0108, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action2 + 0x02, // Action:Begin Clear Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0110, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action3 + 0x03, // Action:Begin Clear Operation + 0x4, // Instruction:Noop + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0118, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action4 + 0x04, // Action:Begin Clear Operation + 0x2, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0120, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action5 + 0x05, // Action:Execute Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_5_0_SYSTEM_MEMORY, //Space ID + 0x8, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0xFFFF0128, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action6 + 0x06, // Action:Check Busy Status + 0x1, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0130, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action7 + 0x07, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0138, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action8 + 0x08, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0140, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action9 + 0x09, // Action:Set Record Identifier + 0x2, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0148, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action10 + 0x0A, // Action:Get Record Count + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0150, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action11 + 0x0B, // Action:Begin Dummy Write + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0158, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action12 + 0x0C, // Action:Unused/Unknown Action + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0160, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action13 + 0x0D, // Action:Get Error Address Range + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0168, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action14 + 0x0E, // Action:Get Error Address Length + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0170, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action15 + 0x0F, // Action:Get Error Attributes + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0178, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + } + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Erst; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Facp.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Facp.aslc new file mode 100644 index 000000000..729c5bc38 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Facp.aslc @@ -0,0 +1,175 @@ +/** @file + FACP Table + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include "Platform.h" + +EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE Facp = { + { + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE), + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION, + 0, // to make sum of entire table == 0 + {EFI_ACPI_OEM_ID}, // OEMID is a 6 bytes long field + EFI_ACPI_OEM_TABLE_ID, // OEM table identification(8 bytes long) + 0x00, // OEM revision number + EFI_ACPI_CREATOR_ID, // ASL compiler vendor ID + EFI_ACPI_CREATOR_REVISION // ASL compiler revision number + }, + 0, // Physical addesss of FACS + 0x00000010, // Physical address of DSDT + 0x0, // System Interrupt Model + 0x4, // PM Profile + SCI_INT_VECTOR, // System vector of SCI interrupt + SMI_CMD_IO_PORT, // Port address of SMI command port + ACPI_ENABLE, // value to write to port smi_cmd to enable ACPI + ACPI_DISABLE, // value to write to port smi_cmd to disable ACPI + S4BIOS_REQ, // Value to write to SMI CMD port to enter the S4BIOS state + 0, // PState control + PM1a_EVT_BLK, // Port address of Power Mgt 1a Event Reg Blk + PM1b_EVT_BLK, // Port address of Power Mgt 1b Event Reg Blk + PM1a_CNT_BLK, // Port address of Power Mgt 1a Ctrl Reg Blk + PM1b_CNT_BLK, // Port address of Power Mgt 1b Ctrl Reg Blk + PM2_CNT_BLK, // Port address of Power Mgt 2 Ctrl Reg Blk + PM_TMR_BLK, // Port address of Power Mgt Timer Ctrl Reg Blk + GPE0_BLK, // Port addr of General Purpose Event 0 Reg Blk + GPE1_BLK, // Port addr of General Purpose Event 1 Reg Blk + PM1_EVT_LEN, // Byte Length of ports at pm1X_evt_blk + PM1_CNT_LEN, // Byte Length of ports at pm1X_cnt_blk + PM2_CNT_LEN, // Byte Length of ports at pm2_cnt_blk + PM_TM_LEN, // Byte Length of ports at pm_tm_blk + GPE0_BLK_LEN, // Byte Length of ports at gpe0_blk + GPE1_BLK_LEN, // Byte Length of ports at gpe1_blk + GPE1_BASE, // offset in gpe model where gpe1 events start + 0, // _CST support + P_LVL2_LAT, // worst case HW latency to enter/exit C2 state + P_LVL3_LAT, // worst case HW latency to enter/exit C3 state + FLUSH_SIZE, // Size of area read to flush caches + FLUSH_STRIDE, // Stride used in flushing caches + DUTY_OFFSET, // bit location of duty cycle field in p_cnt reg + DUTY_WIDTH, // bit width of duty cycle field in p_cnt reg + DAY_ALRM, // index to day-of-month alarm in RTC CMOS RAM + MON_ALRM, // index to month-of-year alarm in RTC CMOS RAM + CENTURY, // index to century in RTC CMOS RAM + 0x0000, // Boot architecture flag + 0x00, // reserved + FLAG, + + { + 0x01, //Space ID + 0x8, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000001,//Address + }, + + 0x0, //Value to cause reset + {0,0,0}, //Reserved + 0x0000000000000000,//FACS Address + 0x0000000000000010,//DSDT Address + + + /*PM1A Event Block*/ + 0x1, //Space ID:SystemIO + 0x20, //Bit Width + 0x0, //Bit Offset + 0x2, //Encoded Access Width + 0x0000000000000001, //Address + + /*PM1B Event Block*/ + 0x1, //Space ID:SystemIO + 0x0, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*PM1A Control Block*/ + 0x1, //Space ID:SystemIO + 0x10, //Bit Width + 0x0, //Bit Offset + 0x02, //Encoded Access Width + 0000000000000001, //Address + + /*PM1B Control Block*/ + 0x1, //Space ID:SystemIO + 0x00, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*PM2 Control Block*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000001, //Address + + /*PM Timer Block*/ + 0x1, //Space ID:SystemIO + 0x20, //Bit Width + 0x0, //Bit Offset + 0x3, //Encoded Access Width + 0x0000000000000001, //Address + + /*GPE0 Block*/ + 0x1, //Space ID:SystemIO + 0x80, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000001, //Address + + /*GPE1 Block*/ + 0x1, //Space ID:SystemIO + 0x00, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*Sleep Control Register*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000000, //Address + + /*Sleep Status Register*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000000, //Address + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Facp; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Facs.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Facs.aslc new file mode 100644 index 000000000..9bcddeaad --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Facs.aslc @@ -0,0 +1,86 @@ +/** @file + FACS Table + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include + +EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE Facs = { + EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE, + sizeof (EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE), + + // + // Hardware Signature will be updated at runtime + // + 0x00000000, //HardwareSignature + 0x00, //FirmwareWakingVector + 0x00, //GlobalLock + 0x00, //Flags + 0x0000000000000000, //XFirmwareWakingVector + 0x02, //Version + { + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE + }, + 0x00, + { + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE + } +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Facs; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Gtdt.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Gtdt.aslc new file mode 100644 index 000000000..ab8a60ac0 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Gtdt.aslc @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE Gtdt = +{ + { + EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE), + EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x0000000000000000, //Timer Address + 0x00000001, //Flags + 0x00000000, //Secure PL1 Interrupt + 0x00000000, //SPL1 Flags + 0x00000000, //Non-Secure PL1 Interrupt + 0x00000000, //NSPL1 Flags + 0x00000000, //Virtual Timer Interrupt + 0x00000000, //VT Flags + 0x00000000, //Non-Secure PL2 Interrupt + 0x00000000, //NSPL2 Flags +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Gtdt; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Hest.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Hest.aslc new file mode 100644 index 000000000..08092acea --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Hest.aslc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#pragma pack(1) + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 ErrorEntryCount; + EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE GenHardWareError; + +} EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE; + +#pragma pack() + +EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE Hest = { + { + EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE), + EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x02, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00000001, //Error Source Count +{ + 0x0009, //Subtable Type:Generic Hardware Error Source + 0x0002, //Source Id + 0xFFFF, //Related Source Id + 0x00, //Reserved + 0x01, //Enabled + 0x00000001, //Records To Preallocate + 0x00000001, //Max Sections Per Record + 0x00001000, //Max Raw Data Length + + /* Error Status Address : [Generic Address Structure]*/ + { + 0x00, //Space ID:SystemMemory + 0x40, //Bit Width + 0x00, //Bit Offset + 0x04, //Encoded Access Width + 0xFFFF0000, //Address + }, + /*Notify : [Hardware Error Notification Structure]*/ + { + 0x03, //Notify Type:SCI + 0x1c, //Notify Length + 0x0000, //Configuration Write Enable + 0x00000000, //PollInterval + 0x00000000, //Vector + 0x00000000, //Polling Threshold Value + 0x00000000, //Polling Threshold Window + 0x00000000, //Error Threshold Value + 0x00000000, //Error Threshold Window + }, + 0x00001000, //Error Status Block Length +}, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Hest; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Mcfg.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Mcfg.aslc new file mode 100644 index 000000000..9451e9c50 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Mcfg.aslc @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_MCFG_VERSION 0x1 + +#pragma pack(1) +typedef struct +{ + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT64 Reserved1; + UINT64 ullBaseAddress; + UINT16 usSegGroupNum; + UINT8 ucStartBusNum; + UINT8 ucEndBusNum; + UINT32 Reserved2; +}EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE; +#pragma pack() + +EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE Mcfg= +{ + { + EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE), + ACPI_5_0_MCFG_VERSION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x0000000000000000, //Reserved + 0x0000000000000000, //Base Address + 0x0000, //Segment Group Number + 0x00, //Start Bus Number + 0x00, //End Bus Number + 0x00000000, //Reserved +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Mcfg; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Mpst.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Mpst.aslc new file mode 100644 index 000000000..dfdda34a5 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Mpst.aslc @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define MAX_POWER_STATES_NUM 0x2 +#define MAX_PHYSICAL_COMPONENTS_NUM 0x3 +#define MAX_MEMORY_POWER_NODE_COUNT 0x2 +#define MAX_CHARACTERISTICS_COUNT 0x2 + +#pragma pack (1) +typedef struct +{ + EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE structre; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE state[MAX_POWER_STATES_NUM]; + UINT16 components[MAX_PHYSICAL_COMPONENTS_NUM]; +}EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_EX; + +typedef struct +{ + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE structre; + UINT64 ulResverd; +}EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_EX; + +typedef struct +{ + EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE table; + EFI_ACPI_5_0_MPST_MEMORY_POWER_NODE_TABLE node; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_EX powerNode[MAX_MEMORY_POWER_NODE_COUNT]; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE Characteristics; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_EX powerChar[MAX_CHARACTERISTICS_COUNT]; +}EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE_EX; +#pragma pack () + + +EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE_EX Mpst ={ + { + { + EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_SIGNATURE, + 0x000000B6, + EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00, //Channel ID + {0,0,0}, //Reserved + + }, + 0x0002, //Power Node Count + {0,0}, //Reserved + { + { + 0x00, //Flags + 0x00, //Reserved + 0x0000, //Node ID + 0x0000000000, //Length + 0x00000000000000000000, //ange Address + 0x00000000000000000000, //Range Length + 0x00000002, // Num Power + 0x00000003, // Num Physical Components + { + { + 0x00, //Power State + 0x00, //InfoIndex + }, + { + 0x00, //Power State + 0x00, //InfoIndex + }, + }, + 0x0000, //Component Id + 0x0001, //Component Id + 0x0002, //Component Id + }, + { + 0x00, //Flags + 0x00, //Reserved + 0x0000, //Node ID + 0x0000000000, //Length + 0x00000000000000000000, //ange Address + 0x00000000000000000000, //Range Length + 0x00000001, // Num Power + 0x00000001, // Num Physical Components + { + 0x00, //Power State + 0x00, //InfoIndex + }, + 0x0000, //Component Id + + }, + }, + + 0x0002, //Characteristics Count + {0,0}, //Reserved + { + { + 0x01, //Structure ID + 0x00, //Flags + 0x0000, //Reserved + 0x00000000, //Average Power + 0x00000000, //Power Saving + 0x0000000000000000, //Exit Latency + 0x0000000000000000, //Reserved + }, + { + 0x01, //Structure ID + 0x00, //Flags + 0x0000, //Reserved + 0x00000000, //Average Power + 0x00000000, //Power Saving + 0x0000000000000000, //Exit Latency + 0x0000000000000000, //Reserved + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Mpst; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Msct.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Msct.aslc new file mode 100644 index 000000000..80c9d59b4 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Msct.aslc @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION 0x1 +// +// MSCT Table definition +// +#pragma pack (1) +typedef struct { + UINT8 Revision; + UINT8 Length; + UINT32 ProxDomRangeLow; + UINT32 ProxDomRangeHigh; + UINT32 MaxProcessorCapacity; + UINT64 MaxMemoryCapacity; +} EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE; + +typedef struct { + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER Header; + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE ProxDomInfoStructure[4]; +} EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE; + +#pragma pack () + +EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE Msct = { + { + { + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE, + sizeof (EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE), + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + // + // Beginning of MSCT specific fields + // + 0x00000038, // OffsetProxDomInfo + 4 - 1, // MaxNumProxDom + 0x00000000, // MaxNumClockDom + 0x00000FFFFFFFFFFF, // MaxPhysicalAddress + }, + { + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000003, // ProxDomRangeHigh + 0x00000010, // MaxProcessorCapacity + 0x0000004000000000 // MaxMemoryCapacity + }, + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Msct; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Oem0.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Oem0.aslc new file mode 100644 index 000000000..2e84daf4a --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Oem0.aslc @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_5_0_OEM0_SIGNATURE SIGNATURE_32('O', 'E', 'M', '0') +#define ACPI_5_0_OEM0_REVISION 0x1 + +typedef struct{ + EFI_ACPI_DESCRIPTION_HEADER Header; +}EFI_ACPI_5_0_OEM0_TABLE; + +EFI_ACPI_5_0_OEM0_TABLE Oem0= +{ + { + EFI_ACPI_5_0_OEM0_SIGNATURE, + sizeof (EFI_ACPI_5_0_OEM0_TABLE), + ACPI_5_0_OEM0_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x0000000A, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Oem0; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Platform.h b/ArmPkg/Drivers/AcpiTables/foundation-v8/Platform.h new file mode 100644 index 000000000..c2b7165b0 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Platform.h @@ -0,0 +1,78 @@ +/** @file + Platform specific defines for constructing ACPI tables + + Copyright (c) 2008, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#ifndef _Platform_h_INCLUDED_ +#define _Platform_h_INCLUDED_ + +#include +#include + +// +// ACPI table information used to initialize tables. +// +#define EFI_ACPI_OEM_ID 'L','I','N','A','R','O' // OEMID 6 bytes long +#define EFI_ACPI_OEM_TABLE_ID SIGNATURE_64('F','O','U','N','D','A','T','I') // OEM table id 8 bytes long +#define EFI_ACPI_OEM_REVISION 0x00000001 +#define EFI_ACPI_CREATOR_ID SIGNATURE_32('I','N','T','L') +#define EFI_ACPI_CREATOR_REVISION 0x20130517 + +#define EFI_ACPI_OEM_ID_INTEL 'I','N','T','E','L',' ' // OEMID 6 bytes long +#define EFI_ACPI_OEM_TABLE_ID_INTEL SIGNATURE_64('T','E','M','P','L','A','T','E' ) // OEM table id 8 bytes long + + +#define INT_MODEL 0x01 +#define SCI_INT_VECTOR 0x0 +#define SMI_CMD_IO_PORT 0x0 +#define ACPI_ENABLE 0x0 +#define ACPI_DISABLE 0x0 +#define S4BIOS_REQ 0x00 +#define PM1a_EVT_BLK 0x00000001 +#define PM1b_EVT_BLK 0x00000000 +#define PM1a_CNT_BLK 0x00000001 +#define PM1b_CNT_BLK 0x00000000 +#define PM2_CNT_BLK 0x00000001 +#define PM_TMR_BLK 0x00000001 +#define GPE0_BLK 0x00000001 +#define GPE1_BLK 0x00000000 +#define PM1_EVT_LEN 0x04 +#define PM1_CNT_LEN 0x02 +#define PM2_CNT_LEN 0x01 +#define PM_TM_LEN 0x04 +#define GPE0_BLK_LEN 0x08 +#define GPE1_BLK_LEN 0x00 +#define GPE1_BASE 0x00 +#define RESERVED 0x00 +#define P_LVL2_LAT 0x0000 +#define P_LVL3_LAT 0x0000 +#define FLUSH_SIZE 0x0000 +#define FLUSH_STRIDE 0x0000 +#define DUTY_OFFSET 0x00 +#define DUTY_WIDTH 0x00 +#define DAY_ALRM 0x00 +#define MON_ALRM 0x00 +#define CENTURY 0x00 +#define FLAG 0x00321033 +#endif diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Pmtt.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Pmtt.aslc new file mode 100644 index 000000000..f0b4f6cfe --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Pmtt.aslc @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_SOCKET 00 //socket +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_MEMCTRL 01 //Memory Controller +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_DIMM 02 //DIMM +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_RESVERVED 03 //RESVERVED + +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG_TLAD 01 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG_PHYELEMENT 02 // BIT1 - set to 1 since socket is a physical element of the topology +//Bit 2 and 3 - If 00, indicates that all components aggregated by this device implements volatile memory +// If 01, indicates that components aggregated by this device implements both volatile and non-volatile memory +// If 10, indicates that all components aggregated by this device implements non-volatile memory +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__VOLATILE 00 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__MIXED 4 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__NONVOLATILE 0x08 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__RSVD 0x0C + +#define MAXNUMBER_OF_PROXIMITY_DOMAINS 0x3 + +#define MAX_SOCKET 0x2 +#define NUM_MEM_CONTROLLERS 0x2 +#define MAX_DIMM 0x02 + +#pragma pack (1) +// PMMT Table fields +typedef struct { + UINT32 ReadLatency; + UINT32 WriteLatency; + UINT32 ReadBW; + UINT32 WriteBW; + UINT16 OptimalAccUnit; + UINT16 OptimalAccAlignment; +} EFI_ACPI_MEMCTRL_CHAR_TABLE; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + UINT16 PhyCompIdentifier; + UINT16 Rsvd2; + UINT32 Size; + UINT32 SmBiosHandle; +} EFI_ACPI_MEMORY_AGGREGATOR_DIMM_STRUC; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + EFI_ACPI_MEMCTRL_CHAR_TABLE MemCtrlCharTable; + UINT16 Rsvd2; + UINT16 NumProxDomains; + UINT32 ProxDomain[MAXNUMBER_OF_PROXIMITY_DOMAINS]; + EFI_ACPI_MEMORY_AGGREGATOR_DIMM_STRUC PhyCompIdentStruc[MAX_DIMM]; +} EFI_ACPI_MEMORY_AGGREGATOR_MEMCTRL_STRUC; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + UINT16 SckIdent; + UINT16 Rsvd2; + EFI_ACPI_MEMORY_AGGREGATOR_MEMCTRL_STRUC MemCtrlStruc[NUM_MEM_CONTROLLERS]; +} EFI_ACPI_MEMORY_AGGREGATOR_SOCKET_STRUC; + +typedef struct { + EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE Header; + EFI_ACPI_MEMORY_AGGREGATOR_SOCKET_STRUC TopLevelmemAggrDevStruc[MAX_SOCKET]; +} EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE; +#pragma pack () + + +EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE Pmtt = { + { + { + EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE), // Length + EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE_REVISION, // Revision + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + EFI_ACPI_RESERVED_DWORD, // Reserved[0] + }, + { + /*Socket 0*/ + { + 0x00, //Subtable Type:Socket + 0x00, //Reserved + 0x0080, //Length + 0x0001, //Flags + 0x0000, //Reserved + 0x0000, //Socket ID + 0x0000, //Reserved + { + /*Memory Controller 1*/ + + { + 0x01, //Subtable Type:Memory Controller + 0x00, //Reserved + 0x0054, //Length + 0x0005, //Flags + 0x0000, //Reserved + { + 0x00000000, //Read Latency + 0x00000000, //Write Latency + 0x00000000, //Read Bandwidth + 0x00000000, //Write Bandwidth + 0x0000, //Access Width + 0x0000, //Alignment + }, + 0x0000, //Reserved + MAXNUMBER_OF_PROXIMITY_DOMAINS, //Domain Count + 0x00000000, //Proximity Domain + 0x00000000, //Proximity Domain + 0x00000000, //Proximity Domain + { + /*DIMM 0*/ + { + 0x02, //Subtable Type:Physical Component (DIMM) + 0x00, //Reserved + 0x0014, //Length + 0x0002, //Flags + 0x0000, //Reserved + 0x0000, //Component ID + 0x0000, //Reserved + 0x00000000, //Memory Size + 0x00000000, //Bios Handle + }, + /*DIMM 1*/ + { + 0x02, //Subtable Type:Physical Component (DIMM) + 0x00, //Reserved + 0x0014, //Length + 0x0002, //Flags + 0x0000, //Reserved + 0x0000, //Component ID + 0x0000, //Reserved + 0x00000000, //Memory Size + 0x00000000, //Bios Handle + }, + }, + }, + + /*Memory Controller 2*/ + { + 0x01, //Subtable Type:Memory Controller + 0x00, //Reserved + 0x0020, //Length + 0x0001, //Flags + 0x0000, //Reserved + { + 0x00000000, //Read Latency + 0x00000000, //Write Latency + 0x00000000, //Read Bandwidth + 0x00000000, //Write Bandwidth + 0x0000, //Access Width + 0x0000 //Alignment + }, + 0x0000, //Reserved + 0x0000, //Domain Count + {0}, + {0}, + + }, + }, + }, + + + /*Socket 1*/ + { + 0x00, //Subtable Type:Socket + 0x00, //Reserved + 0x000c, //Length + 0x0001, //Flags + 0x0000, //Reserved + 0x0000, //Socket ID + 0x0000 //Reserved + }, + }, + + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Pmtt; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Slit.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Slit.aslc new file mode 100644 index 000000000..05d96e029 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Slit.aslc @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT 0x0000000000000014 + +#pragma pack(1) +typedef struct { + UINT8 Entry[EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT]; +} EFI_ACPI_5_0_NUMBER_OF_SYSTEM_LOCALITIES_STRUCTURE; + +typedef struct { + EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER Header; + EFI_ACPI_5_0_NUMBER_OF_SYSTEM_LOCALITIES_STRUCTURE NumSlit[EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT]; + +} EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE; +#pragma pack() + +// +// System Locality Information Table +// Please modify all values in Slit.h only. +// +EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE Slit = { + { + { + EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE), + EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION, + }, + // + // Beginning of SLIT specific fields + // + EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT, + }, + { + {0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27}, //Locality 0 + {0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,}, //Locality 1 + {0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,}, //Locality 2 + {0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,}, //Locality 3 + {0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23,}, //Locality 4 + {0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,}, //Locality 5 + {0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21,}, //Locality 6 + {0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,}, //Locality 7 + {0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,}, //Locality 8 + {0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,}, //Locality 9 + {0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,}, //Locality 10 + {0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,}, //Locality 11 + {0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,}, //Locality 12 + {0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,}, //Locality 13 + {0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19,}, //Locality 14 + {0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18,}, //Locality 15 + {0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17,}, //Locality 16 + {0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16,}, //Locality 17 + {0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10,}, //Locality 18 + {0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A,}, //Locality 19 + }, +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Slit; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Spmi.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Spmi.aslc new file mode 100644 index 000000000..77836a471 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Spmi.aslc @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_SPMI_REVISION 0x4 + +#pragma pack(1) +typedef struct +{ + + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT8 ucInterfaceType; + UINT8 Reserved; + UINT16 usIPMISpecVersion; + UINT8 ucInterruptType; + UINT8 ucGPENumber; + UINT8 Reserved2; + UINT8 ucPCIDeviceFlag; + UINT32 uwInterrupt; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE IPMIRegister; + UINT8 ucPCISegment; + UINT8 ucPCIBus; + UINT8 ucPCIDevice; + UINT8 ucPCIFunction; + UINT8 Reserved3; +}EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE; +#pragma pack() + +EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE Spmi = +{ + { + EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE), + ACPI_5_0_SPMI_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00, //Interface Type + 0x00, //Reserved + 0x0000, //IPMI Spec Version + 0x00, //Interrupt Type + 0x00, //GPE Number + 0x00, //Reserved + 0x00, //PCI Device Flag + 0x00000000, //Interrupt + { + 0x00, //Space ID:SystemMemory + 0x08, //Bit Width + 0x00, //Bit Offset + 0x01, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x00, //PCI Segment + 0x00, //PCI Bus + 0x00, //PCI Device + 0x00, //PCI Function + 0x00, //Reserved +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Spmi; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Srat.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Srat.aslc new file mode 100644 index 000000000..d5c433ffc --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Srat.aslc @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + + +// +// Define the number of each table type. +// This is where the table layout is modified. +// +#define EFI_ACPI_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE_COUNT 4 +#define EFI_ACPI_MEMORY_AFFINITY_STRUCTURE_COUNT 4 + + +#pragma pack(1) +typedef struct { + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER Header; + EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE Apic; + EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE Memory; + EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE x2APIC; +} EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE; + +#pragma pack() + + +// +// Static Resource Affinity Table definition +// +EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE Srat = { + { + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE), + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION, + /*Reserved*/ + 0x00000001, // Reserved to be 1 for backward compatibility + EFI_ACPI_RESERVED_QWORD + }, + /**/ + { + 0x00, // Subtable Type:Processor Local APIC/SAPIC Affinity + sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE), //Length + 0x00, //Proximity Domain Low(8) + 0x00, //Apic ID + 0x00000001, //Flags + 0x00, //Local Sapic EID + {0,0,0}, //Proximity Domain High(24) + 0x00000000, //ClockDomain + }, + // + // + // Memory Affinity + // + { + 0x01, // Subtable Type:Memory Affinity + sizeof (EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE), // Length + 0x00000000, // Proximity Domain + EFI_ACPI_RESERVED_WORD, // Reserved + 0x00000000, // Address Base Low + 0x00000000, // Address Base High + 0x0009FC00, // Length Low + 0x00000000, // Length High + EFI_ACPI_RESERVED_DWORD, // Reserved + 0x00000001, // Flags disabled, until enabled by Platform driver + EFI_ACPI_RESERVED_QWORD , // Reserved + }, + + /*Processor Local x2APIC Affinity*/ + { + 0x02, // Subtable Type:Processor Local x2APIC Affinity + sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE), + {0,0}, //Reserved1 + 0x00000000, //Proximity Domain + 0x00000000, //Apic ID + 0x00000001, //Flags + 0x00000000, //Clock Domain + {0,0,0,0}, //Reserved2 + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Srat; +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Ssdt0.asl b/ArmPkg/Drivers/AcpiTables/foundation-v8/Ssdt0.asl new file mode 100644 index 000000000..9796ebd50 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Ssdt0.asl @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2013, Al Stone + * + * [SSDT] Description of the ARMv8 foundation model GPIO structure + * + * This source is released under the terms of the GPLv2. + */ + +DefinitionBlock ( + "ssdt0.aml", // output filename + "SSDT", // table signature + 2, // SSDT compliance revision + "LINARO", // OEM ID + "FOUNDATI", // table ID + 0x00000001) // OEM revision +{ +} diff --git a/ArmPkg/Drivers/AcpiTables/foundation-v8/Uefi.aslc b/ArmPkg/Drivers/AcpiTables/foundation-v8/Uefi.aslc new file mode 100644 index 000000000..c3bbce3ed --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/foundation-v8/Uefi.aslc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + + +#define ACPI_5_0_UEFI_REVISION 0x1 + +#pragma pack(1) + +typedef struct +{ + EFI_ACPI_DESCRIPTION_HEADER Header; + EFI_GUID guid; + UINT16 usDataOffset; +}EFI_ACPI_5_0_UEFI_TABLE; +#pragma pack() + +EFI_ACPI_5_0_UEFI_TABLE Uefi= +{ + { + EFI_ACPI_5_0_UEFI_ACPI_DATA_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_UEFI_TABLE), + ACPI_5_0_UEFI_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + //03020100-0504-0706-0809-0A0B0C0D0E0F + { 0x03020100, 0x0504, 0x0706, { 0x08, 0x09, 0x0A, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }, + 0x0036 //Data Offset +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Uefi; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/AcpiTables.inf b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/AcpiTables.inf new file mode 100644 index 000000000..ae3a66b68 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/AcpiTables.inf @@ -0,0 +1,70 @@ +## @file +# Component description file for PlatformAcpiTables module. +# +# ACPI table data and ASL sources required to boot the platform. +# +# Copyright (c) 2008 - 2010, Intel Corporation. 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. +# +## + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = PlatformAcpiTables + FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD + MODULE_TYPE = USER_DEFINED + VERSION_STRING = 1.0 + FFS_EXT = SEC + COMPILE_SELECT = .c=acpi_c + +[Sources] + Platform.h + Apic.aslc + Bert.aslc + Dsdt.asl + Ecdt.aslc + Einj.aslc + Erst.aslc + Facp.aslc + Facs.aslc + Gtdt.aslc + Hest.aslc + Mcfg.aslc + Mpst.aslc + Msct.aslc + Oem0.aslc + Pmtt.aslc + Slit.aslc + Spmi.aslc + Srat.aslc + Ssdt0.asl + Uefi.aslc + + ###rsdp/xsdt created by building the acpi table + ###tables need to change format + #asf!.asl + #bgrt.asl + #boot.asl + #cpep.asl + #fpdt.asl + #tpm2.asl + +[Packages] + MdePkg/MdePkg.dec diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Apic.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Apic.aslc new file mode 100644 index 000000000..e18c1a555 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Apic.aslc @@ -0,0 +1,216 @@ +/** @file + MADT Table + + This file contains a structure definition for the ACPI 1.0 Multiple APIC + Description Table (MADT). + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ +#include +#include + +// +// Local APIC address +// +#define EFI_ACPI_LOCAL_APIC_ADDRESS 0x2C002000 // TBD + + +#define ACPI_PROCESSOR_LOCAL_GIC 0xb +#define ACPI_GIC_DISTRIBUTOR 0xc + +//These addresses are defined by the MP shared region defined in the UEFI memory map. +#define MP_REGISTER_ADDRESS_GIC0 0x80301000 +#define DISTRIBUTOR_PHYSICAL_ADDRESS 0x02000000 + +#define ACPI_GICC_NUM 0x8 + +// +// Ensure proper structure formats +// +#pragma pack (1) +// +// ACPI 5.0 MADT structure +// +typedef struct { + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header; + EFI_ACPI_5_0_GIC_STRUCTURE Gic[ACPI_GICC_NUM]; + EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE Distributor; + +} EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE; + +#pragma pack () + +// +// Multiple APIC Description Table +// +EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = { + { + { + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE), + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + + // + // MADT specific fields + // + EFI_ACPI_LOCAL_APIC_ADDRESS, + 0x00000000 + }, + { + //LocalGic0 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x00, //GicId + 0x00, //AcpiProcessorUid + 0x00000001, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic1 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x01, //GicId + 0x01, //AcpiProcessorUid + EFI_ACPI_5_0_GIC_ENABLED, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000 //PhysicalBaseAddress + }, + //LocalGic2 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type: + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x02, //GicId + 0x02, //AcpiProcessorUid + EFI_ACPI_5_0_GIC_ENABLED, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic3 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x03, //GicId + 0x03, //AcpiProcessorUid + EFI_ACPI_5_0_GIC_ENABLED, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic4 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x04, //GicId + 0x04, //AcpiProcessorUid + 0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic5 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x05, //GicId + 0x05, //AcpiProcessorUid + 0x0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic6 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x06, //GicId + 0x06, //AcpiProcessorUid + 0x0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000 , //PhysicalBaseAddress + }, + //LocalGic7 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x07, //GicId + 0x07, //AcpiProcessorUid + 0x0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + }, + //Distributor + { + ACPI_GIC_DISTRIBUTOR, //Type + sizeof (EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE), //Length + 0, //Reserved1 + 0, //GicId + 0x000000002C001000, //PhysicalBaseAddress + 0, //SystemVectorBase + 0 //Reserved2 + } + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Madt; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Bert.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Bert.aslc new file mode 100644 index 000000000..0fe2bc43a --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Bert.aslc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +// Generic error severity in data entry +#define BOOT_ERROR_SEVERITY_RECOVERABLE 0 +#define BOOT_ERROR_SEVERITY_FATAL 1 +#define BOOT_ERROR_SEVERITY_CORRECTED 2 +#define BOOT_ERROR_SEVERITY_NONE 3 + +#pragma pack(1) + +// ErrorStatus block record definitions for various errors +typedef struct { + UINT32 UeValid:1; + UINT32 CeValid:1; + UINT32 MultipleUeValid:1; + UINT32 MultipleCeValid:1; + UINT32 NumErrorDataEntry:10; + UINT32 Resv1:18; +} BOOT_ERROR_BLOCK_STATUS; + + +typedef struct { + // Error Status block + BOOT_ERROR_BLOCK_STATUS BlockStatus; + UINT32 RawDataOffset; + UINT32 RawDataSize; + UINT32 ErrDataSize; + UINT32 Severity; + // Error Status data... +} EFI_ACPI_5_0_BOOT_ERROR_REGION; + + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 BootErrorRegionLen; + UINT64 BootErrorRegion; +} EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE; + +#pragma pack() + + + +EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE Bert = { + { + EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE), + EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x02, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x9D, //BootErrorRegionLen + 0xFFFF0008 //BootErrorRegion + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Bert; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Dsdt.asl b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Dsdt.asl new file mode 100644 index 000000000..c4185fecb --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Dsdt.asl @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2013, Al Stone + * + * [DSDT] Description of the armv8 VE Model + * + * This source is released under the terms of the GPLv2. + */ + +DefinitionBlock ( + "dsdt.aml", // output filename + "DSDT", // table signature + 2, // DSDT compliance revision + "LINARO", // OEM ID + "RTSMVEV8", // table ID + 0x00000003) // 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) + } + } + + Device (HED) + { + Name (_HID, EisaId ("PNP0C33")) + Name (_UID, 0x00) + } + + Device (SCK0) + { + Name (_HID, "ACPI0004") + Name (_UID, 0x00) + Method (_STA, 0, NotSerialized) + { + Return (0x0F) + } + + Device (PRC0) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x00) + + /* CPU0 will be always present */ + Method (_STA, 0, NotSerialized) + { + Return (0x0F) + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* type, len, reserved, gic_id */ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* uid, flags */ + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parking_version, performance_interrupt */ + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parked_address */ + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* base_address */ + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC1) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x01) + + Name (STA1, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA1) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA1, 0x0F)) + { + Store (0x00, STA1) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + /* 0008 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + /* 0008 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC2) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x02) + + Name (STA2, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA2) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA2, 0x0F)) + { + Store (0x00, STA2) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + /* 0008 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + /* 0008 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC3) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x03) + + Name (STA3, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA3) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA3, 0x0F)) + { + Store (0x00, STA3) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + /* 0008 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + /* 0008 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + } + + Device (NET0) { + Name (_HID, "LINA0003") + Name (_UID, 0) + + Method (_CRS, 0x0, Serialized) { + Name (RBUF, ResourceTemplate () { + Memory32Fixed (ReadWrite, 0x1a000000, 0x00010000) + Interrupt (ResourceConsumer, Edge, ActiveBoth, Exclusive, , , ) {0x2F} + }) + Return (RBUF) + } + } + } +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ecdt.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ecdt.aslc new file mode 100644 index 000000000..d817d5988 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ecdt.aslc @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +typedef struct +{ + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE table; + UINT8 ucNamepath; +}EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX; + + +EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX Ecdt= { + { + { + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX), + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + /*Command/Status Register Generic Address Structure*/ + { + 0x01, //Space ID:SystemIO + 0x08, //Bit Width + 0x00, //Bit Offset + 0x00, //Encoded Access Width + 0x0000000000000066, //Address + }, + /*Data Register Generic Address Structure*/ + { + 0x01, //Space ID:SystemIO + 0x08, //Bit Width + 0x00, //Bit Offset + 0x00, //Encoded Access Width + 0x0000000000000062, //Address + }, + 0x00000000, //UID + 0x9, //GPE Number + }, + 0x0 //Namepath +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Ecdt; +} + diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Einj.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Einj.aslc new file mode 100644 index 000000000..7392cc2f3 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Einj.aslc @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#pragma pack (1) +typedef struct { + UINT8 Operation; + UINT8 Instruction; + UINT8 Flags; + UINT8 Reserved8; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE Register; + UINT64 Value; + UINT64 Mask; +} EFI_ACPI_WHEA_SERIALIZATION_ACTION; + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 InjectionHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; +} EFI_ACPI_WHEA_ERROR_INJECTION_HEADER; + +typedef struct { + EFI_ACPI_WHEA_ERROR_INJECTION_HEADER header; + EFI_ACPI_WHEA_SERIALIZATION_ACTION InstructionEntry[8]; +} EFI_ACPI_5_0_ERROR_INJECTION_TABLE; + +#pragma pack () + + +EFI_ACPI_5_0_ERROR_INJECTION_TABLE Einj = { + { + { + EFI_ACPI_5_0_ERROR_INJECTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_ERROR_INJECTION_TABLE), + EFI_ACPI_5_0_ERROR_INJECTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00000002, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + sizeof(EFI_ACPI_WHEA_ERROR_INJECTION_HEADER), + EFI_ACPI_RESERVED_DWORD, + 0x08, /*Injection Entry Count*/ + }, + + { + { //Action0 + 0x00, // Action:Begin Operation + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action1 + 0x01, // Action:Get Trigger Table + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action2 + 0x02, // Action:Set Error Type + 0x2, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action3 + 0x03, // Action:Get Error Type + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action4 + 0x04, // Action:End Operation + 0x3, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action5 + 0x05, // Action:Execute Operation + 0x3, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_IO, //Space ID + 0x10, //Bit Width + 0x0, //Bit Offset + 0x2, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action6 + 0x06, // Action:Check Busy Status + 0x1, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action7 + 0x07, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Einj; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Erst.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Erst.aslc new file mode 100644 index 000000000..0170b99f4 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Erst.aslc @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACTION_BEGIN_WRITE_OPERATION 0x00 +#define ACTION_BEGIN_READ_OPERATION 0x01 +#define ACTION_BEGIN_CLEAR_OPERATION 0x02 +#define ACTION_END_OPERATION 0x03 +#define ACTION_SET_RECORD_OFFSET 0x04 +#define ACTION_EXECUTE_OPEARTION 0x05 +#define ACTION_CHECK_BUSY_STATUS 0x06 +#define ACTION_GET_COMMAND_STATUS 0x07 +#define ACTION_GET_RECORD_IDENTIFIER 0x08 +#define ACTION_SET_RECORD_IDENTIFIER 0x09 +#define ACTION_GET_RECORD_COUNT 0x0A +#define ACTION_BEGIN_DUMMY_WRITE_OPERATION 0x0B +#define ACTION_GET_NEXT_RECORD_IDENTIFIER 0x0C +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE 0x0D +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH 0x0E +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES 0x0F + + +#pragma pack (1) + +typedef struct { + UINT8 Operation; + UINT8 Instruction; + UINT8 Flags; + UINT8 Reserved8; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE Register; + UINT64 Value; + UINT64 Mask; +} EFI_ACPI_5_0_SERIALIZATION_ACTION; + + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 SerializationHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; + EFI_ACPI_5_0_SERIALIZATION_ACTION InstructionEntry[16]; +} EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE; + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 SerializationHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; +} EFI_ACPI_5_0_SERIALIZATION_ACTION_HEADER; +#pragma pack () + + + +EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE Erst = { + { + EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE), + EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00000002, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + sizeof(EFI_ACPI_5_0_SERIALIZATION_ACTION_HEADER), + EFI_ACPI_RESERVED_DWORD, + 0x10, + { + { //Action0 + 0x00, // Action:Begin Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0100, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action1 + 0x01, // Action:Begin Read Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0108, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action2 + 0x02, // Action:Begin Clear Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0110, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action3 + 0x03, // Action:Begin Clear Operation + 0x4, // Instruction:Noop + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0118, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action4 + 0x04, // Action:Begin Clear Operation + 0x2, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0120, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action5 + 0x05, // Action:Execute Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_5_0_SYSTEM_MEMORY, //Space ID + 0x8, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0xFFFF0128, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action6 + 0x06, // Action:Check Busy Status + 0x1, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0130, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action7 + 0x07, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0138, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action8 + 0x08, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0140, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action9 + 0x09, // Action:Set Record Identifier + 0x2, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0148, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action10 + 0x0A, // Action:Get Record Count + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0150, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action11 + 0x0B, // Action:Begin Dummy Write + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0158, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action12 + 0x0C, // Action:Unused/Unknown Action + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0160, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action13 + 0x0D, // Action:Get Error Address Range + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0168, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action14 + 0x0E, // Action:Get Error Address Length + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0170, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action15 + 0x0F, // Action:Get Error Attributes + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0178, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + } + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Erst; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facp.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facp.aslc new file mode 100644 index 000000000..729c5bc38 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facp.aslc @@ -0,0 +1,175 @@ +/** @file + FACP Table + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include "Platform.h" + +EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE Facp = { + { + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE), + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION, + 0, // to make sum of entire table == 0 + {EFI_ACPI_OEM_ID}, // OEMID is a 6 bytes long field + EFI_ACPI_OEM_TABLE_ID, // OEM table identification(8 bytes long) + 0x00, // OEM revision number + EFI_ACPI_CREATOR_ID, // ASL compiler vendor ID + EFI_ACPI_CREATOR_REVISION // ASL compiler revision number + }, + 0, // Physical addesss of FACS + 0x00000010, // Physical address of DSDT + 0x0, // System Interrupt Model + 0x4, // PM Profile + SCI_INT_VECTOR, // System vector of SCI interrupt + SMI_CMD_IO_PORT, // Port address of SMI command port + ACPI_ENABLE, // value to write to port smi_cmd to enable ACPI + ACPI_DISABLE, // value to write to port smi_cmd to disable ACPI + S4BIOS_REQ, // Value to write to SMI CMD port to enter the S4BIOS state + 0, // PState control + PM1a_EVT_BLK, // Port address of Power Mgt 1a Event Reg Blk + PM1b_EVT_BLK, // Port address of Power Mgt 1b Event Reg Blk + PM1a_CNT_BLK, // Port address of Power Mgt 1a Ctrl Reg Blk + PM1b_CNT_BLK, // Port address of Power Mgt 1b Ctrl Reg Blk + PM2_CNT_BLK, // Port address of Power Mgt 2 Ctrl Reg Blk + PM_TMR_BLK, // Port address of Power Mgt Timer Ctrl Reg Blk + GPE0_BLK, // Port addr of General Purpose Event 0 Reg Blk + GPE1_BLK, // Port addr of General Purpose Event 1 Reg Blk + PM1_EVT_LEN, // Byte Length of ports at pm1X_evt_blk + PM1_CNT_LEN, // Byte Length of ports at pm1X_cnt_blk + PM2_CNT_LEN, // Byte Length of ports at pm2_cnt_blk + PM_TM_LEN, // Byte Length of ports at pm_tm_blk + GPE0_BLK_LEN, // Byte Length of ports at gpe0_blk + GPE1_BLK_LEN, // Byte Length of ports at gpe1_blk + GPE1_BASE, // offset in gpe model where gpe1 events start + 0, // _CST support + P_LVL2_LAT, // worst case HW latency to enter/exit C2 state + P_LVL3_LAT, // worst case HW latency to enter/exit C3 state + FLUSH_SIZE, // Size of area read to flush caches + FLUSH_STRIDE, // Stride used in flushing caches + DUTY_OFFSET, // bit location of duty cycle field in p_cnt reg + DUTY_WIDTH, // bit width of duty cycle field in p_cnt reg + DAY_ALRM, // index to day-of-month alarm in RTC CMOS RAM + MON_ALRM, // index to month-of-year alarm in RTC CMOS RAM + CENTURY, // index to century in RTC CMOS RAM + 0x0000, // Boot architecture flag + 0x00, // reserved + FLAG, + + { + 0x01, //Space ID + 0x8, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000001,//Address + }, + + 0x0, //Value to cause reset + {0,0,0}, //Reserved + 0x0000000000000000,//FACS Address + 0x0000000000000010,//DSDT Address + + + /*PM1A Event Block*/ + 0x1, //Space ID:SystemIO + 0x20, //Bit Width + 0x0, //Bit Offset + 0x2, //Encoded Access Width + 0x0000000000000001, //Address + + /*PM1B Event Block*/ + 0x1, //Space ID:SystemIO + 0x0, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*PM1A Control Block*/ + 0x1, //Space ID:SystemIO + 0x10, //Bit Width + 0x0, //Bit Offset + 0x02, //Encoded Access Width + 0000000000000001, //Address + + /*PM1B Control Block*/ + 0x1, //Space ID:SystemIO + 0x00, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*PM2 Control Block*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000001, //Address + + /*PM Timer Block*/ + 0x1, //Space ID:SystemIO + 0x20, //Bit Width + 0x0, //Bit Offset + 0x3, //Encoded Access Width + 0x0000000000000001, //Address + + /*GPE0 Block*/ + 0x1, //Space ID:SystemIO + 0x80, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000001, //Address + + /*GPE1 Block*/ + 0x1, //Space ID:SystemIO + 0x00, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*Sleep Control Register*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000000, //Address + + /*Sleep Status Register*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000000, //Address + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Facp; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facs.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facs.aslc new file mode 100644 index 000000000..9bcddeaad --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Facs.aslc @@ -0,0 +1,86 @@ +/** @file + FACS Table + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include + +EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE Facs = { + EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE, + sizeof (EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE), + + // + // Hardware Signature will be updated at runtime + // + 0x00000000, //HardwareSignature + 0x00, //FirmwareWakingVector + 0x00, //GlobalLock + 0x00, //Flags + 0x0000000000000000, //XFirmwareWakingVector + 0x02, //Version + { + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE + }, + 0x00, + { + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE + } +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Facs; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Gtdt.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Gtdt.aslc new file mode 100644 index 000000000..ab8a60ac0 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Gtdt.aslc @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE Gtdt = +{ + { + EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE), + EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x0000000000000000, //Timer Address + 0x00000001, //Flags + 0x00000000, //Secure PL1 Interrupt + 0x00000000, //SPL1 Flags + 0x00000000, //Non-Secure PL1 Interrupt + 0x00000000, //NSPL1 Flags + 0x00000000, //Virtual Timer Interrupt + 0x00000000, //VT Flags + 0x00000000, //Non-Secure PL2 Interrupt + 0x00000000, //NSPL2 Flags +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Gtdt; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Hest.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Hest.aslc new file mode 100644 index 000000000..08092acea --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Hest.aslc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#pragma pack(1) + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 ErrorEntryCount; + EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE GenHardWareError; + +} EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE; + +#pragma pack() + +EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE Hest = { + { + EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE), + EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x02, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00000001, //Error Source Count +{ + 0x0009, //Subtable Type:Generic Hardware Error Source + 0x0002, //Source Id + 0xFFFF, //Related Source Id + 0x00, //Reserved + 0x01, //Enabled + 0x00000001, //Records To Preallocate + 0x00000001, //Max Sections Per Record + 0x00001000, //Max Raw Data Length + + /* Error Status Address : [Generic Address Structure]*/ + { + 0x00, //Space ID:SystemMemory + 0x40, //Bit Width + 0x00, //Bit Offset + 0x04, //Encoded Access Width + 0xFFFF0000, //Address + }, + /*Notify : [Hardware Error Notification Structure]*/ + { + 0x03, //Notify Type:SCI + 0x1c, //Notify Length + 0x0000, //Configuration Write Enable + 0x00000000, //PollInterval + 0x00000000, //Vector + 0x00000000, //Polling Threshold Value + 0x00000000, //Polling Threshold Window + 0x00000000, //Error Threshold Value + 0x00000000, //Error Threshold Window + }, + 0x00001000, //Error Status Block Length +}, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Hest; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mcfg.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mcfg.aslc new file mode 100644 index 000000000..9451e9c50 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mcfg.aslc @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_MCFG_VERSION 0x1 + +#pragma pack(1) +typedef struct +{ + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT64 Reserved1; + UINT64 ullBaseAddress; + UINT16 usSegGroupNum; + UINT8 ucStartBusNum; + UINT8 ucEndBusNum; + UINT32 Reserved2; +}EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE; +#pragma pack() + +EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE Mcfg= +{ + { + EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE), + ACPI_5_0_MCFG_VERSION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x0000000000000000, //Reserved + 0x0000000000000000, //Base Address + 0x0000, //Segment Group Number + 0x00, //Start Bus Number + 0x00, //End Bus Number + 0x00000000, //Reserved +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Mcfg; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mpst.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mpst.aslc new file mode 100644 index 000000000..dfdda34a5 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Mpst.aslc @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define MAX_POWER_STATES_NUM 0x2 +#define MAX_PHYSICAL_COMPONENTS_NUM 0x3 +#define MAX_MEMORY_POWER_NODE_COUNT 0x2 +#define MAX_CHARACTERISTICS_COUNT 0x2 + +#pragma pack (1) +typedef struct +{ + EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE structre; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE state[MAX_POWER_STATES_NUM]; + UINT16 components[MAX_PHYSICAL_COMPONENTS_NUM]; +}EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_EX; + +typedef struct +{ + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE structre; + UINT64 ulResverd; +}EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_EX; + +typedef struct +{ + EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE table; + EFI_ACPI_5_0_MPST_MEMORY_POWER_NODE_TABLE node; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_EX powerNode[MAX_MEMORY_POWER_NODE_COUNT]; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE Characteristics; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_EX powerChar[MAX_CHARACTERISTICS_COUNT]; +}EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE_EX; +#pragma pack () + + +EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE_EX Mpst ={ + { + { + EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_SIGNATURE, + 0x000000B6, + EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00, //Channel ID + {0,0,0}, //Reserved + + }, + 0x0002, //Power Node Count + {0,0}, //Reserved + { + { + 0x00, //Flags + 0x00, //Reserved + 0x0000, //Node ID + 0x0000000000, //Length + 0x00000000000000000000, //ange Address + 0x00000000000000000000, //Range Length + 0x00000002, // Num Power + 0x00000003, // Num Physical Components + { + { + 0x00, //Power State + 0x00, //InfoIndex + }, + { + 0x00, //Power State + 0x00, //InfoIndex + }, + }, + 0x0000, //Component Id + 0x0001, //Component Id + 0x0002, //Component Id + }, + { + 0x00, //Flags + 0x00, //Reserved + 0x0000, //Node ID + 0x0000000000, //Length + 0x00000000000000000000, //ange Address + 0x00000000000000000000, //Range Length + 0x00000001, // Num Power + 0x00000001, // Num Physical Components + { + 0x00, //Power State + 0x00, //InfoIndex + }, + 0x0000, //Component Id + + }, + }, + + 0x0002, //Characteristics Count + {0,0}, //Reserved + { + { + 0x01, //Structure ID + 0x00, //Flags + 0x0000, //Reserved + 0x00000000, //Average Power + 0x00000000, //Power Saving + 0x0000000000000000, //Exit Latency + 0x0000000000000000, //Reserved + }, + { + 0x01, //Structure ID + 0x00, //Flags + 0x0000, //Reserved + 0x00000000, //Average Power + 0x00000000, //Power Saving + 0x0000000000000000, //Exit Latency + 0x0000000000000000, //Reserved + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Mpst; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Msct.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Msct.aslc new file mode 100644 index 000000000..80c9d59b4 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Msct.aslc @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION 0x1 +// +// MSCT Table definition +// +#pragma pack (1) +typedef struct { + UINT8 Revision; + UINT8 Length; + UINT32 ProxDomRangeLow; + UINT32 ProxDomRangeHigh; + UINT32 MaxProcessorCapacity; + UINT64 MaxMemoryCapacity; +} EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE; + +typedef struct { + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER Header; + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE ProxDomInfoStructure[4]; +} EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE; + +#pragma pack () + +EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE Msct = { + { + { + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE, + sizeof (EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE), + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + // + // Beginning of MSCT specific fields + // + 0x00000038, // OffsetProxDomInfo + 4 - 1, // MaxNumProxDom + 0x00000000, // MaxNumClockDom + 0x00000FFFFFFFFFFF, // MaxPhysicalAddress + }, + { + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000003, // ProxDomRangeHigh + 0x00000010, // MaxProcessorCapacity + 0x0000004000000000 // MaxMemoryCapacity + }, + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Msct; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Oem0.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Oem0.aslc new file mode 100644 index 000000000..2e84daf4a --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Oem0.aslc @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_5_0_OEM0_SIGNATURE SIGNATURE_32('O', 'E', 'M', '0') +#define ACPI_5_0_OEM0_REVISION 0x1 + +typedef struct{ + EFI_ACPI_DESCRIPTION_HEADER Header; +}EFI_ACPI_5_0_OEM0_TABLE; + +EFI_ACPI_5_0_OEM0_TABLE Oem0= +{ + { + EFI_ACPI_5_0_OEM0_SIGNATURE, + sizeof (EFI_ACPI_5_0_OEM0_TABLE), + ACPI_5_0_OEM0_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x0000000A, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Oem0; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Platform.h b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Platform.h new file mode 100644 index 000000000..147d3324e --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Platform.h @@ -0,0 +1,75 @@ +/** @file + Platform specific defines for constructing ACPI tables + + Copyright (c) 2008, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#ifndef _Platform_h_INCLUDED_ +#define _Platform_h_INCLUDED_ + +#include +#include + +// +// ACPI table information used to initialize tables.RTSMVEV8 +// +#define EFI_ACPI_OEM_ID 'L','I','N','A','R','O' // OEMID 6 bytes long +#define EFI_ACPI_OEM_TABLE_ID SIGNATURE_64('R','T','S','M','V','E','V','8' ) // OEM table id 8 bytes long +#define EFI_ACPI_OEM_REVISION 0x00000001 +#define EFI_ACPI_CREATOR_ID SIGNATURE_32('I','N','T','L') +#define EFI_ACPI_CREATOR_REVISION 0x20130517 + +#define INT_MODEL 0x01 +#define SCI_INT_VECTOR 0x0 +#define SMI_CMD_IO_PORT 0x0 +#define ACPI_ENABLE 0x0 +#define ACPI_DISABLE 0x0 +#define S4BIOS_REQ 0x00 +#define PM1a_EVT_BLK 0x00000001 +#define PM1b_EVT_BLK 0x00000000 +#define PM1a_CNT_BLK 0x00000001 +#define PM1b_CNT_BLK 0x00000000 +#define PM2_CNT_BLK 0x00000001 +#define PM_TMR_BLK 0x00000001 +#define GPE0_BLK 0x00000001 +#define GPE1_BLK 0x00000000 +#define PM1_EVT_LEN 0x04 +#define PM1_CNT_LEN 0x02 +#define PM2_CNT_LEN 0x01 +#define PM_TM_LEN 0x04 +#define GPE0_BLK_LEN 0x08 +#define GPE1_BLK_LEN 0x00 +#define GPE1_BASE 0x00 +#define RESERVED 0x00 +#define P_LVL2_LAT 0x0000 +#define P_LVL3_LAT 0x0000 +#define FLUSH_SIZE 0x0000 +#define FLUSH_STRIDE 0x0000 +#define DUTY_OFFSET 0x00 +#define DUTY_WIDTH 0x00 +#define DAY_ALRM 0x00 +#define MON_ALRM 0x00 +#define CENTURY 0x00 +#define FLAG 0x00321033 +#endif + diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Pmtt.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Pmtt.aslc new file mode 100644 index 000000000..f0b4f6cfe --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Pmtt.aslc @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_SOCKET 00 //socket +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_MEMCTRL 01 //Memory Controller +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_DIMM 02 //DIMM +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_RESVERVED 03 //RESVERVED + +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG_TLAD 01 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG_PHYELEMENT 02 // BIT1 - set to 1 since socket is a physical element of the topology +//Bit 2 and 3 - If 00, indicates that all components aggregated by this device implements volatile memory +// If 01, indicates that components aggregated by this device implements both volatile and non-volatile memory +// If 10, indicates that all components aggregated by this device implements non-volatile memory +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__VOLATILE 00 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__MIXED 4 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__NONVOLATILE 0x08 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__RSVD 0x0C + +#define MAXNUMBER_OF_PROXIMITY_DOMAINS 0x3 + +#define MAX_SOCKET 0x2 +#define NUM_MEM_CONTROLLERS 0x2 +#define MAX_DIMM 0x02 + +#pragma pack (1) +// PMMT Table fields +typedef struct { + UINT32 ReadLatency; + UINT32 WriteLatency; + UINT32 ReadBW; + UINT32 WriteBW; + UINT16 OptimalAccUnit; + UINT16 OptimalAccAlignment; +} EFI_ACPI_MEMCTRL_CHAR_TABLE; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + UINT16 PhyCompIdentifier; + UINT16 Rsvd2; + UINT32 Size; + UINT32 SmBiosHandle; +} EFI_ACPI_MEMORY_AGGREGATOR_DIMM_STRUC; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + EFI_ACPI_MEMCTRL_CHAR_TABLE MemCtrlCharTable; + UINT16 Rsvd2; + UINT16 NumProxDomains; + UINT32 ProxDomain[MAXNUMBER_OF_PROXIMITY_DOMAINS]; + EFI_ACPI_MEMORY_AGGREGATOR_DIMM_STRUC PhyCompIdentStruc[MAX_DIMM]; +} EFI_ACPI_MEMORY_AGGREGATOR_MEMCTRL_STRUC; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + UINT16 SckIdent; + UINT16 Rsvd2; + EFI_ACPI_MEMORY_AGGREGATOR_MEMCTRL_STRUC MemCtrlStruc[NUM_MEM_CONTROLLERS]; +} EFI_ACPI_MEMORY_AGGREGATOR_SOCKET_STRUC; + +typedef struct { + EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE Header; + EFI_ACPI_MEMORY_AGGREGATOR_SOCKET_STRUC TopLevelmemAggrDevStruc[MAX_SOCKET]; +} EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE; +#pragma pack () + + +EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE Pmtt = { + { + { + EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE), // Length + EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE_REVISION, // Revision + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + EFI_ACPI_RESERVED_DWORD, // Reserved[0] + }, + { + /*Socket 0*/ + { + 0x00, //Subtable Type:Socket + 0x00, //Reserved + 0x0080, //Length + 0x0001, //Flags + 0x0000, //Reserved + 0x0000, //Socket ID + 0x0000, //Reserved + { + /*Memory Controller 1*/ + + { + 0x01, //Subtable Type:Memory Controller + 0x00, //Reserved + 0x0054, //Length + 0x0005, //Flags + 0x0000, //Reserved + { + 0x00000000, //Read Latency + 0x00000000, //Write Latency + 0x00000000, //Read Bandwidth + 0x00000000, //Write Bandwidth + 0x0000, //Access Width + 0x0000, //Alignment + }, + 0x0000, //Reserved + MAXNUMBER_OF_PROXIMITY_DOMAINS, //Domain Count + 0x00000000, //Proximity Domain + 0x00000000, //Proximity Domain + 0x00000000, //Proximity Domain + { + /*DIMM 0*/ + { + 0x02, //Subtable Type:Physical Component (DIMM) + 0x00, //Reserved + 0x0014, //Length + 0x0002, //Flags + 0x0000, //Reserved + 0x0000, //Component ID + 0x0000, //Reserved + 0x00000000, //Memory Size + 0x00000000, //Bios Handle + }, + /*DIMM 1*/ + { + 0x02, //Subtable Type:Physical Component (DIMM) + 0x00, //Reserved + 0x0014, //Length + 0x0002, //Flags + 0x0000, //Reserved + 0x0000, //Component ID + 0x0000, //Reserved + 0x00000000, //Memory Size + 0x00000000, //Bios Handle + }, + }, + }, + + /*Memory Controller 2*/ + { + 0x01, //Subtable Type:Memory Controller + 0x00, //Reserved + 0x0020, //Length + 0x0001, //Flags + 0x0000, //Reserved + { + 0x00000000, //Read Latency + 0x00000000, //Write Latency + 0x00000000, //Read Bandwidth + 0x00000000, //Write Bandwidth + 0x0000, //Access Width + 0x0000 //Alignment + }, + 0x0000, //Reserved + 0x0000, //Domain Count + {0}, + {0}, + + }, + }, + }, + + + /*Socket 1*/ + { + 0x00, //Subtable Type:Socket + 0x00, //Reserved + 0x000c, //Length + 0x0001, //Flags + 0x0000, //Reserved + 0x0000, //Socket ID + 0x0000 //Reserved + }, + }, + + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Pmtt; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Slit.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Slit.aslc new file mode 100644 index 000000000..05d96e029 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Slit.aslc @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT 0x0000000000000014 + +#pragma pack(1) +typedef struct { + UINT8 Entry[EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT]; +} EFI_ACPI_5_0_NUMBER_OF_SYSTEM_LOCALITIES_STRUCTURE; + +typedef struct { + EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER Header; + EFI_ACPI_5_0_NUMBER_OF_SYSTEM_LOCALITIES_STRUCTURE NumSlit[EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT]; + +} EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE; +#pragma pack() + +// +// System Locality Information Table +// Please modify all values in Slit.h only. +// +EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE Slit = { + { + { + EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE), + EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION, + }, + // + // Beginning of SLIT specific fields + // + EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT, + }, + { + {0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27}, //Locality 0 + {0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,}, //Locality 1 + {0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,}, //Locality 2 + {0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,}, //Locality 3 + {0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23,}, //Locality 4 + {0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,}, //Locality 5 + {0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21,}, //Locality 6 + {0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,}, //Locality 7 + {0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,}, //Locality 8 + {0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,}, //Locality 9 + {0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,}, //Locality 10 + {0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,}, //Locality 11 + {0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,}, //Locality 12 + {0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,}, //Locality 13 + {0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19,}, //Locality 14 + {0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18,}, //Locality 15 + {0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17,}, //Locality 16 + {0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16,}, //Locality 17 + {0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10,}, //Locality 18 + {0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A,}, //Locality 19 + }, +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Slit; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Spmi.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Spmi.aslc new file mode 100644 index 000000000..77836a471 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Spmi.aslc @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_SPMI_REVISION 0x4 + +#pragma pack(1) +typedef struct +{ + + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT8 ucInterfaceType; + UINT8 Reserved; + UINT16 usIPMISpecVersion; + UINT8 ucInterruptType; + UINT8 ucGPENumber; + UINT8 Reserved2; + UINT8 ucPCIDeviceFlag; + UINT32 uwInterrupt; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE IPMIRegister; + UINT8 ucPCISegment; + UINT8 ucPCIBus; + UINT8 ucPCIDevice; + UINT8 ucPCIFunction; + UINT8 Reserved3; +}EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE; +#pragma pack() + +EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE Spmi = +{ + { + EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE), + ACPI_5_0_SPMI_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00, //Interface Type + 0x00, //Reserved + 0x0000, //IPMI Spec Version + 0x00, //Interrupt Type + 0x00, //GPE Number + 0x00, //Reserved + 0x00, //PCI Device Flag + 0x00000000, //Interrupt + { + 0x00, //Space ID:SystemMemory + 0x08, //Bit Width + 0x00, //Bit Offset + 0x01, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x00, //PCI Segment + 0x00, //PCI Bus + 0x00, //PCI Device + 0x00, //PCI Function + 0x00, //Reserved +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Spmi; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Srat.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Srat.aslc new file mode 100644 index 000000000..d5c433ffc --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Srat.aslc @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + + +// +// Define the number of each table type. +// This is where the table layout is modified. +// +#define EFI_ACPI_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE_COUNT 4 +#define EFI_ACPI_MEMORY_AFFINITY_STRUCTURE_COUNT 4 + + +#pragma pack(1) +typedef struct { + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER Header; + EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE Apic; + EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE Memory; + EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE x2APIC; +} EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE; + +#pragma pack() + + +// +// Static Resource Affinity Table definition +// +EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE Srat = { + { + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE), + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION, + /*Reserved*/ + 0x00000001, // Reserved to be 1 for backward compatibility + EFI_ACPI_RESERVED_QWORD + }, + /**/ + { + 0x00, // Subtable Type:Processor Local APIC/SAPIC Affinity + sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE), //Length + 0x00, //Proximity Domain Low(8) + 0x00, //Apic ID + 0x00000001, //Flags + 0x00, //Local Sapic EID + {0,0,0}, //Proximity Domain High(24) + 0x00000000, //ClockDomain + }, + // + // + // Memory Affinity + // + { + 0x01, // Subtable Type:Memory Affinity + sizeof (EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE), // Length + 0x00000000, // Proximity Domain + EFI_ACPI_RESERVED_WORD, // Reserved + 0x00000000, // Address Base Low + 0x00000000, // Address Base High + 0x0009FC00, // Length Low + 0x00000000, // Length High + EFI_ACPI_RESERVED_DWORD, // Reserved + 0x00000001, // Flags disabled, until enabled by Platform driver + EFI_ACPI_RESERVED_QWORD , // Reserved + }, + + /*Processor Local x2APIC Affinity*/ + { + 0x02, // Subtable Type:Processor Local x2APIC Affinity + sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE), + {0,0}, //Reserved1 + 0x00000000, //Proximity Domain + 0x00000000, //Apic ID + 0x00000001, //Flags + 0x00000000, //Clock Domain + {0,0,0,0}, //Reserved2 + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Srat; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ssdt0.asl b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ssdt0.asl new file mode 100644 index 000000000..c13ceef56 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Ssdt0.asl @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2013, Al Stone + * + * [SSDT] Description of the armv8 VE Model + * + * This source is released under the terms of the GPLv2. + */ + +DefinitionBlock ( + "ssdt0.aml", // output filename + "SSDT", // table signature + 2, // SSDT compliance revision + "LINARO", // OEM ID + "RTSMVEV8", // table ID + 0x00000001) // OEM revision +{ +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Uefi.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Uefi.aslc new file mode 100644 index 000000000..c3bbce3ed --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-aemv8a/Uefi.aslc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + + +#define ACPI_5_0_UEFI_REVISION 0x1 + +#pragma pack(1) + +typedef struct +{ + EFI_ACPI_DESCRIPTION_HEADER Header; + EFI_GUID guid; + UINT16 usDataOffset; +}EFI_ACPI_5_0_UEFI_TABLE; +#pragma pack() + +EFI_ACPI_5_0_UEFI_TABLE Uefi= +{ + { + EFI_ACPI_5_0_UEFI_ACPI_DATA_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_UEFI_TABLE), + ACPI_5_0_UEFI_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + //03020100-0504-0706-0809-0A0B0C0D0E0F + { 0x03020100, 0x0504, 0x0706, { 0x08, 0x09, 0x0A, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }, + 0x0036 //Data Offset +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Uefi; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/AcpiTables.inf b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/AcpiTables.inf new file mode 100644 index 000000000..ae3a66b68 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/AcpiTables.inf @@ -0,0 +1,70 @@ +## @file +# Component description file for PlatformAcpiTables module. +# +# ACPI table data and ASL sources required to boot the platform. +# +# Copyright (c) 2008 - 2010, Intel Corporation. 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. +# +## + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = PlatformAcpiTables + FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD + MODULE_TYPE = USER_DEFINED + VERSION_STRING = 1.0 + FFS_EXT = SEC + COMPILE_SELECT = .c=acpi_c + +[Sources] + Platform.h + Apic.aslc + Bert.aslc + Dsdt.asl + Ecdt.aslc + Einj.aslc + Erst.aslc + Facp.aslc + Facs.aslc + Gtdt.aslc + Hest.aslc + Mcfg.aslc + Mpst.aslc + Msct.aslc + Oem0.aslc + Pmtt.aslc + Slit.aslc + Spmi.aslc + Srat.aslc + Ssdt0.asl + Uefi.aslc + + ###rsdp/xsdt created by building the acpi table + ###tables need to change format + #asf!.asl + #bgrt.asl + #boot.asl + #cpep.asl + #fpdt.asl + #tpm2.asl + +[Packages] + MdePkg/MdePkg.dec diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Apic.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Apic.aslc new file mode 100644 index 000000000..e18c1a555 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Apic.aslc @@ -0,0 +1,216 @@ +/** @file + MADT Table + + This file contains a structure definition for the ACPI 1.0 Multiple APIC + Description Table (MADT). + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ +#include +#include + +// +// Local APIC address +// +#define EFI_ACPI_LOCAL_APIC_ADDRESS 0x2C002000 // TBD + + +#define ACPI_PROCESSOR_LOCAL_GIC 0xb +#define ACPI_GIC_DISTRIBUTOR 0xc + +//These addresses are defined by the MP shared region defined in the UEFI memory map. +#define MP_REGISTER_ADDRESS_GIC0 0x80301000 +#define DISTRIBUTOR_PHYSICAL_ADDRESS 0x02000000 + +#define ACPI_GICC_NUM 0x8 + +// +// Ensure proper structure formats +// +#pragma pack (1) +// +// ACPI 5.0 MADT structure +// +typedef struct { + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header; + EFI_ACPI_5_0_GIC_STRUCTURE Gic[ACPI_GICC_NUM]; + EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE Distributor; + +} EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE; + +#pragma pack () + +// +// Multiple APIC Description Table +// +EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = { + { + { + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE), + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + + // + // MADT specific fields + // + EFI_ACPI_LOCAL_APIC_ADDRESS, + 0x00000000 + }, + { + //LocalGic0 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x00, //GicId + 0x00, //AcpiProcessorUid + 0x00000001, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic1 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x01, //GicId + 0x01, //AcpiProcessorUid + EFI_ACPI_5_0_GIC_ENABLED, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000 //PhysicalBaseAddress + }, + //LocalGic2 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type: + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x02, //GicId + 0x02, //AcpiProcessorUid + EFI_ACPI_5_0_GIC_ENABLED, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic3 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x03, //GicId + 0x03, //AcpiProcessorUid + EFI_ACPI_5_0_GIC_ENABLED, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic4 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x04, //GicId + 0x04, //AcpiProcessorUid + 0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic5 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x05, //GicId + 0x05, //AcpiProcessorUid + 0x0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + //LocalGic6 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x06, //GicId + 0x06, //AcpiProcessorUid + 0x0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000 , //PhysicalBaseAddress + }, + //LocalGic7 + { + ACPI_PROCESSOR_LOCAL_GIC, //Type + sizeof (EFI_ACPI_5_0_GIC_STRUCTURE), //Length + 0x00, //Reserved + 0x07, //GicId + 0x07, //AcpiProcessorUid + 0x0, //Flags + 0x00000000, //ParkingProtocolVersion + 0x00000000, //PerformanceInterruptGsiv + 0x0000000000000000, //ParkedAddress + 0x000000002C002000, //PhysicalBaseAddress + }, + }, + //Distributor + { + ACPI_GIC_DISTRIBUTOR, //Type + sizeof (EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE), //Length + 0, //Reserved1 + 0, //GicId + 0x000000002C001000, //PhysicalBaseAddress + 0, //SystemVectorBase + 0 //Reserved2 + } + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Madt; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Bert.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Bert.aslc new file mode 100644 index 000000000..0fe2bc43a --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Bert.aslc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +// Generic error severity in data entry +#define BOOT_ERROR_SEVERITY_RECOVERABLE 0 +#define BOOT_ERROR_SEVERITY_FATAL 1 +#define BOOT_ERROR_SEVERITY_CORRECTED 2 +#define BOOT_ERROR_SEVERITY_NONE 3 + +#pragma pack(1) + +// ErrorStatus block record definitions for various errors +typedef struct { + UINT32 UeValid:1; + UINT32 CeValid:1; + UINT32 MultipleUeValid:1; + UINT32 MultipleCeValid:1; + UINT32 NumErrorDataEntry:10; + UINT32 Resv1:18; +} BOOT_ERROR_BLOCK_STATUS; + + +typedef struct { + // Error Status block + BOOT_ERROR_BLOCK_STATUS BlockStatus; + UINT32 RawDataOffset; + UINT32 RawDataSize; + UINT32 ErrDataSize; + UINT32 Severity; + // Error Status data... +} EFI_ACPI_5_0_BOOT_ERROR_REGION; + + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 BootErrorRegionLen; + UINT64 BootErrorRegion; +} EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE; + +#pragma pack() + + + +EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE Bert = { + { + EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE), + EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x02, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x9D, //BootErrorRegionLen + 0xFFFF0008 //BootErrorRegion + +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Bert; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Dsdt.asl b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Dsdt.asl new file mode 100644 index 000000000..c4185fecb --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Dsdt.asl @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2013, Al Stone + * + * [DSDT] Description of the armv8 VE Model + * + * This source is released under the terms of the GPLv2. + */ + +DefinitionBlock ( + "dsdt.aml", // output filename + "DSDT", // table signature + 2, // DSDT compliance revision + "LINARO", // OEM ID + "RTSMVEV8", // table ID + 0x00000003) // 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) + } + } + + Device (HED) + { + Name (_HID, EisaId ("PNP0C33")) + Name (_UID, 0x00) + } + + Device (SCK0) + { + Name (_HID, "ACPI0004") + Name (_UID, 0x00) + Method (_STA, 0, NotSerialized) + { + Return (0x0F) + } + + Device (PRC0) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x00) + + /* CPU0 will be always present */ + Method (_STA, 0, NotSerialized) + { + Return (0x0F) + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* type, len, reserved, gic_id */ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* uid, flags */ + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parking_version, performance_interrupt */ + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* parked_address */ + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* base_address */ + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC1) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x01) + + Name (STA1, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA1) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA1, 0x0F)) + { + Store (0x00, STA1) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + /* 0008 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + /* 0008 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC2) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x02) + + Name (STA2, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA2) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA2, 0x0F)) + { + Store (0x00, STA2) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + /* 0008 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + /* 0008 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + + Device (PRC3) + { + Name (_HID, "ACPI0007") + Name (_UID, 0x03) + + Name (STA3, 0x0F) + Method (_STA, 0, NotSerialized) + { + Return (STA3) + } + + Method (_EJ0, 1, NotSerialized) + { + If (LEqual (STA3, 0x0F)) + { + Store (0x00, STA3) + } + } + + Name (MAT0, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + /* 0008 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Name (MAT1, Buffer (0x28) + { + /* 0000 */ 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + /* 0008 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }) + + Method (_MAT, 0, NotSerialized) + { + If (_STA()) + { + Return (MAT0) + } + Else + { + Return (MAT1) + } + } + } + } + + Device (NET0) { + Name (_HID, "LINA0003") + Name (_UID, 0) + + Method (_CRS, 0x0, Serialized) { + Name (RBUF, ResourceTemplate () { + Memory32Fixed (ReadWrite, 0x1a000000, 0x00010000) + Interrupt (ResourceConsumer, Edge, ActiveBoth, Exclusive, , , ) {0x2F} + }) + Return (RBUF) + } + } + } +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ecdt.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ecdt.aslc new file mode 100644 index 000000000..d817d5988 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ecdt.aslc @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +typedef struct +{ + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE table; + UINT8 ucNamepath; +}EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX; + + +EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX Ecdt= { + { + { + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_EX), + EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + /*Command/Status Register Generic Address Structure*/ + { + 0x01, //Space ID:SystemIO + 0x08, //Bit Width + 0x00, //Bit Offset + 0x00, //Encoded Access Width + 0x0000000000000066, //Address + }, + /*Data Register Generic Address Structure*/ + { + 0x01, //Space ID:SystemIO + 0x08, //Bit Width + 0x00, //Bit Offset + 0x00, //Encoded Access Width + 0x0000000000000062, //Address + }, + 0x00000000, //UID + 0x9, //GPE Number + }, + 0x0 //Namepath +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Ecdt; +} + diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Einj.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Einj.aslc new file mode 100644 index 000000000..7392cc2f3 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Einj.aslc @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#pragma pack (1) +typedef struct { + UINT8 Operation; + UINT8 Instruction; + UINT8 Flags; + UINT8 Reserved8; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE Register; + UINT64 Value; + UINT64 Mask; +} EFI_ACPI_WHEA_SERIALIZATION_ACTION; + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 InjectionHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; +} EFI_ACPI_WHEA_ERROR_INJECTION_HEADER; + +typedef struct { + EFI_ACPI_WHEA_ERROR_INJECTION_HEADER header; + EFI_ACPI_WHEA_SERIALIZATION_ACTION InstructionEntry[8]; +} EFI_ACPI_5_0_ERROR_INJECTION_TABLE; + +#pragma pack () + + +EFI_ACPI_5_0_ERROR_INJECTION_TABLE Einj = { + { + { + EFI_ACPI_5_0_ERROR_INJECTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_ERROR_INJECTION_TABLE), + EFI_ACPI_5_0_ERROR_INJECTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00000002, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + sizeof(EFI_ACPI_WHEA_ERROR_INJECTION_HEADER), + EFI_ACPI_RESERVED_DWORD, + 0x08, /*Injection Entry Count*/ + }, + + { + { //Action0 + 0x00, // Action:Begin Operation + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action1 + 0x01, // Action:Get Trigger Table + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action2 + 0x02, // Action:Set Error Type + 0x2, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action3 + 0x03, // Action:Get Error Type + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action4 + 0x04, // Action:End Operation + 0x3, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action5 + 0x05, // Action:Execute Operation + 0x3, // Instruction:Write Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_IO, //Space ID + 0x10, //Bit Width + 0x0, //Bit Offset + 0x2, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action6 + 0x06, // Action:Check Busy Status + 0x1, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action7 + 0x07, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + { + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Einj; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Erst.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Erst.aslc new file mode 100644 index 000000000..0170b99f4 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Erst.aslc @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACTION_BEGIN_WRITE_OPERATION 0x00 +#define ACTION_BEGIN_READ_OPERATION 0x01 +#define ACTION_BEGIN_CLEAR_OPERATION 0x02 +#define ACTION_END_OPERATION 0x03 +#define ACTION_SET_RECORD_OFFSET 0x04 +#define ACTION_EXECUTE_OPEARTION 0x05 +#define ACTION_CHECK_BUSY_STATUS 0x06 +#define ACTION_GET_COMMAND_STATUS 0x07 +#define ACTION_GET_RECORD_IDENTIFIER 0x08 +#define ACTION_SET_RECORD_IDENTIFIER 0x09 +#define ACTION_GET_RECORD_COUNT 0x0A +#define ACTION_BEGIN_DUMMY_WRITE_OPERATION 0x0B +#define ACTION_GET_NEXT_RECORD_IDENTIFIER 0x0C +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE 0x0D +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH 0x0E +#define ACTION_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES 0x0F + + +#pragma pack (1) + +typedef struct { + UINT8 Operation; + UINT8 Instruction; + UINT8 Flags; + UINT8 Reserved8; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE Register; + UINT64 Value; + UINT64 Mask; +} EFI_ACPI_5_0_SERIALIZATION_ACTION; + + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 SerializationHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; + EFI_ACPI_5_0_SERIALIZATION_ACTION InstructionEntry[16]; +} EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE; + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 SerializationHeaderSize; + UINT32 Resv1; + UINT32 InstructionEntryCount; +} EFI_ACPI_5_0_SERIALIZATION_ACTION_HEADER; +#pragma pack () + + + +EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE Erst = { + { + EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_BOOT_ERROR_RECORD_SERIALIZATION_TABLE), + EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00000002, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + sizeof(EFI_ACPI_5_0_SERIALIZATION_ACTION_HEADER), + EFI_ACPI_RESERVED_DWORD, + 0x10, + { + { //Action0 + 0x00, // Action:Begin Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0100, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action1 + 0x01, // Action:Begin Read Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0108, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action2 + 0x02, // Action:Begin Clear Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0110, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action3 + 0x03, // Action:Begin Clear Operation + 0x4, // Instruction:Noop + 0x1, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0118, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action4 + 0x04, // Action:Begin Clear Operation + 0x2, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0120, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action5 + 0x05, // Action:Execute Operation + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_5_0_SYSTEM_MEMORY, //Space ID + 0x8, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0xFFFF0128, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action6 + 0x06, // Action:Check Busy Status + 0x1, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0130, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action7 + 0x07, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0138, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action8 + 0x08, // Action:Get Command Status + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0140, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action9 + 0x09, // Action:Set Record Identifier + 0x2, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0148, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action10 + 0x0A, // Action:Get Record Count + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0150, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action11 + 0x0B, // Action:Begin Dummy Write + 0x3, // Instruction:Write Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0158, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action12 + 0x0C, // Action:Unused/Unknown Action + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0160, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action13 + 0x0D, // Action:Get Error Address Range + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0168, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action14 + 0x0E, // Action:Get Error Address Length + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0170, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + { //Action15 + 0x0F, // Action:Get Error Attributes + 0x0, // Instruction:Read Register + 0x0, // Flags + 0x00, // Reserved + /*Register Region*/ + EFI_ACPI_3_0_SYSTEM_MEMORY, //Space ID + 0x40, //Bit Width + 0x0, //Bit Offset + 0x4, //Encoded Access Width + 0xFFFF0178, //Address + 0x0000000000000000, // Value for InjectError() + 0xFFFFFFFFFFFFFFFF // Mask is only valid for 32-bits + }, + } + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Erst; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facp.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facp.aslc new file mode 100644 index 000000000..729c5bc38 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facp.aslc @@ -0,0 +1,175 @@ +/** @file + FACP Table + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include "Platform.h" + +EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE Facp = { + { + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE), + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION, + 0, // to make sum of entire table == 0 + {EFI_ACPI_OEM_ID}, // OEMID is a 6 bytes long field + EFI_ACPI_OEM_TABLE_ID, // OEM table identification(8 bytes long) + 0x00, // OEM revision number + EFI_ACPI_CREATOR_ID, // ASL compiler vendor ID + EFI_ACPI_CREATOR_REVISION // ASL compiler revision number + }, + 0, // Physical addesss of FACS + 0x00000010, // Physical address of DSDT + 0x0, // System Interrupt Model + 0x4, // PM Profile + SCI_INT_VECTOR, // System vector of SCI interrupt + SMI_CMD_IO_PORT, // Port address of SMI command port + ACPI_ENABLE, // value to write to port smi_cmd to enable ACPI + ACPI_DISABLE, // value to write to port smi_cmd to disable ACPI + S4BIOS_REQ, // Value to write to SMI CMD port to enter the S4BIOS state + 0, // PState control + PM1a_EVT_BLK, // Port address of Power Mgt 1a Event Reg Blk + PM1b_EVT_BLK, // Port address of Power Mgt 1b Event Reg Blk + PM1a_CNT_BLK, // Port address of Power Mgt 1a Ctrl Reg Blk + PM1b_CNT_BLK, // Port address of Power Mgt 1b Ctrl Reg Blk + PM2_CNT_BLK, // Port address of Power Mgt 2 Ctrl Reg Blk + PM_TMR_BLK, // Port address of Power Mgt Timer Ctrl Reg Blk + GPE0_BLK, // Port addr of General Purpose Event 0 Reg Blk + GPE1_BLK, // Port addr of General Purpose Event 1 Reg Blk + PM1_EVT_LEN, // Byte Length of ports at pm1X_evt_blk + PM1_CNT_LEN, // Byte Length of ports at pm1X_cnt_blk + PM2_CNT_LEN, // Byte Length of ports at pm2_cnt_blk + PM_TM_LEN, // Byte Length of ports at pm_tm_blk + GPE0_BLK_LEN, // Byte Length of ports at gpe0_blk + GPE1_BLK_LEN, // Byte Length of ports at gpe1_blk + GPE1_BASE, // offset in gpe model where gpe1 events start + 0, // _CST support + P_LVL2_LAT, // worst case HW latency to enter/exit C2 state + P_LVL3_LAT, // worst case HW latency to enter/exit C3 state + FLUSH_SIZE, // Size of area read to flush caches + FLUSH_STRIDE, // Stride used in flushing caches + DUTY_OFFSET, // bit location of duty cycle field in p_cnt reg + DUTY_WIDTH, // bit width of duty cycle field in p_cnt reg + DAY_ALRM, // index to day-of-month alarm in RTC CMOS RAM + MON_ALRM, // index to month-of-year alarm in RTC CMOS RAM + CENTURY, // index to century in RTC CMOS RAM + 0x0000, // Boot architecture flag + 0x00, // reserved + FLAG, + + { + 0x01, //Space ID + 0x8, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000001,//Address + }, + + 0x0, //Value to cause reset + {0,0,0}, //Reserved + 0x0000000000000000,//FACS Address + 0x0000000000000010,//DSDT Address + + + /*PM1A Event Block*/ + 0x1, //Space ID:SystemIO + 0x20, //Bit Width + 0x0, //Bit Offset + 0x2, //Encoded Access Width + 0x0000000000000001, //Address + + /*PM1B Event Block*/ + 0x1, //Space ID:SystemIO + 0x0, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*PM1A Control Block*/ + 0x1, //Space ID:SystemIO + 0x10, //Bit Width + 0x0, //Bit Offset + 0x02, //Encoded Access Width + 0000000000000001, //Address + + /*PM1B Control Block*/ + 0x1, //Space ID:SystemIO + 0x00, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*PM2 Control Block*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000001, //Address + + /*PM Timer Block*/ + 0x1, //Space ID:SystemIO + 0x20, //Bit Width + 0x0, //Bit Offset + 0x3, //Encoded Access Width + 0x0000000000000001, //Address + + /*GPE0 Block*/ + 0x1, //Space ID:SystemIO + 0x80, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000001, //Address + + /*GPE1 Block*/ + 0x1, //Space ID:SystemIO + 0x00, //Bit Width + 0x0, //Bit Offset + 0x0, //Encoded Access Width + 0x0000000000000000, //Address + + /*Sleep Control Register*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000000, //Address + + /*Sleep Status Register*/ + 0x1, //Space ID:SystemIO + 0x08, //Bit Width + 0x0, //Bit Offset + 0x1, //Encoded Access Width + 0x0000000000000000, //Address + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Facp; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facs.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facs.aslc new file mode 100644 index 000000000..9bcddeaad --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Facs.aslc @@ -0,0 +1,86 @@ +/** @file + FACS Table + + Copyright (c) 2008 - 2012, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include + +EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE Facs = { + EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE, + sizeof (EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE), + + // + // Hardware Signature will be updated at runtime + // + 0x00000000, //HardwareSignature + 0x00, //FirmwareWakingVector + 0x00, //GlobalLock + 0x00, //Flags + 0x0000000000000000, //XFirmwareWakingVector + 0x02, //Version + { + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE + }, + 0x00, + { + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE + } +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Facs; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Gtdt.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Gtdt.aslc new file mode 100644 index 000000000..ab8a60ac0 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Gtdt.aslc @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE Gtdt = +{ + { + EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE), + EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x0000000000000000, //Timer Address + 0x00000001, //Flags + 0x00000000, //Secure PL1 Interrupt + 0x00000000, //SPL1 Flags + 0x00000000, //Non-Secure PL1 Interrupt + 0x00000000, //NSPL1 Flags + 0x00000000, //Virtual Timer Interrupt + 0x00000000, //VT Flags + 0x00000000, //Non-Secure PL2 Interrupt + 0x00000000, //NSPL2 Flags +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Gtdt; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Hest.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Hest.aslc new file mode 100644 index 000000000..08092acea --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Hest.aslc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#pragma pack(1) + +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT32 ErrorEntryCount; + EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE GenHardWareError; + +} EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE; + +#pragma pack() + +EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE Hest = { + { + EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE), + EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x02, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00000001, //Error Source Count +{ + 0x0009, //Subtable Type:Generic Hardware Error Source + 0x0002, //Source Id + 0xFFFF, //Related Source Id + 0x00, //Reserved + 0x01, //Enabled + 0x00000001, //Records To Preallocate + 0x00000001, //Max Sections Per Record + 0x00001000, //Max Raw Data Length + + /* Error Status Address : [Generic Address Structure]*/ + { + 0x00, //Space ID:SystemMemory + 0x40, //Bit Width + 0x00, //Bit Offset + 0x04, //Encoded Access Width + 0xFFFF0000, //Address + }, + /*Notify : [Hardware Error Notification Structure]*/ + { + 0x03, //Notify Type:SCI + 0x1c, //Notify Length + 0x0000, //Configuration Write Enable + 0x00000000, //PollInterval + 0x00000000, //Vector + 0x00000000, //Polling Threshold Value + 0x00000000, //Polling Threshold Window + 0x00000000, //Error Threshold Value + 0x00000000, //Error Threshold Window + }, + 0x00001000, //Error Status Block Length +}, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Hest; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mcfg.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mcfg.aslc new file mode 100644 index 000000000..9451e9c50 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mcfg.aslc @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_MCFG_VERSION 0x1 + +#pragma pack(1) +typedef struct +{ + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT64 Reserved1; + UINT64 ullBaseAddress; + UINT16 usSegGroupNum; + UINT8 ucStartBusNum; + UINT8 ucEndBusNum; + UINT32 Reserved2; +}EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE; +#pragma pack() + +EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE Mcfg= +{ + { + EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_TABLE), + ACPI_5_0_MCFG_VERSION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x0000000000000000, //Reserved + 0x0000000000000000, //Base Address + 0x0000, //Segment Group Number + 0x00, //Start Bus Number + 0x00, //End Bus Number + 0x00000000, //Reserved +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Mcfg; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mpst.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mpst.aslc new file mode 100644 index 000000000..dfdda34a5 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Mpst.aslc @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define MAX_POWER_STATES_NUM 0x2 +#define MAX_PHYSICAL_COMPONENTS_NUM 0x3 +#define MAX_MEMORY_POWER_NODE_COUNT 0x2 +#define MAX_CHARACTERISTICS_COUNT 0x2 + +#pragma pack (1) +typedef struct +{ + EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE structre; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE state[MAX_POWER_STATES_NUM]; + UINT16 components[MAX_PHYSICAL_COMPONENTS_NUM]; +}EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_EX; + +typedef struct +{ + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE structre; + UINT64 ulResverd; +}EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_EX; + +typedef struct +{ + EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE table; + EFI_ACPI_5_0_MPST_MEMORY_POWER_NODE_TABLE node; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_EX powerNode[MAX_MEMORY_POWER_NODE_COUNT]; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE Characteristics; + EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_EX powerChar[MAX_CHARACTERISTICS_COUNT]; +}EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE_EX; +#pragma pack () + + +EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE_EX Mpst ={ + { + { + EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_SIGNATURE, + 0x000000B6, + EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00, //Channel ID + {0,0,0}, //Reserved + + }, + 0x0002, //Power Node Count + {0,0}, //Reserved + { + { + 0x00, //Flags + 0x00, //Reserved + 0x0000, //Node ID + 0x0000000000, //Length + 0x00000000000000000000, //ange Address + 0x00000000000000000000, //Range Length + 0x00000002, // Num Power + 0x00000003, // Num Physical Components + { + { + 0x00, //Power State + 0x00, //InfoIndex + }, + { + 0x00, //Power State + 0x00, //InfoIndex + }, + }, + 0x0000, //Component Id + 0x0001, //Component Id + 0x0002, //Component Id + }, + { + 0x00, //Flags + 0x00, //Reserved + 0x0000, //Node ID + 0x0000000000, //Length + 0x00000000000000000000, //ange Address + 0x00000000000000000000, //Range Length + 0x00000001, // Num Power + 0x00000001, // Num Physical Components + { + 0x00, //Power State + 0x00, //InfoIndex + }, + 0x0000, //Component Id + + }, + }, + + 0x0002, //Characteristics Count + {0,0}, //Reserved + { + { + 0x01, //Structure ID + 0x00, //Flags + 0x0000, //Reserved + 0x00000000, //Average Power + 0x00000000, //Power Saving + 0x0000000000000000, //Exit Latency + 0x0000000000000000, //Reserved + }, + { + 0x01, //Structure ID + 0x00, //Flags + 0x0000, //Reserved + 0x00000000, //Average Power + 0x00000000, //Power Saving + 0x0000000000000000, //Exit Latency + 0x0000000000000000, //Reserved + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Mpst; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Msct.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Msct.aslc new file mode 100644 index 000000000..80c9d59b4 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Msct.aslc @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION 0x1 +// +// MSCT Table definition +// +#pragma pack (1) +typedef struct { + UINT8 Revision; + UINT8 Length; + UINT32 ProxDomRangeLow; + UINT32 ProxDomRangeHigh; + UINT32 MaxProcessorCapacity; + UINT64 MaxMemoryCapacity; +} EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE; + +typedef struct { + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER Header; + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE ProxDomInfoStructure[4]; +} EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE; + +#pragma pack () + +EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE Msct = { + { + { + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE, + sizeof (EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE), + EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + // + // Beginning of MSCT specific fields + // + 0x00000038, // OffsetProxDomInfo + 4 - 1, // MaxNumProxDom + 0x00000000, // MaxNumClockDom + 0x00000FFFFFFFFFFF, // MaxPhysicalAddress + }, + { + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000003, // ProxDomRangeHigh + 0x00000010, // MaxProcessorCapacity + 0x0000004000000000 // MaxMemoryCapacity + }, + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + + { + EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION, // Revision + sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE), // Length + 0x00000000, // ProxDomRangeLow + 0x00000000, // ProxDomRangeHigh + 0x00000000, // MaxProcessorCapacity + 0x0000000000000000, // MaxMemoryCapacity + }, + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Msct; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Oem0.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Oem0.aslc new file mode 100644 index 000000000..2e84daf4a --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Oem0.aslc @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_5_0_OEM0_SIGNATURE SIGNATURE_32('O', 'E', 'M', '0') +#define ACPI_5_0_OEM0_REVISION 0x1 + +typedef struct{ + EFI_ACPI_DESCRIPTION_HEADER Header; +}EFI_ACPI_5_0_OEM0_TABLE; + +EFI_ACPI_5_0_OEM0_TABLE Oem0= +{ + { + EFI_ACPI_5_0_OEM0_SIGNATURE, + sizeof (EFI_ACPI_5_0_OEM0_TABLE), + ACPI_5_0_OEM0_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x0000000A, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Oem0; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Platform.h b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Platform.h new file mode 100644 index 000000000..0e06a8581 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Platform.h @@ -0,0 +1,75 @@ +/** @file + Platform specific defines for constructing ACPI tables + + Copyright (c) 2008, Intel Corporation. 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. + +**/ + +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#ifndef _Platform_h_INCLUDED_ +#define _Platform_h_INCLUDED_ + +#include +#include + +// +// ACPI table information used to initialize tables.RTSMVEV8 +// +#define EFI_ACPI_OEM_ID 'L','I','N','A','R','O' // OEMID 6 bytes long +#define EFI_ACPI_OEM_TABLE_ID SIGNATURE_64('R','T','S','M','V','E','V','7' ) // OEM table id 8 bytes long +#define EFI_ACPI_OEM_REVISION 0x00000001 +#define EFI_ACPI_CREATOR_ID SIGNATURE_32('I','N','T','L') +#define EFI_ACPI_CREATOR_REVISION 0x20130517 + +#define INT_MODEL 0x01 +#define SCI_INT_VECTOR 0x0 +#define SMI_CMD_IO_PORT 0x0 +#define ACPI_ENABLE 0x0 +#define ACPI_DISABLE 0x0 +#define S4BIOS_REQ 0x00 +#define PM1a_EVT_BLK 0x00000001 +#define PM1b_EVT_BLK 0x00000000 +#define PM1a_CNT_BLK 0x00000001 +#define PM1b_CNT_BLK 0x00000000 +#define PM2_CNT_BLK 0x00000001 +#define PM_TMR_BLK 0x00000001 +#define GPE0_BLK 0x00000001 +#define GPE1_BLK 0x00000000 +#define PM1_EVT_LEN 0x04 +#define PM1_CNT_LEN 0x02 +#define PM2_CNT_LEN 0x01 +#define PM_TM_LEN 0x04 +#define GPE0_BLK_LEN 0x08 +#define GPE1_BLK_LEN 0x00 +#define GPE1_BASE 0x00 +#define RESERVED 0x00 +#define P_LVL2_LAT 0x0000 +#define P_LVL3_LAT 0x0000 +#define FLUSH_SIZE 0x0000 +#define FLUSH_STRIDE 0x0000 +#define DUTY_OFFSET 0x00 +#define DUTY_WIDTH 0x00 +#define DAY_ALRM 0x00 +#define MON_ALRM 0x00 +#define CENTURY 0x00 +#define FLAG 0x00321033 +#endif + diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Pmtt.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Pmtt.aslc new file mode 100644 index 000000000..f0b4f6cfe --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Pmtt.aslc @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_SOCKET 00 //socket +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_MEMCTRL 01 //Memory Controller +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_DIMM 02 //DIMM +#define EFI_ACPI_MEMORY_AGGREGATOR_TYPE_RESVERVED 03 //RESVERVED + +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG_TLAD 01 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG_PHYELEMENT 02 // BIT1 - set to 1 since socket is a physical element of the topology +//Bit 2 and 3 - If 00, indicates that all components aggregated by this device implements volatile memory +// If 01, indicates that components aggregated by this device implements both volatile and non-volatile memory +// If 10, indicates that all components aggregated by this device implements non-volatile memory +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__VOLATILE 00 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__MIXED 4 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__NONVOLATILE 0x08 +#define EFI_ACPI_MEMORY_AGGREGATOR_FLAG__RSVD 0x0C + +#define MAXNUMBER_OF_PROXIMITY_DOMAINS 0x3 + +#define MAX_SOCKET 0x2 +#define NUM_MEM_CONTROLLERS 0x2 +#define MAX_DIMM 0x02 + +#pragma pack (1) +// PMMT Table fields +typedef struct { + UINT32 ReadLatency; + UINT32 WriteLatency; + UINT32 ReadBW; + UINT32 WriteBW; + UINT16 OptimalAccUnit; + UINT16 OptimalAccAlignment; +} EFI_ACPI_MEMCTRL_CHAR_TABLE; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + UINT16 PhyCompIdentifier; + UINT16 Rsvd2; + UINT32 Size; + UINT32 SmBiosHandle; +} EFI_ACPI_MEMORY_AGGREGATOR_DIMM_STRUC; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + EFI_ACPI_MEMCTRL_CHAR_TABLE MemCtrlCharTable; + UINT16 Rsvd2; + UINT16 NumProxDomains; + UINT32 ProxDomain[MAXNUMBER_OF_PROXIMITY_DOMAINS]; + EFI_ACPI_MEMORY_AGGREGATOR_DIMM_STRUC PhyCompIdentStruc[MAX_DIMM]; +} EFI_ACPI_MEMORY_AGGREGATOR_MEMCTRL_STRUC; + +typedef struct { + UINT8 Type; + UINT8 Rsvd; + UINT16 Length; + UINT16 Flag; + UINT16 Rsvd1; + UINT16 SckIdent; + UINT16 Rsvd2; + EFI_ACPI_MEMORY_AGGREGATOR_MEMCTRL_STRUC MemCtrlStruc[NUM_MEM_CONTROLLERS]; +} EFI_ACPI_MEMORY_AGGREGATOR_SOCKET_STRUC; + +typedef struct { + EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE Header; + EFI_ACPI_MEMORY_AGGREGATOR_SOCKET_STRUC TopLevelmemAggrDevStruc[MAX_SOCKET]; +} EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE; +#pragma pack () + + +EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE Pmtt = { + { + { + EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE), // Length + EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE_REVISION, // Revision + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + EFI_ACPI_RESERVED_DWORD, // Reserved[0] + }, + { + /*Socket 0*/ + { + 0x00, //Subtable Type:Socket + 0x00, //Reserved + 0x0080, //Length + 0x0001, //Flags + 0x0000, //Reserved + 0x0000, //Socket ID + 0x0000, //Reserved + { + /*Memory Controller 1*/ + + { + 0x01, //Subtable Type:Memory Controller + 0x00, //Reserved + 0x0054, //Length + 0x0005, //Flags + 0x0000, //Reserved + { + 0x00000000, //Read Latency + 0x00000000, //Write Latency + 0x00000000, //Read Bandwidth + 0x00000000, //Write Bandwidth + 0x0000, //Access Width + 0x0000, //Alignment + }, + 0x0000, //Reserved + MAXNUMBER_OF_PROXIMITY_DOMAINS, //Domain Count + 0x00000000, //Proximity Domain + 0x00000000, //Proximity Domain + 0x00000000, //Proximity Domain + { + /*DIMM 0*/ + { + 0x02, //Subtable Type:Physical Component (DIMM) + 0x00, //Reserved + 0x0014, //Length + 0x0002, //Flags + 0x0000, //Reserved + 0x0000, //Component ID + 0x0000, //Reserved + 0x00000000, //Memory Size + 0x00000000, //Bios Handle + }, + /*DIMM 1*/ + { + 0x02, //Subtable Type:Physical Component (DIMM) + 0x00, //Reserved + 0x0014, //Length + 0x0002, //Flags + 0x0000, //Reserved + 0x0000, //Component ID + 0x0000, //Reserved + 0x00000000, //Memory Size + 0x00000000, //Bios Handle + }, + }, + }, + + /*Memory Controller 2*/ + { + 0x01, //Subtable Type:Memory Controller + 0x00, //Reserved + 0x0020, //Length + 0x0001, //Flags + 0x0000, //Reserved + { + 0x00000000, //Read Latency + 0x00000000, //Write Latency + 0x00000000, //Read Bandwidth + 0x00000000, //Write Bandwidth + 0x0000, //Access Width + 0x0000 //Alignment + }, + 0x0000, //Reserved + 0x0000, //Domain Count + {0}, + {0}, + + }, + }, + }, + + + /*Socket 1*/ + { + 0x00, //Subtable Type:Socket + 0x00, //Reserved + 0x000c, //Length + 0x0001, //Flags + 0x0000, //Reserved + 0x0000, //Socket ID + 0x0000 //Reserved + }, + }, + + +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Pmtt; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Slit.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Slit.aslc new file mode 100644 index 000000000..05d96e029 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Slit.aslc @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT 0x0000000000000014 + +#pragma pack(1) +typedef struct { + UINT8 Entry[EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT]; +} EFI_ACPI_5_0_NUMBER_OF_SYSTEM_LOCALITIES_STRUCTURE; + +typedef struct { + EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER Header; + EFI_ACPI_5_0_NUMBER_OF_SYSTEM_LOCALITIES_STRUCTURE NumSlit[EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT]; + +} EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE; +#pragma pack() + +// +// System Locality Information Table +// Please modify all values in Slit.h only. +// +EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE Slit = { + { + { + EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE), + EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION, + }, + // + // Beginning of SLIT specific fields + // + EFI_ACPI_SYSTEM_LOCALITIES_ENTRY_COUNT, + }, + { + {0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27}, //Locality 0 + {0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,}, //Locality 1 + {0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,}, //Locality 2 + {0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,}, //Locality 3 + {0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23,}, //Locality 4 + {0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,}, //Locality 5 + {0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21,}, //Locality 6 + {0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,}, //Locality 7 + {0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,}, //Locality 8 + {0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,}, //Locality 9 + {0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,}, //Locality 10 + {0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,}, //Locality 11 + {0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,}, //Locality 12 + {0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,}, //Locality 13 + {0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17, 0x18, 0x19,}, //Locality 14 + {0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16, 0x17, 0x18,}, //Locality 15 + {0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10, 0x16, 0x17,}, //Locality 16 + {0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A, 0x15, 0x16,}, //Locality 17 + {0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x0A, 0x10,}, //Locality 18 + {0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x10, 0x0A,}, //Locality 19 + }, +}; + + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Slit; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Spmi.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Spmi.aslc new file mode 100644 index 000000000..77836a471 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Spmi.aslc @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + +#define ACPI_5_0_SPMI_REVISION 0x4 + +#pragma pack(1) +typedef struct +{ + + EFI_ACPI_DESCRIPTION_HEADER Header; + UINT8 ucInterfaceType; + UINT8 Reserved; + UINT16 usIPMISpecVersion; + UINT8 ucInterruptType; + UINT8 ucGPENumber; + UINT8 Reserved2; + UINT8 ucPCIDeviceFlag; + UINT32 uwInterrupt; + EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE IPMIRegister; + UINT8 ucPCISegment; + UINT8 ucPCIBus; + UINT8 ucPCIDevice; + UINT8 ucPCIFunction; + UINT8 Reserved3; +}EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE; +#pragma pack() + +EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE Spmi = +{ + { + EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE), + ACPI_5_0_SPMI_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + 0x00, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + 0x00, //Interface Type + 0x00, //Reserved + 0x0000, //IPMI Spec Version + 0x00, //Interrupt Type + 0x00, //GPE Number + 0x00, //Reserved + 0x00, //PCI Device Flag + 0x00000000, //Interrupt + { + 0x00, //Space ID:SystemMemory + 0x08, //Bit Width + 0x00, //Bit Offset + 0x01, //Encoded Access Width + 0x0000000000000000, //Address + }, + 0x00, //PCI Segment + 0x00, //PCI Bus + 0x00, //PCI Device + 0x00, //PCI Function + 0x00, //Reserved +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Spmi; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Srat.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Srat.aslc new file mode 100644 index 000000000..d5c433ffc --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Srat.aslc @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + + +// +// Define the number of each table type. +// This is where the table layout is modified. +// +#define EFI_ACPI_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE_COUNT 4 +#define EFI_ACPI_MEMORY_AFFINITY_STRUCTURE_COUNT 4 + + +#pragma pack(1) +typedef struct { + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER Header; + EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE Apic; + EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE Memory; + EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE x2APIC; +} EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE; + +#pragma pack() + + +// +// Static Resource Affinity Table definition +// +EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE Srat = { + { + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE), + EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION, + /*Reserved*/ + 0x00000001, // Reserved to be 1 for backward compatibility + EFI_ACPI_RESERVED_QWORD + }, + /**/ + { + 0x00, // Subtable Type:Processor Local APIC/SAPIC Affinity + sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE), //Length + 0x00, //Proximity Domain Low(8) + 0x00, //Apic ID + 0x00000001, //Flags + 0x00, //Local Sapic EID + {0,0,0}, //Proximity Domain High(24) + 0x00000000, //ClockDomain + }, + // + // + // Memory Affinity + // + { + 0x01, // Subtable Type:Memory Affinity + sizeof (EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE), // Length + 0x00000000, // Proximity Domain + EFI_ACPI_RESERVED_WORD, // Reserved + 0x00000000, // Address Base Low + 0x00000000, // Address Base High + 0x0009FC00, // Length Low + 0x00000000, // Length High + EFI_ACPI_RESERVED_DWORD, // Reserved + 0x00000001, // Flags disabled, until enabled by Platform driver + EFI_ACPI_RESERVED_QWORD , // Reserved + }, + + /*Processor Local x2APIC Affinity*/ + { + 0x02, // Subtable Type:Processor Local x2APIC Affinity + sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE), + {0,0}, //Reserved1 + 0x00000000, //Proximity Domain + 0x00000000, //Apic ID + 0x00000001, //Flags + 0x00000000, //Clock Domain + {0,0,0,0}, //Reserved2 + }, +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Srat; +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ssdt0.asl b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ssdt0.asl new file mode 100644 index 000000000..c13ceef56 --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Ssdt0.asl @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2013, Al Stone + * + * [SSDT] Description of the armv8 VE Model + * + * This source is released under the terms of the GPLv2. + */ + +DefinitionBlock ( + "ssdt0.aml", // output filename + "SSDT", // table signature + 2, // SSDT compliance revision + "LINARO", // OEM ID + "RTSMVEV8", // table ID + 0x00000001) // OEM revision +{ +} diff --git a/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Uefi.aslc b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Uefi.aslc new file mode 100644 index 000000000..c3bbce3ed --- /dev/null +++ b/ArmPkg/Drivers/AcpiTables/rtsm_ve-v7/Uefi.aslc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2013 Linaro Limited + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the BSD License which accompanies + * this distribution, and is available at + * http://opensource.org/licenses/bsd-license.php + * + * Contributors: + * Yi Li - yi.li@linaro.org +*/ + +#include +#include + + +#define ACPI_5_0_UEFI_REVISION 0x1 + +#pragma pack(1) + +typedef struct +{ + EFI_ACPI_DESCRIPTION_HEADER Header; + EFI_GUID guid; + UINT16 usDataOffset; +}EFI_ACPI_5_0_UEFI_TABLE; +#pragma pack() + +EFI_ACPI_5_0_UEFI_TABLE Uefi= +{ + { + EFI_ACPI_5_0_UEFI_ACPI_DATA_TABLE_SIGNATURE, + sizeof (EFI_ACPI_5_0_UEFI_TABLE), + ACPI_5_0_UEFI_REVISION, + 0x00, // Checksum will be updated at runtime + {EFI_ACPI_OEM_ID}, + EFI_ACPI_OEM_TABLE_ID, + EFI_ACPI_OEM_REVISION, + EFI_ACPI_CREATOR_ID, + EFI_ACPI_CREATOR_REVISION + }, + //03020100-0504-0706-0809-0A0B0C0D0E0F + { 0x03020100, 0x0504, 0x0706, { 0x08, 0x09, 0x0A, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }, + 0x0036 //Data Offset +}; + +VOID* +ReferenceAcpiTable ( + VOID + ) +{ + // + // Reference the table being generated to prevent the optimizer from removing the + // data structure from the exeutable + // + return (VOID*)&Uefi; +} -- cgit v1.2.3