Merge pull request #1009 from islmit01/im/aarch32_juno
Add Juno AArch32 and AArch64 User Guide instructions
diff --git a/docs/user-guide.md b/docs/user-guide.md
index d5423ca..1a07954 100644
--- a/docs/user-guide.md
+++ b/docs/user-guide.md
@@ -379,6 +379,12 @@
and power management operations. This option defaults to 0 and if it is
enabled, then it implies `WARMBOOT_ENABLE_DCACHE_EARLY` is also enabled.
+* `JUNO_AARCH32_EL3_RUNTIME`: This build flag enables you to execute EL3
+ runtime software in AArch32 mode, which is required to run AArch32 on Juno.
+ By default this flag is set to '0'. Enabling this flag builds BL1 and BL2 in
+ AArch64 and facilitates the loading of `SP_MIN` and BL33 as AArch32 executable
+ images.
+
* `LOAD_IMAGE_V2`: Boolean option to enable support for new version (v2) of
image loading, which provides more flexibility and scalability around what
images are loaded and executed during boot. Default is 0.
@@ -999,17 +1005,54 @@
Note for AArch32, the instructions below assume that nt-fw.bin is a custom
Normal world boot loader that supports AArch32.
-3. Build TF images and create a new FIP
-
- # Juno
- make PLAT=juno SCP_BL2=scp-fw.bin BL33=nt-fw.bin all fip
+3. Build TF images and create a new FIP for FVP
- # FVP AArch64
+ # AArch64
make PLAT=fvp BL33=nt-fw.bin all fip
- # FVP AArch32
+ # AArch32
make PLAT=fvp ARCH=aarch32 AARCH32_SP=sp_min BL33=nt-fw.bin all fip
+4. Build TF images and create a new FIP for Juno
+
+ For AArch64:
+
+ Building for AArch64 on Juno simply requires the addition of `SCP_BL2`
+ as a build parameter.
+
+ make PLAT=juno all fip \
+ BL33=<path-to-juno-oe-uboot>/SOFTWARE/bl33-uboot.bin \
+ SCP_BL2=<path-to-juno-busybox-uboot>/SOFTWARE/scp_bl2.bin
+
+ For AArch32:
+
+ Hardware restrictions on Juno prevent cold reset into AArch32 execution mode,
+ therefore BL1 and BL2 must be compiled for AArch64, and BL32 is compiled
+ separately for AArch32.
+
+ * Before building BL32, the environment variable `CROSS_COMPILE` must point
+ to the AArch32 Linaro cross compiler.
+
+ export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-linux-gnueabihf-
+
+ * Build BL32 in AArch32.
+
+ make ARCH=aarch32 PLAT=juno AARCH32_SP=sp_min \
+ RESET_TO_SP_MIN=1 JUNO_AARCH32_EL3_RUNTIME=1 bl32
+
+ * Before building BL1 and BL2, the environment variable `CROSS_COMPILE`
+ must point to the AArch64 Linaro cross compiler.
+
+ export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
+
+ * The following parameters should be used to build BL1 and BL2 in AArch64
+ and point to the BL32 file.
+
+ make ARCH=aarch64 PLAT=juno LOAD_IMAGE_V2=1 JUNO_AARCH32_EL3_RUNTIME=1 \
+ BL33=<path-to-juno32-oe-uboot>/SOFTWARE/bl33-uboot.bin \
+ SCP_BL2=<path-to-juno32-oe-uboot>/SOFTWARE/scp_bl2.bin SPD=tspd \
+ BL32=<path-to-bl32>/bl32.bin all fip
+
The resulting BL1 and FIP images may be found in:
# Juno