test(realm): add support for planes shared buffer

- Add support for per plane shared buffer.
- Map shared buffer in all Aux RTT if
  realm uses multiple RTTs.
- Support realm_printf for all planes.

Signed-off-by: Shruti Gupta <shruti.gupta@arm.com>
Change-Id: Ie6924bcb9e9bb3b8c368f796d33f84f4f6821935
diff --git a/realm/realm_payload_main.c b/realm/realm_payload_main.c
index eb4c9aa..2556c11 100644
--- a/realm/realm_payload_main.c
+++ b/realm/realm_payload_main.c
@@ -270,7 +270,7 @@
 	/* No serror handler registered by default */
 	unregister_custom_serror_handler();
 
-	realm_set_shared_structure((host_shared_data_t *)realm_get_ns_buffer());
+	realm_set_shared_structure(realm_get_ns_buffer());
 
 	if (realm_get_my_shared_structure() != NULL) {
 		uint8_t cmd = realm_shared_data_get_my_realm_cmd();
diff --git a/realm/realm_shared_data.c b/realm/realm_shared_data.c
index db66520..c52072e 100644
--- a/realm/realm_shared_data.c
+++ b/realm/realm_shared_data.c
@@ -9,6 +9,7 @@
 #include <assert.h>
 #include <host_shared_data.h>
 #include <realm_def.h>
+#include <realm_helpers.h>
 
 /**
  *   @brief    - Returns the base address of the shared region
@@ -16,14 +17,14 @@
  *   @return   - Base address of the shared region
  **/
 
-static host_shared_data_t *guest_shared_data;
+static host_shared_data_arr_t guest_shared_data;
 
 /*
  * Set guest mapped shared buffer pointer
  */
-void realm_set_shared_structure(host_shared_data_t *ptr)
+void realm_set_shared_structure(u_register_t ptr)
 {
-	guest_shared_data = ptr;
+	guest_shared_data = (host_shared_data_arr_t)ptr;
 }
 
 /*
@@ -31,7 +32,7 @@
  */
 host_shared_data_t *realm_get_my_shared_structure(void)
 {
-	return &guest_shared_data[REC_IDX(read_mpidr_el1())];
+	return &(*guest_shared_data)[realm_get_my_plane_num()][REC_IDX(read_mpidr_el1())];
 }
 
 /*
@@ -40,7 +41,7 @@
 u_register_t realm_shared_data_get_my_host_val(uint8_t index)
 {
 	assert(index < MAX_DATA_SIZE);
-	return guest_shared_data[REC_IDX(read_mpidr_el1())].host_param_val[index];
+	return (*guest_shared_data)[realm_get_my_plane_num()][REC_IDX(read_mpidr_el1())].host_param_val[index];
 }
 
 /*
@@ -48,7 +49,7 @@
  */
 uint8_t realm_shared_data_get_my_realm_cmd(void)
 {
-	return guest_shared_data[REC_IDX(read_mpidr_el1())].realm_cmd;
+	return (*guest_shared_data)[realm_get_my_plane_num()][REC_IDX(read_mpidr_el1())].realm_cmd;
 }
 
 /*
@@ -57,5 +58,45 @@
 void realm_shared_data_set_my_realm_val(uint8_t index, u_register_t val)
 {
 	assert(index < MAX_DATA_SIZE);
-	guest_shared_data[REC_IDX(read_mpidr_el1())].realm_out_val[index] = val;
+	(*guest_shared_data)[realm_get_my_plane_num()][REC_IDX(read_mpidr_el1())].realm_out_val[index] = val;
+}
+
+void realm_shared_data_set_plane_n_val(unsigned int plane_num, unsigned int rec_num,
+		uint8_t index, u_register_t val)
+{
+	assert(index < MAX_DATA_SIZE);
+	assert(plane_num < MAX_PLANE_COUNT);
+	assert(rec_num < MAX_REC_COUNT);
+	assert(is_plane0);
+
+	(*guest_shared_data)[plane_num][rec_num].realm_out_val[index] = val;
+}
+
+u_register_t realm_shared_data_get_plane_n_val(unsigned int plane_num,
+		unsigned int rec_num, uint8_t index)
+{
+	assert(plane_num < MAX_PLANE_COUNT);
+	assert(rec_num < MAX_REC_COUNT);
+	assert(is_plane0);
+
+	return (*guest_shared_data)[plane_num][rec_num].realm_out_val[index];
+}
+
+u_register_t realm_shared_data_get_plane_n_cmd(unsigned int plane_num,
+		unsigned int rec_num, uint8_t index)
+{
+	assert(plane_num < MAX_PLANE_COUNT);
+	assert(rec_num < MAX_REC_COUNT);
+	assert(is_plane0);
+
+	return (*guest_shared_data)[plane_num][rec_num].realm_cmd;
+}
+
+void realm_shared_data_set_plane_n_cmd(uint8_t cmd, unsigned int plane_num, unsigned int rec_num)
+{
+	assert(plane_num < MAX_PLANE_COUNT);
+	assert(rec_num < MAX_REC_COUNT);
+	assert(is_plane0);
+
+	(*guest_shared_data)[plane_num][rec_num].realm_cmd = cmd;
 }