Rev 1075 | Rev 1146 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1075 | Rev 1131 | ||
---|---|---|---|
Line 106... | Line 106... | ||
106 | b 1b |
106 | b 1b |
107 | 107 | ||
108 | 108 | ||
109 | jump_to_kernel: |
109 | jump_to_kernel: |
110 | 110 | ||
111 | # r3 = memmap (pa) |
111 | # r3 = bootinfo (pa) |
- | 112 | # r4 = bootinfo_size |
|
112 | # r4 = trans (pa) |
113 | # r5 = trans (pa) |
113 | # r5 = kernel size |
114 | # r6 = kernel size |
114 | # r6 = real_mode (pa) |
115 | # r7 = real_mode (pa) |
115 | 116 | ||
116 | mtspr srr0, r6 |
117 | mtspr srr0, r7 |
117 | 118 | ||
118 | # jumps to real_mode |
119 | # jumps to real_mode |
119 | 120 | ||
120 | mfmsr r31 |
121 | mfmsr r31 |
121 | lis r30, ~0@h |
122 | lis r30, ~0@h |
Line 130... | Line 131... | ||
130 | 131 | ||
131 | real_mode: |
132 | real_mode: |
132 | 133 | ||
133 | # copy kernel to proper location |
134 | # copy kernel to proper location |
134 | # |
135 | # |
135 | # r4 = trans (pa) |
136 | # r5 = trans (pa) |
136 | # r5 = kernel size |
137 | # r6 = kernel size |
137 | 138 | ||
138 | li r31, PAGE_SIZE >> 2 |
139 | li r31, PAGE_SIZE >> 2 |
139 | li r30, 0 |
140 | li r30, 0 |
140 | 141 | ||
141 | page_copy: |
142 | page_copy: |
142 | 143 | ||
143 | cmpwi r5, 0 |
144 | cmpwi r6, 0 |
144 | beq copy_end |
145 | beq copy_end |
145 | 146 | ||
146 | # copy page |
147 | # copy page |
147 | 148 | ||
148 | mtctr r31 |
149 | mtctr r31 |
149 | lwz r29, 0(r4) |
150 | lwz r29, 0(r5) |
150 | 151 | ||
151 | copy_loop: |
152 | copy_loop: |
152 | 153 | ||
153 | lwz r28, 0(r29) |
154 | lwz r28, 0(r29) |
154 | stw r28, 0(r30) |
155 | stw r28, 0(r30) |
155 | 156 | ||
156 | addi r29, r29, 4 |
157 | addi r29, r29, 4 |
157 | addi r30, r30, 4 |
158 | addi r30, r30, 4 |
158 | subi r5, r5, 4 |
159 | subi r6, r6, 4 |
159 | 160 | ||
160 | cmpwi r5, 0 |
161 | cmpwi r6, 0 |
161 | beq copy_end |
162 | beq copy_end |
162 | 163 | ||
163 | bdnz copy_loop |
164 | bdnz copy_loop |
164 | 165 | ||
165 | addi r4, r4, 4 |
166 | addi r5, r5, 4 |
166 | b page_copy |
167 | b page_copy |
167 | 168 | ||
168 | copy_end: |
169 | copy_end: |
169 | 170 | ||
170 | # invalidate segment registers |
171 | # invalidate segment registers |
Line 236... | Line 237... | ||
236 | 237 | ||
237 | tlbia |
238 | tlbia |
238 | 239 | ||
239 | # start the kernel |
240 | # start the kernel |
240 | # |
241 | # |
241 | # r3 = memmap (pa) |
242 | # r3 = bootinfo (pa) |
242 | 243 | ||
243 | lis r31, KERNEL_START_ADDR@ha |
244 | lis r31, KERNEL_START_ADDR@ha |
244 | addi r31, r31, KERNEL_START_ADDR@l |
245 | addi r31, r31, KERNEL_START_ADDR@l |
245 | 246 | ||
246 | mtspr srr0, r31 |
247 | mtspr srr0, r31 |