linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / m68knommu / kernel / vmlinux.lds.S
index ccd2ceb..ac9de26 100644 (file)
 /*
  *     vmlinux.lds.S -- master linker script for m68knommu arch
  *
- *     (C) Copyright 2002-2006, Greg Ungerer <gerg@snapgear.com>
+ *     (C) Copyright 2002-2004, Greg Ungerer <gerg@snapgear.com>
  *
- *     This linker script is equiped to build either ROM loaded or RAM
- *     run kernels.
+ *     This ends up looking compilcated, because of the number of
+ *     address variations for ram and rom/flash layouts. The real
+ *     work of the linker script is all at the end, and reasonably
+ *     strait forward.
  */
 
+#include <linux/config.h>
 #include <asm-generic/vmlinux.lds.h>
 
+/*
+ *     Original Palm pilot (same for Xcopilot).
+ *     There is really only a rom target for this.
+ */
+#ifdef CONFIG_PILOT3
+#define        ROMVEC_START    0x10c00000
+#define        ROMVEC_LENGTH   0x10400
+#define        ROM_START       0x10c10400
+#define        ROM_LENGTH      0xfec00
+#define        ROM_END         0x10d00000
+#define        RAMVEC_START    0x00000000
+#define        RAMVEC_LENGTH   0x400
+#define        RAM_START       0x10000400
+#define        RAM_LENGTH      0xffc00
+#define        RAM_END         0x10100000
+#define _ramend        _ram_end_notused
+#define        DATA_ADDR       RAM_START
+#endif
+
+/*
+ *     Same setup on both the uCsimm and uCdimm.
+ */
+#if defined(CONFIG_UCSIMM) || defined(CONFIG_UCDIMM)
+#ifdef CONFIG_RAMKERNEL
+#define        ROMVEC_START    0x10c10000
+#define        ROMVEC_LENGTH   0x400
+#define        ROM_START       0x10c10400
+#define        ROM_LENGTH      0x1efc00
+#define        ROM_END         0x10e00000
+#define        RAMVEC_START    0x00000000
+#define        RAMVEC_LENGTH   0x400
+#define        RAM_START       0x00020400
+#define        RAM_LENGTH      0x7dfc00
+#define        RAM_END         0x00800000
+#endif
+#ifdef CONFIG_ROMKERNEL
+#define        ROMVEC_START    0x10c10000
+#define        ROMVEC_LENGTH   0x400
+#define        ROM_START       0x10c10400
+#define        ROM_LENGTH      0x1efc00
+#define        ROM_END         0x10e00000
+#define        RAMVEC_START    0x00000000
+#define        RAMVEC_LENGTH   0x400
+#define        RAM_START       0x00020000
+#define        RAM_LENGTH      0x600000
+#define        RAM_END         0x00800000
+#endif
+#ifdef CONFIG_HIMEMKERNEL
+#define        ROMVEC_START    0x00600000
+#define        ROMVEC_LENGTH   0x400
+#define        ROM_START       0x00600400
+#define        ROM_LENGTH      0x1efc00
+#define        ROM_END         0x007f0000
+#define        RAMVEC_START    0x00000000
+#define        RAMVEC_LENGTH   0x400
+#define        RAM_START       0x00020000
+#define        RAM_LENGTH      0x5e0000
+#define        RAM_END         0x00600000
+#endif
+#endif
+
+#ifdef CONFIG_DRAGEN2
+#define        RAM_START       0x10000
+#define        RAM_LENGTH      0x7f0000
+#endif
+
+#ifdef CONFIG_UCQUICC
+#define        ROMVEC_START    0x00000000
+#define        ROMVEC_LENGTH   0x404
+#define        ROM_START       0x00000404
+#define        ROM_LENGTH      0x1ff6fc
+#define        ROM_END         0x00200000
+#define        RAMVEC_START    0x00200000
+#define        RAMVEC_LENGTH   0x404
+#define        RAM_START       0x00200404
+#define        RAM_LENGTH      0x1ff6fc
+#define        RAM_END         0x00400000
+#endif
+
+/*
+ *     The standard Arnewsh 5206 board only has 1MiB of ram. Not normally
+ *     enough to be useful. Assume the user has fitted something larger,
+ *     at least 4MiB in size. No point in not letting the kernel completely
+ *     link, it will be obvious if it is too big when they go to load it.
+ */
+#if defined(CONFIG_ARN5206)
+#define        RAM_START       0x10000
+#define        RAM_LENGTH      0x3f0000
+#endif
+
+/*
+ *     The Motorola 5206eLITE board only has 1MiB of static RAM.
+ */
+#if defined(CONFIG_ELITE)
+#define        RAM_START       0x30020000
+#define        RAM_LENGTH      0xe0000
+#endif
+
+/*
+ *     All the Motorola eval boards have the same basic arrangement.
+ *     The end of RAM will vary depending on how much ram is fitted,
+ *     but this isn't important here, we assume at least 4MiB.
+ */
+#if defined(CONFIG_M5206eC3) || defined(CONFIG_M5249C3) || \
+    defined(CONFIG_M5272C3) || defined(CONFIG_M5307C3) || \
+    defined(CONFIG_ARN5307) || defined(CONFIG_M5407C3) || \
+    defined(CONFIG_M5271EVB) || defined(CONFIG_M5275EVB) || \
+    defined(CONFIG_M5235EVB)
+#define        RAM_START       0x20000
+#define        RAM_LENGTH      0x3e0000
+#endif
+
+/*
+ *     The Freescale 5208EVB board has 32MB of RAM.
+ */
+#if defined(CONFIG_M5208EVB)
+#define        RAM_START       0x40020000
+#define        RAM_LENGTH      0x01fe0000
+#endif
+
+/*
+ *     The senTec COBRA5272 board has nearly the same memory layout as 
+ *     the M5272C3. We assume 16MiB ram.
+ */
+#if defined(CONFIG_COBRA5272)
+#define RAM_START   0x20000
+#define RAM_LENGTH  0xfe0000
+#endif
+
+#if defined(CONFIG_M5282EVB)
+#define        RAM_START       0x10000
+#define        RAM_LENGTH      0x3f0000
+#endif
+
+/*
+ *     The senTec COBRA5282 board has the same memory layout as the M5282EVB.
+ */
+#if defined(CONFIG_COBRA5282)
+#define  RAM_START   0x10000
+#define  RAM_LENGTH  0x3f0000
+#endif
+
+
+/*
+ *     The EMAC SoM-5282EM module.
+ */
+#if defined(CONFIG_SOM5282EM)
+#define  RAM_START   0x10000
+#define  RAM_LENGTH  0xff0000
+#endif
+
+
+/*
+ *     These flash boot boards use all of ram for operation. Again the
+ *     actual memory size is not important here, assume at least 4MiB.
+ *     They currently have no support for running in flash.
+ */
+#if defined(CONFIG_NETtel) || defined(CONFIG_eLIA) || \
+    defined(CONFIG_DISKtel) || defined(CONFIG_SECUREEDGEMP3) || \
+    defined(CONFIG_HW_FEITH)
+#define        RAM_START       0x400
+#define        RAM_LENGTH      0x3ffc00
+#endif
+
+/*
+ *     Sneha Boards mimimun memory
+ *     The end of RAM will vary depending on how much ram is fitted,
+ *     but this isn't important here, we assume at least 4MiB.
+ */
+#if defined(CONFIG_CPU16B)   
+#define        RAM_START       0x20000
+#define        RAM_LENGTH      0x3e0000
+#endif
+
+#if defined(CONFIG_MOD5272)
+#define RAM_START      0x02000000
+#define RAM_LENGTH     0x00800000
+#define RAMVEC_START   0x20000000
+#define RAMVEC_LENGTH  0x00000400
+#endif
+
 #if defined(CONFIG_RAMKERNEL)
-#define        RAM_START       CONFIG_KERNELBASE
-#define        RAM_LENGTH      (CONFIG_RAMBASE + CONFIG_RAMSIZE - CONFIG_KERNELBASE)
 #define        TEXT            ram
 #define        DATA            ram
 #define        INIT            ram
 #define        BSS             ram
 #endif
 #if defined(CONFIG_ROMKERNEL) || defined(CONFIG_HIMEMKERNEL)
-#define        RAM_START       CONFIG_RAMBASE
-#define        RAM_LENGTH      CONFIG_RAMSIZE
-#define        ROMVEC_START    CONFIG_ROMVEC
-#define        ROMVEC_LENGTH   CONFIG_ROMVECSIZE
-#define        ROM_START       CONFIG_ROMSTART
-#define        ROM_LENGTH      CONFIG_ROMSIZE
 #define        TEXT            rom
 #define        DATA            ram
 #define        INIT            ram
@@ -39,10 +215,17 @@ OUTPUT_ARCH(m68k)
 ENTRY(_start)
 
 MEMORY {
+#ifdef RAMVEC_START
+       ramvec  : ORIGIN = RAMVEC_START, LENGTH = RAMVEC_LENGTH
+#endif
        ram     : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
+#ifdef RAM_END
+       eram    : ORIGIN = RAM_END, LENGTH = 0
+#endif
 #ifdef ROM_START
        romvec  : ORIGIN = ROMVEC_START, LENGTH = ROMVEC_LENGTH
        rom     : ORIGIN = ROM_START, LENGTH = ROM_LENGTH
+       erom    : ORIGIN = ROM_END, LENGTH = 0
 #endif
 }
 
@@ -86,11 +269,6 @@ SECTIONS {
                *(__ksymtab_gpl)
                __stop___ksymtab_gpl = .;
 
-               /* Kernel symbol table: GPL-future symbols */
-               __start___ksymtab_gpl_future = .;
-               *(__ksymtab_gpl_future)
-               __stop___ksymtab_gpl_future = .;
-
                /* Kernel symbol table: Normal symbols */
                __start___kcrctab = .;
                *(__kcrctab)
@@ -101,11 +279,6 @@ SECTIONS {
                *(__kcrctab_gpl)
                __stop___kcrctab_gpl = .;
 
-               /* Kernel symbol table: GPL-future symbols */
-               __start___kcrctab_gpl_future = .;
-               *(__kcrctab_gpl_future)
-               __stop___kcrctab_gpl_future = .;
-
                /* Kernel symbol table: strings */
                *(__ksymtab_strings)
 
@@ -119,6 +292,19 @@ SECTIONS {
                _etext = . ;
        } > TEXT
 
+#ifdef ROM_END
+       . = ROM_END ;
+       .erom : {
+               __rom_end = . ;
+       } > erom
+#endif
+#ifdef RAMVEC_START
+       . = RAMVEC_START ;
+       .ramvec : {
+               __ramvec = .;
+       } > ramvec
+#endif
+
        .data DATA_ADDR : {
                . = ALIGN(4);
                _sdata = . ;
@@ -177,5 +363,12 @@ SECTIONS {
                _ebss = . ;
        } > BSS
 
+#ifdef RAM_END
+       . = RAM_END ;
+       .eram : {
+               __ramend = . ;
+               _ramend = . ;
+       } > eram
+#endif
 }