> -----Original Message----- > From: Adrian Hunter [mailto:adrian.hunter@xxxxxxxxx] > Sent: Monday, June 12, 2017 8:34 PM > To: Troy Kisky; A.S. Dong > Cc: ulf.hansson@xxxxxxxxxx; linux-mmc@xxxxxxxxxxxxxxx; Fabio Estevam; > gary.bisson@xxxxxxxxxxxxxxxxxxx > Subject: Re: [PATCH] mmc: sdhci: clear interrupt when retune interrupt > received > > On 09/06/17 18:45, Troy Kisky wrote: > > On 6/9/2017 5:46 AM, Adrian Hunter wrote: > >> On 08/06/17 21:51, Troy Kisky wrote: > >>> This lets the loop exit before max_loops reaches 0. > >> > >> Needs more explanation. > >> > >>> > >>> Fixes: f37b20ebc4bc ("mmc: sdhci: add standard hw auto retuning > >>> support") > >>> > >>> Signed-off-by: Troy Kisky <troy.kisky@xxxxxxxxxxxxxxxxxxx> > >>> --- > >>> drivers/mmc/host/sdhci.c | 2 +- > >>> 1 file changed, 1 insertion(+), 1 deletion(-) > >>> > >>> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c > >>> index ecd0d43..e104194 100644 > >>> --- a/drivers/mmc/host/sdhci.c > >>> +++ b/drivers/mmc/host/sdhci.c > >>> @@ -2687,7 +2687,7 @@ static irqreturn_t sdhci_irq(int irq, void > >>> *dev_id) > >>> > >>> /* Clear selected interrupts. */ > >>> mask = intmask & (SDHCI_INT_CMD_MASK | SDHCI_INT_DATA_MASK | > >>> - SDHCI_INT_BUS_POWER); > >>> + SDHCI_INT_BUS_POWER | SDHCI_INT_RETUNE); > >> > >> SDHCI_INT_RETUNE is defined to be read-only so why write to it. > > > > > > SDHCI_INT_RETUNE is bit 12 > > host/sdhci.h:#define SDHCI_INT_RETUNE 0x00001000 > > > > Which at least from i.mx6/i.mx7 reference manuals, is a write 1 to clear > bit(marked as w1c). > > So it doesn't work the way it is specified in the SDHCI spec. > > It should be harmless to write 1, but you still need to explain how the > bit works on your hardware. What does "This lets the loop exit before > max_loops reaches 0" mean? > Can't remember too much history. Simply from code inspection, it seems without clear SDHCI_INT_RETUNE, it will loop max_loops. Not sure about ""This lets the loop exit before max_loops reaches 0" mean?" Troy, Would you help explain it? Regards Dong Aisheng > > > > > > > >> > >>> sdhci_writel(host, mask, SDHCI_INT_STATUS); > >>> > >>> if (intmask & (SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE)) > { > >>> > >> > >> > > > > ��.n��������+%������w��{.n�����{��i��)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥