[U-Boot] [i.MX8MM+CCF 03/41] clk: introduce clk_dev_binded

Peng Fan peng.fan at nxp.com
Tue May 7 13:22:24 UTC 2019


> Subject: Re: [i.MX8MM+CCF 03/41] clk: introduce clk_dev_binded
> 
> On Tue, 30 Apr 2019 10:17:40 +0000
> Peng Fan <peng.fan at nxp.com> wrote:
> 
> > When support Clock Common Framework, U-Boot use dev for clk tree
> > information, there is no clk->parent.
> 
> There is a function in clk uclass named:
> clk_get_parent() to provide parent of the clock.
> 
> > When
> > support composite clk, it contains mux/gate/divider, but the
> > mux/gate/divider is not binded with device.
> 
> There is a binding:
> struct clk_pllv3 {
> 	struct clk	clk;
> 	...
> };
> 
> The clk.dev points to corresponding device.
> 
> In the opposite direction we do have dev->driver_data, which points to struct
> clk embedded in for example struct clk_pllv3.
> (as struct clk_pllv3 and struct clk share the same address it is up to us to cast
> it properly).
> 
> I've written my thoughts and considerations about using dev->private and
> dev->driver_data in the patch cover letter [1]
> 
> 
> > So we could not use dev_get_driver_data to get the correct
> > clk_mux/gate/divider.
> 
> Maybe I've overlooked something, but dev_get_driver_data() shall provide
> correct reference to udevice.

A composite clk contains a mux/gate/divider clk. Only the composite clk needs to
binded with a udevice. The mux/gate/divider inside a composite clk should not
bind a device, because they needs to be hidden from dm tree or clk dumps.

If bind the mux/gate/divider insides a composite clk, that will be mess. The reason
to introduce composite clk is to make clk tree cleaner/simplier.

Regards,
Peng.

> 
> > So add clk_dev_binded to let
> > choose the correct method.
> >
> 
> [1] - http://patchwork.ozlabs.org/cover/1090669/
> 
> > Signed-off-by: Peng Fan <peng.fan at nxp.com>
> > ---
> >  drivers/clk/clk.c | 8 ++++++++
> >  include/clk.h     | 9 +++++++++
> >  2 files changed, 17 insertions(+)
> >
> > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index
> > 0a0fffb50b..025bb99ecc 100644
> > --- a/drivers/clk/clk.c
> > +++ b/drivers/clk/clk.c
> > @@ -54,3 +54,11 @@ const char *clk_hw_get_name(const struct clk *hw)
> > {
> >  	return hw->dev->name;
> >  }
> > +
> > +bool clk_dev_binded(struct clk *clk)
> > +{
> > +	if (clk->dev && (clk->dev->flags & DM_FLAG_BOUND))
> > +		return true;
> > +
> > +	return false;
> > +}
> > diff --git a/include/clk.h b/include/clk.h index
> > a4ecca9fbc..8199119d01 100644
> > --- a/include/clk.h
> > +++ b/include/clk.h
> > @@ -337,4 +337,13 @@ static inline bool clk_valid(struct clk *clk)
> >   * @return zero on success, or -ENOENT on error
> >   */
> >  int clk_get_by_id(ulong id, struct clk **clkp);
> > +
> > +/**
> > + * clk_dev_binded() - Check whether the clk has a device binded
> > + *
> > + * @clk		A pointer to the clk
> > + *
> > + * @return true on binded, or false on no  */ bool
> > +clk_dev_binded(struct clk *clk);
> >  #endif
> 
> 
> 
> 
> 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 at denx.de


More information about the U-Boot mailing list