Currently Barebox fails to boot a kernel/devicetree pair on PowerPC. With of_find_node_by_path() the framework uses a global variable to find the root node and fails. With of_find_node_by_path_from() and forwarding the 'root' parameter it works again as expected. This fixes the following error message at run-time: Loading U-Boot uImage '/tmp/tftpcmd/kernel' Loading devicetree from '/tmp/tftpcmd/oftree' bootm: No devicetree given. handler failed with: Invalid argument Signed-off-by: Juergen Borleis <jbe@xxxxxxxxxxxxxx> --- arch/ppc/mach-mpc5xxx/cpu.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/arch/ppc/mach-mpc5xxx/cpu.c b/arch/ppc/mach-mpc5xxx/cpu.c index c860e70..a53af63 100644 --- a/arch/ppc/mach-mpc5xxx/cpu.c +++ b/arch/ppc/mach-mpc5xxx/cpu.c @@ -83,17 +83,21 @@ static int of_mpc5200_fixup(struct device_node *root, void *unused) int div = in_8((void*)CFG_MBAR + 0x204) & 0x0020 ? 8 : 4; - node = of_find_node_by_path("/cpus/PowerPC,5200@0"); - if (!node) + node = of_find_node_by_path_from(root, "/cpus/PowerPC,5200@0"); + if (!node) { + pr_err("Cannot find node '/cpus/PowerPC,5200@0' for proper CPU frequency fixup\n"); return -EINVAL; + } of_property_write_u32(node, "timebase-frequency", get_timebase_clock()); of_property_write_u32(node, "bus-frequency", get_bus_clock()); of_property_write_u32(node, "clock-frequency", get_cpu_clock()); - node = of_find_node_by_path("/soc5200@f0000000"); - if (!node) + node = of_find_node_by_path_from(root, "/soc5200@f0000000"); + if (!node) { + pr_err("Cannot find node '/soc5200@f0000000' for proper SOC frequency fixup\n"); return -EINVAL; + } of_property_write_u32(node, "bus-frequency", get_ipb_clock()); of_property_write_u32(node, "system-frequency", get_bus_clock() * div); -- 2.1.4 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox