RE: [PATCH v2] mmc: sdhci-of-esdhc: modify the sd clock in soc_device_match way

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

 



> -----Original Message-----
> From: Ulf Hansson [mailto:ulf.hansson@xxxxxxxxxx]
> Sent: Friday, June 1, 2018 2:38 PM
> To: Y.b. Lu <yangbo.lu@xxxxxxx>
> Cc: Yinbo Zhu <yinbo.zhu@xxxxxxx>; Adrian Hunter
> <adrian.hunter@xxxxxxxxx>; linux-mmc@xxxxxxxxxxxxxxx; Xiaobo Xie
> <xiaobo.xie@xxxxxxx>
> Subject: Re: [PATCH v2] mmc: sdhci-of-esdhc: modify the sd clock in
> soc_device_match way
> 
> On 1 June 2018 at 08:31, Y.b. Lu <yangbo.lu@xxxxxxx> wrote:
> >> -----Original Message-----
> >> From: Yinbo Zhu
> >> Sent: Monday, May 28, 2018 5:58 PM
> >> To: Adrian Hunter <adrian.hunter@xxxxxxxxx>; Y.b. Lu
> >> <yangbo.lu@xxxxxxx>; linux-mmc@xxxxxxxxxxxxxxx
> >> Cc: Xiaobo Xie <xiaobo.xie@xxxxxxx>
> >> Subject: RE: [PATCH v2] mmc: sdhci-of-esdhc: modify the sd clock in
> >> soc_device_match way
> >>
> >>
> >>
> >> -----Original Message-----
> >> From: Adrian Hunter [mailto:adrian.hunter@xxxxxxxxx]
> >> Sent: 2018年5月24日 16:58
> >> To: Yinbo Zhu <yinbo.zhu@xxxxxxx>; Y.b. Lu <yangbo.lu@xxxxxxx>;
> >> linux-mmc@xxxxxxxxxxxxxxx
> >> Cc: Xiaobo Xie <xiaobo.xie@xxxxxxx>
> >> Subject: Re: [PATCH v2] mmc: sdhci-of-esdhc: modify the sd clock in
> >> soc_device_match way
> >>
> >> On 22/05/18 15:06, Yinbo Zhu wrote:
> > [...]
> >> > +   switch (host->mmc->ios.timing) {
> >> > +   case MMC_TIMING_LEGACY:
> >> > +           fixup = esdhc->clk_fixup->ds;
> >> > +           clock = esdhc_clock_fixup(clock, FULL_SPEED_MAX_DTR,
> fixup);
> >> > +           fixup = esdhc->clk_fixup->mmc_ds;
> >> > +           clock = esdhc_clock_fixup(clock, MMC_HIGH_26_MAX_DTR,
> fixup);
> >> > +           break;
> >> > +   case MMC_TIMING_SD_HS:
> >> > +           fixup = esdhc->clk_fixup->hs;
> >> > +           clock = esdhc_clock_fixup(clock, HIGH_SPEED_MAX_DTR,
> fixup);
> >> > +           break;
> >> > +   case MMC_TIMING_MMC_HS:
> >> > +           fixup = esdhc->clk_fixup->mmc_hs;
> >> > +           clock = esdhc_clock_fixup(clock, MMC_HIGH_52_MAX_DTR,
> fixup);
> >> > +           break;
> >> > +   case MMC_TIMING_UHS_SDR104:
> >> > +           fixup = esdhc->clk_fixup->sdr104;
> >> > +           clock = esdhc_clock_fixup(clock, UHS_SDR104_MAX_DTR,
> fixup);
> >> > +           break;
> >> > +   case MMC_TIMING_MMC_HS200:
> >> > +           fixup = esdhc->clk_fixup->hs200;
> >> > +           clock = esdhc_clock_fixup(clock, MMC_HS200_MAX_DTR,
> fixup);
> >> > +           break;
> >> > +   default:
> >> > +           break;
> >>
> >> >This logic looks fragile.  I would expect to see something that
> >> >looks more
> >> like:
> >>
> >> >     max_clk = esdhc->clk_fixup[host->mmc->ios.timing];
> >> >     if (max_clk && clock > max_clk)
> >> >             clock = max_CLK;
> >> Hi Adrian Hunter,
> >>
> >> Thanks your advice, your way will make code logic more clearly, but
> >> MMC default max clock is 26MHz, SD default max clock is 25MHz, they
> >> all use the same ios.timing in public code, If use array, There will
> >> be a conflict, Do you have any good ways to resolve the conflict.
> >> Thanks.
> >>
> >> Regards,
> >> Yinbo
> >>
> >
> > [Y.b. Lu] The MMC core driver used the timing MMC_TIMING_LEGACY for
> both MMC and SD/SDIO at card initialization.
> > However, the timing was different between MMC and SD/SDIO at
> initialization. MMC was at legacy speed mode (up to 26MHz) while SD/SDIO
> was at default speed mode (up to 25MHz).
> > Actually I think we should define MMC_TIMING_MMC_LEGACY and
> MMC_TIMING_SD_DEFAULT for MMC and SD/SDIO initializing timing.
> > And use the right timing at the beginning in mmc_attach_sd/sdio/mmc().
> > Any suggestion? Adrian and Uffe :)
> 
> I am fine with that. However, you need to make sure all host drivers can cope
> with changing this.
> 
> Perhaps, it's also sufficient to introduce MMC_TIMING_DEFAULT (used for SD)
> and keep MMC_TIMING_LEGACY (for MMC).

[Y.b. Lu] Great. It's safe to just introduce MMC_TIMING_DEFAULT. Thanks.


> 
> >
> > #define MMC_TIMING_LEGACY       0
> > #define MMC_TIMING_MMC_LEGACY       1
> > #define MMC_TIMING_SD_DEFAULT       2
> > #define MMC_TIMING_MMC_HS       3
> > #define MMC_TIMING_SD_HS        4
> > #define MMC_TIMING_UHS_SDR12    5
> > #define MMC_TIMING_UHS_SDR25    6
> > #define MMC_TIMING_UHS_SDR50    7
> > #define MMC_TIMING_UHS_SDR104   8
> > #define MMC_TIMING_UHS_DDR50    9
> > #define MMC_TIMING_MMC_DDR52    10
> > #define MMC_TIMING_MMC_HS200    11
> > #define MMC_TIMING_MMC_HS400    12
> >
> 
> Kind regards
> Uffe
��.n��������+%������w��{.n�����{��i��)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥




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

  Powered by Linux