aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorJean-Christophe DUBOIS <jcd@tribudubois.net>2007-07-20 21:39:23 +0200
committerArnd Bergmann <arnd@klappe.arndb.de>2007-07-20 21:41:39 +0200
commit64bafa9db7e92d5a46402613188b71800924ca1f (patch)
tree8addf059b7105aa37b0c0435aaf8ef32626d4091 /arch
parent74889e41d9a1f80928130a02af9b010673bc5ba7 (diff)
downloadkernel_samsung_aries-64bafa9db7e92d5a46402613188b71800924ca1f.zip
kernel_samsung_aries-64bafa9db7e92d5a46402613188b71800924ca1f.tar.gz
kernel_samsung_aries-64bafa9db7e92d5a46402613188b71800924ca1f.tar.bz2
[CELL] fix cbe_cpufreq for legacy SLOF tree.
Previous patch changed based on Christian Krafft's comment. On some legacy SLOF tree the generic code is unable to ioremap some Cell BE registers. Therefore the "generic" functions are returning a NULL pointer, triggering a crash on such platforms. Let's handle this more gracefully. Signed-off-by: Jean-Christophe DUBOIS <jcd@tribudubois.net> Acked-by: Christian Kraff <krafft@de.ibm.com> Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/platforms/cell/cbe_cpufreq.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/cell/cbe_cpufreq.c b/arch/powerpc/platforms/cell/cbe_cpufreq.c
index 9a99326..0b6e8ee 100644
--- a/arch/powerpc/platforms/cell/cbe_cpufreq.c
+++ b/arch/powerpc/platforms/cell/cbe_cpufreq.c
@@ -24,6 +24,7 @@
#include <asm/machdep.h>
#include <asm/of_platform.h>
#include <asm/prom.h>
+#include "cbe_regs.h"
#include "cbe_cpufreq.h"
static DEFINE_MUTEX(cbe_switch_mutex);
@@ -78,6 +79,15 @@ static int cbe_cpufreq_cpu_init(struct cpufreq_policy *policy)
pr_debug("init cpufreq on CPU %d\n", policy->cpu);
+ /*
+ * Let's check we can actually get to the CELL regs
+ */
+ if (!cbe_get_cpu_pmd_regs(policy->cpu) ||
+ !cbe_get_cpu_mic_tm_regs(policy->cpu)) {
+ pr_info("invalid CBE regs pointers for cpufreq\n");
+ return -EINVAL;
+ }
+
max_freqp = of_get_property(cpu, "clock-frequency", NULL);
of_node_put(cpu);