Re: [PATCH RFC 2/4] mmc: sdio: Add capability to skip SDIO reset at scan

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

 



On 21 April 2017 at 12:08, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote:
> The SDIO card state might be being preserved during hibernation, for
> example a SDIO wifi card supporting WOWLAN. That state will be lost if an
> SDIO reset is done. One way to avoid that would be to build mmc core as a
> module and simply not load it until after attempting to restore the
> hibernation image. However that won't work if the hibernation image is
> stored on eMMC which, of course, requires mmc core.

I don't follow here. Are you saying the SDIO card is kept powered in
hibernation, as to be able to support WOWLAN, right?

Then, it feels plain wrong the mmc_rescan() tries to re-initialize it.
That should never happen, unless something is broken of course.

Kind regards
Uffe

>
> It is assumed on such systems that the platform will power cycle the SDIO
> card or not as necessary so that the SDIO reset is not needed. Add a
> capability flag to reflect that and use it to skip the SDIO reset at scan
> time.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> ---
>  drivers/mmc/core/core.c  | 6 +++++-
>  include/linux/mmc/host.h | 1 +
>  2 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
> index 6987976252ad..178e23bf0c30 100644
> --- a/drivers/mmc/core/core.c
> +++ b/drivers/mmc/core/core.c
> @@ -2639,8 +2639,12 @@ static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)
>          * if the card is being re-initialized, just send it.  CMD52
>          * should be ignored by SD/eMMC cards.
>          * Skip it if we already know that we do not support SDIO commands
> +        * Also skip it if we know this host controller has a SDIO card that
> +        * needs to be able to restore from hibernation without losing the card
> +        * state e.g. an SDIO wifi card supporting WOWLAN.
>          */
> -       if (!(host->caps2 & MMC_CAP2_NO_SDIO))
> +       if (!(host->caps2 & MMC_CAP2_NO_SDIO) &&
> +           !(host->caps2 & MMC_CAP2_NO_SDIO_RESET))
>                 sdio_reset(host);
>
>         mmc_go_idle(host);
> diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
> index 78c544e296cd..187a7ba41364 100644
> --- a/include/linux/mmc/host.h
> +++ b/include/linux/mmc/host.h
> @@ -281,6 +281,7 @@ struct mmc_host {
>         u32                     caps2;          /* More host capabilities */
>
>  #define MMC_CAP2_BOOTPART_NOACC        (1 << 0)        /* Boot partition no access */
> +#define MMC_CAP2_NO_SDIO_RESET (1 << 1)        /* Do not SDIO reset at scan */
>  #define MMC_CAP2_FULL_PWR_CYCLE        (1 << 2)        /* Can do full power cycle */
>  #define MMC_CAP2_HS200_1_8V_SDR        (1 << 5)        /* can support */
>  #define MMC_CAP2_HS200_1_2V_SDR        (1 << 6)        /* can support */
> --
> 1.9.1
>
--
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