Re: [PATCH 06/17] firmware: qcom_scm-64: Add SCM results to descriptor
From: Vinod Koul
Date: Fri Nov 08 2019 - 01:09:38 EST
On 04-11-19, 17:27, Elliot Berman wrote:
> Remove knowledge of arm_smccc_res struct from client wrappers so that
> client wrappers only work QCOM SCM data structures. SCM calls may have
> up to 3 arguments, so qcom_scm_call_smccc is responsible now for filling
> those 3 arguments accordingly.
>
> Signed-off-by: Elliot Berman <eberman@xxxxxxxxxxxxxx>
> ---
> drivers/firmware/qcom_scm-64.c | 105 ++++++++++++++++++-----------------------
> 1 file changed, 45 insertions(+), 60 deletions(-)
>
> diff --git a/drivers/firmware/qcom_scm-64.c b/drivers/firmware/qcom_scm-64.c
> index 76412a5..f6536fa 100644
> --- a/drivers/firmware/qcom_scm-64.c
> +++ b/drivers/firmware/qcom_scm-64.c
> @@ -50,6 +50,7 @@ struct qcom_scm_desc {
> u32 cmd;
> u32 arginfo;
> u64 args[MAX_QCOM_SCM_ARGS];
> + u64 res[MAX_QCOM_SCM_RETS];
> u32 owner;
> };
>
> @@ -115,8 +116,7 @@ static void qcom_scm_call_do_smccc(const struct qcom_scm_desc *desc,
> }
>
> static int ___qcom_scm_call_smccc(struct device *dev,
> - const struct qcom_scm_desc *desc,
> - struct arm_smccc_res *res, bool atomic)
> + struct qcom_scm_desc *desc, bool atomic)
> {
> int arglen = desc->arginfo & 0xf;
> int i;
> @@ -125,6 +125,7 @@ static int ___qcom_scm_call_smccc(struct device *dev,
> void *args_virt = NULL;
> size_t alloc_len;
> gfp_t flag = atomic ? GFP_ATOMIC : GFP_KERNEL;
> + struct arm_smccc_res res;
>
> if (unlikely(arglen > SMCCC_N_REG_ARGS)) {
> alloc_len = SMCCC_N_EXT_ARGS * sizeof(u64);
> @@ -158,15 +159,19 @@ static int ___qcom_scm_call_smccc(struct device *dev,
> x5 = args_phys;
> }
>
> - qcom_scm_call_do_smccc(desc, res, x5, atomic);
> + qcom_scm_call_do_smccc(desc, &res, x5, atomic);
>
> if (args_virt) {
> dma_unmap_single(dev, args_phys, alloc_len, DMA_TO_DEVICE);
> kfree(args_virt);
> }
>
> - if (res->a0 < 0)
> - return qcom_scm_remap_error(res->a0);
> + desc->res[0] = res.a1;
> + desc->res[1] = res.a2;
> + desc->res[2] = res.a3;
res represents result, so can we rename this here and in qcom_scm_desc
as result, somehow I kept on reading this as res and got confused ;/ or
maybe it is just me!
--
~Vinod