fix(intel): support SMC 64bit return args in SiPSVC V3

Update SiPSVC V3 framework to support 64bit SMC return
arguments and other miscellaneous debug prints.

Change-Id: I659a0aea8e24eb5876e69327e44a667d2a54c241
Signed-off-by: Girisha Dengi <girisha.dengi@intel.com>
Signed-off-by: Jit Loon Lim <jit.loon.lim@altera.com>
diff --git a/plat/intel/soc/common/include/socfpga_mailbox.h b/plat/intel/soc/common/include/socfpga_mailbox.h
index 29b76ab..4da318b 100644
--- a/plat/intel/soc/common/include/socfpga_mailbox.h
+++ b/plat/intel/soc/common/include/socfpga_mailbox.h
@@ -362,7 +362,7 @@
 
 /* SDM client callback template */
 typedef uint8_t (*sdm_command_callback)(void *resp, void *cmd,
-					uint32_t *ret_args);
+					uint64_t *ret_args);
 
 /* SDM command data structure */
 typedef struct sdm_command {
@@ -394,7 +394,7 @@
 			      sdm_command_callback cb, uint32_t *cb_args,
 			      uint32_t cb_args_len);
 
-int mailbox_response_poll_v3(uint8_t client_id, uint8_t job_id, uint32_t *ret_args,
+int mailbox_response_poll_v3(uint8_t client_id, uint8_t job_id, uint64_t *ret_args,
 			     uint32_t *ret_args_size);
 
 int mailbox_response_poll_on_intr_v3(uint8_t *client_id, uint8_t *job_id,
diff --git a/plat/intel/soc/common/include/socfpga_sip_svc.h b/plat/intel/soc/common/include/socfpga_sip_svc.h
index 7f96adb..d4558bf 100644
--- a/plat/intel/soc/common/include/socfpga_sip_svc.h
+++ b/plat/intel/soc/common/include/socfpga_sip_svc.h
@@ -255,6 +255,10 @@
 #define SMC_RET_ARGS_FOUR							(4)
 #define SMC_RET_ARGS_FIVE							(5)
 #define SMC_RET_ARGS_SIX							(6)
+#define SMC_RET_ARGS_SEVEN							(7)
+#define SMC_RET_ARGS_EIGHT							(8)
+#define SMC_RET_ARGS_NINE							(9)
+#define SMC_RET_ARGS_TEN							(10)
 
 /*
  * SiP SVC Version3 SMC Functions IDs
diff --git a/plat/intel/soc/common/sip/socfpga_sip_fcs.c b/plat/intel/soc/common/sip/socfpga_sip_fcs.c
index f184788..507a9e9 100644
--- a/plat/intel/soc/common/sip/socfpga_sip_fcs.c
+++ b/plat/intel/soc/common/sip/socfpga_sip_fcs.c
@@ -25,7 +25,7 @@
 static fcs_crypto_service_data fcs_ecdsa_get_pubkey_param;
 static fcs_crypto_service_data fcs_ecdh_request_param;
 
-uint8_t fcs_send_cert_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_send_cert_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -42,7 +42,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cntr_set_preauth_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cntr_set_preauth_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -57,7 +57,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_get_attest_cert_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_get_attest_cert_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -74,7 +74,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_hkdf_request_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_hkdf_request_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -92,7 +92,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_create_cert_reload_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_create_cert_reload_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -107,7 +107,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cs_get_digest_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cs_get_digest_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -124,7 +124,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cs_mac_verify_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cs_mac_verify_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -144,7 +144,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cs_hash_sign_req_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cs_hash_sign_req_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -162,7 +162,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cs_hash_sig_verify_req_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cs_hash_sig_verify_req_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -180,7 +180,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cs_aes_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cs_aes_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -198,7 +198,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cs_data_sign_req_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cs_data_sign_req_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -215,7 +215,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_sdos_crypto_request_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_sdos_crypto_request_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -233,7 +233,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cs_get_public_key_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cs_get_public_key_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -251,7 +251,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cs_data_sig_verify_req_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cs_data_sig_verify_req_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -268,7 +268,7 @@
 	return ret_args_len;
 }
 
-uint8_t fcs_cs_ecdh_request_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t fcs_cs_ecdh_request_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
diff --git a/plat/intel/soc/common/soc/socfpga_mailbox.c b/plat/intel/soc/common/soc/socfpga_mailbox.c
index 3b3b479..bf1b7fb 100644
--- a/plat/intel/soc/common/soc/socfpga_mailbox.c
+++ b/plat/intel/soc/common/soc/socfpga_mailbox.c
@@ -1442,7 +1442,7 @@
 }
 
 int mailbox_response_poll_v3(uint8_t client_id, uint8_t job_id,
-			     uint32_t *ret_args, uint32_t *ret_args_len)
+			     uint64_t *ret_args, uint32_t *ret_args_len)
 {
 	sdm_command_t *cmd_desc = NULL;
 	sdm_response_t *resp_desc = NULL;
diff --git a/plat/intel/soc/common/socfpga_sip_svc.c b/plat/intel/soc/common/socfpga_sip_svc.c
index 62fa759..b4978d0 100644
--- a/plat/intel/soc/common/socfpga_sip_svc.c
+++ b/plat/intel/soc/common/socfpga_sip_svc.c
@@ -802,7 +802,7 @@
 #endif
 
 #if SIP_SVC_V3
-uint8_t sip_smc_cmd_cb_ret2(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t sip_smc_cmd_cb_ret2(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -816,7 +816,7 @@
 	return ret_args_len;
 }
 
-uint8_t sip_smc_cmd_cb_ret3(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t sip_smc_cmd_cb_ret3(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -831,7 +831,7 @@
 	return ret_args_len;
 }
 
-uint8_t sip_smc_ret_nbytes_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t sip_smc_ret_nbytes_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -848,7 +848,7 @@
 	return ret_args_len;
 }
 
-uint8_t sip_smc_get_chipid_cb(void *resp_desc, void *cmd_desc, uint32_t *ret_args)
+uint8_t sip_smc_get_chipid_cb(void *resp_desc, void *cmd_desc, uint64_t *ret_args)
 {
 	uint8_t ret_args_len = 0U;
 	sdm_response_t *resp = (sdm_response_t *)resp_desc;
@@ -866,30 +866,88 @@
 	return ret_args_len;
 }
 
-static uintptr_t smc_ret(void *handle, uint32_t *ret_args, uint32_t ret_args_len)
+static uintptr_t smc_ret(void *handle, uint64_t *ret_args, uint32_t ret_args_len)
 {
+
 	switch (ret_args_len) {
 	case SMC_RET_ARGS_ONE:
+		VERBOSE("SVC V3: %s: x0 0x%lx\n", __func__, ret_args[0]);
 		SMC_RET1(handle, ret_args[0]);
 		break;
 
 	case SMC_RET_ARGS_TWO:
+		VERBOSE("SVC V3: %s: x0 0x%lx, x1 0x%lx\n", __func__, ret_args[0], ret_args[1]);
 		SMC_RET2(handle, ret_args[0], ret_args[1]);
 		break;
 
 	case SMC_RET_ARGS_THREE:
+		VERBOSE("SVC V3: %s: x0 0x%lx, x1 0x%lx, x2 0x%lx\n",
+			__func__, ret_args[0],	ret_args[1], ret_args[2]);
 		SMC_RET3(handle, ret_args[0], ret_args[1], ret_args[2]);
 		break;
 
 	case SMC_RET_ARGS_FOUR:
+		VERBOSE("SVC V3: %s: x0 0x%lx, x1 0x%lx, x2 0x%lx, x3 0x%lx\n",
+			__func__, ret_args[0], ret_args[1], ret_args[2], ret_args[3]);
 		SMC_RET4(handle, ret_args[0], ret_args[1], ret_args[2], ret_args[3]);
 		break;
 
 	case SMC_RET_ARGS_FIVE:
+		VERBOSE("SVC V3: %s: x0 0x%lx, x1 0x%lx, x2 0x%lx, x3 0x%lx, x4 0x%lx\n",
+			__func__, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4]);
 		SMC_RET5(handle, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4]);
 		break;
 
+	case SMC_RET_ARGS_SIX:
+		VERBOSE("SVC V3: %s: x0 0x%lx, x1 0x%lx x2 0x%lx x3 0x%lx, x4 0x%lx x5 0x%lx\n",
+			__func__, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4],
+			ret_args[5]);
+		SMC_RET6(handle, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4],
+			 ret_args[5]);
+		break;
+
+	case SMC_RET_ARGS_SEVEN:
+		VERBOSE("SVC V3: %s: x0 0x%lx, x1 0x%lx x2 0x%lx, x3 0x%lx, x4 0x%lx, x5 0x%lx\t"
+			"x6 0x%lx\n",
+			__func__, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4],
+			ret_args[5], ret_args[6]);
+		SMC_RET7(handle, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4],
+			 ret_args[5], ret_args[6]);
+		break;
+
+	case SMC_RET_ARGS_EIGHT:
+		VERBOSE("SVC V3: %s: x0 0x%lx, x1 0x%lx x2 0x%lx, x3 0x%lx, x4 0x%lx x5 0x%lx\t"
+			"x6 0x%lx, x7 0x%lx\n",
+			__func__, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4],
+			ret_args[5], ret_args[6], ret_args[7]);
+		SMC_RET8(handle, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4],
+			 ret_args[5], ret_args[6], ret_args[7]);
+		break;
+
+	case SMC_RET_ARGS_NINE:
+		VERBOSE("SVC V3: %s: x0 0x%lx, x1 0x%lx x2 0x%lx, x3 0x%lx, x4 0x%lx, x5 0x%lx\t"
+			"x6 0x%lx, x7 0x%lx, x8 0x%lx\n",
+			__func__, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4],
+			ret_args[5], ret_args[6], ret_args[7], ret_args[8]);
+		SMC_RET18(handle, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4],
+			 ret_args[5], ret_args[6], ret_args[7], ret_args[8],
+			 0, 0, 0, 0, 0, 0, 0, 0, 0);
+		break;
+
+	case SMC_RET_ARGS_TEN:
+		VERBOSE("SVC V3: %s: x0 0x%lx, x1 0x%lx, x2 0x%lx, x3 0x%lx, x4 0x%lx x5 0x%lx\t"
+			"x6 0x%lx, x7 0x%lx x8 0x%lx, x9 0x%lx, x10 0x%lx\n",
+			__func__, ret_args[0], ret_args[1], ret_args[2], ret_args[3],
+			ret_args[4], ret_args[5], ret_args[6], ret_args[7], ret_args[8],
+			ret_args[9], ret_args[10]);
+		SMC_RET18(handle, ret_args[0], ret_args[1], ret_args[2], ret_args[3], ret_args[4],
+			  ret_args[5], ret_args[6], ret_args[7], ret_args[8], ret_args[9],
+			  0, 0, 0, 0, 0, 0, 0, 0);
+		break;
+
 	default:
+		VERBOSE("SVC V3: %s ret_args_len is wrong, please check %d\n ",
+			__func__, ret_args_len);
 		SMC_RET1(handle, INTEL_SIP_SMC_STATUS_ERROR);
 		break;
 	}
@@ -929,7 +987,7 @@
 	switch (smc_fid) {
 	case ALTERA_SIP_SMC_ASYNC_RESP_POLL:
 	{
-		uint32_t ret_args[8] = {0};
+		uint64_t ret_args[16] = {0};
 		uint32_t ret_args_len = 0;
 
 		status = mailbox_response_poll_v3(GET_CLIENT_ID(x1),