18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> 38c2ecf20Sopenharmony_ci * Copyright (C) 2008-2009 PetaLogix 48c2ecf20Sopenharmony_ci * Copyright (C) 2006 Atmark Techno, Inc. 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 78c2ecf20Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 88c2ecf20Sopenharmony_ci * for more details. 98c2ecf20Sopenharmony_ci */ 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ciOUTPUT_ARCH(microblaze) 128c2ecf20Sopenharmony_ciENTRY(microblaze_start) 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#define RO_EXCEPTION_TABLE_ALIGN 16 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#include <asm/cache.h> 178c2ecf20Sopenharmony_ci#include <asm/page.h> 188c2ecf20Sopenharmony_ci#include <asm-generic/vmlinux.lds.h> 198c2ecf20Sopenharmony_ci#include <asm/thread_info.h> 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#ifdef __MICROBLAZEEL__ 228c2ecf20Sopenharmony_cijiffies = jiffies_64; 238c2ecf20Sopenharmony_ci#else 248c2ecf20Sopenharmony_cijiffies = jiffies_64 + 4; 258c2ecf20Sopenharmony_ci#endif 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ciSECTIONS { 288c2ecf20Sopenharmony_ci . = CONFIG_KERNEL_START; 298c2ecf20Sopenharmony_ci microblaze_start = CONFIG_KERNEL_BASE_ADDR; 308c2ecf20Sopenharmony_ci .text : AT(ADDR(.text) - LOAD_OFFSET) { 318c2ecf20Sopenharmony_ci _text = . ; 328c2ecf20Sopenharmony_ci _stext = . ; 338c2ecf20Sopenharmony_ci HEAD_TEXT 348c2ecf20Sopenharmony_ci TEXT_TEXT 358c2ecf20Sopenharmony_ci *(.fixup) 368c2ecf20Sopenharmony_ci EXIT_TEXT 378c2ecf20Sopenharmony_ci EXIT_CALL 388c2ecf20Sopenharmony_ci SCHED_TEXT 398c2ecf20Sopenharmony_ci CPUIDLE_TEXT 408c2ecf20Sopenharmony_ci LOCK_TEXT 418c2ecf20Sopenharmony_ci KPROBES_TEXT 428c2ecf20Sopenharmony_ci IRQENTRY_TEXT 438c2ecf20Sopenharmony_ci SOFTIRQENTRY_TEXT 448c2ecf20Sopenharmony_ci . = ALIGN (4) ; 458c2ecf20Sopenharmony_ci _etext = . ; 468c2ecf20Sopenharmony_ci } 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci . = ALIGN (4) ; 498c2ecf20Sopenharmony_ci __fdt_blob : AT(ADDR(__fdt_blob) - LOAD_OFFSET) { 508c2ecf20Sopenharmony_ci _fdt_start = . ; /* place for fdt blob */ 518c2ecf20Sopenharmony_ci *(__fdt_blob) ; /* Any link-placed DTB */ 528c2ecf20Sopenharmony_ci . = _fdt_start + 0x10000; /* Pad up to 64kbyte */ 538c2ecf20Sopenharmony_ci _fdt_end = . ; 548c2ecf20Sopenharmony_ci } 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci . = ALIGN(16); 578c2ecf20Sopenharmony_ci RO_DATA(4096) 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci /* 608c2ecf20Sopenharmony_ci * sdata2 section can go anywhere, but must be word aligned 618c2ecf20Sopenharmony_ci * and SDA2_BASE must point to the middle of it 628c2ecf20Sopenharmony_ci */ 638c2ecf20Sopenharmony_ci .sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) { 648c2ecf20Sopenharmony_ci _ssrw = .; 658c2ecf20Sopenharmony_ci . = ALIGN(PAGE_SIZE); /* page aligned when MMU used */ 668c2ecf20Sopenharmony_ci *(.sdata2) 678c2ecf20Sopenharmony_ci . = ALIGN(8); 688c2ecf20Sopenharmony_ci _essrw = .; 698c2ecf20Sopenharmony_ci _ssrw_size = _essrw - _ssrw; 708c2ecf20Sopenharmony_ci _KERNEL_SDA2_BASE_ = _ssrw + (_ssrw_size / 2); 718c2ecf20Sopenharmony_ci } 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci _sdata = . ; 748c2ecf20Sopenharmony_ci RW_DATA(32, PAGE_SIZE, THREAD_SIZE) 758c2ecf20Sopenharmony_ci _edata = . ; 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ci /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ 788c2ecf20Sopenharmony_ci . = ALIGN(8); 798c2ecf20Sopenharmony_ci .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) { 808c2ecf20Sopenharmony_ci _ssro = .; 818c2ecf20Sopenharmony_ci *(.sdata) 828c2ecf20Sopenharmony_ci } 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_ci .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { 858c2ecf20Sopenharmony_ci _ssbss = .; 868c2ecf20Sopenharmony_ci *(.sbss) 878c2ecf20Sopenharmony_ci _esbss = .; 888c2ecf20Sopenharmony_ci _essro = .; 898c2ecf20Sopenharmony_ci _ssro_size = _essro - _ssro ; 908c2ecf20Sopenharmony_ci _KERNEL_SDA_BASE_ = _ssro + (_ssro_size / 2) ; 918c2ecf20Sopenharmony_ci } 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci PERCPU_SECTION(L1_CACHE_BYTES) 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ci . = ALIGN(PAGE_SIZE); 968c2ecf20Sopenharmony_ci __init_begin = .; 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci INIT_TEXT_SECTION(PAGE_SIZE) 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ci .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { 1018c2ecf20Sopenharmony_ci INIT_DATA 1028c2ecf20Sopenharmony_ci } 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci . = ALIGN(4); 1058c2ecf20Sopenharmony_ci .init.ivt : AT(ADDR(.init.ivt) - LOAD_OFFSET) { 1068c2ecf20Sopenharmony_ci __ivt_start = .; 1078c2ecf20Sopenharmony_ci *(.init.ivt) 1088c2ecf20Sopenharmony_ci __ivt_end = .; 1098c2ecf20Sopenharmony_ci } 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_ci .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) { 1128c2ecf20Sopenharmony_ci INIT_SETUP(0) 1138c2ecf20Sopenharmony_ci } 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_ci .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET ) { 1168c2ecf20Sopenharmony_ci INIT_CALLS 1178c2ecf20Sopenharmony_ci } 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_ci .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) { 1208c2ecf20Sopenharmony_ci CON_INITCALL 1218c2ecf20Sopenharmony_ci } 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci __init_end_before_initramfs = .; 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ci .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { 1268c2ecf20Sopenharmony_ci INIT_RAM_FS 1278c2ecf20Sopenharmony_ci } 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_ci __init_end = .; 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci .bss ALIGN (PAGE_SIZE) : AT(ADDR(.bss) - LOAD_OFFSET) { 1328c2ecf20Sopenharmony_ci /* page aligned when MMU used */ 1338c2ecf20Sopenharmony_ci __bss_start = . ; 1348c2ecf20Sopenharmony_ci *(.bss*) 1358c2ecf20Sopenharmony_ci *(COMMON) 1368c2ecf20Sopenharmony_ci . = ALIGN (4) ; 1378c2ecf20Sopenharmony_ci __bss_stop = . ; 1388c2ecf20Sopenharmony_ci } 1398c2ecf20Sopenharmony_ci . = ALIGN(PAGE_SIZE); 1408c2ecf20Sopenharmony_ci _end = .; 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_ci DISCARDS 1438c2ecf20Sopenharmony_ci} 144