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
| ! Copyright 2005,2006,2007,2009 Imagination Technologies
|
| #include <linux/init.h>
| #include <asm/metag_mem.h>
| #include <generated/asm-offsets.h>
| #undef __exit
|
| __HEAD
| ! Setup the stack and get going into _metag_start_kernel
| .global __start
| .type __start,function
| __start:
| ! D1Ar1 contains pTBI (ISTAT)
| ! D0Ar2 contains pTBI
| ! D1Ar3 contains __pTBISegs
| ! D0Ar4 contains kernel arglist pointer
|
| MOVT D0Re0,#HI(___pTBIs)
| ADD D0Re0,D0Re0,#LO(___pTBIs)
| SETL [D0Re0],D0Ar2,D1Ar1
| MOVT D0Re0,#HI(___pTBISegs)
| ADD D0Re0,D0Re0,#LO(___pTBISegs)
| SETD [D0Re0],D1Ar3
| MOV A0FrP,#0
| MOV D0Re0,#0
| MOV D1Re0,#0
| MOV D1Ar3,#0
| MOV D1Ar1,D0Ar4 !Store kernel boot params
| MOV D1Ar5,#0
| MOV D0Ar6,#0
| #ifdef CONFIG_METAG_DSP
| MOV D0.8,#0
| #endif
| MOVT A0StP,#HI(_init_thread_union)
| ADD A0StP,A0StP,#LO(_init_thread_union)
| ADD A0StP,A0StP,#THREAD_INFO_SIZE
| MOVT D1RtP,#HI(_metag_start_kernel)
| CALL D1RtP,#LO(_metag_start_kernel)
| .size __start,.-__start
|
| !! Needed by TBX
| .global __exit
| .type __exit,function
| __exit:
| XOR TXENABLE,D0Re0,D0Re0
| .size __exit,.-__exit
|
| #ifdef CONFIG_SMP
| .global _secondary_startup
| .type _secondary_startup,function
| _secondary_startup:
| #if CONFIG_PAGE_OFFSET < LINGLOBAL_BASE
| ! In case GCOn has just been turned on we need to fence any writes that
| ! the boot thread might have performed prior to coherency taking effect.
| MOVT D0Re0,#HI(LINSYSEVENT_WR_ATOMIC_UNLOCK)
| MOV D1Re0,#0
| SETD [D0Re0], D1Re0
| #endif
| MOVT A0StP,#HI(_secondary_data_stack)
| ADD A0StP,A0StP,#LO(_secondary_data_stack)
| GETD A0StP,[A0StP]
| ADD A0StP,A0StP,#THREAD_INFO_SIZE
| B _secondary_start_kernel
| .size _secondary_startup,.-_secondary_startup
| #endif
|
|