diff --git a/boards/arm64/fvp_base_revc_2xaemv8a/doc/index.rst b/boards/arm64/fvp_base_revc_2xaemv8a/doc/index.rst index 7fff1e993cb..ef3df9a7001 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 @@ To run with FVP, ARMFVP_BIN_PATH must be set before running: e.g. export ARMFVP_BIN_PATH= +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= + export ARMFVP_FIP_FILE= + Debugging ========= diff --git a/cmake/emu/armfvp.cmake b/cmake/emu/armfvp.cmake index afebd8ea3ff..8db5db81ab9 100644 --- a/cmake/emu/armfvp.cmake +++ b/cmake/emu/armfvp.cmake @@ -10,11 +10,36 @@ find_program( 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=") + 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}"