[U-Boot] [PATCH v2 1/2] clk: clk-uclass: Add post binding for CLK uclass
Yang, Wenyou
Wenyou.Yang at atmel.com
Thu Jun 16 03:08:46 CEST 2016
> -----Original Message-----
> From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
> Sent: 2016年6月10日 8:34
> To: Yang, Wenyou <Wenyou.Yang at atmel.com>
> Cc: U-Boot Mailing List <u-boot at lists.denx.de>; Andreas Bießmann
> <andreas at biessmann.org>
> Subject: Re: [PATCH v2 1/2] clk: clk-uclass: Add post binding for CLK uclass
>
> Hi Wenyou,
>
> On 7 June 2016 at 01:11, Wenyou Yang <wenyou.yang at atmel.com> wrote:
> > Add post binding support for CLK uclass to recursively bind its
> > children as clk devices.
> >
> > Signed-off-by: Wenyou Yang <wenyou.yang at atmel.com>
> > ---
> >
> > Changes in v2: None
> >
> > drivers/clk/clk-uclass.c | 51
> > ++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 51 insertions(+)
>
>
> Can you please explain what this is for? We would normally call
> dm_scan_fdt_node() for this, but it seems that you are specifically to create
> drivers for things with no compatible strings.
Yes, for pheriph32ck node have a lot of child nodes with no compatible strings.
This patch purpose is to bind these children nodes. Otherwise these nodes will not be bound.
For example,
---8<----
ahb {
apb {
pmc: pmc at f0014000 {
[snip]
periph32ck {
compatible = "atmel,at91sam9x5-clk-peripheral";
#address-cells = <1>;
#size-cells = <0>;
clocks = <&h32ck>;
macb0_clk: macb0_clk {
#clock-cells = <0>;
reg = <5>;
atmel,clk-output-range = <0 83000000>;
};
[snip]
pioA_clk: pioA_clk {
#clock-cells = <0>;
reg = <18>;
atmel,clk-output-range = <0 83000000>;
};
[snip]
spi0_clk: spi0_clk {
#clock-cells = <0>;
reg = <33>;
atmel,clk-output-range = <0 83000000>;
};
[snip]
};
};
spi0: spi at f8000000 {
compatible = "atmel,at91rm9200-spi";
reg = <0xf8000000 0x100>;
clocks = <&spi0_clk>;
clock-names = "spi_clk";
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
macb0: ethernet at f8008000 {
compatible = "cdns,macb";
reg = <0xf8008000 0x1000>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&macb0_clk>, <&macb0_clk>;
clock-names = "hclk", "pclk";
status = "disabled";
};
[snip]
pioA: gpio at fc038000 {
compatible = "atmel,sama5d2-gpio";
reg = <0xfc038000 0x600>;
clocks = <&pioA_clk>;
gpio-controller;
#gpio-cells = <2>;
pinctrl {
compatible = "atmel,sama5d2-pinctrl";
};
};
};
};
---->8-----
>
> >
> > diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index
> > b483c1e..ee568e4 100644
> > --- a/drivers/clk/clk-uclass.c
> > +++ b/drivers/clk/clk-uclass.c
> > @@ -106,7 +106,58 @@ int clk_get_by_index(struct udevice *dev, int
> > index, struct udevice **clk_devp) } #endif
> >
> > +/**
> > + * clk_post-bind() - post binding for CLK uclass
> > + * Recursively bind its children as clk devices.
> > + *
> > + * @dev: clk device
> > + * @return: 0 on success, or negative error code on failure */
> > +static int clk_post_bind(struct udevice *dev) {
> > + const void *fdt = gd->fdt_blob;
> > + int offset = dev->of_offset;
> > + bool pre_reloc_only = !(gd->flags & GD_FLG_RELOC);
> > + const char *name;
> > + int ret;
> > +
> > + for (offset = fdt_first_subnode(fdt, offset);
> > + offset > 0;
> > + offset = fdt_next_subnode(fdt, offset)) {
> > + if (pre_reloc_only &&
> > + !fdt_getprop(fdt, offset, "u-boot,dm-pre-reloc", NULL))
> > + continue;
> > + /*
> > + * If this node has "compatible" property, this is not a clk
> > + * node, but a normal device. skip.
> > + */
> > + fdt_get_property(fdt, offset, "compatible", &ret);
> > + if (ret >= 0)
> > + continue;
> > +
> > + if (ret != -FDT_ERR_NOTFOUND)
> > + return ret;
> > +
> > + name = fdt_get_name(fdt, offset, NULL);
> > + if (!name)
> > + return -EINVAL;
> > +
> > + ret = device_bind_driver_to_node(dev, "clk", name,
> > + offset, NULL);
> > + if (ret)
> > + return ret;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > UCLASS_DRIVER(clk) = {
> > .id = UCLASS_CLK,
> > + .post_bind = clk_post_bind,
> > .name = "clk",
> > };
> > +
> > +U_BOOT_DRIVER(clk_generic) = {
> > + .id = UCLASS_CLK,
> > + .name = "clk",
> > +};
> > --
> > 2.7.4
> >
>
> Regards,
> Simon
More information about the U-Boot
mailing list