Author: mmu_man Date: 2010-06-30 19:24:11 +0200 (Wed, 30 Jun 2010) New Revision: 37319 Changeset: http://dev.haiku-os.org/changeset/37319/haiku Ticket: http://dev.haiku-os.org/ticket/5368 Added: haiku/trunk/build/jam/board/beagle/ haiku/trunk/build/jam/board/beagle/BoardSetup haiku/trunk/headers/private/kernel/arch/arm/board/beagle/ haiku/trunk/headers/private/kernel/arch/arm/board/beagle/board_config.h Modified: haiku/trunk/headers/private/kernel/arch/arm/arm_mmu.h haiku/trunk/src/system/boot/platform/u-boot/Jamfile haiku/trunk/src/system/boot/platform/u-boot/mmu.cpp Log: Patch by "notzed" (ticket #5368) (modified): Add bootloader support for BeagleBoard. Added: haiku/trunk/build/jam/board/beagle/BoardSetup =================================================================== --- haiku/trunk/build/jam/board/beagle/BoardSetup (rev 0) +++ haiku/trunk/build/jam/board/beagle/BoardSetup 2010-06-30 17:24:11 UTC (rev 37319) @@ -0,0 +1,67 @@ +# BeagleBoard board-specific definitions + +HAIKU_BOARD_DESCRIPTION = "BeagleBoard" ; + + +# +# Various hardcoded addresses +# + +# load address for haiku_loader +HAIKU_BOARD_LOADER_BASE = 0x80008000 ; +# entry points (raw binary, and netbsd loader emulation) +HAIKU_BOARD_LOADER_ENTRY_RAW = 0x80008000 ; +HAIKU_BOARD_LOADER_ENTRY_NBSD = 0x80008008 ; + +# load address for haiku_loader uimage +# (must be different than real load address) +HAIKU_BOARD_LOADER_UIBASE = 0x84000000 ; + +HAIKU_BOARD_LOADER_STACK_BASE = 0x84000000 ; + +# +# Flash image +# + +# OMAP x-loader image, must be first file on FAT partition +HAIKU_BOARD_MLO_IMAGE ?= MLO ; +HAIKU_BOARD_MLO_IMAGE_URL = + http://www.angstrom-distribution.org/demo/beagleboard/MLO ; + +# u-boot binary image filename, to build the flash image +# XXX: Locate it somehow (for now just put it in generated/) +HAIKU_BOARD_UBOOT_IMAGE ?= u-boot.bin ; +HAIKU_BOARD_UBOOT_IMAGE_URL = + http://www.angstrom-distribution.org/demo/beagleboard/u-boot.bin ; + +# +# mmc/SD image +# + +# in MB +HAIKU_BOARD_SDIMAGE_SIZE = 64 ; + +# in MB +HAIKU_BOARD_SDIMAGE_FAT_SIZE = 32 ; + +# offset in blocks XXX: FIXME +# (autodetect from sfdisk or use cylinder count for fat size) +HAIKU_BOARD_SDIMAGE_BFS_OFFSET = ; + +HAIKU_BOARD_SDIMAGE_FILES = + $(HAIKU_BOARD_MLO_IMAGE) + $(HAIKU_BOARD_UBOOT_IMAGE) + haiku_loader_nbsd.ub +; + + +# +# gcc flags for the specific cpu +# + +TARGET_KERNEL_CCFLAGS += -mcpu=cortex-a8 -mfpu=vfp -mfloat-abi=soft ; +TARGET_KERNEL_C++FLAGS += -mcpu=cortex-a8 -mfpu=vfp -mfloat-abi=soft ; +TARGET_CCFLAGS += -mcpu=cortex-a8 -mfpu=vfp -mfloat-abi=soft ; +TARGET_C++FLAGS += -mcpu=cortex-a8 -mfpu=vfp -mfloat-abi=soft ; + + Modified: haiku/trunk/headers/private/kernel/arch/arm/arm_mmu.h =================================================================== --- haiku/trunk/headers/private/kernel/arch/arm/arm_mmu.h 2010-06-30 15:52:54 UTC (rev 37318) +++ haiku/trunk/headers/private/kernel/arch/arm/arm_mmu.h 2010-06-30 17:24:11 UTC (rev 37319) @@ -37,6 +37,9 @@ */ #define MMU_L2_TYPE_SMALLEXT 0x3 +/* for new format entries (cortex-a8) */ +#define MMU_L2_TYPE_SMALLNEW 0x2 + // for B C and TEX see ARM arm B4-11 #define MMU_L2_FLAG_B 0x4 #define MMU_L2_FLAG_C 0x8 Added: haiku/trunk/headers/private/kernel/arch/arm/board/beagle/board_config.h =================================================================== --- haiku/trunk/headers/private/kernel/arch/arm/board/beagle/board_config.h (rev 0) +++ haiku/trunk/headers/private/kernel/arch/arm/board/beagle/board_config.h 2010-06-30 17:24:11 UTC (rev 37319) @@ -0,0 +1,21 @@ +/* + * Copyright 2009 + * Distributed under the terms of the MIT License. + */ +#ifndef _BOARD_OVERO_BOARD_CONFIG_H +#define _BOARD_OVERO_BOARD_CONFIG_H + +#define BOARD_NAME_PRETTY "Beagle Board" + +#define BOARD_CPU_TYPE_OMAP 1 +#define BOARD_CPU_OMAP3 1 + +#include <arch/arm/omap3.h> + +#define BOARD_UART1_BASE OMAP_UART1_BASE +#define BOARD_UART2_BASE OMAP_UART2_BASE +#define BOARD_UART3_BASE OMAP_UART3_BASE + +#define BOARD_DEBUG_UART 2 + +#endif /* _BOARD_OVERO_BOARD_CONFIG_H */ Modified: haiku/trunk/src/system/boot/platform/u-boot/Jamfile =================================================================== --- haiku/trunk/src/system/boot/platform/u-boot/Jamfile 2010-06-30 15:52:54 UTC (rev 37318) +++ haiku/trunk/src/system/boot/platform/u-boot/Jamfile 2010-06-30 17:24:11 UTC (rev 37319) @@ -198,6 +198,10 @@ $(HAIKU_BOARD_SDIMAGE_UBOOT_SCRIPT) ; } +if $(HAIKU_BOARD_MLO_IMAGE) && $(HAIKU_BOARD_MLO_IMAGE_URL) { + DownloadFile $(HAIKU_BOARD_MLO_IMAGE) $(HAIKU_BOARD_MLO_IMAGE_URL) ; +} + if $(HAIKU_BOARD_UBOOT_IMAGE) && $(HAIKU_BOARD_UBOOT_IMAGE_URL) { # Download the u-boot binary file. ubootFile = [ DownloadFile $(HAIKU_BOARD_UBOOT_IMAGE) Modified: haiku/trunk/src/system/boot/platform/u-boot/mmu.cpp =================================================================== --- haiku/trunk/src/system/boot/platform/u-boot/mmu.cpp 2010-06-30 15:52:54 UTC (rev 37318) +++ haiku/trunk/src/system/boot/platform/u-boot/mmu.cpp 2010-06-30 17:24:11 UTC (rev 37319) @@ -17,6 +17,8 @@ #include <arm_mmu.h> #include <kernel.h> +#include <board_config.h> + #include <OS.h> #include <string.h> @@ -99,7 +101,7 @@ //memory used by the loader that should be identity mapped -/* +#if 0/*BOARD_CPU_OMAP3*/ static struct memblock LOADER_MEMORYMAP[] = { { "vectors",//interrupt vectors @@ -138,27 +140,25 @@ MMU_L2_FLAG_AP_RW | MMU_L2_FLAG_C, }, + + }; -*/ + +#else + static struct memblock LOADER_MEMORYMAP[] = { { "vectors",//interrupt vectors - 0x00000000, - 0x00000fff, + VECT_BASE, + VECT_BASE + VECT_SIZE - 1, MMU_L2_FLAG_B, }, { "devices", - 0x40000000, - 0x44FFFFFF, + DEVICE_BASE, + DEVICE_BASE + DEVICE_SIZE - 1, MMU_L2_FLAG_B, }, -/* { - "RAM_image",//15MB for the initrd should be enough.. - 0xA0000000, - 0xA1ffffff, - MMU_L2_FLAG_C, - },*/ { "RAM_loader",//1MB loader SDRAM_BASE + 0, @@ -190,7 +190,18 @@ MMU_L2_FLAG_C, }, +#ifdef FB_BASE + { + "framebuffer",//2MB framebuffer ram + FB_BASE, + FB_BASE + FB_SIZE - 1, + MMU_L2_FLAG_AP_RW|MMU_L2_FLAG_C, + }, +#endif + + }; +#endif @@ -350,6 +361,14 @@ void init_page_directory() { + uint32 smalltype; + + // see if subpages disabled + if (mmu_read_C1() & (1<<23)) + smalltype = MMU_L2_TYPE_SMALLNEW; + else + smalltype = MMU_L2_TYPE_SMALLEXT; + TRACE(("init_page_directory\n")); gKernelArgs.arch_args.phys_pgdir = (uint32)sPageDirectory; @@ -368,7 +387,7 @@ addr_t pos = LOADER_MEMORYMAP[i].start; int c=0; while(pos< LOADER_MEMORYMAP[i].end){ - pageTable[c]=pos | LOADER_MEMORYMAP[i].flags | MMU_L2_TYPE_SMALLEXT; + pageTable[c]=pos | LOADER_MEMORYMAP[i].flags | smalltype; // TRACE(("PAGE TABLE: %lx = [%lx] \n",c, pageTable[c])); c++; if(c>255){ //we filled a pagetable => we need a new one