From 5e21d795b45dc21e33dcd9c8453d6f4ca923ce3a Mon Sep 17 00:00:00 2001
From: Soby Mathew <soby.mathew@arm.com>
Date: Wed, 14 Sep 2016 15:51:44 +0100
Subject: [PATCH] AArch32: Update user-guide and add DTBs

This patch adds necessary updates for building and running Trusted
Firmware for AArch32 to user-guide.md. The instructions for running
on both `FVP_Base_AEMv8A-AEMv8A` in AArch32 mode and
`FVP_Base_Cortex-A32x4` models are added. The device tree files for
AArch32 Linux kernel are also added in the `fdts` folder.

Change-Id: I0023b6b03e05f32637cb5765fdeda8c8df2d0d3e
---
 docs/user-guide.md                   | 178 ++++++++++++--
 fdts/fvp-base-gicv2-psci-aarch32.dtb | Bin 0 -> 10336 bytes
 fdts/fvp-base-gicv2-psci-aarch32.dts | 331 ++++++++++++++++++++++++++
 fdts/fvp-base-gicv3-psci-aarch32.dtb | Bin 0 -> 10803 bytes
 fdts/fvp-base-gicv3-psci-aarch32.dts | 340 +++++++++++++++++++++++++++
 5 files changed, 834 insertions(+), 15 deletions(-)
 create mode 100644 fdts/fvp-base-gicv2-psci-aarch32.dtb
 create mode 100644 fdts/fvp-base-gicv2-psci-aarch32.dts
 create mode 100644 fdts/fvp-base-gicv3-psci-aarch32.dtb
 create mode 100644 fdts/fvp-base-gicv3-psci-aarch32.dts

diff --git a/docs/user-guide.md b/docs/user-guide.md
index a07185d49..051f92009 100644
--- a/docs/user-guide.md
+++ b/docs/user-guide.md
@@ -89,23 +89,50 @@ Download the Trusted Firmware source code from Github:
 ---------------------------------
 
 *   Before building Trusted Firmware, the environment variable `CROSS_COMPILE`
-    must point to the Linaro cross compiler:
+    must point to the Linaro cross compiler.
+
+    For AArch64:
 
         export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
 
-*   Change to the root directory of the Trusted Firmware source tree and build:
+    For AArch32:
+
+        export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-linux-gnueabihf-
+
+*   Change to the root directory of the Trusted Firmware source tree and build.
+
+    For AArch64:
 
         make PLAT=<platform> all
 
-    Notes:
+    For AArch32:
+
+        make PLAT=<platform> ARCH=aarch32 AARCH32_SP=sp_min all
+
+
+   Notes:
 
     *   If `PLAT` is not specified, `fvp` is assumed by default. See the
         "Summary of build options" for more information on available build
         options.
 
-    *   The TSP (Test Secure Payload), corresponding to the BL32 image, is not
-        compiled in by default. Refer to the "Building the Test Secure Payload"
-        section below.
+    *   (AArch32 only) Currently only `PLAT=fvp` is supported. Please note that
+        AArch32 support for Normal world boot loader (BL33), like U-boot or
+        UEFI, on FVP is not available upstream. Hence custom solutions are
+        required to allow Linux boot on FVP. The build instructions below
+        assume such a custom boot loader (BL33) is available.
+
+    *   (AArch32 only) `AARCH32_SP` is the AArch32 EL3 Runtime Software and it
+        corresponds to the BL32 image. A minimal `AARCH32_SP`, sp_min, is
+        provided by ARM Trusted Firmware to demonstrate how PSCI Library can
+        be integrated with an AArch32 EL3 Runtime Software. Some AArch32 EL3
+        Runtime Software may include other runtime services, for example
+        Trusted OS services. A guide to integrate PSCI library with AArch32
+        EL3 Runtime Software can be found [here][PSCI Lib Integration].
+
+    *   (AArch64 only) The TSP (Test Secure Payload), corresponding to the BL32
+        image, is not compiled in by default. Refer to the "Building the Test
+        Secure Payload" section below.
 
     *   By default this produces a release version of the build. To produce a
         debug version instead, refer to the "Debugging options" section below.
@@ -117,7 +144,8 @@ Download the Trusted Firmware source code from Github:
 
         *   `build/<platform>/<build-type>/bl1.bin`
         *   `build/<platform>/<build-type>/bl2.bin`
-        *   `build/<platform>/<build-type>/bl31.bin`
+        *   `build/<platform>/<build-type>/bl31.bin` (AArch64 only)
+        *   `build/<platform>/<build-type>/bl32.bin` (mandatory for AArch32)
 
         where `<platform>` is the name of the chosen platform and `<build-type>`
         is either `debug` or `release`. The actual number of images might differ
@@ -238,6 +266,12 @@ performed.
     entrypoint) or 1 (CPU reset to BL31 entrypoint).
     The default value is 0.
 
+*   `RESET_TO_SP_MIN`: SP_MIN is the minimal AArch32 Secure Payload provided in
+    ARM Trusted Firmware. This flag configures SP_MIN entrypoint as the CPU
+    reset vector instead of the BL1 entrypoint.  It can take the value 0 (CPU
+    reset to BL1 entrypoint) or 1 (CPU reset to SP_MIN entrypoint). The default
+    value is 0.
+
 *   `CRASH_REPORTING`: A non-zero value enables a console dump of processor
     register state when an unexpected exception occurs during execution of
     BL31. This option defaults to the value of `DEBUG` - i.e. by default
@@ -600,7 +634,6 @@ An additional boot loader binary file is created in the `build` directory:
 
     `build/<platform>/<build-type>/bl32.bin`
 
-
 ### Checking source code style
 
 When making changes to the source for submission to the project, the source
@@ -1042,8 +1075,8 @@ JTAG on Juno.
 9.  Running the software on FVP
 -------------------------------
 
-This version of the ARM Trusted Firmware has been tested on the following ARM
-FVPs (64-bit versions only).
+The AArch64 build of this version of ARM Trusted Firmware has been tested on
+the following ARM FVPs (64-bit host machine only).
 
 *   `Foundation_Platform` (Version 10.1, Build 10.1.32)
 *   `FVP_Base_AEMv8A-AEMv8A` (Version 7.7, Build 0.8.7701)
@@ -1051,6 +1084,12 @@ FVPs (64-bit versions only).
 *   `FVP_Base_Cortex-A57x1-A53x1` (Version 7.7, Build 0.8.7701)
 *   `FVP_Base_Cortex-A57x2-A53x4` (Version 7.7, Build 0.8.7701)
 
+The AArch32 build of this version of ARM Trusted Firmware has been tested on
+the following ARM FVPs (64-bit host machine only).
+
+*   `FVP_Base_AEMv8A-AEMv8A` (Version 7.7, Build 0.8.7701)
+*   `FVP_Base_Cortex-A32x4` (Version 10.1, Build 10.1.32)
+
 NOTE: The build numbers quoted above are those reported by launching the FVP
 with the `--version` parameter.
 
@@ -1082,11 +1121,21 @@ all FDTs are available from there.
     For use with both AEMv8 and Cortex-A57-A53 Base FVPs with
     Base memory map configuration.
 
+*   `fvp-base-gicv2-psci-aarch32.dtb`
+
+    For use with AEMv8 and Cortex-A32 Base FVPs running Linux in AArch32 state
+    with Base memory map configuration.
+
 *   `fvp-base-gicv3-psci.dtb`
 
     (Default) For use with both AEMv8 and Cortex-A57-A53 Base FVPs with Base
     memory map configuration and Linux GICv3 support.
 
+*   `fvp-base-gicv3-psci-aarch32.dtb`
+
+    For use with AEMv8 and Cortex-A32 Base FVPs running Linux in AArch32 state
+    with Base memory map configuration and Linux GICv3 support.
+
 *   `fvp-foundation-gicv2-psci.dtb`
 
     For use with Foundation FVP with Base memory map configuration.
@@ -1099,7 +1148,7 @@ all FDTs are available from there.
 ### Running on the Foundation FVP with reset to BL1 entrypoint
 
 The following `Foundation_Platform` parameters should be used to boot Linux with
-4 CPUs using the ARM Trusted Firmware.
+4 CPUs using the AArch64 build of ARM Trusted Firmware.
 
     <path-to>/Foundation_Platform                   \
     --cores=4                                       \
@@ -1124,7 +1173,7 @@ Notes:
 ### Running on the AEMv8 Base FVP with reset to BL1 entrypoint
 
 The following `FVP_Base_AEMv8A-AEMv8A` parameters should be used to boot Linux
-with 8 CPUs using the ARM Trusted Firmware.
+with 8 CPUs using the AArch64 build of ARM Trusted Firmware.
 
     <path-to>/FVP_Base_AEMv8A-AEMv8A                            \
     -C pctl.startup=0.0.0.0                                     \
@@ -1139,10 +1188,36 @@ with 8 CPUs using the ARM Trusted Firmware.
     --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
     -C bp.virtioblockdevice.image_path="<path-to>/<file-system-image>"
 
+### Running on the AEMv8 Base FVP (AArch32) with reset to BL1 entrypoint
+
+The following `FVP_Base_AEMv8A-AEMv8A` parameters should be used to boot Linux
+with 8 CPUs using the AArch32 build of ARM Trusted Firmware.
+
+    <path-to>/FVP_Base_AEMv8A-AEMv8A                            \
+    -C pctl.startup=0.0.0.0                                     \
+    -C bp.secure_memory=1                                       \
+    -C bp.tzc_400.diagnostics=1                                 \
+    -C cluster0.NUM_CORES=4                                     \
+    -C cluster1.NUM_CORES=4                                     \
+    -C cache_state_modelled=1                                   \
+    -C cluster0.cpu0.CONFIG64=0                                 \
+    -C cluster0.cpu1.CONFIG64=0                                 \
+    -C cluster0.cpu2.CONFIG64=0                                 \
+    -C cluster0.cpu3.CONFIG64=0                                 \
+    -C cluster1.cpu0.CONFIG64=0                                 \
+    -C cluster1.cpu1.CONFIG64=0                                 \
+    -C cluster1.cpu2.CONFIG64=0                                 \
+    -C cluster1.cpu3.CONFIG64=0                                 \
+    -C bp.secureflashloader.fname="<path-to>/<bl1-binary>"      \
+    -C bp.flashloader0.fname="<path-to>/<FIP-binary>"           \
+    --data cluster0.cpu0="<path-to>/<fdt>"@0x83000000           \
+    --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
+    -C bp.virtioblockdevice.image_path="<path-to>/<file-system-image>"
+
 ### Running on the Cortex-A57-A53 Base FVP with reset to BL1 entrypoint
 
 The following `FVP_Base_Cortex-A57x4-A53x4` model parameters should be used to
-boot Linux with 8 CPUs using the ARM Trusted Firmware.
+boot Linux with 8 CPUs using the AArch64 build of ARM Trusted Firmware.
 
     <path-to>/FVP_Base_Cortex-A57x4-A53x4                       \
     -C pctl.startup=0.0.0.0                                     \
@@ -1155,10 +1230,26 @@ boot Linux with 8 CPUs using the ARM Trusted Firmware.
     --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
     -C bp.virtioblockdevice.image_path="<path-to>/<file-system-image>"
 
+### Running on the Cortex-A32 Base FVP (AArch32) with reset to BL1 entrypoint
+
+The following `FVP_Base_Cortex-A32x4` model parameters should be used to
+boot Linux with 4 CPUs using the AArch32 build of ARM Trusted Firmware.
+
+    <path-to>/FVP_Base_Cortex-A32x4                             \
+    -C pctl.startup=0.0.0.0                                     \
+    -C bp.secure_memory=1                                       \
+    -C bp.tzc_400.diagnostics=1                                 \
+    -C cache_state_modelled=1                                   \
+    -C bp.secureflashloader.fname="<path-to>/<bl1-binary>"      \
+    -C bp.flashloader0.fname="<path-to>/<FIP-binary>"           \
+    --data cluster0.cpu0="<path-to>/<fdt>"@0x83000000           \
+    --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
+    -C bp.virtioblockdevice.image_path="<path-to>/<file-system-image>"
+
 ### Running on the AEMv8 Base FVP with reset to BL31 entrypoint
 
 The following `FVP_Base_AEMv8A-AEMv8A` parameters should be used to boot Linux
-with 8 CPUs using the ARM Trusted Firmware.
+with 8 CPUs using the AArch64 build of ARM Trusted Firmware.
 
     <path-to>/FVP_Base_AEMv8A-AEMv8A                             \
     -C pctl.startup=0.0.0.0                                      \
@@ -1199,10 +1290,47 @@ Notes:
     `--data="<path-to><bl32-binary>"@<base-address-of-bl32>` to the new value of
     `BL32_BASE`.
 
+### Running on the AEMv8 Base FVP (AArch32) with reset to SP_MIN entrypoint
+
+The following `FVP_Base_AEMv8A-AEMv8A` parameters should be used to boot Linux
+with 8 CPUs using the AArch32 build of ARM Trusted Firmware.
+
+    <path-to>/FVP_Base_AEMv8A-AEMv8A                             \
+    -C pctl.startup=0.0.0.0                                      \
+    -C bp.secure_memory=1                                        \
+    -C bp.tzc_400.diagnostics=1                                  \
+    -C cluster0.NUM_CORES=4                                      \
+    -C cluster1.NUM_CORES=4                                      \
+    -C cache_state_modelled=1                                    \
+    -C cluster0.cpu0.CONFIG64=0                                  \
+    -C cluster0.cpu1.CONFIG64=0                                  \
+    -C cluster0.cpu2.CONFIG64=0                                  \
+    -C cluster0.cpu3.CONFIG64=0                                  \
+    -C cluster1.cpu0.CONFIG64=0                                  \
+    -C cluster1.cpu1.CONFIG64=0                                  \
+    -C cluster1.cpu2.CONFIG64=0                                  \
+    -C cluster1.cpu3.CONFIG64=0                                  \
+    -C cluster0.cpu0.RVBAR=0x04001000                            \
+    -C cluster0.cpu1.RVBAR=0x04001000                            \
+    -C cluster0.cpu2.RVBAR=0x04001000                            \
+    -C cluster0.cpu3.RVBAR=0x04001000                            \
+    -C cluster1.cpu0.RVBAR=0x04001000                            \
+    -C cluster1.cpu1.RVBAR=0x04001000                            \
+    -C cluster1.cpu2.RVBAR=0x04001000                            \
+    -C cluster1.cpu3.RVBAR=0x04001000                            \
+    --data cluster0.cpu0="<path-to>/<bl32-binary>"@0x04001000    \
+    --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000    \
+    --data cluster0.cpu0="<path-to>/<fdt>"@0x83000000            \
+    --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000  \
+    -C bp.virtioblockdevice.image_path="<path-to>/<file-system-image>"
+
+Note: The load address of `<bl32-binary>` depends on the value `BL32_BASE`.
+It should match the address programmed into the RVBAR register as well.
+
 ### Running on the Cortex-A57-A53 Base FVP with reset to BL31 entrypoint
 
 The following `FVP_Base_Cortex-A57x4-A53x4` model parameters should be used to
-boot Linux with 8 CPUs using the ARM Trusted Firmware.
+boot Linux with 8 CPUs using the AArch64 build of ARM Trusted Firmware.
 
     <path-to>/FVP_Base_Cortex-A57x4-A53x4                        \
     -C pctl.startup=0.0.0.0                                      \
@@ -1224,6 +1352,25 @@ boot Linux with 8 CPUs using the ARM Trusted Firmware.
     --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000  \
     -C bp.virtioblockdevice.image_path="<path-to>/<file-system-image>"
 
+### Running on the Cortex-A32 Base FVP (AArch32) with reset to SP_MIN entrypoint
+
+The following `FVP_Base_Cortex-A32x4` model parameters should be used to
+boot Linux with 4 CPUs using the AArch32 build of ARM Trusted Firmware.
+
+    <path-to>/FVP_Base_Cortex-A32x4                             \
+    -C pctl.startup=0.0.0.0                                     \
+    -C bp.secure_memory=1                                       \
+    -C bp.tzc_400.diagnostics=1                                 \
+    -C cache_state_modelled=1                                   \
+    -C cluster0.cpu0.RVBARADDR=0x04001000                       \
+    -C cluster0.cpu1.RVBARADDR=0x04001000                       \
+    -C cluster0.cpu2.RVBARADDR=0x04001000                       \
+    -C cluster0.cpu3.RVBARADDR=0x04001000                       \
+    --data cluster0.cpu0="<path-to>/<bl32-binary>"@0x04001000   \
+    --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000   \
+    --data cluster0.cpu0="<path-to>/<fdt>"@0x83000000           \
+    --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
+    -C bp.virtioblockdevice.image_path="<path-to>/<file-system-image>"
 
 10.  Running the software on Juno
 ---------------------------------
@@ -1280,3 +1427,4 @@ _Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved._
 [PSCI]:                        http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf "Power State Coordination Interface PDD (ARM DEN 0022C)"
 [Trusted Board Boot]:          trusted-board-boot.md
 [Firmware Update]:             ./firmware-update.md
+[PSCI Lib Integration]:        ./psci-lib-integration-guide.md
diff --git a/fdts/fvp-base-gicv2-psci-aarch32.dtb b/fdts/fvp-base-gicv2-psci-aarch32.dtb
new file mode 100644
index 0000000000000000000000000000000000000000..b044a769b07e2d04da2a0012b4e9f93843994313
GIT binary patch
literal 10336
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

literal 0
HcmV?d00001

diff --git a/fdts/fvp-base-gicv2-psci-aarch32.dts b/fdts/fvp-base-gicv2-psci-aarch32.dts
new file mode 100644
index 000000000..3a6007de7
--- /dev/null
+++ b/fdts/fvp-base-gicv2-psci-aarch32.dts
@@ -0,0 +1,331 @@
+/*
+ * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of ARM nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/dts-v1/;
+
+/memreserve/ 0x80000000 0x00010000;
+
+/ {
+};
+
+/ {
+	model = "FVP Base";
+	compatible = "arm,vfp-base", "arm,vexpress";
+	interrupt-parent = <&gic>;
+	#address-cells = <2>;
+	#size-cells = <2>;
+
+	chosen { };
+
+	aliases {
+		serial0 = &v2m_serial0;
+		serial1 = &v2m_serial1;
+		serial2 = &v2m_serial2;
+		serial3 = &v2m_serial3;
+	};
+
+	psci {
+		compatible = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
+		method = "smc";
+		cpu_suspend = <0x84000001>;
+		cpu_off = <0x84000002>;
+		cpu_on = <0x84000003>;
+		sys_poweroff = <0x84000008>;
+		sys_reset = <0x84000009>;
+	};
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu-map {
+			cluster0 {
+				core0 {
+					cpu = <&CPU0>;
+				};
+				core1 {
+					cpu = <&CPU1>;
+				};
+				core2 {
+					cpu = <&CPU2>;
+				};
+				core3 {
+					cpu = <&CPU3>;
+				};
+			};
+
+			cluster1 {
+				core0 {
+					cpu = <&CPU4>;
+				};
+				core1 {
+					cpu = <&CPU5>;
+				};
+				core2 {
+					cpu = <&CPU6>;
+				};
+				core3 {
+					cpu = <&CPU7>;
+				};
+			};
+		};
+
+		idle-states {
+			entry-method = "arm,psci";
+
+			CPU_SLEEP_0: cpu-sleep-0 {
+				compatible = "arm,idle-state";
+				local-timer-stop;
+				arm,psci-suspend-param = <0x0010000>;
+				entry-latency-us = <40>;
+				exit-latency-us = <100>;
+				min-residency-us = <150>;
+			};
+
+			CLUSTER_SLEEP_0: cluster-sleep-0 {
+				compatible = "arm,idle-state";
+				local-timer-stop;
+				arm,psci-suspend-param = <0x1010000>;
+				entry-latency-us = <500>;
+				exit-latency-us = <1000>;
+				min-residency-us = <2500>;
+			};
+		};
+
+		CPU0:cpu@0 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x0>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU1:cpu@1 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x1>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU2:cpu@2 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x2>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU3:cpu@3 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x3>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU4:cpu@100 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x100>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU5:cpu@101 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x101>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU6:cpu@102 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x102>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU7:cpu@103 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x103>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		L2_0: l2-cache0 {
+			compatible = "cache";
+		};
+	};
+
+	memory@80000000 {
+		device_type = "memory";
+		reg = <0x00000000 0x80000000 0 0x7F000000>,
+		      <0x00000008 0x80000000 0 0x80000000>;
+	};
+
+	gic: interrupt-controller@2f000000 {
+		compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic";
+		#interrupt-cells = <3>;
+		#address-cells = <0>;
+		interrupt-controller;
+		reg = <0x0 0x2f000000 0 0x10000>,
+		      <0x0 0x2c000000 0 0x2000>,
+		      <0x0 0x2c010000 0 0x2000>,
+		      <0x0 0x2c02F000 0 0x2000>;
+		interrupts = <1 9 0xf04>;
+	};
+
+	timer {
+		compatible = "arm,armv8-timer";
+		interrupts = <1 13 0xff01>,
+			     <1 14 0xff01>,
+			     <1 11 0xff01>,
+			     <1 10 0xff01>;
+		clock-frequency = <100000000>;
+	};
+
+	timer@2a810000 {
+			compatible = "arm,armv7-timer-mem";
+			reg = <0x0 0x2a810000 0x0 0x10000>;
+			clock-frequency = <100000000>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			frame@2a830000 {
+				frame-number = <1>;
+				interrupts = <0 26 4>;
+				reg = <0x0 0x2a830000 0x0 0x10000>;
+			};
+	};
+
+	pmu {
+		compatible = "arm,armv8-pmuv3";
+		interrupts = <0 60 4>,
+			     <0 61 4>,
+			     <0 62 4>,
+			     <0 63 4>;
+	};
+
+	smb {
+		compatible = "simple-bus";
+
+		#address-cells = <2>;
+		#size-cells = <1>;
+		ranges = <0 0 0 0x08000000 0x04000000>,
+			 <1 0 0 0x14000000 0x04000000>,
+			 <2 0 0 0x18000000 0x04000000>,
+			 <3 0 0 0x1c000000 0x04000000>,
+			 <4 0 0 0x0c000000 0x04000000>,
+			 <5 0 0 0x10000000 0x04000000>;
+
+		#interrupt-cells = <1>;
+		interrupt-map-mask = <0 0 63>;
+		interrupt-map = <0 0  0 &gic 0  0 4>,
+				<0 0  1 &gic 0  1 4>,
+				<0 0  2 &gic 0  2 4>,
+				<0 0  3 &gic 0  3 4>,
+				<0 0  4 &gic 0  4 4>,
+				<0 0  5 &gic 0  5 4>,
+				<0 0  6 &gic 0  6 4>,
+				<0 0  7 &gic 0  7 4>,
+				<0 0  8 &gic 0  8 4>,
+				<0 0  9 &gic 0  9 4>,
+				<0 0 10 &gic 0 10 4>,
+				<0 0 11 &gic 0 11 4>,
+				<0 0 12 &gic 0 12 4>,
+				<0 0 13 &gic 0 13 4>,
+				<0 0 14 &gic 0 14 4>,
+				<0 0 15 &gic 0 15 4>,
+				<0 0 16 &gic 0 16 4>,
+				<0 0 17 &gic 0 17 4>,
+				<0 0 18 &gic 0 18 4>,
+				<0 0 19 &gic 0 19 4>,
+				<0 0 20 &gic 0 20 4>,
+				<0 0 21 &gic 0 21 4>,
+				<0 0 22 &gic 0 22 4>,
+				<0 0 23 &gic 0 23 4>,
+				<0 0 24 &gic 0 24 4>,
+				<0 0 25 &gic 0 25 4>,
+				<0 0 26 &gic 0 26 4>,
+				<0 0 27 &gic 0 27 4>,
+				<0 0 28 &gic 0 28 4>,
+				<0 0 29 &gic 0 29 4>,
+				<0 0 30 &gic 0 30 4>,
+				<0 0 31 &gic 0 31 4>,
+				<0 0 32 &gic 0 32 4>,
+				<0 0 33 &gic 0 33 4>,
+				<0 0 34 &gic 0 34 4>,
+				<0 0 35 &gic 0 35 4>,
+				<0 0 36 &gic 0 36 4>,
+				<0 0 37 &gic 0 37 4>,
+				<0 0 38 &gic 0 38 4>,
+				<0 0 39 &gic 0 39 4>,
+				<0 0 40 &gic 0 40 4>,
+				<0 0 41 &gic 0 41 4>,
+				<0 0 42 &gic 0 42 4>;
+
+		/include/ "rtsm_ve-motherboard.dtsi"
+	};
+
+	panels {
+		panel@0 {
+			compatible	= "panel";
+			mode		= "XVGA";
+			refresh		= <60>;
+			xres		= <1024>;
+			yres		= <768>;
+			pixclock	= <15748>;
+			left_margin	= <152>;
+			right_margin	= <48>;
+			upper_margin	= <23>;
+			lower_margin	= <3>;
+			hsync_len	= <104>;
+			vsync_len	= <4>;
+			sync		= <0>;
+			vmode		= "FB_VMODE_NONINTERLACED";
+			tim2		= "TIM2_BCD", "TIM2_IPC";
+			cntl		= "CNTL_LCDTFT", "CNTL_BGR", "CNTL_LCDVCOMP(1)";
+			caps		= "CLCD_CAP_5551", "CLCD_CAP_565", "CLCD_CAP_888";
+			bpp		= <16>;
+		};
+	};
+};
diff --git a/fdts/fvp-base-gicv3-psci-aarch32.dtb b/fdts/fvp-base-gicv3-psci-aarch32.dtb
new file mode 100644
index 0000000000000000000000000000000000000000..474b18885c3e4bafe236889a5d39bfc0da469b59
GIT binary patch
literal 10803
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

literal 0
HcmV?d00001

diff --git a/fdts/fvp-base-gicv3-psci-aarch32.dts b/fdts/fvp-base-gicv3-psci-aarch32.dts
new file mode 100644
index 000000000..ab699151c
--- /dev/null
+++ b/fdts/fvp-base-gicv3-psci-aarch32.dts
@@ -0,0 +1,340 @@
+/*
+ * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of ARM nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/dts-v1/;
+
+/memreserve/ 0x80000000 0x00010000;
+
+/ {
+};
+
+/ {
+	model = "FVP Base";
+	compatible = "arm,vfp-base", "arm,vexpress";
+	interrupt-parent = <&gic>;
+	#address-cells = <2>;
+	#size-cells = <2>;
+
+	chosen { };
+
+	aliases {
+		serial0 = &v2m_serial0;
+		serial1 = &v2m_serial1;
+		serial2 = &v2m_serial2;
+		serial3 = &v2m_serial3;
+	};
+
+	psci {
+		compatible = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
+		method = "smc";
+		cpu_suspend = <0x84000001>;
+		cpu_off = <0x84000002>;
+		cpu_on = <0x84000003>;
+		sys_poweroff = <0x84000008>;
+		sys_reset = <0x84000009>;
+	};
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu-map {
+			cluster0 {
+				core0 {
+					cpu = <&CPU0>;
+				};
+				core1 {
+					cpu = <&CPU1>;
+				};
+				core2 {
+					cpu = <&CPU2>;
+				};
+				core3 {
+					cpu = <&CPU3>;
+				};
+			};
+
+			cluster1 {
+				core0 {
+					cpu = <&CPU4>;
+				};
+				core1 {
+					cpu = <&CPU5>;
+				};
+				core2 {
+					cpu = <&CPU6>;
+				};
+				core3 {
+					cpu = <&CPU7>;
+				};
+			};
+		};
+
+		idle-states {
+			entry-method = "arm,psci";
+
+			CPU_SLEEP_0: cpu-sleep-0 {
+				compatible = "arm,idle-state";
+				local-timer-stop;
+				arm,psci-suspend-param = <0x0010000>;
+				entry-latency-us = <40>;
+				exit-latency-us = <100>;
+				min-residency-us = <150>;
+			};
+
+			CLUSTER_SLEEP_0: cluster-sleep-0 {
+				compatible = "arm,idle-state";
+				local-timer-stop;
+				arm,psci-suspend-param = <0x1010000>;
+				entry-latency-us = <500>;
+				exit-latency-us = <1000>;
+				min-residency-us = <2500>;
+			};
+		};
+
+		CPU0:cpu@0 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x0>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU1:cpu@1 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x1>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU2:cpu@2 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x2>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU3:cpu@3 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x3>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU4:cpu@100 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x100>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU5:cpu@101 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x101>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU6:cpu@102 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x102>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		CPU7:cpu@103 {
+			device_type = "cpu";
+			compatible = "arm,armv8";
+			reg = <0x103>;
+			enable-method = "psci";
+			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
+			next-level-cache = <&L2_0>;
+		};
+
+		L2_0: l2-cache0 {
+			compatible = "cache";
+		};
+	};
+
+	memory@80000000 {
+		device_type = "memory";
+		reg = <0x00000000 0x80000000 0 0x7F000000>,
+		      <0x00000008 0x80000000 0 0x80000000>;
+	};
+
+	gic: interrupt-controller@2f000000 {
+		compatible = "arm,gic-v3";
+		#interrupt-cells = <3>;
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+		interrupt-controller;
+		reg = <0x0 0x2f000000 0 0x10000>,	// GICD
+		      <0x0 0x2f100000 0 0x200000>,	// GICR
+		      <0x0 0x2c000000 0 0x2000>,	// GICC
+		      <0x0 0x2c010000 0 0x2000>,	// GICH
+		      <0x0 0x2c02f000 0 0x2000>;	// GICV
+		interrupts = <1 9 4>;
+
+		its: its@2f020000 {
+			compatible = "arm,gic-v3-its";
+			msi-controller;
+			reg = <0x0 0x2f020000 0x0 0x20000>; // GITS
+		};
+	};
+
+	timer {
+		compatible = "arm,armv8-timer";
+		interrupts = <1 13 0xff01>,
+			     <1 14 0xff01>,
+			     <1 11 0xff01>,
+			     <1 10 0xff01>;
+		clock-frequency = <100000000>;
+	};
+
+	timer@2a810000 {
+			compatible = "arm,armv7-timer-mem";
+			reg = <0x0 0x2a810000 0x0 0x10000>;
+			clock-frequency = <100000000>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			frame@2a830000 {
+				frame-number = <1>;
+				interrupts = <0 26 4>;
+				reg = <0x0 0x2a830000 0x0 0x10000>;
+			};
+	};
+
+	pmu {
+		compatible = "arm,armv8-pmuv3";
+		interrupts = <0 60 4>,
+			     <0 61 4>,
+			     <0 62 4>,
+			     <0 63 4>;
+	};
+
+	smb {
+		compatible = "simple-bus";
+
+		#address-cells = <2>;
+		#size-cells = <1>;
+		ranges = <0 0 0 0x08000000 0x04000000>,
+			 <1 0 0 0x14000000 0x04000000>,
+			 <2 0 0 0x18000000 0x04000000>,
+			 <3 0 0 0x1c000000 0x04000000>,
+			 <4 0 0 0x0c000000 0x04000000>,
+			 <5 0 0 0x10000000 0x04000000>;
+
+		#interrupt-cells = <1>;
+		interrupt-map-mask = <0 0 63>;
+		interrupt-map = <0 0  0 &gic 0 0 0  0 4>,
+				<0 0  1 &gic 0 0 0  1 4>,
+				<0 0  2 &gic 0 0 0  2 4>,
+				<0 0  3 &gic 0 0 0  3 4>,
+				<0 0  4 &gic 0 0 0  4 4>,
+				<0 0  5 &gic 0 0 0  5 4>,
+				<0 0  6 &gic 0 0 0  6 4>,
+				<0 0  7 &gic 0 0 0  7 4>,
+				<0 0  8 &gic 0 0 0  8 4>,
+				<0 0  9 &gic 0 0 0  9 4>,
+				<0 0 10 &gic 0 0 0 10 4>,
+				<0 0 11 &gic 0 0 0 11 4>,
+				<0 0 12 &gic 0 0 0 12 4>,
+				<0 0 13 &gic 0 0 0 13 4>,
+				<0 0 14 &gic 0 0 0 14 4>,
+				<0 0 15 &gic 0 0 0 15 4>,
+				<0 0 16 &gic 0 0 0 16 4>,
+				<0 0 17 &gic 0 0 0 17 4>,
+				<0 0 18 &gic 0 0 0 18 4>,
+				<0 0 19 &gic 0 0 0 19 4>,
+				<0 0 20 &gic 0 0 0 20 4>,
+				<0 0 21 &gic 0 0 0 21 4>,
+				<0 0 22 &gic 0 0 0 22 4>,
+				<0 0 23 &gic 0 0 0 23 4>,
+				<0 0 24 &gic 0 0 0 24 4>,
+				<0 0 25 &gic 0 0 0 25 4>,
+				<0 0 26 &gic 0 0 0 26 4>,
+				<0 0 27 &gic 0 0 0 27 4>,
+				<0 0 28 &gic 0 0 0 28 4>,
+				<0 0 29 &gic 0 0 0 29 4>,
+				<0 0 30 &gic 0 0 0 30 4>,
+				<0 0 31 &gic 0 0 0 31 4>,
+				<0 0 32 &gic 0 0 0 32 4>,
+				<0 0 33 &gic 0 0 0 33 4>,
+				<0 0 34 &gic 0 0 0 34 4>,
+				<0 0 35 &gic 0 0 0 35 4>,
+				<0 0 36 &gic 0 0 0 36 4>,
+				<0 0 37 &gic 0 0 0 37 4>,
+				<0 0 38 &gic 0 0 0 38 4>,
+				<0 0 39 &gic 0 0 0 39 4>,
+				<0 0 40 &gic 0 0 0 40 4>,
+				<0 0 41 &gic 0 0 0 41 4>,
+				<0 0 42 &gic 0 0 0 42 4>;
+
+		/include/ "rtsm_ve-motherboard.dtsi"
+	};
+
+	panels {
+		panel@0 {
+			compatible	= "panel";
+			mode		= "XVGA";
+			refresh		= <60>;
+			xres		= <1024>;
+			yres		= <768>;
+			pixclock	= <15748>;
+			left_margin	= <152>;
+			right_margin	= <48>;
+			upper_margin	= <23>;
+			lower_margin	= <3>;
+			hsync_len	= <104>;
+			vsync_len	= <4>;
+			sync		= <0>;
+			vmode		= "FB_VMODE_NONINTERLACED";
+			tim2		= "TIM2_BCD", "TIM2_IPC";
+			cntl		= "CNTL_LCDTFT", "CNTL_BGR", "CNTL_LCDVCOMP(1)";
+			caps		= "CLCD_CAP_5551", "CLCD_CAP_565", "CLCD_CAP_888";
+			bpp		= <16>;
+		};
+	};
+};
-- 
GitLab