From: Eugen Hristev Date: Tue, 2 Feb 2021 08:47:58 +0000 (+0200) Subject: clk: at91: compat: partially revert "dm: Remove uses of device_bind_offset()" X-Git-Url: http://git.dujemihanovic.xyz/img/%7B%7B%20%24image.RelPermalink%20%7D%7D?a=commitdiff_plain;h=65bde1c087f847a2e279501e27eeaddba16e3b51;p=u-boot.git clk: at91: compat: partially revert "dm: Remove uses of device_bind_offset()" Revert changes in at91 compat.c that cause u-boot to fail booting on sama5d4_xplained and sama5d2_xplained Log below: No serial driver found Could not initialize timer (err -19) Could not initialize timer (err -19) Could not initialize timer (err -19) Could not initialize timer (err -19) Could not initialize timer (err -19) Could not initialize timer (err -19) Could not initialize timer (err -19) Could not initialize timer (err -19) Fixes: a2703ce10c ("dm: Remove uses of device_bind_offset()") Cc: Simon Glass Signed-off-by: Eugen Hristev Reviewed-by: Simon Glass --- diff --git a/drivers/clk/at91/compat.c b/drivers/clk/at91/compat.c index e514f26656..dfdc3a6a92 100644 --- a/drivers/clk/at91/compat.c +++ b/drivers/clk/at91/compat.c @@ -62,30 +62,34 @@ static int at91_pmc_core_probe(struct udevice *dev) */ int at91_clk_sub_device_bind(struct udevice *dev, const char *drv_name) { - ofnode parent = dev_ofnode(dev); - ofnode node; + const void *fdt = gd->fdt_blob; + int offset = dev_of_offset(dev); bool pre_reloc_only = !(gd->flags & GD_FLG_RELOC); const char *name; int ret; - ofnode_for_each_subnode(node, parent) { - if (pre_reloc_only && !ofnode_pre_reloc(node)) + for (offset = fdt_first_subnode(fdt, offset); + offset > 0; + offset = fdt_next_subnode(fdt, offset)) { + if (pre_reloc_only && + !ofnode_pre_reloc(offset_to_ofnode(offset))) continue; /* * If this node has "compatible" property, this is not * a clock sub-node, but a normal device. skip. */ - if (ofnode_read_prop(node, "compatible", NULL)) + fdt_get_property(fdt, offset, "compatible", &ret); + if (ret >= 0) continue; if (ret != -FDT_ERR_NOTFOUND) return ret; - name = ofnode_get_name(node); + name = fdt_get_name(fdt, offset, NULL); if (!name) return -EINVAL; - ret = device_bind_driver_to_node(dev, drv_name, name, node, - NULL); + ret = device_bind_driver_to_node(dev, drv_name, name, + offset_to_ofnode(offset), NULL); if (ret) return ret; }