diff options
Diffstat (limited to 'firmware/target/arm/tms320dm320/app.lds')
-rw-r--r-- | firmware/target/arm/tms320dm320/app.lds | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/firmware/target/arm/tms320dm320/app.lds b/firmware/target/arm/tms320dm320/app.lds index 6ceb512d21..b35ace1ce6 100644 --- a/firmware/target/arm/tms320dm320/app.lds +++ b/firmware/target/arm/tms320dm320/app.lds | |||
@@ -14,22 +14,29 @@ STARTUP(target/arm/tms320dm320/crt0.o) | |||
14 | #define LCD_NATIVE_HEIGHT LCD_HEIGHT | 14 | #define LCD_NATIVE_HEIGHT LCD_HEIGHT |
15 | #endif | 15 | #endif |
16 | 16 | ||
17 | #define LCD_FUDGE LCD_NATIVE_WIDTH%32 | ||
18 | |||
19 | #define LCD_BUFFER_SIZE ((LCD_NATIVE_WIDTH+LCD_FUDGE)*LCD_NATIVE_HEIGHT*2) | ||
20 | |||
21 | /* must be 16Kb (0x4000) aligned */ | 17 | /* must be 16Kb (0x4000) aligned */ |
22 | #define TTB_SIZE 0x4000 | 18 | #define TTB_SIZE 0x4000 |
23 | 19 | ||
20 | #define DRAMSIZE (MEMORYSIZE * 0x100000) | ||
21 | #define DRAMORIG CONFIG_SDRAM_START | ||
22 | |||
23 | |||
24 | #ifdef MROBE_500 | ||
25 | #define LCD_FUDGE LCD_NATIVE_WIDTH%32 | ||
26 | #define LCD_BUFFER_SIZE ((LCD_NATIVE_WIDTH+LCD_FUDGE)*LCD_NATIVE_HEIGHT*2) | ||
24 | /* Give this some memory to allow it to align to the MMU boundary. | 27 | /* Give this some memory to allow it to align to the MMU boundary. |
25 | * Note that since there are two buffers (YUV/RGB) it calculates the approximate | 28 | * Note that since there are two buffers (YUV/RGB) it calculates the approximate |
26 | * memory needed in steps of 1 Meg. | 29 | * memory needed in steps of 1 Meg. |
27 | */ | 30 | */ |
28 | #define LCD_TTB_AREA 0x100000*((LCD_BUFFER_SIZE>>19)+1) | 31 | #define LCD_TTB_AREA (0x100000*((LCD_BUFFER_SIZE>>19)+1)) |
29 | 32 | #else | |
30 | #define DRAMSIZE (MEMORYSIZE * 0x100000) | 33 | #define LCD_BUFFER_SIZE (LCD_NATIVE_WIDTH*LCD_NATIVE_HEIGHT*2) |
34 | #define LCD_TTB_AREA (TTB_SIZE + LCD_BUFFER_SIZE) | ||
35 | #endif | ||
31 | 36 | ||
32 | #define DRAMORIG CONFIG_SDRAM_START | 37 | /* End of the audio buffer, where the codec buffer starts */ |
38 | #define ENDAUDIOADDR \ | ||
39 | (DRAMORIG + DRAMSIZE - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_TTB_AREA) | ||
33 | 40 | ||
34 | #define FLASHORIG 0x00100000 | 41 | #define FLASHORIG 0x00100000 |
35 | #define FLASHSIZE 0x00800000 | 42 | #define FLASHSIZE 0x00800000 |
@@ -44,10 +51,6 @@ PRO_STACK_SIZE = 0x2000; | |||
44 | IRQ_STACK_SIZE = 0x600; | 51 | IRQ_STACK_SIZE = 0x600; |
45 | FIQ_STACK_SIZE = 0x400; | 52 | FIQ_STACK_SIZE = 0x400; |
46 | 53 | ||
47 | /* End of the audio buffer, where the codec buffer starts */ | ||
48 | #define ENDAUDIOADDR \ | ||
49 | (DRAMORIG + DRAMSIZE - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_TTB_AREA) | ||
50 | |||
51 | MEMORY | 54 | MEMORY |
52 | { | 55 | { |
53 | DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE | 56 | DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE |
@@ -105,7 +108,7 @@ SECTIONS | |||
105 | *(.rodata*) | 108 | *(.rodata*) |
106 | } > DRAM | 109 | } > DRAM |
107 | 110 | ||
108 | .data : | 111 | .data : |
109 | { | 112 | { |
110 | . = ALIGN(0x4); | 113 | . = ALIGN(0x4); |
111 | *(.data*) | 114 | *(.data*) |
@@ -142,12 +145,12 @@ SECTIONS | |||
142 | } > ITCM | 145 | } > ITCM |
143 | 146 | ||
144 | /* Program stack space */ | 147 | /* Program stack space */ |
145 | .pro_stack (NOLOAD): | 148 | .pro_stack (NOLOAD): |
146 | { | 149 | { |
147 | . = ALIGN(0x4); | 150 | . = ALIGN(0x4); |
148 | *(.stack) | 151 | *(.stack) |
149 | stackbegin = .; /* Variable for thread.c */ | 152 | stackbegin = .; /* Variable for thread.c */ |
150 | _pro_stack_end = .; | 153 | _pro_stack_end = .; |
151 | . += PRO_STACK_SIZE; | 154 | . += PRO_STACK_SIZE; |
152 | _pro_stack_start = .; | 155 | _pro_stack_start = .; |
153 | stackend = .; /* Variable for tread.c */ | 156 | stackend = .; /* Variable for tread.c */ |
@@ -193,31 +196,48 @@ SECTIONS | |||
193 | pluginbuf = .; | 196 | pluginbuf = .; |
194 | . += PLUGIN_BUFFER_SIZE; | 197 | . += PLUGIN_BUFFER_SIZE; |
195 | } > DRAM | 198 | } > DRAM |
196 | 199 | ||
197 | _endsdram = .; | 200 | _endsdram = .; |
198 | 201 | ||
202 | #ifdef MROBE_500 | ||
199 | .ttbtable (NOLOAD) : | 203 | .ttbtable (NOLOAD) : |
200 | { | 204 | { |
201 | . = ALIGN (0x4000); | 205 | . = ALIGN (0x4000); |
202 | _ttbstart = .; | 206 | _ttbstart = .; |
203 | . += TTB_SIZE; | 207 | . += TTB_SIZE; |
204 | } > DRAM | 208 | } > DRAM |
205 | 209 | ||
206 | /* The LCD buffer should be at the end of memory to protect against | 210 | /* The LCD buffer should be at the end of memory to protect against |
207 | * overflowing something else when the YUV blitter is fudging the screen | 211 | * overflowing something else when the YUV blitter is fudging the screen |
208 | * size. | 212 | * size. |
209 | */ | 213 | */ |
210 | 214 | ||
211 | .lcdbuffer (NOLOAD) : | 215 | .lcdbuffer (NOLOAD) : |
212 | { | 216 | { |
213 | _lcdbuf = .; | 217 | _lcdbuf = .; |
214 | . += LCD_BUFFER_SIZE; | 218 | . += LCD_BUFFER_SIZE; |
215 | } > DRAM | 219 | } > DRAM |
216 | 220 | ||
217 | .lcdbuffer2 (NOLOAD) : | 221 | .lcdbuffer2 (NOLOAD) : |
218 | { | 222 | { |
219 | _lcdbuf2 = .; | 223 | _lcdbuf2 = .; |
220 | . += LCD_BUFFER_SIZE; | 224 | . += LCD_BUFFER_SIZE; |
221 | } > DRAM | 225 | } > DRAM |
226 | #else | ||
227 | .lcdbuffer (NOLOAD) : | ||
228 | { | ||
229 | . = ALIGN(32); | ||
230 | _lcdbuf = .; | ||
231 | . += LCD_BUFFER_SIZE; | ||
232 | } > DRAM | ||
233 | |||
234 | /* Place TTB at the end of RAM to minimize alignment losses */ | ||
235 | .ttbtable (NOLOAD) : | ||
236 | { | ||
237 | . = ALIGN (0x4000); | ||
238 | _ttbstart = .; | ||
239 | . += TTB_SIZE; | ||
240 | } > DRAM | ||
241 | #endif | ||
222 | } | 242 | } |
223 | 243 | ||