summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorLaurentiu TUDOR <Laurentiu.Tudor@freescale.com>2013-10-23 15:20:45 +0300
committerYork Sun <yorksun@freescale.com>2013-11-13 12:41:28 -0800
commit51abee64eee0186634858d1e6f91a65969c90125 (patch)
treea394f39e7a8c69e9205780850060db4f3b2661d8 /arch
parent8f9fe660fcf99af47dc0a28b80cd4e34d403f7c5 (diff)
downloadu-boot-imx-51abee64eee0186634858d1e6f91a65969c90125.zip
u-boot-imx-51abee64eee0186634858d1e6f91a65969c90125.tar.gz
u-boot-imx-51abee64eee0186634858d1e6f91a65969c90125.tar.bz2
powerpc/85xx: fix broken cpu "clock-frequency" property
When indexing freqProcessor[] we use the first value in the cpu's "reg" property, which on new e6500 cores IDs the threads. But freqProcessor[] should be indexed with a core index so, when fixing "the clock-frequency" cpu node property, access the freqProcessor[] with the core index derived from the "reg' property. If we don't do this, last half of the "cpu" nodes will have broken "clock-frequency" values. Signed-off-by: Laurentiu Tudor <Laurentiu.Tudor@freescale.com> Cc: York Sun <yorksun@freescale.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/cpu/mpc85xx/fdt.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/powerpc/cpu/mpc85xx/fdt.c b/arch/powerpc/cpu/mpc85xx/fdt.c
index 2ccd9c7..33bc900 100644
--- a/arch/powerpc/cpu/mpc85xx/fdt.c
+++ b/arch/powerpc/cpu/mpc85xx/fdt.c
@@ -586,6 +586,7 @@ void ft_cpu_setup(void *blob, bd_t *bd)
{
int off;
int val;
+ int len;
sys_info_t sysinfo;
/* delete crypto node if not on an E-processor */
@@ -615,8 +616,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)
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.freq_processor[*reg]);
+ u32 *reg = (u32 *)fdt_getprop(blob, off, "reg", &len);
+ val = cpu_to_fdt32(sysinfo.freq_processor[(*reg) / (len / 4)]);
fdt_setprop(blob, off, "clock-frequency", &val, 4);
off = fdt_node_offset_by_prop_value(blob, off, "device_type",
"cpu", 4);