1/* SPDX-License-Identifier: GPL-2.0 */
2
3#include <asm/vmlinux.lds.h>
4#include <asm/page.h>
5#include <asm/memory.h>
6
7OUTPUT_ARCH(csky)
8ENTRY(_start)
9
10#ifndef __cskyBE__
11jiffies = jiffies_64;
12#else
13jiffies = jiffies_64 + 4;
14#endif
15
16#define VBR_BASE \
17	. = ALIGN(1024); \
18	vec_base = .; \
19	. += 512;
20
21SECTIONS
22{
23	. = PAGE_OFFSET + PHYS_OFFSET_OFFSET;
24
25	_start = .;
26	HEAD_TEXT_SECTION
27	. = ALIGN(PAGE_SIZE);
28
29	.text : AT(ADDR(.text) - LOAD_OFFSET) {
30		_text = .;
31		_stext = .;
32		VBR_BASE
33		IRQENTRY_TEXT
34		SOFTIRQENTRY_TEXT
35		TEXT_TEXT
36		SCHED_TEXT
37		CPUIDLE_TEXT
38		LOCK_TEXT
39		KPROBES_TEXT
40		*(.fixup)
41		*(.gnu.warning)
42	} = 0
43	_etext = .;
44
45	/* __init_begin __init_end must be page aligned for free_initmem */
46	. = ALIGN(PAGE_SIZE);
47	__init_begin = .;
48	INIT_TEXT_SECTION(PAGE_SIZE)
49	INIT_DATA_SECTION(PAGE_SIZE)
50	PERCPU_SECTION(L1_CACHE_BYTES)
51	. = ALIGN(PAGE_SIZE);
52	__init_end = .;
53
54	_sdata = .;
55	RO_DATA(PAGE_SIZE)
56	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
57	_edata = .;
58
59#ifdef CONFIG_HAVE_TCM
60	.tcm_start : {
61		. = ALIGN(PAGE_SIZE);
62		__tcm_start = .;
63	}
64
65	.text_data_tcm FIXADDR_TCM : AT(__tcm_start)
66	{
67		. = ALIGN(4);
68		__stcm_text_data = .;
69		*(.tcm.text)
70		*(.tcm.rodata)
71#ifndef CONFIG_HAVE_DTCM
72		*(.tcm.data)
73#endif
74		. = ALIGN(4);
75		__etcm_text_data = .;
76	}
77
78	. = ADDR(.tcm_start) + SIZEOF(.tcm_start) + SIZEOF(.text_data_tcm);
79
80#ifdef CONFIG_HAVE_DTCM
81	#define ITCM_SIZE	CONFIG_ITCM_NR_PAGES * PAGE_SIZE
82
83	.dtcm_start : {
84		__dtcm_start = .;
85	}
86
87	.data_tcm FIXADDR_TCM + ITCM_SIZE : AT(__dtcm_start)
88	{
89		. = ALIGN(4);
90		__stcm_data = .;
91		*(.tcm.data)
92		. = ALIGN(4);
93		__etcm_data = .;
94	}
95
96	. = ADDR(.dtcm_start) + SIZEOF(.data_tcm);
97
98	.tcm_end : AT(ADDR(.dtcm_start) + SIZEOF(.data_tcm)) {
99#else
100	.tcm_end : AT(ADDR(.tcm_start) + SIZEOF(.text_data_tcm)) {
101#endif
102		. = ALIGN(PAGE_SIZE);
103		__tcm_end = .;
104	}
105#endif
106
107	EXCEPTION_TABLE(L1_CACHE_BYTES)
108	BSS_SECTION(L1_CACHE_BYTES, PAGE_SIZE, L1_CACHE_BYTES)
109	_end = . ;
110
111	STABS_DEBUG
112	DWARF_DEBUG
113	ELF_DETAILS
114
115	DISCARDS
116}
117