Re: [Regression: mmc: sdhci-esdhc-imx: add runtime pm support]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dong,

thank you for your rapid response.

On 07/02/14 09:03, Dong Aisheng wrote:
Some SDIO cards may not be able to work well without clock.

Originally it is handled by the mmc clock gate framework.
See:
static bool mmc_host_may_gate_card(struct mmc_card *card)
{
         /* If there is no card we may gate it */
         if (!card)
                 return true;
         /*
          * Don't gate SDIO cards! These need to be clocked at all times
          * since they may be independent systems generating interrupts
          * and other events. The clock requests counter from the core will
          * go down to zero since the core does not need it, but we will not
          * gate the clock, because there is somebody out there that may still
          * be using it.
          */
         return !(card->quirks & MMC_QUIRK_BROKEN_CLK_GATING);
}
But Ulf proposed to remove clock gate framework since no one used it anymore
and the patch was already sent in the mail list a few weeks ago.
Then this may need to be handled by the host driver after adding rpm.
Yes indeed the above code does nothing for the rpm case and it looks like it's on the way out anyway.
Can you try the following patch to see if it works?

commit d9d062627407f714ba326fa8dd6e8aa20199fdbe
Author: Dong Aisheng <b29396@xxxxxxxxxxxxx>
Date:   Fri Nov 15 17:54:36 2013 +0800

     mmc: sdhci: get runtime pm when sdio irq is enabled

     SDIO cards may need clock to send the card interrupt to host.
     Thus, we get runtime pm when sdio irq is enabled to prevent the clock
     resource is released and put it when sdio irq is disabled.

     Signed-off-by: Dong Aisheng <b29396@xxxxxxxxxxxxx>

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 9ddef47..f892757 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1734,9 +1734,15 @@ static void sdhci_enable_sdio_irq(struct
mmc_host *mmc, int enable)
         struct sdhci_host *host = mmc_priv(mmc);
         unsigned long flags;

+       if (enable)
+               sdhci_runtime_pm_get(host);
+
         spin_lock_irqsave(&host->lock, flags);
         sdhci_enable_sdio_irq_nolock(host, enable);
         spin_unlock_irqrestore(&host->lock, flags);
+
+       if (!enable)
+               sdhci_runtime_pm_put(host);
  }

  static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host,


Yes that works fine for me thank you.

What is the status of this patch?

I see you wrote it in November but I can't find it in git or on the mailing list anywhere

Regards,

Martin

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux