FF-A: Check FF-A return is a valid direct response
Added a helper function to check if return of FFA_MSG_SEND_DIRECT_REQ
is FFA_MSG_SEND_DIRECT_RESP.
This is intended to make it easier to maintain cactus test commands
framework.
Signed-off-by: J-Alves <joao.alves@arm.com>
Change-Id: Ia43e88908aa3cbdd529a8835bffe43dee3e04a76
diff --git a/include/runtime_services/ffa_helpers.h b/include/runtime_services/ffa_helpers.h
index 2422abb..17587b3 100644
--- a/include/runtime_services/ffa_helpers.h
+++ b/include/runtime_services/ffa_helpers.h
@@ -396,6 +396,12 @@
uint64_t arg3,
uint64_t arg4);
+static inline bool is_ffa_direct_response(smc_ret_values ret)
+{
+ return (ffa_func_id(ret) == FFA_MSG_SEND_DIRECT_RESP_SMC32) ||
+ (ffa_func_id(ret) == FFA_MSG_SEND_DIRECT_RESP_SMC64);
+}
+
smc_ret_values ffa_run(uint32_t dest_id, uint32_t vcpu_id);
smc_ret_values ffa_version(uint32_t input_version);
smc_ret_values ffa_id_get(void);
diff --git a/spm/cactus/cactus_main.c b/spm/cactus/cactus_main.c
index 11d7b99..cb83d87 100644
--- a/spm/cactus/cactus_main.c
+++ b/spm/cactus/cactus_main.c
@@ -134,8 +134,7 @@
ffa_ret = cactus_mem_send_cmd(vm_id, receiver, mem_func,
handle);
- if (ffa_func_id(ffa_ret) !=
- FFA_MSG_SEND_DIRECT_RESP_SMC32) {
+ if (!is_ffa_direct_response(ffa_ret)) {
ERROR("Failed to send message. error: %x\n",
ffa_error_code(ffa_ret));
ffa_ret = cactus_error_resp(vm_id, source);
@@ -207,8 +206,7 @@
ffa_ret = cactus_echo_send_cmd(vm_id, echo_dest,
echo_val);
- if (ffa_func_id(ffa_ret) !=
- FFA_MSG_SEND_DIRECT_RESP_SMC32) {
+ if (!is_ffa_direct_response(ffa_ret)) {
ERROR("Failed to send message. error: %x\n",
ffa_error_code(ffa_ret));
success = false;
@@ -259,8 +257,7 @@
* request chain.
*/
bool is_returning_from_deadlock =
- (ffa_func_id(ffa_ret) ==
- FFA_MSG_SEND_DIRECT_RESP_SMC32)
+ (is_ffa_direct_response(ffa_ret))
&&
(cactus_get_response(ffa_ret) == CACTUS_SUCCESS);
diff --git a/tftf/tests/runtime_services/secure_service/test_ffa_direct_messaging.c b/tftf/tests/runtime_services/secure_service/test_ffa_direct_messaging.c
index 1295442..50e8582 100644
--- a/tftf/tests/runtime_services/secure_service/test_ffa_direct_messaging.c
+++ b/tftf/tests/runtime_services/secure_service/test_ffa_direct_messaging.c
@@ -38,7 +38,7 @@
* Return responses may be FFA_MSG_SEND_DIRECT_RESP or FFA_INTERRUPT,
* but only expect the former. Expect SMC32 convention from SP.
*/
- if (ffa_func_id(ret_values) != FFA_MSG_SEND_DIRECT_RESP_SMC32) {
+ if (!is_ffa_direct_response(ret_values)) {
tftf_testcase_printf("ffa_msg_send_direct_req returned %x\n",
ffa_func_id(ret_values));
return TEST_RESULT_FAIL;
@@ -105,7 +105,7 @@
ret = cactus_req_echo_send_cmd(sender, dest, echo_dest, value);
- if (ffa_func_id(ret) != FFA_MSG_SEND_DIRECT_RESP_SMC32) {
+ if (!is_ffa_direct_response(ret)) {
ERROR("Failed to send message. error: %x\n",
ffa_error_code(ret));
return TEST_RESULT_FAIL;
@@ -157,7 +157,7 @@
ret = cactus_req_deadlock_send_cmd(HYP_ID, SP_ID(1), SP_ID(2), SP_ID(3));
- if (ffa_func_id(ret) != FFA_MSG_SEND_DIRECT_RESP_SMC32) {
+ if (!is_ffa_direct_response(ret)) {
ERROR("Failed to send message. error: %x\n",
ffa_error_code(ret));
return TEST_RESULT_FAIL;
diff --git a/tftf/tests/runtime_services/secure_service/test_ffa_memory_sharing.c b/tftf/tests/runtime_services/secure_service/test_ffa_memory_sharing.c
index 05a8b59..67ffb53 100644
--- a/tftf/tests/runtime_services/secure_service/test_ffa_memory_sharing.c
+++ b/tftf/tests/runtime_services/secure_service/test_ffa_memory_sharing.c
@@ -79,7 +79,7 @@
ret = cactus_mem_send_cmd(SENDER, RECEIVER, mem_func, handle);
- if (ffa_func_id(ret) != FFA_MSG_SEND_DIRECT_RESP_SMC32) {
+ if (!is_ffa_direct_response(ret)) {
ERROR("Failed to send message. error: %x\n",
ffa_error_code(ret));
return TEST_RESULT_FAIL;
@@ -144,7 +144,7 @@
ret = cactus_req_mem_send_send_cmd(HYP_ID, sender_sp, mem_func,
receiver_sp);
- if (ffa_func_id(ret) != FFA_MSG_SEND_DIRECT_RESP_SMC32) {
+ if (!is_ffa_direct_response(ret)) {
ERROR("Failed to send message. error: %x\n",
ffa_error_code(ret));
return TEST_RESULT_FAIL;
diff --git a/tftf/tests/runtime_services/secure_service/test_spm_cpu_features.c b/tftf/tests/runtime_services/secure_service/test_spm_cpu_features.c
index c6470c1..8ce4cc3 100644
--- a/tftf/tests/runtime_services/secure_service/test_spm_cpu_features.c
+++ b/tftf/tests/runtime_services/secure_service/test_spm_cpu_features.c
@@ -55,7 +55,7 @@
smc_ret_values ret = cactus_req_simd_fill_send_cmd(SENDER, RECEIVER);
- if (ffa_func_id(ret) != FFA_MSG_SEND_DIRECT_RESP_SMC32) {
+ if (!is_ffa_direct_response(ret)) {
ERROR("Failed to send message. error: %x\n",
ffa_error_code(ret));
return TEST_RESULT_FAIL;