Thread (10 messages) 10 messages, 3 authors, 2021-11-02

RE: [PATCH] mmc: renesas_sdhi: Fix internal cd irq miss with hard reset

From: Biju Das <biju.das.jz@bp.renesas.com>
Date: 2021-10-23 07:38:37
Also in: linux-renesas-soc

Hi Wolfram,
Subject: RE: [PATCH] mmc: renesas_sdhi: Fix internal cd irq miss with hard
reset

Hi Wolfram,
quoted
Subject: RE: [PATCH] mmc: renesas_sdhi: Fix internal cd irq miss with
hard reset

Hi Wolfram,
quoted
Subject: Re: [PATCH] mmc: renesas_sdhi: Fix internal cd irq miss
with hard reset

On Wed, Oct 06, 2021 at 06:16:05PM +0100, Biju Das wrote:
quoted
This patch fixes internal cd irq miss after hard reset by enabling
internal card insertion/removal interrupts.

Fixes: b4d86f37eacb ("mmc: renesas_sdhi: do hard reset if
possible")
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
IIUC, the following should be the apropriate fix. Can you please
test
it?
quoted
If it works, then I'll make a proper patch out of it.
I have tested and it doesn't work. This addresses issue from
tmio_mmc_reset call from tmio_mmc_core.
Just to add, It could be related to timing issue, with your patch, if I
put some print message, It works.
Finally found the issue. There is one more patch for host->reset in tmio_mmc_core.c. please see below.
If you add this code, then it works.

Can you please add this as well in your proper patch?

@ -958,6 +963,11 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
                /* For R-Car Gen2+, we need to reset SDHI specific SCC */
                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);
+

Regards,
Biju
quoted
quoted
diff --git a/drivers/mmc/host/tmio_mmc_core.c
b/drivers/mmc/host/tmio_mmc_core.c
index 7dfc26f48c18..9416245a7b56 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-
quoted
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) { @@ -1185,10 +1189,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);
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help