public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] at91: change CONFIG_SYS_HZ to 1000
@ 2009-02-24 14:51 Detlef Vollmann
  2009-02-24 21:42 ` Wolfgang Denk
  0 siblings, 1 reply; 2+ messages in thread
From: Detlef Vollmann @ 2009-02-24 14:51 UTC (permalink / raw)
  To: u-boot

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/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [U-Boot] [PATCH] at91: change CONFIG_SYS_HZ to 1000
  2009-02-24 14:51 [U-Boot] [PATCH] at91: change CONFIG_SYS_HZ to 1000 Detlef Vollmann
@ 2009-02-24 21:42 ` Wolfgang Denk
  0 siblings, 0 replies; 2+ messages in thread
From: Wolfgang Denk @ 2009-02-24 21:42 UTC (permalink / raw)
  To: u-boot

Dear Detlef Vollmann,

In message <49A4095E.7010502@vollmann.ch> you wrote:
> 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.

Please use git tools to format and send the patch. Make sure to
provide a usable comit message, and place any additional comments
below a '---' line.

Also, please don't forget your signed-off-by line.

Please see http://www.denx.de/wiki/U-Boot/Patches for details.

> 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

This makes no sense - CONFIG_SYS_HZ should be set to 1000 for all boards
and processors.

...
> +static inline ulong get_timer_usec(ulong base)
> +{
> +       ulong now = get_timer_masked_usec();
> +
> +       if (now >= base)
> +               return now - base;
^^^^^^^^^^^^^^

Here and elsewhere: please intent by TABs only.

Thanks.

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
You can fool some of the people all of the time, and You can fool all
of the people some of the time, but You can't fool mom.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-02-24 21:42 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-24 14:51 [U-Boot] [PATCH] at91: change CONFIG_SYS_HZ to 1000 Detlef Vollmann
2009-02-24 21:42 ` Wolfgang Denk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox