summaryrefslogtreecommitdiff
path: root/firmware/target/coldfire
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-02-20 02:33:40 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-02-20 02:33:40 +0000
commitec67912b638e0fae3cae7b4182d23db6d36c5135 (patch)
tree8101f45d02947a828d20174a45d1a6d19fafa3b2 /firmware/target/coldfire
parent07ae1e4fb9a1fd9d6ce9c48c5300b53e87303937 (diff)
downloadrockbox-ec67912b638e0fae3cae7b4182d23db6d36c5135.tar.gz
rockbox-ec67912b638e0fae3cae7b4182d23db6d36c5135.zip
Reclaim .iram areas in DRAM by overlapping their load addresses with the uninitialized data sections. I did what I could test out-- not any flash image linker scripts or other target processors. Move any .iram copies in crt0.S's to be the first operation even if not _strictly_ necessary to be emphatic (aka. 'beware').
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20061 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/coldfire')
-rw-r--r--firmware/target/coldfire/crt0.S21
-rw-r--r--firmware/target/coldfire/iaudio/app.lds14
-rw-r--r--firmware/target/coldfire/iriver/app.lds14
3 files changed, 28 insertions, 21 deletions
diff --git a/firmware/target/coldfire/crt0.S b/firmware/target/coldfire/crt0.S
index dbf01a347c..bc8a370823 100644
--- a/firmware/target/coldfire/crt0.S
+++ b/firmware/target/coldfire/crt0.S
@@ -234,15 +234,8 @@ start:
234 movec.l %d0,%acr1 234 movec.l %d0,%acr1
235 235
236#ifndef BOOTLOADER 236#ifndef BOOTLOADER
237 /* zero out .ibss */ 237 /* .iram copy is done first since it is reclaimed for other
238 lea _iedata,%a2 238 * uninitialized sections */
239 lea _iend,%a4
240 bra.b .iedatastart
241.iedataloop:
242 clr.l (%a2)+
243.iedatastart:
244 cmp.l %a2,%a4
245 bhi.b .iedataloop
246 239
247 /* copy the .iram section */ 240 /* copy the .iram section */
248 lea _iramcopy,%a2 241 lea _iramcopy,%a2
@@ -254,6 +247,16 @@ start:
254.iramstart: 247.iramstart:
255 cmp.l %a3,%a4 248 cmp.l %a3,%a4
256 bhi.b .iramloop 249 bhi.b .iramloop
250
251 /* zero out .ibss */
252 lea _iedata,%a2
253 lea _iend,%a4
254 bra.b .iedatastart
255.iedataloop:
256 clr.l (%a2)+
257.iedatastart:
258 cmp.l %a2,%a4
259 bhi.b .iedataloop
257#endif /* !BOOTLOADER */ 260#endif /* !BOOTLOADER */
258 261
259#ifdef IRIVER_H300_SERIES 262#ifdef IRIVER_H300_SERIES
diff --git a/firmware/target/coldfire/iaudio/app.lds b/firmware/target/coldfire/iaudio/app.lds
index d3ccce24f0..5cb2f6cb3f 100644
--- a/firmware/target/coldfire/iaudio/app.lds
+++ b/firmware/target/coldfire/iaudio/app.lds
@@ -94,6 +94,7 @@ SECTIONS
94 } > IRAM AT> DRAM 94 } > IRAM AT> DRAM
95 95
96 _iramcopy = LOADADDR(.iram); 96 _iramcopy = LOADADDR(.iram);
97 _noloaddram = LOADADDR(.iram);
97 98
98 .ibss (NOLOAD) : 99 .ibss (NOLOAD) :
99 { 100 {
@@ -103,7 +104,7 @@ SECTIONS
103 _iend = .; 104 _iend = .;
104 } > IRAM 105 } > IRAM
105 106
106 .stack : 107 .stack (NOLOAD) :
107 { 108 {
108 *(.stack) 109 *(.stack)
109 stackbegin = .; 110 stackbegin = .;
@@ -111,7 +112,7 @@ SECTIONS
111 stackend = .; 112 stackend = .;
112 } > IRAM 113 } > IRAM
113 114
114 .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram): 115 .bss _noloaddram (NOLOAD):
115 { 116 {
116 _edata = .; 117 _edata = .;
117 *(.bss*) 118 *(.bss*)
@@ -120,25 +121,26 @@ SECTIONS
120 _end = .; 121 _end = .;
121 } > DRAM 122 } > DRAM
122 123
123 .audiobuf ALIGN(4) : 124 .audiobuf (NOLOAD) :
124 { 125 {
126 . = ALIGN(4);
125 _audiobuffer = .; 127 _audiobuffer = .;
126 audiobuffer = .; 128 audiobuffer = .;
127 } > DRAM 129 } > DRAM
128 130
129 .audiobufend ENDAUDIOADDR: 131 .audiobufend ENDAUDIOADDR (NOLOAD) :
130 { 132 {
131 audiobufend = .; 133 audiobufend = .;
132 _audiobufend = .; 134 _audiobufend = .;
133 } > DRAM 135 } > DRAM
134 136
135 .codec ENDAUDIOADDR: 137 .codec ENDAUDIOADDR (NOLOAD) :
136 { 138 {
137 codecbuf = .; 139 codecbuf = .;
138 _codecbuf = .; 140 _codecbuf = .;
139 } 141 }
140 142
141 .plugin ENDADDR: 143 .plugin ENDADDR (NOLOAD) :
142 { 144 {
143 _pluginbuf = .; 145 _pluginbuf = .;
144 pluginbuf = .; 146 pluginbuf = .;
diff --git a/firmware/target/coldfire/iriver/app.lds b/firmware/target/coldfire/iriver/app.lds
index ae21ecd9de..d087f997c8 100644
--- a/firmware/target/coldfire/iriver/app.lds
+++ b/firmware/target/coldfire/iriver/app.lds
@@ -90,6 +90,7 @@ SECTIONS
90 } > IRAM AT> DRAM 90 } > IRAM AT> DRAM
91 91
92 _iramcopy = LOADADDR(.iram); 92 _iramcopy = LOADADDR(.iram);
93 _noloaddram = LOADADDR(.iram);
93 94
94 .ibss (NOLOAD) : 95 .ibss (NOLOAD) :
95 { 96 {
@@ -99,7 +100,7 @@ SECTIONS
99 _iend = .; 100 _iend = .;
100 } > IRAM 101 } > IRAM
101 102
102 .stack : 103 .stack (NOLOAD) :
103 { 104 {
104 *(.stack) 105 *(.stack)
105 stackbegin = .; 106 stackbegin = .;
@@ -107,7 +108,7 @@ SECTIONS
107 stackend = .; 108 stackend = .;
108 } > IRAM 109 } > IRAM
109 110
110 .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram): 111 .bss _noloaddram (NOLOAD) :
111 { 112 {
112 _edata = .; 113 _edata = .;
113 *(.bss*) 114 *(.bss*)
@@ -116,25 +117,26 @@ SECTIONS
116 _end = .; 117 _end = .;
117 } > DRAM 118 } > DRAM
118 119
119 .audiobuf ALIGN(4) : 120 .audiobuf (NOLOAD) :
120 { 121 {
122 . = ALIGN(4);
121 _audiobuffer = .; 123 _audiobuffer = .;
122 audiobuffer = .; 124 audiobuffer = .;
123 } > DRAM 125 } > DRAM
124 126
125 .audiobufend ENDAUDIOADDR: 127 .audiobufend ENDAUDIOADDR (NOLOAD) :
126 { 128 {
127 audiobufend = .; 129 audiobufend = .;
128 _audiobufend = .; 130 _audiobufend = .;
129 } > DRAM 131 } > DRAM
130 132
131 .codec ENDAUDIOADDR: 133 .codec ENDAUDIOADDR (NOLOAD) :
132 { 134 {
133 codecbuf = .; 135 codecbuf = .;
134 _codecbuf = .; 136 _codecbuf = .;
135 } 137 }
136 138
137 .plugin ENDADDR: 139 .plugin ENDADDR (NOLOAD) :
138 { 140 {
139 _pluginbuf = .; 141 _pluginbuf = .;
140 pluginbuf = .; 142 pluginbuf = .;