]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mmc: sdhci-brcmstb: add cqhci suspend/resume to PM ops
authorKamal Dasu <kamal.dasu@broadcom.com>
Tue, 11 Mar 2025 16:59:35 +0000 (12:59 -0400)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 17 Mar 2025 10:42:42 +0000 (11:42 +0100)
cqhci timeouts observed on brcmstb platforms during suspend:
  ...
  [  164.832853] mmc0: cqhci: timeout for tag 18
  ...

Adding cqhci_suspend()/resume() calls to disable cqe
in sdhci_brcmstb_suspend()/resume() respectively to fix
CQE timeouts seen on PM suspend.

Fixes: d46ba2d17f90 ("mmc: sdhci-brcmstb: Add support for Command Queuing (CQE)")
Cc: stable@vger.kernel.org
Signed-off-by: Kamal Dasu <kamal.dasu@broadcom.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://lore.kernel.org/r/20250311165946.28190-1-kamal.dasu@broadcom.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci-brcmstb.c

index 0ef4d578ade849162cf6fc704a4dd537a25760aa..48cdcba0f39cc17c144e142025fc14af92e1bbe9 100644 (file)
@@ -503,8 +503,15 @@ static int sdhci_brcmstb_suspend(struct device *dev)
        struct sdhci_host *host = dev_get_drvdata(dev);
        struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
        struct sdhci_brcmstb_priv *priv = sdhci_pltfm_priv(pltfm_host);
+       int ret;
 
        clk_disable_unprepare(priv->base_clk);
+       if (host->mmc->caps2 & MMC_CAP2_CQE) {
+               ret = cqhci_suspend(host->mmc);
+               if (ret)
+                       return ret;
+       }
+
        return sdhci_pltfm_suspend(dev);
 }
 
@@ -529,6 +536,9 @@ static int sdhci_brcmstb_resume(struct device *dev)
                        ret = clk_set_rate(priv->base_clk, priv->base_freq_hz);
        }
 
+       if (host->mmc->caps2 & MMC_CAP2_CQE)
+               ret = cqhci_resume(host->mmc);
+
        return ret;
 }
 #endif