diff options
| author | Amit Blay <ablay@codeaurora.org> | 2017-07-31 12:16:17 +0300 |
|---|---|---|
| committer | Amit Blay <ablay@codeaurora.org> | 2017-07-31 12:17:40 +0300 |
| commit | 0d77bc07665d5ac4cedac4eae32170ec503ea6ea (patch) | |
| tree | 678b6ff343a75716c4f107cdc11da3f3fab22e4c | |
| parent | 26bb59b7f41080009fb5a6507b76017b39daea29 (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.c | 15 |
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) |
