Changeset 1fbe8da2 in mainline
- Timestamp:
- 2006-03-15T18:25:43Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f9719b58
- Parents:
- 032a9b3
- Location:
- arch/ppc32/loader
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/loader/Makefile
r032a9b3 r1fbe8da2 66 66 67 67 image.boot: depend $(OBJECTS) kernel.o 68 $(LD) -no-check-sections -N -T _link.ld $(OBJECTS) kernel.o -o $@68 $(LD) -no-check-sections -N -T _link.ld -Map map $(OBJECTS) kernel.o -o $@ 69 69 70 70 depend: -
arch/ppc32/loader/_link.ld
r032a9b3 r1fbe8da2 10 10 .image 0x10000000: AT (0) { 11 11 *(BOOTSTRAP) 12 *(REALMODE) 12 13 *(.text); 13 14 -
arch/ppc32/loader/asm.S
r032a9b3 r1fbe8da2 181 181 182 182 jump_to_kernel: 183 184 # r3 = kernel_start (va) 185 # r4 = memmap (pa) 186 # r5 = real_mode (pa) 187 188 mtspr srr0, r5 189 190 # jumps to real_mode 191 192 mfmsr r5 193 lis r6, ~0@h 194 ori r6, r6, ~(msr_ir | msr_dr)@l 195 and r5, r5, r6 196 mtspr srr1, r5 197 rfi 198 199 .section REALMODE 200 .align 12 201 .global real_mode 202 203 real_mode: 204 205 # fill segment registers 206 207 li r5, 16 208 mtctr r5 209 li r5, 0 210 li r6, 0 211 212 seg_fill: 213 214 mtsrin r6, r5 215 addis r5, r5, 0x1000 # move to next SR 216 addis r6, r6, 0x10 # add 256 MB, move to next SR 217 218 bdnz seg_fill 219 220 # bootstrap kernel 221 # 222 # r3 = kernel_start (va) 223 # r4 = memmap (pa) -> r10 224 225 mtspr srr0, r3 226 227 mfmsr r5 228 ori r5, r5, (msr_ir | msr_dr)@l 229 mtspr srr1, r5 230 183 231 mr r10, r4 184 mtlr r3 185 blr 232 rfi -
arch/ppc32/loader/asm.h
r032a9b3 r1fbe8da2 31 31 32 32 void flush_instruction_cache(void); 33 void jump_to_kernel(void *code, void *memmap) __attribute__((noreturn)); 33 void jump_to_kernel(void *code, void *memmap, void *real_mode) __attribute__((noreturn)); 34 void real_mode(void *code, void *memmap); 34 35 35 36 #define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt)) -
arch/ppc32/loader/main.c
r032a9b3 r1fbe8da2 53 53 printf("total memory %d MB\n", memmap.total >> 20); 54 54 55 // FIXME: map just the kernel 56 if (ofw_map((void *) KERNEL_PHYSICAL_ADDRESS, (void *) KERNEL_VIRTUAL_ADDRESS, memmap.total - 64 * 1024 * 1024, 0) != 0) { 55 if (ofw_map((void *) KERNEL_PHYSICAL_ADDRESS, (void *) KERNEL_VIRTUAL_ADDRESS, KERNEL_SIZE + KERNEL_BOOT_OFFSET, 0) != 0) { 57 56 printf("Unable to map kernel memory at %L (physical %L)\n", KERNEL_VIRTUAL_ADDRESS, KERNEL_PHYSICAL_ADDRESS); 58 57 halt(); … … 66 65 ofw_map((void *) 0x80816000, (void *) 0xf2000000, 0x00018000, 0); 67 66 67 void *tramp = ofw_translate(&real_mode); 68 printf("bootstrap trampoline at %L (physical %L)\n", &real_mode, tramp); 68 69 printf("Booting the kernel...\n"); 69 70 70 71 flush_instruction_cache(); 71 jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS + KERNEL_BOOT_OFFSET, ofw_translate(&memmap) );72 jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS + KERNEL_BOOT_OFFSET, ofw_translate(&memmap), tramp); 72 73 }
Note:
See TracChangeset
for help on using the changeset viewer.