boards: fvp_base_revc_2xaemv8a: permit running Zephyr at EL1NS
It may be needed to run Zephyr at EL1NS level with `CONFIG_ARMV8_A_NS`
In order to run at EL1NS, you'll need a proper Firmware loaded in the
FVP model to run Zephyr at non-secure EL3.
The ARM TF-A for FVP can used to run Zephyr as preloaded BL33.
This adds the necessary cmake scripts to load the TF-A binaries and
load Zephyr as preloaded BL33 payload.
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
diff --git a/boards/arm64/fvp_base_revc_2xaemv8a/doc/index.rst b/boards/arm64/fvp_base_revc_2xaemv8a/doc/index.rst
index 7fff1e9..ef3df9a 100644
--- a/boards/arm64/fvp_base_revc_2xaemv8a/doc/index.rst
+++ b/boards/arm64/fvp_base_revc_2xaemv8a/doc/index.rst
@@ -71,6 +71,29 @@
e.g. export ARMFVP_BIN_PATH=<path/to/fvp/dir>
+Running Zephyr at EL1NS
+***********************
+
+In order to run Zephyr as EL1NS with ``CONFIG_ARMV8_A_NS``, you'll need a proper
+Trusted Firmware loaded in the FVP model.
+
+The ARM TF-A for FVP can be used to run Zephyr as preloaded BL33 payload.
+
+Checkout and Build the TF-A:
+
+.. code-block:: console
+
+ git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git --depth 1
+ cd trusted-firmware-a/
+ make PLAT=fvp PRELOADED_BL33_BASE="0x88000000" all fip
+
+then export the ``ARMFVP_BL1_FILE` and ``ARMFVP_FIP_FILE`` environment variables:
+
+.. code-block:: console
+
+ export ARMFVP_BL1_FILE=<path/to/tfa-a/build/fvp/release/bl1.bin>
+ export ARMFVP_FIP_FILE=<path/to/tfa-a/build/fvp/release/fip.bin>
+
Debugging
=========
diff --git a/cmake/emu/armfvp.cmake b/cmake/emu/armfvp.cmake
index afebd8e..8db5db8 100644
--- a/cmake/emu/armfvp.cmake
+++ b/cmake/emu/armfvp.cmake
@@ -10,11 +10,36 @@
NAMES ${ARMFVP_BIN_NAME}
)
+if(CONFIG_ARMV8_A_NS)
+ foreach(filetype BL1 FIP)
+ if ((NOT DEFINED ARMFVP_${filetype}_FILE) AND (EXISTS "$ENV{ARMFVP_${filetype}_FILE}"))
+ set(ARMFVP_${filetype}_FILE "$ENV{ARMFVP_${filetype}_FILE}" CACHE FILEPATH
+ "ARM FVP ${filetype} File specified in environment"
+ )
+ endif()
+
+ if(NOT EXISTS "${ARMFVP_${filetype}_FILE}")
+ string(TOLOWER ${filetype} filename)
+ message(FATAL_ERROR "Please specify ARMFVP_${filetype}_FILE in environment "
+ "or with -DARMFVP_${filetype}_FILE=</path/to/${filename}.bin>")
+ endif()
+ endforeach()
+
+ set(ARMFVP_FLAGS ${ARMFVP_FLAGS}
+ -C bp.secureflashloader.fname=${ARMFVP_BL1_FILE}
+ -C bp.flashloader0.fname=${ARMFVP_FIP_FILE}
+ --data cluster0.cpu0="${APPLICATION_BINARY_DIR}/zephyr/${KERNEL_BIN_NAME}"@0x88000000
+ )
+else()
+ set(ARMFVP_FLAGS ${ARMFVP_FLAGS}
+ -a ${APPLICATION_BINARY_DIR}/zephyr/${KERNEL_ELF_NAME}
+ )
+endif()
+
add_custom_target(run
COMMAND
${ARMFVP}
${ARMFVP_FLAGS}
- -a ${APPLICATION_BINARY_DIR}/zephyr/${KERNEL_ELF_NAME}
DEPENDS ${ARMFVP} ${logical_target_for_zephyr_elf}
WORKING_DIRECTORY ${APPLICATION_BINARY_DIR}
COMMENT "FVP: ${ARMFVP}"