hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
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