On Sat, 05 Sep 2009 16:33:13 +0100
"kevin.morf...@fearnside-systems.co.uk" <kevin.morf...@fearnside-systems.co.uk> 
wrote:

> This sets CONFIG_SYS_HZ to 1000 for all boards that use the s3c2400 and
> s3c2410 cpu's which fixes various problems such as the timeouts in tftp being
> too short.
> 
> Tested on an Embest SBC2440-II Board with local u-boot patches as I don't
> have any s3c2400 or s3c2410 boards but need this patch applying before I can
> submit patches for the SBC2440-II Board. Also, ran MAKEALL for all ARM9 
> targets
> and no new warnings or errors were found.
> 
> It was originally submitted on 21/06/2009 but didn't get into the 2009.08
> release, and Jean-Pierre made one comment on the original patch (see
> http://lists.denx.de/pipermail/u-boot/2009-July/055470.html). I've made two
> changes to the original patch:
> - it's been re-based to the current release
> - I've re-named get_timer_raw() to get_ticks() in response to Jean-Pierre's 
> comment
> 
> This affects the sbc2410, smdk2400, smdk2410 and trab boards. I've copied it
> directly to the maintainers of all except the sbc2410 which doesn't have an
> entry in MAINTAINERS.
> 
> Signed-off-by: Kevin Morfitt <kmorf...@aselaptop-1.localdomain>
> ---
>  cpu/arm920t/s3c24x0/timer.c |   36 ++++++++++++++++++++----------------
>  include/configs/sbc2410x.h  |    4 +---
>  include/configs/smdk2400.h  |    4 +---
>  include/configs/smdk2410.h  |    4 +---
>  include/configs/trab.h      |   12 +-----------
>  5 files changed, 24 insertions(+), 36 deletions(-)
> 
> diff --git a/cpu/arm920t/s3c24x0/timer.c b/cpu/arm920t/s3c24x0/timer.c
> index c8c7cdb..db472bf 100644
> --- a/cpu/arm920t/s3c24x0/timer.c
> +++ b/cpu/arm920t/s3c24x0/timer.c
> @@ -39,6 +39,7 @@
>  #endif
> 
>  int timer_load_val = 0;
> +static ulong timer_clk;
> 
>  /* macro to read the 16 bit timer */
>  static inline ulong READ_TIMER(void)
> @@ -66,6 +67,7 @@ int timer_init (void)
>                * @33.25MHz and 15625 @ 50 MHz
>                */
>               timer_load_val = get_PCLK()/(2 * 16 * 100);
> +             timer_clk = get_PCLK() / (2 * 16);
>       }
>       /* load value for 10 ms timeout */
>       lastdec = timers->TCNTB4 = timer_load_val;
> @@ -100,13 +102,13 @@ void set_timer (ulong t)
>  void udelay (unsigned long usec)
>  {
>       ulong tmo;
> -     ulong start = get_timer(0);
> +     ulong start = get_ticks();
> 
>       tmo = usec / 1000;
>       tmo *= (timer_load_val * 100);
>       tmo /= 1000;
> 
> -     while ((ulong)(get_timer_masked () - start) < tmo)
> +     while ((ulong) (get_ticks() - start) < tmo)
>               /*NOP*/;
>  }
> 
> @@ -119,18 +121,9 @@ void reset_timer_masked (void)
> 
>  ulong get_timer_masked (void)
>  {
> -     ulong now = READ_TIMER();
> -
> -     if (lastdec >= now) {
> -             /* normal mode */
> -             timestamp += lastdec - now;
> -     } else {
> -             /* we have an overflow ... */
> -             timestamp += lastdec + timer_load_val - now;
> -     }
> -     lastdec = now;
> +     ulong tmr = get_ticks();
> 
> -     return timestamp;
> +     return tmr / (timer_clk / CONFIG_SYS_HZ);
>  }
> 
>  void udelay_masked (unsigned long usec)
> @@ -148,10 +141,10 @@ void udelay_masked (unsigned long usec)
>               tmo /= (1000*1000);
>       }
> 
> -     endtime = get_timer_masked () + tmo;
> +     endtime = get_ticks() + tmo;
> 
>       do {
> -             ulong now = get_timer_masked ();
> +             ulong now = get_ticks();
>               diff = endtime - now;
>       } while (diff >= 0);
>  }
> @@ -162,7 +155,18 @@ void udelay_masked (unsigned long usec)
>   */
>  unsigned long long get_ticks(void)
>  {
> -     return get_timer(0);
> +     ulong now = READ_TIMER();
> +
> +     if (lastdec >= now) {
> +             /* normal mode */
> +             timestamp += lastdec - now;
> +     } else {
> +             /* we have an overflow ... */
> +             timestamp += lastdec + timer_load_val - now;
> +     }
> +     lastdec = now;
> +
> +     return timestamp;
>  }
> 
>  /*
> diff --git a/include/configs/sbc2410x.h b/include/configs/sbc2410x.h
> index f2ea926..e6886cf 100644
> --- a/include/configs/sbc2410x.h
> +++ b/include/configs/sbc2410x.h
> @@ -139,9 +139,7 @@
> 
>  #define      CONFIG_SYS_LOAD_ADDR            0x33000000      /* default load 
> address */
> 
> -/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
> -/* it to wrap 100 times (total 1562500) to get 1 sec. */
> -#define      CONFIG_SYS_HZ                   1562500
> +#define      CONFIG_SYS_HZ                   1000
> 
>  /* valid baudrates */
>  #define CONFIG_SYS_BAUDRATE_TABLE    { 9600, 19200, 38400, 57600, 115200 }
> diff --git a/include/configs/smdk2400.h b/include/configs/smdk2400.h
> index c234177..a1beb65 100644
> --- a/include/configs/smdk2400.h
> +++ b/include/configs/smdk2400.h
> @@ -141,9 +141,7 @@
> 
>  #define      CONFIG_SYS_LOAD_ADDR            0x0cf00000      /* default load 
> address */
> 
> -/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
> -/* it to wrap 100 times (total 1562500) to get 1 sec. */
> -#define      CONFIG_SYS_HZ                   1562500
> +#define      CONFIG_SYS_HZ                   1000
> 
>  /* valid baudrates */
>  #define CONFIG_SYS_BAUDRATE_TABLE    { 9600, 19200, 38400, 57600, 115200 }
> diff --git a/include/configs/smdk2410.h b/include/configs/smdk2410.h
> index d340098..c57751b 100644
> --- a/include/configs/smdk2410.h
> +++ b/include/configs/smdk2410.h
> @@ -124,9 +124,7 @@
> 
>  #define      CONFIG_SYS_LOAD_ADDR            0x33000000      /* default load 
> address */
> 
> -/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
> -/* it to wrap 100 times (total 1562500) to get 1 sec. */
> -#define      CONFIG_SYS_HZ                   1562500
> +#define      CONFIG_SYS_HZ                   1000
> 
>  /* valid baudrates */
>  #define CONFIG_SYS_BAUDRATE_TABLE    { 9600, 19200, 38400, 57600, 115200 }
> diff --git a/include/configs/trab.h b/include/configs/trab.h
> index 43c191b..97f30ce 100644
> --- a/include/configs/trab.h
> +++ b/include/configs/trab.h
> @@ -320,17 +320,7 @@
> 
>  #define      CONFIG_SYS_LOAD_ADDR            0x0CF00000      /* default load 
> address */
> 
> -#ifdef CONFIG_TRAB_50MHZ
> -/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
> -/* it to wrap 100 times (total 1562500) to get 1 sec. */
> -/* this should _really_ be calculated !! */
> -#define      CONFIG_SYS_HZ                   1562500
> -#else
> -/* the PWM TImer 4 uses a counter of 10390 for 10 ms, so we need */
> -/* it to wrap 100 times (total 1039000) to get 1 sec. */
> -/* this should _really_ be calculated !! */
> -#define      CONFIG_SYS_HZ                   1039000
> -#endif
> +#define      CONFIG_SYS_HZ                   1000
> 
>  /* valid baudrates */
>  #define CONFIG_SYS_BAUDRATE_TABLE    { 9600, 19200, 38400, 57600, 115200 }
> -- 
> 1.6.0.6

I don't have any hardware to test this on, but I strongly suspect that
your changes break get_tbclk() for SMDK2400 and TRAB.

It looks like the correct fix would be to remove all the idef's and
simply set tbclk = CONFIG_SYS_HZ for all boards in get_tbclk().

---
Gary Jennejohn
*********************************************************************
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: off...@denx.de
*********************************************************************
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to