Patrick Williams | 92b42cb | 2022-09-03 06:53:57 -0500 | [diff] [blame^] | 1 | From 96d226e4e0ea9c633dbc5d05ae2a7a2f4ba0f39e Mon Sep 17 00:00:00 2001 |
| 2 | From: Imre Kis <imre.kis@arm.com> |
| 3 | Date: Fri, 22 Jul 2022 17:22:05 +0200 |
| 4 | Subject: [PATCH 23/24] Change MM communicate RPC protocol of MM caller |
| 5 | |
| 6 | Replace buffer address and size parameter by offset in buffer parameter |
| 7 | and move to 64 bit FF-A direct message call. This change requires an |
| 8 | updated version of the debugfs driver which supports 64 bit direct |
| 9 | messages. |
| 10 | |
| 11 | Signed-off-by: Imre Kis <imre.kis@arm.com> |
| 12 | Change-Id: I003c1de7f9c3f45bbc52e4a51d622ec960fa7052 |
| 13 | |
| 14 | Upstream-Status: Pending [In review] |
| 15 | Signed-off-by: Anton Antonov <Anton.Antonov@arm.com> |
| 16 | |
| 17 | --- |
| 18 | .../caller/linux/mm_communicate_caller.c | 35 +++++++------------ |
| 19 | .../LinuxFFAUserShim/LinuxFFAUserShim.cmake | 2 +- |
| 20 | 2 files changed, 14 insertions(+), 23 deletions(-) |
| 21 | |
| 22 | diff --git a/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c b/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c |
| 23 | index 0c505b4..0287acf 100644 |
| 24 | --- a/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c |
| 25 | +++ b/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c |
| 26 | @@ -19,7 +19,7 @@ |
| 27 | #include <string.h> |
| 28 | #include <errno.h> |
| 29 | |
| 30 | -#define KERNEL_MOD_REQ_VER_MAJOR 2 |
| 31 | +#define KERNEL_MOD_REQ_VER_MAJOR 5 |
| 32 | #define KERNEL_MOD_REQ_VER_MINOR 0 |
| 33 | #define KERNEL_MOD_REQ_VER_PATCH 0 |
| 34 | |
| 35 | @@ -294,37 +294,28 @@ static rpc_status_t call_invoke( |
| 36 | |
| 37 | direct_msg.dst_id = s->dest_partition_id; |
| 38 | |
| 39 | - direct_msg.args[MM_COMMUNICATE_CALL_ARGS_COMM_BUFFER_ADDRESS] = (uintptr_t)s->comm_buffer; |
| 40 | - direct_msg.args[MM_COMMUNICATE_CALL_ARGS_COMM_BUFFER_SIZE] = s->comm_buffer_size; |
| 41 | + direct_msg.args[MM_COMMUNICATE_CALL_ARGS_COMM_BUFFER_OFFSET] = 0; |
| 42 | |
| 43 | int kernel_op_status = ioctl(s->ffa_fd, FFA_IOC_MSG_SEND, &direct_msg); |
| 44 | |
| 45 | if (kernel_op_status == 0) { |
| 46 | - |
| 47 | /* Kernel send operation completed normally */ |
| 48 | - uint32_t mm_return_id = direct_msg.args[MM_COMMUNICATE_CALL_ARGS_RETURN_ID]; |
| 49 | int32_t mm_return_code = direct_msg.args[MM_COMMUNICATE_CALL_ARGS_RETURN_CODE]; |
| 50 | |
| 51 | - if (mm_return_id == ARM_SVC_ID_SP_EVENT_COMPLETE) { |
| 52 | - |
| 53 | - if (mm_return_code == MM_RETURN_CODE_SUCCESS) { |
| 54 | - |
| 55 | - mm_communicate_serializer_header_decode(s->serializer, |
| 56 | - s->comm_buffer, (efi_status_t*)opstatus, resp_buf, resp_len); |
| 57 | - |
| 58 | - if (*resp_len > s->req_len) { |
| 59 | + if (mm_return_code == MM_RETURN_CODE_SUCCESS) { |
| 60 | + mm_communicate_serializer_header_decode( |
| 61 | + s->serializer, s->comm_buffer, (efi_status_t *)opstatus, |
| 62 | + resp_buf, resp_len); |
| 63 | |
| 64 | - s->scrub_len = |
| 65 | - mm_communicate_serializer_header_size(s->serializer) + |
| 66 | - *resp_len; |
| 67 | - } |
| 68 | + if (*resp_len > s->req_len) |
| 69 | + s->scrub_len = |
| 70 | + mm_communicate_serializer_header_size( |
| 71 | + s->serializer) + *resp_len; |
| 72 | |
| 73 | - rpc_status = TS_RPC_CALL_ACCEPTED; |
| 74 | - } |
| 75 | - else { |
| 76 | + rpc_status = TS_RPC_CALL_ACCEPTED; |
| 77 | + } else { |
| 78 | |
| 79 | - rpc_status = mm_return_code_to_rpc_status(mm_return_code); |
| 80 | - } |
| 81 | + rpc_status = mm_return_code_to_rpc_status(mm_return_code); |
| 82 | } |
| 83 | } |
| 84 | } |
| 85 | diff --git a/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake b/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake |
| 86 | index 7ba64af..9c2252c 100644 |
| 87 | --- a/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake |
| 88 | +++ b/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake |
| 89 | @@ -11,7 +11,7 @@ |
| 90 | |
| 91 | set(LINUX_FFA_USER_SHIM_URL "https://git.gitlab.arm.com/linux-arm/linux-trusted-services.git" |
| 92 | CACHE STRING "Linux FF-A user space shim repository URL") |
| 93 | -set(LINUX_FFA_USER_SHIM_REFSPEC "v4.0.0" |
| 94 | +set(LINUX_FFA_USER_SHIM_REFSPEC "v5.0.0" |
| 95 | CACHE STRING "Linux FF-A user space shim git refspec") |
| 96 | |
| 97 | set(LINUX_FFA_USER_SHIM_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/linux_ffa_user_shim-src" |
| 98 | -- |
| 99 | 2.17.1 |
| 100 | |