1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| /* 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
|
|