summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/SOURCES12
-rw-r--r--firmware/export/config.h4
-rw-r--r--firmware/export/config/ipod6g.h13
-rw-r--r--firmware/target/arm/s5l8702/boot.lds54
-rw-r--r--firmware/target/arm/s5l8702/crt0.S67
5 files changed, 118 insertions, 32 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 88e40fa74f..09716be40e 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -1597,12 +1597,12 @@ target/arm/s5l8700/ipodnano2g/piezo-nano2g.c
1597#ifdef IPOD_6G 1597#ifdef IPOD_6G
1598target/arm/ipod/button-clickwheel.c 1598target/arm/ipod/button-clickwheel.c
1599target/arm/s5l8702/ipod6g/storage_ata-ipod6g.c 1599target/arm/s5l8702/ipod6g/storage_ata-ipod6g.c
1600target/arm/s5l8702/ipod6g/cscodec-ipod6g.c
1601target/arm/s5l8702/ipod6g/backlight-ipod6g.c 1600target/arm/s5l8702/ipod6g/backlight-ipod6g.c
1602target/arm/s5l8702/ipod6g/powermgmt-ipod6g.c 1601target/arm/s5l8702/ipod6g/powermgmt-ipod6g.c
1603target/arm/s5l8702/ipod6g/power-ipod6g.c 1602target/arm/s5l8702/ipod6g/power-ipod6g.c
1604target/arm/s5l8702/kernel-s5l8702.c 1603target/arm/s5l8702/kernel-s5l8702.c
1605target/arm/s5l8702/system-s5l8702.c 1604target/arm/s5l8702/system-s5l8702.c
1605target/arm/s5l8702/timer-s5l8702.c
1606target/arm/s5l8702/gpio-s5l8702.c 1606target/arm/s5l8702/gpio-s5l8702.c
1607target/arm/s5l8702/pl080.c 1607target/arm/s5l8702/pl080.c
1608target/arm/s5l8702/dma-s5l8702.c 1608target/arm/s5l8702/dma-s5l8702.c
@@ -1615,24 +1615,26 @@ target/arm/s5l8702/postmortemstub.S
1615#endif 1615#endif
1616target/arm/s5l8702/ipod6g/pmu-ipod6g.c 1616target/arm/s5l8702/ipod6g/pmu-ipod6g.c
1617target/arm/s5l8702/ipod6g/rtc-ipod6g.c 1617target/arm/s5l8702/ipod6g/rtc-ipod6g.c
1618target/arm/s5l8702/ipod6g/adc-ipod6g.c
1619#if !defined(BOOTLOADER) || defined(HAVE_BOOTLOADER_USB_MODE)
1618target/arm/s5l8702/usb-s5l8702.c 1620target/arm/s5l8702/usb-s5l8702.c
1621#endif
1619#ifdef HAVE_SERIAL 1622#ifdef HAVE_SERIAL
1620target/arm/uc870x.c 1623target/arm/uc870x.c
1621target/arm/s5l8702/uart-s5l8702.c 1624target/arm/s5l8702/uart-s5l8702.c
1622target/arm/s5l8702/ipod6g/serial-ipod6g.c 1625target/arm/s5l8702/ipod6g/serial-ipod6g.c
1623#endif 1626#endif
1624#ifndef BOOTLOADER 1627#ifndef BOOTLOADER
1625target/arm/s5l8702/timer-s5l8702.c
1626target/arm/s5l8702/debug-s5l8702.c 1628target/arm/s5l8702/debug-s5l8702.c
1627target/arm/s5l8702/pcm-s5l8702.c 1629target/arm/s5l8702/pcm-s5l8702.c
1628target/arm/s5l8702/ipod6g/audio-ipod6g.c 1630target/arm/s5l8702/ipod6g/audio-ipod6g.c
1629target/arm/s5l8702/ipod6g/adc-ipod6g.c 1631target/arm/s5l8702/ipod6g/cscodec-ipod6g.c
1630#else 1632#else
1631target/arm/s5l8702/spi-s5l8702.c 1633target/arm/s5l8702/spi-s5l8702.c
1632target/arm/s5l8702/crypto-s5l8702.c 1634target/arm/s5l8702/crypto-s5l8702.c
1633target/arm/s5l8702/nor-s5l8702.c 1635target/arm/s5l8702/nor-s5l8702.c
1634#endif 1636#endif /* BOOTLOADER */
1635#endif 1637#endif /* IPOD_6G */
1636 1638
1637#if CONFIG_CPU == RK27XX 1639#if CONFIG_CPU == RK27XX
1638target/arm/rk27xx/audio-rk27xx.c 1640target/arm/rk27xx/audio-rk27xx.c
diff --git a/firmware/export/config.h b/firmware/export/config.h
index e7cfc698df..efad75f1b2 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -872,8 +872,12 @@ Lyre prototype 1 */
872#ifdef HAVE_BOOTLOADER_USB_MODE 872#ifdef HAVE_BOOTLOADER_USB_MODE
873/* Priority in bootloader is wanted */ 873/* Priority in bootloader is wanted */
874#define HAVE_PRIORITY_SCHEDULING 874#define HAVE_PRIORITY_SCHEDULING
875#if (CONFIG_CPU == S5L8702)
876#define USB_DRIVER_CLOSE
877#else
875#define USB_STATUS_BY_EVENT 878#define USB_STATUS_BY_EVENT
876#define USB_DETECT_BY_REQUEST 879#define USB_DETECT_BY_REQUEST
880#endif
877#if defined(HAVE_USBSTACK) && CONFIG_USBOTG == USBOTG_ARC 881#if defined(HAVE_USBSTACK) && CONFIG_USBOTG == USBOTG_ARC
878#define INCLUDE_TIMEOUT_API 882#define INCLUDE_TIMEOUT_API
879#define USB_DRIVER_CLOSE 883#define USB_DRIVER_CLOSE
diff --git a/firmware/export/config/ipod6g.h b/firmware/export/config/ipod6g.h
index 01934a0cc2..5494cf387a 100644
--- a/firmware/export/config/ipod6g.h
+++ b/firmware/export/config/ipod6g.h
@@ -248,14 +248,27 @@
248#define USB_VENDOR_ID 0x05AC 248#define USB_VENDOR_ID 0x05AC
249#define USB_PRODUCT_ID 0x1261 249#define USB_PRODUCT_ID 0x1261
250#define USB_DEVBSS_ATTR __attribute__((aligned(32))) 250#define USB_DEVBSS_ATTR __attribute__((aligned(32)))
251#define HAVE_BOOTLOADER_USB_MODE
252#ifdef BOOTLOADER
253#define USBPOWER_BTN_IGNORE (~0)
254#endif
251 255
252#define USB_READ_BUFFER_SIZE (1024*24) 256#define USB_READ_BUFFER_SIZE (1024*24)
253 257
258/* Serial */
259#ifdef BOOTLOADER
260#if 0 /* Enable/disable LOGF_SERIAL for bootloader */
261#define HAVE_SERIAL
262#define ROCKBOX_HAS_LOGF
263#define LOGF_SERIAL
264#endif
265#else /* !BOOTLOADER */
254#define HAVE_SERIAL 266#define HAVE_SERIAL
255/* Disable iAP when LOGF_SERIAL is enabled to avoid conflicts */ 267/* Disable iAP when LOGF_SERIAL is enabled to avoid conflicts */
256#ifndef LOGF_SERIAL 268#ifndef LOGF_SERIAL
257#define IPOD_ACCESSORY_PROTOCOL 269#define IPOD_ACCESSORY_PROTOCOL
258#endif 270#endif
271#endif
259 272
260/* Define this if you can switch on/off the accessory power supply */ 273/* Define this if you can switch on/off the accessory power supply */
261#define HAVE_ACCESSORY_SUPPLY 274#define HAVE_ACCESSORY_SUPPLY
diff --git a/firmware/target/arm/s5l8702/boot.lds b/firmware/target/arm/s5l8702/boot.lds
index 2885f77eda..61f23b9c22 100644
--- a/firmware/target/arm/s5l8702/boot.lds
+++ b/firmware/target/arm/s5l8702/boot.lds
@@ -1,5 +1,6 @@
1#define ASM 1#define ASM
2#include "config.h" 2#include "config.h"
3#include "cpu.h"
3 4
4ENTRY(start) 5ENTRY(start)
5#ifdef ROCKBOX_LITTLE_ENDIAN 6#ifdef ROCKBOX_LITTLE_ENDIAN
@@ -10,13 +11,11 @@ OUTPUT_FORMAT(elf32-bigarm)
10OUTPUT_ARCH(arm) 11OUTPUT_ARCH(arm)
11STARTUP(target/arm/s5l8702/crt0.o) 12STARTUP(target/arm/s5l8702/crt0.o)
12 13
14#define MAX_LOADSIZE 8M /* reserved for loading Rockbox binary */
15
13#ifdef IPOD_NANO2G 16#ifdef IPOD_NANO2G
14#define DRAMORIG 0x08000000 + ((MEMORYSIZE - 1) * 0x100000) 17#define DRAMORIG 0x08000000 + ((MEMORYSIZE - 1) * 0x100000)
15#define DRAMSIZE 0x00100000 18#define DRAMSIZE 0x00100000
16#else
17#define DRAMORIG 0x08000000
18#define DRAMSIZE (DRAM_SIZE - TTB_SIZE)
19#endif
20 19
21#define IRAMORIG 0x22000000 20#define IRAMORIG 0x22000000
22#define IRAMSIZE 256K 21#define IRAMSIZE 256K
@@ -26,17 +25,47 @@ MEMORY
26 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE 25 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
27 IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE 26 IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
28} 27}
29
30#define LOAD_AREA IRAM 28#define LOAD_AREA IRAM
29#define VECT_AREA IRAM
30#define BSS_AREA DRAM
31
32#elif defined(IPOD_6G)
33MEMORY
34{
35 DRAM : ORIGIN = DRAM_ORIG, LENGTH = DRAM_SIZE
36 IRAM : ORIGIN = IRAM_ORIG, LENGTH = IRAM_SIZE
37
38 /* s5l8702 maps address 0 to ROM, IRAM or DRAM */
39 VECT_AREA : ORIGIN = 0, LENGTH = 1K
40
41 /* IRAM region where loaded IM3 body will be moved and executed,
42 preserving the loaded IM3 header (0x800 bytes) at IRAM1_ORIG */
43 MOVE_AREA : ORIGIN = IRAM1_ORIG + 0x800,
44 LENGTH = IRAM1_SIZE - 0x800
45
46 /* DRAM region for BSS */
47 BSS_AREA : ORIGIN = DRAM_ORIG + MAX_LOADSIZE,
48 LENGTH = DRAM_SIZE - MAX_LOADSIZE - TTB_SIZE
49}
50#define LOAD_AREA MOVE_AREA
51
52#else
53#error No target defined!
54#endif
55
31 56
32SECTIONS 57SECTIONS
33{ 58{
59 _dfuloadaddr = IRAM0_ORIG ;
60 _movestart = LOADADDR(.text) ;
61 _moveend = LOADADDR(.data) + SIZEOF(.data) ;
62
34#ifdef NEEDS_INTVECT_COPYING 63#ifdef NEEDS_INTVECT_COPYING
35 .intvect : { 64 .intvect : {
36 _intvectstart = . ; 65 _intvectstart = . ;
37 *(.intvect) 66 *(.intvect)
38 _intvectend = _newstart ; 67 _intvectend = _newstart ;
39 } >IRAM AT> LOAD_AREA 68 } >VECT_AREA AT> LOAD_AREA
40 _intvectcopy = LOADADDR(.intvect) ; 69 _intvectcopy = LOADADDR(.intvect) ;
41#endif 70#endif
42 71
@@ -61,10 +90,9 @@ SECTIONS
61 *(.idata*) 90 *(.idata*)
62 *(.data*) 91 *(.data*)
63 *(.ncdata*); 92 *(.ncdata*);
64 . = ALIGN(0x4); 93 . = ALIGN(0x20); /* align move size */
65 _dataend = . ; 94 _dataend = . ;
66 } > IRAM AT> LOAD_AREA 95 } > LOAD_AREA
67 _datacopy = LOADADDR(.data) ;
68 96
69 .stack (NOLOAD) : 97 .stack (NOLOAD) :
70 { 98 {
@@ -80,7 +108,7 @@ SECTIONS
80 _fiqstackbegin = .; 108 _fiqstackbegin = .;
81 . += 0x400; 109 . += 0x400;
82 _fiqstackend = .; 110 _fiqstackend = .;
83 } > IRAM 111 } > LOAD_AREA
84 112
85 .bss (NOLOAD) : { 113 .bss (NOLOAD) : {
86 _edata = .; 114 _edata = .;
@@ -88,7 +116,7 @@ SECTIONS
88 *(.ibss*); 116 *(.ibss*);
89 *(.ncbss*); 117 *(.ncbss*);
90 *(COMMON); 118 *(COMMON);
91 . = ALIGN(0x4); 119 . = ALIGN(0x20); /* align bzero size */
92 _end = .; 120 _end = .;
93 } > IRAM 121 } > BSS_AREA
94} 122}
diff --git a/firmware/target/arm/s5l8702/crt0.S b/firmware/target/arm/s5l8702/crt0.S
index 3d1ee2bdfd..915c3f680b 100644
--- a/firmware/target/arm/s5l8702/crt0.S
+++ b/firmware/target/arm/s5l8702/crt0.S
@@ -46,17 +46,20 @@ newstart2:
46 msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ 46 msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */
47 47
48#ifdef BOOTLOADER 48#ifdef BOOTLOADER
49 /* Relocate ourself to IRAM - we have been loaded to DRAM */ 49 /* Relocate ourself to IRAM1 - we have been loaded to IRAM0 */
50 mov r0, #0x08000000 /* source (DRAM) */ 50 ldr r0, =_dfuloadaddr
51 mov r1, #0x22000000 /* dest (IRAM) */ 51 ldr r1, =_movestart
52 ldr r2, =_dataend 52 ldr r2, =_moveend
531: 531:
54 cmp r2, r1 54 ldmia r0!, {r3-r10}
55 ldrhi r3, [r0], #4 55 stmia r1!, {r3-r10}
56 strhi r3, [r1], #4 56 cmp r1, r2
57 bhi 1b 57 blt 1b
58 58
59 ldr pc, =start_loc /* jump to the relocated start_loc: */ 59 ldr pc, =start_loc /* jump to the relocated start_loc: */
60
61 .section .init.text,"ax",%progbits
62 .global start_loc
60start_loc: 63start_loc:
61#endif 64#endif
62 65
@@ -66,11 +69,11 @@ start_loc:
66 mcr p15, 0, r0, c1, c0, 0 /* disable caches and protection unit */ 69 mcr p15, 0, r0, c1, c0, 0 /* disable caches and protection unit */
67 70
68.cleancache: 71.cleancache:
69 mrc p15, 0, r15,c7,c10,3 72 mrc p15, 0, r15, c7, c10, 3 /* test and clean dcache */
70 bne .cleancache 73 bne .cleancache
71 mov r0, #0 74 mov r0, #0
72 mcr p15, 0, r0,c7,c10,4 75 mcr p15, 0, r0, c7, c10, 4 /* drain write buffer */
73 mcr p15, 0, r0,c7,c5,0 76 mcr p15, 0, r0, c7, c5, 0 /* invalidate icache */
74 77
75 /* reset VIC controller */ 78 /* reset VIC controller */
76 ldr r1, =0x38e00000 79 ldr r1, =0x38e00000
@@ -86,7 +89,15 @@ start_loc:
86 str r0, [r1,#0x14] 89 str r0, [r1,#0x14]
87 str r0, [r2,#0x14] 90 str r0, [r2,#0x14]
88 91
89#if !defined(BOOTLOADER) 92#if defined(BOOTLOADER)
93 /* SPI speed is limited when icache is not active. Not worth
94 * activating dcache, it is almost useless on pre-init stage
95 * and the TLB needs 16Kb in detriment of the bootloader.
96 */
97 mrc p15, 0, r0, c1, c0, 0
98 orr r0, r0, #1<<12 /* enable icache */
99 mcr p15, 0, r0, c1, c0, 0
100#else
90 bl memory_init 101 bl memory_init
91 102
92 /* Copy interrupt vectors to iram */ 103 /* Copy interrupt vectors to iram */
@@ -98,7 +109,6 @@ start_loc:
98 ldrhi r1, [r4], #4 109 ldrhi r1, [r4], #4
99 strhi r1, [r2], #4 110 strhi r1, [r2], #4
100 bhi 1b 111 bhi 1b
101#endif
102 112
103 /* Initialise bss section to zero */ 113 /* Initialise bss section to zero */
104 ldr r2, =_edata 114 ldr r2, =_edata
@@ -109,7 +119,6 @@ start_loc:
109 strhi r4, [r2], #4 119 strhi r4, [r2], #4
110 bhi 1b 120 bhi 1b
111 121
112#ifndef BOOTLOADER
113 /* Copy icode and data to ram */ 122 /* Copy icode and data to ram */
114 ldr r2, =_iramstart 123 ldr r2, =_iramstart
115 ldr r3, =_iramend 124 ldr r3, =_iramend
@@ -159,3 +168,33 @@ start_loc:
159 bhi 1b 168 bhi 1b
160 169
161 b main 170 b main
171
172#ifdef BOOTLOADER
173 /* Initialise bss section to zero */
174 .global bss_init
175 .type bss_init, %function
176
177bss_init:
178 stmfd sp!, {r4-r9,lr}
179
180 ldr r0, =_edata
181 ldr r1, =_end
182 mov r2, #0
183 mov r3, #0
184 mov r4, #0
185 mov r5, #0
186 mov r6, #0
187 mov r7, #0
188 mov r8, #0
189 mov r9, #0
190 b 2f
191 .align 5 /* cache line size */
1921:
193 stmia r0!, {r2-r9}
1942:
195 cmp r0, r1
196 blt 1b
197
198 ldmpc regs=r4-r9
199 .ltorg
200#endif