summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/arm/tms320dm320/boot.lds115
-rwxr-xr-xfirmware/target/arm/tms320dm320/crt0.S2
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c4
3 files changed, 77 insertions, 44 deletions
diff --git a/firmware/target/arm/tms320dm320/boot.lds b/firmware/target/arm/tms320dm320/boot.lds
index e391526dc5..ff8203ccd8 100644
--- a/firmware/target/arm/tms320dm320/boot.lds
+++ b/firmware/target/arm/tms320dm320/boot.lds
@@ -6,24 +6,42 @@ OUTPUT_FORMAT(elf32-littlearm)
6OUTPUT_ARCH(arm) 6OUTPUT_ARCH(arm)
7STARTUP(target/arm/tms320dm320/crt0.o) 7STARTUP(target/arm/tms320dm320/crt0.o)
8 8
9#define LCD_BUFFER_SIZE (LCD_WIDTH*LCD_HEIGHT*2) 9#ifdef DEBUG
10#define STUBOFFSET 0x10000
11#else
12#define STUBOFFSET 0
13#endif
14
15#ifndef LCD_NATIVE_WIDTH
16#define LCD_NATIVE_WIDTH LCD_WIDTH
17#endif
18
19#ifndef LCD_NATIVE_HEIGHT
20#define LCD_NATIVE_HEIGHT LCD_HEIGHT
21#endif
22
23#define LCD_FUDGE LCD_NATIVE_WIDTH%32
24
25#define LCD_BUFFER_SIZE ((LCD_NATIVE_WIDTH+LCD_FUDGE)*LCD_NATIVE_HEIGHT*2)
10 26
11/* must be 16Kb (0x4000) aligned */ 27/* must be 16Kb (0x4000) aligned */
12#define TTB_SIZE (0x4000) 28#define TTB_SIZE (0x4000)
13 29
14#define DRAMSIZE (MEMORYSIZE * 0x100000) - TTB_SIZE - LCD_BUFFER_SIZE 30/* Give this 1 meg to allow it to align to the MMU boundary */
31#define LCD_TTB_AREA 0x100000
32
33#define BOOT_OFFSET 0x1000000
15 34
16#define DRAMORIG 0x01900000 /* actually it's 0x00900000 */ 35#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - BOOT_OFFSET
17#define IRAMORIG 0x00000000
18#define IRAMSIZE 16K
19#define FLASHORIG 0x00100000
20#define FLASHSIZE 8M
21 36
22/* Now we have the LCD buffer */ 37#define DRAMORIG (0x00900000+BOOT_OFFSET) /* actually it's 0x00900000 */
23#define LCDBEGIN (DRAMSIZE+0x00900000) 38#define IRAMORIG 0x00000000
39#define IRAMSIZE 0x4000
40#define FLASHORIG 0x00100000
41#define FLASHSIZE 8M
24 42
25/* Finally the TTB table */ 43/* End of the audio buffer, where the codec buffer starts */
26#define TTBBEGIN (LCDBEGIN + LCD_BUFFER_SIZE) 44#define TTB_BEGIN (DRAMORIG + DRAMSIZE - LCD_TTB_AREA)
27 45
28MEMORY 46MEMORY
29{ 47{
@@ -40,7 +58,6 @@ SECTIONS
40 loadaddress = .; 58 loadaddress = .;
41 _loadaddress = .; 59 _loadaddress = .;
42 *(.init.text) 60 *(.init.text)
43 *(.icode)
44 *(.text*) 61 *(.text*)
45 *(.glue_7) 62 *(.glue_7)
46 *(.glue_7t) 63 *(.glue_7t)
@@ -53,7 +70,6 @@ SECTIONS
53 *(.rodata*) 70 *(.rodata*)
54 *(.rodata.str1.1) 71 *(.rodata.str1.1)
55 *(.rodata.str1.4) 72 *(.rodata.str1.4)
56 *(.irodata)
57 . = ALIGN(0x4); 73 . = ALIGN(0x4);
58 74
59 /* Pseudo-allocate the copies of the data sections */ 75 /* Pseudo-allocate the copies of the data sections */
@@ -61,31 +77,11 @@ SECTIONS
61 } > DRAM 77 } > DRAM
62 78
63 .data : { 79 .data : {
64 *(.idata)
65 *(.data*) 80 *(.data*)
66 . = ALIGN(0x4); 81 . = ALIGN(0x4);
67 _dataend = . ; 82 _dataend = . ;
68 } > DRAM 83 } > DRAM
69 84
70 .stack :
71 {
72 *(.stack)
73 _stackbegin = .;
74 stackbegin = .;
75 . += 0x2000;
76 _stackend = .;
77 stackend = .;
78 } > DRAM
79
80 .bss :
81 {
82 _edata = .;
83 *(.bss*);
84 *(.ibss);
85 *(COMMON)
86 _end = .;
87 } > DRAM
88
89 .vectors IRAMORIG : 85 .vectors IRAMORIG :
90 { 86 {
91 _vectorsstart = .; 87 _vectorsstart = .;
@@ -94,16 +90,57 @@ SECTIONS
94 KEEP(*(.vectors)); 90 KEEP(*(.vectors));
95 *(.vectors); 91 *(.vectors);
96 _vectorsend = .; 92 _vectorsend = .;
97 } AT > DRAM 93 } > IRAM AT > DRAM
98 _vectorscopy = LOADADDR(.vectors); 94 _vectorscopy = LOADADDR(.vectors);
99 95
100 .lcdbuffer LCDBEGIN (NOLOAD) : 96 .iram :
101 { 97 {
102 _lcdbuf = .; 98 _iramstart = .;
103 } 99 *(.icode)
100 *(.irodata*)
101 *(.idata)
102 . = ALIGN(0x4);
103 _iramend = .;
104 } > IRAM AT> DRAM
105
106 _iramcopy = LOADADDR(.iram);
107
108 .ibss (NOLOAD) :
109 {
110 _iedata = .;
111 *(.ibss)
112 . = ALIGN(0x4);
113 _iend = .;
114 } > IRAM
115
116 .stack (NOLOAD) :
117 {
118 *(.stack)
119 stackbegin = .;
120 . += 0x2000;
121 stackend = .;
122 } > IRAM
123
124 .bss (NOLOAD) :
125 {
126 . = ADDR(.data) + SIZEOF(.data) + SIZEOF(.vectors) + SIZEOF(.iram);
127 _edata = .;
128 *(.bss*)
129 *(COMMON)
130 . = ALIGN(0x4);
131 _end = .;
132 } > DRAM
104 133
105 .ttbtable TTBBEGIN (NOLOAD) : 134 .ttbtable TTB_BEGIN (NOLOAD) :
106 { 135 {
136 . = ALIGN (0x4000);
107 _ttbstart = .; 137 _ttbstart = .;
108 } 138 . += TTB_SIZE;
139 } > DRAM
140
141 .lcdbuffer (NOLOAD) :
142 {
143 _lcdbuf = .;
144 . += LCD_BUFFER_SIZE;
145 } > DRAM
109} 146}
diff --git a/firmware/target/arm/tms320dm320/crt0.S b/firmware/target/arm/tms320dm320/crt0.S
index a5a965b9c2..0243c13971 100755
--- a/firmware/target/arm/tms320dm320/crt0.S
+++ b/firmware/target/arm/tms320dm320/crt0.S
@@ -54,7 +54,7 @@ start:
54 orr r0, r0, #0x00000002 54 orr r0, r0, #0x00000002
55 mcr p15, 0, r0, c1, c0, 0 55 mcr p15, 0, r0, c1, c0, 0
56 56
57#if !defined(BOOTLOADER) && !defined(STUB) 57#if !defined(STUB)
58 /* Zero out IBSS */ 58 /* Zero out IBSS */
59 ldr r2, =_iedata 59 ldr r2, =_iedata
60 ldr r3, =_iend 60 ldr r3, =_iend
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
index 1334eeaf8d..54e1dc0cf2 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
@@ -127,8 +127,6 @@ void lcd_init_device(void)
127 /* Clear the Frame */ 127 /* Clear the Frame */
128 memset16(FRAME, 0x0000, LCD_WIDTH*LCD_HEIGHT); 128 memset16(FRAME, 0x0000, LCD_WIDTH*LCD_HEIGHT);
129 129
130 lcd_sleep();
131
132 IO_OSD_OSDWINMD0&=~(0x0001); 130 IO_OSD_OSDWINMD0&=~(0x0001);
133 IO_OSD_VIDWINMD&=~(0x0001); 131 IO_OSD_VIDWINMD&=~(0x0001);
134 132
@@ -242,8 +240,6 @@ void lcd_init_device(void)
242 240
243 IO_OSD_OSDWINMD0|=0x01; 241 IO_OSD_OSDWINMD0|=0x01;
244 IO_VID_ENC_VMOD|=0x01; 242 IO_VID_ENC_VMOD|=0x01;
245
246 lcd_enable(true);
247} 243}
248 244
249/* Update a fraction of the display. */ 245/* Update a fraction of the display. */