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

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

 



On Fri, Feb 7, 2014 at 3:56 PM, Dong Aisheng <dongas86@xxxxxxxxx> wrote:
> Hi Martin,
>
> On Thu, Feb 6, 2014 at 10:55 PM, Martin Fuzzey <mfuzzey@xxxxxxxxxxx> wrote:
>> Hello all,
>>
>> since
>>
>> commit 89d7e5c131228a8f0d8b0cb48b459c62152bf620
>> Author: Dong Aisheng <b29396@xxxxxxxxxxxxx>
>> Date:   Mon Nov 4 16:38:29 2013 +0800
>>
>>     mmc: sdhci-esdhc-imx: add runtime pm support
>>
>>
>> My SDIO wifi module (WiiBear n modue based on Marvel 8787 chipset) using
>> mainline mwifiex driver is no longer working:
>>
>
> 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.

Regards
Dong Aisheng

> 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,
>
>
> Regards
> Dong Aisheng
>
>> [   33.465577] mwifiex_sdio mmc2:0001:1: mwifiex_cmd_timeout_func: Timeout
>> cmd id (7242618.212205) = 0xa9, act = 0x0
>> [   33.475944] mwifiex_sdio mmc2:0001:1: num_data_h2c_failure = 0
>> [   33.481793] mwifiex_sdio mmc2:0001:1: num_cmd_h2c_failure = 0
>> [   33.487599] mwifiex_sdio mmc2:0001:1: num_cmd_timeout = 1
>> [   33.493010] mwifiex_sdio mmc2:0001:1: num_tx_timeout = 0
>> [   33.498371] mwifiex_sdio mmc2:0001:1: last_cmd_index = 1
>> [   33.503693] mwifiex_sdio mmc2:0001:1: last_cmd_id: 00 00 a9 00 00 00 00
>> 00 00 00
>> [   33.511137] mwifiex_sdio mmc2:0001:1: last_cmd_act: 00 00 00 00 00 00 00
>> 00 00 00
>> [   33.518660] mwifiex_sdio mmc2:0001:1: last_cmd_resp_index = 0
>> [   33.524417] mwifiex_sdio mmc2:0001:1: last_cmd_resp_id: 00 00 00 00 00 00
>> 00 00 00 00
>> [   33.532301] mwifiex_sdio mmc2:0001:1: last_event_index = 0
>> [   33.537825] mwifiex_sdio mmc2:0001:1: last_event: 00 00 00 00 00 00 00 00
>> 00 00
>> [   33.545164] mwifiex_sdio mmc2:0001:1: data_sent=1 cmd_sent=1
>> [   33.550863] mwifiex_sdio mmc2:0001:1: ps_mode=0 ps_state=0
>> [   33.556425] mwifiex_sdio mmc2:0001:1: cmd timeout
>> [   33.572375] mwifiex_sdio: Resetting card...
>> [   33.728913] mmc2: card 0001 removed
>>
>>
>> Increasing the autosuspend delay from 50ms to 500ms fixes the problem.
>>
>> This is using an i.MX53 SOC
>>
>> This is on 3.13 cherrypicking from mainline this patch and these two
>> supporting patches:
>>
>> commit d433dc63182825538b85de6a85e2ea3fad7f2917
>> Author: Dong Aisheng <b29396@xxxxxxxxxxxxx>
>> Date:   Mon Nov 4 16:38:25 2013 +0800
>>
>>     mmc: sdhci-pltfm: export pltfm suspend/resume api
>>
>>
>> commit ce090a4eb9626272bfd2529520f2f16351029640
>> Author: Dong Aisheng <b29396@xxxxxxxxxxxxx>
>> Date:   Mon Nov 4 16:38:28 2013 +0800
>>
>>     mmc: sdhci-esdhc-imx: fix runtime pm unbalance issue
>>
>>
>> Cheers,
>>
>> 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
--
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