mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
dm: core: Update lists_bind_fdt() to use ofnode
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@chromium.org>
This commit is contained in:
parent
396e343b3d
commit
f5b5719cdf
5 changed files with 14 additions and 13 deletions
|
@ -126,8 +126,7 @@ static int driver_check_compatible(const struct udevice_id *of_match,
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
|
int lists_bind_fdt(struct udevice *parent, ofnode node, struct udevice **devp)
|
||||||
struct udevice **devp)
|
|
||||||
{
|
{
|
||||||
struct driver *driver = ll_entry_start(struct driver, driver);
|
struct driver *driver = ll_entry_start(struct driver, driver);
|
||||||
const int n_ents = ll_entry_count(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)
|
if (devp)
|
||||||
*devp = NULL;
|
*devp = NULL;
|
||||||
name = fdt_get_name(blob, offset, NULL);
|
name = ofnode_get_name(node);
|
||||||
dm_dbg("bind node %s\n", name);
|
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_list) {
|
||||||
if (compat_length == -FDT_ERR_NOTFOUND) {
|
if (compat_length == -FDT_ERR_NOTFOUND) {
|
||||||
dm_dbg("Device '%s' has no compatible string\n", name);
|
dm_dbg("Device '%s' has no compatible string\n", name);
|
||||||
return 0;
|
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;
|
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);
|
dm_dbg(" - found match at '%s'\n", entry->name);
|
||||||
ret = device_bind_with_driver_data(parent, 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) {
|
if (ret == -ENODEV) {
|
||||||
dm_dbg("Driver '%s' refuses to bind\n", entry->name);
|
dm_dbg("Driver '%s' refuses to bind\n", entry->name);
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -235,7 +235,7 @@ static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
|
||||||
dm_dbg(" - ignoring disabled device\n");
|
dm_dbg(" - ignoring disabled device\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
err = lists_bind_fdt(parent, blob, offset, NULL);
|
err = lists_bind_fdt(parent, offset_to_ofnode(offset), NULL);
|
||||||
if (err && !ret) {
|
if (err && !ret) {
|
||||||
ret = err;
|
ret = err;
|
||||||
debug("%s: ret=%d\n", fdt_get_name(blob, offset, NULL),
|
debug("%s: ret=%d\n", fdt_get_name(blob, offset, NULL),
|
||||||
|
|
|
@ -74,7 +74,8 @@ static void serial_find_console_or_panic(void)
|
||||||
* bind it anyway.
|
* bind it anyway.
|
||||||
*/
|
*/
|
||||||
if (node > 0 &&
|
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)) {
|
if (!device_probe(dev)) {
|
||||||
gd->cur_serial_dev = dev;
|
gd->cur_serial_dev = dev;
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -103,7 +103,8 @@ int notrace dm_timer_init(void)
|
||||||
* relocation, bind it anyway.
|
* relocation, bind it anyway.
|
||||||
*/
|
*/
|
||||||
if (node > 0 &&
|
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);
|
ret = device_probe(dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#ifndef _DM_LISTS_H_
|
#ifndef _DM_LISTS_H_
|
||||||
#define _DM_LISTS_H_
|
#define _DM_LISTS_H_
|
||||||
|
|
||||||
|
#include <dm/ofnode.h>
|
||||||
#include <dm/uclass-id.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 as its parent.
|
||||||
*
|
*
|
||||||
* @parent: parent device (root)
|
* @parent: parent device (root)
|
||||||
* @blob: device tree blob
|
* @node: device tree node to bind
|
||||||
* @offset: offset of this device tree node
|
|
||||||
* @devp: if non-NULL, returns a pointer to the bound device
|
* @devp: if non-NULL, returns a pointer to the bound device
|
||||||
* @return 0 if device was bound, -EINVAL if the device tree is invalid,
|
* @return 0 if device was bound, -EINVAL if the device tree is invalid,
|
||||||
* other -ve value on error
|
* other -ve value on error
|
||||||
*/
|
*/
|
||||||
int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
|
int lists_bind_fdt(struct udevice *parent, ofnode node, struct udevice **devp);
|
||||||
struct udevice **devp);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* device_bind_driver() - bind a device to a driver
|
* device_bind_driver() - bind a device to a driver
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue