[U-Boot] [PATCH v2 16/71] dm: core: Update lists_bind_fdt() to use ofnode

Simon Glass sjg at chromium.org
Wed May 10 14:20:55 UTC 2017


Adjust this function to use an ofnode instead of an offset, so it can be
used with livetree. This involves updating all callers.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

Changes in v2: None

 drivers/core/lists.c           | 12 ++++++------
 drivers/core/root.c            |  2 +-
 drivers/serial/serial-uclass.c |  3 ++-
 drivers/timer/timer-uclass.c   |  3 ++-
 include/dm/lists.h             |  7 +++----
 5 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/drivers/core/lists.c b/drivers/core/lists.c
index 9adfa758bc..facf276474 100644
--- a/drivers/core/lists.c
+++ b/drivers/core/lists.c
@@ -126,8 +126,7 @@ static int driver_check_compatible(const struct udevice_id *of_match,
 	return -ENOENT;
 }
 
-int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
-		   struct udevice **devp)
+int lists_bind_fdt(struct udevice *parent, ofnode node, struct udevice **devp)
 {
 	struct driver *driver = ll_entry_start(struct driver, driver);
 	const int n_ents = ll_entry_count(struct driver, driver);
@@ -142,17 +141,18 @@ int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
 
 	if (devp)
 		*devp = NULL;
-	name = fdt_get_name(blob, offset, NULL);
+	name = ofnode_get_name(node);
 	dm_dbg("bind node %s\n", name);
 
-	compat_list = fdt_getprop(blob, offset, "compatible", &compat_length);
+	compat_list = (const char *)ofnode_read_prop(node, "compatible",
+						     &compat_length);
 	if (!compat_list) {
 		if (compat_length == -FDT_ERR_NOTFOUND) {
 			dm_dbg("Device '%s' has no compatible string\n", name);
 			return 0;
 		}
 
-		dm_warn("Device tree error at offset %d\n", offset);
+		dm_warn("Device tree error at node '%s'\n", name);
 		return compat_length;
 	}
 
@@ -177,7 +177,7 @@ int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
 
 		dm_dbg("   - found match at '%s'\n", entry->name);
 		ret = device_bind_with_driver_data(parent, entry, name,
-				id->data, offset_to_ofnode(offset), &dev);
+						   id->data, node, &dev);
 		if (ret == -ENODEV) {
 			dm_dbg("Driver '%s' refuses to bind\n", entry->name);
 			continue;
diff --git a/drivers/core/root.c b/drivers/core/root.c
index 570b4d855f..0c00a4e051 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -235,7 +235,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, blob, offset, NULL);
+		err = lists_bind_fdt(parent, offset_to_ofnode(offset), NULL);
 		if (err && !ret) {
 			ret = err;
 			debug("%s: ret=%d\n", fdt_get_name(blob, offset, NULL),
diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
index 43c028ebe6..877398ebcd 100644
--- a/drivers/serial/serial-uclass.c
+++ b/drivers/serial/serial-uclass.c
@@ -74,7 +74,8 @@ static void serial_find_console_or_panic(void)
 		 * bind it anyway.
 		 */
 		if (node > 0 &&
-		    !lists_bind_fdt(gd->dm_root, blob, node, &dev)) {
+		    !lists_bind_fdt(gd->dm_root, offset_to_ofnode(node),
+				    &dev)) {
 			if (!device_probe(dev)) {
 				gd->cur_serial_dev = dev;
 				return;
diff --git a/drivers/timer/timer-uclass.c b/drivers/timer/timer-uclass.c
index 1caf3cd288..ec10b28288 100644
--- a/drivers/timer/timer-uclass.c
+++ b/drivers/timer/timer-uclass.c
@@ -103,7 +103,8 @@ int notrace dm_timer_init(void)
 			 * relocation, bind it anyway.
 			 */
 			if (node > 0 &&
-			    !lists_bind_fdt(gd->dm_root, blob, node, &dev)) {
+			    !lists_bind_fdt(gd->dm_root, offset_to_ofnode(node),
+					    &dev)) {
 				ret = device_probe(dev);
 				if (ret)
 					return ret;
diff --git a/include/dm/lists.h b/include/dm/lists.h
index 4513d6a311..f55c41991b 100644
--- a/include/dm/lists.h
+++ b/include/dm/lists.h
@@ -10,6 +10,7 @@
 #ifndef _DM_LISTS_H_
 #define _DM_LISTS_H_
 
+#include <dm/ofnode.h>
 #include <dm/uclass-id.h>
 
 /**
@@ -51,14 +52,12 @@ int lists_bind_drivers(struct udevice *parent, bool pre_reloc_only);
  * @parent as its parent.
  *
  * @parent: parent device (root)
- * @blob: device tree blob
- * @offset: offset of this device tree node
+ * @node: device tree node to bind
  * @devp: if non-NULL, returns a pointer to the bound device
  * @return 0 if device was bound, -EINVAL if the device tree is invalid,
  * other -ve value on error
  */
-int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
-		   struct udevice **devp);
+int lists_bind_fdt(struct udevice *parent, ofnode node, struct udevice **devp);
 
 /**
  * device_bind_driver() - bind a device to a driver
-- 
2.13.0.rc2.291.g57267f2277-goog



More information about the U-Boot mailing list