lib: arm_ffa: Cast FF-A registers to the correct types The FF-A fid in r0 and the error code for FFA_ERROR should always be interpreted as an unsigned and signed 32-bit register, respectively. These values always get passed in w0 and w2. Bug: 284057071 Change-Id: I71460c722e7f1369b8a9e6ddbc9d803b3f3e0268
diff --git a/lib/arm_ffa/arm_ffa.c b/lib/arm_ffa/arm_ffa.c index c87c279..446046d 100644 --- a/lib/arm_ffa/arm_ffa.c +++ b/lib/arm_ffa/arm_ffa.c
@@ -58,7 +58,7 @@ smc_ret = smc8(SMC_FC_FFA_ID_GET, 0, 0, 0, 0, 0, 0, 0); - switch (smc_ret.r0) { + switch ((uint32_t)smc_ret.r0) { case SMC_FC_FFA_SUCCESS: case SMC_FC64_FFA_SUCCESS: if (smc_ret.r2 & ~0xFFFFUL) { @@ -69,7 +69,7 @@ return NO_ERROR; case SMC_FC_FFA_ERROR: - if (smc_ret.r2 == (ulong)FFA_ERROR_NOT_SUPPORTED) { + if ((int32_t)smc_ret.r2 == FFA_ERROR_NOT_SUPPORTED) { return ERR_NOT_SUPPORTED; } else { TRACEF("Unexpected FFA_ERROR: %lx\n", smc_ret.r2); @@ -92,7 +92,7 @@ /* Bit 31 must be cleared. */ ASSERT(!(version >> 31)); smc_ret = smc8(SMC_FC_FFA_VERSION, version, 0, 0, 0, 0, 0, 0); - if (smc_ret.r0 == (ulong)FFA_ERROR_NOT_SUPPORTED) { + if ((int32_t)smc_ret.r0 == FFA_ERROR_NOT_SUPPORTED) { return ERR_NOT_SUPPORTED; } *major_ret = FFA_VERSION_TO_MAJOR(smc_ret.r0); @@ -122,7 +122,7 @@ request_ns_bit ? FFA_FEATURES2_MEM_RETRIEVE_REQ_NS_BIT : 0, 0, 0, 0, 0, 0); - switch (smc_ret.r0) { + switch ((uint32_t)smc_ret.r0) { case SMC_FC_FFA_SUCCESS: case SMC_FC64_FFA_SUCCESS: *is_implemented = true; @@ -135,7 +135,7 @@ return NO_ERROR; case SMC_FC_FFA_ERROR: - if (smc_ret.r2 == (ulong)FFA_ERROR_NOT_SUPPORTED) { + if ((int32_t)smc_ret.r2 == FFA_ERROR_NOT_SUPPORTED) { *is_implemented = false; return NO_ERROR; } else { @@ -166,8 +166,8 @@ smc_ret = smc8(SMC_FC_FFA_MEM_RETRIEVE_REQ, len, len, 0, 0, 0, 0, 0); - long error; - switch (smc_ret.r0) { + int32_t error; + switch ((uint32_t)smc_ret.r0) { case SMC_FC_FFA_MEM_RETRIEVE_RESP: if (total_len) { *total_len = (uint32_t)smc_ret.r1; @@ -177,7 +177,7 @@ } return NO_ERROR; case SMC_FC_FFA_ERROR: - error = (long)smc_ret.r2; + error = (int32_t)smc_ret.r2; switch (error) { case FFA_ERROR_NOT_SUPPORTED: return ERR_NOT_SUPPORTED; @@ -190,7 +190,7 @@ case FFA_ERROR_ABORTED: return ERR_CANCELLED; default: - TRACEF("Unknown error: 0x%lx\n", error); + TRACEF("Unknown error: 0x%x\n", error); return ERR_NOT_VALID; } default: @@ -209,7 +209,7 @@ offset, 0, 0, 0, 0); /* FRAG_RX is followed by FRAG_TX on successful completion. */ - switch (smc_ret.r0) { + switch ((uint32_t)smc_ret.r0) { case SMC_FC_FFA_MEM_FRAG_TX: { uint64_t handle_out = smc_ret.r1 + ((uint64_t)smc_ret.r2 << 32); if (handle != handle_out) { @@ -222,7 +222,7 @@ return NO_ERROR; } case SMC_FC_FFA_ERROR: - switch ((int)smc_ret.r2) { + switch ((int32_t)smc_ret.r2) { case FFA_ERROR_NOT_SUPPORTED: return ERR_NOT_SUPPORTED; case FFA_ERROR_INVALID_PARAMETERS: @@ -230,7 +230,7 @@ case FFA_ERROR_ABORTED: return ERR_CANCELLED; default: - TRACEF("Unexpected error %d\n", (int)smc_ret.r2); + TRACEF("Unexpected error %d\n", (int32_t)smc_ret.r2); return ERR_NOT_VALID; } default: @@ -268,13 +268,13 @@ mutex_release(&ffa_rxtx_buffer_lock); - switch (smc_ret.r0) { + switch ((uint32_t)smc_ret.r0) { case SMC_FC_FFA_SUCCESS: case SMC_FC64_FFA_SUCCESS: return NO_ERROR; case SMC_FC_FFA_ERROR: - switch ((int)smc_ret.r2) { + switch ((int32_t)smc_ret.r2) { case FFA_ERROR_NOT_SUPPORTED: return ERR_NOT_SUPPORTED; case FFA_ERROR_INVALID_PARAMETERS: @@ -311,13 +311,13 @@ smc_ret = smc8(SMC_FC_FFA_RXTX_MAP, tx_paddr, rx_paddr, page_count, 0, 0, 0, 0); #endif - switch (smc_ret.r0) { + switch ((uint32_t)smc_ret.r0) { case SMC_FC_FFA_SUCCESS: case SMC_FC64_FFA_SUCCESS: return NO_ERROR; case SMC_FC_FFA_ERROR: - switch ((int)smc_ret.r2) { + switch ((int32_t)smc_ret.r2) { case FFA_ERROR_NOT_SUPPORTED: return ERR_NOT_SUPPORTED; case FFA_ERROR_INVALID_PARAMETERS: @@ -342,13 +342,13 @@ DEBUG_ASSERT(is_mutex_held(&ffa_rxtx_buffer_lock)); smc_ret = smc8(SMC_FC_FFA_RX_RELEASE, 0, 0, 0, 0, 0, 0, 0); - switch (smc_ret.r0) { + switch ((uint32_t)smc_ret.r0) { case SMC_FC_FFA_SUCCESS: case SMC_FC64_FFA_SUCCESS: return NO_ERROR; case SMC_FC_FFA_ERROR: - switch ((int)smc_ret.r2) { + switch ((int32_t)smc_ret.r2) { case FFA_ERROR_NOT_SUPPORTED: return ERR_NOT_SUPPORTED; case FFA_ERROR_DENIED: @@ -377,7 +377,7 @@ return NO_ERROR; case SMC_FC_FFA_ERROR: - switch ((int)smc_ret.r2) { + switch ((int32_t)smc_ret.r2) { case FFA_ERROR_NOT_SUPPORTED: return ERR_NOT_SUPPORTED; case FFA_ERROR_INVALID_PARAMETERS: