blob: 4244225b301f686d8b969ff0231bc1a9aac8a4f8 [file] [log] [blame]
From 96d226e4e0ea9c633dbc5d05ae2a7a2f4ba0f39e Mon Sep 17 00:00:00 2001
From: Imre Kis <imre.kis@arm.com>
Date: Fri, 22 Jul 2022 17:22:05 +0200
Subject: [PATCH 23/24] Change MM communicate RPC protocol of MM caller
Replace buffer address and size parameter by offset in buffer parameter
and move to 64 bit FF-A direct message call. This change requires an
updated version of the debugfs driver which supports 64 bit direct
messages.
Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: I003c1de7f9c3f45bbc52e4a51d622ec960fa7052
Upstream-Status: Pending [In review]
Signed-off-by: Anton Antonov <Anton.Antonov@arm.com>
---
.../caller/linux/mm_communicate_caller.c | 35 +++++++------------
.../LinuxFFAUserShim/LinuxFFAUserShim.cmake | 2 +-
2 files changed, 14 insertions(+), 23 deletions(-)
diff --git a/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c b/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c
index 0c505b4..0287acf 100644
--- a/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c
+++ b/components/rpc/mm_communicate/caller/linux/mm_communicate_caller.c
@@ -19,7 +19,7 @@
#include <string.h>
#include <errno.h>
-#define KERNEL_MOD_REQ_VER_MAJOR 2
+#define KERNEL_MOD_REQ_VER_MAJOR 5
#define KERNEL_MOD_REQ_VER_MINOR 0
#define KERNEL_MOD_REQ_VER_PATCH 0
@@ -294,37 +294,28 @@ static rpc_status_t call_invoke(
direct_msg.dst_id = s->dest_partition_id;
- direct_msg.args[MM_COMMUNICATE_CALL_ARGS_COMM_BUFFER_ADDRESS] = (uintptr_t)s->comm_buffer;
- direct_msg.args[MM_COMMUNICATE_CALL_ARGS_COMM_BUFFER_SIZE] = s->comm_buffer_size;
+ direct_msg.args[MM_COMMUNICATE_CALL_ARGS_COMM_BUFFER_OFFSET] = 0;
int kernel_op_status = ioctl(s->ffa_fd, FFA_IOC_MSG_SEND, &direct_msg);
if (kernel_op_status == 0) {
-
/* Kernel send operation completed normally */
- uint32_t mm_return_id = direct_msg.args[MM_COMMUNICATE_CALL_ARGS_RETURN_ID];
int32_t mm_return_code = direct_msg.args[MM_COMMUNICATE_CALL_ARGS_RETURN_CODE];
- if (mm_return_id == ARM_SVC_ID_SP_EVENT_COMPLETE) {
-
- if (mm_return_code == MM_RETURN_CODE_SUCCESS) {
-
- mm_communicate_serializer_header_decode(s->serializer,
- s->comm_buffer, (efi_status_t*)opstatus, resp_buf, resp_len);
-
- if (*resp_len > s->req_len) {
+ if (mm_return_code == MM_RETURN_CODE_SUCCESS) {
+ mm_communicate_serializer_header_decode(
+ s->serializer, s->comm_buffer, (efi_status_t *)opstatus,
+ resp_buf, resp_len);
- s->scrub_len =
- mm_communicate_serializer_header_size(s->serializer) +
- *resp_len;
- }
+ if (*resp_len > s->req_len)
+ s->scrub_len =
+ mm_communicate_serializer_header_size(
+ s->serializer) + *resp_len;
- rpc_status = TS_RPC_CALL_ACCEPTED;
- }
- else {
+ rpc_status = TS_RPC_CALL_ACCEPTED;
+ } else {
- rpc_status = mm_return_code_to_rpc_status(mm_return_code);
- }
+ rpc_status = mm_return_code_to_rpc_status(mm_return_code);
}
}
}
diff --git a/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake b/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake
index 7ba64af..9c2252c 100644
--- a/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake
+++ b/external/LinuxFFAUserShim/LinuxFFAUserShim.cmake
@@ -11,7 +11,7 @@
set(LINUX_FFA_USER_SHIM_URL "https://git.gitlab.arm.com/linux-arm/linux-trusted-services.git"
CACHE STRING "Linux FF-A user space shim repository URL")
-set(LINUX_FFA_USER_SHIM_REFSPEC "v4.0.0"
+set(LINUX_FFA_USER_SHIM_REFSPEC "v5.0.0"
CACHE STRING "Linux FF-A user space shim git refspec")
set(LINUX_FFA_USER_SHIM_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/linux_ffa_user_shim-src"
--
2.17.1