Update injector impl

This commit is contained in:
Takumi Sueda 2021-03-11 13:35:07 +09:00
parent 40ab815357
commit 7c2200e371

View File

@ -15,12 +15,44 @@ _start:
mcr p15, 0, r8, c14, c3, 1 mcr p15, 0, r8, c14, c3, 1
mov r9, #0 mov r9, #0
mrc p15, 0, r10, c1, c0, 0 mrc p15, 0, r6, c1, c0, 0
@bic r10, r10, #5 @ disable MMU and dcache bic r6, r6, #4 @ disable dcache
bic r10, r10, #1 @ disable MMU bic r6, r6, #4096 @ disable icache
@bic r10, r10, #4096 @ disable icache mcr p15, 0, r6, c1, c0, 0 // write ctrl regs
mcr p15, 0, r10, c1, c0, 0 // write ctrl regs
#mcr p15, 0, r9, c7, c7, 0 // invalidate cache mcr p15, 0, r9, c7, c5, 0 // invalidate icache
#mcr p15, 0, r9, c8, c7, 0 // invalidate TLB
// from: https://www.aps-web.jp/academy/ca/229/#i-2
mov r10,#0 //
mcr p15,2,r10,c0,c0,0 // CSSELR
//
isb //
mrc p15,1,r1,c0,c0,0 // CCSIDR
and r2,r1,#7 // b001=8ワード/
add r2,r2,#4 // DCISW
ldr r4,=0x3FF //
ands r4,r4,r1,LSR #3 // r4
clz r5,r4 // DCISW
ldr r7,=0x7FFF //
ands r7,r7,r1,LSR #13 // r7
// 0x7F=12Kbyte/0xFF=32Kbyte/0x1FF=64Kbyte
loop2:
mov r9,r4 // r9
loop3:
orr r11,r10,r9,LSL r5 //
orr r11,r11,r7,LSL r2 //
mcr p15,0,r11,c7,c6,2 // DCISW/
//
subs r9,r9,#1 // -1
bge loop3 //
subs r7,r7,#1 // -1
bge loop2 //
mcr p15, 0, r9, c8, c7, 0 // invalidate TLB
mcr p15, 0, r9, c7, c5, 6 // invalidate branch predictor array
bic r6, r6, #1 @ disable MMU
mcr p15, 0, r6, c1, c0, 0 // write ctrl regs
mov pc, r0 mov pc, r0