19143a935SGuo Ren/* SPDX-License-Identifier: GPL-2.0 */ 29143a935SGuo Ren 39143a935SGuo Ren#include <asm/vmlinux.lds.h> 49143a935SGuo Ren#include <asm/page.h> 5f525bb2cSGuo Ren#include <asm/memory.h> 69143a935SGuo Ren 79143a935SGuo RenOUTPUT_ARCH(csky) 89143a935SGuo RenENTRY(_start) 99143a935SGuo Ren 109143a935SGuo Ren#ifndef __cskyBE__ 119143a935SGuo Renjiffies = jiffies_64; 129143a935SGuo Ren#else 139143a935SGuo Renjiffies = jiffies_64 + 4; 149143a935SGuo Ren#endif 159143a935SGuo Ren 169143a935SGuo Ren#define VBR_BASE \ 179143a935SGuo Ren . = ALIGN(1024); \ 189143a935SGuo Ren vec_base = .; \ 199143a935SGuo Ren . += 512; 209143a935SGuo Ren 219143a935SGuo RenSECTIONS 229143a935SGuo Ren{ 239143a935SGuo Ren . = PAGE_OFFSET + PHYS_OFFSET_OFFSET; 249143a935SGuo Ren 25f54af50dSGuo Ren _start = .; 269143a935SGuo Ren HEAD_TEXT_SECTION 279143a935SGuo Ren . = ALIGN(PAGE_SIZE); 289143a935SGuo Ren 299143a935SGuo Ren .text : AT(ADDR(.text) - LOAD_OFFSET) { 309143a935SGuo Ren _text = .; 31f54af50dSGuo Ren _stext = .; 320c8a32eeSGuo Ren VBR_BASE 339143a935SGuo Ren IRQENTRY_TEXT 349143a935SGuo Ren SOFTIRQENTRY_TEXT 359143a935SGuo Ren TEXT_TEXT 369143a935SGuo Ren SCHED_TEXT 379143a935SGuo Ren LOCK_TEXT 389143a935SGuo Ren KPROBES_TEXT 399143a935SGuo Ren *(.fixup) 409143a935SGuo Ren *(.gnu.warning) 419143a935SGuo Ren } = 0 429143a935SGuo Ren _etext = .; 439143a935SGuo Ren 449143a935SGuo Ren /* __init_begin __init_end must be page aligned for free_initmem */ 459143a935SGuo Ren . = ALIGN(PAGE_SIZE); 46*01ab4649SGuo Ren __init_begin = .; 47*01ab4649SGuo Ren INIT_TEXT_SECTION(PAGE_SIZE) 48*01ab4649SGuo Ren INIT_DATA_SECTION(PAGE_SIZE) 49*01ab4649SGuo Ren PERCPU_SECTION(L1_CACHE_BYTES) 50*01ab4649SGuo Ren . = ALIGN(PAGE_SIZE); 51*01ab4649SGuo Ren __init_end = .; 529143a935SGuo Ren 539143a935SGuo Ren _sdata = .; 5493240b32SKees Cook RO_DATA(PAGE_SIZE) 55c9174047SKees Cook RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 569143a935SGuo Ren _edata = .; 579143a935SGuo Ren 58f525bb2cSGuo Ren#ifdef CONFIG_HAVE_TCM 59f525bb2cSGuo Ren .tcm_start : { 60f525bb2cSGuo Ren . = ALIGN(PAGE_SIZE); 61f525bb2cSGuo Ren __tcm_start = .; 62f525bb2cSGuo Ren } 63f525bb2cSGuo Ren 64f525bb2cSGuo Ren .text_data_tcm FIXADDR_TCM : AT(__tcm_start) 65f525bb2cSGuo Ren { 66f525bb2cSGuo Ren . = ALIGN(4); 67f525bb2cSGuo Ren __stcm_text_data = .; 68f525bb2cSGuo Ren *(.tcm.text) 69f525bb2cSGuo Ren *(.tcm.rodata) 70f525bb2cSGuo Ren#ifndef CONFIG_HAVE_DTCM 71f525bb2cSGuo Ren *(.tcm.data) 72f525bb2cSGuo Ren#endif 73f525bb2cSGuo Ren . = ALIGN(4); 74f525bb2cSGuo Ren __etcm_text_data = .; 75f525bb2cSGuo Ren } 76f525bb2cSGuo Ren 77f525bb2cSGuo Ren . = ADDR(.tcm_start) + SIZEOF(.tcm_start) + SIZEOF(.text_data_tcm); 78f525bb2cSGuo Ren 79f525bb2cSGuo Ren#ifdef CONFIG_HAVE_DTCM 80f525bb2cSGuo Ren #define ITCM_SIZE CONFIG_ITCM_NR_PAGES * PAGE_SIZE 81f525bb2cSGuo Ren 82f525bb2cSGuo Ren .dtcm_start : { 83f525bb2cSGuo Ren __dtcm_start = .; 84f525bb2cSGuo Ren } 85f525bb2cSGuo Ren 86f525bb2cSGuo Ren .data_tcm FIXADDR_TCM + ITCM_SIZE : AT(__dtcm_start) 87f525bb2cSGuo Ren { 88f525bb2cSGuo Ren . = ALIGN(4); 89f525bb2cSGuo Ren __stcm_data = .; 90f525bb2cSGuo Ren *(.tcm.data) 91f525bb2cSGuo Ren . = ALIGN(4); 92f525bb2cSGuo Ren __etcm_data = .; 93f525bb2cSGuo Ren } 94f525bb2cSGuo Ren 95f525bb2cSGuo Ren . = ADDR(.dtcm_start) + SIZEOF(.data_tcm); 96f525bb2cSGuo Ren 97f525bb2cSGuo Ren .tcm_end : AT(ADDR(.dtcm_start) + SIZEOF(.data_tcm)) { 98f525bb2cSGuo Ren#else 99f525bb2cSGuo Ren .tcm_end : AT(ADDR(.tcm_start) + SIZEOF(.text_data_tcm)) { 100f525bb2cSGuo Ren#endif 101f525bb2cSGuo Ren . = ALIGN(PAGE_SIZE); 102f525bb2cSGuo Ren __tcm_end = .; 103f525bb2cSGuo Ren } 104f525bb2cSGuo Ren#endif 105f525bb2cSGuo Ren 1069143a935SGuo Ren EXCEPTION_TABLE(L1_CACHE_BYTES) 1079143a935SGuo Ren BSS_SECTION(L1_CACHE_BYTES, PAGE_SIZE, L1_CACHE_BYTES) 1089143a935SGuo Ren _end = . ; 1099143a935SGuo Ren 1109143a935SGuo Ren STABS_DEBUG 1119143a935SGuo Ren DWARF_DEBUG 112c604abc3SKees Cook ELF_DETAILS 1139143a935SGuo Ren 1149143a935SGuo Ren DISCARDS 1159143a935SGuo Ren} 116