[U-Boot] [PATCH v2 1/2] dm: core: add clocks node scan

Simon Glass sjg at chromium.org
Sun Aug 13 21:35:31 UTC 2017


+Rob Clark who is doing a similar thing with the /chosen node

Hi Patrice,

On 8 August 2017 at 06:34,  <patrice.chotard at st.com> wrote:
> From: Patrice Chotard <patrice.chotard at st.com>
>
> Currently, all fixed-clock declared in "clocks" node in device tree
> can be binded by clk_fixed_rate.c driver only if each of them have
> the "simple-bus" compatible string.
> This constraint has been invoked here [1].
>
> This patch offers a solution to avoid adding "simple-bus" compatible
> string to nodes that are not busses.
>
> [1] https://patchwork.ozlabs.org/patch/558837/
>
> Signed-off-by: Patrice Chotard <patrice.chotard at st.com>
> ---
>
> v2: _ implement this feature in dm_extended_scan_dt() which can be called
>           from test/dm/test-main.c to insure that test scan DT clocks
>           sub-nodes
>         _ replace fdt_path_offset() by ofnode_path()
>
>  drivers/core/root.c | 34 ++++++++++++++++++++++++++++++++--
>  include/dm/root.h   | 14 ++++++++++++++
>  2 files changed, 46 insertions(+), 2 deletions(-)

This looks good but please add a sandbox test to test/dm/clk.c

>
> diff --git a/drivers/core/root.c b/drivers/core/root.c
> index d691d6f..748ef9c 100644
> --- a/drivers/core/root.c
> +++ b/drivers/core/root.c
> @@ -312,8 +312,38 @@ int dm_scan_fdt(const void *blob, bool pre_reloc_only)
>  #endif
>         return dm_scan_fdt_node(gd->dm_root, blob, 0, pre_reloc_only);
>  }
> +#else
> +static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
> +                           int offset, bool pre_reloc_only)
> +{
> +       return 0;
> +}
>  #endif
>
> +int dm_extended_scan_dt(const void *blob, bool pre_reloc_only)
> +{
> +       int node, ret;
> +
> +       ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only);
> +       if (ret) {
> +               debug("dm_scan_fdt() failed: %d\n", ret);
> +               return ret;
> +       }
> +
> +       /* bind fixed-clock */
> +       node = ofnode_to_offset(ofnode_path("/clocks"));
> +       /* if no DT "clocks" node, no need to go further */
> +       if (node < 0)
> +               return ret;
> +
> +       ret = dm_scan_fdt_node(gd->dm_root, gd->fdt_blob, node,
> +                              pre_reloc_only);
> +       if (ret)
> +               debug("dm_scan_fdt_node() failed: %d\n", ret);
> +
> +       return ret;
> +}
> +
>  __weak int dm_scan_other(bool pre_reloc_only)
>  {
>         return 0;
> @@ -335,9 +365,9 @@ int dm_init_and_scan(bool pre_reloc_only)
>         }
>
>         if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
> -               ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only);
> +               ret = dm_extended_scan_dt(gd->fdt_blob, pre_reloc_only);
>                 if (ret) {
> -                       debug("dm_scan_fdt() failed: %d\n", ret);
> +                       debug("dm_extended_scan_dt() failed: %d\n", ret);
>                         return ret;
>                 }
>         }
> diff --git a/include/dm/root.h b/include/dm/root.h
> index 50a6011..3426830 100644
> --- a/include/dm/root.h
> +++ b/include/dm/root.h
> @@ -56,6 +56,20 @@ int dm_scan_platdata(bool pre_reloc_only);
>  int dm_scan_fdt(const void *blob, bool pre_reloc_only);
>
>  /**
> + * dm_extended_scan_dt() - Scan the device tree and bind drivers

For consistency dm_extended_scan_fdt()

> + *
> + * This scans the device tree and creates a driver for each node.
> + * the top-level subnodes are examined and also all sub-nodes of "clocks"
> + * node

Should mention that this calls dm_scan_fdt()

> + *
> + * @blob: Pointer to device tree blob
> + * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC
> + * flag. If false bind all drivers.
> + * @return 0 if OK, -ve on error
> + */
> +int dm_extended_scan_dt(const void *blob, bool pre_reloc_only);
> +
> +/**
>   * dm_scan_other() - Scan for other devices
>   *
>   * Some devices may not be visible to Driver Model. This weak function can
> --
> 1.9.1
>

Regards,
Simon


More information about the U-Boot mailing list