summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmit Blay <ablay@codeaurora.org>2017-07-31 12:16:17 +0300
committerAmit Blay <ablay@codeaurora.org>2017-07-31 12:17:40 +0300
commit0d77bc07665d5ac4cedac4eae32170ec503ea6ea (patch)
tree678b6ff343a75716c4f107cdc11da3f3fab22e4c
parent26bb59b7f41080009fb5a6507b76017b39daea29 (diff)
soc: qcom: Fix error propagation in scm_qcpe driver
Fix scm_qcpe such that an error returned in X0, will be propagated back to the calling client. Change-Id: I8014b3f2f850d8664404c69e77ba36295a28db07 Signed-off-by: Amit Blay <ablay@codeaurora.org>
-rw-r--r--drivers/soc/qcom/scm_qcpe.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/soc/qcom/scm_qcpe.c b/drivers/soc/qcom/scm_qcpe.c
index 54a978157bda..0263350ae931 100644
--- a/drivers/soc/qcom/scm_qcpe.c
+++ b/drivers/soc/qcom/scm_qcpe.c
@@ -219,7 +219,7 @@ static int scm_call_qcpe(u32 fn_id, struct scm_desc *desc)
if (!opened) {
ret = habmm_socket_open(&handle, MM_QCPE_VM1, 0, 0);
if (ret != HAB_OK) {
- pr_err("scm_call2: habmm_socket_open failed with ret = %d",
+ pr_err("scm_call_qcpe: habmm_socket_open failed with ret = %d",
ret);
return ret;
}
@@ -239,19 +239,26 @@ static int scm_call_qcpe(u32 fn_id, struct scm_desc *desc)
return ret;
size_bytes = sizeof(smc_params);
+ memset(&smc_params, 0x0, sizeof(smc_params));
ret = habmm_socket_recv(handle, &smc_params, &size_bytes, 0, 0);
if (ret != HAB_OK)
return ret;
+ if (size_bytes != sizeof(smc_params)) {
+ pr_err("scm_call_qcpe: expected size: %lu, actual=%u\n",
+ sizeof(smc_params), size_bytes);
+ return SCM_ERROR;
+ }
+
desc->ret[0] = smc_params.x1;
desc->ret[1] = smc_params.x2;
desc->ret[2] = smc_params.x3;
- pr_info("scm_call_qcpe: OUT: 0x%llx, 0x%llx, 0x%llx",
- desc->ret[0], desc->ret[1], desc->ret[2]);
+ pr_info("scm_call_qcpe: OUT: 0x%llx, 0x%llx, 0x%llx, 0x%llx",
+ smc_params.x0, desc->ret[0], desc->ret[1], desc->ret[2]);
- return 0;
+ return smc_params.x0;
}
static u32 smc(u32 cmd_addr)