This package just contains a small Gemini-only assembler bootstrap loop to copy the kernel from the two fragments (previously zImage at 0x01600000 and initramdisk at 0x00800000) into one big zImage of up to 8 MB at 0x00400000. It will be built on demand from the Gemini image Makefile. Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
		
			
				
	
	
		
			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
 |