Message ID | 20191204174439.69934-15-giulio.benetti@benettiengineering.com |
---|---|
State | Changes Requested |
Delegated to: | Stefano Babic |
Headers | show |
Series | Add i.MXRT family support | expand |
On Wed, 4 Dec 2019 18:44:33 +0100 Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > This driver assumes that lpuart clock is already enabled before > probing but using DM only lpuart won't be automatically enabled so add > clk_enable() when probing if CONFIG_CLK is defined. > > Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com> > --- > drivers/serial/serial_lpuart.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/serial/serial_lpuart.c > b/drivers/serial/serial_lpuart.c index 4b0a964d1b..52bd2baf7d 100644 > --- a/drivers/serial/serial_lpuart.c > +++ b/drivers/serial/serial_lpuart.c > @@ -483,6 +483,19 @@ static int lpuart_serial_pending(struct udevice > *dev, bool input) > static int lpuart_serial_probe(struct udevice *dev) > { > +#if CONFIG_IS_ENABLED(CLK) > + struct clk per_clk; > + int ret; > + > + ret = clk_get_by_name(dev, "per", &per_clk); > + if (ret) { > + dev_err(dev, "Failed to get per clk: %d\n", ret); > + return ret; > + } > + > + clk_enable(&per_clk); > +#endif > + I think that this change will _silently_ break all boards which do have CONFIG_CLK enabled (for some clocks/drivers), but did not yet provided CCF definition for lpuart clock. Was this series checked with travis-ci? For example: https://travis-ci.org/lmajewski/u-boot-dfu/jobs/622226547 > if (is_lpuart32(dev)) > return _lpuart32_serial_init(dev); > else Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Hi Lukasz, On 12/8/19 3:52 PM, Lukasz Majewski wrote: > On Wed, 4 Dec 2019 18:44:33 +0100 > Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > >> This driver assumes that lpuart clock is already enabled before >> probing but using DM only lpuart won't be automatically enabled so add >> clk_enable() when probing if CONFIG_CLK is defined. >> >> Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com> >> --- >> drivers/serial/serial_lpuart.c | 13 +++++++++++++ >> 1 file changed, 13 insertions(+) >> >> diff --git a/drivers/serial/serial_lpuart.c >> b/drivers/serial/serial_lpuart.c index 4b0a964d1b..52bd2baf7d 100644 >> --- a/drivers/serial/serial_lpuart.c >> +++ b/drivers/serial/serial_lpuart.c >> @@ -483,6 +483,19 @@ static int lpuart_serial_pending(struct udevice >> *dev, bool input) >> static int lpuart_serial_probe(struct udevice *dev) >> { >> +#if CONFIG_IS_ENABLED(CLK) >> + struct clk per_clk; >> + int ret; >> + >> + ret = clk_get_by_name(dev, "per", &per_clk); >> + if (ret) { >> + dev_err(dev, "Failed to get per clk: %d\n", ret); >> + return ret; >> + } >> + >> + clk_enable(&per_clk); >> +#endif >> + > > I think that this change will _silently_ break all boards which do have > CONFIG_CLK enabled (for some clocks/drivers), but did not yet provided > CCF definition for lpuart clock. Oops, yes, you're totally right. Would it be correct if I try to retrieve clock and otherwise I fallback sending warnings like following?: ` static int lpuart_serial_probe(struct udevice *dev) { #if CONFIG_IS_ENABLED(CLK) struct clk per_clk; int ret; ret = clk_get_by_name(dev, "per", &per_clk); if (!ret) { ret = clk_enable(&per_clk); if (ret) { dev_err(dev, "Failed to get per clk: %d\n", ret); return; } } else { dev_warn(dev, "Failed to get per clk: %d\n", ret); } #endif .... ` Best regards
On Mon, 9 Dec 2019 16:20:10 +0100 Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > Hi Lukasz, > > On 12/8/19 3:52 PM, Lukasz Majewski wrote: > > On Wed, 4 Dec 2019 18:44:33 +0100 > > Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > > > >> This driver assumes that lpuart clock is already enabled before > >> probing but using DM only lpuart won't be automatically enabled so > >> add clk_enable() when probing if CONFIG_CLK is defined. > >> > >> Signed-off-by: Giulio Benetti > >> <giulio.benetti@benettiengineering.com> --- > >> drivers/serial/serial_lpuart.c | 13 +++++++++++++ > >> 1 file changed, 13 insertions(+) > >> > >> diff --git a/drivers/serial/serial_lpuart.c > >> b/drivers/serial/serial_lpuart.c index 4b0a964d1b..52bd2baf7d > >> 100644 --- a/drivers/serial/serial_lpuart.c > >> +++ b/drivers/serial/serial_lpuart.c > >> @@ -483,6 +483,19 @@ static int lpuart_serial_pending(struct > >> udevice *dev, bool input) > >> static int lpuart_serial_probe(struct udevice *dev) > >> { > >> +#if CONFIG_IS_ENABLED(CLK) > >> + struct clk per_clk; > >> + int ret; > >> + > >> + ret = clk_get_by_name(dev, "per", &per_clk); > >> + if (ret) { > >> + dev_err(dev, "Failed to get per clk: %d\n", ret); > >> + return ret; > >> + } > >> + > >> + clk_enable(&per_clk); > >> +#endif > >> + > > > > I think that this change will _silently_ break all boards which do > > have CONFIG_CLK enabled (for some clocks/drivers), but did not yet > > provided CCF definition for lpuart clock. > > Oops, yes, you're totally right. > Would it be correct if I try to retrieve clock and otherwise I > fallback sending warnings like following?: > > ` > static int lpuart_serial_probe(struct udevice *dev) > { > #if CONFIG_IS_ENABLED(CLK) > struct clk per_clk; > int ret; > > ret = clk_get_by_name(dev, "per", &per_clk); > if (!ret) { > ret = clk_enable(&per_clk); > if (ret) { > dev_err(dev, "Failed to get per clk: %d\n", > ret); > return; > } > } else { > dev_warn(dev, "Failed to get per clk: %d\n", > ret); > } > #endif > Yes, warning is OK. > .... > > ` > > Best regards Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Hi Lukasz and all, On 12/10/19 12:48 AM, Lukasz Majewski wrote: > On Mon, 9 Dec 2019 16:20:10 +0100 > Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > >> Hi Lukasz, >> >> On 12/8/19 3:52 PM, Lukasz Majewski wrote: >>> On Wed, 4 Dec 2019 18:44:33 +0100 >>> Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: >>> >>>> This driver assumes that lpuart clock is already enabled before >>>> probing but using DM only lpuart won't be automatically enabled so >>>> add clk_enable() when probing if CONFIG_CLK is defined. >>>> >>>> Signed-off-by: Giulio Benetti >>>> <giulio.benetti@benettiengineering.com> --- >>>> drivers/serial/serial_lpuart.c | 13 +++++++++++++ >>>> 1 file changed, 13 insertions(+) >>>> >>>> diff --git a/drivers/serial/serial_lpuart.c >>>> b/drivers/serial/serial_lpuart.c index 4b0a964d1b..52bd2baf7d >>>> 100644 --- a/drivers/serial/serial_lpuart.c >>>> +++ b/drivers/serial/serial_lpuart.c >>>> @@ -483,6 +483,19 @@ static int lpuart_serial_pending(struct >>>> udevice *dev, bool input) >>>> static int lpuart_serial_probe(struct udevice *dev) >>>> { >>>> +#if CONFIG_IS_ENABLED(CLK) >>>> + struct clk per_clk; >>>> + int ret; >>>> + >>>> + ret = clk_get_by_name(dev, "per", &per_clk); While adding support for OF_PLATDATA, I've realized that when using OF_PLATDATA I can only use clk_get_by_index_platdata() but often imx peripheral drivers(as done in Linux) get clock by name("per" clock) instead of other clock sources. So here the problem is that I can't know for sure which id "per" clock source will have. I wouldn't use 0 as default clock-id since it's not sure "per" will be the 0 index. And this will occur for fsl_esdhc_imx.c driver too. Do you have any suggestions? Thanks in advance Best regards
Hi Giulio, On Tue, 17 Dec 2019 at 11:37, Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > > Hi Lukasz and all, > > On 12/10/19 12:48 AM, Lukasz Majewski wrote: > > On Mon, 9 Dec 2019 16:20:10 +0100 > > Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > > > >> Hi Lukasz, > >> > >> On 12/8/19 3:52 PM, Lukasz Majewski wrote: > >>> On Wed, 4 Dec 2019 18:44:33 +0100 > >>> Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > >>> > >>>> This driver assumes that lpuart clock is already enabled before > >>>> probing but using DM only lpuart won't be automatically enabled so > >>>> add clk_enable() when probing if CONFIG_CLK is defined. > >>>> > >>>> Signed-off-by: Giulio Benetti > >>>> <giulio.benetti@benettiengineering.com> --- > >>>> drivers/serial/serial_lpuart.c | 13 +++++++++++++ > >>>> 1 file changed, 13 insertions(+) > >>>> > >>>> diff --git a/drivers/serial/serial_lpuart.c > >>>> b/drivers/serial/serial_lpuart.c index 4b0a964d1b..52bd2baf7d > >>>> 100644 --- a/drivers/serial/serial_lpuart.c > >>>> +++ b/drivers/serial/serial_lpuart.c > >>>> @@ -483,6 +483,19 @@ static int lpuart_serial_pending(struct > >>>> udevice *dev, bool input) > >>>> static int lpuart_serial_probe(struct udevice *dev) > >>>> { > >>>> +#if CONFIG_IS_ENABLED(CLK) > >>>> + struct clk per_clk; > >>>> + int ret; > >>>> + > >>>> + ret = clk_get_by_name(dev, "per", &per_clk); > > While adding support for OF_PLATDATA, I've realized that when using > OF_PLATDATA I can only use clk_get_by_index_platdata() but often imx > peripheral drivers(as done in Linux) get clock by name("per" clock) > instead of other clock sources. So here the problem is that I can't know > for sure which id "per" clock source will have. I wouldn't use 0 as > default clock-id since it's not sure "per" will be the 0 index. > And this will occur for fsl_esdhc_imx.c driver too. > > Do you have any suggestions? I can't think of anything other than defining the values perhaps in a header, then asserting that they are valid in the non-OF_PLATDATA code. I'm not sure how we could enhance of-platdata to support this. Of course, adding the strings would be bad since we are trying to minimise overhere. Regards, Simon
diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c index 4b0a964d1b..52bd2baf7d 100644 --- a/drivers/serial/serial_lpuart.c +++ b/drivers/serial/serial_lpuart.c @@ -483,6 +483,19 @@ static int lpuart_serial_pending(struct udevice *dev, bool input) static int lpuart_serial_probe(struct udevice *dev) { +#if CONFIG_IS_ENABLED(CLK) + struct clk per_clk; + int ret; + + ret = clk_get_by_name(dev, "per", &per_clk); + if (ret) { + dev_err(dev, "Failed to get per clk: %d\n", ret); + return ret; + } + + clk_enable(&per_clk); +#endif + if (is_lpuart32(dev)) return _lpuart32_serial_init(dev); else
This driver assumes that lpuart clock is already enabled before probing but using DM only lpuart won't be automatically enabled so add clk_enable() when probing if CONFIG_CLK is defined. Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com> --- drivers/serial/serial_lpuart.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)