diff --git a/build/jam/board/beagle/BoardSetup b/build/jam/board/beagle/BoardSetup index 0c54643aad..5ee0a11cab 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 c0b7e1895c..44a832566c 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 22dc535839..758a1f352c 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 */ @@ -80,34 +86,40 @@ static struct memblock LOADER_MEMORYMAP[] = { DEVICE_BASE + DEVICE_SIZE - 1, 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 fc610492b2..6f2cab6cd3 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 69b1ff3198..ca945c9441 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