Changeset eebd172 in mainline for arch/ppc32/loader/main.c


Ignore:
Timestamp:
2006-03-13T19:58:00Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6323989
Parents:
272c219
Message:

relocate ppc32 kernel above 2 GB

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ppc32/loader/main.c

    r272c219 reebd172  
    3232#include "asm.h"
    3333
    34 #define KERNEL_LOAD_ADDRESS 0x400000
     34#define KERNEL_PHYSICAL_ADDRESS 0x1000
     35#define KERNEL_VIRTUAL_ADDRESS 0x80001000
    3536#define KERNEL_START &_binary_____________kernel_kernel_bin_start
    3637#define KERNEL_END &_binary_____________kernel_kernel_bin_end
     
    4142        printf("\nHelenOS PPC Bootloader\n");
    4243       
    43         void *loader = ofw_translate(&start);
    44         printf("loaded at %L (physical %L)\n", &start, loader);
    45         printf("kernel load address %L (size %d)\n", KERNEL_LOAD_ADDRESS, KERNEL_SIZE);
     44        void *phys = ofw_translate(&start);
     45        printf("loaded at %L (physical %L)\n", &start, phys);
    4646       
    47         void *addr = ofw_claim((void *) KERNEL_LOAD_ADDRESS, KERNEL_SIZE, 1);
    48         if (addr == NULL) {
    49                 printf("Error: Unable to claim memory");
     47        // FIXME: map just the kernel
     48        if (ofw_map((void *) KERNEL_PHYSICAL_ADDRESS, (void *) KERNEL_VIRTUAL_ADDRESS, 1024 * 1024, 0) != 0) {
     49                printf("Unable to map kernel memory at %L (physical %L)\n", KERNEL_VIRTUAL_ADDRESS, KERNEL_PHYSICAL_ADDRESS);
    5050                halt();
    5151        }
    52         printf("Claimed memory at %L\n", addr);
    53         memcpy(addr, KERNEL_START, KERNEL_SIZE);
     52        printf("kernel memory mapped at %L (physical %L, size %d bytes)\n", KERNEL_VIRTUAL_ADDRESS, KERNEL_PHYSICAL_ADDRESS, KERNEL_SIZE);
     53        // FIXME: relocate the kernel in real mode
     54        memcpy((void *) KERNEL_VIRTUAL_ADDRESS, KERNEL_START, KERNEL_SIZE);
     55       
     56        // FIXME: proper framebuffer mapping
     57        ofw_map((void *) 0x84000000, (void *) 0x84000000, 2 * 1024 * 1024, 0);
    5458       
    5559        printf("Booting the kernel...\n");
    56         jump_to_kernel(addr);
     60       
     61        flush_instruction_cache();
     62        jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS);
    5763}
Note: See TracChangeset for help on using the changeset viewer.