aboutsummaryrefslogtreecommitdiff
path: root/drivers/core/root.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/core/root.c')
-rw-r--r--drivers/core/root.c111
1 files changed, 32 insertions, 79 deletions
diff --git a/drivers/core/root.c b/drivers/core/root.c
index 5f10d7a39c..672aa7cea7 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -69,8 +69,8 @@ void fix_drivers(void)
entry->remove += gd->reloc_off;
if (entry->unbind)
entry->unbind += gd->reloc_off;
- if (entry->ofdata_to_platdata)
- entry->ofdata_to_platdata += gd->reloc_off;
+ if (entry->of_to_plat)
+ entry->of_to_plat += gd->reloc_off;
if (entry->child_post_bind)
entry->child_post_bind += gd->reloc_off;
if (entry->child_pre_probe)
@@ -123,8 +123,8 @@ void fix_devices(void)
struct driver_info *entry;
for (entry = dev; entry != dev + n_ents; entry++) {
- if (entry->platdata)
- entry->platdata += gd->reloc_off;
+ if (entry->plat)
+ entry->plat += gd->reloc_off;
}
}
@@ -147,12 +147,8 @@ int dm_init(bool of_live)
ret = device_bind_by_name(NULL, false, &root_info, &DM_ROOT_NON_CONST);
if (ret)
return ret;
-#if CONFIG_IS_ENABLED(OF_CONTROL)
- if (CONFIG_IS_ENABLED(OF_LIVE) && of_live)
- DM_ROOT_NON_CONST->node = np_to_ofnode(gd_of_root());
- else
- DM_ROOT_NON_CONST->node = offset_to_ofnode(0);
-#endif
+ if (CONFIG_IS_ENABLED(OF_CONTROL))
+ DM_ROOT_NON_CONST->node = ofnode_root();
ret = device_probe(DM_ROOT_NON_CONST);
if (ret)
return ret;
@@ -178,7 +174,7 @@ int dm_remove_devices_flags(uint flags)
}
#endif
-int dm_scan_platdata(bool pre_reloc_only)
+int dm_scan_plat(bool pre_reloc_only)
{
int ret;
@@ -203,33 +199,6 @@ int dm_scan_platdata(bool pre_reloc_only)
}
#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
-static int dm_scan_fdt_live(struct udevice *parent,
- const struct device_node *node_parent,
- bool pre_reloc_only)
-{
- struct device_node *np;
- int ret = 0, err;
-
- for (np = node_parent->child; np; np = np->sibling) {
-
- if (!of_device_is_available(np)) {
- pr_debug(" - ignoring disabled device\n");
- continue;
- }
- err = lists_bind_fdt(parent, np_to_ofnode(np), NULL,
- pre_reloc_only);
- if (err && !ret) {
- ret = err;
- debug("%s: ret=%d\n", np->name, ret);
- }
- }
-
- if (ret)
- dm_warn("Some drivers failed to bind\n");
-
- return ret;
-}
-
/**
* dm_scan_fdt_node() - Scan the device tree and bind drivers for a node
*
@@ -237,28 +206,30 @@ static int dm_scan_fdt_live(struct udevice *parent,
* for each one.
*
* @parent: Parent device for the devices that will be created
- * @blob: Pointer to device tree blob
- * @offset: Offset of node to scan
+ * @node: Node to scan
* @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
*/
-static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
- int offset, bool pre_reloc_only)
+static int dm_scan_fdt_node(struct udevice *parent, ofnode parent_node,
+ bool pre_reloc_only)
{
int ret = 0, err;
+ ofnode node;
+
+ if (!ofnode_valid(parent_node))
+ return 0;
- for (offset = fdt_first_subnode(blob, offset);
- offset > 0;
- offset = fdt_next_subnode(blob, offset)) {
- const char *node_name = fdt_get_name(blob, offset, NULL);
+ for (node = ofnode_first_subnode(parent_node);
+ ofnode_valid(node);
+ node = ofnode_next_subnode(node)) {
+ const char *node_name = ofnode_get_name(node);
- if (!fdtdec_get_is_enabled(blob, offset)) {
+ if (!ofnode_is_enabled(node)) {
pr_debug(" - ignoring disabled device\n");
continue;
}
- err = lists_bind_fdt(parent, offset_to_ofnode(offset), NULL,
- pre_reloc_only);
+ err = lists_bind_fdt(parent, node, NULL, pre_reloc_only);
if (err && !ret) {
ret = err;
debug("%s: ret=%d\n", node_name, ret);
@@ -273,43 +244,25 @@ static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
int dm_scan_fdt_dev(struct udevice *dev)
{
- if (!dev_of_valid(dev))
- return 0;
-
- if (of_live_active())
- return dm_scan_fdt_live(dev, dev_np(dev),
- gd->flags & GD_FLG_RELOC ? false : true);
-
- return dm_scan_fdt_node(dev, gd->fdt_blob, dev_of_offset(dev),
+ return dm_scan_fdt_node(dev, dev_ofnode(dev),
gd->flags & GD_FLG_RELOC ? false : true);
}
-int dm_scan_fdt(const void *blob, bool pre_reloc_only)
+int dm_scan_fdt(bool pre_reloc_only)
{
- if (of_live_active())
- return dm_scan_fdt_live(gd->dm_root, gd_of_root(),
- pre_reloc_only);
-
- return dm_scan_fdt_node(gd->dm_root, blob, 0, pre_reloc_only);
+ return dm_scan_fdt_node(gd->dm_root, ofnode_root(), pre_reloc_only);
}
-static int dm_scan_fdt_ofnode_path(const void *blob, const char *path,
- bool pre_reloc_only)
+static int dm_scan_fdt_ofnode_path(const char *path, bool pre_reloc_only)
{
ofnode node;
node = ofnode_path(path);
- if (!ofnode_valid(node))
- return 0;
-
- if (of_live_active())
- return dm_scan_fdt_live(gd->dm_root, node.np, pre_reloc_only);
- return dm_scan_fdt_node(gd->dm_root, blob, node.of_offset,
- pre_reloc_only);
+ return dm_scan_fdt_node(gd->dm_root, node, pre_reloc_only);
}
-int dm_extended_scan_fdt(const void *blob, bool pre_reloc_only)
+int dm_extended_scan(bool pre_reloc_only)
{
int ret, i;
const char * const nodes[] = {
@@ -318,7 +271,7 @@ int dm_extended_scan_fdt(const void *blob, bool pre_reloc_only)
"/firmware"
};
- ret = dm_scan_fdt(blob, pre_reloc_only);
+ ret = dm_scan_fdt(pre_reloc_only);
if (ret) {
debug("dm_scan_fdt() failed: %d\n", ret);
return ret;
@@ -326,7 +279,7 @@ int dm_extended_scan_fdt(const void *blob, bool pre_reloc_only)
/* Some nodes aren't devices themselves but may contain some */
for (i = 0; i < ARRAY_SIZE(nodes); i++) {
- ret = dm_scan_fdt_ofnode_path(blob, nodes[i], pre_reloc_only);
+ ret = dm_scan_fdt_ofnode_path(nodes[i], pre_reloc_only);
if (ret) {
debug("dm_scan_fdt() scan for %s failed: %d\n",
nodes[i], ret);
@@ -355,16 +308,16 @@ int dm_init_and_scan(bool pre_reloc_only)
debug("dm_init() failed: %d\n", ret);
return ret;
}
- ret = dm_scan_platdata(pre_reloc_only);
+ ret = dm_scan_plat(pre_reloc_only);
if (ret) {
- debug("dm_scan_platdata() failed: %d\n", ret);
+ debug("dm_scan_plat() failed: %d\n", ret);
return ret;
}
if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
- ret = dm_extended_scan_fdt(gd->fdt_blob, pre_reloc_only);
+ ret = dm_extended_scan(pre_reloc_only);
if (ret) {
- debug("dm_extended_scan_dt() failed: %d\n", ret);
+ debug("dm_extended_scan() failed: %d\n", ret);
return ret;
}
}