* [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000.
@ 2009-03-17 10:19 Dirk Behme
2009-03-31 20:29 ` Jean-Christophe PLAGNIOL-VILLARD
0 siblings, 1 reply; 9+ messages in thread
From: Dirk Behme @ 2009-03-17 10:19 UTC (permalink / raw)
To: u-boot
Fix OMAP3 timer handling to 1ms tick and CONFIG_SYS_HZ to 1000.
Clean up macros and comments.
Signed-off-by: Dirk Behme <dirk.behme@googlemail.com>
Signed-off-by: Manikandan Pillai <mani.pillai@ti.com>
---
Changes from Mani's original patch which is replaced by this [1]:
* Don't remove overflow handling in get_timer_masked()
* Update omap3_zoom1.h, too.
* Clean up timer related comments and macros in config files
* Don't touch reset_timer_masked()
* Switch divider clock divider from 256 to 8 to be able to get 1000Hz
* Remove unused udelay_masked()
* Minor clean up of get_tbclk()
[1] http://lists.denx.de/pipermail/u-boot/2009-March/049012.html
This patch is against U-Boot mainline commit
'b3dd629e78870ba2dc9f8032978721c0fa02a856'
'Prepare 2009.03-rc2'
cpu/arm_cortexa8/omap3/interrupts.c | 50 +++++++++++-------------------------
include/configs/omap3_beagle.h | 11 +++----
include/configs/omap3_evm.h | 15 +++++-----
include/configs/omap3_overo.h | 11 +++----
include/configs/omap3_pandora.h | 11 +++----
include/configs/omap3_zoom1.h | 11 +++----
6 files changed, 43 insertions(+), 66 deletions(-)
Index: u-boot-main/cpu/arm_cortexa8/omap3/interrupts.c
===================================================================
--- u-boot-main.orig/cpu/arm_cortexa8/omap3/interrupts.c
+++ u-boot-main/cpu/arm_cortexa8/omap3/interrupts.c
@@ -169,7 +169,16 @@ static ulong timestamp;
static ulong lastinc;
static gptimer_t *timer_base = (gptimer_t *)CONFIG_SYS_TIMERBASE;
-/* nothing really to do with interrupts, just starts up a counter. */
+/*
+ * Nothing really to do with interrupts, just starts up a counter.
+ * We run the counter with 13MHz, divided by 8, resulting in timer
+ * frequency of 1.625MHz. With 32bit counter register, counter
+ * overflows in ~44min
+ */
+
+/* 13MHz / 8 = 1.625MHz */
+#define TIMER_CLOCK (V_SCLK / (2 << CONFIG_SYS_PVT))
+
int interrupt_init(void)
{
/* start the counter ticking up, reload value on overflow */
@@ -232,50 +241,25 @@ void udelay(unsigned long usec)
void reset_timer_masked(void)
{
/* reset time, capture current incrementer value time */
- lastinc = readl(&timer_base->tcrr);
+ lastinc = readl(&timer_base->tcrr) / (TIMER_CLOCK / CONFIG_SYS_HZ);
timestamp = 0; /* start "advancing" time stamp from 0 */
}
ulong get_timer_masked(void)
{
- ulong now = readl(&timer_base->tcrr); /* current tick value */
+ /* current tick value */
+ ulong now = readl(&timer_base->tcrr) / (TIMER_CLOCK / CONFIG_SYS_HZ);
if (now >= lastinc) /* normal mode (non roll) */
/* move stamp fordward with absoulte diff ticks */
timestamp += (now - lastinc);
else /* we have rollover of incrementer */
- timestamp += (0xFFFFFFFF - lastinc) + now;
+ timestamp += ((0xFFFFFFFF / (TIMER_CLOCK / CONFIG_SYS_HZ))
+ - lastinc) + now;
lastinc = now;
return timestamp;
}
-/* waits specified delay value and resets timestamp */
-void udelay_masked(unsigned long usec)
-{
- ulong tmo;
- ulong endtime;
- signed long diff;
-
- /* if "big" number, spread normalization to seconds */
- if (usec >= 1000) {
- /* start to normalize for usec to ticks per sec */
- tmo = usec / 1000;
- /* find number of "ticks" to wait to achieve target */
- tmo *= CONFIG_SYS_HZ;
- tmo /= 1000; /* finish normalize. */
- } else { /* else small number, */
- /* don't kill it prior to HZ multiply */
- tmo = usec * CONFIG_SYS_HZ;
- tmo /= (1000 * 1000);
- }
- endtime = get_timer_masked() + tmo;
-
- do {
- ulong now = get_timer_masked();
- diff = endtime - now;
- } while (diff >= 0);
-}
-
/*
* This function is derived from PowerPC code (read timebase as long long).
* On ARM it just returns the timer value.
@@ -291,7 +275,5 @@ unsigned long long get_ticks(void)
*/
ulong get_tbclk(void)
{
- ulong tbclk;
- tbclk = CONFIG_SYS_HZ;
- return tbclk;
+ return CONFIG_SYS_HZ;
}
Index: u-boot-main/include/configs/omap3_beagle.h
===================================================================
--- u-boot-main.orig/include/configs/omap3_beagle.h
+++ u-boot-main/include/configs/omap3_beagle.h
@@ -220,14 +220,13 @@
/* load address */
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
-#define V_PVT 7
-
#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
-#define CONFIG_SYS_PVT V_PVT /* 2^(pvt+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PVT))
+#define CONFIG_SYS_PVT 2 /* Divisor: 2^(PVT+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
Index: u-boot-main/include/configs/omap3_evm.h
===================================================================
--- u-boot-main.orig/include/configs/omap3_evm.h
+++ u-boot-main/include/configs/omap3_evm.h
@@ -216,17 +216,16 @@
/* in Hz */
#define CONFIG_SYS_LOAD_ADDR (OMAP34XX_SDRC_CS0) /* default load */
- /* address */
+ /* address */
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
-#define V_PVT 7
-
-#define CONFIG_SYS_TIMERBASE OMAP34XX_GPT2
-#define CONFIG_SYS_PVT V_PVT /* 2^(pvt+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PVT))
+#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
+#define CONFIG_SYS_PVT 2 /* Divisor: 2^(PVT+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
Index: u-boot-main/include/configs/omap3_overo.h
===================================================================
--- u-boot-main.orig/include/configs/omap3_overo.h
+++ u-boot-main/include/configs/omap3_overo.h
@@ -213,14 +213,13 @@
/* address */
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
-#define V_PVT 7
-
#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
-#define CONFIG_SYS_PVT V_PVT /* 2^(pvt+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PVT))
+#define CONFIG_SYS_PVT 2 /* Divisor: 2^(PVT+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
Index: u-boot-main/include/configs/omap3_pandora.h
===================================================================
--- u-boot-main.orig/include/configs/omap3_pandora.h
+++ u-boot-main/include/configs/omap3_pandora.h
@@ -215,14 +215,13 @@
/* address */
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
-#define V_PVT 7
-
#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
-#define CONFIG_SYS_PVT V_PVT /* 2^(pvt+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PVT))
+#define CONFIG_SYS_PVT 2 /* Divisor: 2^(PVT+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
Index: u-boot-main/include/configs/omap3_zoom1.h
===================================================================
--- u-boot-main.orig/include/configs/omap3_zoom1.h
+++ u-boot-main/include/configs/omap3_zoom1.h
@@ -222,14 +222,13 @@
/* load address */
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
-#define V_PVT 7
-
#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
-#define CONFIG_SYS_PVT V_PVT /* 2^(pvt+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PVT))
+#define CONFIG_SYS_PVT 2 /* Divisor: 2^(PVT+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000.
2009-03-17 10:19 [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000 Dirk Behme
@ 2009-03-31 20:29 ` Jean-Christophe PLAGNIOL-VILLARD
2009-04-01 18:03 ` Dirk Behme
2009-04-01 22:43 ` Wolfgang Denk
0 siblings, 2 replies; 9+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2009-03-31 20:29 UTC (permalink / raw)
To: u-boot
On 11:19 Tue 17 Mar , Dirk Behme wrote:
> Fix OMAP3 timer handling to 1ms tick and CONFIG_SYS_HZ to 1000.
> Clean up macros and comments.
>
> Signed-off-by: Dirk Behme <dirk.behme@googlemail.com>
> Signed-off-by: Manikandan Pillai <mani.pillai@ti.com>
> ---
>
> Changes from Mani's original patch which is replaced by this [1]:
>
> * Don't remove overflow handling in get_timer_masked()
> * Update omap3_zoom1.h, too.
> * Clean up timer related comments and macros in config files
> * Don't touch reset_timer_masked()
> * Switch divider clock divider from 256 to 8 to be able to get 1000Hz
> * Remove unused udelay_masked()
> * Minor clean up of get_tbclk()
>
> [1] http://lists.denx.de/pipermail/u-boot/2009-March/049012.html
>
> This patch is against U-Boot mainline commit
> 'b3dd629e78870ba2dc9f8032978721c0fa02a856'
> 'Prepare 2009.03-rc2'
>
> cpu/arm_cortexa8/omap3/interrupts.c | 50 +++++++++++-------------------------
> include/configs/omap3_beagle.h | 11 +++----
> include/configs/omap3_evm.h | 15 +++++-----
> include/configs/omap3_overo.h | 11 +++----
> include/configs/omap3_pandora.h | 11 +++----
> include/configs/omap3_zoom1.h | 11 +++----
> 6 files changed, 43 insertions(+), 66 deletions(-)
>
> Index: u-boot-main/cpu/arm_cortexa8/omap3/interrupts.c
> ===================================================================
> --- u-boot-main.orig/cpu/arm_cortexa8/omap3/interrupts.c
> +++ u-boot-main/cpu/arm_cortexa8/omap3/interrupts.c
> @@ -169,7 +169,16 @@ static ulong timestamp;
> static ulong lastinc;
> static gptimer_t *timer_base = (gptimer_t *)CONFIG_SYS_TIMERBASE;
>
> -/* nothing really to do with interrupts, just starts up a counter. */
> +/*
> + * Nothing really to do with interrupts, just starts up a counter.
> + * We run the counter with 13MHz, divided by 8, resulting in timer
> + * frequency of 1.625MHz. With 32bit counter register, counter
> + * overflows in ~44min
> + */
It will be better to use the 12Mhz source clock and set the divider to 4
so you will a a timer frequency to 3MHz and a perfect Match clock
it will overflow ealier but the timer will be exact
Best Regards,
J.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000.
2009-03-31 20:29 ` Jean-Christophe PLAGNIOL-VILLARD
@ 2009-04-01 18:03 ` Dirk Behme
2009-04-01 22:43 ` Wolfgang Denk
1 sibling, 0 replies; 9+ messages in thread
From: Dirk Behme @ 2009-04-01 18:03 UTC (permalink / raw)
To: u-boot
Dear Jean-Christophe,
Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 11:19 Tue 17 Mar , Dirk Behme wrote:
>> Fix OMAP3 timer handling to 1ms tick and CONFIG_SYS_HZ to 1000.
>> Clean up macros and comments.
>>
>> Signed-off-by: Dirk Behme <dirk.behme@googlemail.com>
>> Signed-off-by: Manikandan Pillai <mani.pillai@ti.com>
>> ---
>>
>> Changes from Mani's original patch which is replaced by this [1]:
>>
>> * Don't remove overflow handling in get_timer_masked()
>> * Update omap3_zoom1.h, too.
>> * Clean up timer related comments and macros in config files
>> * Don't touch reset_timer_masked()
>> * Switch divider clock divider from 256 to 8 to be able to get 1000Hz
>> * Remove unused udelay_masked()
>> * Minor clean up of get_tbclk()
>>
>> [1] http://lists.denx.de/pipermail/u-boot/2009-March/049012.html
>>
>> This patch is against U-Boot mainline commit
>> 'b3dd629e78870ba2dc9f8032978721c0fa02a856'
>> 'Prepare 2009.03-rc2'
>>
>> cpu/arm_cortexa8/omap3/interrupts.c | 50 +++++++++++-------------------------
>> include/configs/omap3_beagle.h | 11 +++----
>> include/configs/omap3_evm.h | 15 +++++-----
>> include/configs/omap3_overo.h | 11 +++----
>> include/configs/omap3_pandora.h | 11 +++----
>> include/configs/omap3_zoom1.h | 11 +++----
>> 6 files changed, 43 insertions(+), 66 deletions(-)
>>
>> Index: u-boot-main/cpu/arm_cortexa8/omap3/interrupts.c
>> ===================================================================
>> --- u-boot-main.orig/cpu/arm_cortexa8/omap3/interrupts.c
>> +++ u-boot-main/cpu/arm_cortexa8/omap3/interrupts.c
>> @@ -169,7 +169,16 @@ static ulong timestamp;
>> static ulong lastinc;
>> static gptimer_t *timer_base = (gptimer_t *)CONFIG_SYS_TIMERBASE;
>>
>> -/* nothing really to do with interrupts, just starts up a counter. */
>> +/*
>> + * Nothing really to do with interrupts, just starts up a counter.
>> + * We run the counter with 13MHz, divided by 8, resulting in timer
>> + * frequency of 1.625MHz. With 32bit counter register, counter
>> + * overflows in ~44min
>> + */
> It will be better to use the 12Mhz source clock and set the divider to 4
> so you will a a timer frequency to 3MHz and a perfect Match clock
> it will overflow ealier but the timer will be exact
Why do you think that existing code doesn't give exact value? With
this patch we get a nice 1000 Hz tick.
Existing patch is the most non-intrusive (i.e. touch only what's
necessary), easy and small fix for broken OMAP3 timer code. And it
gives fine 1000 Hz. Yes, everything can be done more perfect. But
often this isn't necessary. So please apply this version.
Dirk
Btw.: Could be agree on the "without too long delays" part of
http://lists.denx.de/pipermail/u-boot/2009-March/049885.html
?
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000.
2009-03-31 20:29 ` Jean-Christophe PLAGNIOL-VILLARD
2009-04-01 18:03 ` Dirk Behme
@ 2009-04-01 22:43 ` Wolfgang Denk
2009-04-02 10:42 ` Ladislav Michl
2009-04-20 19:07 ` [U-Boot] [PATCH] " Ladislav Michl
1 sibling, 2 replies; 9+ messages in thread
From: Wolfgang Denk @ 2009-04-01 22:43 UTC (permalink / raw)
To: u-boot
Dear Jean-Christophe PLAGNIOL-VILLARD,
In message <20090331202939.GI24923@game.jcrosoft.org> you wrote:
> On 11:19 Tue 17 Mar , Dirk Behme wrote:
> > Fix OMAP3 timer handling to 1ms tick and CONFIG_SYS_HZ to 1000.
> > Clean up macros and comments.
> >
> > Signed-off-by: Dirk Behme <dirk.behme@googlemail.com>
> > Signed-off-by: Manikandan Pillai <mani.pillai@ti.com>
What is the status of this patch?
I see no reason to delay it.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
The IQ of the group is the lowest IQ of a member of the group divided
by the number of people in the group.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000.
2009-04-01 22:43 ` Wolfgang Denk
@ 2009-04-02 10:42 ` Ladislav Michl
2009-04-02 10:48 ` [U-Boot] [PATCH v2] " Ladislav Michl
2009-04-20 19:07 ` [U-Boot] [PATCH] " Ladislav Michl
1 sibling, 1 reply; 9+ messages in thread
From: Ladislav Michl @ 2009-04-02 10:42 UTC (permalink / raw)
To: u-boot
On Thu, Apr 02, 2009 at 12:43:53AM +0200, Wolfgang Denk wrote:
> Dear Jean-Christophe PLAGNIOL-VILLARD,
>
> In message <20090331202939.GI24923@game.jcrosoft.org> you wrote:
> > On 11:19 Tue 17 Mar , Dirk Behme wrote:
> > > Fix OMAP3 timer handling to 1ms tick and CONFIG_SYS_HZ to 1000.
> > > Clean up macros and comments.
> > >
> > > Signed-off-by: Dirk Behme <dirk.behme@googlemail.com>
> > > Signed-off-by: Manikandan Pillai <mani.pillai@ti.com>
>
> What is the status of this patch?
>
> I see no reason to delay it.
Wolfgang,
it will no longer apply beacuse of commit
81472d893fa565c9d300928a40e504a689bde131
and I feel a bit shy for causing troubles, updated follows in separate mail
Best regards,
ladis
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v2] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000.
2009-04-02 10:42 ` Ladislav Michl
@ 2009-04-02 10:48 ` Ladislav Michl
0 siblings, 0 replies; 9+ messages in thread
From: Ladislav Michl @ 2009-04-02 10:48 UTC (permalink / raw)
To: u-boot
From: Manikandan Pillai <mani.pillai@ti.com>
Signed-off-by: Dirk Behme <dirk.behme@googlemail.com>
Signed-off-by: Manikandan Pillai <mani.pillai@ti.com>
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
Changes from Dirk's patch which is replaced by this [2]:
* Fix conflicts after commit 81472d893fa565c9d300928a40e504a689bde131
Changes from Mani's original patch which is replaced by this [1]:
* Don't remove overflow handling in get_timer_masked()
* Update omap3_zoom1.h, too.
* Clean up timer related comments and macros in config files
* Don't touch reset_timer_masked()
* Switch divider clock divider from 256 to 8 to be able to get 1000Hz
* Remove unused udelay_masked()
* Minor clean up of get_tbclk()
[1] http://lists.denx.de/pipermail/u-boot/2009-March/049012.html
[2] http://lists.denx.de/pipermail/u-boot/2009-March/049146.html
---
cpu/arm_cortexa8/omap3/interrupts.c | 50 +++++++++++-----------------------
include/configs/omap3_beagle.h | 9 +++---
include/configs/omap3_evm.h | 9 +++---
include/configs/omap3_overo.h | 12 ++++----
include/configs/omap3_pandora.h | 11 ++++---
include/configs/omap3_zoom1.h | 11 ++++---
6 files changed, 44 insertions(+), 58 deletions(-)
diff --git a/cpu/arm_cortexa8/omap3/interrupts.c b/cpu/arm_cortexa8/omap3/interrupts.c
index 5d9c4e3..c75bc8b 100644
--- a/cpu/arm_cortexa8/omap3/interrupts.c
+++ b/cpu/arm_cortexa8/omap3/interrupts.c
@@ -169,7 +169,16 @@ static ulong timestamp;
static ulong lastinc;
static gptimer_t *timer_base = (gptimer_t *)CONFIG_SYS_TIMERBASE;
-/* nothing really to do with interrupts, just starts up a counter. */
+/*
+ * Nothing really to do with interrupts, just starts up a counter.
+ * We run the counter with 13MHz, divided by 8, resulting in timer
+ * frequency of 1.625MHz. With 32bit counter register, counter
+ * overflows in ~44min
+ */
+
+/* 13MHz / 8 = 1.625MHz */
+#define TIMER_CLOCK (V_SCLK / (2 << CONFIG_SYS_PTV))
+
int interrupt_init(void)
{
/* start the counter ticking up, reload value on overflow */
@@ -232,50 +241,25 @@ void udelay(unsigned long usec)
void reset_timer_masked(void)
{
/* reset time, capture current incrementer value time */
- lastinc = readl(&timer_base->tcrr);
+ lastinc = readl(&timer_base->tcrr) / (TIMER_CLOCK / CONFIG_SYS_HZ);
timestamp = 0; /* start "advancing" time stamp from 0 */
}
ulong get_timer_masked(void)
{
- ulong now = readl(&timer_base->tcrr); /* current tick value */
+ /* current tick value */
+ ulong now = readl(&timer_base->tcrr) / (TIMER_CLOCK / CONFIG_SYS_HZ);
if (now >= lastinc) /* normal mode (non roll) */
/* move stamp fordward with absoulte diff ticks */
timestamp += (now - lastinc);
else /* we have rollover of incrementer */
- timestamp += (0xFFFFFFFF - lastinc) + now;
+ timestamp += ((0xFFFFFFFF / (TIMER_CLOCK / CONFIG_SYS_HZ))
+ - lastinc) + now;
lastinc = now;
return timestamp;
}
-/* waits specified delay value and resets timestamp */
-void udelay_masked(unsigned long usec)
-{
- ulong tmo;
- ulong endtime;
- signed long diff;
-
- /* if "big" number, spread normalization to seconds */
- if (usec >= 1000) {
- /* start to normalize for usec to ticks per sec */
- tmo = usec / 1000;
- /* find number of "ticks" to wait to achieve target */
- tmo *= CONFIG_SYS_HZ;
- tmo /= 1000; /* finish normalize. */
- } else { /* else small number, */
- /* don't kill it prior to HZ multiply */
- tmo = usec * CONFIG_SYS_HZ;
- tmo /= (1000 * 1000);
- }
- endtime = get_timer_masked() + tmo;
-
- do {
- ulong now = get_timer_masked();
- diff = endtime - now;
- } while (diff >= 0);
-}
-
/*
* This function is derived from PowerPC code (read timebase as long long).
* On ARM it just returns the timer value.
@@ -291,7 +275,5 @@ unsigned long long get_ticks(void)
*/
ulong get_tbclk(void)
{
- ulong tbclk;
- tbclk = CONFIG_SYS_HZ;
- return tbclk;
+ return CONFIG_SYS_HZ;
}
diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h
index 7db1eb7..88a57d3 100644
--- a/include/configs/omap3_beagle.h
+++ b/include/configs/omap3_beagle.h
@@ -223,12 +223,13 @@
/* load address */
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
-#define CONFIG_SYS_PTV 7 /* 2^(PTV+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PTV))
+#define CONFIG_SYS_PTV 2 /* Divisor: 2^(PTV+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h
index 2f532d5..d36e689 100644
--- a/include/configs/omap3_evm.h
+++ b/include/configs/omap3_evm.h
@@ -216,12 +216,13 @@
/* address */
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
#define CONFIG_SYS_TIMERBASE OMAP34XX_GPT2
-#define CONFIG_SYS_PTV 7 /* 2^(PTV+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PTV))
+#define CONFIG_SYS_PTV 2 /* Divisor: 2^(PTV+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
diff --git a/include/configs/omap3_overo.h b/include/configs/omap3_overo.h
index 0c32100..ec8529e 100644
--- a/include/configs/omap3_overo.h
+++ b/include/configs/omap3_overo.h
@@ -208,14 +208,14 @@
#define CONFIG_SYS_LOAD_ADDR (OMAP34XX_SDRC_CS0) /* default load */
/* address */
-
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
-#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
-#define CONFIG_SYS_PTV 7 /* 2^(PTV+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PTV))
+#define CONFIG_SYS_TIMERBASE OMAP34XX_GPT2
+#define CONFIG_SYS_PTV 2 /* Divisor: 2^(PTV+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h
index fb4e50d..f44d071 100644
--- a/include/configs/omap3_pandora.h
+++ b/include/configs/omap3_pandora.h
@@ -212,12 +212,13 @@
/* address */
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
-#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
-#define CONFIG_SYS_PTV 7 /* 2^(PTV+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PTV))
+#define CONFIG_SYS_TIMERBASE OMAP34XX_GPT2
+#define CONFIG_SYS_PTV 2 /* Divisor: 2^(PTV+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
diff --git a/include/configs/omap3_zoom1.h b/include/configs/omap3_zoom1.h
index 883234a..bfe40b3 100644
--- a/include/configs/omap3_zoom1.h
+++ b/include/configs/omap3_zoom1.h
@@ -220,12 +220,13 @@
/* load address */
/*
- * 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by
- * 32KHz clk, or from external sig. This rate is divided by a local divisor.
+ * OMAP3 has 12 GP timers, they can be driven by the system clock
+ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
+ * This rate is divided by a local divisor.
*/
-#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
-#define CONFIG_SYS_PTV 7 /* 2^(PTV+1) */
-#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PTV))
+#define CONFIG_SYS_TIMERBASE OMAP34XX_GPT2
+#define CONFIG_SYS_PTV 2 /* Divisor: 2^(PTV+1) => 8 */
+#define CONFIG_SYS_HZ 1000
/*-----------------------------------------------------------------------
* Stack sizes
--
1.5.3.8
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000.
2009-04-20 19:07 ` [U-Boot] [PATCH] " Ladislav Michl
@ 2009-04-20 17:27 ` Dirk Behme
2009-04-20 22:10 ` Ladislav Michl
0 siblings, 1 reply; 9+ messages in thread
From: Dirk Behme @ 2009-04-20 17:27 UTC (permalink / raw)
To: u-boot
Dear Ladis,
Ladislav Michl wrote:
> On Thu, Apr 02, 2009 at 12:43:53AM +0200, Wolfgang Denk wrote:
>> In message <20090331202939.GI24923@game.jcrosoft.org> you wrote:
>>> On 11:19 Tue 17 Mar , Dirk Behme wrote:
>>>> Fix OMAP3 timer handling to 1ms tick and CONFIG_SYS_HZ to 1000.
>>>> Clean up macros and comments.
>>>>
>>>> Signed-off-by: Dirk Behme <dirk.behme@googlemail.com>
>>>> Signed-off-by: Manikandan Pillai <mani.pillai@ti.com>
>> What is the status of this patch?
>>
>> I see no reason to delay it.
>
> After messing with OMAP1 timer code (which is copied again and again over
> tree) I found such a reason. It is called 'void udelay(unsigned long usec)'
> implementation and I hereby leaving its bugfixing as an excercise for a
> reader [1].
Would you mind giving some more details? This would avoid wasting time
to re-think about it (and maybe doing it wrong again) and would let us
better use the time for fixing the issues you see.
Many thanks
Dirk
> Patch 'arm925t: Fix CONFIG_SYS_HZ to 1000', which is on its way
> to the list, can be used as a reference. Oh well, since it seems unlikely
> proper timer API will step in before 2009.06 leaves the door, let's fix it
> one by one...
>
> ladis
>
> [1] Diligent reader is welcome to base his work on the updated patch
> http://lists.denx.de/pipermail/u-boot/2009-April/050170.html
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000.
2009-04-01 22:43 ` Wolfgang Denk
2009-04-02 10:42 ` Ladislav Michl
@ 2009-04-20 19:07 ` Ladislav Michl
2009-04-20 17:27 ` Dirk Behme
1 sibling, 1 reply; 9+ messages in thread
From: Ladislav Michl @ 2009-04-20 19:07 UTC (permalink / raw)
To: u-boot
On Thu, Apr 02, 2009 at 12:43:53AM +0200, Wolfgang Denk wrote:
> In message <20090331202939.GI24923@game.jcrosoft.org> you wrote:
> > On 11:19 Tue 17 Mar , Dirk Behme wrote:
> > > Fix OMAP3 timer handling to 1ms tick and CONFIG_SYS_HZ to 1000.
> > > Clean up macros and comments.
> > >
> > > Signed-off-by: Dirk Behme <dirk.behme@googlemail.com>
> > > Signed-off-by: Manikandan Pillai <mani.pillai@ti.com>
>
> What is the status of this patch?
>
> I see no reason to delay it.
After messing with OMAP1 timer code (which is copied again and again over
tree) I found such a reason. It is called 'void udelay(unsigned long usec)'
implementation and I hereby leaving its bugfixing as an excercise for a
reader [1]. Patch 'arm925t: Fix CONFIG_SYS_HZ to 1000', which is on its way
to the list, can be used as a reference. Oh well, since it seems unlikely
proper timer API will step in before 2009.06 leaves the door, let's fix it
one by one...
ladis
[1] Diligent reader is welcome to base his work on the updated patch
http://lists.denx.de/pipermail/u-boot/2009-April/050170.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000.
2009-04-20 17:27 ` Dirk Behme
@ 2009-04-20 22:10 ` Ladislav Michl
0 siblings, 0 replies; 9+ messages in thread
From: Ladislav Michl @ 2009-04-20 22:10 UTC (permalink / raw)
To: u-boot
On Mon, Apr 20, 2009 at 07:27:29PM +0200, Dirk Behme wrote:
> Ladislav Michl wrote:
>> After messing with OMAP1 timer code (which is copied again and again over
>> tree) I found such a reason. It is called 'void udelay(unsigned long usec)'
>> implementation and I hereby leaving its bugfixing as an excercise for a
>> reader [1].
>
> Would you mind giving some more details? This would avoid wasting time
> to re-think about it (and maybe doing it wrong again) and would let us
> better use the time for fixing the issues you see.
udelay is implemented using get_timer_masked and since that omap3 patch
limits timer resolution to 1ms, you get into trouble asking it to delay
100us as some drivers do.
ladis
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-04-20 22:10 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-17 10:19 [U-Boot] [PATCH] OMAP3: Fix timer handling to 1ms and CONFIG_SYS_HZ to 1000 Dirk Behme
2009-03-31 20:29 ` Jean-Christophe PLAGNIOL-VILLARD
2009-04-01 18:03 ` Dirk Behme
2009-04-01 22:43 ` Wolfgang Denk
2009-04-02 10:42 ` Ladislav Michl
2009-04-02 10:48 ` [U-Boot] [PATCH v2] " Ladislav Michl
2009-04-20 19:07 ` [U-Boot] [PATCH] " Ladislav Michl
2009-04-20 17:27 ` Dirk Behme
2009-04-20 22:10 ` Ladislav Michl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox