feat(rmm): update rec_exit to use top for ripas
This patch updates rec_exit to use 'base' and 'top'
for 'set_ripas' structure to match RMM Specifiction
1.0-eac1.
Name of "struct smc_result *" parameter is unified
to "res" for all functions.
Signed-off-by: AlexeiFedorov <Alexei.Fedorov@arm.com>
Change-Id: I31df2be5c6d11623dcaa18860dcffa61de04134e
diff --git a/lib/smc/include/smc-rmi.h b/lib/smc/include/smc-rmi.h
index f9e5773..b0c0176 100644
--- a/lib/smc/include/smc-rmi.h
+++ b/lib/smc/include/smc-rmi.h
@@ -465,7 +465,7 @@
/* Base address of pending RIPAS change */
unsigned long ripas_base; /* 0x500 */
/* Size of pending RIPAS change */
- unsigned long ripas_size; /* 0x508 */
+ unsigned long ripas_top; /* 0x508 */
/* RIPAS value of pending RIPAS change */
unsigned char ripas_value; /* 0x510 */
}, 0x500, 0x600);
diff --git a/lib/smc/src/smc-rmi-offsets.c b/lib/smc/src/smc-rmi-offsets.c
index 81bfdbc..06fc811 100644
--- a/lib/smc/src/smc-rmi-offsets.c
+++ b/lib/smc/src/smc-rmi-offsets.c
@@ -49,7 +49,7 @@
COMPILER_ASSERT(offsetof(struct rmi_rec_exit, cntv_ctl) == 0x410);
COMPILER_ASSERT(offsetof(struct rmi_rec_exit, cntv_cval) == 0x418);
COMPILER_ASSERT(offsetof(struct rmi_rec_exit, ripas_base) == 0x500);
-COMPILER_ASSERT(offsetof(struct rmi_rec_exit, ripas_size) == 0x508);
+COMPILER_ASSERT(offsetof(struct rmi_rec_exit, ripas_top) == 0x508);
COMPILER_ASSERT(offsetof(struct rmi_rec_exit, ripas_value) == 0x510);
COMPILER_ASSERT(offsetof(struct rmi_rec_exit, imm) == 0x600);
COMPILER_ASSERT(offsetof(struct rmi_rec_exit, pmu_ovf) == 0x700);
diff --git a/plat/host/common/include/host_rmi_wrappers.h b/plat/host/common/include/host_rmi_wrappers.h
index f95d307..f1f09f6 100644
--- a/plat/host/common/include/host_rmi_wrappers.h
+++ b/plat/host/common/include/host_rmi_wrappers.h
@@ -8,26 +8,26 @@
#include <smc-rmi.h>
-void host_rmi_granule_delegate(void *granule_address, struct smc_result *ret);
-void host_rmi_granule_undelegate(void *granule_address, struct smc_result *ret);
-void host_rmi_realm_create(void *rd, void *params_ptr, struct smc_result *ret);
-void host_rmi_realm_destroy(void *rd, struct smc_result *ret);
+void host_rmi_granule_delegate(void *granule_address, struct smc_result *res);
+void host_rmi_granule_undelegate(void *granule_address, struct smc_result *res);
+void host_rmi_realm_create(void *rd, void *params_ptr, struct smc_result *res);
+void host_rmi_realm_destroy(void *rd, struct smc_result *res);
void host_rmi_rtt_create(void *rd, void *rtt, void *ipa,
- unsigned int level, struct smc_result *ret);
+ unsigned int level, struct smc_result *res);
void host_rmi_rtt_destroy(void *rd, void *ipa, unsigned int level,
- struct smc_result *ret);
-void host_rmi_rec_aux_count(void *rd, struct smc_result *ret);
+ struct smc_result *res);
+void host_rmi_rec_aux_count(void *rd, struct smc_result *res);
void host_rmi_rec_create(void *rd, void *rec, void *params_ptr,
- struct smc_result *ret);
-void host_rmi_rec_destroy(void *rec, struct smc_result *ret);
-void host_rmi_realm_activate(void *rd, struct smc_result *ret);
-void host_rmi_rec_enter(void *rec, void *run_ptr, struct smc_result *ret);
+ struct smc_result *res);
+void host_rmi_rec_destroy(void *rec, struct smc_result *res);
+void host_rmi_realm_activate(void *rd, struct smc_result *res);
+void host_rmi_rec_enter(void *rec, void *run_ptr, struct smc_result *res);
void host_rmi_data_create(uintptr_t data, void *rd, uintptr_t ipa,
- uintptr_t src, struct smc_result *ret);
+ uintptr_t src, struct smc_result *res);
void host_rmi_data_create_unknown(void *rd, uintptr_t data, uintptr_t ipa,
- struct smc_result *ret);
+ struct smc_result *res);
void host_rmi_rtt_init_ripas(void *rd, uintptr_t base, uintptr_t top,
- struct smc_result *ret);
-void host_rmi_data_destroy(void *rd, uintptr_t ipa, struct smc_result *ret);
+ struct smc_result *res);
+void host_rmi_data_destroy(void *rd, uintptr_t ipa, struct smc_result *res);
#endif /* HOST_RMI_WRAPPERS_H */
diff --git a/plat/host/common/src/host_rmi_wrappers.c b/plat/host/common/src/host_rmi_wrappers.c
index 131744c..6d98ffb 100644
--- a/plat/host/common/src/host_rmi_wrappers.c
+++ b/plat/host/common/src/host_rmi_wrappers.c
@@ -13,42 +13,42 @@
unsigned long arg3,
unsigned long arg4,
unsigned long arg5,
- struct smc_result *ret);
+ struct smc_result *res);
-void host_rmi_granule_delegate(void *granule_address, struct smc_result *ret)
+void host_rmi_granule_delegate(void *granule_address, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_GRANULE_DELEGATE,
(uintptr_t)granule_address,
0, 0, 0, 0, 0,
- ret);
+ res);
}
-void host_rmi_granule_undelegate(void *granule_address, struct smc_result *ret)
+void host_rmi_granule_undelegate(void *granule_address, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_GRANULE_UNDELEGATE,
(uintptr_t)granule_address,
0, 0, 0, 0, 0,
- ret);
+ res);
}
-void host_rmi_realm_create(void *rd, void *params_ptr, struct smc_result *ret)
+void host_rmi_realm_create(void *rd, void *params_ptr, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_REALM_CREATE,
(uintptr_t)rd,
(uintptr_t)params_ptr,
0, 0, 0, 0,
- ret);
+ res);
}
-void host_rmi_realm_destroy(void *rd, struct smc_result *ret)
+void host_rmi_realm_destroy(void *rd, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_REALM_DESTROY,
(uintptr_t)rd,
0, 0, 0, 0, 0,
- ret);
+ res);
}
-void host_rmi_rtt_create(void *rd, void *rtt, void *ipa, unsigned int level, struct smc_result *ret)
+void host_rmi_rtt_create(void *rd, void *rtt, void *ipa, unsigned int level, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_RTT_CREATE,
(uintptr_t)rd,
@@ -56,97 +56,97 @@
(uintptr_t)ipa,
level,
0, 0,
- ret);
+ res);
}
void host_rmi_rtt_destroy(void *rd, void *ipa, unsigned int level,
- struct smc_result *ret)
+ struct smc_result *res)
{
handle_ns_smc(SMC_RMM_RTT_DESTROY,
(uintptr_t)rd,
(uintptr_t)ipa,
level,
0, 0, 0,
- ret);
+ res);
}
-void host_rmi_rec_aux_count(void *rd, struct smc_result *ret)
+void host_rmi_rec_aux_count(void *rd, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_REC_AUX_COUNT,
(uintptr_t)rd,
0, 0, 0, 0, 0,
- ret);
+ res);
}
-void host_rmi_rec_create(void *rd, void *rec, void *params_ptr, struct smc_result *ret)
+void host_rmi_rec_create(void *rd, void *rec, void *params_ptr, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_REC_CREATE,
(uintptr_t)rd,
(uintptr_t)rec,
(uintptr_t)params_ptr,
0, 0, 0,
- ret);
+ res);
}
-void host_rmi_rec_destroy(void *rec, struct smc_result *ret)
+void host_rmi_rec_destroy(void *rec, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_REC_DESTROY,
(uintptr_t)rec,
0, 0, 0, 0, 0,
- ret);
+ res);
}
-void host_rmi_realm_activate(void *rd, struct smc_result *ret)
+void host_rmi_realm_activate(void *rd, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_REALM_ACTIVATE,
(uintptr_t)rd,
0, 0, 0, 0, 0,
- ret);
+ res);
}
-void host_rmi_rec_enter(void *rec, void *run_ptr, struct smc_result *ret)
+void host_rmi_rec_enter(void *rec, void *run_ptr, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_REC_ENTER,
(uintptr_t)rec,
(uintptr_t)run_ptr,
0, 0, 0, 0,
- ret);
+ res);
}
void host_rmi_data_create(uintptr_t data, void *rd, uintptr_t ipa,
- uintptr_t src, struct smc_result *ret)
+ uintptr_t src, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_DATA_CREATE,
(uintptr_t)data,
(uintptr_t)rd, ipa, src,
0, 0,
- ret);
+ res);
}
void host_rmi_data_create_unknown(void *rd, uintptr_t data, uintptr_t ipa,
- struct smc_result *ret)
+ struct smc_result *res)
{
handle_ns_smc(SMC_RMM_DATA_CREATE_UNKNOWN,
(uintptr_t)rd,
(uintptr_t)data, ipa,
0, 0, 0,
- ret);
+ res);
}
void host_rmi_rtt_init_ripas(void *rd, uintptr_t base, uintptr_t top,
- struct smc_result *ret)
+ struct smc_result *res)
{
handle_ns_smc(SMC_RMM_RTT_INIT_RIPAS,
(uintptr_t)rd,
base, top,
0, 0, 0,
- ret);
+ res);
}
-void host_rmi_data_destroy(void *rd, uintptr_t ipa, struct smc_result *ret)
+void host_rmi_data_destroy(void *rd, uintptr_t ipa, struct smc_result *res)
{
handle_ns_smc(SMC_RMM_DATA_DESTROY,
(uintptr_t)rd, ipa,
0, 0, 0, 0,
- ret);
+ res);
}
diff --git a/runtime/core/handler.c b/runtime/core/handler.c
index 9550bb2..891b043 100644
--- a/runtime/core/handler.c
+++ b/runtime/core/handler.c
@@ -52,14 +52,14 @@
typedef unsigned long (*handler_5)(unsigned long arg0, unsigned long arg1,
unsigned long arg2, unsigned long arg3,
unsigned long arg4);
-typedef void (*handler_1_o)(unsigned long arg0, struct smc_result *ret);
+typedef void (*handler_1_o)(unsigned long arg0, struct smc_result *res);
typedef void (*handler_2_o)(unsigned long arg0, unsigned long arg1,
- struct smc_result *ret);
+ struct smc_result *res);
typedef void (*handler_3_o)(unsigned long arg0, unsigned long arg1,
- unsigned long arg2, struct smc_result *ret);
+ unsigned long arg2, struct smc_result *res);
typedef void (*handler_4_o)(unsigned long arg0, unsigned long arg1,
unsigned long arg2, unsigned long arg3,
- struct smc_result *ret);
+ struct smc_result *res);
/*
* SMC RMI handler type encoding:
@@ -167,7 +167,7 @@
static void rmi_log_on_exit(unsigned long handler_id,
unsigned long args[],
- struct smc_result *ret)
+ struct smc_result *res)
{
const struct smc_handler *handler = &smc_handlers[handler_id];
unsigned long function_id = SMC64_RMI_FID(handler_id);
@@ -183,11 +183,11 @@
* RMM_VERSION is special because it returns the
* version number, not the error code.
*/
- INFO("SMC_RMM_%-21s > %lx\n", handler->fn_name, ret->x[0]);
+ INFO("SMC_RMM_%-21s > %lx\n", handler->fn_name, res->x[0]);
return;
}
- rc = unpack_return_code(ret->x[0]);
+ rc = unpack_return_code(res->x[0]);
if ((handler->log_exec) ||
(handler->log_error && (rc.status != RMI_SUCCESS))) {
@@ -204,7 +204,7 @@
/* Print status */
if (rc.status >= RMI_ERROR_COUNT) {
- INFO(" > %lx", ret->x[0]);
+ INFO(" > %lx", res->x[0]);
} else {
INFO(" > RMI_%s", rmi_status_string[rc.status]);
}
@@ -225,7 +225,7 @@
assert(num <= MAX_NUM_OUTPUT_VALS);
for (unsigned int i = 1U; i <= num; i++) {
- INFO(" %lx", ret->x[i]);
+ INFO(" %lx", res->x[i]);
}
}
INFO("\n");
@@ -239,7 +239,7 @@
unsigned long arg3,
unsigned long arg4,
unsigned long arg5,
- struct smc_result *ret)
+ struct smc_result *res)
{
unsigned long handler_id;
const struct smc_handler *handler = NULL;
@@ -262,7 +262,7 @@
if ((handler == NULL) || (handler->fn_dummy == NULL)) {
VERBOSE("[%s] unknown function_id: %lx\n",
__func__, function_id);
- ret->x[0] = SMC_UNKNOWN;
+ res->x[0] = SMC_UNKNOWN;
return;
}
@@ -279,40 +279,40 @@
switch (handler->type) {
case rmi_type_00:
- ret->x[0] = handler->f_00();
+ res->x[0] = handler->f_00();
break;
case rmi_type_10:
- ret->x[0] = handler->f_10(arg0);
+ res->x[0] = handler->f_10(arg0);
break;
case rmi_type_20:
- ret->x[0] = handler->f_20(arg0, arg1);
+ res->x[0] = handler->f_20(arg0, arg1);
break;
case rmi_type_30:
- ret->x[0] = handler->f_30(arg0, arg1, arg2);
+ res->x[0] = handler->f_30(arg0, arg1, arg2);
break;
case rmi_type_40:
- ret->x[0] = handler->f_40(arg0, arg1, arg2, arg3);
+ res->x[0] = handler->f_40(arg0, arg1, arg2, arg3);
break;
case rmi_type_50:
- ret->x[0] = handler->f_50(arg0, arg1, arg2, arg3, arg4);
+ res->x[0] = handler->f_50(arg0, arg1, arg2, arg3, arg4);
break;
case rmi_type_11:
- handler->f_11(arg0, ret);
+ handler->f_11(arg0, res);
break;
case rmi_type_22:
- handler->f_22(arg0, arg1, ret);
+ handler->f_22(arg0, arg1, res);
break;
case rmi_type_31:
- handler->f_31(arg0, arg1, arg2, ret);
+ handler->f_31(arg0, arg1, arg2, res);
break;
case rmi_type_32:
- handler->f_32(arg0, arg1, arg2, ret);
+ handler->f_32(arg0, arg1, arg2, res);
break;
case rmi_type_34:
- handler->f_34(arg0, arg1, arg2, ret);
+ handler->f_34(arg0, arg1, arg2, res);
break;
case rmi_type_41:
- handler->f_41(arg0, arg1, arg2, arg3, ret);
+ handler->f_41(arg0, arg1, arg2, arg3, res);
break;
default:
assert(false);
@@ -321,7 +321,7 @@
if (rmi_call_log_enabled) {
unsigned long args[] = {arg0, arg1, arg2, arg3, arg4};
- rmi_log_on_exit(handler_id, args, ret);
+ rmi_log_on_exit(handler_id, args, res);
}
/* If the handler uses FPU, restore the saved NS simd context. */
diff --git a/runtime/include/smc-handler.h b/runtime/include/smc-handler.h
index fb42e6b..1d6a41a 100644
--- a/runtime/include/smc-handler.h
+++ b/runtime/include/smc-handler.h
@@ -11,7 +11,7 @@
unsigned long smc_version(void);
void smc_read_feature_register(unsigned long index,
- struct smc_result *ret_struct);
+ struct smc_result *res);
unsigned long smc_data_create(unsigned long rd_addr,
unsigned long data_addr,
@@ -25,7 +25,7 @@
void smc_data_destroy(unsigned long rd_addr,
unsigned long map_addr,
- struct smc_result *ret_struct);
+ struct smc_result *res);
unsigned long smc_granule_delegate(unsigned long addr);
@@ -48,7 +48,7 @@
unsigned long rec_run_addr);
void smc_rec_aux_count(unsigned long rd_addr,
- struct smc_result *ret_struct);
+ struct smc_result *res);
unsigned long smc_rtt_create(unsigned long rd_addr,
unsigned long rtt_addr,
@@ -58,12 +58,12 @@
void smc_rtt_destroy(unsigned long rd_addr,
unsigned long map_addr,
unsigned long ulevel,
- struct smc_result *ret_struct);
+ struct smc_result *res);
void smc_rtt_fold(unsigned long rd_addr,
unsigned long map_addr,
unsigned long ulevel,
- struct smc_result *ret_struct);
+ struct smc_result *res);
unsigned long smc_rtt_map_unprotected(unsigned long rd_addr,
unsigned long map_addr,
@@ -78,7 +78,7 @@
void smc_rtt_read_entry(unsigned long rd_addr,
unsigned long map_addr,
unsigned long ulevel,
- struct smc_result *ret_struct);
+ struct smc_result *res);
unsigned long smc_psci_complete(unsigned long calling_rec_addr,
unsigned long target_rec_addr);
@@ -92,6 +92,6 @@
unsigned long rec_addr,
unsigned long base,
unsigned long top,
- struct smc_result *ret_struct);
+ struct smc_result *res);
#endif /* SMC_HANDLER_H */
diff --git a/runtime/rmi/feature.c b/runtime/rmi/feature.c
index dc086c8..1f67b3c 100644
--- a/runtime/rmi/feature.c
+++ b/runtime/rmi/feature.c
@@ -51,15 +51,15 @@
}
void smc_read_feature_register(unsigned long index,
- struct smc_result *ret_struct)
+ struct smc_result *res)
{
switch (index) {
case RMM_FEATURE_REGISTER_0_INDEX:
- ret_struct->x[0] = RMI_SUCCESS;
- ret_struct->x[1] = get_feature_register_0();
+ res->x[0] = RMI_SUCCESS;
+ res->x[1] = get_feature_register_0();
break;
default:
- ret_struct->x[0] = RMI_ERROR_INPUT;
- ret_struct->x[1] = 0UL;
+ res->x[0] = RMI_ERROR_INPUT;
+ res->x[1] = 0UL;
}
}
diff --git a/runtime/rmi/rec.c b/runtime/rmi/rec.c
index 7226f90..52ff304 100644
--- a/runtime/rmi/rec.c
+++ b/runtime/rmi/rec.c
@@ -378,7 +378,7 @@
return RMI_SUCCESS;
}
-void smc_rec_aux_count(unsigned long rd_addr, struct smc_result *ret_struct)
+void smc_rec_aux_count(unsigned long rd_addr, struct smc_result *res)
{
unsigned int num_rec_aux;
struct granule *g_rd;
@@ -386,7 +386,7 @@
g_rd = find_lock_granule(rd_addr, GRANULE_STATE_RD);
if (g_rd == NULL) {
- ret_struct->x[0] = RMI_ERROR_INPUT;
+ res->x[0] = RMI_ERROR_INPUT;
return;
}
@@ -395,8 +395,8 @@
buffer_unmap(rd);
granule_unlock(g_rd);
- ret_struct->x[0] = RMI_SUCCESS;
- ret_struct->x[1] = (unsigned long)num_rec_aux;
+ res->x[0] = RMI_SUCCESS;
+ res->x[1] = (unsigned long)num_rec_aux;
}
unsigned long smc_psci_complete(unsigned long calling_rec_addr,
diff --git a/runtime/rsi/memory.c b/runtime/rsi/memory.c
index 1affda7..3899031 100644
--- a/runtime/rsi/memory.c
+++ b/runtime/rsi/memory.c
@@ -14,28 +14,27 @@
struct rmi_rec_exit *rec_exit,
struct rsi_result *res)
{
- unsigned long start = rec->regs[1];
- unsigned long size = rec->regs[2];
- unsigned long end = start + size;
+ unsigned long base = rec->regs[1];
+ unsigned long top = base + rec->regs[2];
enum ripas ripas_val = (enum ripas)rec->regs[3];
- if ((ripas_val > RIPAS_RAM) ||
- !GRANULE_ALIGNED(start) || !GRANULE_ALIGNED(size) ||
- (end <= start) || /* Size is zero, or range overflows */
- !region_in_rec_par(rec, start, end)) {
+ if ((ripas_val > RIPAS_RAM) ||
+ !GRANULE_ALIGNED(base) || !GRANULE_ALIGNED(top) ||
+ (top <= base) || /* Size is zero, or range overflows */
+ !region_in_rec_par(rec, base, top)) {
res->action = UPDATE_REC_RETURN_TO_REALM;
res->smc_res.x[0] = RSI_ERROR_INPUT;
return;
}
- rec->set_ripas.base = start;
- rec->set_ripas.top = end;
- rec->set_ripas.addr = start;
+ rec->set_ripas.base = base;
+ rec->set_ripas.top = top;
+ rec->set_ripas.addr = base;
rec->set_ripas.ripas_val = ripas_val;
rec_exit->exit_reason = RMI_EXIT_RIPAS_CHANGE;
- rec_exit->ripas_base = start;
- rec_exit->ripas_size = size;
+ rec_exit->ripas_base = base;
+ rec_exit->ripas_top = top;
rec_exit->ripas_value = (unsigned int)ripas_val;
res->action = UPDATE_REC_EXIT_TO_HOST;