blob: 4244225b301f686d8b969ff0231bc1a9aac8a4f8 [file] [log] [blame]
Patrick Williams92b42cb2022-09-03 06:53:57 -05001From 96d226e4e0ea9c633dbc5d05ae2a7a2f4ba0f39e Mon Sep 17 00:00:00 2001
2From: Imre Kis <imre.kis@arm.com>
3Date: Fri, 22 Jul 2022 17:22:05 +0200
4Subject: [PATCH 23/24] Change MM communicate RPC protocol of MM caller
5
6Replace buffer address and size parameter by offset in buffer parameter
7and move to 64 bit FF-A direct message call. This change requires an
8updated version of the debugfs driver which supports 64 bit direct
9messages.
10
11Signed-off-by: Imre Kis <imre.kis@arm.com>
12Change-Id: I003c1de7f9c3f45bbc52e4a51d622ec960fa7052
13
14Upstream-Status: Pending [In review]
15Signed-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
22diff --git a/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c b/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c
23index 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 }
85diff --git a/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake b/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake
86index 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--
992.17.1
100