feat(handoff): add basic firmware handoff tests

Add tests to sanity check information shared between BL31 and NS world
using the firmware handoff framework.

Change-Id: I9d00292db7732157d0815e6159438c0db08551ad
Signed-off-by: Harrison Mutai <harrison.mutai@arm.com>
diff --git a/tftf/tests/misc_tests/test_firmware_handoff.c b/tftf/tests/misc_tests/test_firmware_handoff.c
new file mode 100644
index 0000000..bd565ae
--- /dev/null
+++ b/tftf/tests/misc_tests/test_firmware_handoff.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <assert.h>
+
+#include <test_helpers.h>
+#include <tftf_lib.h>
+#include <transfer_list.h>
+
+extern u_register_t hw_config_base;
+extern u_register_t ns_tl;
+extern u_register_t tl_signature;
+
+#define DTB_PREAMBLE U(0xedfe0dd0)
+
+test_result_t test_handoff_header(void)
+{
+	struct transfer_list_header *tl = (struct transfer_list_header *)ns_tl;
+
+	assert((uint32_t)tl_signature ==
+	       (REGISTER_CONVENTION_VERSION_MASK | TRANSFER_LIST_SIGNATURE));
+
+	if (transfer_list_check_header(tl) == TL_OPS_NON) {
+		return TEST_RESULT_FAIL;
+	}
+
+	return TEST_RESULT_SUCCESS;
+}
+
+test_result_t test_handoff_dtb_payload(void)
+{
+	tftf_testcase_printf("Validating HW_CONFIG from transfer list.\n");
+	struct transfer_list_header *tl = (struct transfer_list_header *)ns_tl;
+	struct transfer_list_entry *te = (void *)tl + tl->hdr_size;
+	uintptr_t dtb_ptr;
+
+	te = transfer_list_find(tl, TL_TAG_FDT);
+
+	if (te == NULL) {
+		tftf_testcase_printf(
+			"Failed to find HW CONFIG TE in transfer list!");
+		return TEST_RESULT_FAIL;
+	}
+
+	dtb_ptr = (unsigned long)transfer_list_entry_data(te);
+
+	if ((dtb_ptr != hw_config_base) &&
+	    (*(uint32_t *)dtb_ptr != DTB_PREAMBLE)) {
+		return TEST_RESULT_FAIL;
+	}
+
+	return TEST_RESULT_SUCCESS;
+}
diff --git a/tftf/tests/tests-firmware-handoff.mk b/tftf/tests/tests-firmware-handoff.mk
new file mode 100644
index 0000000..515188a
--- /dev/null
+++ b/tftf/tests/tests-firmware-handoff.mk
@@ -0,0 +1,13 @@
+#
+# Copyright (c) 2023, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+ifeq (${TRANSFER_LIST}, 1)
+
+TESTS_SOURCES	+=	$(addprefix tftf/tests/misc_tests/,		\
+	test_firmware_handoff.c						\
+)
+
+endif
diff --git a/tftf/tests/tests-firmware-handoff.xml b/tftf/tests/tests-firmware-handoff.xml
new file mode 100644
index 0000000..2761626
--- /dev/null
+++ b/tftf/tests/tests-firmware-handoff.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright (c) 2023, Arm Limited. All rights reserved.
+
+  SPDX-License-Identifier: BSD-3-Clause
+-->
+
+<testsuites>
+  <testsuite name="Firmware Handoff" description="Validate transfer list managed by firmware hanoff framework">
+     <testcase name="Validate transfer list header" function="test_handoff_header" />
+     <testcase name="Validate HW_CONFIG in transfer list" function="test_handoff_dtb_payload" />
+  </testsuite>
+</testsuites>