Changeset 1f330de in mainline for arch/ppc32/loader/main.c


Ignore:
Timestamp:
2006-03-17T02:04:30Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
543c31f
Parents:
01cb210
Message:

proper ppc32 initial memory mapping

File:
1 edited

Legend:

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

    r01cb210 r1f330de  
    4747
    4848
     49static void check_overlap(const void *addr, const char *desc)
     50{
     51        if ((unsigned int) addr < KERNEL_SIZE) {
     52                printf("Error: %s overlaps kernel physical area\n", desc);
     53                halt();
     54        }
     55}
     56
     57
    4958void bootstrap(void)
    5059{
     
    5564        check_align(&trans, "Translation table");
    5665       
     66        if (!ofw_memmap(&memmap)) {
     67                printf("Error: Unable to get memory map\n");
     68                halt();
     69        }
     70       
    5771        void *real_mode_pa = ofw_translate(&real_mode);
    5872        void *trans_pa = ofw_translate(&trans);
    5973        void *memmap_pa = ofw_translate(&memmap);
    6074       
    61         printf("Memory statistics\n");
     75        check_overlap(real_mode_pa, "Bootstrap trampoline");
     76        check_overlap(trans_pa, "Translation table");
     77        check_overlap(memmap_pa, "Memory map");
     78       
     79        printf("Memory statistics (total %d MB)\n", memmap.total >> 20);
    6280        printf(" kernel image         at %L (size %d bytes)\n", KERNEL_START, KERNEL_SIZE);
    6381        printf(" memory map           at %L (physical %L)\n", &memmap, memmap_pa);
     
    6583        printf(" translation table    at %L (physical %L)\n", &trans, trans_pa);
    6684       
    67         if (!ofw_memmap(&memmap)) {
    68                 printf("Unable to get memory map\n");
    69                 halt();
    70         }
    71         printf("Total memory %d MB\n", memmap.total >> 20);
    72        
    7385        unsigned int addr;
    74         unsigned int pages;
    75         for (addr = 0, pages = 0; addr < KERNEL_SIZE; addr += PAGE_SIZE, pages++) {
     86        for (addr = 0; addr < KERNEL_SIZE; addr += PAGE_SIZE) {
    7687                void *pa = ofw_translate(KERNEL_START + addr);
    77                 if ((unsigned int) pa < KERNEL_SIZE) {
    78                         printf("Error: Kernel image overlaps kernel physical area\n");
    79                         halt();
    80                 }
     88                check_overlap(pa, "Kernel image");
    8189                trans[addr >> PAGE_WIDTH] = pa;
    8290        }
    8391       
    8492        printf("Booting the kernel...\n");
    85         jump_to_kernel(memmap_pa, trans_pa, pages, real_mode_pa);
     93        jump_to_kernel(memmap_pa, trans_pa, KERNEL_SIZE, real_mode_pa);
    8694}
Note: See TracChangeset for help on using the changeset viewer.