Add secondary CPUs processor frequency for e500 core
[kernel/u-boot.git] / cpu / mpc85xx / fdt.c
index 69fab99..1fae47c 100644 (file)
@@ -213,6 +213,10 @@ void fdt_add_enet_stashing(void *fdt)
 
 void ft_cpu_setup(void *blob, bd_t *bd)
 {
+       int off;
+       int val;
+       sys_info_t sysinfo;
+
        /* delete crypto node if not on an E-processor */
        if (!IS_E_PROCESSOR(get_svr()))
                fdt_fixup_crypto_node(blob, 0);
@@ -228,8 +232,15 @@ void ft_cpu_setup(void *blob, bd_t *bd)
                "timebase-frequency", bd->bi_busfreq / 8, 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,
-               "clock-frequency", bd->bi_intfreq, 1);
+       get_sys_info(&sysinfo);
+       off = fdt_node_offset_by_prop_value(blob, -1, "device_type", "cpu", 4);
+       while (off != -FDT_ERR_NOTFOUND) {
+               u32 *reg = (u32 *)fdt_getprop(blob, off, "reg", 0);
+               val = cpu_to_fdt32(sysinfo.freqProcessor[*reg]);
+               fdt_setprop(blob, off, "clock-frequency", &val, 4);
+               off = fdt_node_offset_by_prop_value(blob, off, "device_type",
+                                                       "cpu", 4);
+       }
        do_fixup_by_prop_u32(blob, "device_type", "soc", 4,
                "bus-frequency", bd->bi_busfreq, 1);