82 lines
1.9 KiB
Plaintext
82 lines
1.9 KiB
Plaintext
|
|
See the top level README for information on where to find documentation
|
|
for the raspberry pi and the ARM processor inside. Also find information
|
|
on how to load and run these programs.
|
|
|
|
These examples are for the pi2, see other directories for other
|
|
flavors of raspberry pi. Specifically these examples are for running
|
|
in SVC mode. As of this writing the GPU planted bootstrap places
|
|
the ARM in HYP mode. For the moment I am using the code below to return
|
|
the ARM to SVC and secure mode. At least until it breaks.
|
|
|
|
The bootloader is one level up and shared for both SVC and HYP as I
|
|
want the applications loaded to make the changes not the bootloader.
|
|
|
|
|
|
.globl _start
|
|
_start:
|
|
ldr pc,reset_handler
|
|
ldr pc,undefined_handler
|
|
ldr pc,swi_handler
|
|
ldr pc,prefetch_handler
|
|
ldr pc,data_handler
|
|
ldr pc,hyp_handler
|
|
ldr pc,irq_handler
|
|
ldr pc,fiq_handler
|
|
reset_handler: .word reset
|
|
undefined_handler: .word hang
|
|
swi_handler: .word smc
|
|
prefetch_handler: .word hang
|
|
data_handler: .word hang
|
|
hyp_handler: .word hang
|
|
irq_handler: .word hang
|
|
fiq_handler: .word hang
|
|
|
|
reset:
|
|
|
|
;@ b skip
|
|
mrs r0,cpsr
|
|
bic r0,r0,#0x1F
|
|
orr r0,r0,#0x13
|
|
msr spsr_cxsf,r0
|
|
add r0,pc,#4
|
|
msr ELR_hyp,r0
|
|
eret
|
|
skip:
|
|
|
|
mrc p15, 0, r1, c12, c0, 0 ;@ get vbar
|
|
mov r0,#0x8000
|
|
;@ mov r1,#0x0000
|
|
ldmia r0!,{r2,r3,r4,r5,r6,r7,r8,r9}
|
|
stmia r1!,{r2,r3,r4,r5,r6,r7,r8,r9}
|
|
ldmia r0!,{r2,r3,r4,r5,r6,r7,r8,r9}
|
|
stmia r1!,{r2,r3,r4,r5,r6,r7,r8,r9}
|
|
|
|
mov r12,#0
|
|
mcr p15, 0, r12, c7, c10, 1
|
|
dsb
|
|
mov r12, #0
|
|
mcr p15, 0, r12, c7, c5, 0
|
|
mov r12, #0
|
|
mcr p15, 0, r12, c7, c5, 6
|
|
dsb
|
|
isb
|
|
smc #0
|
|
|
|
mrc p15,0,r2,c1,c0,0
|
|
bic r2,#0x1000
|
|
bic r2,#0x0004
|
|
mcr p15,0,r2,c1,c0,0
|
|
|
|
mov sp,#0x8000
|
|
mov r0,pc
|
|
bl notmain
|
|
hang: b hang
|
|
|
|
smc:
|
|
mrc p15, 0, r1, c1, c1, 0
|
|
bic r1, r1, #1
|
|
mcr p15, 0, r1, c1, c1, 0
|
|
movs pc, lr
|
|
|