aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Krafft <krafft@de.ibm.com>2007-07-20 21:39:19 +0200
committerArnd Bergmann <arnd@klappe.arndb.de>2007-07-20 21:41:35 +0200
commita964b9be3e475f30aee334654b4ff200bcdc0092 (patch)
treeb360230a33572e0e4209bd43bd1266d4f20cd40c
parent813f90728e7d74e9b753e6ef6c6915cd2a047adb (diff)
[CELL] cbe_cpufreq: fix latency measurement
This patch fixes the debug code that calculates the transition time when changing the slow modes on a Cell BE cpu. Signed-off-by: Christian Krafft <krafft@de.ibm.com> Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
-rw-r--r--arch/powerpc/platforms/cell/cbe_cpufreq.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/arch/powerpc/platforms/cell/cbe_cpufreq.c b/arch/powerpc/platforms/cell/cbe_cpufreq.c
index 3586f529049..5820fb9a452 100644
--- a/arch/powerpc/platforms/cell/cbe_cpufreq.c
+++ b/arch/powerpc/platforms/cell/cbe_cpufreq.c
@@ -81,7 +81,7 @@ static int set_pmode_pmi(int cpu, unsigned int pmode)
int ret;
pmi_message_t pmi_msg;
#ifdef DEBUG
- u64 time;
+ long time;
#endif
pmi_msg.type = PMI_TYPE_FREQ_CHANGE;
@@ -89,7 +89,7 @@ static int set_pmode_pmi(int cpu, unsigned int pmode)
pmi_msg.data2 = pmode;
#ifdef DEBUG
- time = (u64) get_cycles();
+ time = jiffies;
#endif
pmi_send_message(pmi_msg);
@@ -98,9 +98,9 @@ static int set_pmode_pmi(int cpu, unsigned int pmode)
pr_debug("PMI returned slow mode %d\n", ret);
#ifdef DEBUG
- time = (u64) get_cycles() - time; /* actual cycles (not cpu cycles!) */
- time = 1000000000 * time / CLOCK_TICK_RATE; /* time in ns (10^-9) */
- pr_debug("had to wait %lu ns for a transition\n", time);
+ time = jiffies - time; /* actual cycles (not cpu cycles!) */
+ time = jiffies_to_msecs(time);
+ pr_debug("had to wait %lu ms for a transition using PMI.\n", time);
#endif
return ret;
}
@@ -123,15 +123,18 @@ static int set_pmode_reg(int cpu, unsigned int pmode)
struct cbe_mic_tm_regs __iomem *mic_tm_regs;
u64 flags;
u64 value;
+#ifdef DEBUG
+ long time;
+#endif
local_irq_save(flags);
mic_tm_regs = cbe_get_cpu_mic_tm_regs(cpu);
pmd_regs = cbe_get_cpu_pmd_regs(cpu);
- pr_debug("pm register is mapped at %p\n", &pmd_regs->pmcr);
- pr_debug("mic register is mapped at %p\n", &mic_tm_regs->slow_fast_timer_0);
-
+#ifdef DEBUG
+ time = jiffies;
+#endif
out_be64(&mic_tm_regs->slow_fast_timer_0, MIC_Slow_Fast_Timer_table[pmode]);
out_be64(&mic_tm_regs->slow_fast_timer_1, MIC_Slow_Fast_Timer_table[pmode]);
@@ -146,6 +149,7 @@ static int set_pmode_reg(int cpu, unsigned int pmode)
out_be64(&pmd_regs->pmcr, value);
+#ifdef DEBUG
/* wait until new pmode appears in status register */
value = in_be64(&pmd_regs->pmsr) & 0x07;
while(value != pmode) {
@@ -153,6 +157,11 @@ static int set_pmode_reg(int cpu, unsigned int pmode)
value = in_be64(&pmd_regs->pmsr) & 0x07;
}
+ time = jiffies - time;
+ time = jiffies_to_msecs(time);
+ pr_debug("had to wait %lu ms for a transition using " \
+ "the pervasive unit.\n", time);
+#endif
local_irq_restore(flags);
return 0;