summaryrefslogtreecommitdiff
path: root/utils/hwstub/stub/pp/crt0.S
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-04-07 22:23:54 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2014-04-07 22:26:50 +0200
commitccfa51835e373c74cdda7eaad962a81ba1001fe2 (patch)
treed827d1027626cae478ab25742f78ffa11a90d2bf /utils/hwstub/stub/pp/crt0.S
parent399acc038750943c1a0ee7178a18714334871472 (diff)
downloadrockbox-ccfa51835e373c74cdda7eaad962a81ba1001fe2.tar.gz
rockbox-ccfa51835e373c74cdda7eaad962a81ba1001fe2.zip
Add hwstub support for portal player (manufacturer mode)
It is very similar to how e200tool from MrH works but uses the framework of hwstub which is makes it completely trivial since we already have the USB driver written. Change-Id: I61cdc245d3f828c2682bcd6ecfed5a1cc0094139
Diffstat (limited to 'utils/hwstub/stub/pp/crt0.S')
-rw-r--r--utils/hwstub/stub/pp/crt0.S42
1 files changed, 42 insertions, 0 deletions
diff --git a/utils/hwstub/stub/pp/crt0.S b/utils/hwstub/stub/pp/crt0.S
new file mode 100644
index 0000000000..38b6f18ac5
--- /dev/null
+++ b/utils/hwstub/stub/pp/crt0.S
@@ -0,0 +1,42 @@
1.section .text,"ax",%progbits
2.code 32
3.align 0x04
4.global start
5start:
6 sub r7, pc, #8 /* Copy running address */
7 msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */
8 /* The stub could be located at a virtual address so killing the MMU at
9 * this point would be mere suicide. We assume that the remap location
10 * is identically mapped and kill the MMU after the copy */
11
12 /* Relocate to right address */
13 mov r2, r7
14 ldr r3, =_copystart
15 ldr r4, =_copyend
161:
17 cmp r4, r3
18 ldrhi r5, [r2], #4
19 strhi r5, [r3], #4
20 bhi 1b
21 mov r2, #0
22 mcr p15, 0, r2, c7, c5, 0 @ Invalidate ICache
23 /* Jump to real location */
24 ldr pc, =remap
25remap:
26 /* Disable MMU, disable caching and buffering;
27 * use low exception range address */
28 mrc p15, 0, r0, c1, c0, 0
29 ldr r1, =0x3005
30 bic r0, r1
31 mcr p15, 0, r0, c1, c0, 0
32 /* clear bss */
33 ldr r2, =bss_start
34 ldr r3, =bss_end
35 mov r4, #0
361:
37 cmp r3, r2
38 strhi r4, [r2], #4
39 bhi 1b
40 /* jump to C code */
41 ldr sp, =oc_stackend
42 b main