| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // 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
|