summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwdenk <wdenk>2004-06-09 00:10:59 +0000
committerwdenk <wdenk>2004-06-09 00:10:59 +0000
commit356a0d9f3123b57392935febd300ce32e63f1278 (patch)
treeac7c15b22c86a9c0c1d927bd300dc90847014cef
parent1eaeb58e3c0022812b70d717bf1f458cfb48fdd3 (diff)
Patch by Markus Pietrek, 04 May 2004:
Fix clear_bss code for ARM systems (all except s3c44b0 which doesn't clear BSS at all?)
-rw-r--r--CHANGELOG10
-rw-r--r--cpu/arm720t/start.S1
-rw-r--r--cpu/arm920t/start.S1
-rw-r--r--cpu/arm925t/start.S1
-rw-r--r--cpu/arm926ejs/start.S1
-rw-r--r--cpu/at91rm9200/start.S1
-rw-r--r--cpu/ixp/start.S1
-rw-r--r--cpu/pxa/start.S1
-rw-r--r--cpu/sa1100/start.S1
-rw-r--r--drivers/inca-ip_sw.c12
10 files changed, 20 insertions, 10 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 4cd62f66e6..82d977ee2d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,16 @@
Changes since U-Boot 1.1.1:
======================================================================
+* Patch by Markus Pietrek, 04 May 2004:
+ Fix clear_bss code for ARM systems (all except s3c44b0 which
+ doesn't clear BSS at all?)
+
+* Fix "ping" problem on INC-IP board. Strange problem:
+ Sometimes the store word instruction hangs while writing to one of
+ the Switch registers, but only if the next instruction is 16-byte
+ aligned. Moving the instruction into a separate function somehow
+ makes the problem go away.
+
* Patch by Rishi Bhattacharya, 08 May 2004:
Add support for TI OMAP5912 OSK Board
diff --git a/cpu/arm720t/start.S b/cpu/arm720t/start.S
index 791049a2f5..f6ae9d67a4 100644
--- a/cpu/arm720t/start.S
+++ b/cpu/arm720t/start.S
@@ -154,7 +154,6 @@ stack_setup:
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
- add r0, r0, #4 /* start at first byte of bss */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
diff --git a/cpu/arm920t/start.S b/cpu/arm920t/start.S
index 49264da992..0e372d0e4c 100644
--- a/cpu/arm920t/start.S
+++ b/cpu/arm920t/start.S
@@ -191,7 +191,6 @@ stack_setup:
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
- add r0, r0, #4 /* start at first byte of bss */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
diff --git a/cpu/arm925t/start.S b/cpu/arm925t/start.S
index da84de19bd..134a57639e 100644
--- a/cpu/arm925t/start.S
+++ b/cpu/arm925t/start.S
@@ -197,7 +197,6 @@ stack_setup:
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
- add r0, r0, #4 /* start at first byte of bss */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
diff --git a/cpu/arm926ejs/start.S b/cpu/arm926ejs/start.S
index ad5d84770e..70be4de628 100644
--- a/cpu/arm926ejs/start.S
+++ b/cpu/arm926ejs/start.S
@@ -172,7 +172,6 @@ stack_setup:
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
- add r0, r0, #4 /* start at first byte of bss */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
diff --git a/cpu/at91rm9200/start.S b/cpu/at91rm9200/start.S
index b9b889ab8c..d73af20dfb 100644
--- a/cpu/at91rm9200/start.S
+++ b/cpu/at91rm9200/start.S
@@ -147,7 +147,6 @@ stack_setup:
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
- add r0, r0, #4 /* start at first byte of bss */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
diff --git a/cpu/ixp/start.S b/cpu/ixp/start.S
index 09ecc73a00..9240b5cd3e 100644
--- a/cpu/ixp/start.S
+++ b/cpu/ixp/start.S
@@ -289,7 +289,6 @@ stack_setup:
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
- add r0, r0, #4 /* start at first byte of bss */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
diff --git a/cpu/pxa/start.S b/cpu/pxa/start.S
index de2a084aad..b1f6e7e615 100644
--- a/cpu/pxa/start.S
+++ b/cpu/pxa/start.S
@@ -141,7 +141,6 @@ stack_setup:
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
- add r0, r0, #4 /* start at first byte of bss */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
diff --git a/cpu/sa1100/start.S b/cpu/sa1100/start.S
index fe1316cbe7..52f2c5d36e 100644
--- a/cpu/sa1100/start.S
+++ b/cpu/sa1100/start.S
@@ -154,7 +154,6 @@ stack_setup:
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
- add r0, r0, #4 /* start at first byte of bss */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
diff --git a/drivers/inca-ip_sw.c b/drivers/inca-ip_sw.c
index f8fe52ea26..ab22b4d538 100644
--- a/drivers/inca-ip_sw.c
+++ b/drivers/inca-ip_sw.c
@@ -41,13 +41,21 @@
#define DELAY udelay(10000)
+ /* Sometimes the store word instruction hangs while writing to one
+ * of the Switch registers. Moving the instruction into a separate
+ * function somehow makes the problem go away.
+ */
+static void SWORD(volatile u32 * reg, u32 value)
+{
+ *reg = value;
+}
#define DMA_WRITE_REG(reg, value) *((volatile u32 *)reg) = (u32)value;
#define DMA_READ_REG(reg, value) value = (u32)*((volatile u32*)reg)
#define SW_WRITE_REG(reg, value) \
- *((volatile u32*)reg) = (u32)value;\
+ SWORD(reg, value);\
DELAY;\
- *((volatile u32*)reg) = (u32)value;
+ SWORD(reg, value);
#define SW_READ_REG(reg, value) \
value = (u32)*((volatile u32*)reg);\