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;
}