.GLOBL check_flashrom
.GLOBL switchbank0
.GLOBL switchbank1
.GLOBL writeflash
.GLOBL eraseflash
.ARM
@.SECTION .iwram
.ALIGN
.TEXT
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ Flash related functions.
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@extern void check_flashrom(u16 *v1, u16 *v2);
check_flashrom:
STMFD sp!, {r2-r5}
ldr r5,=0xE005555
mov r2,#0xAA
strb r2,[r5] @ AA => 0800AAAA
mov r4,#0xE000000
ldr r3,=0xE002AAA
mov r2,#0x55
strb r2,[r3] @ 55 => 08005554
mov r2,#0x90
strb r2,[r5] @ 90 => 0800AAAA
ldrh r2,[r4] @ 08000000 => v1
strh r2,[r0]
ldrh r0,[r4,#0x1] @ 08000002 => v2
strh r0,[r1]
mov r0,#0xF0
strh r0,[r4] @ F0 => 08000000
LDMFD sp!, {r2-r5}
bx lr
@extern void switchbank0(void);
switchbank0:
STMFD sp!, {r2-r5}
ldr r5,=0xE005555
mov r2,#0xAA
strb r2,[r5] @ AA => 0800AAAA
mov r4,#0xE000000
ldr r3,=0xE002AAA
mov r2,#0x55
strb r2,[r3] @ 55 => 08005554
mov r2,#0xB0
strb r2,[r5] @ 90 => 0800AAAA
mov r2,#0x00
strb r2,[r4]
LDMFD sp!, {r2-r5}
bx lr
@extern void switchbank1(void);
switchbank1:
STMFD sp!, {r2-r5}
ldr r5,=0xE005555
mov r2,#0xAA
strb r2,[r5] @ AA => 0800AAAA
mov r4,#0xE000000
ldr r3,=0xE002AAA
mov r2,#0x55
strb r2,[r3] @ 55 => 08005554
mov r2,#0xB0
strb r2,[r5] @ 90 => 0800AAAA
mov r2,#0x01
strb r2,[r4]
LDMFD sp!, {r2-r5}
bx lr
@extern void writeflash(u16 address, u8 data);
writeflash:
STMFD sp!, {r2-r5}
ldr r5,=0xE005555
mov r2,#0xAA
strb r2,[r5] @ AA => 0800AAAA
mov r4,#0xE000000
add r0, r0, r4
ldr r3,=0xE002AAA
mov r2,#0x55
strb r2,[r3] @ 55 => 08005554
mov r2,#0xA0
strb r2,[r5] @ 90 => 0800AAAA
strb r1,[r0]
writeloop:
ldrb r1,[r0]
ldrb r2,[r0]
cmp r1,r2
bne writeloop
ldrb r1,[r0]
ldrb r2,[r0]
cmp r1,r2
bne writeloop
LDMFD sp!, {r2-r5}
bx lr
@extern void eraseflash(void);
eraseflash:
STMFD sp!, {r0-r5}
ldr r3,=0xE005555
ldr r4,=0xE002AAA
ldr r5,=0xE000000
mov r2,#0xAA @ -> E005555
strb r2,[r3]
mov r2,#0x55 @ -> E002AAA
strb r2,[r4]
mov r2,#0x80 @ -> E005555
strb r2,[r3]
mov r2,#0xAA @ -> E005555
strb r2,[r3]
mov r2,#0x55 @ -> E002AAA
strb r2,[r4]
mov r2,#0x10 @ -> E005555
strb r2,[r3]
eraseloop:
ldrb r0,[r5]
ldrb r1,[r5]
cmp r0,r1
bne eraseloop
ldrb r0,[r5]
ldrb r1,[r5]
cmp r0,r1
bne eraseloop
LDMFD sp!, {r0-r5}
bx lr
|