rockbox/utils/hwstub/stub/pp/crt0.S
Amaury Pouly ccfa51835e 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
2014-04-07 22:26:50 +02:00

42 lines
1.2 KiB
ArmAsm

.section .text,"ax",%progbits
.code 32
.align 0x04
.global start
start:
sub r7, pc, #8 /* Copy running address */
msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */
/* The stub could be located at a virtual address so killing the MMU at
* this point would be mere suicide. We assume that the remap location
* is identically mapped and kill the MMU after the copy */
/* Relocate to right address */
mov r2, r7
ldr r3, =_copystart
ldr r4, =_copyend
1:
cmp r4, r3
ldrhi r5, [r2], #4
strhi r5, [r3], #4
bhi 1b
mov r2, #0
mcr p15, 0, r2, c7, c5, 0 @ Invalidate ICache
/* Jump to real location */
ldr pc, =remap
remap:
/* Disable MMU, disable caching and buffering;
* use low exception range address */
mrc p15, 0, r0, c1, c0, 0
ldr r1, =0x3005
bic r0, r1
mcr p15, 0, r0, c1, c0, 0
/* clear bss */
ldr r2, =bss_start
ldr r3, =bss_end
mov r4, #0
1:
cmp r3, r2
strhi r4, [r2], #4
bhi 1b
/* jump to C code */
ldr sp, =oc_stackend
b main