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

2008-11-02 Thread Jean-Christophe PLAGNIOL-VILLARD
On 09:00 Wed 22 Oct , Wolfgang Denk wrote:
> From: Sergei Poselenov <[EMAIL PROTECTED]>
> 
> Also make sure to feed the right compiler options.
> 
> Signed-off-by: Sergei Poselenov <[EMAIL PROTECTED]>
> Signed-off-by: Wolfgang Denk <[EMAIL PROTECTED]>
> ---
> These changes are needed with some more recent tool chain versions
> (including ELDK 4.2).
> 
>  board/integratorcp/integratorcp.c |7 ++-
>  board/trab/tsc2000.c  |   10 ++
>  cpu/arm1176/s3c64xx/interrupts.c  |5 -
>  cpu/arm946es/config.mk|7 +++
>  cpu/arm_intcm/config.mk   |7 +++
>  5 files changed, 30 insertions(+), 6 deletions(-)

do you have any plan to rebase it?

Best Regards,
J.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


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

2008-10-24 Thread Wolfgang Denk
Dear Jean-Christophe PLAGNIOL-VILLARD,

In message <[EMAIL PROTECTED]> you wrote:
>
...
>   CFG_HZ was renamed CONFIG_SYS_HZ
...
> I've start to think to re-rename it CFG_HZ as done in Linux, normaly this
> value is the same for all arch & board

Mind that there is a slight difference in meaning and a bigger one in
implementation.

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]
Anyone who doesn't believe in miracles is not a realist.
   - David Ben Gurion
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


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

2008-10-24 Thread Jean-Christophe PLAGNIOL-VILLARD
>  #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)));
> + return res;
CFG_HZ was renamed CONFIG_SYS_HZ
>  }

I've start to think to re-rename it CFG_HZ as done in Linux, normaly this
value is the same for all arch & board

Best Regards,
J.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


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

2008-10-22 Thread Wolfgang Denk
From: Sergei Poselenov <[EMAIL PROTECTED]>

Also make sure to feed the right compiler options.

Signed-off-by: Sergei Poselenov <[EMAIL PROTECTED]>
Signed-off-by: Wolfgang Denk <[EMAIL PROTECTED]>
---
These changes are needed with some more recent tool chain versions
(including ELDK 4.2).

 board/integratorcp/integratorcp.c |7 ++-
 board/trab/tsc2000.c  |   10 ++
 cpu/arm1176/s3c64xx/interrupts.c  |5 -
 cpu/arm946es/config.mk|7 +++
 cpu/arm_intcm/config.mk   |7 +++
 5 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/board/integratorcp/integratorcp.c 
b/board/integratorcp/integratorcp.c
index d6d6e13..220513f 100644
--- a/board/integratorcp/integratorcp.c
+++ b/board/integratorcp/integratorcp.c
@@ -34,6 +34,7 @@
  */
 
 #include 
+#include 
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -244,7 +245,11 @@ ulong get_timer_masked (void)
total_count += lastdec - now;
}
lastdec   = now;
-   timestamp = (ulong)(total_count/div_timer);
+
+   /* Reuse "now" */
+   now = total_count;
+   do_div(now, div_timer);
+   timestamp = now;
 
return timestamp;
 }
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]));
+   *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)));
+   return res;
 }
 
 ulong get_timer(ulong base)
diff --git a/cpu/arm946es/config.mk b/cpu/arm946es/config.mk
index 81ca288..f774c7e 100644
--- a/cpu/arm946es/config.mk
+++ b/cpu/arm946es/config.mk
@@ -25,3 +25,10 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common 
-ffixed-r8 \
 -msoft-float
 
 PLATFORM_CPPFLAGS +=  -march=armv4
+# =
+#
+# Supply options according to compiler version
+#
+# =
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call 
cc-option,-malignment-traps,))
diff --git a/cpu/arm_intcm/config.mk b/cpu/arm_intcm/config.mk
index 81ca288..f774c7e 100644
--- a/cpu/arm_intcm/config.mk
+++ b/cpu/arm_intcm/config.mk
@@ -25,3 +25,10 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common 
-ffixed-r8 \
 -msoft-float
 
 PLATFORM_CPPFLAGS +=  -march=armv4
+# =
+#
+# Supply options according to compiler version
+#
+# =
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call 
cc-option,-malignment-traps,))
-- 
1.5.5.1

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


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

2008-09-08 Thread Jean-Christophe PLAGNIOL-VILLARD
On 05:34 Tue 09 Sep , Gururaja Hebbar K R wrote:
>  Hmm,
> 
> Interestingly i had sent a patch for the same for both
> integrator[ap/cp].
> http://article.gmane.org/gmane.comp.boot-loaders.u-boot/46044. 
> 

mail tag as SPAM in my mail box as a lot of your mail.

I'll take a look why.

Best Regards,
J.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


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

2008-09-08 Thread Gururaja Hebbar K R
 Hmm,

Interestingly i had sent a patch for the same for both
integrator[ap/cp].
http://article.gmane.org/gmane.comp.boot-loaders.u-boot/46044. 

i had sent it to Jean-Christophe PLAGNIOL-VILLARD & Peter Pearse & also
to U-Boot user list. 

Don't know y it didn't reach there.

Regards
Gururaja

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


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

2008-09-08 Thread Wolfgang Denk
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.

 board/integratorcp/integratorcp.c |7 ++-
 board/trab/tsc2000.c  |   10 ++
 cpu/arm1176/s3c64xx/interrupts.c  |5 -
 cpu/arm946es/config.mk|7 +++
 cpu/arm_intcm/config.mk   |7 +++
 5 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/board/integratorcp/integratorcp.c 
b/board/integratorcp/integratorcp.c
index d6d6e13..220513f 100644
--- a/board/integratorcp/integratorcp.c
+++ b/board/integratorcp/integratorcp.c
@@ -34,6 +34,7 @@
  */
 
 #include 
+#include 
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -244,7 +245,11 @@ ulong get_timer_masked (void)
total_count += lastdec - now;
}
lastdec   = now;
-   timestamp = (ulong)(total_count/div_timer);
+
+   /* Reuse "now" */
+   now = total_count;
+   do_div(now, div_timer);
+   timestamp = now;
 
return timestamp;
 }
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]));
+   *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)));
+   return res;
 }
 
 ulong get_timer(ulong base)
diff --git a/cpu/arm946es/config.mk b/cpu/arm946es/config.mk
index 81ca288..f774c7e 100644
--- a/cpu/arm946es/config.mk
+++ b/cpu/arm946es/config.mk
@@ -25,3 +25,10 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common 
-ffixed-r8 \
 -msoft-float
 
 PLATFORM_CPPFLAGS +=  -march=armv4
+# =
+#
+# Supply options according to compiler version
+#
+# =
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call 
cc-option,-malignment-traps,))
diff --git a/cpu/arm_intcm/config.mk b/cpu/arm_intcm/config.mk
index 81ca288..f774c7e 100644
--- a/cpu/arm_intcm/config.mk
+++ b/cpu/arm_intcm/config.mk
@@ -25,3 +25,10 @@ PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common 
-ffixed-r8 \
 -msoft-float
 
 PLATFORM_CPPFLAGS +=  -march=armv4
+# =
+#
+# Supply options according to compiler version
+#
+# =
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call 
cc-option,-malignment-traps,))
-- 
1.5.4.2

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