Blame view

kernel/linux-rt-4.4.41/arch/sh/boot/romimage/head.S 1.56 KB
5113f6f70   김현기   kernel add
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
  /*
   *  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