RE: [RFT PATCH] mmc: tmio: make sure SDIO gets reinitialized after resume

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

 



Hi Wolfram-san,

> From: Wolfram Sang
> Sent: Friday, May 19, 2017 9:31 PM
> 
> To achieve that, we set the registers in the generic HW reset routine
> which gets called at both, init and resume. We also make sure to move
> SDIO initialization before reset gets called in probe().
> 
> Signed-off-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx>
> ---
> 
> This patch addresses a report I got from Shimoda-san. I can't really test it
> because the SDIO cards I have all require MMC_PM_KEEP_POWER to suspend and
> that we don't support. So, I send this out to ask for testing. At least it
> didn't cause regressions for the setup I used. To make testing easier, this
> is *not* put on top of Simon's SDHI DMA rework patches, so it should apply
> on current upstream and development branches.

Thank you for the patch!
Hayakawa-san tested this patch on both H3/Salvator-X and E2/ALT.

So,
Tested-by: Masaharu Hayakawa <masaharu.hayakawa.ry@xxxxxxxxxxx>

Best regards,
Yoshihiro Shimoda

>  drivers/mmc/host/tmio_mmc_pio.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
> index a2d92f10501bdd..5e87fcaa99d430 100644
> --- a/drivers/mmc/host/tmio_mmc_pio.c
> +++ b/drivers/mmc/host/tmio_mmc_pio.c
> @@ -229,6 +229,12 @@ static void tmio_mmc_reset(struct tmio_mmc_host *host)
>  	if (host->pdata->flags & TMIO_MMC_HAVE_HIGH_REG)
>  		sd_ctrl_write16(host, CTL_RESET_SDIO, 0x0001);
>  	msleep(10);
> +
> +	if (host->pdata->flags & TMIO_MMC_SDIO_IRQ) {
> +		sd_ctrl_write16(host, CTL_SDIO_IRQ_MASK, host->sdio_irq_mask);
> +		sd_ctrl_write16(host, CTL_TRANSACTION_CTL, 0x0001);
> +	}
> +
>  }
> 
>  static void tmio_mmc_reset_work(struct work_struct *work)
> @@ -1221,6 +1227,10 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host,
>  	if (_host->native_hotplug)
>  		pm_runtime_get_noresume(&pdev->dev);
> 
> +	_host->sdio_irq_enabled = false;
> +	if (pdata->flags & TMIO_MMC_SDIO_IRQ)
> +		_host->sdio_irq_mask = TMIO_SDIO_MASK_ALL;
> +
>  	tmio_mmc_clk_stop(_host);
>  	tmio_mmc_reset(_host);
> 
> @@ -1237,13 +1247,6 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host,
> 
>  	_host->sdcard_irq_mask &= ~irq_mask;
> 
> -	_host->sdio_irq_enabled = false;
> -	if (pdata->flags & TMIO_MMC_SDIO_IRQ) {
> -		_host->sdio_irq_mask = TMIO_SDIO_MASK_ALL;
> -		sd_ctrl_write16(_host, CTL_SDIO_IRQ_MASK, _host->sdio_irq_mask);
> -		sd_ctrl_write16(_host, CTL_TRANSACTION_CTL, 0x0001);
> -	}
> -
>  	spin_lock_init(&_host->lock);
>  	mutex_init(&_host->ios_lock);
> 
> --
> 2.11.0





[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux