[U-Boot] [PATCH] at91: change CONFIG_SYS_HZ to 1000
Detlef Vollmann
dv at vollmann.ch
Tue Feb 24 15:51:10 CET 2009
It seems that resistance is futile...
Nearly all boards now use a value of 1000 for CONFIG_SYS_HZ,
and a commit from Oct 1 last year in the net code breaks all
boards silently that have a different value.
So here's a patch for the at91 arm926ejs CPUs and boards
that changes get_timer and get_ticks to return milliseconds.
This will break boards that are not in the tree but use such CPUs,
but at least it'll break them loudly.
Detlef
CHANGELOG:
Change at91 CPUs based on arm926ejs to return milliseconds
from get_timer and get_ticks. Also changes in the value of
CONFIG_SYS_HZ to 1000 in all board configs using these CPUs.
This will not compile on boards using these CPUs with a
different value for CONFIG_SYS_HZ.
diff -Nrup u-boot-2009.03-rc1.orig/cpu/arm926ejs/at91/timer.c u-boot-2009.03-rc1/cpu/arm926ejs/at91/timer.c
--- u-boot-2009.03-rc1.orig/cpu/arm926ejs/at91/timer.c 2009-02-23 00:22:21.000000000 +0100
+++ u-boot-2009.03-rc1/cpu/arm926ejs/at91/timer.c 2009-02-24 14:58:47.000000000 +0100
@@ -30,6 +30,19 @@
#include <asm/arch/io.h>
/*
+ * This code essentially ignores the settings of AT91_MASTER_CLOCK
+ * and CONFIG_SYS_HZ, so we just bail out if they're not set to
+ * the canonical values.
+ */
+#if (CONFIG_SYS_HZ != 1000)
+#error "CONFIG_SYS_HZ must be set to 1000 for this CPU"
+#endif
+/* We leave some leeway for the master clock... */
+#if (AT91_MASTER_CLOCK < 85000000) || (AT91_MASTER_CLOCK > 115000000)
+#error "AT91_MASTER_CLOCK must be set to 100000000 for this CPU"
+#endif
+
+/*
* We're using the AT91CAP9/SAM9 PITC in 32 bit mode, by
* setting the 20 bit counter period to its maximum (0xfffff).
*/
@@ -38,6 +51,7 @@
#define READ_TIMER at91_sys_read(AT91_PIT_PIIR)
#define TIMER_FREQ (AT91C_MASTER_CLOCK << 4)
#define TICKS_TO_USEC(ticks) ((ticks) / 6)
+#define TICKS_TO_MSEC(ticks) ((ticks) / 6250)
ulong get_timer_masked(void);
ulong resettime;
@@ -73,6 +87,21 @@ static inline ulong get_timer_raw(void)
return 0xFFFFFFFFUL - (resettime - now) ;
}
+static inline ulong get_timer_masked_usec(void)
+{
+ return TICKS_TO_USEC(get_timer_raw());
+}
+
+static inline ulong get_timer_usec(ulong base)
+{
+ ulong now = get_timer_masked_usec();
+
+ if (now >= base)
+ return now - base;
+ else
+ return TICKS_TO_USEC(0xFFFFFFFFUL) - (base - now) ;
+}
+
void reset_timer_masked(void)
{
resettime = READ_TIMER;
@@ -80,7 +109,7 @@ void reset_timer_masked(void)
ulong get_timer_masked(void)
{
- return TICKS_TO_USEC(get_timer_raw());
+ return TICKS_TO_MSEC(get_timer_raw());
}
@@ -88,8 +117,8 @@ void udelay_masked(unsigned long usec)
{
ulong tmp;
- tmp = get_timer(0);
- while (get_timer(tmp) < usec) /* our timer works in usecs */
+ tmp = get_timer_usec(0);
+ while (get_timer_usec(tmp) < usec)
; /* NOP */
}
@@ -105,7 +134,7 @@ ulong get_timer(ulong base)
if (now >= base)
return now - base;
else
- return TICKS_TO_USEC(0xFFFFFFFFUL) - (base - now) ;
+ return TICKS_TO_MSEC(0xFFFFFFFFUL) - (base - now) ;
}
void udelay(unsigned long usec)
diff -Nrup u-boot-2009.03-rc1.orig/include/configs/afeb9260.h u-boot-2009.03-rc1/include/configs/afeb9260.h
--- u-boot-2009.03-rc1.orig/include/configs/afeb9260.h 2009-02-23 00:22:21.000000000 +0100
+++ u-boot-2009.03-rc1/include/configs/afeb9260.h 2009-02-24 15:00:19.000000000 +0100
@@ -30,7 +30,7 @@
#define AT91_MAIN_CLOCK 18429952 /* from 18.432 MHz crystal */
#define AT91_MASTER_CLOCK 89999598 /* peripheral = main / 2 */
#define CONFIG_SYS_AT91_PLLB 0x107c3e18 /* PLLB settings for USB */
-#define CONFIG_SYS_HZ 1000000 /* 1us resolution */
+#define CONFIG_SYS_HZ 1000 /* 1ms resolution */
#define AT91_SLOW_CLOCK 32768 /* slow clock */
diff -Nrup u-boot-2009.03-rc1.orig/include/configs/at91cap9adk.h u-boot-2009.03-rc1/include/configs/at91cap9adk.h
--- u-boot-2009.03-rc1.orig/include/configs/at91cap9adk.h 2009-02-23 00:22:21.000000000 +0100
+++ u-boot-2009.03-rc1/include/configs/at91cap9adk.h 2009-02-24 15:00:07.000000000 +0100
@@ -33,7 +33,7 @@
#define AT91_MASTER_CLOCK 100000000 /* peripheral */
#define AT91_CPU_CLOCK 200000000 /* cpu */
#define CONFIG_SYS_AT91_PLLB 0x10073e01 /* PLLB settings for USB */
-#define CONFIG_SYS_HZ 1000000 /* 1us resolution */
+#define CONFIG_SYS_HZ 1000 /* 1ms resolution */
#define AT91_SLOW_CLOCK 32768 /* slow clock */
diff -Nrup u-boot-2009.03-rc1.orig/include/configs/at91sam9260ek.h u-boot-2009.03-rc1/include/configs/at91sam9260ek.h
--- u-boot-2009.03-rc1.orig/include/configs/at91sam9260ek.h 2009-02-23 00:22:21.000000000 +0100
+++ u-boot-2009.03-rc1/include/configs/at91sam9260ek.h 2009-02-24 15:01:22.000000000 +0100
@@ -33,7 +33,7 @@
#define AT91_MASTER_CLOCK 100000000 /* peripheral */
#define AT91_CPU_CLOCK 200000000 /* cpu */
#define CONFIG_SYS_AT91_PLLB 0x107c3e18 /* PLLB settings for USB */
-#define CONFIG_SYS_HZ 1000000 /* 1us resolution */
+#define CONFIG_SYS_HZ 1000 /* 1ms resolution */
#define AT91_SLOW_CLOCK 32768 /* slow clock */
diff -Nrup u-boot-2009.03-rc1.orig/include/configs/at91sam9261ek.h u-boot-2009.03-rc1/include/configs/at91sam9261ek.h
--- u-boot-2009.03-rc1.orig/include/configs/at91sam9261ek.h 2009-02-23 00:22:21.000000000 +0100
+++ u-boot-2009.03-rc1/include/configs/at91sam9261ek.h 2009-02-24 15:02:55.000000000 +0100
@@ -32,7 +32,7 @@
#define AT91_MAIN_CLOCK 18432000 /* 18.432 MHz crystal */
#define AT91_MASTER_CLOCK 100000000 /* peripheral */
#define AT91_CPU_CLOCK 200000000 /* cpu */
-#define CONFIG_SYS_HZ 1000000 /* 1us resolution */
+#define CONFIG_SYS_HZ 1000 /* 1ms resolution */
#define AT91_SLOW_CLOCK 32768 /* slow clock */
diff -Nrup u-boot-2009.03-rc1.orig/include/configs/at91sam9263ek.h u-boot-2009.03-rc1/include/configs/at91sam9263ek.h
--- u-boot-2009.03-rc1.orig/include/configs/at91sam9263ek.h 2009-02-23 00:22:21.000000000 +0100
+++ u-boot-2009.03-rc1/include/configs/at91sam9263ek.h 2009-02-24 15:03:09.000000000 +0100
@@ -33,7 +33,7 @@
#define AT91_MASTER_CLOCK 100000000 /* peripheral */
#define AT91_CPU_CLOCK 200000000 /* cpu */
#define CONFIG_SYS_AT91_PLLB 0x133a3e8d /* PLLB settings for USB */
-#define CONFIG_SYS_HZ 1000000 /* 1us resolution */
+#define CONFIG_SYS_HZ 1000 /* 1ms resolution */
#define AT91_SLOW_CLOCK 32768 /* slow clock */
diff -Nrup u-boot-2009.03-rc1.orig/include/configs/at91sam9rlek.h u-boot-2009.03-rc1/include/configs/at91sam9rlek.h
--- u-boot-2009.03-rc1.orig/include/configs/at91sam9rlek.h 2009-02-23 00:22:21.000000000 +0100
+++ u-boot-2009.03-rc1/include/configs/at91sam9rlek.h 2009-02-24 15:03:20.000000000 +0100
@@ -32,7 +32,7 @@
#define AT91_MAIN_CLOCK 12000000 /* 12 MHz crystal */
#define AT91_MASTER_CLOCK 100000000 /* peripheral */
#define AT91_CPU_CLOCK 200000000 /* cpu */
-#define CONFIG_SYS_HZ 1000000 /* 1us resolution */
+#define CONFIG_SYS_HZ 1000 /* 1ms resolution */
#define AT91_SLOW_CLOCK 32768 /* slow clock */
--
Detlef Vollmann vollmann engineering gmbh
Linux and C++ for Embedded Systems http://www.vollmann.ch/
More information about the U-Boot
mailing list