fix: report indirect message and direct message 2

FFA_PARTITION_INFO_GET was missing to report the properties,
and including the FF-A version in the checks before reporting:
- FFA_PARTITION_NOTIFICATION => at least FF-A v1.1.
- FFA_PARTITION_INDIRECT_MSG => at least FF-A v1.1.
- FFA_PARTITION_DIRECT_REQ2_RECV => at least FF-A v1.2.
- FFA_PARTITION_DIRECT_REQ2_SEND => at least FF-A v1.2.

BREAKING: this change will make the tests fail. Subsequent patches
reestablish the order.

Signed-off-by: J-Alves <joao.alves@arm.com>
Change-Id: If0ff1705d24ed254bec428ceb166d05596cdac33
diff --git a/src/api.c b/src/api.c
index a0ac96f..8efa5c0 100644
--- a/src/api.c
+++ b/src/api.c
@@ -470,16 +470,36 @@
 				  .arg3 = partition_info_size};
 }
 
+/**
+ * Set properties accoridng to the version of the partition, and the FF-A
+ * features it supports.
+ */
+static ffa_partition_properties_t api_ffa_partitions_info_get_properties(
+	ffa_id_t caller_id, struct vm *vm)
+{
+	ffa_partition_properties_t properties;
+
+	properties = plat_ffa_partition_properties(caller_id, vm);
+	properties |= FFA_PARTITION_AARCH64_EXEC;
+
+	if (vm->ffa_version >= FFA_VERSION_1_1) {
+		properties |= vm_are_notifications_enabled(vm)
+				      ? FFA_PARTITION_NOTIFICATION
+				      : 0;
+		properties |= vm->messaging_method & FFA_PARTITION_INDIRECT_MSG;
+	}
+
+	return properties;
+}
+
 static void api_ffa_fill_partition_info(
-	struct ffa_partition_info *out_partition, struct vm *vm, ffa_id_t vm_id)
+	struct ffa_partition_info *out_partition, struct vm *vm,
+	ffa_id_t caller_id)
 {
 	out_partition->vm_id = vm->id;
 	out_partition->vcpu_count = vm->vcpu_count;
-	out_partition->properties = plat_ffa_partition_properties(vm_id, vm);
-	out_partition->properties |= vm_are_notifications_enabled(vm)
-					     ? FFA_PARTITION_NOTIFICATION
-					     : 0;
-	out_partition->properties |= FFA_PARTITION_AARCH64_EXEC;
+	out_partition->properties =
+		api_ffa_partitions_info_get_properties(caller_id, vm);
 }
 
 /**
@@ -491,7 +511,8 @@
  */
 static ffa_vm_count_t api_ffa_fill_partitions_info_array(
 	struct ffa_partition_info out_partitions[], size_t out_partitions_len,
-	const struct ffa_uuid *uuid_to_find, bool count_flag, ffa_id_t vm_id)
+	const struct ffa_uuid *uuid_to_find, bool count_flag,
+	ffa_id_t caller_id)
 {
 	ffa_vm_count_t vms_found = 0;
 	bool match_any = ffa_uuid_is_null(uuid_to_find);
@@ -527,7 +548,7 @@
 				}
 
 				api_ffa_fill_partition_info(out_partition, vm,
-							    vm_id);
+							    caller_id);
 				if (match_any) {
 					out_partition->uuid = uuid;
 				}