diff options
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/imx31/app.lds | 24 | ||||
-rw-r--r-- | firmware/target/arm/imx31/crt0.S | 20 | ||||
-rw-r--r-- | firmware/target/arm/imx31/sdma_script_code.h | 6 |
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 | ||
242 | 1: | ||
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 | */ |
359 | static __attribute__((aligned(4))) const short sdma_code_1[RAM_CODE_SIZE_1] = | 359 | static __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 | */ |
854 | static __attribute__((aligned(4))) const short sdma_code_2[RAM_CODE_SIZE_2] = | 855 | static __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, |