1
2
3
4
5
6
7
8
9
10
11
12#include <linux/init.h>
13#include <linux/threads.h>
14#include <linux/linkage.h>
15#include <asm/ptrace.h>
16#include <asm/page.h>
17#include <asm/spr-regs.h>
18#include <asm/mb86943a.h>
19#include "head.inc"
20
21
22#define __400_DBR0 0xfe000e00
23#define __400_DBR1 0xfe000e08
24#define __400_DBR2 0xfe000e10
25#define __400_DBR3 0xfe000e18
26#define __400_DAM0 0xfe000f00
27#define __400_DAM1 0xfe000f08
28#define __400_DAM2 0xfe000f10
29#define __400_DAM3 0xfe000f18
30#define __400_LGCR 0xfe000010
31#define __400_LCR 0xfe000100
32#define __400_LSBR 0xfe000c00
33
34 __INIT
35 .balign 4
36
37
38
39
40
41
42
43
44
45
46
47 .globl __head_fr451_set_protection
48__head_fr451_set_protection:
49 movsg lr,gr27
50
51 movgs gr0,dampr10
52 movgs gr0,damlr10
53 movgs gr0,dampr9
54 movgs gr0,damlr9
55 movgs gr0,dampr8
56 movgs gr0,damlr8
57
58
59 sethi.p %hi(__region_IO),gr5
60 setlo %lo(__region_IO),gr5
61 sethi.p %hi(0x1fffffff),gr7
62 setlo %lo(0x1fffffff),gr7
63 ori gr5,
64 movgs gr5,dampr11 ; General I/O tile
65 movgs gr7,damlr11
66
67
68
69 sethi.p %hi(__kernel_image_end),gr8
70 setlo %lo(__kernel_image_end),gr8
71 sethi.p %hi(32768),gr4 ; allow for a maximal allocator bitmap
72 setlo %lo(32768),gr4
73 add gr8,gr4,gr8
74 sethi.p %hi(1024*2048-1),gr4 ; round up to nearest 2MiB
75 setlo %lo(1024*2048-1),gr4
76 add.p gr8,gr4,gr8
77 not gr4,gr4
78 and gr8,gr4,gr8
79
80 sethi.p %hi(__page_offset),gr9
81 setlo %lo(__page_offset),gr9
82 add gr9,gr25,gr9
83
84 sethi.p %hi(0xffffc000),gr11
85 setlo %lo(0xffffc000),gr11
86
87
88
89
90 LEDS 0x3317
91 call __head_split_region
92 movgs gr4,iampr7
93 movgs gr6,iamlr7
94 movgs gr5,dampr7
95 movgs gr7,damlr7
96
97 LEDS 0x3316
98 call __head_split_region
99 movgs gr4,iampr6
100 movgs gr6,iamlr6
101 movgs gr5,dampr6
102 movgs gr7,damlr6
103
104 LEDS 0x3315
105 call __head_split_region
106 movgs gr4,iampr5
107 movgs gr6,iamlr5
108 movgs gr5,dampr5
109 movgs gr7,damlr5
110
111 LEDS 0x3314
112 call __head_split_region
113 movgs gr4,iampr4
114 movgs gr6,iamlr4
115 movgs gr5,dampr4
116 movgs gr7,damlr4
117
118 LEDS 0x3313
119 call __head_split_region
120 movgs gr4,iampr3
121 movgs gr6,iamlr3
122 movgs gr5,dampr3
123 movgs gr7,damlr3
124
125 LEDS 0x3312
126 call __head_split_region
127 movgs gr4,iampr2
128 movgs gr6,iamlr2
129 movgs gr5,dampr2
130 movgs gr7,damlr2
131
132 LEDS 0x3311
133 call __head_split_region
134 movgs gr4,iampr1
135 movgs gr6,iamlr1
136 movgs gr5,dampr1
137 movgs gr7,damlr1
138
139
140 LEDS 0x3310
141 sethi.p %hi(__page_offset),gr8
142 setlo %lo(__page_offset),gr8
143 call __head_split_region
144
145#ifdef CONFIG_PROTECT_KERNEL
146 ori.p gr4,
147 ori gr5,
148#endif
149
150 movgs gr4,iampr0
151 movgs gr6,iamlr0
152 movgs gr5,dampr0
153 movgs gr7,damlr0
154
155
156 movgs gr0,cxnr
157 movgs gr0,ttbr
158
159
160 movsg tbr,gr4
161 movgs gr4,btbr
162
163
164 movgs gr0,timerh
165 movgs gr0,timerl
166 movgs gr0,timerd
167 movsg hsr0,gr4
168 sethi.p %hi(HSR0_ETMI),gr5
169 setlo %lo(HSR0_ETMI),gr5
170 or gr4,gr5,gr4
171 movgs gr4,hsr0
172
173 LEDS 0x3300
174 jmpl @(gr27,gr0)
175