]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - arch/sh/boot/romimage/head.S
Merge branch 'linus' into perf/urgent, to pick up dependent commits
[mirror_ubuntu-focal-kernel.git] / arch / sh / boot / romimage / head.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3 * linux/arch/sh/boot/romimage/head.S
4 *
5 * Board specific setup code, executed before zImage loader
6 */
7
8 .text
9 #include <asm/page.h>
10
11 .global romstart
12 romstart:
13 /* include board specific setup code */
14 #include <mach/romimage.h>
15
16 #ifdef CONFIG_ROMIMAGE_MMCIF
17 /* load the romImage to above the empty zero page */
18 mov.l empty_zero_page_dst, r4
19 mov.l empty_zero_page_dst_adj, r5
20 add r5, r4
21 mov.l bytes_to_load, r5
22 mov.l loader_function, r7
23 jsr @r7
24 mov r4, r15
25
26 mov.l empty_zero_page_dst, r4
27 mov.l empty_zero_page_dst_adj, r5
28 add r5, r4
29 mov.l loaded_code_offs, r5
30 add r5, r4
31 jmp @r4
32 nop
33
34 .balign 4
35 empty_zero_page_dst_adj:
36 .long PAGE_SIZE
37 bytes_to_load:
38 .long end_data - romstart
39 loader_function:
40 .long mmcif_loader
41 loaded_code_offs:
42 .long loaded_code - romstart
43 loaded_code:
44 #endif /* CONFIG_ROMIMAGE_MMCIF */
45
46 /* copy the empty_zero_page contents to where vmlinux expects it */
47 mova extra_data_pos, r0
48 mov.l extra_data_size, r1
49 add r1, r0
50 mov.l empty_zero_page_dst, r1
51 mov #(PAGE_SHIFT - 4), r4
52 mov #1, r3
53 shld r4, r3 /* r3 = PAGE_SIZE / 16 */
54
55 1:
56 mov.l @r0, r4
57 mov.l @(4, r0), r5
58 mov.l @(8, r0), r6
59 mov.l @(12, r0), r7
60 add #16,r0
61 mov.l r4, @r1
62 mov.l r5, @(4, r1)
63 mov.l r6, @(8, r1)
64 mov.l r7, @(12, r1)
65 dt r3
66 add #16,r1
67 bf 1b
68
69 /* jump to the zImage entry point located after the zero page data */
70 mov #PAGE_SHIFT, r4
71 mov #1, r1
72 shld r4, r1
73 mova extra_data_pos, r0
74 add r1, r0
75 mov.l extra_data_size, r1
76 add r1, r0
77 jmp @r0
78 nop
79
80 .align 2
81 empty_zero_page_dst:
82 .long _text
83 extra_data_pos:
84 extra_data_size:
85 .long zero_page_pos - extra_data_pos