feat(ff-a): Implement FFA_MEM_PERM_GET/SET

This patch implements the new ABI from the FF-A v1.1 Beta0 spec. These
ABIs are expected to be used by S-EL0 use cases such as StandaloneMM or
other S-EL0 applications such as trusted firmware services or any other
S-EL0 FF-A partition.

Signed-off-by: Raghu Krishnamurthy <raghu.ncstate@gmail.com>
Change-Id: I6a57420ce5821993671362280a66c5c4f190ffbc
diff --git a/inc/vmapi/hf/call.h b/inc/vmapi/hf/call.h
index 749e4ac..6b57c92 100644
--- a/inc/vmapi/hf/call.h
+++ b/inc/vmapi/hf/call.h
@@ -456,3 +456,19 @@
 		.func = FFA_NOTIFICATION_INFO_GET_64,
 	});
 }
+
+static inline struct ffa_value ffa_mem_perm_get(uint64_t base_va)
+{
+	return ffa_call((struct ffa_value){.func = FFA_MEM_PERM_GET_32,
+					   .arg1 = base_va});
+}
+
+static inline struct ffa_value ffa_mem_perm_set(uint64_t base_va,
+						uint32_t page_count,
+						uint32_t mem_perm)
+{
+	return ffa_call((struct ffa_value){.func = FFA_MEM_PERM_SET_32,
+					   .arg1 = base_va,
+					   .arg2 = page_count,
+					   .arg3 = mem_perm});
+}
diff --git a/inc/vmapi/hf/ffa.h b/inc/vmapi/hf/ffa.h
index dda1001..cc87c42 100644
--- a/inc/vmapi/hf/ffa.h
+++ b/inc/vmapi/hf/ffa.h
@@ -77,6 +77,8 @@
 #define FFA_SECONDARY_EP_REGISTER_64        0xC4000087
 #define FFA_MEM_PERM_GET_32                 0x84000088
 #define FFA_MEM_PERM_SET_32                 0x84000089
+#define FFA_MEM_PERM_GET_64                 0xC4000088
+#define FFA_MEM_PERM_SET_64                 0xC4000089
 
 /* FF-A error codes. */
 #define FFA_NOT_SUPPORTED      INT32_C(-1)
@@ -102,6 +104,10 @@
 
 #define FFA_SLEEP_INDEFINITE 0
 
+#define FFA_MEM_PERM_RO UINT32_C(0x7)
+#define FFA_MEM_PERM_RW UINT32_C(0x5)
+#define FFA_MEM_PERM_RX UINT32_C(0x3)
+
 /**
  * For use where the FF-A specification refers explicitly to '4K pages'. Not to
  * be confused with PAGE_SIZE, which is the translation granule Hafnium is