[haiku-commits] haiku: hrev47653 - src/system/boot/arch/arm build/jam/board/beagle src/system/boot/platform/u-boot headers/private/kernel/arch/arm

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 8 Aug 2014 17:39:26 +0200 (CEST)

hrev47653 adds 1 changeset to branch 'master'
old head: 2ba49c880456828af7a9f9bf2acaa0cdaec4aaac
new head: 82d287ddcb5ebd221717d2bf18bac9d7c398f966
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=82d287d+%5E2ba49c8

----------------------------------------------------------------------------

82d287d: Reserve 8MB space for kernel before RAM_loader
  
  ...so that kernel does not overwrite the loader.
  
  Signed-off-by: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
  
  Fixes #11067.

                                    [ Arvind S Raj <sraj.arvind@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev47653
Commit:      82d287ddcb5ebd221717d2bf18bac9d7c398f966
URL:         http://cgit.haiku-os.org/haiku/commit/?id=82d287d
Author:      Arvind S Raj <sraj.arvind@xxxxxxxxx>
Date:        Fri Aug  8 14:44:54 2014 UTC
Committer:   Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Commit-Date: Fri Aug  8 15:39:33 2014 UTC

Ticket:      https://dev.haiku-os.org/ticket/11067

----------------------------------------------------------------------------

5 files changed, 43 insertions(+), 24 deletions(-)
build/jam/board/beagle/BoardSetup                | 22 +++++++-----
headers/private/kernel/arch/arm/omap3.h          |  2 ++
src/system/boot/arch/arm/arch_mmu.cpp            | 37 +++++++++++++-------
src/system/boot/platform/u-boot/Jamfile          |  4 +--
src/system/boot/platform/u-boot/arch/arm/shell.S |  2 +-

----------------------------------------------------------------------------

diff --git a/build/jam/board/beagle/BoardSetup 
b/build/jam/board/beagle/BoardSetup
index 0c54643..5ee0a11 100644
--- a/build/jam/board/beagle/BoardSetup
+++ b/build/jam/board/beagle/BoardSetup
@@ -8,19 +8,19 @@ HAIKU_BOARD_DESCRIPTION = "BeagleBoard" ;
 #
 
 # load address for haiku_loader
-HAIKU_BOARD_LOADER_BASE = 0x80008000 ;
+HAIKU_BOARD_LOADER_BASE = 0x80800000 ;
 # entry points (raw binary, and netbsd loader emulation)
-HAIKU_BOARD_LOADER_ENTRY_RAW = 0x80008000 ;
-HAIKU_BOARD_LOADER_ENTRY_NBSD = 0x80008008 ;
+HAIKU_BOARD_LOADER_ENTRY_RAW = $(HAIKU_BOARD_LOADER_BASE) ;
+HAIKU_BOARD_LOADER_ENTRY_NBSD = `printf \"obase=16;ibase=16;8 + %x\\n\" 
$(HAIKU_BOARD_LOADER_BASE)|bc` ;
 
 HAIKU_BOARD_LOADER_ENTRY = $(HAIKU_BOARD_LOADER_ENTRY_NBSD) ;
 HAIKU_BOARD_LOADER_FAKE_OS = netbsd ;
 
 # load address for haiku_loader uimage
 # (must be different than real load address)
-HAIKU_BOARD_LOADER_UIBASE = 0x84000000 ;
+HAIKU_BOARD_LOADER_UIBASE = 0x82800000 ;
 
-HAIKU_BOARD_LOADER_STACK_BASE = 0x84000000 ;
+HAIKU_BOARD_LOADER_STACK_BASE = 0x81a00000 ;
 
 #
 # Flash image
@@ -65,8 +65,14 @@ HAIKU_BOARD_SDIMAGE_FILES =
 #
 
 HAIKU_ASFLAGS_$(HAIKU_PACKAGING_ARCH)
-       += -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard ;
+       += -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
+          -DHAIKU_BOARD_LOADER_STACK_BASE=$(HAIKU_BOARD_LOADER_STACK_BASE)
+          -DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ;
 HAIKU_CCFLAGS_$(HAIKU_PACKAGING_ARCH)
-       += -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard ;
+       += -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
+          -DHAIKU_BOARD_LOADER_STACK_BASE=$(HAIKU_BOARD_LOADER_STACK_BASE)
+          -DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ;
 HAIKU_C++FLAGS_$(HAIKU_PACKAGING_ARCH)
-       += -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard ;
+       += -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
+          -DHAIKU_BOARD_LOADER_STACK_BASE=$(HAIKU_BOARD_LOADER_STACK_BASE)
+          -DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ;
diff --git a/headers/private/kernel/arch/arm/omap3.h 
b/headers/private/kernel/arch/arm/omap3.h
index c0b7e18..44a8325 100644
--- a/headers/private/kernel/arch/arm/omap3.h
+++ b/headers/private/kernel/arch/arm/omap3.h
@@ -24,6 +24,8 @@
 #define __PLATFORM_OMAP3_H
 
 #define SDRAM_BASE 0x80000000
+// Offset of stack top defined with respect to SDRAM_BASE
+#define KSTACK_TOP 0x27fffff
 
 #define VECT_BASE 0x00000000
 #define VECT_SIZE 0x1000
diff --git a/src/system/boot/arch/arm/arch_mmu.cpp 
b/src/system/boot/arch/arm/arch_mmu.cpp
index 22dc535..758a1f3 100644
--- a/src/system/boot/arch/arm/arch_mmu.cpp
+++ b/src/system/boot/arch/arm/arch_mmu.cpp
@@ -58,6 +58,12 @@ TODO:
 */
 
 
+// 8 MB for the kernel, kernel args, modules, driver settings, ...
+static const size_t kMaxKernelSize = 0x800000;
+
+// Base address for loader
+static const size_t kLoaderBaseAddress = KERNEL_LOAD_BASE + kMaxKernelSize;
+
 /*
 *defines a block in memory
 */
@@ -81,33 +87,39 @@ static struct memblock LOADER_MEMORYMAP[] = {
                ARM_MMU_L2_FLAG_B,
        },
        {
+               "RAM_kernel", // 8MB space for kernel, drivers etc
+               KERNEL_LOAD_BASE,
+               KERNEL_LOAD_BASE + kMaxKernelSize - 1,
+               ARM_MMU_L2_FLAG_C,
+       },
+       {
                "RAM_loader", // 1MB loader
-               SDRAM_BASE + 0,
-               SDRAM_BASE + 0x0fffff,
+               kLoaderBaseAddress + 0,
+               kLoaderBaseAddress + 0x0fffff,
                ARM_MMU_L2_FLAG_C,
        },
        {
                "RAM_pt", // Page Table 1MB
-               SDRAM_BASE + 0x100000,
-               SDRAM_BASE + 0x1FFFFF,
+               kLoaderBaseAddress + 0x100000,
+               kLoaderBaseAddress + 0x1FFFFF,
                ARM_MMU_L2_FLAG_C,
        },
        {
                "RAM_free", // 16MB free RAM (more but we don't map it 
automaticaly)
-               SDRAM_BASE + 0x0200000,
-               SDRAM_BASE + 0x11FFFFF,
+               kLoaderBaseAddress + 0x0200000,
+               kLoaderBaseAddress + 0x11FFFFF,
                ARM_MMU_L2_FLAG_C,
        },
        {
                "RAM_stack", // stack
-               SDRAM_BASE + 0x1200000,
-               SDRAM_BASE + 0x2000000,
+               HAIKU_BOARD_LOADER_STACK_BASE,
+               HAIKU_BOARD_LOADER_STACK_BASE + 0xe00000,
                ARM_MMU_L2_FLAG_C,
        },
        {
-               "RAM_initrd", // stack
-               SDRAM_BASE + 0x2000000,
-               SDRAM_BASE + 0x2500000,
+               "RAM_initrd", // initrd
+               HAIKU_BOARD_LOADER_UIBASE,
+               HAIKU_BOARD_LOADER_UIBASE + 0x500000,
                ARM_MMU_L2_FLAG_C,
        },
 
@@ -124,10 +136,9 @@ static struct memblock LOADER_MEMORYMAP[] = {
 
 //static const uint32 kDefaultPageTableFlags = MMU_FLAG_READWRITE;
        // not cached not buffered, R/W
-static const size_t kMaxKernelSize = 0x200000;         // 2 MB for the kernel
 
 static addr_t sNextPhysicalAddress = 0; //will be set by mmu_init
-static addr_t sNextVirtualAddress = KERNEL_LOAD_BASE + kMaxKernelSize;
+static addr_t sNextVirtualAddress = LOADER_MEMORYMAP[4].start;
 
 static addr_t sNextPageTableAddress = 0;
 //the page directory is in front of the pagetable
diff --git a/src/system/boot/platform/u-boot/Jamfile 
b/src/system/boot/platform/u-boot/Jamfile
index fc61049..6f2cab6 100644
--- a/src/system/boot/platform/u-boot/Jamfile
+++ b/src/system/boot/platform/u-boot/Jamfile
@@ -184,8 +184,8 @@ actions BuildUBootSDImage1
        # We load the uImage 2MB above its final destination, bootm will decode
        # it to the proper location. Our image is smaller than 2MB so this 
works.
        echo 'uenvcmd=run loadImage; run mmcboot;
-               loadImage=fatload mmc0 0 0x80200000 haiku_loader_nbsd.ub
-               mmcboot=bootm 0x80200000' > uEnv.txt
+               loadImage=fatload mmc0 0 $(HAIKU_BOARD_LOADER_UIBASE) 
haiku_loader_nbsd.ub
+               mmcboot=bootm $(HAIKU_BOARD_LOADER_UIBASE)' > uEnv.txt
        # populate
        MTOOLSRC=$(1).mtools mcopy $(2[1-]) i:
        MTOOLSRC=$(1).mtools mcopy uEnv.txt i:
diff --git a/src/system/boot/platform/u-boot/arch/arm/shell.S 
b/src/system/boot/platform/u-boot/arch/arm/shell.S
index 69b1ff3..ca945c9 100644
--- a/src/system/boot/platform/u-boot/arch/arm/shell.S
+++ b/src/system/boot/platform/u-boot/arch/arm/shell.S
@@ -62,7 +62,7 @@ SYMBOL(_start_common):
 
 
 
-       ldr     sp,=SDRAM_BASE + 0x2000000
+       ldr     sp,=SDRAM_BASE + KSTACK_TOP
        ldrb    r4,gUBootOS
        cmp     r4,#0
        beq     start_raw


Other related posts:

  • » [haiku-commits] haiku: hrev47653 - src/system/boot/arch/arm build/jam/board/beagle src/system/boot/platform/u-boot headers/private/kernel/arch/arm - pulkomandy