[PATCH 02/23] clk clkdev: Add clkdev matching based on physbase
Jean-Christophe PLAGNIOL-VILLARD
plagnioj at jcrosoft.com
Wed Sep 26 15:08:41 EDT 2012
On 19:25 Wed 26 Sep , Sascha Hauer wrote:
> On Wed, Sep 26, 2012 at 06:02:39PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > On 13:04 Mon 24 Sep , Sascha Hauer wrote:
> > > Most clock/device associations can be done based on the physical
> > > base address of the corresponding device. So instead of depending
> > > on string matching add an optional possibility to associate a clock
> > > lookups with physical addresses. This also has the advantage that
> > > the lookups for devicetree based devices can be identical to the
> > > platform based devices.
> > >
> > > Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
> > > ---
> > > drivers/clk/clkdev.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
> > > include/linux/clkdev.h | 3 +++
> > > 2 files changed, 50 insertions(+)
> > >
> > > diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
> > > index 717fea5..40bc006 100644
> > > --- a/drivers/clk/clkdev.c
> > > +++ b/drivers/clk/clkdev.c
> > > @@ -62,6 +62,32 @@ static struct clk *clk_find(const char *dev_id, const char *con_id)
> > > return clk;
> > > }
> > >
> > > +static struct clk *clk_find_physbase(struct device_d *dev, const char *con_id)
> > > +{
> > > + struct clk_lookup *p;
> > > + unsigned long start;
> > > +
> > > + if (!dev || !dev->resource)
> > > + return ERR_PTR(-ENOSYS);
> > this is broken
> >
> > clk_get_sys(NULL, "toto") is a valid call
>
> clk_get_sys never calls clk_find_physbase. clk_get(NULL, "toto") will
> call clk_find_physbase in which case clk_find_physbase returns -ENOSYS
> and clk_get falls back to clk_get_sys just as it did before.
I check one stuff
what will return the new clk_get for this
clk_get("dev0", "con0");
where we have
clkdev0 {
.devid = "dev0"
.physbase = 0x100
.clk =clk0
}
clkdev1 {
.devid = "dev0"
.conid = "con0"
.physbase = 0x100
.clk = clk1
}
clkdev2 {
.devid = "dev1"
.conid = "con0"
.clk =clk0
.physbase = 0x0
}
register in this order clkdev0 then clkdev1
it will return clkdev0
register in this order clkdev1 then clkdev0
it will return clkdev1
we need to manage the mach best as done in clk_get_sys
then we can nor register a dev with physbase at 0x0
valid on ARM
phybase need to be at ~0 for invalid
Best Regards,
J.
More information about the barebox
mailing list