[U-Boot] [PATCH 2/5] sh: tmu: Changed switch statement to shift operation

Nobuhiro Iwamatsu nobuhiro.iwamatsu.yj at renesas.com
Tue Aug 21 08:34:40 CEST 2012


Calculation of the bit position using switch statement can substitute
shift operation using ffs.
And removed unsed macro and variable.

Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj at renesas.com>
---
 arch/sh/lib/time.c |   48 ++++++++++++++++++------------------------------
 1 file changed, 18 insertions(+), 30 deletions(-)

diff --git a/arch/sh/lib/time.c b/arch/sh/lib/time.c
index 4840472..00230c3 100644
--- a/arch/sh/lib/time.c
+++ b/arch/sh/lib/time.c
@@ -36,23 +36,26 @@
 
 static struct tmu_regs *tmu = (struct tmu_regs *)TMU_BASE;
 
-#define TMU_MAX_COUNTER (~0UL)
-
-static ulong timer_freq;
+static u16 bit;
 static unsigned long last_tcnt;
 static unsigned long long overflow_ticks;
 
+unsigned long get_tbclk(void)
+{
+	return get_tmu0_clk_rate() >> ((bit + 1) * 2);
+}
+
 static inline unsigned long long tick_to_time(unsigned long long tick)
 {
 	tick *= CONFIG_SYS_HZ;
-	do_div(tick, timer_freq);
+	do_div(tick, get_tbclk());
 
 	return tick;
 }
 
 static inline unsigned long long usec_to_tick(unsigned long long usec)
 {
-	usec *= timer_freq;
+	usec *= get_tbclk();
 	do_div(usec, 1000000);
 
 	return usec;
@@ -74,31 +77,9 @@ static void tmu_timer_stop(unsigned int timer)
 
 int timer_init(void)
 {
-	/* Divide clock by CONFIG_SYS_TMU_CLK_DIV */
-	u16 bit = 0;
-
-	switch (CONFIG_SYS_TMU_CLK_DIV) {
-	case 1024:
-		bit = 4;
-		break;
-	case 256:
-		bit = 3;
-		break;
-	case 64:
-		bit = 2;
-		break;
-	case 16:
-		bit = 1;
-		break;
-	case 4:
-	default:
-		break;
-	}
+	bit = (ffs(CONFIG_SYS_TMU_CLK_DIV) >> 1) - 1;
 	writew(readw(&tmu->tcr0) | bit, &tmu->tcr0);
 
-	/* Calc clock rate */
-	timer_freq = get_tmu0_clk_rate() >> ((bit + 1) * 2);
-
 	tmu_timer_stop(0);
 	tmu_timer_start(0);
 
@@ -137,7 +118,14 @@ unsigned long get_timer(unsigned long base)
 	return tick_to_time(get_ticks()) - base;
 }
 
-unsigned long get_tbclk(void)
+void set_timer(unsigned long t)
+{
+	writel((0 - t), &tmu->tcnt0);
+}
+
+void reset_timer(void)
 {
-	return timer_freq;
+	tmu_timer_stop(0);
+	set_timer(0);
+	tmu_timer_start(0);
 }
-- 
1.7.10



More information about the U-Boot mailing list