Rev 1166 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1166 | Rev 1395 | ||
---|---|---|---|
Line 104... | Line 104... | ||
104 | jump_to_kernel: |
104 | jump_to_kernel: |
105 | 105 | ||
106 | # r3 = bootinfo (pa) |
106 | # r3 = bootinfo (pa) |
107 | # r4 = bootinfo_size |
107 | # r4 = bootinfo_size |
108 | # r5 = trans (pa) |
108 | # r5 = trans (pa) |
109 | # r6 = kernel size |
109 | # r6 = bytes to copy |
110 | # r7 = framebuffer (pa) |
- | |
111 | # r8 = real_mode (pa) |
110 | # r7 = real_mode (pa) |
112 | 111 | ||
- | 112 | # disable interrupts |
|
- | 113 | ||
- | 114 | mfmsr r31 |
|
- | 115 | rlwinm r31, r31, 0, 17, 15 |
|
- | 116 | mtmsr r31 |
|
- | 117 | ||
- | 118 | # set real_mode meeting point address |
|
- | 119 | ||
113 | mtspr srr0, r8 |
120 | mtspr srr0, r7 |
114 | 121 | ||
115 | # jumps to real_mode |
122 | # jumps to real_mode |
116 | 123 | ||
117 | mfmsr r31 |
124 | mfmsr r31 |
118 | lis r30, ~0@h |
125 | lis r30, ~0@h |
Line 122... | Line 129... | ||
122 | 129 | ||
123 | sync |
130 | sync |
124 | isync |
131 | isync |
125 | rfid |
132 | rfid |
126 | 133 | ||
127 | .section REALMODE |
134 | .section REALMODE, "ax" |
128 | .align PAGE_WIDTH |
135 | .align PAGE_WIDTH |
129 | .global real_mode |
136 | .global real_mode |
130 | 137 | ||
131 | real_mode: |
138 | real_mode: |
132 | 139 | ||
133 | # copy kernel to proper location |
140 | # copy kernel to proper location |
134 | # |
141 | # |
135 | # r5 = trans (pa) |
142 | # r5 = trans (pa) |
136 | # r6 = kernel size |
143 | # r6 = bytes to copy |
137 | # r7 = framebuffer (pa) |
- | |
138 | 144 | ||
139 | li r31, PAGE_SIZE >> 2 |
145 | li r31, PAGE_SIZE >> 2 |
140 | li r30, 0 |
146 | li r30, 0 |
141 | 147 | ||
142 | page_copy: |
148 | page_copy: |
Line 166... | Line 172... | ||
166 | addi r5, r5, 4 |
172 | addi r5, r5, 4 |
167 | b page_copy |
173 | b page_copy |
168 | 174 | ||
169 | copy_end: |
175 | copy_end: |
170 | 176 | ||
171 | # invalidate segment registers |
177 | # initially fill segment registers |
172 | 178 | ||
173 | li r31, 16 |
179 | li r31, 16 |
174 | mtctr r31 |
180 | mtctr r31 |
175 | li r31, 0 |
181 | li r31, 0 |
176 | li r30, 0 |
182 | li r30, 0x2000 |
177 | 183 | ||
178 | seg_fill: |
184 | seg_fill: |
179 | 185 | ||
180 | mtsrin r30, r31 |
186 | mtsrin r30, r31 |
- | 187 | addi r30, r30, 0x111 |
|
181 | addis r31, r31, 0x1000 # move to next SR |
188 | addis r31, r31, 0x1000 # move to next SR |
182 | 189 | ||
183 | bdnz seg_fill |
190 | bdnz seg_fill |
184 | 191 | ||
185 | # invalidate block address translation registers |
- | |
186 | - | ||
187 | mtspr ibat0u, r30 |
- | |
188 | mtspr ibat0l, r30 |
- | |
189 | - | ||
190 | mtspr ibat1u, r30 |
- | |
191 | mtspr ibat1l, r30 |
- | |
192 | - | ||
193 | mtspr ibat2u, r30 |
- | |
194 | mtspr ibat2l, r30 |
- | |
195 | - | ||
196 | mtspr ibat3u, r30 |
- | |
197 | mtspr ibat3l, r30 |
- | |
198 | - | ||
199 | mtspr dbat0u, r30 |
- | |
200 | mtspr dbat0l, r30 |
- | |
201 | - | ||
202 | mtspr dbat1u, r30 |
- | |
203 | mtspr dbat1l, r30 |
- | |
204 | - | ||
205 | mtspr dbat2u, r30 |
- | |
206 | mtspr dbat2l, r30 |
- | |
207 | - | ||
208 | mtspr dbat3u, r30 |
- | |
209 | mtspr dbat3l, r30 |
- | |
210 | - | ||
211 | # create identity mapping |
- | |
212 | - | ||
213 | # FIXME: map exactly the size of RAM |
- | |
214 | - | ||
215 | lis r31, 0x8000 |
- | |
216 | ori r31, r31, 0x0ffe |
- | |
217 | - | ||
218 | lis r30, 0x0000 |
- | |
219 | ori r30, r30, 0x0002 |
- | |
220 | - | ||
221 | mtspr ibat0u, r31 |
- | |
222 | mtspr ibat0l, r30 |
- | |
223 | - | ||
224 | mtspr dbat0u, r31 |
- | |
225 | mtspr dbat0l, r30 |
- | |
226 | - | ||
227 | # FIXME: temporal framebuffer mapping |
- | |
228 | - | ||
229 | lis r31, 0xf000 |
- | |
230 | ori r31, r31, 0x0ffe |
- | |
231 | - | ||
232 | mr r30, r7 |
- | |
233 | ori r30, r30, 0x0002 |
- | |
234 | - | ||
235 | mtspr dbat1u, r31 |
- | |
236 | mtspr dbat1l, r30 |
- | |
237 | - | ||
238 | tlbia |
192 | tlbia |
- | 193 | tlbsync |
|
239 | 194 | ||
240 | # start the kernel |
195 | # start the kernel |
241 | # |
196 | # |
242 | # r3 = bootinfo (pa) |
197 | # r3 = bootinfo (pa) |
243 | 198 |