116bfeaf2SMichal Simek/* 216bfeaf2SMichal Simek * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> 316bfeaf2SMichal Simek * Copyright (C) 2008-2009 PetaLogix 416bfeaf2SMichal Simek * Copyright (C) 2006 Atmark Techno, Inc. 516bfeaf2SMichal Simek * 616bfeaf2SMichal Simek * This file is subject to the terms and conditions of the GNU General Public 716bfeaf2SMichal Simek * License. See the file "COPYING" in the main directory of this archive 816bfeaf2SMichal Simek * for more details. 916bfeaf2SMichal Simek */ 1016bfeaf2SMichal Simek 1116bfeaf2SMichal SimekOUTPUT_ARCH(microblaze) 12ca28b510SMichal SimekENTRY(microblaze_start) 1316bfeaf2SMichal Simek 143bda6f37SKees Cook#define RO_EXCEPTION_TABLE_ALIGN 16 153bda6f37SKees Cook 1606951c91SStefan Asserhall#include <asm/cache.h> 178cc11f5aSTim Abbott#include <asm/page.h> 18a061dd52SMichal Simek#include <asm-generic/vmlinux.lds.h> 198cc11f5aSTim Abbott#include <asm/thread_info.h> 2016bfeaf2SMichal Simek 2102b08045SMichal Simek#ifdef __MICROBLAZEEL__ 2202b08045SMichal Simekjiffies = jiffies_64; 2302b08045SMichal Simek#else 2416bfeaf2SMichal Simekjiffies = jiffies_64 + 4; 2502b08045SMichal Simek#endif 2616bfeaf2SMichal Simek 2716bfeaf2SMichal SimekSECTIONS { 28d4c1285eSMichal Simek . = CONFIG_KERNEL_START; 29ca28b510SMichal Simek microblaze_start = CONFIG_KERNEL_BASE_ADDR; 30a061dd52SMichal Simek .text : AT(ADDR(.text) - LOAD_OFFSET) { 3116bfeaf2SMichal Simek _text = . ; 3216bfeaf2SMichal Simek _stext = . ; 337a0248e8SSteven J. Magnani HEAD_TEXT 347a0248e8SSteven J. Magnani TEXT_TEXT 3516bfeaf2SMichal Simek *(.fixup) 361dcdd091SMichal Simek EXIT_TEXT 371dcdd091SMichal Simek EXIT_CALL 3816bfeaf2SMichal Simek SCHED_TEXT 3916bfeaf2SMichal Simek LOCK_TEXT 4016bfeaf2SMichal Simek KPROBES_TEXT 417cf79d59SMichal Simek IRQENTRY_TEXT 42be7635e7SAlexander Potapenko SOFTIRQENTRY_TEXT 4316bfeaf2SMichal Simek . = ALIGN (4) ; 4416bfeaf2SMichal Simek _etext = . ; 4516bfeaf2SMichal Simek } 4616bfeaf2SMichal Simek 47*48783be4SRob Herring . = ALIGN (8) ; 48a061dd52SMichal Simek __fdt_blob : AT(ADDR(__fdt_blob) - LOAD_OFFSET) { 4916bfeaf2SMichal Simek _fdt_start = . ; /* place for fdt blob */ 50a061dd52SMichal Simek *(__fdt_blob) ; /* Any link-placed DTB */ 5122648c98SSiva Durga Prasad Paladugu . = _fdt_start + 0x10000; /* Pad up to 64kbyte */ 5216bfeaf2SMichal Simek _fdt_end = . ; 53a061dd52SMichal Simek } 5416bfeaf2SMichal Simek 5516bfeaf2SMichal Simek . = ALIGN(16); 56c8231825SKees Cook RO_DATA(4096) 5716bfeaf2SMichal Simek 5816bfeaf2SMichal Simek /* 5916bfeaf2SMichal Simek * sdata2 section can go anywhere, but must be word aligned 6016bfeaf2SMichal Simek * and SDA2_BASE must point to the middle of it 6116bfeaf2SMichal Simek */ 62a061dd52SMichal Simek .sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) { 6316bfeaf2SMichal Simek _ssrw = .; 64ba9c4f88SSteven J. Magnani . = ALIGN(PAGE_SIZE); /* page aligned when MMU used */ 6516bfeaf2SMichal Simek *(.sdata2) 6616bfeaf2SMichal Simek . = ALIGN(8); 6716bfeaf2SMichal Simek _essrw = .; 6816bfeaf2SMichal Simek _ssrw_size = _essrw - _ssrw; 6916bfeaf2SMichal Simek _KERNEL_SDA2_BASE_ = _ssrw + (_ssrw_size / 2); 7016bfeaf2SMichal Simek } 7116bfeaf2SMichal Simek 7216bfeaf2SMichal Simek _sdata = . ; 73c9174047SKees Cook RW_DATA(32, PAGE_SIZE, THREAD_SIZE) 7416bfeaf2SMichal Simek _edata = . ; 7516bfeaf2SMichal Simek 7616bfeaf2SMichal Simek /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ 7716bfeaf2SMichal Simek . = ALIGN(8); 78a061dd52SMichal Simek .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) { 7916bfeaf2SMichal Simek _ssro = .; 8016bfeaf2SMichal Simek *(.sdata) 8116bfeaf2SMichal Simek } 8216bfeaf2SMichal Simek 83a061dd52SMichal Simek .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { 8416bfeaf2SMichal Simek _ssbss = .; 8516bfeaf2SMichal Simek *(.sbss) 8616bfeaf2SMichal Simek _esbss = .; 8716bfeaf2SMichal Simek _essro = .; 8816bfeaf2SMichal Simek _ssro_size = _essro - _ssro ; 8916bfeaf2SMichal Simek _KERNEL_SDA_BASE_ = _ssro + (_ssro_size / 2) ; 9016bfeaf2SMichal Simek } 9116bfeaf2SMichal Simek 9206951c91SStefan Asserhall PERCPU_SECTION(L1_CACHE_BYTES) 9306951c91SStefan Asserhall 9413cdee23SMichal Simek . = ALIGN(PAGE_SIZE); 9516bfeaf2SMichal Simek __init_begin = .; 9616bfeaf2SMichal Simek 978cc11f5aSTim Abbott INIT_TEXT_SECTION(PAGE_SIZE) 9816bfeaf2SMichal Simek 99a061dd52SMichal Simek .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { 10005bf7d46SMichal Simek INIT_DATA 10105bf7d46SMichal Simek } 10216bfeaf2SMichal Simek 10316bfeaf2SMichal Simek . = ALIGN(4); 104a061dd52SMichal Simek .init.ivt : AT(ADDR(.init.ivt) - LOAD_OFFSET) { 10516bfeaf2SMichal Simek __ivt_start = .; 10616bfeaf2SMichal Simek *(.init.ivt) 10716bfeaf2SMichal Simek __ivt_end = .; 10816bfeaf2SMichal Simek } 10916bfeaf2SMichal Simek 110a061dd52SMichal Simek .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) { 1118cc11f5aSTim Abbott INIT_SETUP(0) 11216bfeaf2SMichal Simek } 11316bfeaf2SMichal Simek 114a061dd52SMichal Simek .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET ) { 1158cc11f5aSTim Abbott INIT_CALLS 11616bfeaf2SMichal Simek } 11716bfeaf2SMichal Simek 118a061dd52SMichal Simek .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) { 1198cc11f5aSTim Abbott CON_INITCALL 12016bfeaf2SMichal Simek } 12116bfeaf2SMichal Simek 12216bfeaf2SMichal Simek __init_end_before_initramfs = .; 12316bfeaf2SMichal Simek 1248cb473daSMichal Simek .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { 1258cb473daSMichal Simek INIT_RAM_FS 12616bfeaf2SMichal Simek } 1278cb473daSMichal Simek 12816bfeaf2SMichal Simek __init_end = .; 12916bfeaf2SMichal Simek 130ba9c4f88SSteven J. Magnani .bss ALIGN (PAGE_SIZE) : AT(ADDR(.bss) - LOAD_OFFSET) { 131a061dd52SMichal Simek /* page aligned when MMU used */ 13216bfeaf2SMichal Simek __bss_start = . ; 13316bfeaf2SMichal Simek *(.bss*) 13416bfeaf2SMichal Simek *(COMMON) 13516bfeaf2SMichal Simek . = ALIGN (4) ; 13616bfeaf2SMichal Simek __bss_stop = . ; 13716bfeaf2SMichal Simek } 138ba9c4f88SSteven J. Magnani . = ALIGN(PAGE_SIZE); 13916bfeaf2SMichal Simek _end = .; 140405d967dSTejun Heo 141023bf6f1STejun Heo DISCARDS 14216bfeaf2SMichal Simek} 143