Patrick Williams | 03514f1 | 2024-04-05 07:04:11 -0500 | [diff] [blame^] | 1 | From f7b58b5ba5b48e071eb360c1bcfc4d31290a77c1 Mon Sep 17 00:00:00 2001 |
| 2 | From: Ali Can Ozaslan <ali.oezaslan@arm.com> |
| 3 | Date: Tue, 5 Mar 2024 21:01:59 +0000 |
| 4 | Subject: [PATCH] Platform:corstone1000:Fix issues due to adjustment Mailbox |
| 5 | Agent params |
| 6 | |
| 7 | Adjust Mailbox Agent API parameters patch changed memory check and |
| 8 | related parameters. As a result, platform-specific issues occurred. |
| 9 | Secure side client IDs are converted to negative values. Control |
| 10 | parameter is created. |
| 11 | |
| 12 | Signed-off-by: Bence Balogh <bence.balogh@arm.com> |
| 13 | Signed-off-by: Emekcan Aras <emekcan.aras@arm.com> |
| 14 | Signed-off-by: Ali Can Ozaslan <ali.oezaslan@arm.com> |
| 15 | Upstream-Status: Pending |
| 16 | |
| 17 | --- |
| 18 | .../tfm_spe_dual_core_psa_client_secure_lib.c | 23 +++++++++++++++---- |
| 19 | 1 file changed, 18 insertions(+), 5 deletions(-) |
| 20 | |
| 21 | diff --git a/platform/ext/target/arm/corstone1000/openamp/tfm_spe_dual_core_psa_client_secure_lib.c b/platform/ext/target/arm/corstone1000/openamp/tfm_spe_dual_core_psa_client_secure_lib.c |
| 22 | index d2eabe144..39e11b8cd 100644 |
| 23 | --- a/platform/ext/target/arm/corstone1000/openamp/tfm_spe_dual_core_psa_client_secure_lib.c |
| 24 | +++ b/platform/ext/target/arm/corstone1000/openamp/tfm_spe_dual_core_psa_client_secure_lib.c |
| 25 | @@ -18,6 +18,9 @@ |
| 26 | #include "utilities.h" |
| 27 | #include "thread.h" |
| 28 | |
| 29 | +#define SE_PROXY_SP_UID 0 |
| 30 | +#define SMM_GW_SP_UID 0x8003 |
| 31 | + |
| 32 | /** |
| 33 | * In linux environment and for psa_call type client api, |
| 34 | * the layout of the reply from tf-m to linux is as following. |
| 35 | @@ -174,7 +177,14 @@ static psa_status_t prepare_params_for_psa_call(struct client_params_t *params, |
| 36 | { |
| 37 | psa_status_t ret = PSA_SUCCESS; |
| 38 | |
| 39 | - params->ns_client_id_stateless = s_map_entry->msg.client_id; |
| 40 | + if (s_map_entry->msg.client_id == SE_PROXY_SP_UID) { |
| 41 | + params->ns_client_id_stateless = -1; |
| 42 | + } |
| 43 | + else if (s_map_entry->msg.client_id == SMM_GW_SP_UID) { |
| 44 | + params->ns_client_id_stateless = -1 * s_map_entry->msg.client_id; |
| 45 | + } else { |
| 46 | + params->ns_client_id_stateless = s_map_entry->msg.client_id; |
| 47 | + } |
| 48 | |
| 49 | params->p_outvecs = NULL; |
| 50 | ret = alloc_and_prepare_out_vecs(¶ms->p_outvecs, s_map_entry); |
| 51 | @@ -250,6 +260,9 @@ void deliver_msg_to_tfm_spe(void *private) |
| 52 | struct client_params_t params = {0}; |
| 53 | psa_status_t psa_ret = PSA_ERROR_GENERIC_ERROR; |
| 54 | unordered_map_entry_t* s_map_entry = (unordered_map_entry_t*)private; |
| 55 | + uint32_t control = PARAM_PACK(s_map_entry->msg.params.psa_call_params.type, |
| 56 | + s_map_entry->msg.params.psa_call_params.in_len, |
| 57 | + s_map_entry->msg.params.psa_call_params.out_len); |
| 58 | |
| 59 | switch(s_map_entry->msg.call_type) { |
| 60 | case OPENAMP_PSA_FRAMEWORK_VERSION: |
| 61 | @@ -266,11 +279,11 @@ void deliver_msg_to_tfm_spe(void *private) |
| 62 | send_service_reply_to_non_secure(psa_ret, s_map_entry); |
| 63 | break; |
| 64 | } |
| 65 | + control = PARAM_SET_NS_INVEC(control); |
| 66 | + control = PARAM_SET_NS_OUTVEC(control); |
| 67 | + control = PARAM_SET_NS_VEC(control); |
| 68 | psa_ret = tfm_rpc_psa_call(s_map_entry->msg.params.psa_call_params.handle, |
| 69 | - PARAM_PACK(s_map_entry->msg.params.psa_call_params.type, |
| 70 | - s_map_entry->msg.params.psa_call_params.in_len, |
| 71 | - s_map_entry->msg.params.psa_call_params.out_len), |
| 72 | - ¶ms, NULL); |
| 73 | + control, ¶ms, NULL); |
| 74 | if (psa_ret != PSA_SUCCESS) { |
| 75 | send_service_reply_to_non_secure(psa_ret, s_map_entry); |
| 76 | break; |