1# SPDX-License-Identifier: GPL-2.0-only
2config CSKY
3	def_bool y
4	select ARCH_32BIT_OFF_T
5	select ARCH_HAS_DMA_PREP_COHERENT
6	select ARCH_HAS_GCOV_PROFILE_ALL
7	select ARCH_HAS_SYNC_DMA_FOR_CPU
8	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
9	select ARCH_USE_BUILTIN_BSWAP
10	select ARCH_USE_QUEUED_RWLOCKS if NR_CPUS>2
11	select ARCH_WANT_FRAME_POINTERS if !CPU_CK610
12	select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
13	select COMMON_CLK
14	select CLKSRC_MMIO
15	select CSKY_MPINTC if CPU_CK860
16	select CSKY_MP_TIMER if CPU_CK860
17	select CSKY_APB_INTC
18	select DMA_DIRECT_REMAP
19	select IRQ_DOMAIN
20	select HANDLE_DOMAIN_IRQ
21	select DW_APB_TIMER_OF
22	select GENERIC_IOREMAP
23	select GENERIC_LIB_ASHLDI3
24	select GENERIC_LIB_ASHRDI3
25	select GENERIC_LIB_LSHRDI3
26	select GENERIC_LIB_MULDI3
27	select GENERIC_LIB_CMPDI2
28	select GENERIC_LIB_UCMPDI2
29	select GENERIC_ALLOCATOR
30	select GENERIC_ATOMIC64
31	select GENERIC_CLOCKEVENTS
32	select GENERIC_CPU_DEVICES
33	select GENERIC_IRQ_CHIP
34	select GENERIC_IRQ_PROBE
35	select GENERIC_IRQ_SHOW
36	select GENERIC_IRQ_MULTI_HANDLER
37	select GENERIC_SCHED_CLOCK
38	select GENERIC_SMP_IDLE_THREAD
39	select GX6605S_TIMER if CPU_CK610
40	select HAVE_ARCH_TRACEHOOK
41	select HAVE_ARCH_AUDITSYSCALL
42	select HAVE_ARCH_MMAP_RND_BITS
43	select HAVE_ARCH_SECCOMP_FILTER
44	select HAVE_CONTEXT_TRACKING
45	select HAVE_VIRT_CPU_ACCOUNTING_GEN
46	select HAVE_DEBUG_BUGVERBOSE
47	select HAVE_DYNAMIC_FTRACE
48	select HAVE_DYNAMIC_FTRACE_WITH_REGS
49	select HAVE_FUNCTION_TRACER
50	select HAVE_FUNCTION_GRAPH_TRACER
51	select HAVE_FUNCTION_ERROR_INJECTION
52	select HAVE_FTRACE_MCOUNT_RECORD
53	select HAVE_KERNEL_GZIP
54	select HAVE_KERNEL_LZO
55	select HAVE_KERNEL_LZMA
56	select HAVE_KPROBES if !CPU_CK610
57	select HAVE_KPROBES_ON_FTRACE if !CPU_CK610
58	select HAVE_KRETPROBES if !CPU_CK610
59	select HAVE_PERF_EVENTS
60	select HAVE_PERF_REGS
61	select HAVE_PERF_USER_STACK_DUMP
62	select HAVE_DMA_CONTIGUOUS
63	select HAVE_REGS_AND_STACK_ACCESS_API
64	select HAVE_RSEQ
65	select HAVE_STACKPROTECTOR
66	select HAVE_SYSCALL_TRACEPOINTS
67	select MAY_HAVE_SPARSE_IRQ
68	select MODULES_USE_ELF_RELA if MODULES
69	select OF
70	select OF_EARLY_FLATTREE
71	select PERF_USE_VMALLOC if CPU_CK610
72	select RTC_LIB
73	select TIMER_OF
74	select USB_ARCH_HAS_EHCI
75	select USB_ARCH_HAS_OHCI
76	select GENERIC_PCI_IOMAP
77	select HAVE_PCI
78	select PCI_DOMAINS_GENERIC if PCI
79	select PCI_SYSCALL if PCI
80	select PCI_MSI if PCI
81	select SET_FS
82
83config LOCKDEP_SUPPORT
84	def_bool y
85
86config ARCH_SUPPORTS_UPROBES
87	def_bool y if !CPU_CK610
88
89config CPU_HAS_CACHEV2
90	bool
91
92config CPU_HAS_FPUV2
93	bool
94
95config CPU_HAS_HILO
96	bool
97
98config CPU_HAS_TLBI
99	bool
100
101config CPU_HAS_LDSTEX
102	bool
103	help
104	  For SMP, CPU needs "ldex&stex" instructions for atomic operations.
105
106config CPU_NEED_TLBSYNC
107	bool
108
109config CPU_NEED_SOFTALIGN
110	bool
111
112config CPU_NO_USER_BKPT
113	bool
114	help
115	  For abiv2 we couldn't use "trap 1" as user space bkpt in gdbserver, because
116	  abiv2 is 16/32bit instruction set and "trap 1" is 32bit.
117	  So we need a 16bit instruction as user space bkpt, and it will cause an illegal
118	  instruction exception.
119	  In kernel we parse the *regs->pc to determine whether to send SIGTRAP or not.
120
121config GENERIC_CALIBRATE_DELAY
122	def_bool y
123
124config GENERIC_CSUM
125	def_bool y
126
127config GENERIC_HWEIGHT
128	def_bool y
129
130config MMU
131	def_bool y
132
133config STACKTRACE_SUPPORT
134	def_bool y
135
136config TIME_LOW_RES
137	def_bool y
138
139config TRACE_IRQFLAGS_SUPPORT
140	def_bool y
141
142config CPU_TLB_SIZE
143	int
144	default "128"	if (CPU_CK610 || CPU_CK807 || CPU_CK810)
145	default "1024"	if (CPU_CK860)
146
147config CPU_ASID_BITS
148	int
149	default "8"	if (CPU_CK610 || CPU_CK807 || CPU_CK810)
150	default "12"	if (CPU_CK860)
151
152config L1_CACHE_SHIFT
153	int
154	default "4"	if (CPU_CK610)
155	default "5"	if (CPU_CK807 || CPU_CK810)
156	default "6"	if (CPU_CK860)
157
158config ARCH_MMAP_RND_BITS_MIN
159	default 8
160
161# max bits determined by the following formula:
162#  VA_BITS - PAGE_SHIFT - 3
163config ARCH_MMAP_RND_BITS_MAX
164	default 17
165
166menu "Processor type and features"
167
168choice
169	prompt "CPU MODEL"
170	default CPU_CK807
171
172config CPU_CK610
173	bool "CSKY CPU ck610"
174	select CPU_NEED_TLBSYNC
175	select CPU_NEED_SOFTALIGN
176	select CPU_NO_USER_BKPT
177
178config CPU_CK810
179	bool "CSKY CPU ck810"
180	select CPU_HAS_HILO
181	select CPU_NEED_TLBSYNC
182
183config CPU_CK807
184	bool "CSKY CPU ck807"
185	select CPU_HAS_HILO
186
187config CPU_CK860
188	bool "CSKY CPU ck860"
189	select CPU_HAS_TLBI
190	select CPU_HAS_CACHEV2
191	select CPU_HAS_LDSTEX
192	select CPU_HAS_FPUV2
193endchoice
194
195choice
196	prompt "C-SKY PMU type"
197	depends on PERF_EVENTS
198	depends on CPU_CK807 || CPU_CK810 || CPU_CK860
199
200config CPU_PMU_NONE
201	bool "None"
202
203config CSKY_PMU_V1
204	bool "Performance Monitoring Unit Ver.1"
205
206endchoice
207
208choice
209	prompt "Power Manager Instruction (wait/doze/stop)"
210	default CPU_PM_NONE
211
212config CPU_PM_NONE
213	bool "None"
214
215config CPU_PM_WAIT
216	bool "wait"
217
218config CPU_PM_DOZE
219	bool "doze"
220
221config CPU_PM_STOP
222	bool "stop"
223endchoice
224
225menuconfig HAVE_TCM
226	bool "Tightly-Coupled/Sram Memory"
227	select GENERIC_ALLOCATOR
228	help
229	  The implementation are not only used by TCM (Tightly-Coupled Meory)
230	  but also used by sram on SOC bus. It follow existed linux tcm
231	  software interface, so that old tcm application codes could be
232	  re-used directly.
233
234if HAVE_TCM
235config ITCM_RAM_BASE
236	hex "ITCM ram base"
237	default 0xffffffff
238
239config ITCM_NR_PAGES
240	int "Page count of ITCM size: NR*4KB"
241	range 1 256
242	default 32
243
244config HAVE_DTCM
245	bool "DTCM Support"
246
247config DTCM_RAM_BASE
248	hex "DTCM ram base"
249	depends on HAVE_DTCM
250	default 0xffffffff
251
252config DTCM_NR_PAGES
253	int "Page count of DTCM size: NR*4KB"
254	depends on HAVE_DTCM
255	range 1 256
256	default 32
257endif
258
259config CPU_HAS_VDSP
260	bool "CPU has VDSP coprocessor"
261	depends on CPU_HAS_FPU && CPU_HAS_FPUV2
262
263config CPU_HAS_FPU
264	bool "CPU has FPU coprocessor"
265	depends on CPU_CK807 || CPU_CK810 || CPU_CK860
266
267config CPU_HAS_ICACHE_INS
268	bool "CPU has Icache invalidate instructions"
269	depends on CPU_HAS_CACHEV2
270
271config CPU_HAS_TEE
272	bool "CPU has Trusted Execution Environment"
273	depends on CPU_CK810
274
275config SMP
276	bool "Symmetric Multi-Processing (SMP) support for C-SKY"
277	depends on CPU_CK860
278	default n
279
280config NR_CPUS
281	int "Maximum number of CPUs (2-32)"
282	range 2 32
283	depends on SMP
284	default "4"
285
286config HIGHMEM
287	bool "High Memory Support"
288	depends on !CPU_CK610
289	default y
290
291config FORCE_MAX_ZONEORDER
292	int "Maximum zone order"
293	default "11"
294
295config RAM_BASE
296	hex "DRAM start addr (the same with memory-section in dts)"
297	default 0x0
298
299config HOTPLUG_CPU
300	bool "Support for hot-pluggable CPUs"
301	select GENERIC_IRQ_MIGRATION
302	depends on SMP
303	help
304	  Say Y here to allow turning CPUs off and on. CPUs can be
305	  controlled through /sys/devices/system/cpu/cpu1/hotplug/target.
306
307	  Say N if you want to disable CPU hotplug.
308endmenu
309
310source "arch/csky/Kconfig.platforms"
311
312source "kernel/Kconfig.hz"
313