12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /*
- * linux/arch/sh/boot/romimage/head.S
- *
- * Board specific setup code, executed before zImage loader
- */
- .text
- #include <asm/page.h>
- .global romstart
- romstart:
- /* include board specific setup code */
- #include <mach/romimage.h>
- #ifdef CONFIG_ROMIMAGE_MMCIF
- /* load the romImage to above the empty zero page */
- mov.l empty_zero_page_dst, r4
- mov.l empty_zero_page_dst_adj, r5
- add r5, r4
- mov.l bytes_to_load, r5
- mov.l loader_function, r7
- jsr @r7
- mov r4, r15
- mov.l empty_zero_page_dst, r4
- mov.l empty_zero_page_dst_adj, r5
- add r5, r4
- mov.l loaded_code_offs, r5
- add r5, r4
- jmp @r4
- nop
- .balign 4
- empty_zero_page_dst_adj:
- .long PAGE_SIZE
- bytes_to_load:
- .long end_data - romstart
- loader_function:
- .long mmcif_loader
- loaded_code_offs:
- .long loaded_code - romstart
- loaded_code:
- #endif /* CONFIG_ROMIMAGE_MMCIF */
- /* copy the empty_zero_page contents to where vmlinux expects it */
- mova extra_data_pos, r0
- mov.l extra_data_size, r1
- add r1, r0
- mov.l empty_zero_page_dst, r1
- mov #(PAGE_SHIFT - 4), r4
- mov #1, r3
- shld r4, r3 /* r3 = PAGE_SIZE / 16 */
- 1:
- mov.l @r0, r4
- mov.l @(4, r0), r5
- mov.l @(8, r0), r6
- mov.l @(12, r0), r7
- add #16,r0
- mov.l r4, @r1
- mov.l r5, @(4, r1)
- mov.l r6, @(8, r1)
- mov.l r7, @(12, r1)
- dt r3
- add #16,r1
- bf 1b
- /* jump to the zImage entry point located after the zero page data */
- mov #PAGE_SHIFT, r4
- mov #1, r1
- shld r4, r1
- mova extra_data_pos, r0
- add r1, r0
- mov.l extra_data_size, r1
- add r1, r0
- jmp @r0
- nop
- .align 2
- empty_zero_page_dst:
- .long _text
- extra_data_pos:
- extra_data_size:
- .long zero_page_pos - extra_data_pos
|