fix(ffa): add check for 'Address Range Alignemnt Hint'

FFA_MEM_RETRIEVE_REQ ABI defines a 'Address Range Alignment Hint'
which is curently not supported by Hafnium.

Adding a check to ensure the field is 0, returning
FFA_INVALID_PARAMETERS otherwise.

Improving the already existing `ffa_validate_retrieve_req_mbz` unit
test to take into account this field as well.

Change-Id: I1827b929c7b5a26cd874b5984c7de198f1d6be25
Signed-off-by: Federico Recanati <federico.recanati@arm.com>
diff --git a/src/ffa_memory.c b/src/ffa_memory.c
index f51bbd8..d68636c 100644
--- a/src/ffa_memory.c
+++ b/src/ffa_memory.c
@@ -1460,6 +1460,7 @@
 			*permissions);
 		return ffa_error(FFA_INVALID_PARAMETERS);
 	}
+
 	if (share_func == FFA_MEM_DONATE_32 &&
 	    data_access != FFA_DATA_ACCESS_NOT_SPECIFIED) {
 		dlog_verbose(
@@ -2250,6 +2251,23 @@
 		goto out;
 	}
 
+	if ((retrieve_request->flags &
+	     FFA_MEMORY_REGION_ADDRESS_RANGE_HINT_VALID) != 0) {
+		dlog_verbose(
+			"Retriever specified 'address range alignment hint'"
+			" not supported.\n");
+		ret = ffa_error(FFA_INVALID_PARAMETERS);
+		goto out;
+	}
+	if ((retrieve_request->flags &
+	     FFA_MEMORY_REGION_ADDRESS_RANGE_HINT_MASK) != 0) {
+		dlog_verbose(
+			"Bits 8-5 must be zero in memory region's flags "
+			"(address range alignment hint not supported).\n");
+		ret = ffa_error(FFA_INVALID_PARAMETERS);
+		goto out;
+	}
+
 	if ((retrieve_request->flags & ~0x7FF) != 0U) {
 		dlog_verbose(
 			"Bits 31-10 must be zero in memory region's flags.\n");