From 8dd29c87ba370072a8464b8cc19e0a1e6e0497b4 Mon Sep 17 00:00:00 2001 From: Jean-Christophe PLAGNIOL-VILLARD Date: Thu, 4 Jun 2009 12:06:47 +0200 Subject: [PATCH] sh3/sh4: fix CONFIG_SYS_HZ to 1000 Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD Cc: Nobuhiro Iwamatsu Signed-off-by: Nobuhiro Iwamatsu --- include/configs/MigoR.h | 2 +- include/configs/ap325rxa.h | 2 +- include/configs/mpr2.h | 2 +- include/configs/ms7720se.h | 2 +- include/configs/ms7722se.h | 2 +- include/configs/ms7750se.h | 2 +- include/configs/r2dplus.h | 2 +- include/configs/r7780mp.h | 2 +- include/configs/sh7763rdp.h | 2 +- include/configs/sh7785lcr.h | 2 +- lib_sh/time.c | 51 ++++++++++++++++++++++++------------- 11 files changed, 44 insertions(+), 27 deletions(-) diff --git a/include/configs/MigoR.h b/include/configs/MigoR.h index c9589bd8766..6ef4c01ec91 100644 --- a/include/configs/MigoR.h +++ b/include/configs/MigoR.h @@ -142,6 +142,6 @@ /* Board Clock */ #define CONFIG_SYS_CLK_FREQ 33333333 #define TMU_CLK_DIVIDER (4) /* 4 (default), 16, 64, 256 or 1024 */ -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 #endif /* __MIGO_R_H */ diff --git a/include/configs/ap325rxa.h b/include/configs/ap325rxa.h index c6d77e3ae6b..550d67f9d4c 100644 --- a/include/configs/ap325rxa.h +++ b/include/configs/ap325rxa.h @@ -171,6 +171,6 @@ /* Board Clock */ #define CONFIG_SYS_CLK_FREQ 33333333 #define TMU_CLK_DIVIDER (4) /* 4 (default), 16, 64, 256 or 1024 */ -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 #endif /* __AP325RXA_H */ diff --git a/include/configs/mpr2.h b/include/configs/mpr2.h index 86f6a934f9f..c1473373637 100644 --- a/include/configs/mpr2.h +++ b/include/configs/mpr2.h @@ -83,7 +83,7 @@ /* Clocks */ #define CONFIG_SYS_CLK_FREQ 24000000 #define TMU_CLK_DIVIDER 4 /* 4 (default), 16, 64, 256 or 1024 */ -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 /* UART */ #define CONFIG_SCIF_CONSOLE 1 diff --git a/include/configs/ms7720se.h b/include/configs/ms7720se.h index 9a88ec7fa4c..f2e51220c3c 100644 --- a/include/configs/ms7720se.h +++ b/include/configs/ms7720se.h @@ -102,7 +102,7 @@ /* Board Clock */ #define CONFIG_SYS_CLK_FREQ 33333333 #define TMU_CLK_DIVIDER 4 /* 4 (default), 16, 64, 256 or 1024 */ -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 /* PCMCIA */ #define CONFIG_IDE_PCMCIA 1 diff --git a/include/configs/ms7722se.h b/include/configs/ms7722se.h index 53ffbeef240..e83bd0828e6 100644 --- a/include/configs/ms7722se.h +++ b/include/configs/ms7722se.h @@ -129,6 +129,6 @@ /* Board Clock */ #define CONFIG_SYS_CLK_FREQ 33333333 #define TMU_CLK_DIVIDER (4) /* 4 (default), 16, 64, 256 or 1024 */ -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 #endif /* __MS7722SE_H */ diff --git a/include/configs/ms7750se.h b/include/configs/ms7750se.h index 5eed3ab66db..67af2099770 100644 --- a/include/configs/ms7750se.h +++ b/include/configs/ms7750se.h @@ -102,6 +102,6 @@ /* Board Clock */ #define CONFIG_SYS_CLK_FREQ 33333333 #define TMU_CLK_DIVIDER 4 -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 #endif /* __MS7750SE_H */ diff --git a/include/configs/r2dplus.h b/include/configs/r2dplus.h index 6fa1eafde7d..804e3b84609 100644 --- a/include/configs/r2dplus.h +++ b/include/configs/r2dplus.h @@ -81,7 +81,7 @@ */ #define CONFIG_SYS_CLK_FREQ 60000000 #define TMU_CLK_DIVIDER 4 -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 #define CONFIG_SYS_PLL_SETTLING_TIME 100/* in us */ /* diff --git a/include/configs/r7780mp.h b/include/configs/r7780mp.h index 88eb56821f6..7b6867d101e 100644 --- a/include/configs/r7780mp.h +++ b/include/configs/r7780mp.h @@ -122,7 +122,7 @@ /* Board Clock */ #define CONFIG_SYS_CLK_FREQ 33333333 #define TMU_CLK_DIVIDER 4 -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 /* PCI Controller */ #if defined(CONFIG_CMD_PCI) diff --git a/include/configs/sh7763rdp.h b/include/configs/sh7763rdp.h index 8d7456eb699..79631be58a9 100644 --- a/include/configs/sh7763rdp.h +++ b/include/configs/sh7763rdp.h @@ -115,7 +115,7 @@ /* Clock */ #define CONFIG_SYS_CLK_FREQ 66666666 #define TMU_CLK_DIVIDER (4) /* 4 (default), 16, 64, 256 or 1024 */ -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 /* Ether */ #define CONFIG_NET_MULTI 1 diff --git a/include/configs/sh7785lcr.h b/include/configs/sh7785lcr.h index 21c3f70f5c9..9b4defd911e 100644 --- a/include/configs/sh7785lcr.h +++ b/include/configs/sh7785lcr.h @@ -187,6 +187,6 @@ /* The SCIF used external clock. system clock only used timer. */ #define CONFIG_SYS_CLK_FREQ 50000000 #define TMU_CLK_DIVIDER 4 -#define CONFIG_SYS_HZ (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER) +#define CONFIG_SYS_HZ 1000 #endif /* __SH7785LCR_H */ diff --git a/lib_sh/time.c b/lib_sh/time.c index 8fccce3d6a5..dc1c57e9751 100644 --- a/lib_sh/time.c +++ b/lib_sh/time.c @@ -1,4 +1,7 @@ /* + * (C) Copyright 2009 + * Jean-Christophe PLAGNIOL-VILLARD + * * (C) Copyright 2007-2008 * Nobobuhiro Iwamatsu * @@ -25,11 +28,30 @@ */ #include +#include #include +#include #include #define TMU_MAX_COUNTER (~0UL) -static int clk_adj = 1; + +static ulong timer_freq; + +static inline unsigned long long tick_to_time(unsigned long long tick) +{ + tick *= CONFIG_SYS_HZ; + do_div(tick, timer_freq); + + return tick; +} + +static inline unsigned long long usec_to_tick(unsigned long long usec) +{ + usec *= timer_freq; + do_div(usec, 1000000); + + return usec; +} static void tmu_timer_start (unsigned int timer) { @@ -65,15 +87,12 @@ int timer_init (void) break; case 4: default: - bit = 0; break; } writew(readw(TCR0) | bit, TCR0); - /* Clock adjustment calc */ - clk_adj = (int)(1.0 / ((1.0 / CONFIG_SYS_HZ) * 1000000)); - if (clk_adj < 1) - clk_adj = 1; + /* Calc clock rate */ + timer_freq = get_tmu0_clk_rate() >> ((bit + 1) * 2); tmu_timer_stop(0); tmu_timer_start(0); @@ -86,24 +105,22 @@ unsigned long long get_ticks (void) return 0 - readl(TCNT0); } -static unsigned long get_usec (void) -{ - return (0 - readl(TCNT0)); -} - void udelay (unsigned long usec) { - unsigned int start = get_usec(); - unsigned int end = start + (usec * clk_adj); + unsigned long long tmp; + ulong tmo; - while (get_usec() < end) - continue; + tmo = usec_to_tick(usec); + tmp = get_ticks() + tmo; /* get current timestamp */ + + while (get_ticks() < tmp) /* loop till event */ + /*NOP*/; } unsigned long get_timer (unsigned long base) { /* return msec */ - return ((get_usec() / clk_adj) / 1000) - base; + return tick_to_time(get_ticks()) - base; } void set_timer (unsigned long t) @@ -120,5 +137,5 @@ void reset_timer (void) unsigned long get_tbclk (void) { - return CONFIG_SYS_HZ; + return timer_freq; }