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