From 356a0d9f3123b57392935febd300ce32e63f1278 Mon Sep 17 00:00:00 2001 From: wdenk Date: Wed, 9 Jun 2004 00:10:59 +0000 Subject: Patch by Markus Pietrek, 04 May 2004: Fix clear_bss code for ARM systems (all except s3c44b0 which doesn't clear BSS at all?) --- CHANGELOG | 10 ++++++++++ cpu/arm720t/start.S | 1 - cpu/arm920t/start.S | 1 - cpu/arm925t/start.S | 1 - cpu/arm926ejs/start.S | 1 - cpu/at91rm9200/start.S | 1 - cpu/ixp/start.S | 1 - cpu/pxa/start.S | 1 - cpu/sa1100/start.S | 1 - drivers/inca-ip_sw.c | 12 ++++++++++-- 10 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 4cd62f66e..82d977ee2 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 791049a2f..f6ae9d67a 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 49264da99..0e372d0e4 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 da84de19b..134a57639 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 ad5d84770..70be4de62 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 b9b889ab8..d73af20df 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 09ecc73a0..9240b5cd3 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 de2a084aa..b1f6e7e61 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 fe1316cbe..52f2c5d36 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 f8fe52ea2..ab22b4d53 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);\ -- cgit v1.2.3