[U-Boot] [PATCH v3 0/2] dm: core: add clocks node scan

From: Patrice Chotard patrice.chotard@st.com
v3: _ rename dm_extended_scan_dt() to dm_extended_scan_fdt() to insure function naming consistency _ update dm_extended_scan_fdt() description
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() _ update sandbox dedicated test
Patrice Chotard (2): dm: core: add clocks node scan dm: test: replace dm_scan_dt() by of dm_extended_scan_fdt() in dm_do_test
arch/sandbox/dts/test.dts | 10 ++++++---- drivers/core/root.c | 34 ++++++++++++++++++++++++++++++++-- include/dm/root.h | 14 ++++++++++++++ test/dm/test-main.c | 2 +- 4 files changed, 53 insertions(+), 7 deletions(-)

From: Patrice Chotard patrice.chotard@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@st.com ---
v3: _ rename dm_extended_scan_dt() to dm_extended_scan_fdt() to insure function naming consistency _ update dm_extended_scan_fdt() description
drivers/core/root.c | 34 ++++++++++++++++++++++++++++++++-- include/dm/root.h | 14 ++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/drivers/core/root.c b/drivers/core/root.c index d691d6f..757d109 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_fdt(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_fdt(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..b075eef 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_fdt() - Scan the device tree and bind drivers + * + * This calls dm_scna_dft() which 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. + * + * @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_fdt(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

On 4 September 2017 at 06:55, patrice.chotard@st.com wrote:
From: Patrice Chotard patrice.chotard@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@st.com
v3: _ rename dm_extended_scan_dt() to dm_extended_scan_fdt() to insure function naming consistency _ update dm_extended_scan_fdt() description
drivers/core/root.c | 34 ++++++++++++++++++++++++++++++++-- include/dm/root.h | 14 ++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org

On 4 September 2017 at 06:55, patrice.chotard@st.com wrote:
From: Patrice Chotard patrice.chotard@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@st.com
v3: _ rename dm_extended_scan_dt() to dm_extended_scan_fdt() to insure function naming consistency _ update dm_extended_scan_fdt() description
drivers/core/root.c | 34 ++++++++++++++++++++++++++++++++-- include/dm/root.h | 14 ++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot-dm, thanks!

From: Patrice Chotard patrice.chotard@st.com
This allows to scan the DT including all "clocks" node's sub-nodes in which fixed-clock are defined. All fixed-clock should be defined inside a clocks node which collect all external oscillators. Until now, all clocks sub-nodes can't be binded except if the "simple-bus" compatible string is added which is a hack.
Update test.dts by moving clk_fixed node inside clocks.
Signed-off-by: Patrice Chotard patrice.chotard@st.com Reviewed-by: Simon Glass sjg@chromium.org ---
arch/sandbox/dts/test.dts | 10 ++++++---- test/dm/test-main.c | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index 65b2f8e..e67d428 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -127,10 +127,12 @@ compatible = "denx,u-boot-fdt-test"; };
- clk_fixed: clk-fixed { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <1234>; + clocks { + clk_fixed: clk-fixed { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <1234>; + }; };
clk_sandbox: clk-sbox { diff --git a/test/dm/test-main.c b/test/dm/test-main.c index 9d88d31..4478e6b 100644 --- a/test/dm/test-main.c +++ b/test/dm/test-main.c @@ -92,7 +92,7 @@ static int dm_do_test(struct unit_test_state *uts, struct unit_test *test, if (test->flags & DM_TESTF_PROBE_TEST) ut_assertok(do_autoprobe(uts)); if (test->flags & DM_TESTF_SCAN_FDT) - ut_assertok(dm_scan_fdt(gd->fdt_blob, false)); + ut_assertok(dm_extended_scan_fdt(gd->fdt_blob, false));
/* * Silence the console and rely on console reocrding to get

On 4 September 2017 at 06:55, patrice.chotard@st.com wrote:
From: Patrice Chotard patrice.chotard@st.com
This allows to scan the DT including all "clocks" node's sub-nodes in which fixed-clock are defined. All fixed-clock should be defined inside a clocks node which collect all external oscillators. Until now, all clocks sub-nodes can't be binded except if the "simple-bus" compatible string is added which is a hack.
Update test.dts by moving clk_fixed node inside clocks.
Signed-off-by: Patrice Chotard patrice.chotard@st.com Reviewed-by: Simon Glass sjg@chromium.org
arch/sandbox/dts/test.dts | 10 ++++++---- test/dm/test-main.c | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org

On 4 September 2017 at 06:55, patrice.chotard@st.com wrote:
From: Patrice Chotard patrice.chotard@st.com
This allows to scan the DT including all "clocks" node's sub-nodes in which fixed-clock are defined. All fixed-clock should be defined inside a clocks node which collect all external oscillators. Until now, all clocks sub-nodes can't be binded except if the "simple-bus" compatible string is added which is a hack.
Update test.dts by moving clk_fixed node inside clocks.
Signed-off-by: Patrice Chotard patrice.chotard@st.com Reviewed-by: Simon Glass sjg@chromium.org
arch/sandbox/dts/test.dts | 10 ++++++---- test/dm/test-main.c | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot-dm, thanks!
participants (3)
-
patrice.chotard@st.com
-
Simon Glass
-
sjg@google.com