[haiku-commits] r38988 - haiku/trunk/src/system/boot/platform/u-boot

  • From: ithamar.adema@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 17 Oct 2010 17:27:36 +0200 (CEST)

Author: ithamar
Date: 2010-10-17 17:27:36 +0200 (Sun, 17 Oct 2010)
New Revision: 38988
Changeset: http://dev.haiku-os.org/changeset/38988

Modified:
   haiku/trunk/src/system/boot/platform/u-boot/mmu.cpp
Log:
* Pass through physical RAM area to kernel.
* More code cleanup....

Currently working on getting the MMU code on the kernel side to function 
correctly, some progress already there, will follow in later commits...



Modified: haiku/trunk/src/system/boot/platform/u-boot/mmu.cpp
===================================================================
--- haiku/trunk/src/system/boot/platform/u-boot/mmu.cpp 2010-10-17 09:41:36 UTC 
(rev 38987)
+++ haiku/trunk/src/system/boot/platform/u-boot/mmu.cpp 2010-10-17 15:27:36 UTC 
(rev 38988)
@@ -285,9 +285,8 @@
         TRACE(("init_page_directory2\n"));
 
         // clear out the pgdir
-        for (uint32 i = 0; i < 4096; i++) {
+        for (uint32 i = 0; i < 4096; i++)
                sPageDirectory[i] = 0;
-        }
 
         uint32 *pageTable = NULL;
        for (uint32 i=0; i < ARRAY_SIZE(LOADER_MEMORYMAP);i++){
@@ -543,7 +542,7 @@
 extern "C" void
 mmu_init_for_kernel(void)
 {
-/*     TRACE(("mmu_init_for_kernel\n"));
+       TRACE(("mmu_init_for_kernel\n"));
 
        // save the memory we've physically allocated
        gKernelArgs.physical_allocated_range[0].size
@@ -555,7 +554,7 @@
        gKernelArgs.virtual_allocated_range[0].size
                = sNextVirtualAddress - KERNEL_BASE;
        gKernelArgs.num_virtual_allocated_ranges = 1;
-
+/*
        // sort the address ranges
        sort_addr_range(gKernelArgs.physical_memory_range,
                gKernelArgs.num_physical_memory_ranges);
@@ -571,29 +570,37 @@
 mmu_init(void)
 {
        TRACE(("mmu_init\n"));
+
        mmu_write_C1(mmu_read_C1() & ~((1<<29)|(1<<28)|(1<<0)));// access flag 
disabled, TEX remap disabled, mmu disabled
+
+       uint32 highestRAMAddress = SDRAM_BASE;
+
        //calculate lowest RAM adress from MEMORYMAP
-       for(int i=0;i<ARRAY_SIZE(LOADER_MEMORYMAP);i++){
-               if(strcmp("RAM_free",LOADER_MEMORYMAP[i].name)==0){
-                       sNextPhysicalAddress=LOADER_MEMORYMAP[i].start;
+       for(int i = 0; i < ARRAY_SIZE(LOADER_MEMORYMAP); i++) {
+               if (strcmp("RAM_free", LOADER_MEMORYMAP[i].name) == 0)
+                       sNextPhysicalAddress = LOADER_MEMORYMAP[i].start;
+
+               if (strcmp("RAM_pt", LOADER_MEMORYMAP[i].name) == 0) {
+                       sNextPageTableAddress = LOADER_MEMORYMAP[i].start + 
MMU_L1_TABLE_SIZE;
+                       kPageTableRegionEnd = LOADER_MEMORYMAP[i].end;
+                       sPageDirectory = (uint32 *) LOADER_MEMORYMAP[i].start;
                }
-               if(strcmp("RAM_pt",LOADER_MEMORYMAP[i].name)==0){
-                       sNextPageTableAddress=LOADER_MEMORYMAP[i].start + 
MMU_L1_TABLE_SIZE;
-                       kPageTableRegionEnd = LOADER_MEMORYMAP[i].end;
-                       sPageDirectory = (uint32 *) LOADER_MEMORYMAP[i].start ;
 
+               if (strncmp("RAM_", LOADER_MEMORYMAP[i].name, 4) == 0) {
+                       if (LOADER_MEMORYMAP[i].end > highestRAMAddress)
+                               highestRAMAddress = LOADER_MEMORYMAP[i].end;
                }
        }
 
+       gKernelArgs.physical_memory_range[0].start = SDRAM_BASE;
+       gKernelArgs.physical_memory_range[0].size = highestRAMAddress - 
SDRAM_BASE;
+       gKernelArgs.num_physical_memory_ranges = 1;
 
        gKernelArgs.physical_allocated_range[0].start = sNextPhysicalAddress;
        gKernelArgs.physical_allocated_range[0].size = 0;
        gKernelArgs.num_physical_allocated_ranges = 1;
                // remember the start of the allocated physical pages
 
-
-
-
        init_page_directory();
 
        // Map the page directory into kernel space at 0xffc00000-0xffffffff


Other related posts:

  • » [haiku-commits] r38988 - haiku/trunk/src/system/boot/platform/u-boot - ithamar . adema