Browse Source

m68knommu: add sched_clock() for the DMA timer

with this printk() and other sched_clock() user use the more precise
timestamps. The highly optimized math is from arch/x86/kernel/tsc_32.c.

Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Sebastian Siewior 17 năm trước cách đây
mục cha
commit
5bed10a5ee
1 tập tin đã thay đổi với 16 bổ sung0 xóa
  1. 16 0
      arch/m68knommu/platform/coldfire/dma_timer.c

+ 16 - 0
arch/m68knommu/platform/coldfire/dma_timer.c

@@ -66,3 +66,19 @@ static int __init  init_cf_dt_clocksource(void)
 }
 
 arch_initcall(init_cf_dt_clocksource);
+
+#define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */
+#define CYC2NS_SCALE	((1000000 << CYC2NS_SCALE_FACTOR) / (DMA_FREQ / 1000))
+
+static unsigned long long cycles2ns(unsigned long cycl)
+{
+	return (unsigned long long) ((unsigned long long)cycl *
+			CYC2NS_SCALE) >> CYC2NS_SCALE_FACTOR;
+}
+
+unsigned long long sched_clock(void)
+{
+	unsigned long cycl = __raw_readl(DTCN0);
+
+	return cycles2ns(cycl);
+}