From 4c36166be2785c225ab6f03a3a38b607d033dad5 Mon Sep 17 00:00:00 2001
From: laforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1>
Date: Wed, 20 Sep 2006 07:52:39 +0000
Subject: - fix relocation of _data_shared segment

git-svn-id: https://svn.openpcd.org:2342/trunk@205 6dc7ffe9-61d6-0310-9af1-9938baff3ed1
---
 firmware/src/start/Cstartup.S | 33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)

(limited to 'firmware/src/start')

diff --git a/firmware/src/start/Cstartup.S b/firmware/src/start/Cstartup.S
index 5ed2712..f1c341e 100644
--- a/firmware/src/start/Cstartup.S
+++ b/firmware/src/start/Cstartup.S
@@ -312,15 +312,16 @@ InitReset:
                 msr     CPSR_c, #ARM_MODE_SVC
                 mov     r13, r0                     /* Init stack Sup */
 
-# Relocate DFU .data section (Copy from ROM to RAM)
+# Relocate DFU .data.shared section (Copy from ROM to RAM)
                 LDR     R1, =_etext
-                LDR     R2, =_data
-                LDR     R3, =_edata
-LoopRel:        CMP     R2, R3
+                LDR     R2, =_data_shared
+                LDR     R3, =_edata_shared
+LoopRelDS:      CMP     R2, R3
                 LDRLO   R0, [R1], #4
                 STRLO   R0, [R2], #4
-                BLO     LoopRel
+                BLO     LoopRelDS
 
+/*
 # Clear DFU .bss section (Zero init)
                 MOV     R0, #0
                 LDR     R1, =__bss_start__
@@ -328,6 +329,7 @@ LoopRel:        CMP     R2, R3
 LoopZI:         CMP     R1, R2
                 STRLO   R0, [R1], #4
                 BLO     LoopZI
+*/
 
 		/* prepare c function call to main */
 		mov	r0, #0	/* argc = 0 */
@@ -343,13 +345,30 @@ LoopZI:         CMP     R1, R2
 		ldr 	r1, =AT91C_BASE_PIOA
 		ldr	r2, [r1, #PIOA_PDSR]
 		tst	r2, #PIO_BOOTLDR
-		bne	_reloc_dfu_text
+		bne	_reloc_dfu
 #endif
 
 		bx	r10
 
-_reloc_dfu_text:
+_reloc_dfu:
+		/* Relocate DFU .data section (Copy from ROM to RAM) */
+                LDR     R1, =_edata_shared
+                LDR     R2, =_data
+                LDR     R3, =_edata
+LoopRel:        CMP     R2, R3
+                LDRLO   R0, [R1], #4
+                STRLO   R0, [R2], #4
+                BLO     LoopRel
+
+		/* Clear DFU .bss section (Zero init) */
+                MOV     R0, #0
+                LDR     R1, =__bss_start__
+                LDR     R2, =__bss_end__
+LoopZI:         CMP     R1, R2
+                STRLO   R0, [R1], #4
+                BLO     LoopZI
 
+		/* relocate DFU .text into RAM */
 		ldr	r1, =0x00100000
 		ldr	r2, =0x00200000
 		ldr	r3, =_etext
-- 
cgit v1.2.3