mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Oleksij Rempel <o.rempel@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Oleksij Rempel <o.rempel@pengutronix.de>, david@protonic.nl
Subject: [PATCH v4 1/3] devinfo: do not dump the device node for the root node
Date: Mon, 20 Jul 2020 08:39:19 +0200	[thread overview]
Message-ID: <20200720063921.7547-2-o.rempel@pengutronix.de> (raw)
In-Reply-To: <20200720063921.7547-1-o.rempel@pengutronix.de>

Calling the devinfo against a device which is linked to some device tree
node will result a device tree dump of this node. For example:

barebox@Protonic PRTI6Q board:/ devinfo devinfo ldb.of
Bus: platform
Device node: /ldb
ldb {

        #address-cells = <0x1>;
        #size-cells = <0x0>;
        compatible = "fsl,imx6q-ldb", "fsl,imx53-ldb";
        gpr = <0x5>;
        status = "okay";
        clocks = <0x4 0x21 0x4 0x22 0x4 0x27 0x4 0x28 0x4 0x29 0x4 0x2a 0x4 0x87 0x4 0x88>;
        clock-names = "di0_pll", "di1_pll", "di0_sel", "di1_sel", "di2_sel", "di3_sel", "di0", "di1";
        lvds-channel@0 {
                #address-cells = <0x1>;
                #size-cells = <0x0>;
                reg = <0x0>;
                status = "okay";
                port@0 {
                        reg = <0x0>;
                        endpoint {
                                remote-endpoint = <0x6>;
                                phandle = <0x56>;
                        };
                };
                port@1 {
                        reg = <0x1>;
                        endpoint {
                                remote-endpoint = <0x7>;
                                phandle = <0x5a>;
                        };
                };
                port@2 {
                        reg = <0x2>;
                        endpoint {
                                remote-endpoint = <0x8>;
                                phandle = <0x60>;
                        };
                };
.........

Calling same command on a device which is linked to the root node of
device tree, for example "machine.of", will trigger a dump of complete
device tree. Since the same functionality is provided by the "of_dump"
command, it is better to limit devinfo to print only exactly requested
node, without printing the child nodes. After this patch we would get
following output:

barebox@Protonic PRTI6Q board:/ devinfo ldb.of
Bus: platform
Device node: /ldb
ldb {
        #address-cells = <0x1>;
        #size-cells = <0x0>;
        compatible = "fsl,imx6q-ldb", "fsl,imx53-ldb";
        gpr = <0x5>;
        status = "okay";
        clocks = <0x4 0x21 0x4 0x22 0x4 0x27 0x4 0x28 0x4 0x29 0x4 0x2a 0x4 0x87 0x4 0x88>;
        clock-names = "di0_pll", "di1_pll", "di0_sel", "di1_sel", "di2_sel", "di3_sel", "di0", "di1";
};

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 commands/devinfo.c |  2 +-
 drivers/of/base.c  | 20 ++++++++++++++------
 include/of.h       |  1 +
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/commands/devinfo.c b/commands/devinfo.c
index 81956b1cc0..7036545cdb 100644
--- a/commands/devinfo.c
+++ b/commands/devinfo.c
@@ -101,7 +101,7 @@ static int do_devinfo(int argc, char *argv[])
 #ifdef CONFIG_OFDEVICE
 		if (dev->device_node) {
 			printf("Device node: %s\n", dev->device_node->full_name);
-			of_print_nodes(dev->device_node, 0);
+			of_print_node(dev->device_node, 0);
 		}
 #endif
 	}
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 4c633bcd49..4754fcb98f 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -1793,7 +1793,8 @@ int of_property_read_string_helper(const struct device_node *np,
 	return i <= 0 ? -ENODATA : i;
 }
 
-static void __of_print_nodes(struct device_node *node, int indent, const char *prefix)
+static void __of_print_nodes(struct device_node *node, int indent,
+			     const char *prefix, bool single)
 {
 	struct device_node *n;
 	struct property *p;
@@ -1815,8 +1816,10 @@ static void __of_print_nodes(struct device_node *node, int indent, const char *p
 		printf(";\n");
 	}
 
-	list_for_each_entry(n, &node->children, parent_list) {
-		__of_print_nodes(n, indent + 1, prefix);
+	if (!single) {
+		list_for_each_entry(n, &node->children, parent_list) {
+			__of_print_nodes(n, indent + 1, prefix, false);
+		}
 	}
 
 	printf("%s%*s};\n", prefix, indent * 8, "");
@@ -1824,7 +1827,12 @@ static void __of_print_nodes(struct device_node *node, int indent, const char *p
 
 void of_print_nodes(struct device_node *node, int indent)
 {
-	__of_print_nodes(node, indent, NULL);
+	__of_print_nodes(node, indent, NULL, false);
+}
+
+void of_print_node(struct device_node *node, int indent)
+{
+	__of_print_nodes(node, indent, NULL, true);
 }
 
 static void __of_print_property(struct property *p, int indent)
@@ -1934,14 +1942,14 @@ void of_diff(struct device_node *a, struct device_node *b, int indent)
 			of_diff(ca, cb, indent + 1);
 		} else {
 			of_print_parents(a, &printed);
-			__of_print_nodes(ca, indent, "-");
+			__of_print_nodes(ca, indent, "-", false);
 		}
 	}
 
 	for_each_child_of_node(b, cb) {
 		if (!of_get_child_by_name(a, cb->name)) {
 			of_print_parents(a, &printed);
-			__of_print_nodes(cb, indent, "+");
+			__of_print_nodes(cb, indent, "+", false);
 		}
 	}
 
diff --git a/include/of.h b/include/of.h
index 08bbeaf4d2..820a8ea0ed 100644
--- a/include/of.h
+++ b/include/of.h
@@ -104,6 +104,7 @@ static inline const void *of_property_get_value(struct property *pp)
 void of_print_property(const void *data, int len);
 void of_print_cmdline(struct device_node *root);
 
+void of_print_node(struct device_node *node, int indent);
 void of_print_nodes(struct device_node *node, int indent);
 void of_diff(struct device_node *a, struct device_node *b, int indent);
 int of_probe(void);
-- 
2.27.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2020-07-20  6:39 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-20  6:39 [PATCH v4 0/3] introduce board-driver support Oleksij Rempel
2020-07-20  6:39 ` Oleksij Rempel [this message]
2020-07-20  8:35   ` [PATCH v4 1/3] devinfo: do not dump the device node for the root node Lucas Stach
2020-07-20  6:39 ` [PATCH v4 2/3] of: base: register DT root as device Oleksij Rempel
2020-08-11 14:24   ` Ahmad Fatoum
2020-07-20  6:39 ` [PATCH v4 3/3] ARM: embest-riotboard: port board file to the driver model Oleksij Rempel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200720063921.7547-2-o.rempel@pengutronix.de \
    --to=o.rempel@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=david@protonic.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox