diff options
author | Cástor Muñoz <cmvidal@gmail.com> | 2016-02-05 02:02:02 +0100 |
---|---|---|
committer | Cástor Muñoz <cmvidal@gmail.com> | 2017-02-09 20:47:16 +0100 |
commit | 882921efb64218e9b8cc3a7d9c7308734f9b12f3 (patch) | |
tree | fca2e1b77104419156a07c6b6d80fa7af9fa3969 /firmware/target/arm/s5l8702/crt0.S | |
parent | 0d0b163dd15c35a427c8bb2bbd7b906afe9c491d (diff) | |
download | rockbox-882921efb64218e9b8cc3a7d9c7308734f9b12f3.tar.gz rockbox-882921efb64218e9b8cc3a7d9c7308734f9b12f3.zip |
ipod6g: bootloader v1bootloader_ipod6g_v1
- dual boot
- USB mode
- battery trap
Change-Id: I8586cfeb21ee63f45ab965430725225fdfc4212d
Diffstat (limited to 'firmware/target/arm/s5l8702/crt0.S')
-rw-r--r-- | firmware/target/arm/s5l8702/crt0.S | 67 |
1 files changed, 53 insertions, 14 deletions
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 | ||