fvp: add support for FVP Base Platform

Add support for running the Base Platform FVP. This model offers more
configuration options and more peripherals than the Foundation model.
It's available free of charge on the Arm Developer website.

Link: https://developer.arm.com/downloads/-/arm-ecosystem-models
Reviewed-by: Gyorgy Szing <gyorgy.szing@arm.com>
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
Signed-off-by: Balint Dobszay <balint.dobszay@arm.com>
diff --git a/fvp.mk b/fvp.mk
index 8be3fb2..9575312 100644
--- a/fvp.mk
+++ b/fvp.mk
@@ -52,8 +52,16 @@
 EDK2_BUILD		?= RELEASE
 endif
 EDK2_BIN		?= $(EDK2_PLATFORMS_PATH)/Build/ArmVExpress-FVP-AArch64/$(EDK2_BUILD)_$(EDK2_TOOLCHAIN)/FV/FVP_$(EDK2_ARCH)_EFI.fd
+FVP_USE_BASE_PLAT	?= n
+ifeq ($(FVP_USE_BASE_PLAT),y)
+FVP_PATH		?= $(ROOT)/Base_RevC_AEMvA_pkg/models/Linux64_GCC-9.3
+FVP_BIN			?= FVP_Base_RevC-2xAEMvA
+FVP_LINUX_DTB		?= $(LINUX_PATH)/arch/arm64/boot/dts/arm/fvp-base-revc.dtb
+else
 FVP_PATH		?= $(ROOT)/Foundation_Platformpkg/models/Linux64_GCC-9.3
 FVP_BIN			?= Foundation_Platform
+FVP_LINUX_DTB		?= $(LINUX_PATH)/arch/arm64/boot/dts/arm/foundation-v8-gicv3-psci.dtb
+endif
 ifeq ($(wildcard $(FVP_PATH)),)
 $(error $(FVP_PATH) does not exist)
 endif
@@ -239,7 +247,7 @@
 	rm -f $(BOOT_IMG)
 	mformat -i $(BOOT_IMG) -n 64 -h 255 -T 131072 -v "BOOT IMG" -C ::
 	mcopy -i $(BOOT_IMG) $(LINUX_PATH)/arch/arm64/boot/Image ::
-	mcopy -i $(BOOT_IMG) $(LINUX_PATH)/arch/arm64/boot/dts/arm/foundation-v8-gicv3-psci.dtb ::
+	mcopy -i $(BOOT_IMG) $(FVP_LINUX_DTB) ::/fvp.dtb
 	mmd -i $(BOOT_IMG) ::/EFI
 	mmd -i $(BOOT_IMG) ::/EFI/BOOT
 	mcopy -i $(BOOT_IMG) $(ROOT)/out-br/images/rootfs.cpio.gz ::/initrd.img
@@ -257,6 +265,18 @@
 run: all
 	$(MAKE) run-only
 
+ifeq ($(FVP_USE_BASE_PLAT),y)
+FVP_ARGS ?= \
+	-C bp.ve_sysregs.exit_on_shutdown=1 \
+	-C cache_state_modelled=0 \
+	-C pctl.startup=0.0.0.0 \
+	-C cluster0.NUM_CORES=4 \
+	-C cluster1.NUM_CORES=4 \
+	-C bp.secure_memory=1 \
+	-C bp.secureflashloader.fname=$(TF_A_PATH)/build/fvp/$(TF_A_BUILD)/bl1.bin \
+	-C bp.flashloader0.fname=$(TF_A_PATH)/build/fvp/$(TF_A_BUILD)/fip.bin \
+	-C bp.virtioblockdevice.image_path=$(BOOT_IMG)
+else
 FVP_ARGS ?= \
 	--arm-v8.0 \
 	--cores=4 \
@@ -266,6 +286,7 @@
 	--data="$(TF_A_PATH)/build/fvp/$(TF_A_BUILD)/bl1.bin"@0x0 \
 	--data="$(TF_A_PATH)/build/fvp/$(TF_A_BUILD)/fip.bin"@0x8000000 \
 	--block-device=$(BOOT_IMG)
+endif
 
 run-only:
 	$(FVP_PATH)/$(FVP_BIN) $(FVP_ARGS)