X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fm68knommu%2Fplatform%2F5307%2Fhead.S;h=c30c462b99b13830149e30d9dbc389448a8b3da6;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=f2edb6498cd981cef3f57a733185918b8afb1553;hpb=3944158a6d33f94668dbd6bdc32ff5c67bb53ec2;p=linux-2.6.git diff --git a/arch/m68knommu/platform/5307/head.S b/arch/m68knommu/platform/5307/head.S index f2edb6498..c30c462b9 100644 --- a/arch/m68knommu/platform/5307/head.S +++ b/arch/m68knommu/platform/5307/head.S @@ -3,11 +3,12 @@ /* * head.S -- common startup code for ColdFire CPUs. * - * (C) Copyright 1999-2006, Greg Ungerer . + * (C) Copyright 1999-2004, Greg Ungerer (gerg@snapgear.com). */ /*****************************************************************************/ +#include #include #include #include @@ -18,15 +19,47 @@ /*****************************************************************************/ /* - * If we don't have a fixed memory size, then lets build in code + * Define fixed memory sizes. Configuration of a fixed memory size + * overrides everything else. If the user defined a size we just + * blindly use it (they know what they are doing right :-) + */ +#if defined(CONFIG_RAM32MB) +#define MEM_SIZE 0x02000000 /* memory size 32Mb */ +#elif defined(CONFIG_RAM16MB) +#define MEM_SIZE 0x01000000 /* memory size 16Mb */ +#elif defined(CONFIG_RAM8MB) +#define MEM_SIZE 0x00800000 /* memory size 8Mb */ +#elif defined(CONFIG_RAM4MB) +#define MEM_SIZE 0x00400000 /* memory size 4Mb */ +#elif defined(CONFIG_RAM1MB) +#define MEM_SIZE 0x00100000 /* memory size 1Mb */ +#endif + +/* + * Memory size exceptions for special cases. Some boards may be set + * for auto memory sizing, but we can't do it that way for some reason. + * For example the 5206eLITE board has static RAM, and auto-detecting + * the SDRAM will do you no good at all. Same goes for the MOD5272. + */ +#ifdef CONFIG_RAMAUTO +#if defined(CONFIG_M5206eLITE) +#define MEM_SIZE 0x00100000 /* 1MiB default memory */ +#endif +#if defined(CONFIG_MOD5272) +#define MEM_SIZE 0x00800000 /* 8MiB default memory */ +#endif +#endif /* CONFIG_RAMAUTO */ + + +/* + * If we don't have a fixed memory size now, then lets build in code * to auto detect the DRAM size. Obviously this is the prefered - * method, and should work for most boards. It won't work for those - * that do not have their RAM starting at address 0, and it only - * works on SDRAM (not boards fitted with SRAM). + * method, and should work for most boards (it won't work for those + * that do not have their RAM starting at address 0). */ -#if CONFIG_RAMSIZE != 0 +#if defined(MEM_SIZE) .macro GET_MEM_SIZE - movel #CONFIG_RAMSIZE,%d0 /* hard coded memory size */ + movel #MEM_SIZE,%d0 /* hard coded memory size */ .endm #elif defined(CONFIG_M5206) || defined(CONFIG_M5206e) || \ @@ -65,7 +98,37 @@ .endm #else -#error "ERROR: I don't know how to probe your boards memory size?" +#error "ERROR: I don't know how to determine your boards memory size?" +#endif + + +/* + * Most ColdFire boards have their DRAM starting at address 0. + * Notable exception is the 5206eLITE board, another is the MOD5272. + */ +#if defined(CONFIG_M5206eLITE) +#define MEM_BASE 0x30000000 +#endif +#if defined(CONFIG_MOD5272) +#define MEM_BASE 0x02000000 +#define VBR_BASE 0x20000000 /* vectors in SRAM */ +#endif +#if defined(CONFIG_M5208EVB) +#define MEM_BASE 0x40000000 +#endif + +#ifndef MEM_BASE +#define MEM_BASE 0x00000000 /* memory base at address 0 */ +#endif + +/* + * The default location for the vectors is at the base of RAM. + * Some boards might like to use internal SRAM or something like + * that. If no board specific header defines an alternative then + * use the base of RAM. + */ +#ifndef VBR_BASE +#define VBR_BASE MEM_BASE /* vector address */ #endif /*****************************************************************************/ @@ -128,11 +191,11 @@ _start: * Create basic memory configuration. Set VBR accordingly, * and size memory. */ - movel #CONFIG_VECTORBASE,%a7 + movel #VBR_BASE,%a7 movec %a7,%VBR /* set vectors addr */ movel %a7,_ramvec - movel #CONFIG_RAMBASE,%a7 /* mark the base of RAM */ + movel #MEM_BASE,%a7 /* mark the base of RAM */ movel %a7,_rambase GET_MEM_SIZE /* macro code determines size */