forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.6 KiB
85 lines
1.6 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/* |
|
* 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
|
|
|