Reserve 8MB space for kernel before RAM_loader
...so that kernel does not overwrite the loader. Signed-off-by: Adrien Destugues <pulkomandy@pulkomandy.tk> Fixes #11067.
This commit is contained in:
parent
2ba49c8804
commit
82d287ddcb
@ -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) ;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user