Add Juno AArch32 and AArch64 User Guide instructions

Updated section 6, building a FIP for Juno and FVP, adding
instructions for AArch32 and AArch64.

Updated section 4.1, summary of build options, to include a
description of the `JUNO_AARCH32_EL3_RUNTIME` build flag.

Change-Id: I4ed006522cab981371c382859063f088fbfcb8f7
Signed-off-by: Isla Mitchell <isla.mitchell@arm.com>
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