FVP: Update scripts to run GPT image

Updated scripts to:
1. Build FIP with GPT support enabled
2. Create GPT image with FIP binary inside it as a partition
3. Run GPT image on FVP base platform

Change-Id: Ia43c5e20bd0f4127b8bbd3ef488b683191d21b62
Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
diff --git a/fvp_utils.sh b/fvp_utils.sh
index 25bf8b3..1318385 100644
--- a/fvp_utils.sh
+++ b/fvp_utils.sh
@@ -620,4 +620,40 @@
     echo "$docker_registry"
 }
 
+# generate GPT image and archive it
+gen_gpt_bin() {
+    raw_image="fip_gpt.bin"
+    img_uuid="FB90808A-BA9A-4D42-B9A2-A7A937144AEE"
+    img_bank_uuid=`uuidgen`
+    disk_uuid=`uuidgen`
+    bin="${1:?}"
+
+    # maximum FIP size 2MB
+    fip_max_size=2097152
+    start_sector=34
+    sector_size=512
+    num_sectors=$(($fip_max_size/$sector_size))
+    bin_size=$(stat -c %s $bin)
+
+    if [[ $fip_max_size -lt $bin_size ]]
+    then
+           echo "FIP binary ($bin_size bytes) larger than max partition 1"
+                "size ($fip_max_size byte)"
+           return
+    fi
+
+    # create raw 5MB image
+    dd if=/dev/zero of=$raw_image bs=5M count=1
+
+    # create GPT image
+    sgdisk -a 1 -U $disk_uuid -n 1:$start_sector:+$num_sectors \
+           -c 1:FIP_A -t 1:$img_uuid $raw_image -u $img_bank_uuid
+
+    echo "write binary $bin at sector $start_sector"
+    dd if=$bin of=$raw_image bs=$sector_size seek=$start_sector \
+       count=$num_sectors conv=notrunc
+
+    archive_file "fip_gpt.bin"
+}
+
 set +u
diff --git a/group/tftf-l2-fvp/fvp-gpt,fvp-default:fvp-tftf.gpt-aemv8a.gpt-debug b/group/tftf-l2-fvp/fvp-gpt,fvp-default:fvp-tftf.gpt-aemv8a.gpt-debug
new file mode 100644
index 0000000..aa57540
--- /dev/null
+++ b/group/tftf-l2-fvp/fvp-gpt,fvp-default:fvp-tftf.gpt-aemv8a.gpt-debug
@@ -0,0 +1,5 @@
+#
+# Copyright (c) 2021, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
diff --git a/model/fvp_common.sh b/model/fvp_common.sh
index 608fc66..e22c8c7 100644
--- a/model/fvp_common.sh
+++ b/model/fvp_common.sh
@@ -25,6 +25,8 @@
 
 if [ "$bl2_at_el3" ]; then
 	has_fip=1
+elif [ "$fip_as_gpt" ]; then
+	has_bl1=1
 elif [ -z "$reset_to_spmin" -a -z "$reset_to_bl31" ]; then
 	has_bl1=1
 	has_fip=1
@@ -56,6 +58,7 @@
 
 ${has_bl1+-C bp.secureflashloader.fname=$bl1_bin}
 ${has_fip+-C bp.flashloader0.fname=$fip_bin}
+${fip_as_gpt+-C bp.flashloader0.fname=$fip_gpt_bin}
 
 ${dtb_bin+--data ${data_instance}=$dtb_bin@${dtb_addr:?}}
 ${kernel_bin+--data ${data_instance}=$kernel_bin@${kernel_addr:?}}
diff --git a/run_config/fvp-aemv8a.gpt b/run_config/fvp-aemv8a.gpt
new file mode 100644
index 0000000..c1de759
--- /dev/null
+++ b/run_config/fvp-aemv8a.gpt
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2021 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+post_fetch_tf_resource() {
+        local model="base-aemv8a"
+
+        fip_as_gpt="1" \
+        model="$model" gen_model_params
+
+        model="$model" gen_fvp_yaml
+}
diff --git a/run_config/fvp-tftf.gpt b/run_config/fvp-tftf.gpt
new file mode 100644
index 0000000..1225062
--- /dev/null
+++ b/run_config/fvp-tftf.gpt
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2021 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+fetch_tf_resource() {
+        uart="0" file="tftf.exp" track_expect
+        uart="1" file="hold_uart.exp" track_expect
+
+        payload_type="tftf" gen_fvp_yaml_template
+}
+
+post_tf_build() {
+        build_fip BL33="$archive/tftf.bin"
+}
+
+post_tf_archive() {
+        gen_gpt_bin "$archive/fip.bin"
+}
diff --git a/tf_config/fvp-gpt b/tf_config/fvp-gpt
new file mode 100644
index 0000000..0572149
--- /dev/null
+++ b/tf_config/fvp-gpt
@@ -0,0 +1,3 @@
+ARM_GPT_SUPPORT=1
+CROSS_COMPILE=aarch64-none-elf-
+PLAT=fvp