Re: [PATCH V4] mmc: sdhci-msm: Update system suspend/resume callbacks of sdhci-msm platform driver

From: Veerabhadrarao Badiganti
Date: Thu Mar 05 2020 - 08:57:14 EST



On 3/4/2020 10:16 PM, Stephen Boyd wrote:
Quoting Ulf Hansson (2020-03-04 07:34:29)
On Thu, 20 Feb 2020 at 07:45, Shaik Sajida Bhanu <sbhanu@xxxxxxxxxxxxxx> wrote:
The existing suspend/resume callbacks of sdhci-msm driver are just
gating/un-gating the clocks. During suspend cycle more can be done
like disabling controller, disabling card detection, enabling wake-up events.

So updating the system pm callbacks for performing these extra
actions besides controlling the clocks.

Signed-off-by: Shaik Sajida Bhanu <sbhanu@xxxxxxxxxxxxxx>
Reviewed-by: Stephen Boyd <swboyd@xxxxxxxxxxxx>
---
Changes since V3:
Invoking sdhci & cqhci resume if sdhci_host_suspend fails.
Removed condition check before invoking cqhci_resume since its a dummy function.

Changes since V2:
Removed disabling/enabling pwr-irq from system pm ops.

Changes since V1:
Invoking pm_runtime_force_suspend/resume instead of
sdhci_msm_runtime_suepend/resume.
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 3955fa5d..3559b50 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -2159,9 +2159,52 @@ static __maybe_unused int sdhci_msm_runtime_resume(struct device *dev)
[...]
+
+ ret = sdhci_suspend_host(host);
+ if (ret)
+ goto resume_cqhci;
sdhci_suspend_host() can't be called on a device that has been runtime
suspended, as that would lead to accessing device registers when
clocks/PM domains are gated.

Depending on how the corresponding cqhci device is managed from a
runtime PM point of view, it could also be problematic to call
cqhci_suspend().
There seems to be another patch floating around here[1] that is an
attempt at a fix to this patch. They should probably be combined so that
it's not confusing what's going on.

The other fix is altogether different. It is the fix for the issue seen with run-time pm.

whereas this change is for system pm.

+
+ ret = pm_runtime_force_suspend(dev);
It looks to me that perhaps you could make use of solely
pm_runtime_force_suspend(), then just skip calling
sdhci_suspend|resume_host() altogether. Do you think that could work?
Does that do all the things the commit text mentions is desired for
system suspend?

like disabling controller, disabling card detection, enabling wake-up events.
[1] https://lore.kernel.org/linux-arm-msm/1583322863-21790-1-git-send-email-vbadigan@xxxxxxxxxxxxxx/