Blame view

kernel/linux-imx6_3.14.28/arch/alpha/kernel/head.S 2.09 KB
6b13f685e   김민수   BSP 최초 추가
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
86
87
88
89
90
91
92
93
94
95
96
97
98
  /*
   * arch/alpha/kernel/head.S
   *
   * initial boot stuff.. At this point, the bootloader has already
   * switched into OSF/1 PAL-code, and loaded us at the correct address
   * (START_ADDR).  So there isn't much left for us to do: just set up
   * the kernel global pointer and jump to the kernel entry-point.
   */
  
  #include <linux/init.h>
  #include <asm/asm-offsets.h>
  #include <asm/pal.h>
  #include <asm/setup.h>
  
  __HEAD
  .globl _stext
  	.set noreorder
  	.globl	__start
  	.ent	__start
  _stext:
  __start:
  	.prologue 0
  	br	$27,1f
  1:	ldgp	$29,0($27)
  	/* We need to get current_task_info loaded up...  */
  	lda	$8,init_thread_union
  	/* ... and find our stack ... */
  	lda	$30,0x4000 - SIZEOF_PT_REGS($8)
  	/* ... and then we can start the kernel.  */
  	jsr	$26,start_kernel
  	call_pal PAL_halt
  	.end __start
  
  #ifdef CONFIG_SMP
  	.align 3
  	.globl	__smp_callin
  	.ent	__smp_callin
  	/* On entry here from SRM console, the HWPCB of the per-cpu
  	   slot for this processor has been loaded.  We've arranged
  	   for the UNIQUE value for this process to contain the PCBB
  	   of the target idle task.  */
  __smp_callin:
  	.prologue 1
  	ldgp	$29,0($27)	# First order of business, load the GP.
  
  	call_pal PAL_rduniq	# Grab the target PCBB.
  	mov	$0,$16		# Install it.
  	call_pal PAL_swpctx
  
  	lda	$8,0x3fff	# Find "current".
  	bic	$30,$8,$8
  	
  	jsr	$26,smp_callin
  	call_pal PAL_halt
  	.end __smp_callin
  #endif /* CONFIG_SMP */
  
  	#
  	# The following two functions are needed for supporting SRM PALcode
  	# on the PC164 (at least), since that PALcode manages the interrupt
  	# masking, and we cannot duplicate the effort without causing problems
  	#
  
  	.align 3
  	.globl	cserve_ena
  	.ent	cserve_ena
  cserve_ena:
  	.prologue 0
  	bis	$16,$16,$17
  	lda	$16,52($31)
  	call_pal PAL_cserve
  	ret	($26)
  	.end	cserve_ena
  
  	.align 3
  	.globl	cserve_dis
  	.ent	cserve_dis
  cserve_dis:
  	.prologue 0
  	bis	$16,$16,$17
  	lda	$16,53($31)
  	call_pal PAL_cserve
  	ret	($26)
  	.end	cserve_dis
  
  	#
  	# It is handy, on occasion, to make halt actually just loop. 
  	# Putting it here means we dont have to recompile the whole
  	# kernel.
  	#
  
  	.align 3
  	.globl	halt
  	.ent	halt
  halt:
  	.prologue 0
  	call_pal PAL_halt
  	.end	halt