RE: [PATCH v1] mmc: sdhci-of-esdhc: Workaround for reducing the maximum speed on ls1021atwr

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

 



Hi Uffe,


> -----Original Message-----
> From: Ulf Hansson [mailto:ulf.hansson@xxxxxxxxxx]
> Sent: 2017年11月16日 15:34
> To: Yinbo Zhu <yinbo.zhu@xxxxxxx>
> Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>; Y.b. Lu <yangbo.lu@xxxxxxx>;
> linux-mmc@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH v1] mmc: sdhci-of-esdhc: Workaround for reducing the
> maximum speed on ls1021atwr
> 
> On 15 November 2017 at 10:01,  <yinbo.zhu@xxxxxxx> wrote:
> > From: "yinbo.zhu" <yinbo.zhu@xxxxxxx>
> >
> > In SDHC high speed AC timing, the tshivkh parameter is defined as
> > input setup times:SDHC_CMD, SDHC_DATx, to SDHC_CLK. The value of the
> > tshivkh should be 2.5 ns considering the round trip delay, board/data
> > skew.
> > However, because of this erratum, it needs at least 4.1 ns.
> >
> > eSDHC cannot run at the maximum clock speed for the high speed mode,
> > or there is a limit on the length of the trace on the board for data,
> > command, and clock lines of the SDHC.
> >
> > Signed-off-by: yinbo.zhu <yinbo.zhu@xxxxxxx>
> > ---
> >  drivers/mmc/host/sdhci-of-esdhc.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> >
> > diff --git a/drivers/mmc/host/sdhci-of-esdhc.c
> > b/drivers/mmc/host/sdhci-of-esdhc.c
> > index 023c24bd0d94..2744dd58a573 100644
> > --- a/drivers/mmc/host/sdhci-of-esdhc.c
> > +++ b/drivers/mmc/host/sdhci-of-esdhc.c
> > @@ -498,6 +498,12 @@ static void esdhc_of_set_clock(struct sdhci_host
> *host, unsigned int clock)
> >                         clock -= 5000000;
> >         }
> >
> > +       /* Workaround to reduce the clock frequency for ls1021a esdhc */
> > +       if (of_find_compatible_node(NULL, NULL, "fsl,ls1021a-esdhc"))
> > + {
> 
> It's better to use the ->data pointer in the struct of_device_id for this kind of
> variant data.
> 
> In ->probe() you then call of_match_device() and pick up the ->data pointer
> and assign it to your driver private data.
> 
> Many drivers already do like this. Have a look at dw_mmc-exynos.c for
> example.
> 

[Y.b. Lu] How about using soc_device_match()? There is also .data member could be used in soc_device_attribute structure.
Use soc_device_match() in esdhc_init and get .data information into sdhci_esdhc structure which is private data.
Current incorrect host version register value fix-up for some platforms is using this method.

Thanks a lot:)

> > +               if (clock == 50000000)
> > +                       clock = 46500000;
> > +       }
> > +
> >         temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
> >         temp &= ~(ESDHC_CLOCK_SDCLKEN | ESDHC_CLOCK_IPGEN |
> ESDHC_CLOCK_HCKEN |
> >                   ESDHC_CLOCK_PEREN | ESDHC_CLOCK_MASK);
> 
> 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