summaryrefslogtreecommitdiff
path: root/firmware/target/arm/tms320dm320/app.lds
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/tms320dm320/app.lds')
-rw-r--r--firmware/target/arm/tms320dm320/app.lds79
1 files changed, 40 insertions, 39 deletions
diff --git a/firmware/target/arm/tms320dm320/app.lds b/firmware/target/arm/tms320dm320/app.lds
index 902e093633..bc00c3463b 100644
--- a/firmware/target/arm/tms320dm320/app.lds
+++ b/firmware/target/arm/tms320dm320/app.lds
@@ -15,7 +15,11 @@ STARTUP(target/arm/tms320dm320/crt0.o)
15#define STUBOFFSET 0 15#define STUBOFFSET 0
16#endif 16#endif
17 17
18#include "cpu.h" 18#define LCD_BUFFER_SIZE (LCD_WIDTH*LCD_HEIGHT*2)
19
20/* must be 16Kb (0x4000) aligned */
21#define TTB_SIZE (0x4000)
22
19#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGINSIZE - CODECSIZE - LCD_BUFFER_SIZE - TTB_SIZE 23#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGINSIZE - CODECSIZE - LCD_BUFFER_SIZE - TTB_SIZE
20 24
21#define DRAMORIG 0x00900000 + STUBOFFSET 25#define DRAMORIG 0x00900000 + STUBOFFSET
@@ -28,6 +32,10 @@ STARTUP(target/arm/tms320dm320/crt0.o)
28/* Where the codec buffer ends, and the plugin buffer starts */ 32/* Where the codec buffer ends, and the plugin buffer starts */
29#define ENDADDR (ENDAUDIOADDR + CODECSIZE) 33#define ENDADDR (ENDAUDIOADDR + CODECSIZE)
30 34
35#define LCDBEGIN (ENDADDR + PLUGINSIZE)
36
37#define TTBBEGIN (LCDBEGIN + LCD_BUFFER_SIZE)
38
31MEMORY 39MEMORY
32{ 40{
33 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE 41 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
@@ -40,7 +48,6 @@ SECTIONS
40 { 48 {
41 loadaddress = .; 49 loadaddress = .;
42 _loadaddress = .; 50 _loadaddress = .;
43 . = ALIGN(0x200);
44 *(.init.text) 51 *(.init.text)
45 *(.text*) 52 *(.text*)
46 *(.glue_7) 53 *(.glue_7)
@@ -55,20 +62,22 @@ SECTIONS
55 *(.rodata.str1.1) 62 *(.rodata.str1.1)
56 *(.rodata.str1.4) 63 *(.rodata.str1.4)
57 . = ALIGN(0x4); 64 . = ALIGN(0x4);
58
59 /* Pseudo-allocate the copies of the data sections */
60 _datacopy = .;
61 } > DRAM 65 } > DRAM
62 66
63 /* TRICK ALERT! For RAM execution, we put the .data section at the 67 .data :
64 same load address as the copy. Thus, we don't waste extra RAM
65 when we don't actually need the copy. */
66 .data : AT ( _datacopy )
67 { 68 {
68 _datastart = .;
69 *(.data*) 69 *(.data*)
70 . = ALIGN(0x4); 70 . = ALIGN(0x4);
71 _dataend = .; 71 } > DRAM
72
73 .bss (NOLOAD) :
74 {
75 _edata = .;
76 *(.bss*)
77 *(.ibss*)
78 *(COMMON)
79 . = ALIGN(0x4);
80 _end = .;
72 } > DRAM 81 } > DRAM
73 82
74 /DISCARD/ : 83 /DISCARD/ :
@@ -81,30 +90,22 @@ SECTIONS
81 _vectorsstart = .; 90 _vectorsstart = .;
82 *(.vectors); 91 *(.vectors);
83 _vectorsend = .; 92 _vectorsend = .;
84#ifndef CREATIVE_ZVx
85 } > IRAM AT> DRAM 93 } > IRAM AT> DRAM
86 94
87 _vectorscopy = LOADADDR(.vectors); 95 _vectorscopy = LOADADDR(.vectors);
88#else
89 } > IRAM
90#endif
91 96
92 .iram : 97 .iram :
93 { 98 {
94 _iramstart = .; 99 _iramstart = .;
95 *(.icode) 100 *(.icode)
96 *(.irodata) 101 *(.irodata*)
97 *(.idata) 102 *(.idata)
98 . = ALIGN(0x4); 103 . = ALIGN(0x4);
99 _iramend = .; 104 _iramend = .;
100#ifndef CREATIVE_ZVx
101 } > IRAM AT> DRAM 105 } > IRAM AT> DRAM
102 106
103 _iramcopy = LOADADDR(.iram); 107 _iramcopy = LOADADDR(.iram);
104#else 108
105 } > IRAM
106#endif
107
108 .ibss (NOLOAD) : 109 .ibss (NOLOAD) :
109 { 110 {
110 _iedata = .; 111 _iedata = .;
@@ -113,49 +114,49 @@ SECTIONS
113 _iend = .; 114 _iend = .;
114 } > IRAM 115 } > IRAM
115 116
116 .stack : 117 .stack (NOLOAD) :
117 { 118 {
118 *(.stack) 119 *(.stack)
119 stackbegin = .; 120 stackbegin = .;
120 . += 0x2000; 121 . += 0x2000;
121 stackend = .; 122 stackend = .;
122 } > IRAM 123 } > IRAM
124
125 . = ADDR(.bss) + SIZEOF(.bss) + SIZEOF(.vectors) + SIZEOF(.iram);
123 126
124#ifndef CREATIVE_ZVx 127 .audiobuf (NOLOAD) :
125 .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors):
126#else
127 .bss ADDR(.data) + SIZEOF(.data):
128#endif
129 {
130 _edata = .;
131 *(.bss*)
132 *(COMMON)
133 . = ALIGN(0x4);
134 _end = .;
135 } > DRAM
136
137 .audiobuf ALIGN(4) :
138 { 128 {
129 . = ALIGN(4);
139 _audiobuffer = .; 130 _audiobuffer = .;
140 audiobuffer = .; 131 audiobuffer = .;
141 } > DRAM 132 } > DRAM
142 133
143 .audiobufend ENDAUDIOADDR: 134 .audiobufend ENDAUDIOADDR (NOLOAD) :
144 { 135 {
145 audiobufend = .; 136 audiobufend = .;
146 _audiobufend = .; 137 _audiobufend = .;
147 } > DRAM 138 } > DRAM
148 139
149 .codec ENDAUDIOADDR: 140 .codec ENDAUDIOADDR (NOLOAD) :
150 { 141 {
151 codecbuf = .; 142 codecbuf = .;
152 _codecbuf = .; 143 _codecbuf = .;
153 } 144 }
154 145
155 .plugin ENDADDR: 146 .plugin ENDADDR (NOLOAD) :
156 { 147 {
157 _pluginbuf = .; 148 _pluginbuf = .;
158 pluginbuf = .; 149 pluginbuf = .;
159 } 150 }
151
152 .lcdbuffer LCDBEGIN (NOLOAD) :
153 {
154 _lcdbuf = .;
155 }
156
157 .ttbtable TTBBEGIN (NOLOAD) :
158 {
159 _ttbstart = .;
160 }
160} 161}
161 162