Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1021 → Rev 1022

/boot/trunk/arch/ppc32/loader/asm.S
180,6 → 180,53
blr
 
jump_to_kernel:
# r3 = kernel_start (va)
# r4 = memmap (pa)
# r5 = real_mode (pa)
mtspr srr0, r5
# jumps to real_mode
mfmsr r5
lis r6, ~0@h
ori r6, r6, ~(msr_ir | msr_dr)@l
and r5, r5, r6
mtspr srr1, r5
rfi
 
.section REALMODE
.align 12
.global real_mode
 
real_mode:
 
# fill segment registers
 
li r5, 16
mtctr r5
li r5, 0
li r6, 0
seg_fill:
mtsrin r6, r5
addis r5, r5, 0x1000 # move to next SR
addis r6, r6, 0x10 # add 256 MB, move to next SR
bdnz seg_fill
# bootstrap kernel
#
# r3 = kernel_start (va)
# r4 = memmap (pa) -> r10
mtspr srr0, r3
mfmsr r5
ori r5, r5, (msr_ir | msr_dr)@l
mtspr srr1, r5
mr r10, r4
mtlr r3
blr
rfi
/boot/trunk/arch/ppc32/loader/main.c
52,8 → 52,7
}
printf("total memory %d MB\n", memmap.total >> 20);
// FIXME: map just the kernel
if (ofw_map((void *) KERNEL_PHYSICAL_ADDRESS, (void *) KERNEL_VIRTUAL_ADDRESS, memmap.total - 64 * 1024 * 1024, 0) != 0) {
if (ofw_map((void *) KERNEL_PHYSICAL_ADDRESS, (void *) KERNEL_VIRTUAL_ADDRESS, KERNEL_SIZE + KERNEL_BOOT_OFFSET, 0) != 0) {
printf("Unable to map kernel memory at %L (physical %L)\n", KERNEL_VIRTUAL_ADDRESS, KERNEL_PHYSICAL_ADDRESS);
halt();
}
65,8 → 64,10
ofw_map((void *) 0x84000000, (void *) 0xf0000000, 0x01000000, 0);
ofw_map((void *) 0x80816000, (void *) 0xf2000000, 0x00018000, 0);
void *tramp = ofw_translate(&real_mode);
printf("bootstrap trampoline at %L (physical %L)\n", &real_mode, tramp);
printf("Booting the kernel...\n");
flush_instruction_cache();
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS + KERNEL_BOOT_OFFSET, ofw_translate(&memmap));
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS + KERNEL_BOOT_OFFSET, ofw_translate(&memmap), tramp);
}
/boot/trunk/arch/ppc32/loader/asm.h
30,7 → 30,8
#define __ASM_H__
 
void flush_instruction_cache(void);
void jump_to_kernel(void *code, void *memmap) __attribute__((noreturn));
void jump_to_kernel(void *code, void *memmap, void *real_mode) __attribute__((noreturn));
void real_mode(void *code, void *memmap);
 
#define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt))
 
/boot/trunk/arch/ppc32/loader/_link.ld
9,6 → 9,7
SECTIONS {
.image 0x10000000: AT (0) {
*(BOOTSTRAP)
*(REALMODE)
*(.text);
*(.rodata);
/boot/trunk/arch/ppc32/loader/Makefile
65,7 → 65,7
-include Makefile.depend
 
image.boot: depend $(OBJECTS) kernel.o
$(LD) -no-check-sections -N -T _link.ld $(OBJECTS) kernel.o -o $@
$(LD) -no-check-sections -N -T _link.ld -Map map $(OBJECTS) kernel.o -o $@
 
depend:
-makedepend $(DEFS) $(CFLAGS) -f - $(SOURCES) > Makefile.depend 2> /dev/null