Don't force double-buffering for sd devices. They apparently are not faster with...
[kugel-rb.git] / apps / plugins / plugin.lds
blob9a65fd5e4a515834bc601aefc26a064866c288e1
1 #include "config.h"
3 /* These output formats should be in the config-files */
5 #ifdef CPU_COLDFIRE
6 OUTPUT_FORMAT(elf32-m68k)
7 #elif defined(CPU_ARM)
8 OUTPUT_FORMAT(elf32-littlearm)
9 #elif defined(CPU_SH)
10 OUTPUT_FORMAT(elf32-sh)
11 #elif defined(CPU_MIPS)
12 OUTPUT_FORMAT(elf32-littlemips)
13 #else
14 /* We can have an #error here we don't use this file when build sims! */
15 #error Unknown CPU architecture
16 #endif
18 #ifdef DEBUG
19 #define STUBOFFSET 0x10000
20 #else
21 #define STUBOFFSET 0
22 #endif
24 #if defined(CPU_PP)
25 #ifdef CPU_PP502x
26 #define NOCACHE_BASE    0x10000000
27 #else
28 #define NOCACHE_BASE    0x28000000
29 #endif /* CPU_* */
30 #define CACHEALIGN_SIZE 16
31 #endif /* CPU_PP */
33 #ifndef NOCACHE_BASE
34 /* Default to no offset if target doesn't define this */
35 #define NOCACHE_BASE 0x00000000
36 #endif
38 #if CONFIG_CPU==DM320 || CONFIG_CPU==IMX31L
39 /* Give this 1 meg to allow it to align to the MMU boundary */
40 #define LCD_TTB_AREA    0x100000
41 #define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_TTB_AREA
43 #elif CONFIG_CPU==S3C2440
44 #define LCD_BUFFER_SIZE  (LCD_WIDTH*LCD_HEIGHT*2)
45 /* must be 16Kb (0x4000) aligned */
46 #define TTB_SIZE         (0x4000) 
47 #define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_BUFFER_SIZE - TTB_SIZE
49 #elif CONFIG_CPU==AS3525
50 #if MEMORYSIZE <= 2
51 #define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET
52 #else
53 #define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE
54 #endif
55 #endif
57  /* default to full RAM (minus codecs&plugins) unless specified otherwise */
58 #ifndef DRAMSIZE
59 #define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE
60 #endif
63 #if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300)
64 #define ARCH_IRIVER
65 #endif
67 #if defined(ARCH_IRIVER) || defined(IAUDIO_M3)
68 #define DRAMORIG 0x31000000
69 #define IRAMORIG 0x1000c000
70 #define IRAMSIZE 0xc000
72 #elif defined(IAUDIO_X5) || defined(IAUDIO_M5)
73 #define DRAMORIG 0x31000000
74 #define IRAMORIG 0x10010000
75 #define IRAMSIZE 0x10000
77 #elif CONFIG_CPU == PP5022 || CONFIG_CPU == PP5024
78 /* PP5022/24 have 128KB of IRAM */
79 #define DRAMORIG 0x00000000
80 #define IRAMORIG 0x4000c000
81 #define IRAMSIZE 0x14000
83 #elif defined(CPU_PP)
84 /* all other PP's have 96KB of IRAM */
85 #define DRAMORIG 0x00000000
86 #define IRAMORIG 0x4000c000
87 #define IRAMSIZE 0x0c000
89 #elif CONFIG_CPU == PNX0101
90 #define DRAMORIG 0xc00000 + STUBOFFSET
91 #define IRAMORIG 0x407000
92 #define IRAMSIZE 0x9000
94 #elif CONFIG_CPU == IMX31L || CONFIG_CPU == S3C2440
95 #define DRAMORIG 0x0 + STUBOFFSET
96 #define IRAM DRAM
97 #define IRAMSIZE 0
99 #elif CONFIG_CPU==DM320
100 #define DRAMORIG 0x00900000 + STUBOFFSET
101 #define IRAM DRAM
102 /* The bit of IRAM that is available is used in the core */
103 #define IRAMSIZE 0
105 #elif defined(CPU_TCC780X) || defined(CPU_TCC77X)
106 #define DRAMORIG 0x20000000
107 /*#define IRAMORIG 0x1000c000
108 #define IRAMSIZE 0xc000*/
109 #define IRAM DRAM
110 #define IRAMSIZE 0
112 #elif CONFIG_CPU==AS3525
113 #if MEMORYSIZE <= 2
114 #define IRAMSIZE 0  /* simulates no IRAM since codec is already entirely in IRAM */
115 #define CODEC_ORIGIN (0x50000 - CODEC_SIZE)
116 #define PLUGIN_ORIGIN (DRAMORIG + DRAMSIZE)
117 #else
118 #define IRAMORIG 0x20000
119 #define IRAMSIZE 0x30000
120 #endif
121 #define DRAMORIG 0x30000000
123 #elif CONFIG_CPU == JZ4732
124 #define DRAMORIG 0x80004000 + STUBOFFSET
125 //#define IRAMORIG 0x80000000
126 //#define IRAMSIZE 0x4000
127 #else
128 #define DRAMORIG 0x09000000 + STUBOFFSET
129 #endif
131 #define PLUGIN_LENGTH PLUGIN_BUFFER_SIZE
134 #ifndef CODEC_ORIGIN /* targets can specify another origin */
135 #define CODEC_ORIGIN (DRAMORIG + (DRAMSIZE))
136 #endif
138 #ifndef PLUGIN_ORIGIN /* targets can specify another origin */
139 #define PLUGIN_ORIGIN (CODEC_ORIGIN + CODEC_SIZE)
140 #endif
142 #ifdef CODEC
143 #define THIS_LENGTH CODEC_SIZE
144 #define THIS_ORIGIN CODEC_ORIGIN
145 #elif defined OVERLAY_OFFSET
146 #define THIS_LENGTH (DRAMSIZE - OVERLAY_OFFSET)
147 #define THIS_ORIGIN (DRAMORIG + OVERLAY_OFFSET)
148 #else /* plugin */
149 #define THIS_LENGTH PLUGIN_LENGTH
150 #define THIS_ORIGIN PLUGIN_ORIGIN
151 #endif
153 MEMORY
155    PLUGIN_RAM : ORIGIN = THIS_ORIGIN, LENGTH = THIS_LENGTH
156 #if defined(IRAMSIZE) && IRAMSIZE != 0
157    PLUGIN_IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
158 #endif
161 SECTIONS
163     .header : {
164         _plugin_start_addr = .;
165         plugin_start_addr = .;
166         KEEP(*(.header))
167     } > PLUGIN_RAM
169     .text :
170     {
171         *(.text*)
172 #if defined(IRAMSIZE) && IRAMSIZE == 0
173                 *(.icode)
174 #endif
175 #ifdef CPU_ARM
176         *(.glue_7)
177         *(.glue_7t)
178 #endif
179     } > PLUGIN_RAM
181     .rodata :
182     {
183         *(.rodata*)
184 #if defined(IRAMSIZE) && IRAMSIZE == 0
185                 *(.irodata)
186 #endif
187         . = ALIGN(0x4);
188     } > PLUGIN_RAM
190     .data :
191     {
192         *(.data*)
193 #if defined(IRAMSIZE) && IRAMSIZE == 0
194                 *(.idata)
195 #endif
196     } > PLUGIN_RAM
198 #if NOCACHE_BASE != 0
199     .ncdata . + NOCACHE_BASE :
200     {
201         . = ALIGN(CACHEALIGN_SIZE);
202         *(.ncdata*)
203         . = ALIGN(CACHEALIGN_SIZE);
204     } AT> PLUGIN_RAM
205 #endif
207 #if defined(IRAMSIZE)
208     iramcopy = . - NOCACHE_BASE;
209 #endif
211     /DISCARD/ :
212     {
213         *(.eh_frame)
214 #ifdef CPU_MIPS
215         *(.rel.dyn)
216 #endif
217     }
219 #if defined(IRAMSIZE) && IRAMSIZE != 0
220     .iram IRAMORIG : AT ( iramcopy)
221     {
222         iramstart = .;
223         *(.icode)
224         *(.irodata)
225         *(.idata)
226         iramend = .;
227     } > PLUGIN_IRAM
230     .ibss (NOLOAD) :
231     {
232         iedata = .;
233         *(.ibss)
234         . = ALIGN(0x4);
235         iend = .;
236     } > PLUGIN_IRAM
237 #endif
239     .bss (NOLOAD) :
240     {
241         plugin_bss_start = .;
242         *(.bss*)
243 #if defined(IRAMSIZE) && IRAMSIZE == 0
244                 *(.ibss)
245 #endif
246         *(COMMON)
247         . = ALIGN(0x4);
248     } > PLUGIN_RAM
249     
250 #if NOCACHE_BASE != 0
251     .ncbss . + NOCACHE_BASE (NOLOAD) :
252     {
253         . = ALIGN(CACHEALIGN_SIZE);
254         *(.ncbss*)
255         . = ALIGN(CACHEALIGN_SIZE);
256     } AT> PLUGIN_RAM
257 #endif
259     /* Restore . */
260     .pluginend . - NOCACHE_BASE :
261     {
262         _plugin_end_addr = .;
263         plugin_end_addr = .;
264     }
266     /* Special trick to avoid a linker error when no other sections are
267        left after garbage collection (plugin not for this platform) */
268     .comment 0 :
269     {
270         KEEP(*(.comment))
271     }