Messages in this thread | | | Date | Fri, 15 Nov 2019 17:29:03 -0800 | From | eberman@codeauro ... | Subject | Re: [PATCH v2 10/18] firmware: qcom_scm-64: Improve SMC convention detection |
| |
On 2019-11-15 16:21, Stephen Boyd wrote: > Quoting Elliot Berman (2019-11-12 13:22:46) >> diff --git a/drivers/firmware/qcom_scm-64.c >> b/drivers/firmware/qcom_scm-64.c >> index 977654bb..b82b450 100644 >> --- a/drivers/firmware/qcom_scm-64.c >> +++ b/drivers/firmware/qcom_scm-64.c >> @@ -302,21 +302,20 @@ int __qcom_scm_hdcp_req(struct device *dev, >> struct qcom_scm_hdcp_req *req, >> >> void __qcom_scm_init(void) >> { >> - u64 cmd; >> - struct arm_smccc_res res; >> - u32 function = SMCCC_FUNCNUM(QCOM_SCM_SVC_INFO, >> QCOM_SCM_INFO_IS_CALL_AVAIL); >> - >> - /* First try a SMC64 call */ >> - cmd = ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, >> ARM_SMCCC_SMC_64, >> - ARM_SMCCC_OWNER_SIP, function); >> - >> - arm_smccc_smc(cmd, QCOM_SCM_ARGS(1), cmd & >> (~BIT(ARM_SMCCC_TYPE_SHIFT)), >> - 0, 0, 0, 0, 0, &res); >> - >> - if (!res.a0 && res.a1) >> - qcom_smccc_convention = ARM_SMCCC_SMC_64; >> - else >> - qcom_smccc_convention = ARM_SMCCC_SMC_32; >> + qcom_smccc_convention = ARM_SMCCC_SMC_64; >> + if (__qcom_scm_is_call_available(NULL, QCOM_SCM_SVC_INFO, >> + QCOM_SCM_INFO_IS_CALL_AVAIL) == 1) > > Is this asking if the "is call available function" is available by > using > the is call available function? That is recursive. Isn't that why we > make a manually open coded SMC call to see if it works? If this isn't > going to work we may want to just have a property in DT that tells us > what to do.
Yes. The reason the open coded SMC call was made was because a fast call works better here. __qcom_scm_is_call_available uses standard call, and I'll address this in v3.
>> + BUG(); > > This BUG() is new and not mentioned in the commit text. Why can't we > just start failing all scm calls if we can't detect the calling > convention?
Bjorn has requested that the BUG was introduced in v1: https://lore.kernel.org/patchwork/patch/1148619/#1350062
>> +out: >> + pr_debug("QCOM SCM SMC Convention: %llu\n", >> qcom_smccc_convention); > > Maybe pr_info() is more appropriate. PSCI currently prints out the > version info so maybe printing something like "QCOM SCM SMC_64 calling > convention" will be useful for early debugging.
Sure, will do.
Thanks,
Elliot
-- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
| |