[U-Boot] [PATCH v2] MPC8260: fixup device tree by property instead of path

cpu/mpc8260/cpu.c used to use do_fixup_by_path_u32() to update the clock frequencies in the device tree, using a CPU path "/cpus/OF_CPU", with OF_CPU beind defined in the board config file.
However, this does not work when one board config file (here: MPC8260ADS.h) is intended to be used for several diffrent CPUs and therefor contains a generic definition like "cpu@0", as the device trees that will then be loaded will contain specific names like "PowerPC,8272@0".
We switch to using do_fixup_by_prop_u32() instead, so we can search for device_type="cpu", as it is done in other architectures, too.
Signed-off-by: Wolfgang Denk wd@denx.de Cc: Heiko Schocher hs@denx.de --- v2: Fix typo in Heiko's name.
Heiko, could you please test if this works with mgcoge, too?
cpu/mpc8260/cpu.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/cpu/mpc8260/cpu.c b/cpu/mpc8260/cpu.c index d4622ca..17e6248 100644 --- a/cpu/mpc8260/cpu.c +++ b/cpu/mpc8260/cpu.c @@ -304,8 +304,6 @@ void watchdog_reset (void) #if defined(CONFIG_OF_LIBFDT) && defined (CONFIG_OF_BOARD_SETUP) void ft_cpu_setup (void *blob, bd_t *bd) { - char * cpu_path = "/cpus/" OF_CPU; - #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\ defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) fdt_fixup_ethernet(blob); @@ -314,9 +312,12 @@ void ft_cpu_setup (void *blob, bd_t *bd) do_fixup_by_compat_u32(blob, "fsl,cpm2-brg", "clock-frequency", bd->bi_brgfreq, 1);
- do_fixup_by_path_u32(blob, cpu_path, "bus-frequency", bd->bi_busfreq, 1); - do_fixup_by_path_u32(blob, cpu_path, "timebase-frequency", OF_TBCLK, 1); - do_fixup_by_path_u32(blob, cpu_path, "clock-frequency", bd->bi_intfreq, 1); + do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, + "bus-frequency", bd->bi_busfreq, 1); + do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, + "timebase-frequency", OF_TBCLK, 1); + do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, + "clock-frequency", bd->bi_intfreq, 1); } #endif /* CONFIG_OF_LIBFDT */

Hello Wolfgang,
Wolfgang Denk wrote:
cpu/mpc8260/cpu.c used to use do_fixup_by_path_u32() to update the clock frequencies in the device tree, using a CPU path "/cpus/OF_CPU", with OF_CPU beind defined in the board config file.
However, this does not work when one board config file (here: MPC8260ADS.h) is intended to be used for several diffrent CPUs and therefor contains a generic definition like "cpu@0", as the device trees that will then be loaded will contain specific names like "PowerPC,8272@0".
We switch to using do_fixup_by_prop_u32() instead, so we can search for device_type="cpu", as it is done in other architectures, too.
Signed-off-by: Wolfgang Denk wd@denx.de Cc: Heiko Schocher hs@denx.de
v2: Fix typo in Heiko's name.
Heiko, could you please test if this works with mgcoge, too?
It works fine on the mgcoge:
=> tftp 400000 mgcoge/mgcoge.dtb-hs Using SCC ETHERNET device TFTP from server 192.168.1.1; our IP address is 192.168.20.3 Filename 'mgcoge/mgcoge.dtb-hs'. Load address: 0x400000 Loading: # done Bytes transferred = 6000 (1770 hex) => fdt addr 400000 => fdt print [...] cpus { #address-cells = <0x1>; #size-cells = <0x0>; PowerPC,8247@0 { device_type = "cpu"; reg = <0x0>; d-cache-line-size = <0x20>; i-cache-line-size = <0x20>; d-cache-size = <0x4000>; i-cache-size = <0x4000>; timebase-frequency = <0x0>; clock-frequency = <0x0>; bus-frequency = <0x0>; };
=> fdt board => fdt print /cpus cpus { #address-cells = <0x1>; #size-cells = <0x0>; PowerPC,8247@0 { device_type = "cpu"; reg = <0x0>; d-cache-line-size = <0x20>; i-cache-line-size = <0x20>; d-cache-size = <0x4000>; i-cache-size = <0x4000>; timebase-frequency = <0xfbc520>; clock-frequency = <0xbcd3d80>; bus-frequency = <0x3ef1480>; }; }; =>
Also Linux boots fine :-) so this patch looks good to me, so:
Acked-by: Heiko Schocherhs@denx.de
bye Heiko

Hi Heiko,
Acked-by: Heiko Schocherhs@denx.de
Apart from fixing the inverse whitespace problemn, am I correct that strictly speaking we should now also add the following?
Tested-by: Heiko Schocher hs@denx.de
Cheers Detlev

Hello Detlev,
Detlev Zundel wrote:
Acked-by: Heiko Schocherhs@denx.de
Apart from fixing the inverse whitespace problemn, am I correct that strictly speaking we should now also add the following?
Tested-by: Heiko Schocher hs@denx.de
Ah, you are right.
bye Heiko

In message 1242134255-7295-1-git-send-email-wd@denx.de you wrote:
cpu/mpc8260/cpu.c used to use do_fixup_by_path_u32() to update the clock frequencies in the device tree, using a CPU path "/cpus/OF_CPU", with OF_CPU beind defined in the board config file.
However, this does not work when one board config file (here: MPC8260ADS.h) is intended to be used for several diffrent CPUs and therefor contains a generic definition like "cpu@0", as the device trees that will then be loaded will contain specific names like "PowerPC,8272@0".
We switch to using do_fixup_by_prop_u32() instead, so we can search for device_type="cpu", as it is done in other architectures, too.
Signed-off-by: Wolfgang Denk wd@denx.de Cc: Heiko Schocher hs@denx.de
v2: Fix typo in Heiko's name.
Heiko, could you please test if this works with mgcoge, too?
cpu/mpc8260/cpu.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-)
Applied.
Wolfgang Denk
participants (3)
-
Detlev Zundel
-
Heiko Schocher
-
Wolfgang Denk