diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/SOURCES | 12 | ||||
-rw-r--r-- | firmware/export/config.h | 4 | ||||
-rw-r--r-- | firmware/export/config/ipod6g.h | 13 | ||||
-rw-r--r-- | firmware/target/arm/s5l8702/boot.lds | 54 | ||||
-rw-r--r-- | firmware/target/arm/s5l8702/crt0.S | 67 |
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 |
1598 | target/arm/ipod/button-clickwheel.c | 1598 | target/arm/ipod/button-clickwheel.c |
1599 | target/arm/s5l8702/ipod6g/storage_ata-ipod6g.c | 1599 | target/arm/s5l8702/ipod6g/storage_ata-ipod6g.c |
1600 | target/arm/s5l8702/ipod6g/cscodec-ipod6g.c | ||
1601 | target/arm/s5l8702/ipod6g/backlight-ipod6g.c | 1600 | target/arm/s5l8702/ipod6g/backlight-ipod6g.c |
1602 | target/arm/s5l8702/ipod6g/powermgmt-ipod6g.c | 1601 | target/arm/s5l8702/ipod6g/powermgmt-ipod6g.c |
1603 | target/arm/s5l8702/ipod6g/power-ipod6g.c | 1602 | target/arm/s5l8702/ipod6g/power-ipod6g.c |
1604 | target/arm/s5l8702/kernel-s5l8702.c | 1603 | target/arm/s5l8702/kernel-s5l8702.c |
1605 | target/arm/s5l8702/system-s5l8702.c | 1604 | target/arm/s5l8702/system-s5l8702.c |
1605 | target/arm/s5l8702/timer-s5l8702.c | ||
1606 | target/arm/s5l8702/gpio-s5l8702.c | 1606 | target/arm/s5l8702/gpio-s5l8702.c |
1607 | target/arm/s5l8702/pl080.c | 1607 | target/arm/s5l8702/pl080.c |
1608 | target/arm/s5l8702/dma-s5l8702.c | 1608 | target/arm/s5l8702/dma-s5l8702.c |
@@ -1615,24 +1615,26 @@ target/arm/s5l8702/postmortemstub.S | |||
1615 | #endif | 1615 | #endif |
1616 | target/arm/s5l8702/ipod6g/pmu-ipod6g.c | 1616 | target/arm/s5l8702/ipod6g/pmu-ipod6g.c |
1617 | target/arm/s5l8702/ipod6g/rtc-ipod6g.c | 1617 | target/arm/s5l8702/ipod6g/rtc-ipod6g.c |
1618 | target/arm/s5l8702/ipod6g/adc-ipod6g.c | ||
1619 | #if !defined(BOOTLOADER) || defined(HAVE_BOOTLOADER_USB_MODE) | ||
1618 | target/arm/s5l8702/usb-s5l8702.c | 1620 | target/arm/s5l8702/usb-s5l8702.c |
1621 | #endif | ||
1619 | #ifdef HAVE_SERIAL | 1622 | #ifdef HAVE_SERIAL |
1620 | target/arm/uc870x.c | 1623 | target/arm/uc870x.c |
1621 | target/arm/s5l8702/uart-s5l8702.c | 1624 | target/arm/s5l8702/uart-s5l8702.c |
1622 | target/arm/s5l8702/ipod6g/serial-ipod6g.c | 1625 | target/arm/s5l8702/ipod6g/serial-ipod6g.c |
1623 | #endif | 1626 | #endif |
1624 | #ifndef BOOTLOADER | 1627 | #ifndef BOOTLOADER |
1625 | target/arm/s5l8702/timer-s5l8702.c | ||
1626 | target/arm/s5l8702/debug-s5l8702.c | 1628 | target/arm/s5l8702/debug-s5l8702.c |
1627 | target/arm/s5l8702/pcm-s5l8702.c | 1629 | target/arm/s5l8702/pcm-s5l8702.c |
1628 | target/arm/s5l8702/ipod6g/audio-ipod6g.c | 1630 | target/arm/s5l8702/ipod6g/audio-ipod6g.c |
1629 | target/arm/s5l8702/ipod6g/adc-ipod6g.c | 1631 | target/arm/s5l8702/ipod6g/cscodec-ipod6g.c |
1630 | #else | 1632 | #else |
1631 | target/arm/s5l8702/spi-s5l8702.c | 1633 | target/arm/s5l8702/spi-s5l8702.c |
1632 | target/arm/s5l8702/crypto-s5l8702.c | 1634 | target/arm/s5l8702/crypto-s5l8702.c |
1633 | target/arm/s5l8702/nor-s5l8702.c | 1635 | target/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 |
1638 | target/arm/rk27xx/audio-rk27xx.c | 1640 | target/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 | ||
4 | ENTRY(start) | 5 | ENTRY(start) |
5 | #ifdef ROCKBOX_LITTLE_ENDIAN | 6 | #ifdef ROCKBOX_LITTLE_ENDIAN |
@@ -10,13 +11,11 @@ OUTPUT_FORMAT(elf32-bigarm) | |||
10 | OUTPUT_ARCH(arm) | 11 | OUTPUT_ARCH(arm) |
11 | STARTUP(target/arm/s5l8702/crt0.o) | 12 | STARTUP(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) | ||
33 | MEMORY | ||
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 | ||
32 | SECTIONS | 57 | SECTIONS |
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 |
53 | 1: | 53 | 1: |
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 | ||
60 | start_loc: | 63 | start_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 | |||
177 | bss_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 */ | ||
192 | 1: | ||
193 | stmia r0!, {r2-r9} | ||
194 | 2: | ||
195 | cmp r0, r1 | ||
196 | blt 1b | ||
197 | |||
198 | ldmpc regs=r4-r9 | ||
199 | .ltorg | ||
200 | #endif | ||