diff options
-rw-r--r-- | apps/plugins/plugin.lds | 11 | ||||
-rw-r--r-- | firmware/export/dm320.h | 4 | ||||
-rw-r--r-- | firmware/target/arm/tms320dm320/app.lds | 60 | ||||
-rw-r--r-- | firmware/target/arm/tms320dm320/boot.lds | 60 |
4 files changed, 93 insertions, 42 deletions
diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds index cc0be3abd5..fac47d8c45 100644 --- a/apps/plugins/plugin.lds +++ b/apps/plugins/plugin.lds | |||
@@ -36,7 +36,6 @@ OUTPUT_FORMAT(elf32-littlemips) | |||
36 | 36 | ||
37 | #elif CONFIG_CPU==DM320 | 37 | #elif CONFIG_CPU==DM320 |
38 | 38 | ||
39 | /* Give this 1 meg to allow it to align to the MMU boundary */ | ||
40 | #ifndef LCD_NATIVE_WIDTH | 39 | #ifndef LCD_NATIVE_WIDTH |
41 | #define LCD_NATIVE_WIDTH LCD_WIDTH | 40 | #define LCD_NATIVE_WIDTH LCD_WIDTH |
42 | #endif | 41 | #endif |
@@ -45,9 +44,17 @@ OUTPUT_FORMAT(elf32-littlemips) | |||
45 | #define LCD_NATIVE_HEIGHT LCD_HEIGHT | 44 | #define LCD_NATIVE_HEIGHT LCD_HEIGHT |
46 | #endif | 45 | #endif |
47 | 46 | ||
47 | #ifdef MROBE_500 | ||
48 | /* Give this 1 meg to allow it to align to the MMU boundary */ | ||
48 | #define LCD_FUDGE LCD_NATIVE_WIDTH%32 | 49 | #define LCD_FUDGE LCD_NATIVE_WIDTH%32 |
49 | #define LCD_BUFFER_SIZE ((LCD_NATIVE_WIDTH+LCD_FUDGE)*LCD_NATIVE_HEIGHT*2) | 50 | #define LCD_BUFFER_SIZE ((LCD_NATIVE_WIDTH+LCD_FUDGE)*LCD_NATIVE_HEIGHT*2) |
50 | #define LCD_TTB_AREA 0x100000*((LCD_BUFFER_SIZE>>19)+1) | 51 | #define LCD_TTB_AREA 0x100000*((LCD_BUFFER_SIZE>>19)+1) |
52 | #else | ||
53 | /* must be 16Kb (0x4000) aligned */ | ||
54 | #define TTB_SIZE (0x4000) | ||
55 | #define LCD_BUFFER_SIZE (LCD_NATIVE_WIDTH*LCD_NATIVE_HEIGHT*2) | ||
56 | #define LCD_TTB_AREA (TTB_SIZE + LCD_BUFFER_SIZE) | ||
57 | #endif | ||
51 | 58 | ||
52 | #define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_TTB_AREA | 59 | #define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_TTB_AREA |
53 | 60 | ||
diff --git a/firmware/export/dm320.h b/firmware/export/dm320.h index 01f206bfc9..bd6ca15407 100644 --- a/firmware/export/dm320.h +++ b/firmware/export/dm320.h | |||
@@ -30,13 +30,17 @@ | |||
30 | #if !defined(__ASSEMBLER__) && !defined(__LD__) | 30 | #if !defined(__ASSEMBLER__) && !defined(__LD__) |
31 | /* These variables are created during linking (app/boot.lds) */ | 31 | /* These variables are created during linking (app/boot.lds) */ |
32 | extern unsigned long _lcdbuf; | 32 | extern unsigned long _lcdbuf; |
33 | #ifdef MROBE_500 | ||
33 | extern unsigned long _lcdbuf2; | 34 | extern unsigned long _lcdbuf2; |
35 | #endif | ||
34 | extern unsigned long _ttbstart; | 36 | extern unsigned long _ttbstart; |
35 | #endif | 37 | #endif |
36 | 38 | ||
37 | #define TTB_BASE_ADDR (_ttbstart) /* End of memory */ | 39 | #define TTB_BASE_ADDR (_ttbstart) /* End of memory */ |
38 | #define FRAME ((short *) (&_lcdbuf)) /* Right after TTB */ | 40 | #define FRAME ((short *) (&_lcdbuf)) /* Right after TTB */ |
41 | #ifdef MROBE_500 | ||
39 | #define FRAME2 ((short *) (&_lcdbuf2)) /* Right after FRAME */ | 42 | #define FRAME2 ((short *) (&_lcdbuf2)) /* Right after FRAME */ |
43 | #endif | ||
40 | 44 | ||
41 | #define PHY_IO_BASE 0x00030000 | 45 | #define PHY_IO_BASE 0x00030000 |
42 | #define DM320_REG(addr) (*(volatile unsigned short *)(PHY_IO_BASE + (addr))) | 46 | #define DM320_REG(addr) (*(volatile unsigned short *)(PHY_IO_BASE + (addr))) |
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 | ||
diff --git a/firmware/target/arm/tms320dm320/boot.lds b/firmware/target/arm/tms320dm320/boot.lds index 2db687d533..8b075f43df 100644 --- a/firmware/target/arm/tms320dm320/boot.lds +++ b/firmware/target/arm/tms320dm320/boot.lds | |||
@@ -14,22 +14,28 @@ 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 | /* Bootloader only uses/knows about the upper 32 M */ | ||
21 | #define DRAMSIZE (MEMORYSIZE * 0x100000 / 2) | ||
22 | #define DRAMORIG CONFIG_SDRAM_START+DRAMSIZE | ||
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 | /* End of the audio buffer, where the codec buffer starts */ | |
30 | /* Bootloader only uses/knows about the upper 32 M */ | 33 | #define TTB_BEGIN (DRAMORIG + DRAMSIZE - LCD_TTB_AREA) |
31 | #define DRAMORIG CONFIG_SDRAM_START+0x02000000 | 34 | #else |
32 | #define DRAMSIZE (MEMORYSIZE * 0x80000) | 35 | #define LCD_BUFFER_SIZE (LCD_NATIVE_WIDTH*LCD_NATIVE_HEIGHT*2) |
36 | #define LCD_TTB_AREA (TTB_SIZE + LCD_BUFFER_SIZE) | ||
37 | #define LCD_BEGIN (DRAMORIG + DRAMSIZE - LCD_TTB_AREA) | ||
38 | #endif | ||
33 | 39 | ||
34 | #define IRAMORIG 0x00000000 | 40 | #define IRAMORIG 0x00000000 |
35 | #define IRAMSIZE 0x4000 | 41 | #define IRAMSIZE 0x4000 |
@@ -59,9 +65,6 @@ PRO_STACK_SIZE = 0x2000; | |||
59 | IRQ_STACK_SIZE = 0x400; | 65 | IRQ_STACK_SIZE = 0x400; |
60 | FIQ_STACK_SIZE = 0x400; | 66 | FIQ_STACK_SIZE = 0x400; |
61 | 67 | ||
62 | /* End of the audio buffer, where the codec buffer starts */ | ||
63 | #define TTB_BEGIN (DRAMORIG + DRAMSIZE - LCD_TTB_AREA) | ||
64 | |||
65 | MEMORY | 68 | MEMORY |
66 | { | 69 | { |
67 | DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE | 70 | DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE |
@@ -148,7 +151,7 @@ SECTIONS | |||
148 | } > IRAM AT> FLASH | 151 | } > IRAM AT> FLASH |
149 | 152 | ||
150 | _iramcopy = LOADADDR(.iram); | 153 | _iramcopy = LOADADDR(.iram); |
151 | 154 | ||
152 | .ibss (NOLOAD) : | 155 | .ibss (NOLOAD) : |
153 | { | 156 | { |
154 | . = ALIGN(0x4); | 157 | . = ALIGN(0x4); |
@@ -158,12 +161,12 @@ SECTIONS | |||
158 | } > IRAM | 161 | } > IRAM |
159 | 162 | ||
160 | /* Program stack space */ | 163 | /* Program stack space */ |
161 | .pro_stack (NOLOAD): | 164 | .pro_stack (NOLOAD): |
162 | { | 165 | { |
163 | . = ALIGN(0x4); | 166 | . = ALIGN(0x4); |
164 | *(.stack) | 167 | *(.stack) |
165 | stackbegin = .; /* Variable for thread.c */ | 168 | stackbegin = .; /* Variable for thread.c */ |
166 | _pro_stack_end = .; | 169 | _pro_stack_end = .; |
167 | . += PRO_STACK_SIZE; | 170 | . += PRO_STACK_SIZE; |
168 | _pro_stack_start = .; | 171 | _pro_stack_start = .; |
169 | stackend = .; /* Variable for tread.c */ | 172 | stackend = .; /* Variable for tread.c */ |
@@ -186,28 +189,45 @@ SECTIONS | |||
186 | . += FIQ_STACK_SIZE; | 189 | . += FIQ_STACK_SIZE; |
187 | _fiq_stack_start = .; | 190 | _fiq_stack_start = .; |
188 | } > IRAM | 191 | } > IRAM |
189 | 192 | ||
193 | #ifdef MROBE_500 | ||
190 | .ttbtable TTB_BEGIN (NOLOAD) : | 194 | .ttbtable TTB_BEGIN (NOLOAD) : |
191 | { | 195 | { |
192 | . = ALIGN (0x4000); | 196 | . = ALIGN (0x4000); |
193 | _ttbstart = .; | 197 | _ttbstart = .; |
194 | . += TTB_SIZE; | 198 | . += TTB_SIZE; |
195 | } > DRAM | 199 | } > DRAM |
196 | 200 | ||
197 | /* The LCD buffer should be at the end of memory to protect against | 201 | /* The LCD buffer should be at the end of memory to protect against |
198 | * overflowing something else when the YUV blitter is fudging the screen | 202 | * overflowing something else when the YUV blitter is fudging the screen |
199 | * size. | 203 | * size. |
200 | */ | 204 | */ |
201 | 205 | ||
202 | .lcdbuffer (NOLOAD) : | 206 | .lcdbuffer (NOLOAD) : |
203 | { | 207 | { |
204 | _lcdbuf = .; | 208 | _lcdbuf = .; |
205 | . += LCD_BUFFER_SIZE; | 209 | . += LCD_BUFFER_SIZE; |
206 | } > DRAM | 210 | } > DRAM |
207 | 211 | ||
208 | .lcdbuffer2 (NOLOAD) : | 212 | .lcdbuffer2 (NOLOAD) : |
209 | { | 213 | { |
210 | _lcdbuf2 = .; | 214 | _lcdbuf2 = .; |
211 | . += LCD_BUFFER_SIZE; | 215 | . += LCD_BUFFER_SIZE; |
212 | } > DRAM | 216 | } > DRAM |
217 | #else | ||
218 | .lcdbuffer LCD_BEGIN (NOLOAD) : | ||
219 | { | ||
220 | . = ALIGN(32); | ||
221 | _lcdbuf = .; | ||
222 | . += LCD_BUFFER_SIZE; | ||
223 | } > DRAM | ||
224 | |||
225 | /* Place TTB at the end of RAM to minimize alignment losses */ | ||
226 | .ttbtable (NOLOAD) : | ||
227 | { | ||
228 | . = ALIGN (0x4000); | ||
229 | _ttbstart = .; | ||
230 | . += TTB_SIZE; | ||
231 | } > DRAM | ||
232 | #endif | ||
213 | } | 233 | } |