diff mbox

[U-Boot,1/3] dm: core: also parse chosen node

Message ID 20170803164705.10591-1-robdclark@gmail.com
State Deferred
Delegated to: Anatolij Gustschin
Headers show

Commit Message

Rob Clark Aug. 3, 2017, 4:46 p.m. UTC
This is the node that would contain, for example, the framebuffer setup
by an earlier stage.

Signed-off-by: Rob Clark <robdclark@gmail.com>
---
 drivers/core/root.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

Comments

Simon Glass Aug. 6, 2017, 5:16 a.m. UTC | #1
Hi Rob,

On 3 August 2017 at 10:46, Rob Clark <robdclark@gmail.com> wrote:
> This is the node that would contain, for example, the framebuffer setup
> by an earlier stage.
>
> Signed-off-by: Rob Clark <robdclark@gmail.com>
> ---
>  drivers/core/root.c | 22 +++++++++++++++++++++-
>  1 file changed, 21 insertions(+), 1 deletion(-)

Please can you add one to test.dts and add a sandbox test for it?

>
> diff --git a/drivers/core/root.c b/drivers/core/root.c
> index d691d6ff94..5e6b2da248 100644
> --- a/drivers/core/root.c
> +++ b/drivers/core/root.c
> @@ -266,6 +266,26 @@ static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
>         for (offset = fdt_first_subnode(blob, offset);
>              offset > 0;
>              offset = fdt_next_subnode(blob, offset)) {
> +               ofnode node = offset_to_ofnode(offset);
> +
> +               /* "chosen" node isn't a device itself but may contain some: */
> +               if (strcmp(ofnode_get_name(node), "chosen") == 0) {

!strcmp()

> +                       dm_dbg("parsing subnodes of \"chosen\"\n");
> +
> +                       for (node = ofnode_first_subnode(node);
> +                            ofnode_valid(node);
> +                            node = ofnode_next_subnode(node)) {
> +                               dm_dbg("subnode: %s\n", ofnode_get_name(node));
> +                               err = lists_bind_fdt(parent, node, NULL);
> +                               if (err && !ret) {
> +                                       ret = err;
> +                                       dm_dbg("%s: ret=%d\n", ofnode_get_name(node), ret);
> +                               }
> +                       }
> +
> +                       continue;
> +               }
> +
>                 if (pre_reloc_only &&
>                     !dm_fdt_pre_reloc(blob, offset))
>                         continue;
> @@ -273,7 +293,7 @@ static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
>                         dm_dbg("   - ignoring disabled device\n");
>                         continue;
>                 }
> -               err = lists_bind_fdt(parent, offset_to_ofnode(offset), NULL);
> +               err = lists_bind_fdt(parent, node, NULL);
>                 if (err && !ret) {
>                         ret = err;
>                         debug("%s: ret=%d\n", fdt_get_name(blob, offset, NULL),
> --
> 2.13.0
>

Regards,
Simon
diff mbox

Patch

diff --git a/drivers/core/root.c b/drivers/core/root.c
index d691d6ff94..5e6b2da248 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -266,6 +266,26 @@  static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
 	for (offset = fdt_first_subnode(blob, offset);
 	     offset > 0;
 	     offset = fdt_next_subnode(blob, offset)) {
+		ofnode node = offset_to_ofnode(offset);
+
+		/* "chosen" node isn't a device itself but may contain some: */
+		if (strcmp(ofnode_get_name(node), "chosen") == 0) {
+			dm_dbg("parsing subnodes of \"chosen\"\n");
+
+			for (node = ofnode_first_subnode(node);
+			     ofnode_valid(node);
+			     node = ofnode_next_subnode(node)) {
+				dm_dbg("subnode: %s\n", ofnode_get_name(node));
+				err = lists_bind_fdt(parent, node, NULL);
+				if (err && !ret) {
+					ret = err;
+					dm_dbg("%s: ret=%d\n", ofnode_get_name(node), ret);
+				}
+			}
+
+			continue;
+		}
+
 		if (pre_reloc_only &&
 		    !dm_fdt_pre_reloc(blob, offset))
 			continue;
@@ -273,7 +293,7 @@  static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
 			dm_dbg("   - ignoring disabled device\n");
 			continue;
 		}
-		err = lists_bind_fdt(parent, offset_to_ofnode(offset), NULL);
+		err = lists_bind_fdt(parent, node, NULL);
 		if (err && !ret) {
 			ret = err;
 			debug("%s: ret=%d\n", fdt_get_name(blob, offset, NULL),