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: