summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/imx31/app.lds24
-rw-r--r--firmware/target/arm/imx31/crt0.S20
-rw-r--r--firmware/target/arm/imx31/sdma_script_code.h6
3 files changed, 41 insertions, 9 deletions
diff --git a/firmware/target/arm/imx31/app.lds b/firmware/target/arm/imx31/app.lds
index 4ab4665062..4ee7ac45d4 100644
--- a/firmware/target/arm/imx31/app.lds
+++ b/firmware/target/arm/imx31/app.lds
@@ -91,16 +91,18 @@ SECTIONS
91 } AT> DRAM 91 } AT> DRAM
92 92
93 _vectorscopy = LOADADDR(.vectors); 93 _vectorscopy = LOADADDR(.vectors);
94 94
95 .stack : 95 .stack (NOLOAD) :
96 { 96 {
97 *(.stack) 97 *(.stack)
98 stackbegin = .; 98 stackbegin = .;
99 . += 0x2000; 99 . += 0x2000;
100 stackend = .; 100 stackend = .;
101 } > DRAM 101 } > DRAM
102
103 _sdmacodecopy = stackbegin;
102 104
103 .bss : 105 .bss (NOLOAD) :
104 { 106 {
105 _edata = .; 107 _edata = .;
106 *(.bss*) 108 *(.bss*)
@@ -110,30 +112,38 @@ SECTIONS
110 _end = .; 112 _end = .;
111 } > DRAM 113 } > DRAM
112 114
113 .audiobuf ALIGN(4) : 115 .audiobuf (NOLOAD) :
114 { 116 {
117 . = ALIGN(0x4);
115 _audiobuffer = .; 118 _audiobuffer = .;
116 audiobuffer = .; 119 audiobuffer = .;
117 } > DRAM 120 } > DRAM
118 121
119 .audiobufend ENDAUDIOADDR: 122 .audiobufend ENDAUDIOADDR (NOLOAD) :
120 { 123 {
121 audiobufend = .; 124 audiobufend = .;
122 _audiobufend = .; 125 _audiobufend = .;
123 } > DRAM 126 } > DRAM
124 127
125 .codec ENDAUDIOADDR: 128 .codec ENDAUDIOADDR (NOLOAD) :
126 { 129 {
127 codecbuf = .; 130 codecbuf = .;
128 _codecbuf = .; 131 _codecbuf = .;
129 } 132 }
130 133
131 .plugin ENDADDR: 134 .plugin ENDADDR (NOLOAD) :
132 { 135 {
133 _pluginbuf = .; 136 _pluginbuf = .;
134 pluginbuf = .; 137 pluginbuf = .;
135 } 138 }
136 139
140 .sdma _pluginbuf : AT( _sdmacodecopy )
141 {
142 _sdmacodestart = .;
143 *(.sdmacode);
144 _sdmacodeend = .;
145 }
146
137 .devbss (NOLOAD) : 147 .devbss (NOLOAD) :
138 { 148 {
139 _devbssdata = .; 149 _devbssdata = .;
diff --git a/firmware/target/arm/imx31/crt0.S b/firmware/target/arm/imx31/crt0.S
index 8459753f87..d51de7215a 100644
--- a/firmware/target/arm/imx31/crt0.S
+++ b/firmware/target/arm/imx31/crt0.S
@@ -231,6 +231,26 @@ remap_end:
231 bhi 1b 231 bhi 1b
232#endif /* BOOTLOADER */ 232#endif /* BOOTLOADER */
233 233
234#ifndef BOOTLOADER
235 /* Copy discardable SDMA code - loaded in the stack section
236 * and so must be done first. Destination is the plugin buffer
237 * which is safe when SDMA init takes place just after kernel
238 * init. */
239 ldr r4, =_sdmacodecopy
240 ldr r3, =_sdmacodeend
241 ldr r2, =_sdmacodestart
2421:
243 cmp r3, r2
244 ldrhi r5, [r4], #4
245 strhi r5, [r2], #4
246 bhi 1b
247
248 /* Make buffer coherent */
249 ldr r0, =_sdmacodestart
250 sub r1, r3, r0
251 bl clean_dcache_range
252#endif /* BOOTLOADER */
253
234 /* Initialise bss section to zero */ 254 /* Initialise bss section to zero */
235 ldr r2, =_edata 255 ldr r2, =_edata
236 ldr r3, =_end 256 ldr r3, =_end
diff --git a/firmware/target/arm/imx31/sdma_script_code.h b/firmware/target/arm/imx31/sdma_script_code.h
index b80c39534b..1e75267a76 100644
--- a/firmware/target/arm/imx31/sdma_script_code.h
+++ b/firmware/target/arm/imx31/sdma_script_code.h
@@ -356,7 +356,8 @@
356/*! 356/*!
357 * Code download for i.MX system revision = 1.0 357 * Code download for i.MX system revision = 1.0
358 */ 358 */
359static __attribute__((aligned(4))) const short sdma_code_1[RAM_CODE_SIZE_1] = 359static __attribute__((aligned(4), section(".sdmacode")))
360 const short sdma_code_1[RAM_CODE_SIZE_1] =
360{ 361{
361 0xc0ec, 0x7d59, 0x0970, 0x0111, 0x5111, 0x5ad1, 0x5bd9, 0xc0fe, 362 0xc0ec, 0x7d59, 0x0970, 0x0111, 0x5111, 0x5ad1, 0x5bd9, 0xc0fe,
362 0x5ce1, 0x7d02, 0x0200, 0x9806, 0x08ff, 0x0011, 0x28ff, 0x00bc, 363 0x5ce1, 0x7d02, 0x0200, 0x9806, 0x08ff, 0x0011, 0x28ff, 0x00bc,
@@ -851,7 +852,8 @@ static __attribute__((aligned(4))) const short sdma_code_1[RAM_CODE_SIZE_1] =
851/*! 852/*!
852 * Code download for i.MX system revision > 1.0 853 * Code download for i.MX system revision > 1.0
853 */ 854 */
854static __attribute__((aligned(4))) const short sdma_code_2[RAM_CODE_SIZE_2] = 855static __attribute__((aligned(4), section(".sdmacode")))
856 const short sdma_code_2[RAM_CODE_SIZE_2] =
855{ 857{
856 0x0870, 0x0011, 0x5010, 0xc0ec, 0x7d61, 0x5ac0, 0x5bc8, 0x5ef8, 858 0x0870, 0x0011, 0x5010, 0xc0ec, 0x7d61, 0x5ac0, 0x5bc8, 0x5ef8,
857 0xc0fe, 0x56f8, 0x7d02, 0x0200, 0x9806, 0x6ec3, 0x6d07, 0x5df0, 859 0xc0fe, 0x56f8, 0x7d02, 0x0200, 0x9806, 0x6ec3, 0x6d07, 0x5df0,