firmware: qcom: scm: Rework dload mode availability check
authorMukesh Ojha <quic_mojha@quicinc.com>
Thu, 21 Mar 2024 15:24:01 +0000 (20:54 +0530)
committerBjorn Andersson <andersson@kernel.org>
Sun, 21 Apr 2024 17:08:06 +0000 (12:08 -0500)
QCOM_SCM_BOOT_SET_DLOAD_MODE scm command is applicable for very
older SoCs where this command is supported from firmware and
for newer SoCs, dload mode tcsr registers is used for setting
the download mode.

Currently, qcom_scm_set_download_mode() checks for availability
of QCOM_SCM_BOOT_SET_DLOAD_MODE command even for SoCs where this
is not used. Fix this by switching the condition to keep the
command availability check only if dload mode registers are not
available.

Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com>
Reviewed-by: Elliot Berman <quic_eberman@quicinc.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Link: https://lore.kernel.org/r/1711034642-22860-3-git-send-email-quic_mojha@quicinc.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
drivers/firmware/qcom/qcom_scm.c

index d32fae53be1cb03e4095c1dcef3bbcd92d51f8dc..d9cee441d81c1322b81442d535ba61ec359ae628 100644 (file)
@@ -495,17 +495,14 @@ static int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
 
 static void qcom_scm_set_download_mode(bool enable)
 {
-       bool avail;
        int ret = 0;
 
-       avail = __qcom_scm_is_call_available(__scm->dev,
-                                            QCOM_SCM_SVC_BOOT,
-                                            QCOM_SCM_BOOT_SET_DLOAD_MODE);
-       if (avail) {
-               ret = __qcom_scm_set_dload_mode(__scm->dev, enable);
-       } else if (__scm->dload_mode_addr) {
+       if (__scm->dload_mode_addr) {
                ret = qcom_scm_io_writel(__scm->dload_mode_addr,
-                               enable ? QCOM_SCM_BOOT_SET_DLOAD_MODE : 0);
+                                        enable ? QCOM_SCM_BOOT_SET_DLOAD_MODE : 0);
+       } else if (__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_BOOT,
+                                               QCOM_SCM_BOOT_SET_DLOAD_MODE)) {
+               ret = __qcom_scm_set_dload_mode(__scm->dev, enable);
        } else {
                dev_err(__scm->dev,
                        "No available mechanism for setting download mode\n");