Use 64-bit FF-A messaging in SPM test SP
The arm-ffa-user driver has been updated to use 64-bit FF-A direct
messaging since v5. Since the NWd test client for the SPM test SP
(xtest) relies on this driver, the SP itself needs to be updated
to stay compatible.
Signed-off-by: Gabor Toth <gabor.toth2@arm.com>
Change-Id: I1312ec0a6ba27b84a1eff596898c6b5cecb80ef0
diff --git a/components/service/spm_test/sp.c b/components/service/spm_test/sp.c
index 76ac133..fa9c7ea 100644
--- a/components/service/spm_test/sp.c
+++ b/components/service/spm_test/sp.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, Arm Limited and Contributors. All rights reserved.
+ * Copyright (c) 2022-2023, Arm Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -221,14 +221,14 @@
static void return_error(uint32_t error, struct ffa_direct_msg *msg)
{
- ffa_msg_send_direct_resp_32(msg->destination_id, msg->source_id, 0xff,
+ ffa_msg_send_direct_resp_64(msg->destination_id, msg->source_id, 0xff,
error, 0, 0, 0, msg);
}
static void return_ok(struct ffa_direct_msg *msg)
{
- ffa_msg_send_direct_resp_32(msg->destination_id,
+ ffa_msg_send_direct_resp_64(msg->destination_id,
msg->source_id, SP_TEST_OK, 0, 0, 0, 0, msg);
}
@@ -245,28 +245,29 @@
static void test_increase(struct ffa_direct_msg *msg)
{
- msg->args.args32[1]++;
- msg->args.args32[2]++;
- msg->args.args32[3]++;
- msg->args.args32[4]++;
- ffa_msg_send_direct_resp_32(msg->destination_id,msg->source_id,
- SP_TEST_OK, msg->args.args32[1],
- msg->args.args32[2],msg->args.args32[3],
- msg->args.args32[4], msg);
+ msg->args.args64[1]++;
+ msg->args.args64[2]++;
+ msg->args.args64[3]++;
+ msg->args.args64[4]++;
+ ffa_msg_send_direct_resp_64(msg->destination_id,msg->source_id,
+ SP_TEST_OK, msg->args.args64[1],
+ msg->args.args64[2],msg->args.args64[3],
+ msg->args.args64[4], msg);
}
static void test_communication(struct ffa_direct_msg *msg)
{
struct ffa_direct_msg sp_msg = {0};
- uint16_t dst = (uint16_t)msg->args.args32[1];
+ uint16_t dst = (uint16_t)msg->args.args64[1];
ffa_result res = FFA_OK;
- sp_msg.args.args32[1] = 0x55;
- sp_msg.args.args32[2] = 0xAA;
- sp_msg.args.args32[3] = 0xBB;
- sp_msg.args.args32[4] = 0xCC;
- res = ffa_msg_send_direct_req_32(msg->destination_id, dst,
+ sp_msg.args.args64[1] = 0x55;
+ sp_msg.args.args64[2] = 0xAA;
+ sp_msg.args.args64[3] = 0xBB;
+ sp_msg.args.args64[4] = 0xCC;
+
+ res = ffa_msg_send_direct_req_64(msg->destination_id, dst,
EP_TEST_SP_INCREASE,0x55, 0xAA, 0xBB,
0xCC, &sp_msg);
@@ -276,14 +277,14 @@
return;
}
- if (sp_msg.args.args32[1] == 0x56 && sp_msg.args.args32[2] == 0xAB &&
- sp_msg.args.args32[3] == 0xBC &&sp_msg.args.args32[4] == 0xCD) {
+ if (sp_msg.args.args64[1] == 0x56 && sp_msg.args.args64[2] == 0xAB &&
+ sp_msg.args.args64[3] == 0xBC &&sp_msg.args.args64[4] == 0xCD) {
return_ok(msg);
} else {
DMSG("Failed SP communication %x %x %x %x",
- sp_msg.args.args32[1],
- sp_msg.args.args32[2], sp_msg.args.args32[3],
- sp_msg.args.args32[4]);
+ sp_msg.args.args64[1],
+ sp_msg.args.args64[2], sp_msg.args.args64[3],
+ sp_msg.args.args64[4]);
return_error(ERR_SP_COMMUNICATION, msg);
}
@@ -349,10 +350,10 @@
ffa_id_get(&own_id);
- handle = (uint64_t)msg->args.args32[1] |
- (((uint64_t)msg->args.args32[2]) << 32);
+ handle = (uint64_t)msg->args.args64[1] |
+ (((uint64_t)msg->args.args64[2]) << 32);
descriptor.tag = 0;
- descriptor.sender_id = msg->args.args32[3] & 0xffff;
+ descriptor.sender_id = msg->args.args64[3] & 0xffff;
acc_desc.receiver_id = own_id;
acc_desc.data_access = sp_data_access_read_write;
res = sp_memory_retrieve(&descriptor, &acc_desc, regions, 1,
@@ -381,12 +382,12 @@
.operation_time_slicing = false,
};
- if (msg->args.args32[3] == 1)
+ if (msg->args.args64[3] == 1)
flags.zero_memory = true;
ffa_id_get(&endpoint_id);
- handle = (uint64_t)msg->args.args32[1] |
- (((uint64_t)msg->args.args32[2]) << 32);
+ handle = (uint64_t)msg->args.args64[1] |
+ (((uint64_t)msg->args.args64[2]) << 32);
descriptor.tag = 0;
res = sp_memory_relinquish(handle, &endpoint_id, 1, &flags);
@@ -436,7 +437,7 @@
return;
}
- res = ffa_msg_send_direct_req_32(own_id, service_ep_id,
+ res = ffa_msg_send_direct_req_64(own_id, service_ep_id,
EP_RETRIEVE, handle & 0xffffffff,
handle >> 32, own_id, 0, msg);
@@ -448,7 +449,7 @@
return;
}
- res = ffa_msg_send_direct_req_32(own_id, service_ep_id,
+ res = ffa_msg_send_direct_req_64(own_id, service_ep_id,
EP_TRY_W_ACCESS, 0,
0, 0, 0, msg);
@@ -460,7 +461,7 @@
return;
}
- res = ffa_msg_send_direct_req_32(own_id, service_ep_id,
+ res = ffa_msg_send_direct_req_64(own_id, service_ep_id,
EP_RELINQUISH, handle & 0xffffffff,
handle >> 32, 0, 0, msg);
if (res != FFA_OK) {
@@ -497,8 +498,8 @@
uint16_t src_id = msg->source_id = 0;
struct sp_memory_access_descriptor acc_desc[2] = { };
uint32_t err = 0;
- uint16_t endpoint2 = msg->args.args32[1];
- uint16_t endpoint3 = msg->args.args32[2];
+ uint16_t endpoint2 = msg->args.args64[1];
+ uint16_t endpoint3 = msg->args.args64[2];
my_buf[0] = 0xa;
set_rxtx_buf(&t_buf, NULL);
@@ -529,7 +530,7 @@
goto err;
}
/* test SP2*/
- res = ffa_msg_send_direct_req_32(own_id, endpoint2,
+ res = ffa_msg_send_direct_req_64(own_id, endpoint2,
EP_RETRIEVE, handle & 0xffffffff,
handle >> 32, own_id, 0, msg);
@@ -541,7 +542,7 @@
return;
}
- res = ffa_msg_send_direct_req_32(own_id, endpoint2,
+ res = ffa_msg_send_direct_req_64(own_id, endpoint2,
EP_TRY_W_ACCESS, 0,
0, 0, 0, msg);
@@ -559,7 +560,7 @@
goto err;
}
- res = ffa_msg_send_direct_req_32(own_id, endpoint2,
+ res = ffa_msg_send_direct_req_64(own_id, endpoint2,
EP_RELINQUISH, handle & 0xffffffff,
handle >> 32, 0, 0, msg);
@@ -572,7 +573,7 @@
}
my_buf[0] = 0xa;
/* test SP3*/
- res = ffa_msg_send_direct_req_32(own_id, endpoint3,
+ res = ffa_msg_send_direct_req_64(own_id, endpoint3,
EP_RETRIEVE, handle & 0xffffffff,
handle >> 32, own_id, 0, msg);
@@ -584,7 +585,7 @@
return;
}
- res = ffa_msg_send_direct_req_32(own_id, endpoint3,
+ res = ffa_msg_send_direct_req_64(own_id, endpoint3,
EP_TRY_W_ACCESS, 0,
0, 0, 0, msg);
@@ -608,7 +609,7 @@
goto err;
}
- res = ffa_msg_send_direct_req_32(own_id, endpoint3,
+ res = ffa_msg_send_direct_req_64(own_id, endpoint3,
EP_RELINQUISH, handle & 0xffffffff,
handle >> 32, 0, 0, msg);
@@ -760,7 +761,7 @@
ffa_msg_wait(&msg);
while (1) {
- enum sp_tests test_case = (enum sp_tests)msg.args.args32[0];
+ enum sp_tests test_case = (enum sp_tests)msg.args.args64[0];
DMSG("SP:%x Starting test %s", own_id, sp_test_str[test_case]);
switch (test_case) {
@@ -788,18 +789,18 @@
test_mem_relinquish(&msg);
break;
case EP_SP_MEM_SHARING:
- test_mem_sharing((uint16_t)msg.args.args32[1], &msg);
+ test_mem_sharing((uint16_t)msg.args.args64[1], &msg);
break;
case EP_SP_MEM_SHARING_MULTI:
test_mem_multi_sharing(&msg);
break;
case EP_SP_MEM_SHARING_EXC:
- test_mem_sharing_exc((uint16_t)msg.args.args32[1],
+ test_mem_sharing_exc((uint16_t)msg.args.args64[1],
&msg);
break;
case EP_SP_MEM_INCORRECT_ACCESS:
test_mem_sharing_inccorrect_access(
- (uint16_t)msg.args.args32[1], &msg);
+ (uint16_t)msg.args.args64[1], &msg);
break;
case EP_SP_NOP:
return_ok(&msg);