RE: [PATCH v2 3/3] mmc: sdhci-esdhc-imx: only enable DAT[0] and CMD line auto tuning for SDIO device

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

 



> -----Original Message-----
> From: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> Sent: 2022年12月21日 22:21
> To: Bough Chen <haibo.chen@xxxxxxx>
> Cc: shawnguo@xxxxxxxxxx; s.hauer@xxxxxxxxxxxxxx; kernel@xxxxxxxxxxxxxx;
> festevam@xxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx>;
> linux-mmc@xxxxxxxxxxxxxxx; kgroeneveld@xxxxxxxxxxxx;
> ulf.hansson@xxxxxxxxxx
> Subject: Re: [PATCH v2 3/3] mmc: sdhci-esdhc-imx: only enable DAT[0] and
> CMD line auto tuning for SDIO device
> 
> On 21/12/22 13:28, haibo.chen@xxxxxxx wrote:
> > From: Haibo Chen <haibo.chen@xxxxxxx>
> >
> > USDHC IP has one limitation: the tuning circuit can't handle the async
> > sdio device interrupt correctly. When sdio device use 4 data lines,
> > async sdio interrupt will use the shared DAT[1], if enable auto tuning
> > circuit to check these 4 data lines, include the DAT[1], this circuit
> > will detect this interrupt, take this as data on DAT[1], and adjust
> > the delay cell wrongly, finally will cause the DATA/CMD CRC error.
> > So for SDIO device, only enable DAT[0] and CMD line for auto tuning.
> >
> > Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx>
> > ---
> >  drivers/mmc/host/sdhci-esdhc-imx.c | 14 ++++++++++++++
> >  1 file changed, 14 insertions(+)
> >
> > diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c
> > b/drivers/mmc/host/sdhci-esdhc-imx.c
> > index bf8d6f60a9ee..d6ce4c8d23dc 100644
> > --- a/drivers/mmc/host/sdhci-esdhc-imx.c
> > +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
> > @@ -448,6 +448,20 @@ static inline void
> usdhc_auto_tuning_mode_sel_and_en(struct sdhci_host *host)
> >  		break;
> >  	}
> >
> > +	/*
> > +	 * For USDHC, auto tuning circuit can not handle the async sdio
> > +	 * device interrupt correctly. When sdio device use 4 data lines,
> > +	 * async sdio interrupt will use the shared DAT[1], if enable auto
> > +	 * tuning circuit check these 4 data lines, include the DAT[1],
> > +	 * this circuit will detect this interrupt, take this as a data on
> > +	 * DAT[1], and adjust the delay cell wrongly.
> > +	 * This is the hardware design limitation, to avoid this, for sdio
> > +	 * device, config the auto tuning circuit only check DAT[0] and CMD
> > +	 * line.
> > +	 */
> > +	if (!host->mmc->card && mmc_card_sdio(host->mmc->card))
> 
> Looks like !host->mmc->card should be host->mmc->card

Yes, my mistake, my local test version is correct, I will fix this.

Best Regards
Haibo Chen
> 
> > +		auto_tune_buswidth = ESDHC_VEND_SPEC2_AUTO_TUNE_1BIT_EN;
> > +
> >  	esdhc_clrset_le(host, ESDHC_VEND_SPEC2_AUTO_TUNE_MODE_MASK,
> >  			auto_tune_buswidth |
> ESDHC_VEND_SPEC2_AUTO_TUNE_CMD_EN,
> >  			ESDHC_VEND_SPEC2);





[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux