test(boot): parse the FF-A manifest

Validate that after passing the partition's FF-A manifest using the boot
protocol, the partition can parse its content.

Change-Id: Ia46c7b6ae3e4f6ba57226d5704bd77a162a1520d
Signed-off-by: J-Alves <joao.alves@arm.com>
diff --git a/test/vmapi/ffa_secure_partition_only/secure_partition.c b/test/vmapi/ffa_secure_partition_only/secure_partition.c
index 3d80679..8fe4fcd 100644
--- a/test/vmapi/ffa_secure_partition_only/secure_partition.c
+++ b/test/vmapi/ffa_secure_partition_only/secure_partition.c
@@ -340,3 +340,35 @@
 	EXPECT_EQ(ffa_boot_info_content_format(fdt_info),
 		  FFA_BOOT_INFO_FLAG_CONTENT_FORMAT_ADDR);
 }
+
+/**
+ * Validate that SP can access its own FF-A manifest.
+ */
+TEST(ffa_boot_info, parse_fdt)
+{
+	struct ffa_boot_info_header* boot_info_header = get_boot_info_header();
+	struct ffa_boot_info_desc* fdt_info;
+	struct fdt fdt;
+	struct fdt_node root;
+	void* fdt_ptr;
+	size_t fdt_len;
+	uint64_t ffa_version;
+
+	fdt_info = get_boot_info_desc(boot_info_header, FFA_BOOT_INFO_TYPE_STD,
+				      FFA_BOOT_INFO_TYPE_ID_FDT);
+
+	ASSERT_TRUE(fdt_info != NULL);
+
+	HFTEST_LOG("FF-A Manifest Address: %x", fdt_info->content);
+	// NOLINTNEXTLINE(performance-no-int-to-ptr)
+	fdt_ptr = (void*)fdt_info->content;
+
+	ASSERT_TRUE(fdt_size_from_header(fdt_ptr, &fdt_len));
+	ASSERT_TRUE(fdt_init_from_ptr(&fdt, fdt_ptr, fdt_len));
+	EXPECT_TRUE(fdt_find_node(&fdt, "/", &root));
+
+	EXPECT_TRUE(fdt_is_compatible(&root, "arm,ffa-manifest-1.0"));
+	EXPECT_TRUE(fdt_read_number(&root, "ffa-version", &ffa_version));
+	HFTEST_LOG("FF-A Version: %x", ffa_version);
+	ASSERT_EQ(ffa_version, MAKE_FFA_VERSION(1, 1));
+}