diff --git a/include/runtime_services/ffa_svc.h b/include/runtime_services/ffa_svc.h
index 226bbd1..0e6081e 100644
--- a/include/runtime_services/ffa_svc.h
+++ b/include/runtime_services/ffa_svc.h
@@ -11,7 +11,10 @@
 #include <smccc.h>
 #include <uuid.h>
 
-/* FFA error codes. */
+/**
+ * FFA error codes.
+ * Don't forget to update `ffa_error_name` if you add a new one.
+ */
 #define FFA_ERROR_NOT_SUPPORTED		-1
 #define FFA_ERROR_INVALID_PARAMETER	-2
 #define FFA_ERROR_NO_MEMORY		-3
@@ -22,6 +25,33 @@
 #define FFA_ERROR_ABORTED		-8
 #define FFA_ERROR_NO_DATA		-9
 
+/* Return the name of the error code. */
+static inline const char *ffa_error_name(int32_t error)
+{
+	switch (error) {
+	case FFA_ERROR_NOT_SUPPORTED:
+		return "FFA_ERROR_NOT_SUPPORTED";
+	case FFA_ERROR_INVALID_PARAMETER:
+		return "FFA_ERROR_INVALID_PARAMETER";
+	case FFA_ERROR_NO_MEMORY:
+		return "FFA_ERROR_NO_MEMORY";
+	case FFA_ERROR_BUSY:
+		return "FFA_ERROR_BUSY";
+	case FFA_ERROR_INTERRUPTED:
+		return "FFA_ERROR_INTERRUPTED";
+	case FFA_ERROR_DENIED:
+		return "FFA_ERROR_DENIED";
+	case FFA_ERROR_RETRY:
+		return "FFA_ERROR_RETRY";
+	case FFA_ERROR_ABORTED:
+		return "FFA_ERROR_ABORTED";
+	case FFA_ERROR_NO_DATA:
+		return "FFA_ERROR_NO_DATA";
+	default:
+		return "UNKNOWN";
+	}
+}
+
 /* The macros below are used to identify FFA calls from the SMC function ID */
 #define FFA_FNUM_MIN_VALUE	U(0x60)
 #define FFA_FNUM_MAX_VALUE	U(0x8C)
@@ -61,7 +91,10 @@
 		 (OEN_STD_START << FUNCID_OEN_SHIFT) |	\
 		 ((func_num) << FUNCID_NUM_SHIFT))
 
-/* FFA function numbers */
+/**
+ * FFA function numbers.
+ * Don't forget to update `ffa_func_name` if you add a new one.
+ */
 #define FFA_FNUM_ERROR				U(0x60)
 #define FFA_FNUM_SUCCESS			U(0x61)
 #define FFA_FNUM_INTERRUPT			U(0x62)
@@ -176,6 +209,103 @@
 
 /* Implementation defined SMC64 FIDs */
 #define FFA_CONSOLE_LOG_SMC64	FFA_FID(SMC_64, FFA_FNUM_CONSOLE_LOG)
+
+static inline const char *ffa_func_name(uint32_t func)
+{
+	switch (func) {
+	case FFA_ERROR:
+		return "FFA_ERROR";
+	case FFA_SUCCESS_SMC32:
+		return "FFA_SUCCESS_SMC32";
+	case FFA_INTERRUPT:
+		return "FFA_INTERRUPT";
+	case FFA_VERSION:
+		return "FFA_VERSION";
+	case FFA_FEATURES:
+		return "FFA_FEATURES";
+	case FFA_RX_RELEASE:
+		return "FFA_RX_RELEASE";
+	case FFA_RXTX_MAP_SMC32:
+		return "FFA_RXTX_MAP_SMC32";
+	case FFA_RXTX_UNMAP:
+		return "FFA_RXTX_UNMAP";
+	case FFA_PARTITION_INFO_GET:
+		return "FFA_PARTITION_INFO_GET";
+	case FFA_ID_GET:
+		return "FFA_ID_GET";
+	case FFA_MSG_POLL:
+		return "FFA_MSG_POLL";
+	case FFA_MSG_WAIT:
+		return "FFA_MSG_WAIT";
+	case FFA_MSG_YIELD:
+		return "FFA_MSG_YIELD";
+	case FFA_RUN:
+		return "FFA_RUN";
+	case FFA_MSG_SEND:
+		return "FFA_MSG_SEND";
+	case FFA_MSG_SEND_DIRECT_RESP_SMC32:
+		return "FFA_MSG_SEND_DIRECT_RESP_SMC32";
+	case FFA_MEM_DONATE_SMC32:
+		return "FFA_MEM_DONATE_SMC32";
+	case FFA_MEM_LEND_SMC32:
+		return "FFA_MEM_LEND_SMC32";
+	case FFA_MEM_SHARE_SMC32:
+		return "FFA_MEM_SHARE_SMC32";
+	case FFA_MEM_RETRIEVE_REQ_SMC32:
+		return "FFA_MEM_RETRIEVE_REQ_SMC32";
+	case FFA_MEM_RETRIEVE_RESP:
+		return "FFA_MEM_RETRIEVE_RESP";
+	case FFA_MEM_RELINQUISH:
+		return "FFA_MEM_RELINQUISH";
+	case FFA_MEM_RECLAIM:
+		return "FFA_MEM_RECLAIM";
+	case FFA_NOTIFICATION_BITMAP_CREATE:
+		return "FFA_NOTIFICATION_BITMAP_CREATE";
+	case FFA_NOTIFICATION_BITMAP_DESTROY:
+		return "FFA_NOTIFICATION_BITMAP_DESTROY";
+	case FFA_NOTIFICATION_BIND:
+		return "FFA_NOTIFICATION_BIND";
+	case FFA_NOTIFICATION_UNBIND:
+		return "FFA_NOTIFICATION_UNBIND";
+	case FFA_NOTIFICATION_SET:
+		return "FFA_NOTIFICATION_SET";
+	case FFA_NOTIFICATION_GET:
+		return "FFA_NOTIFICATION_GET";
+	case FFA_NOTIFICATION_INFO_GET:
+		return "FFA_NOTIFICATION_INFO_GET";
+	case FFA_SPM_ID_GET:
+		return "FFA_SPM_ID_GET";
+	case FFA_SUCCESS_SMC64:
+		return "FFA_SUCCESS_SMC64";
+	case FFA_RXTX_MAP_SMC64:
+		return "FFA_RXTX_MAP_SMC64";
+	case FFA_MSG_SEND_DIRECT_REQ_SMC64:
+		return "FFA_MSG_SEND_DIRECT_REQ_SMC64";
+	case FFA_MSG_SEND_DIRECT_RESP_SMC64:
+		return "FFA_MSG_SEND_DIRECT_RESP_SMC64";
+	case FFA_MEM_DONATE_SMC64:
+		return "FFA_MEM_DONATE_SMC64";
+	case FFA_MEM_LEND_SMC64:
+		return "FFA_MEM_LEND_SMC64";
+	case FFA_MEM_SHARE_SMC64:
+		return "FFA_MEM_SHARE_SMC64";
+	case FFA_MEM_RETRIEVE_REQ_SMC64:
+		return "FFA_MEM_RETRIEVE_REQ_SMC64";
+	case FFA_SECONDARY_EP_REGISTER_SMC64:
+		return "FFA_SECONDARY_EP_REGISTER_SMC64";
+	case FFA_NOTIFICATION_INFO_GET_SMC64:
+		return "FFA_NOTIFICATION_INFO_GET_SMC64";
+	case FFA_FEATURES_MEM_RETRIEVE_REQ_NS_SUPPORT:
+		return "FFA_FEATURES_MEM_RETRIEVE_REQ_NS_SUPPORT";
+	case FFA_PARTITION_INFO_GET_REGS_SMC64:
+		return "FFA_PARTITION_INFO_GET_REGS_SMC64";
+	case FFA_CONSOLE_LOG_SMC64:
+		return "FFA_CONSOLE_LOG_SMC64";
+	default:
+		return "UNKNOWN";
+	}
+}
+
 /*
  * Reserve a special value for traffic targeted to the Hypervisor or SPM.
  */
diff --git a/spm/cactus/cactus_main.c b/spm/cactus/cactus_main.c
index b3f7451..141f1fe 100644
--- a/spm/cactus/cactus_main.c
+++ b/spm/cactus/cactus_main.c
@@ -61,10 +61,12 @@
 	ffa_ret = ffa_msg_wait();
 
 	for (;;) {
-		VERBOSE("Woke up with func id: %x\n", ffa_func_id(ffa_ret));
+		VERBOSE("Woke up with func id: %s\n",
+			ffa_func_name(ffa_func_id(ffa_ret)));
 
 		if (ffa_func_id(ffa_ret) == FFA_ERROR) {
-			ERROR("Error: %x\n", ffa_error_code(ffa_ret));
+			ERROR("Error: %s\n",
+			      ffa_error_name(ffa_error_code(ffa_ret)));
 			break;
 		}
 
@@ -72,8 +74,8 @@
 		    ffa_func_id(ffa_ret) != FFA_MSG_SEND_DIRECT_REQ_SMC64 &&
 		    ffa_func_id(ffa_ret) != FFA_INTERRUPT &&
 		    ffa_func_id(ffa_ret) != FFA_RUN) {
-			ERROR("%s(%u) unknown func id 0x%x\n",
-				__func__, vm_id, ffa_func_id(ffa_ret));
+			ERROR("%s(%u) unknown func id %s\n", __func__, vm_id,
+			      ffa_func_name(ffa_func_id(ffa_ret)));
 			break;
 		}
 
@@ -304,9 +306,8 @@
 		VERBOSE("Mapping RXTX Region\n");
 		CONFIGURE_AND_MAP_MAILBOX(mb, PAGE_SIZE, ret);
 		if (ffa_func_id(ret) != FFA_SUCCESS_SMC32) {
-			ERROR(
-			    "Failed to map RXTX buffers. Error: %x\n",
-			    ffa_error_code(ret));
+			ERROR("Failed to map RXTX buffers. Error: %s\n",
+			      ffa_error_name(ffa_error_code(ret)));
 			panic();
 		}
 	}
diff --git a/spm/common/sp_tests/sp_test_ffa.c b/spm/common/sp_tests/sp_test_ffa.c
index 219b149..63bf131 100644
--- a/spm/common/sp_tests/sp_test_ffa.c
+++ b/spm/common/sp_tests/sp_test_ffa.c
@@ -99,18 +99,20 @@
 				test_target.expected_ret : FFA_ERROR;
 
 		if (ffa_func_id(ffa_ret) != expected_ret) {
-			ERROR("Unexpected return: %x (expected %x)."
+			ERROR("Unexpected return: %s (expected %s)."
 			      " FFA_FEATURES test: %s.\n",
-			      ffa_func_id(ffa_ret), expected_ret,
+			      ffa_func_name(ffa_func_id(ffa_ret)),
+			      ffa_func_name(expected_ret),
 			      test_target.test_name);
 		}
 
 		if (expected_ret == FFA_ERROR) {
 			if (ffa_error_code(ffa_ret) !=
 			    FFA_ERROR_NOT_SUPPORTED) {
-				ERROR("Unexpected error code: %x (expected %x)."
+				ERROR("Unexpected error code: %s (expected %s)."
 				      " FFA_FEATURES test: %s.\n",
-				      ffa_error_code(ffa_ret), expected_ret,
+				      ffa_error_name(ffa_error_code(ffa_ret)),
+				      ffa_error_name(expected_ret),
 				      test_target.test_name);
 			}
 		}
diff --git a/spm/ivy/app/ivy_main.c b/spm/ivy/app/ivy_main.c
index 1e2cd6a..861ef30 100644
--- a/spm/ivy/app/ivy_main.c
+++ b/spm/ivy/app/ivy_main.c
@@ -42,8 +42,8 @@
 	VERBOSE("Mapping RXTX Regions\n");
 	CONFIGURE_AND_MAP_MAILBOX(mb, PAGE_SIZE, ret);
 	if (ffa_func_id(ret) != FFA_SUCCESS_SMC32) {
-		ERROR("Failed to map RXTX buffers. Error %x\n",
-		      ffa_error_code(ret));
+		ERROR("Failed to map RXTX buffers. Error %s\n",
+		      ffa_error_name(ffa_error_code(ret)));
 		panic();
 	}
 
@@ -53,7 +53,8 @@
 
 	while (1) {
 		if (ffa_func_id(ret) != FFA_MSG_SEND_DIRECT_REQ_SMC32) {
-			ERROR("unknown FF-A request %x\n", ffa_func_id(ret));
+			ERROR("unknown FF-A request %s\n",
+			      ffa_func_name(ffa_func_id(ret)));
 			goto init;
 		}
 
diff --git a/tftf/tests/runtime_services/secure_service/spm_common.c b/tftf/tests/runtime_services/secure_service/spm_common.c
index ee25c82..45ab71a 100644
--- a/tftf/tests/runtime_services/secure_service/spm_common.c
+++ b/tftf/tests/runtime_services/secure_service/spm_common.c
@@ -21,24 +21,34 @@
 bool is_ffa_call_error(struct ffa_value ret)
 {
 	if (ffa_func_id(ret) == FFA_ERROR) {
-		VERBOSE("FF-A call returned error (%x): %d\n",
-		      ffa_func_id(ret), ffa_error_code(ret));
+		VERBOSE("FF-A call returned error: %s\n",
+			ffa_error_name(ffa_error_code(ret)));
 		return true;
 	}
 	return false;
 }
 
-bool is_expected_ffa_error(struct ffa_value ret, int32_t error_code)
+bool is_expected_ffa_error(struct ffa_value ret, int32_t expected_error)
 {
-	if (ffa_func_id(ret) == FFA_ERROR &&
-	    ffa_error_code(ret) == error_code) {
-		return true;
+	uint32_t received_func;
+	int32_t received_error;
+
+	received_func = ffa_func_id(ret);
+	if (received_func != FFA_ERROR) {
+		ERROR("Expected FFA_ERROR, got %s instead\n",
+		      ffa_func_name(received_func));
+		return false;
 	}
 
-	ERROR("Expected FFA_ERROR(%x), code: %d, got %x %d\n",
-	      FFA_ERROR, error_code, ffa_func_id(ret), ffa_error_code(ret));
+	received_error = ffa_error_code(ret);
+	if (received_error != expected_error) {
+		ERROR("Expected %s, got %s instead\n",
+		      ffa_error_name(expected_error),
+		      ffa_error_name(received_error));
+		return false;
+	}
 
-	return false;
+	return true;
 }
 
 /**
@@ -53,7 +63,7 @@
 		return true;
 	}
 
-	VERBOSE("%x is not FF-A response.\n", ffa_func_id(ret));
+	VERBOSE("%s is not FF-A response.\n", ffa_func_name(ffa_func_id(ret)));
 	/* To log error in case it is FFA_ERROR*/
 	is_ffa_call_error(ret);
 
@@ -69,7 +79,8 @@
 		return true;
 	}
 
-	VERBOSE("Expecting %x, FF-A return was %x\n", func_id, ffa_func_id(ret));
+	VERBOSE("Expecting %s, FF-A return was %s\n", ffa_func_name(func_id),
+		ffa_func_name(ffa_func_id(ret)));
 
 	return false;
 }
@@ -231,8 +242,8 @@
 	ret = ffa_mem_retrieve_req(descriptor_size, descriptor_size);
 
 	if (ffa_func_id(ret) != FFA_MEM_RETRIEVE_RESP) {
-		ERROR("%s: couldn't retrieve the memory page. Error: %d\n",
-		      __func__, ffa_error_code(ret));
+		ERROR("%s: couldn't retrieve the memory page. Error: %s\n",
+		      __func__, ffa_error_name(ffa_error_code(ret)));
 		return false;
 	}
 
@@ -417,8 +428,8 @@
 	ffa_mem_relinquish_init(m, handle, 0, id);
 	ret = ffa_mem_relinquish();
 	if (ffa_func_id(ret) != FFA_SUCCESS_SMC32) {
-		ERROR("%s failed to relinquish memory! error: %x\n",
-		      __func__, ffa_error_code(ret));
+		ERROR("%s failed to relinquish memory! error: %s\n", __func__,
+		      ffa_error_name(ffa_error_code(ret)));
 		return false;
 	}
 
diff --git a/tftf/tests/runtime_services/secure_service/test_ffa_interrupts.c b/tftf/tests/runtime_services/secure_service/test_ffa_interrupts.c
index 454ea05..d4c8048 100644
--- a/tftf/tests/runtime_services/secure_service/test_ffa_interrupts.c
+++ b/tftf/tests/runtime_services/secure_service/test_ffa_interrupts.c
@@ -218,8 +218,10 @@
 
 	if ((ffa_func_id(ret_values) != FFA_ERROR) ||
 	    (ffa_error_code(ret_values) != FFA_ERROR_BUSY)) {
-		ERROR("Expected FFA_ERROR(BUSY)! Got %x(%x)\n",
-		      ffa_func_id(ret_values), ffa_error_code(ret_values));
+		ERROR("Expected FFA_ERROR(BUSY)! Got %s(%s)\n",
+		      ffa_func_name(ffa_func_id(ret_values)),
+		      ffa_error_name(ffa_error_code(ret_values)));
+
 		return TEST_RESULT_FAIL;
 	}
 
@@ -560,8 +562,9 @@
 
 	if ((ffa_func_id(ret_values) != FFA_ERROR) ||
 	    (ffa_error_code(ret_values) != FFA_ERROR_BUSY)) {
-		ERROR("Expected FFA_ERROR(BUSY)! Got %x(%x)\n",
-		      ffa_func_id(ret_values), ffa_error_code(ret_values));
+		ERROR("Expected FFA_ERROR(BUSY)! Got %s(%s)\n",
+		      ffa_func_name(ffa_func_id(ret_values)),
+		      ffa_error_name(ffa_error_code(ret_values)));
 		return TEST_RESULT_FAIL;
 	}
 
diff --git a/tftf/tests/runtime_services/secure_service/test_ffa_setup_and_discovery.c b/tftf/tests/runtime_services/secure_service/test_ffa_setup_and_discovery.c
index 80a3015..567ac48 100644
--- a/tftf/tests/runtime_services/secure_service/test_ffa_setup_and_discovery.c
+++ b/tftf/tests/runtime_services/secure_service/test_ffa_setup_and_discovery.c
@@ -94,19 +94,20 @@
 			>= test_target.version_added ?
 			test_target.expected_ret : FFA_ERROR;
 		if (ffa_func_id(ffa_ret) != expected_ret) {
-			tftf_testcase_printf("%s returned %x, expected %x\n",
-					test_target.test_name,
-					ffa_func_id(ffa_ret),
-					expected_ret);
+			tftf_testcase_printf(
+				"%s returned %s, expected %s\n",
+				test_target.test_name,
+				ffa_func_name(ffa_func_id(ffa_ret)),
+				ffa_func_name(expected_ret));
 			return TEST_RESULT_FAIL;
 		}
 		if ((expected_ret == FFA_ERROR) &&
 				(ffa_error_code(ffa_ret) != FFA_ERROR_NOT_SUPPORTED)) {
-			tftf_testcase_printf("%s failed for the wrong reason: "
-					"returned %x, expected %x\n",
-					test_target.test_name,
-					ffa_error_code(ffa_ret),
-					FFA_ERROR_NOT_SUPPORTED);
+			tftf_testcase_printf(
+				"%s failed for the wrong reason: returned %s, expected %s\n",
+				test_target.test_name,
+				ffa_error_name(ffa_error_code(ffa_ret)),
+				ffa_error_name(FFA_ERROR_NOT_SUPPORTED));
 			return TEST_RESULT_FAIL;
 		}
 	}
@@ -225,7 +226,8 @@
 	 */
 	CONFIGURE_AND_MAP_MAILBOX(mb, PAGE_SIZE, ret);
 	if (ffa_func_id(ret) != expected_return) {
-		ERROR("Failed to map RXTX buffers %x!\n", ffa_error_code(ret));
+		ERROR("Failed to map RXTX buffers: %s!\n",
+		      ffa_error_name(ffa_error_code(ret)));
 		return TEST_RESULT_FAIL;
 	}
 
@@ -353,8 +355,8 @@
 	struct ffa_value ffa_ret = ffa_spm_id_get();
 
 	if (is_ffa_call_error(ffa_ret)) {
-		ERROR("FFA_SPM_ID_GET call failed! Error code: 0x%x\n",
-			ffa_error_code(ffa_ret));
+		ERROR("FFA_SPM_ID_GET call failed! Error code: %s\n",
+		      ffa_error_name(ffa_error_code(ffa_ret)));
 		return TEST_RESULT_FAIL;
 	}
 
