Re: [U-Boot] [PATCH v2] ARM: Use do_div() instead of division for "long long".

2008-09-11 Thread Haavard Skinnemoen
On Tue,  9 Sep 2008 02:08:31 +0200
Wolfgang Denk <[EMAIL PROTECTED]> wrote:

> From: Sergei Poselenov <[EMAIL PROTECTED]>
> 
> Signed-off-by: Sergei Poselenov <[EMAIL PROTECTED]>
> Signed-off-by: Wolfgang Denk <[EMAIL PROTECTED]>
> ---
> 
> With some (more recent) compiler versions there are problems because
> of the use of "long long" divisions in the U-Boot code. For ARM, this
> requires the __udivdi3 GCC library function, which currently is not
> present in lib_arm. This function was present in older 2.6 kernels,
> but at some point it was removed from here, with suggestion to use
> do_div() instead. In U-boot, the do_div() function is available, too,
> so this patch generally does the replacement of the "long long"
> divisions to do_div() to avoid the aforementions issues.

Could you please move that nice explanation above the '---' line? I
think it's really useful to have the reason behind a particular change
in the commit history.

Haavard
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v2] ARM: Use do_div() instead of division for "long long".

2008-09-09 Thread Wolfgang Denk
Dear Guennadi Liakhovetski,

In message <[EMAIL PROTECTED]> you wrote:
> 
> > +   do_div(val, (data[i][0] - data[i-1][0]));
> 
> Looking at how do_div() is defined, and it handles its parameters 
> carefully, one shouldn't need the extra parenthesis here, i.e.,

The are not exactly need (and actually a remainder from  the  copy  &
paste of the old code), but on the other hand they don't hurt either,
and they make the argument's easier to parse, at least to my eyes.


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: [EMAIL PROTECTED]
Felson's Law:
To steal ideas from one person is plagiarism; to steal from
many is research.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v2] ARM: Use do_div() instead of division for "long long".

2008-09-09 Thread Guennadi Liakhovetski
On Tue, 9 Sep 2008, Wolfgang Denk wrote:

> diff --git a/board/trab/tsc2000.c b/board/trab/tsc2000.c
> index 382a85b..f13a5a9 100644
> --- a/board/trab/tsc2000.c
> +++ b/board/trab/tsc2000.c
> @@ -27,6 +27,7 @@
>  
>  #include 
>  #include 
> +#include 
>  #include "tsc2000.h"
>  
>  #include "Pt1000_temp_data.h"
> @@ -332,6 +333,7 @@ void tsc2000_reg_init (void)
>  int tsc2000_interpolate(long value, long data[][2], long *result)
>  {
>   int i;
> + unsigned long long val;
>  
>   /* the data is sorted and the first element is upper
>* limit so we can easily check for out-of-band values
> @@ -347,10 +349,10 @@ int tsc2000_interpolate(long value, long data[][2], 
> long *result)
>  result in 'long long'.
>   */
>  
> - *result = data[i-1][1] +
> - ((unsigned long long)(data[i][1] - data[i-1][1])
> -  * (unsigned long long)(value - data[i-1][0]))
> - / (data[i][0] - data[i-1][0]);
> + val = ((unsigned long long)(data[i][1] - data[i-1][1])
> +* (unsigned long long)(value - data[i-1][0]));
> + do_div(val, (data[i][0] - data[i-1][0]));

Looking at how do_div() is defined, and it handles its parameters 
carefully, one shouldn't need the extra parenthesis here, i.e.,

+   do_div(val, data[i][0] - data[i-1][0]);

should be enough.

> + *result = data[i-1][1] + val;
>  
>   return 0;
>  }
> diff --git a/cpu/arm1176/s3c64xx/interrupts.c 
> b/cpu/arm1176/s3c64xx/interrupts.c
> index 8356ae4..e34369f 100644
> --- a/cpu/arm1176/s3c64xx/interrupts.c
> +++ b/cpu/arm1176/s3c64xx/interrupts.c
> @@ -41,6 +41,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  static ulong timer_load_val;
>  
> @@ -148,7 +149,9 @@ void reset_timer(void)
>  
>  ulong get_timer_masked(void)
>  {
> - return get_ticks() / (timer_load_val / (100 * CFG_HZ));
> + unsigned long long res = get_ticks();
> + do_div (res, (timer_load_val / (100 * CFG_HZ)));

Same here.

+   do_div (res, timer_load_val / (100 * CFG_HZ));

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.

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: [EMAIL PROTECTED]
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot