//boot/trunk/arch/ppc32/loader/asm.S |
---|
106,9 → 106,8 |
# r3 = bootinfo (pa) |
# r4 = bootinfo_size |
# r5 = trans (pa) |
# r6 = kernel size |
# r7 = framebuffer (pa) |
# r8 = real_mode (pa) |
# r6 = bytes to copy |
# r7 = real_mode (pa) |
# disable interrupts |
118,7 → 117,7 |
# set real_mode meeting point address |
mtspr srr0, r8 |
mtspr srr0, r7 |
# jumps to real_mode |
141,8 → 140,7 |
# copy kernel to proper location |
# |
# r5 = trans (pa) |
# r6 = kernel size |
# r7 = framebuffer (pa) |
# r6 = bytes to copy |
li r31, PAGE_SIZE >> 2 |
li r30, 0 |
233,17 → 231,6 |
mtspr dbat0u, r31 |
mtspr dbat0l, r30 |
# FIXME: temporal framebuffer mapping |
lis r31, 0xf000 |
ori r31, r31, 0x0ffe |
mr r30, r7 |
ori r30, r30, 0x0002 |
mtspr dbat1u, r31 |
mtspr dbat1l, r30 |
tlbia |
# start the kernel |
//boot/trunk/arch/ppc32/loader/main.c |
---|
106,7 → 106,6 |
void *real_mode_pa = ofw_translate(&real_mode); |
void *trans_pa = ofw_translate(&trans); |
void *bootinfo_pa = ofw_translate(&bootinfo); |
void *fb = (void *) (((unsigned int) bootinfo.screen.addr) & ((unsigned int) ~0 << 17)); |
printf("\nMemory statistics (total %d MB)\n", bootinfo.memmap.total >> 20); |
printf(" %L: boot info structure (physical %L)\n", &bootinfo, bootinfo_pa); |
151,5 → 150,5 |
fix_overlap(&bootinfo, &bootinfo_pa, "boot info", &top); |
printf("\nBooting the kernel...\n"); |
jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, fb, real_mode_pa); |
jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, real_mode_pa); |
} |
//boot/trunk/arch/ppc32/loader/asm.h |
---|
44,7 → 44,7 |
extern void *trans[TRANS_SIZE]; |
extern void halt(); |
extern void jump_to_kernel(void *bootinfo, unsigned int bootinfo_size, void *trans, unsigned int kernel_size, void *framebuffer, void *real_mode) __attribute__((noreturn)); |
extern void jump_to_kernel(void *bootinfo, unsigned int bootinfo_size, void *trans, unsigned int kernel_size, void *real_mode) __attribute__((noreturn)); |
extern void real_mode(); |
#endif |