Message ID | 20211028195149.8003-1-wsa+renesas@sang-engineering.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mmc: tmio: reenable card irqs after the reset callback | expand |
On Thu, 28 Oct 2021 at 21:51, Wolfram Sang <wsa+renesas@sang-engineering.com> wrote: > > The reset callback may clear the internal card detect interrupts, so > make sure to reenable them if needed. > > Fixes: b4d86f37eacb ("mmc: renesas_sdhi: do hard reset if possible") > Reported-by: Biju Das <biju.das.jz@bp.renesas.com> > Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Applied for fixes and by adding a stable tag, thanks! Kind regards Uffe > --- > drivers/mmc/host/tmio_mmc_core.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) > > diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c > index 7dfc26f48c18..e2affa52ef46 100644 > --- a/drivers/mmc/host/tmio_mmc_core.c > +++ b/drivers/mmc/host/tmio_mmc_core.c > @@ -195,6 +195,10 @@ static void tmio_mmc_reset(struct tmio_mmc_host *host) > sd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK, host->sdcard_irq_mask_all); > host->sdcard_irq_mask = host->sdcard_irq_mask_all; > > + if (host->native_hotplug) > + tmio_mmc_enable_mmc_irqs(host, > + TMIO_STAT_CARD_REMOVE | TMIO_STAT_CARD_INSERT); > + > tmio_mmc_set_bus_width(host, host->mmc->ios.bus_width); > > if (host->pdata->flags & TMIO_MMC_SDIO_IRQ) { > @@ -956,8 +960,15 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > case MMC_POWER_OFF: > tmio_mmc_power_off(host); > /* For R-Car Gen2+, we need to reset SDHI specific SCC */ > - if (host->pdata->flags & TMIO_MMC_MIN_RCAR2) > + if (host->pdata->flags & TMIO_MMC_MIN_RCAR2) { > host->reset(host); > + > + if (host->native_hotplug) > + tmio_mmc_enable_mmc_irqs(host, > + TMIO_STAT_CARD_REMOVE | > + TMIO_STAT_CARD_INSERT); > + } > + > host->set_clock(host, 0); > break; > case MMC_POWER_UP: > @@ -1185,10 +1196,6 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host) > _host->set_clock(_host, 0); > tmio_mmc_reset(_host); > > - if (_host->native_hotplug) > - tmio_mmc_enable_mmc_irqs(_host, > - TMIO_STAT_CARD_REMOVE | TMIO_STAT_CARD_INSERT); > - > spin_lock_init(&_host->lock); > mutex_init(&_host->ios_lock); > > -- > 2.30.2 >
diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c index 7dfc26f48c18..e2affa52ef46 100644 --- a/drivers/mmc/host/tmio_mmc_core.c +++ b/drivers/mmc/host/tmio_mmc_core.c @@ -195,6 +195,10 @@ static void tmio_mmc_reset(struct tmio_mmc_host *host) sd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK, host->sdcard_irq_mask_all); host->sdcard_irq_mask = host->sdcard_irq_mask_all; + if (host->native_hotplug) + tmio_mmc_enable_mmc_irqs(host, + TMIO_STAT_CARD_REMOVE | TMIO_STAT_CARD_INSERT); + tmio_mmc_set_bus_width(host, host->mmc->ios.bus_width); if (host->pdata->flags & TMIO_MMC_SDIO_IRQ) { @@ -956,8 +960,15 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) case MMC_POWER_OFF: tmio_mmc_power_off(host); /* For R-Car Gen2+, we need to reset SDHI specific SCC */ - if (host->pdata->flags & TMIO_MMC_MIN_RCAR2) + if (host->pdata->flags & TMIO_MMC_MIN_RCAR2) { host->reset(host); + + if (host->native_hotplug) + tmio_mmc_enable_mmc_irqs(host, + TMIO_STAT_CARD_REMOVE | + TMIO_STAT_CARD_INSERT); + } + host->set_clock(host, 0); break; case MMC_POWER_UP: @@ -1185,10 +1196,6 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host) _host->set_clock(_host, 0); tmio_mmc_reset(_host); - if (_host->native_hotplug) - tmio_mmc_enable_mmc_irqs(_host, - TMIO_STAT_CARD_REMOVE | TMIO_STAT_CARD_INSERT); - spin_lock_init(&_host->lock); mutex_init(&_host->ios_lock);
The reset callback may clear the internal card detect interrupts, so make sure to reenable them if needed. Fixes: b4d86f37eacb ("mmc: renesas_sdhi: do hard reset if possible") Reported-by: Biju Das <biju.das.jz@bp.renesas.com> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> --- drivers/mmc/host/tmio_mmc_core.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)