Trusted Firmware-A Tests, version 2.0

This is the first public version of the tests for the Trusted
Firmware-A project. Please see the documentation provided in the
source tree for more details.

Change-Id: I6f3452046a1351ac94a71b3525c30a4ca8db7867
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
Co-authored-by: amobal01 <amol.balasokamble@arm.com>
Co-authored-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
Co-authored-by: Asha R <asha.r@arm.com>
Co-authored-by: Chandni Cherukuri <chandni.cherukuri@arm.com>
Co-authored-by: David Cunado <david.cunado@arm.com>
Co-authored-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
Co-authored-by: Douglas Raillard <douglas.raillard@arm.com>
Co-authored-by: dp-arm <dimitris.papastamos@arm.com>
Co-authored-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
Co-authored-by: Jonathan Wright <jonathan.wright@arm.com>
Co-authored-by: Kévin Petit <kevin.petit@arm.com>
Co-authored-by: Roberto Vargas <roberto.vargas@arm.com>
Co-authored-by: Sathees Balya <sathees.balya@arm.com>
Co-authored-by: Shawon Roy <Shawon.Roy@arm.com>
Co-authored-by: Soby Mathew <soby.mathew@arm.com>
Co-authored-by: Thomas Abraham <thomas.abraham@arm.com>
Co-authored-by: Vikram Kanigiri <vikram.kanigiri@arm.com>
Co-authored-by: Yatharth Kochar <yatharth.kochar@arm.com>
diff --git a/el3_payload/Makefile b/el3_payload/Makefile
new file mode 100644
index 0000000..f6e809f
--- /dev/null
+++ b/el3_payload/Makefile
@@ -0,0 +1,91 @@
+#
+# Copyright (c) 2018, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+CROSS_COMPILE	:=	aarch64-linux-gnu-
+CC		:=	${CROSS_COMPILE}gcc
+AS		:=	${CROSS_COMPILE}as
+LD		:=	${CROSS_COMPILE}ld
+OC		:=	${CROSS_COMPILE}objcopy
+OD		:=	${CROSS_COMPILE}objdump
+
+PLAT		?=	fvp
+
+ASFLAGS		:=	-nostdinc -ffreestanding -Wa,--fatal-warnings -Werror
+ASFLAGS		+=	-Iplat/${PLAT}/ -I.
+
+PLAT_BUILD_DIR	:=	build/${PLAT}
+SOURCES		:=	entrypoint.S spin.S uart.S plat/${PLAT}/platform.S
+OBJS		:=	$(patsubst %,$(PLAT_BUILD_DIR)/%,$(notdir $(SOURCES:.S=.o)))
+
+PROGRAM		:=	el3_payload
+LINKER_SCRIPT	:=	${PLAT_BUILD_DIR}/${PROGRAM}.ld
+ELF		:=	${PLAT_BUILD_DIR}/${PROGRAM}.elf
+BIN		:=	${PLAT_BUILD_DIR}/${PROGRAM}.bin
+DUMP		:=	${PLAT_BUILD_DIR}/${PROGRAM}.dump
+
+include plat/${PLAT}/platform.mk
+
+all: ${BIN}
+
+${PLAT_BUILD_DIR}:
+	mkdir -p $@
+
+${PLAT_BUILD_DIR}/%.o: %.S ${PLAT_BUILD_DIR}
+	@echo "  CC      $<"
+	${CC} ${ASFLAGS} -c $< -o $@
+
+# Specific rule for this '.o' file to avoid worrying about
+# plat/${PLAT}/platform.S being in a sub-directory...
+# TODO: Fix this workaround.
+${PLAT_BUILD_DIR}/platform.o: plat/${PLAT}/platform.S ${PLAT_BUILD_DIR}
+	@echo "  CC      $<"
+	${CC} ${ASFLAGS} -c $< -o $@
+
+${PLAT_BUILD_DIR}/%.ld: %.ld.S ${PLAT_BUILD_DIR}
+	@echo "  PP      $<"
+	${CC} -DDRAM_BASE=${DRAM_BASE} -DDRAM_SIZE=${DRAM_SIZE} -E -P -o $@ $<
+
+${ELF}: ${LINKER_SCRIPT} ${OBJS}
+	@echo "  LD      $<"
+	${LD} ${LDFLAGS} ${OBJS} --script ${LINKER_SCRIPT} -o $@
+
+${BIN}: ${ELF}
+	@echo "  BIN     $@"
+	${OC} -O binary $< $@
+
+${DUMP}: $(ELF)
+	@echo "  OD      $$@"
+	${OD} -dx $< > $@
+
+dump: ${DUMP}
+
+clean:
+	rm -rf ${PLAT_BUILD_DIR}
+
+distclean: clean
+	rm -rf build/
+
+run: run_${PLAT}
+
+run_juno: ${ELF} scripts/juno/run_ds5_script.sh scripts/juno/load_el3_payload.ds
+	scripts/juno/run_ds5_script.sh scripts/juno/load_el3_payload.ds
+
+run_fvp: scripts/fvp/run_fvp.sh
+	scripts/fvp/run_fvp.sh
+
+help:
+	@echo "EL3 test payload"
+	@echo
+	@echo "To build:"
+	@echo "make [PLAT=fvp|juno] [TARGETS]"
+	@echo ""
+	@echo "The default platform is fvp."
+	@echo
+	@echo "TARGETS:"
+	@echo "  all		Build the payload  [default target]"
+	@echo "  dump		Generate a dump file of the program"
+	@echo "  run		Run the payload on the given platform."
+	@echo "         	/!\ For Juno, requires a connection to a Juno board via DSTREAM"