46 lines
1.0 KiB
ArmAsm
46 lines
1.0 KiB
ArmAsm
// Arm assembly to copy the Gemini kernel on Storlink reference
|
|
// designs and derived devices with the same flash layout and
|
|
// boot loader.
|
|
//
|
|
// This will execute at 0x01600000
|
|
//
|
|
// Copies the kernel from two fragments (originally zImage
|
|
// and initramdisk) to 0x00400000 making space for a kernel
|
|
// image of up to 8 MB except for these 512 bytes used for
|
|
// this bootstrap.
|
|
//
|
|
// 0x01600200 .. 0x017fffff -> 0x00400000 .. 0x005ffdff
|
|
// 0x00800000 .. 0x00dfffff -> 0x005ffe00 .. 0x00bffdff
|
|
|
|
// Memory used for this bootstrap
|
|
.equ BOOT_HEADROOM, 0x200
|
|
|
|
.global _start // Stand-alone assembly code
|
|
_start:
|
|
mov r1, #0x01600000
|
|
mov r2, #0x00400000
|
|
mov r3, #0x00200000
|
|
add r1, r1, #BOOT_HEADROOM
|
|
sub r3, r3, #BOOT_HEADROOM
|
|
copyloop1:
|
|
ldr r0, [r1]
|
|
str r0, [r2]
|
|
add r1, r1, #4
|
|
add r2, r2, #4
|
|
sub r3, r3, #4
|
|
cmp r3, #0
|
|
bne copyloop1
|
|
mov r1, #0x00800000
|
|
mov r3, #0x00600000
|
|
copyloop2:
|
|
ldr r0, [r1]
|
|
str r0, [r2]
|
|
add r1, r1, #4
|
|
add r2, r2, #4
|
|
sub r3, r3, #4
|
|
cmp r3, #0
|
|
bne copyloop2
|
|
mov r0, #0x00400000
|
|
// Let's go
|
|
mov pc, r0
|