diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-21 10:50:02 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-21 10:50:02 -0400 |
commit | 3d430bdb74140224d90dd6253d67ff71d181cf64 (patch) | |
tree | c4724c066290f606f5a0abced783e4bd650b713c /arch/arc | |
parent | dc303408a716e865099fcb3f83a90d9c51184c02 (diff) | |
parent | 56372082533afb859e6d64707859349a2ee171bf (diff) |
Merge tag 'arc-3.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc
Pull ARC updates from Vineet Gupta:
"Sorry for the late pull request. Current stuff was ready for a while
but I was hoping to squeeze in support for almost ready ARC SDP
platform (and avoid a 2nd pull request), however it seems there are
still some loose ends which warrant more time.
- Platform code reduction/moving-up (TB10X no longer needs any
callbacks)
- updated boot printing
- kgdb update for arc gdb 7.5
- bug fixes (some marked for stable)
- more code refactoring/consolidation"
* tag 'arc-3.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
ARC: boot: cpu feature print enhancements
ARC: boot: consolidate cross-checking of h/w and s/w
ARC: unbork FPU save/restore
ARC: remove extraneous __KERNEL__ guards
ARC: Update order of registers in KGDB to match GDB 7.5
ARC: Remove unneeded Kconfig entry NO_DMA
ARC: BUG() dumps stack after @msg (@msg now same as in generic BUG))
ARC: refactoring: reduce the scope of some local vars
ARC: remove gcc mpy heuristics
ARC: RIP @running_on_hw
ARC: Update comments about uncached address space
ARC: rename kconfig option for unaligned emulation
ARC: [nsimosci] Allow "headless" models to boot
ARC: [arcfpga] Get rid of ARC_BOARD_ANGEL4 and ARC_BOARD_ML509
ARC: [arcfpga] Remove more dead code
ARC: [plat*] move code out of .init_machine into common
ARC: [arcfpga] consolidate machine description, DT
ARC: Allow SMP kernel to build/boot on UP-only infrastructure
Diffstat (limited to 'arch/arc')
37 files changed, 265 insertions, 437 deletions
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig index 9596b0ab108d..fe44b2494609 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig | |||
@@ -9,6 +9,7 @@ | |||
9 | config ARC | 9 | config ARC |
10 | def_bool y | 10 | def_bool y |
11 | select BUILDTIME_EXTABLE_SORT | 11 | select BUILDTIME_EXTABLE_SORT |
12 | select COMMON_CLK | ||
12 | select CLONE_BACKWARDS | 13 | select CLONE_BACKWARDS |
13 | # ARC Busybox based initramfs absolutely relies on DEVTMPFS for /dev | 14 | # ARC Busybox based initramfs absolutely relies on DEVTMPFS for /dev |
14 | select DEVTMPFS if !INITRAMFS_SOURCE="" | 15 | select DEVTMPFS if !INITRAMFS_SOURCE="" |
@@ -73,9 +74,6 @@ config STACKTRACE_SUPPORT | |||
73 | config HAVE_LATENCYTOP_SUPPORT | 74 | config HAVE_LATENCYTOP_SUPPORT |
74 | def_bool y | 75 | def_bool y |
75 | 76 | ||
76 | config NO_DMA | ||
77 | def_bool n | ||
78 | |||
79 | source "init/Kconfig" | 77 | source "init/Kconfig" |
80 | source "kernel/Kconfig.freezer" | 78 | source "kernel/Kconfig.freezer" |
81 | 79 | ||
@@ -354,7 +352,7 @@ config ARC_CURR_IN_REG | |||
354 | kernel mode. This saves memory access for each such access | 352 | kernel mode. This saves memory access for each such access |
355 | 353 | ||
356 | 354 | ||
357 | config ARC_MISALIGN_ACCESS | 355 | config ARC_EMUL_UNALIGNED |
358 | bool "Emulate unaligned memory access (userspace only)" | 356 | bool "Emulate unaligned memory access (userspace only)" |
359 | select SYSCTL_ARCH_UNALIGN_NO_WARN | 357 | select SYSCTL_ARCH_UNALIGN_NO_WARN |
360 | select SYSCTL_ARCH_UNALIGN_ALLOW | 358 | select SYSCTL_ARCH_UNALIGN_ALLOW |
diff --git a/arch/arc/Makefile b/arch/arc/Makefile index 8c0b1aa56f7e..10bc3d4e8a44 100644 --- a/arch/arc/Makefile +++ b/arch/arc/Makefile | |||
@@ -25,7 +25,6 @@ ifdef CONFIG_ARC_CURR_IN_REG | |||
25 | LINUXINCLUDE += -include ${src}/arch/arc/include/asm/current.h | 25 | LINUXINCLUDE += -include ${src}/arch/arc/include/asm/current.h |
26 | endif | 26 | endif |
27 | 27 | ||
28 | upto_gcc42 := $(call cc-ifversion, -le, 0402, y) | ||
29 | upto_gcc44 := $(call cc-ifversion, -le, 0404, y) | 28 | upto_gcc44 := $(call cc-ifversion, -le, 0404, y) |
30 | atleast_gcc44 := $(call cc-ifversion, -ge, 0404, y) | 29 | atleast_gcc44 := $(call cc-ifversion, -ge, 0404, y) |
31 | atleast_gcc48 := $(call cc-ifversion, -ge, 0408, y) | 30 | atleast_gcc48 := $(call cc-ifversion, -ge, 0408, y) |
@@ -60,25 +59,11 @@ ldflags-$(CONFIG_CPU_BIG_ENDIAN) += -EB | |||
60 | # --build-id w/o "-marclinux". Default arc-elf32-ld is OK | 59 | # --build-id w/o "-marclinux". Default arc-elf32-ld is OK |
61 | ldflags-$(upto_gcc44) += -marclinux | 60 | ldflags-$(upto_gcc44) += -marclinux |
62 | 61 | ||
63 | ARC_LIBGCC := -mA7 | ||
64 | cflags-$(CONFIG_ARC_HAS_HW_MPY) += -multcost=16 | ||
65 | |||
66 | ifndef CONFIG_ARC_HAS_HW_MPY | 62 | ifndef CONFIG_ARC_HAS_HW_MPY |
67 | cflags-y += -mno-mpy | 63 | cflags-y += -mno-mpy |
68 | |||
69 | # newlib for ARC700 assumes MPY to be always present, which is generally true | ||
70 | # However, if someone really doesn't want MPY, we need to use the 600 ver | ||
71 | # which coupled with -mno-mpy will use mpy emulation | ||
72 | # With gcc 4.4.7, -mno-mpy is enough to make any other related adjustments, | ||
73 | # e.g. increased cost of MPY. With gcc 4.2.1 this had to be explicitly hinted | ||
74 | |||
75 | ifeq ($(upto_gcc42),y) | ||
76 | ARC_LIBGCC := -marc600 | ||
77 | cflags-y += -multcost=30 | ||
78 | endif | ||
79 | endif | 64 | endif |
80 | 65 | ||
81 | LIBGCC := $(shell $(CC) $(ARC_LIBGCC) $(cflags-y) --print-libgcc-file-name) | 66 | LIBGCC := $(shell $(CC) $(cflags-y) --print-libgcc-file-name) |
82 | 67 | ||
83 | # Modules with short calls might break for calls into builtin-kernel | 68 | # Modules with short calls might break for calls into builtin-kernel |
84 | KBUILD_CFLAGS_MODULE += -mlong-calls | 69 | KBUILD_CFLAGS_MODULE += -mlong-calls |
diff --git a/arch/arc/boot/dts/angel4.dts b/arch/arc/boot/dts/angel4.dts index 6b57475967a6..757e0c62c4f9 100644 --- a/arch/arc/boot/dts/angel4.dts +++ b/arch/arc/boot/dts/angel4.dts | |||
@@ -24,11 +24,6 @@ | |||
24 | serial0 = &arcuart0; | 24 | serial0 = &arcuart0; |
25 | }; | 25 | }; |
26 | 26 | ||
27 | memory { | ||
28 | device_type = "memory"; | ||
29 | reg = <0x00000000 0x10000000>; /* 256M */ | ||
30 | }; | ||
31 | |||
32 | fpga { | 27 | fpga { |
33 | compatible = "simple-bus"; | 28 | compatible = "simple-bus"; |
34 | #address-cells = <1>; | 29 | #address-cells = <1>; |
diff --git a/arch/arc/boot/dts/nsimosci.dts b/arch/arc/boot/dts/nsimosci.dts index 4f31b2eb5cdf..cfaedd9c61c9 100644 --- a/arch/arc/boot/dts/nsimosci.dts +++ b/arch/arc/boot/dts/nsimosci.dts | |||
@@ -20,18 +20,13 @@ | |||
20 | /* this is for console on PGU */ | 20 | /* this is for console on PGU */ |
21 | /* bootargs = "console=tty0 consoleblank=0"; */ | 21 | /* bootargs = "console=tty0 consoleblank=0"; */ |
22 | /* this is for console on serial */ | 22 | /* this is for console on serial */ |
23 | bootargs = "earlycon=uart8250,mmio32,0xc0000000,115200n8 console=ttyS0,115200n8 consoleblank=0 debug"; | 23 | bootargs = "earlycon=uart8250,mmio32,0xc0000000,115200n8 console=tty0 console=ttyS0,115200n8 consoleblank=0 debug"; |
24 | }; | 24 | }; |
25 | 25 | ||
26 | aliases { | 26 | aliases { |
27 | serial0 = &uart0; | 27 | serial0 = &uart0; |
28 | }; | 28 | }; |
29 | 29 | ||
30 | memory { | ||
31 | device_type = "memory"; | ||
32 | reg = <0x80000000 0x10000000>; /* 256M */ | ||
33 | }; | ||
34 | |||
35 | fpga { | 30 | fpga { |
36 | compatible = "simple-bus"; | 31 | compatible = "simple-bus"; |
37 | #address-cells = <1>; | 32 | #address-cells = <1>; |
diff --git a/arch/arc/configs/fpga_defconfig b/arch/arc/configs/fpga_defconfig index e283aa586934..ef4d3bc7b6c0 100644 --- a/arch/arc/configs/fpga_defconfig +++ b/arch/arc/configs/fpga_defconfig | |||
@@ -23,7 +23,6 @@ CONFIG_MODULES=y | |||
23 | # CONFIG_IOSCHED_DEADLINE is not set | 23 | # CONFIG_IOSCHED_DEADLINE is not set |
24 | # CONFIG_IOSCHED_CFQ is not set | 24 | # CONFIG_IOSCHED_CFQ is not set |
25 | CONFIG_ARC_PLAT_FPGA_LEGACY=y | 25 | CONFIG_ARC_PLAT_FPGA_LEGACY=y |
26 | CONFIG_ARC_BOARD_ML509=y | ||
27 | # CONFIG_ARC_HAS_RTSC is not set | 26 | # CONFIG_ARC_HAS_RTSC is not set |
28 | CONFIG_ARC_BUILTIN_DTB_NAME="angel4" | 27 | CONFIG_ARC_BUILTIN_DTB_NAME="angel4" |
29 | CONFIG_PREEMPT=y | 28 | CONFIG_PREEMPT=y |
diff --git a/arch/arc/configs/fpga_noramfs_defconfig b/arch/arc/configs/fpga_noramfs_defconfig index 5276a52f6a2f..49c93011ab96 100644 --- a/arch/arc/configs/fpga_noramfs_defconfig +++ b/arch/arc/configs/fpga_noramfs_defconfig | |||
@@ -20,7 +20,6 @@ CONFIG_MODULES=y | |||
20 | # CONFIG_IOSCHED_DEADLINE is not set | 20 | # CONFIG_IOSCHED_DEADLINE is not set |
21 | # CONFIG_IOSCHED_CFQ is not set | 21 | # CONFIG_IOSCHED_CFQ is not set |
22 | CONFIG_ARC_PLAT_FPGA_LEGACY=y | 22 | CONFIG_ARC_PLAT_FPGA_LEGACY=y |
23 | CONFIG_ARC_BOARD_ML509=y | ||
24 | # CONFIG_ARC_HAS_RTSC is not set | 23 | # CONFIG_ARC_HAS_RTSC is not set |
25 | CONFIG_ARC_BUILTIN_DTB_NAME="angel4" | 24 | CONFIG_ARC_BUILTIN_DTB_NAME="angel4" |
26 | CONFIG_PREEMPT=y | 25 | CONFIG_PREEMPT=y |
diff --git a/arch/arc/configs/nsimosci_defconfig b/arch/arc/configs/nsimosci_defconfig index c01ba35a4eff..278dacf2a3f9 100644 --- a/arch/arc/configs/nsimosci_defconfig +++ b/arch/arc/configs/nsimosci_defconfig | |||
@@ -21,7 +21,6 @@ CONFIG_MODULES=y | |||
21 | # CONFIG_IOSCHED_DEADLINE is not set | 21 | # CONFIG_IOSCHED_DEADLINE is not set |
22 | # CONFIG_IOSCHED_CFQ is not set | 22 | # CONFIG_IOSCHED_CFQ is not set |
23 | CONFIG_ARC_PLAT_FPGA_LEGACY=y | 23 | CONFIG_ARC_PLAT_FPGA_LEGACY=y |
24 | CONFIG_ARC_BOARD_ML509=y | ||
25 | # CONFIG_ARC_IDE is not set | 24 | # CONFIG_ARC_IDE is not set |
26 | # CONFIG_ARCTANGENT_EMAC is not set | 25 | # CONFIG_ARCTANGENT_EMAC is not set |
27 | # CONFIG_ARC_HAS_RTSC is not set | 26 | # CONFIG_ARC_HAS_RTSC is not set |
diff --git a/arch/arc/include/asm/arcregs.h b/arch/arc/include/asm/arcregs.h index 372466b371bf..be33db8a2ee3 100644 --- a/arch/arc/include/asm/arcregs.h +++ b/arch/arc/include/asm/arcregs.h | |||
@@ -9,19 +9,16 @@ | |||
9 | #ifndef _ASM_ARC_ARCREGS_H | 9 | #ifndef _ASM_ARC_ARCREGS_H |
10 | #define _ASM_ARC_ARCREGS_H | 10 | #define _ASM_ARC_ARCREGS_H |
11 | 11 | ||
12 | #ifdef __KERNEL__ | ||
13 | |||
14 | /* Build Configuration Registers */ | 12 | /* Build Configuration Registers */ |
15 | #define ARC_REG_DCCMBASE_BCR 0x61 /* DCCM Base Addr */ | 13 | #define ARC_REG_DCCMBASE_BCR 0x61 /* DCCM Base Addr */ |
16 | #define ARC_REG_CRC_BCR 0x62 | 14 | #define ARC_REG_CRC_BCR 0x62 |
17 | #define ARC_REG_DVFB_BCR 0x64 | ||
18 | #define ARC_REG_EXTARITH_BCR 0x65 | ||
19 | #define ARC_REG_VECBASE_BCR 0x68 | 15 | #define ARC_REG_VECBASE_BCR 0x68 |
20 | #define ARC_REG_PERIBASE_BCR 0x69 | 16 | #define ARC_REG_PERIBASE_BCR 0x69 |
21 | #define ARC_REG_FP_BCR 0x6B /* Single-Precision FPU */ | 17 | #define ARC_REG_FP_BCR 0x6B /* ARCompact: Single-Precision FPU */ |
22 | #define ARC_REG_DPFP_BCR 0x6C /* Dbl Precision FPU */ | 18 | #define ARC_REG_DPFP_BCR 0x6C /* ARCompact: Dbl Precision FPU */ |
23 | #define ARC_REG_DCCM_BCR 0x74 /* DCCM Present + SZ */ | 19 | #define ARC_REG_DCCM_BCR 0x74 /* DCCM Present + SZ */ |
24 | #define ARC_REG_TIMERS_BCR 0x75 | 20 | #define ARC_REG_TIMERS_BCR 0x75 |
21 | #define ARC_REG_AP_BCR 0x76 | ||
25 | #define ARC_REG_ICCM_BCR 0x78 | 22 | #define ARC_REG_ICCM_BCR 0x78 |
26 | #define ARC_REG_XY_MEM_BCR 0x79 | 23 | #define ARC_REG_XY_MEM_BCR 0x79 |
27 | #define ARC_REG_MAC_BCR 0x7a | 24 | #define ARC_REG_MAC_BCR 0x7a |
@@ -31,6 +28,9 @@ | |||
31 | #define ARC_REG_MIXMAX_BCR 0x7e | 28 | #define ARC_REG_MIXMAX_BCR 0x7e |
32 | #define ARC_REG_BARREL_BCR 0x7f | 29 | #define ARC_REG_BARREL_BCR 0x7f |
33 | #define ARC_REG_D_UNCACH_BCR 0x6A | 30 | #define ARC_REG_D_UNCACH_BCR 0x6A |
31 | #define ARC_REG_BPU_BCR 0xc0 | ||
32 | #define ARC_REG_ISA_CFG_BCR 0xc1 | ||
33 | #define ARC_REG_SMART_BCR 0xFF | ||
34 | 34 | ||
35 | /* status32 Bits Positions */ | 35 | /* status32 Bits Positions */ |
36 | #define STATUS_AE_BIT 5 /* Exception active */ | 36 | #define STATUS_AE_BIT 5 /* Exception active */ |
@@ -191,14 +191,6 @@ | |||
191 | #define PAGES_TO_KB(n_pages) ((n_pages) << (PAGE_SHIFT - 10)) | 191 | #define PAGES_TO_KB(n_pages) ((n_pages) << (PAGE_SHIFT - 10)) |
192 | #define PAGES_TO_MB(n_pages) (PAGES_TO_KB(n_pages) >> 10) | 192 | #define PAGES_TO_MB(n_pages) (PAGES_TO_KB(n_pages) >> 10) |
193 | 193 | ||
194 | #ifdef CONFIG_ARC_FPU_SAVE_RESTORE | ||
195 | /* These DPFP regs need to be saved/restored across ctx-sw */ | ||
196 | struct arc_fpu { | ||
197 | struct { | ||
198 | unsigned int l, h; | ||
199 | } aux_dpfp[2]; | ||
200 | }; | ||
201 | #endif | ||
202 | 194 | ||
203 | /* | 195 | /* |
204 | *************************************************************** | 196 | *************************************************************** |
@@ -212,27 +204,19 @@ struct bcr_identity { | |||
212 | #endif | 204 | #endif |
213 | }; | 205 | }; |
214 | 206 | ||
215 | #define EXTN_SWAP_VALID 0x1 | 207 | struct bcr_isa { |
216 | #define EXTN_NORM_VALID 0x2 | ||
217 | #define EXTN_MINMAX_VALID 0x2 | ||
218 | #define EXTN_BARREL_VALID 0x2 | ||
219 | |||
220 | struct bcr_extn { | ||
221 | #ifdef CONFIG_CPU_BIG_ENDIAN | 208 | #ifdef CONFIG_CPU_BIG_ENDIAN |
222 | unsigned int pad:20, crc:1, ext_arith:2, mul:2, barrel:2, minmax:2, | 209 | unsigned int pad1:23, atomic1:1, ver:8; |
223 | norm:2, swap:1; | ||
224 | #else | 210 | #else |
225 | unsigned int swap:1, norm:2, minmax:2, barrel:2, mul:2, ext_arith:2, | 211 | unsigned int ver:8, atomic1:1, pad1:23; |
226 | crc:1, pad:20; | ||
227 | #endif | 212 | #endif |
228 | }; | 213 | }; |
229 | 214 | ||
230 | /* DSP Options Ref Manual */ | 215 | struct bcr_mpy { |
231 | struct bcr_extn_mac_mul { | ||
232 | #ifdef CONFIG_CPU_BIG_ENDIAN | 216 | #ifdef CONFIG_CPU_BIG_ENDIAN |
233 | unsigned int pad:16, type:8, ver:8; | 217 | unsigned int pad:8, x1616:8, dsp:4, cycles:2, type:2, ver:8; |
234 | #else | 218 | #else |
235 | unsigned int ver:8, type:8, pad:16; | 219 | unsigned int ver:8, type:2, cycles:2, dsp:4, x1616:8, pad:8; |
236 | #endif | 220 | #endif |
237 | }; | 221 | }; |
238 | 222 | ||
@@ -251,6 +235,7 @@ struct bcr_perip { | |||
251 | unsigned int pad:8, sz:8, pad2:8, start:8; | 235 | unsigned int pad:8, sz:8, pad2:8, start:8; |
252 | #endif | 236 | #endif |
253 | }; | 237 | }; |
238 | |||
254 | struct bcr_iccm { | 239 | struct bcr_iccm { |
255 | #ifdef CONFIG_CPU_BIG_ENDIAN | 240 | #ifdef CONFIG_CPU_BIG_ENDIAN |
256 | unsigned int base:16, pad:5, sz:3, ver:8; | 241 | unsigned int base:16, pad:5, sz:3, ver:8; |
@@ -277,8 +262,8 @@ struct bcr_dccm { | |||
277 | #endif | 262 | #endif |
278 | }; | 263 | }; |
279 | 264 | ||
280 | /* Both SP and DP FPU BCRs have same format */ | 265 | /* ARCompact: Both SP and DP FPU BCRs have same format */ |
281 | struct bcr_fp { | 266 | struct bcr_fp_arcompact { |
282 | #ifdef CONFIG_CPU_BIG_ENDIAN | 267 | #ifdef CONFIG_CPU_BIG_ENDIAN |
283 | unsigned int fast:1, ver:8; | 268 | unsigned int fast:1, ver:8; |
284 | #else | 269 | #else |
@@ -286,6 +271,30 @@ struct bcr_fp { | |||
286 | #endif | 271 | #endif |
287 | }; | 272 | }; |
288 | 273 | ||
274 | struct bcr_timer { | ||
275 | #ifdef CONFIG_CPU_BIG_ENDIAN | ||
276 | unsigned int pad2:15, rtsc:1, pad1:6, t1:1, t0:1, ver:8; | ||
277 | #else | ||
278 | unsigned int ver:8, t0:1, t1:1, pad1:6, rtsc:1, pad2:15; | ||
279 | #endif | ||
280 | }; | ||
281 | |||
282 | struct bcr_bpu_arcompact { | ||
283 | #ifdef CONFIG_CPU_BIG_ENDIAN | ||
284 | unsigned int pad2:19, fam:1, pad:2, ent:2, ver:8; | ||
285 | #else | ||
286 | unsigned int ver:8, ent:2, pad:2, fam:1, pad2:19; | ||
287 | #endif | ||
288 | }; | ||
289 | |||
290 | struct bcr_generic { | ||
291 | #ifdef CONFIG_CPU_BIG_ENDIAN | ||
292 | unsigned int pad:24, ver:8; | ||
293 | #else | ||
294 | unsigned int ver:8, pad:24; | ||
295 | #endif | ||
296 | }; | ||
297 | |||
289 | /* | 298 | /* |
290 | ******************************************************************* | 299 | ******************************************************************* |
291 | * Generic structures to hold build configuration used at runtime | 300 | * Generic structures to hold build configuration used at runtime |
@@ -299,6 +308,10 @@ struct cpuinfo_arc_cache { | |||
299 | unsigned int sz_k:8, line_len:8, assoc:4, ver:4, alias:1, vipt:1, pad:6; | 308 | unsigned int sz_k:8, line_len:8, assoc:4, ver:4, alias:1, vipt:1, pad:6; |
300 | }; | 309 | }; |
301 | 310 | ||
311 | struct cpuinfo_arc_bpu { | ||
312 | unsigned int ver, full, num_cache, num_pred; | ||
313 | }; | ||
314 | |||
302 | struct cpuinfo_arc_ccm { | 315 | struct cpuinfo_arc_ccm { |
303 | unsigned int base_addr, sz; | 316 | unsigned int base_addr, sz; |
304 | }; | 317 | }; |
@@ -306,21 +319,25 @@ struct cpuinfo_arc_ccm { | |||
306 | struct cpuinfo_arc { | 319 | struct cpuinfo_arc { |
307 | struct cpuinfo_arc_cache icache, dcache; | 320 | struct cpuinfo_arc_cache icache, dcache; |
308 | struct cpuinfo_arc_mmu mmu; | 321 | struct cpuinfo_arc_mmu mmu; |
322 | struct cpuinfo_arc_bpu bpu; | ||
309 | struct bcr_identity core; | 323 | struct bcr_identity core; |
310 | unsigned int timers; | 324 | struct bcr_isa isa; |
325 | struct bcr_timer timers; | ||
311 | unsigned int vec_base; | 326 | unsigned int vec_base; |
312 | unsigned int uncached_base; | 327 | unsigned int uncached_base; |
313 | struct cpuinfo_arc_ccm iccm, dccm; | 328 | struct cpuinfo_arc_ccm iccm, dccm; |
314 | struct bcr_extn extn; | 329 | struct { |
330 | unsigned int swap:1, norm:1, minmax:1, barrel:1, crc:1, pad1:3, | ||
331 | fpu_sp:1, fpu_dp:1, pad2:6, | ||
332 | debug:1, ap:1, smart:1, rtt:1, pad3:4, | ||
333 | pad4:8; | ||
334 | } extn; | ||
335 | struct bcr_mpy extn_mpy; | ||
315 | struct bcr_extn_xymem extn_xymem; | 336 | struct bcr_extn_xymem extn_xymem; |
316 | struct bcr_extn_mac_mul extn_mac_mul; | ||
317 | struct bcr_fp fp, dpfp; | ||
318 | }; | 337 | }; |
319 | 338 | ||
320 | extern struct cpuinfo_arc cpuinfo_arc700[]; | 339 | extern struct cpuinfo_arc cpuinfo_arc700[]; |
321 | 340 | ||
322 | #endif /* __ASEMBLY__ */ | 341 | #endif /* __ASEMBLY__ */ |
323 | 342 | ||
324 | #endif /* __KERNEL__ */ | ||
325 | |||
326 | #endif /* _ASM_ARC_ARCREGS_H */ | 343 | #endif /* _ASM_ARC_ARCREGS_H */ |
diff --git a/arch/arc/include/asm/atomic.h b/arch/arc/include/asm/atomic.h index 173f303a868f..067551b6920a 100644 --- a/arch/arc/include/asm/atomic.h +++ b/arch/arc/include/asm/atomic.h | |||
@@ -9,8 +9,6 @@ | |||
9 | #ifndef _ASM_ARC_ATOMIC_H | 9 | #ifndef _ASM_ARC_ATOMIC_H |
10 | #define _ASM_ARC_ATOMIC_H | 10 | #define _ASM_ARC_ATOMIC_H |
11 | 11 | ||
12 | #ifdef __KERNEL__ | ||
13 | |||
14 | #ifndef __ASSEMBLY__ | 12 | #ifndef __ASSEMBLY__ |
15 | 13 | ||
16 | #include <linux/types.h> | 14 | #include <linux/types.h> |
@@ -170,5 +168,3 @@ ATOMIC_OP(and, &=, and) | |||
170 | #endif | 168 | #endif |
171 | 169 | ||
172 | #endif | 170 | #endif |
173 | |||
174 | #endif | ||
diff --git a/arch/arc/include/asm/bitops.h b/arch/arc/include/asm/bitops.h index ebc0cf3164dc..1a5bf07eefe2 100644 --- a/arch/arc/include/asm/bitops.h +++ b/arch/arc/include/asm/bitops.h | |||
@@ -13,8 +13,6 @@ | |||
13 | #error only <linux/bitops.h> can be included directly | 13 | #error only <linux/bitops.h> can be included directly |
14 | #endif | 14 | #endif |
15 | 15 | ||
16 | #ifdef __KERNEL__ | ||
17 | |||
18 | #ifndef __ASSEMBLY__ | 16 | #ifndef __ASSEMBLY__ |
19 | 17 | ||
20 | #include <linux/types.h> | 18 | #include <linux/types.h> |
@@ -508,6 +506,4 @@ static inline __attribute__ ((const)) int __ffs(unsigned long word) | |||
508 | 506 | ||
509 | #endif /* !__ASSEMBLY__ */ | 507 | #endif /* !__ASSEMBLY__ */ |
510 | 508 | ||
511 | #endif /* __KERNEL__ */ | ||
512 | |||
513 | #endif | 509 | #endif |
diff --git a/arch/arc/include/asm/bug.h b/arch/arc/include/asm/bug.h index 5b18e94c6678..ea022d47896c 100644 --- a/arch/arc/include/asm/bug.h +++ b/arch/arc/include/asm/bug.h | |||
@@ -21,10 +21,9 @@ void show_kernel_fault_diag(const char *str, struct pt_regs *regs, | |||
21 | unsigned long address); | 21 | unsigned long address); |
22 | void die(const char *str, struct pt_regs *regs, unsigned long address); | 22 | void die(const char *str, struct pt_regs *regs, unsigned long address); |
23 | 23 | ||
24 | #define BUG() do { \ | 24 | #define BUG() do { \ |
25 | dump_stack(); \ | 25 | pr_warn("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \ |
26 | pr_warn("Kernel BUG in %s: %s: %d!\n", \ | 26 | dump_stack(); \ |
27 | __FILE__, __func__, __LINE__); \ | ||
28 | } while (0) | 27 | } while (0) |
29 | 28 | ||
30 | #define HAVE_ARCH_BUG | 29 | #define HAVE_ARCH_BUG |
diff --git a/arch/arc/include/asm/cache.h b/arch/arc/include/asm/cache.h index b3c750979aa1..7861255da32d 100644 --- a/arch/arc/include/asm/cache.h +++ b/arch/arc/include/asm/cache.h | |||
@@ -20,7 +20,7 @@ | |||
20 | #define CACHE_LINE_MASK (~(L1_CACHE_BYTES - 1)) | 20 | #define CACHE_LINE_MASK (~(L1_CACHE_BYTES - 1)) |
21 | 21 | ||
22 | /* | 22 | /* |
23 | * ARC700 doesn't cache any access in top 256M. | 23 | * ARC700 doesn't cache any access in top 1G (0xc000_0000 to 0xFFFF_FFFF) |
24 | * Ideal for wiring memory mapped peripherals as we don't need to do | 24 | * Ideal for wiring memory mapped peripherals as we don't need to do |
25 | * explicit uncached accesses (LD.di/ST.di) hence more portable drivers | 25 | * explicit uncached accesses (LD.di/ST.di) hence more portable drivers |
26 | */ | 26 | */ |
diff --git a/arch/arc/include/asm/current.h b/arch/arc/include/asm/current.h index 87b918585c4a..c2453ee62801 100644 --- a/arch/arc/include/asm/current.h +++ b/arch/arc/include/asm/current.h | |||
@@ -12,8 +12,6 @@ | |||
12 | #ifndef _ASM_ARC_CURRENT_H | 12 | #ifndef _ASM_ARC_CURRENT_H |
13 | #define _ASM_ARC_CURRENT_H | 13 | #define _ASM_ARC_CURRENT_H |
14 | 14 | ||
15 | #ifdef __KERNEL__ | ||
16 | |||
17 | #ifndef __ASSEMBLY__ | 15 | #ifndef __ASSEMBLY__ |
18 | 16 | ||
19 | #ifdef CONFIG_ARC_CURR_IN_REG | 17 | #ifdef CONFIG_ARC_CURR_IN_REG |
@@ -27,6 +25,4 @@ register struct task_struct *curr_arc asm("r25"); | |||
27 | 25 | ||
28 | #endif /* ! __ASSEMBLY__ */ | 26 | #endif /* ! __ASSEMBLY__ */ |
29 | 27 | ||
30 | #endif /* __KERNEL__ */ | ||
31 | |||
32 | #endif /* _ASM_ARC_CURRENT_H */ | 28 | #endif /* _ASM_ARC_CURRENT_H */ |
diff --git a/arch/arc/include/asm/irqflags.h b/arch/arc/include/asm/irqflags.h index 587df8236e8b..742816f1b210 100644 --- a/arch/arc/include/asm/irqflags.h +++ b/arch/arc/include/asm/irqflags.h | |||
@@ -15,8 +15,6 @@ | |||
15 | * -Conditionally disable interrupts (if they are not enabled, don't disable) | 15 | * -Conditionally disable interrupts (if they are not enabled, don't disable) |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #ifdef __KERNEL__ | ||
19 | |||
20 | #include <asm/arcregs.h> | 18 | #include <asm/arcregs.h> |
21 | 19 | ||
22 | /* status32 Reg bits related to Interrupt Handling */ | 20 | /* status32 Reg bits related to Interrupt Handling */ |
@@ -169,6 +167,4 @@ static inline int arch_irqs_disabled(void) | |||
169 | 167 | ||
170 | #endif /* __ASSEMBLY__ */ | 168 | #endif /* __ASSEMBLY__ */ |
171 | 169 | ||
172 | #endif /* KERNEL */ | ||
173 | |||
174 | #endif | 170 | #endif |
diff --git a/arch/arc/include/asm/kgdb.h b/arch/arc/include/asm/kgdb.h index b65fca7ffeb5..fea931634136 100644 --- a/arch/arc/include/asm/kgdb.h +++ b/arch/arc/include/asm/kgdb.h | |||
@@ -19,7 +19,7 @@ | |||
19 | * register API yet */ | 19 | * register API yet */ |
20 | #undef DBG_MAX_REG_NUM | 20 | #undef DBG_MAX_REG_NUM |
21 | 21 | ||
22 | #define GDB_MAX_REGS 39 | 22 | #define GDB_MAX_REGS 87 |
23 | 23 | ||
24 | #define BREAK_INSTR_SIZE 2 | 24 | #define BREAK_INSTR_SIZE 2 |
25 | #define CACHE_FLUSH_IS_SAFE 1 | 25 | #define CACHE_FLUSH_IS_SAFE 1 |
@@ -33,23 +33,27 @@ static inline void arch_kgdb_breakpoint(void) | |||
33 | 33 | ||
34 | extern void kgdb_trap(struct pt_regs *regs); | 34 | extern void kgdb_trap(struct pt_regs *regs); |
35 | 35 | ||
36 | enum arc700_linux_regnums { | 36 | /* This is the numbering of registers according to the GDB. See GDB's |
37 | * arc-tdep.h for details. | ||
38 | * | ||
39 | * Registers are ordered for GDB 7.5. It is incompatible with GDB 6.8. */ | ||
40 | enum arc_linux_regnums { | ||
37 | _R0 = 0, | 41 | _R0 = 0, |
38 | _R1, _R2, _R3, _R4, _R5, _R6, _R7, _R8, _R9, _R10, _R11, _R12, _R13, | 42 | _R1, _R2, _R3, _R4, _R5, _R6, _R7, _R8, _R9, _R10, _R11, _R12, _R13, |
39 | _R14, _R15, _R16, _R17, _R18, _R19, _R20, _R21, _R22, _R23, _R24, | 43 | _R14, _R15, _R16, _R17, _R18, _R19, _R20, _R21, _R22, _R23, _R24, |
40 | _R25, _R26, | 44 | _R25, _R26, |
41 | _BTA = 27, | 45 | _FP = 27, |
42 | _LP_START = 28, | 46 | __SP = 28, |
43 | _LP_END = 29, | 47 | _R30 = 30, |
44 | _LP_COUNT = 30, | 48 | _BLINK = 31, |
45 | _STATUS32 = 31, | 49 | _LP_COUNT = 60, |
46 | _BLINK = 32, | 50 | _STOP_PC = 64, |
47 | _FP = 33, | 51 | _RET = 64, |
48 | __SP = 34, | 52 | _LP_START = 65, |
49 | _EFA = 35, | 53 | _LP_END = 66, |
50 | _RET = 36, | 54 | _STATUS32 = 67, |
51 | _ORIG_R8 = 37, | 55 | _ECR = 76, |
52 | _STOP_PC = 38 | 56 | _BTA = 82, |
53 | }; | 57 | }; |
54 | 58 | ||
55 | #else | 59 | #else |
diff --git a/arch/arc/include/asm/processor.h b/arch/arc/include/asm/processor.h index 82588f3ba77f..210fe97464c3 100644 --- a/arch/arc/include/asm/processor.h +++ b/arch/arc/include/asm/processor.h | |||
@@ -14,12 +14,19 @@ | |||
14 | #ifndef __ASM_ARC_PROCESSOR_H | 14 | #ifndef __ASM_ARC_PROCESSOR_H |
15 | #define __ASM_ARC_PROCESSOR_H | 15 | #define __ASM_ARC_PROCESSOR_H |
16 | 16 | ||
17 | #ifdef __KERNEL__ | ||
18 | |||
19 | #ifndef __ASSEMBLY__ | 17 | #ifndef __ASSEMBLY__ |
20 | 18 | ||
21 | #include <asm/ptrace.h> | 19 | #include <asm/ptrace.h> |
22 | 20 | ||
21 | #ifdef CONFIG_ARC_FPU_SAVE_RESTORE | ||
22 | /* These DPFP regs need to be saved/restored across ctx-sw */ | ||
23 | struct arc_fpu { | ||
24 | struct { | ||
25 | unsigned int l, h; | ||
26 | } aux_dpfp[2]; | ||
27 | }; | ||
28 | #endif | ||
29 | |||
23 | /* Arch specific stuff which needs to be saved per task. | 30 | /* Arch specific stuff which needs to be saved per task. |
24 | * However these items are not so important so as to earn a place in | 31 | * However these items are not so important so as to earn a place in |
25 | * struct thread_info | 32 | * struct thread_info |
@@ -128,6 +135,4 @@ extern unsigned int get_wchan(struct task_struct *p); | |||
128 | */ | 135 | */ |
129 | #define TASK_UNMAPPED_BASE (TASK_SIZE / 3) | 136 | #define TASK_UNMAPPED_BASE (TASK_SIZE / 3) |
130 | 137 | ||
131 | #endif /* __KERNEL__ */ | ||
132 | |||
133 | #endif /* __ASM_ARC_PROCESSOR_H */ | 138 | #endif /* __ASM_ARC_PROCESSOR_H */ |
diff --git a/arch/arc/include/asm/setup.h b/arch/arc/include/asm/setup.h index e10f8cef56a8..6e3ef5ba4f74 100644 --- a/arch/arc/include/asm/setup.h +++ b/arch/arc/include/asm/setup.h | |||
@@ -29,7 +29,6 @@ struct cpuinfo_data { | |||
29 | }; | 29 | }; |
30 | 30 | ||
31 | extern int root_mountflags, end_mem; | 31 | extern int root_mountflags, end_mem; |
32 | extern int running_on_hw; | ||
33 | 32 | ||
34 | void setup_processor(void); | 33 | void setup_processor(void); |
35 | void __init setup_arch_memory(void); | 34 | void __init setup_arch_memory(void); |
diff --git a/arch/arc/include/asm/smp.h b/arch/arc/include/asm/smp.h index 5d06eee43ea9..3845b9e94f69 100644 --- a/arch/arc/include/asm/smp.h +++ b/arch/arc/include/asm/smp.h | |||
@@ -59,7 +59,15 @@ struct plat_smp_ops { | |||
59 | /* TBD: stop exporting it for direct population by platform */ | 59 | /* TBD: stop exporting it for direct population by platform */ |
60 | extern struct plat_smp_ops plat_smp_ops; | 60 | extern struct plat_smp_ops plat_smp_ops; |
61 | 61 | ||
62 | #endif /* CONFIG_SMP */ | 62 | #else /* CONFIG_SMP */ |
63 | |||
64 | static inline void smp_init_cpus(void) {} | ||
65 | static inline const char *arc_platform_smp_cpuinfo(void) | ||
66 | { | ||
67 | return ""; | ||
68 | } | ||
69 | |||
70 | #endif /* !CONFIG_SMP */ | ||
63 | 71 | ||
64 | /* | 72 | /* |
65 | * ARC700 doesn't support atomic Read-Modify-Write ops. | 73 | * ARC700 doesn't support atomic Read-Modify-Write ops. |
diff --git a/arch/arc/include/asm/string.h b/arch/arc/include/asm/string.h index 87676c8f1412..95822b550a18 100644 --- a/arch/arc/include/asm/string.h +++ b/arch/arc/include/asm/string.h | |||
@@ -17,8 +17,6 @@ | |||
17 | 17 | ||
18 | #include <linux/types.h> | 18 | #include <linux/types.h> |
19 | 19 | ||
20 | #ifdef __KERNEL__ | ||
21 | |||
22 | #define __HAVE_ARCH_MEMSET | 20 | #define __HAVE_ARCH_MEMSET |
23 | #define __HAVE_ARCH_MEMCPY | 21 | #define __HAVE_ARCH_MEMCPY |
24 | #define __HAVE_ARCH_MEMCMP | 22 | #define __HAVE_ARCH_MEMCMP |
@@ -36,5 +34,4 @@ extern char *strcpy(char *dest, const char *src); | |||
36 | extern int strcmp(const char *cs, const char *ct); | 34 | extern int strcmp(const char *cs, const char *ct); |
37 | extern __kernel_size_t strlen(const char *); | 35 | extern __kernel_size_t strlen(const char *); |
38 | 36 | ||
39 | #endif /* __KERNEL__ */ | ||
40 | #endif /* _ASM_ARC_STRING_H */ | 37 | #endif /* _ASM_ARC_STRING_H */ |
diff --git a/arch/arc/include/asm/syscalls.h b/arch/arc/include/asm/syscalls.h index dd785befe7fd..e56f9fcc5581 100644 --- a/arch/arc/include/asm/syscalls.h +++ b/arch/arc/include/asm/syscalls.h | |||
@@ -9,8 +9,6 @@ | |||
9 | #ifndef _ASM_ARC_SYSCALLS_H | 9 | #ifndef _ASM_ARC_SYSCALLS_H |
10 | #define _ASM_ARC_SYSCALLS_H 1 | 10 | #define _ASM_ARC_SYSCALLS_H 1 |
11 | 11 | ||
12 | #ifdef __KERNEL__ | ||
13 | |||
14 | #include <linux/compiler.h> | 12 | #include <linux/compiler.h> |
15 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
16 | #include <linux/types.h> | 14 | #include <linux/types.h> |
@@ -22,6 +20,4 @@ int sys_arc_gettls(void); | |||
22 | 20 | ||
23 | #include <asm-generic/syscalls.h> | 21 | #include <asm-generic/syscalls.h> |
24 | 22 | ||
25 | #endif /* __KERNEL__ */ | ||
26 | |||
27 | #endif | 23 | #endif |
diff --git a/arch/arc/include/asm/thread_info.h b/arch/arc/include/asm/thread_info.h index 45be21672011..02bc5ec0fb2e 100644 --- a/arch/arc/include/asm/thread_info.h +++ b/arch/arc/include/asm/thread_info.h | |||
@@ -16,8 +16,6 @@ | |||
16 | #ifndef _ASM_THREAD_INFO_H | 16 | #ifndef _ASM_THREAD_INFO_H |
17 | #define _ASM_THREAD_INFO_H | 17 | #define _ASM_THREAD_INFO_H |
18 | 18 | ||
19 | #ifdef __KERNEL__ | ||
20 | |||
21 | #include <asm/page.h> | 19 | #include <asm/page.h> |
22 | 20 | ||
23 | #ifdef CONFIG_16KSTACKS | 21 | #ifdef CONFIG_16KSTACKS |
@@ -114,6 +112,4 @@ static inline __attribute_const__ struct thread_info *current_thread_info(void) | |||
114 | * syscall, so all that reamins to be tested is _TIF_WORK_MASK | 112 | * syscall, so all that reamins to be tested is _TIF_WORK_MASK |
115 | */ | 113 | */ |
116 | 114 | ||
117 | #endif /* __KERNEL__ */ | ||
118 | |||
119 | #endif /* _ASM_THREAD_INFO_H */ | 115 | #endif /* _ASM_THREAD_INFO_H */ |
diff --git a/arch/arc/include/asm/unaligned.h b/arch/arc/include/asm/unaligned.h index 3e5f071bc00c..6da6b4edaeda 100644 --- a/arch/arc/include/asm/unaligned.h +++ b/arch/arc/include/asm/unaligned.h | |||
@@ -14,7 +14,7 @@ | |||
14 | #include <asm-generic/unaligned.h> | 14 | #include <asm-generic/unaligned.h> |
15 | #include <asm/ptrace.h> | 15 | #include <asm/ptrace.h> |
16 | 16 | ||
17 | #ifdef CONFIG_ARC_MISALIGN_ACCESS | 17 | #ifdef CONFIG_ARC_EMUL_UNALIGNED |
18 | int misaligned_fixup(unsigned long address, struct pt_regs *regs, | 18 | int misaligned_fixup(unsigned long address, struct pt_regs *regs, |
19 | struct callee_regs *cregs); | 19 | struct callee_regs *cregs); |
20 | #else | 20 | #else |
diff --git a/arch/arc/kernel/Makefile b/arch/arc/kernel/Makefile index 8004b4fa6461..113f2033da9f 100644 --- a/arch/arc/kernel/Makefile +++ b/arch/arc/kernel/Makefile | |||
@@ -16,7 +16,7 @@ obj-$(CONFIG_MODULES) += arcksyms.o module.o | |||
16 | obj-$(CONFIG_SMP) += smp.o | 16 | obj-$(CONFIG_SMP) += smp.o |
17 | obj-$(CONFIG_ARC_DW2_UNWIND) += unwind.o | 17 | obj-$(CONFIG_ARC_DW2_UNWIND) += unwind.o |
18 | obj-$(CONFIG_KPROBES) += kprobes.o | 18 | obj-$(CONFIG_KPROBES) += kprobes.o |
19 | obj-$(CONFIG_ARC_MISALIGN_ACCESS) += unaligned.o | 19 | obj-$(CONFIG_ARC_EMUL_UNALIGNED) += unaligned.o |
20 | obj-$(CONFIG_KGDB) += kgdb.o | 20 | obj-$(CONFIG_KGDB) += kgdb.o |
21 | obj-$(CONFIG_ARC_METAWARE_HLINK) += arc_hostlink.o | 21 | obj-$(CONFIG_ARC_METAWARE_HLINK) += arc_hostlink.o |
22 | obj-$(CONFIG_PERF_EVENTS) += perf_event.o | 22 | obj-$(CONFIG_PERF_EVENTS) += perf_event.o |
diff --git a/arch/arc/kernel/disasm.c b/arch/arc/kernel/disasm.c index b8a549c4f540..3b7cd4864ba2 100644 --- a/arch/arc/kernel/disasm.c +++ b/arch/arc/kernel/disasm.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <linux/uaccess.h> | 15 | #include <linux/uaccess.h> |
16 | #include <asm/disasm.h> | 16 | #include <asm/disasm.h> |
17 | 17 | ||
18 | #if defined(CONFIG_KGDB) || defined(CONFIG_ARC_MISALIGN_ACCESS) || \ | 18 | #if defined(CONFIG_KGDB) || defined(CONFIG_ARC_EMUL_UNALIGNED) || \ |
19 | defined(CONFIG_KPROBES) | 19 | defined(CONFIG_KPROBES) |
20 | 20 | ||
21 | /* disasm_instr: Analyses instruction at addr, stores | 21 | /* disasm_instr: Analyses instruction at addr, stores |
@@ -535,4 +535,4 @@ int __kprobes disasm_next_pc(unsigned long pc, struct pt_regs *regs, | |||
535 | return instr.is_branch; | 535 | return instr.is_branch; |
536 | } | 536 | } |
537 | 537 | ||
538 | #endif /* CONFIG_KGDB || CONFIG_ARC_MISALIGN_ACCESS || CONFIG_KPROBES */ | 538 | #endif /* CONFIG_KGDB || CONFIG_ARC_EMUL_UNALIGNED || CONFIG_KPROBES */ |
diff --git a/arch/arc/kernel/head.S b/arch/arc/kernel/head.S index 4d2481bd8b98..b0e8666fdccc 100644 --- a/arch/arc/kernel/head.S +++ b/arch/arc/kernel/head.S | |||
@@ -91,16 +91,6 @@ stext: | |||
91 | st r0, [@uboot_tag] | 91 | st r0, [@uboot_tag] |
92 | st r2, [@uboot_arg] | 92 | st r2, [@uboot_arg] |
93 | 93 | ||
94 | ; Identify if running on ISS vs Silicon | ||
95 | ; IDENTITY Reg [ 3 2 1 0 ] | ||
96 | ; (chip-id) ^^^^^ ==> 0xffff for ISS | ||
97 | lr r0, [identity] | ||
98 | lsr r3, r0, 16 | ||
99 | cmp r3, 0xffff | ||
100 | mov.z r4, 0 | ||
101 | mov.nz r4, 1 | ||
102 | st r4, [@running_on_hw] | ||
103 | |||
104 | ; setup "current" tsk and optionally cache it in dedicated r25 | 94 | ; setup "current" tsk and optionally cache it in dedicated r25 |
105 | mov r9, @init_task | 95 | mov r9, @init_task |
106 | SET_CURR_TASK_ON_CPU r9, r0 ; r9 = tsk, r0 = scratch | 96 | SET_CURR_TASK_ON_CPU r9, r0 ; r9 = tsk, r0 = scratch |
diff --git a/arch/arc/kernel/perf_event.c b/arch/arc/kernel/perf_event.c index b9a5685a990e..ae1c485cbc68 100644 --- a/arch/arc/kernel/perf_event.c +++ b/arch/arc/kernel/perf_event.c | |||
@@ -244,25 +244,23 @@ static int arc_pmu_device_probe(struct platform_device *pdev) | |||
244 | pr_err("This core does not have performance counters!\n"); | 244 | pr_err("This core does not have performance counters!\n"); |
245 | return -ENODEV; | 245 | return -ENODEV; |
246 | } | 246 | } |
247 | BUG_ON(pct_bcr.c > ARC_PMU_MAX_HWEVENTS); | ||
247 | 248 | ||
248 | arc_pmu = devm_kzalloc(&pdev->dev, sizeof(struct arc_pmu), | 249 | READ_BCR(ARC_REG_CC_BUILD, cc_bcr); |
249 | GFP_KERNEL); | 250 | if (!cc_bcr.v) { |
251 | pr_err("Performance counters exist, but no countable conditions?\n"); | ||
252 | return -ENODEV; | ||
253 | } | ||
254 | |||
255 | arc_pmu = devm_kzalloc(&pdev->dev, sizeof(struct arc_pmu), GFP_KERNEL); | ||
250 | if (!arc_pmu) | 256 | if (!arc_pmu) |
251 | return -ENOMEM; | 257 | return -ENOMEM; |
252 | 258 | ||
253 | arc_pmu->n_counters = pct_bcr.c; | 259 | arc_pmu->n_counters = pct_bcr.c; |
254 | BUG_ON(arc_pmu->n_counters > ARC_PMU_MAX_HWEVENTS); | ||
255 | |||
256 | arc_pmu->counter_size = 32 + (pct_bcr.s << 4); | 260 | arc_pmu->counter_size = 32 + (pct_bcr.s << 4); |
257 | pr_info("ARC PMU found with %d counters of size %d bits\n", | ||
258 | arc_pmu->n_counters, arc_pmu->counter_size); | ||
259 | |||
260 | READ_BCR(ARC_REG_CC_BUILD, cc_bcr); | ||
261 | |||
262 | if (!cc_bcr.v) | ||
263 | pr_err("Strange! Performance counters exist, but no countable conditions?\n"); | ||
264 | 261 | ||
265 | pr_info("ARC PMU has %d countable conditions\n", cc_bcr.c); | 262 | pr_info("ARC perf\t: %d counters (%d bits), %d countable conditions\n", |
263 | arc_pmu->n_counters, arc_pmu->counter_size, cc_bcr.c); | ||
266 | 264 | ||
267 | cc_name.str[8] = 0; | 265 | cc_name.str[8] = 0; |
268 | for (i = 0; i < PERF_COUNT_HW_MAX; i++) | 266 | for (i = 0; i < PERF_COUNT_HW_MAX; i++) |
diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c index 119dddb752b2..252bf603db9c 100644 --- a/arch/arc/kernel/setup.c +++ b/arch/arc/kernel/setup.c | |||
@@ -13,7 +13,9 @@ | |||
13 | #include <linux/console.h> | 13 | #include <linux/console.h> |
14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
15 | #include <linux/cpu.h> | 15 | #include <linux/cpu.h> |
16 | #include <linux/clk-provider.h> | ||
16 | #include <linux/of_fdt.h> | 17 | #include <linux/of_fdt.h> |
18 | #include <linux/of_platform.h> | ||
17 | #include <linux/cache.h> | 19 | #include <linux/cache.h> |
18 | #include <asm/sections.h> | 20 | #include <asm/sections.h> |
19 | #include <asm/arcregs.h> | 21 | #include <asm/arcregs.h> |
@@ -24,11 +26,10 @@ | |||
24 | #include <asm/unwind.h> | 26 | #include <asm/unwind.h> |
25 | #include <asm/clk.h> | 27 | #include <asm/clk.h> |
26 | #include <asm/mach_desc.h> | 28 | #include <asm/mach_desc.h> |
29 | #include <asm/smp.h> | ||
27 | 30 | ||
28 | #define FIX_PTR(x) __asm__ __volatile__(";" : "+r"(x)) | 31 | #define FIX_PTR(x) __asm__ __volatile__(";" : "+r"(x)) |
29 | 32 | ||
30 | int running_on_hw = 1; /* vs. on ISS */ | ||
31 | |||
32 | /* Part of U-boot ABI: see head.S */ | 33 | /* Part of U-boot ABI: see head.S */ |
33 | int __initdata uboot_tag; | 34 | int __initdata uboot_tag; |
34 | char __initdata *uboot_arg; | 35 | char __initdata *uboot_arg; |
@@ -42,26 +43,26 @@ struct cpuinfo_arc cpuinfo_arc700[NR_CPUS]; | |||
42 | static void read_arc_build_cfg_regs(void) | 43 | static void read_arc_build_cfg_regs(void) |
43 | { | 44 | { |
44 | struct bcr_perip uncached_space; | 45 | struct bcr_perip uncached_space; |
46 | struct bcr_generic bcr; | ||
45 | struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()]; | 47 | struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()]; |
46 | FIX_PTR(cpu); | 48 | FIX_PTR(cpu); |
47 | 49 | ||
48 | READ_BCR(AUX_IDENTITY, cpu->core); | 50 | READ_BCR(AUX_IDENTITY, cpu->core); |
51 | READ_BCR(ARC_REG_ISA_CFG_BCR, cpu->isa); | ||
49 | 52 | ||
50 | cpu->timers = read_aux_reg(ARC_REG_TIMERS_BCR); | 53 | READ_BCR(ARC_REG_TIMERS_BCR, cpu->timers); |
51 | cpu->vec_base = read_aux_reg(AUX_INTR_VEC_BASE); | 54 | cpu->vec_base = read_aux_reg(AUX_INTR_VEC_BASE); |
52 | 55 | ||
53 | READ_BCR(ARC_REG_D_UNCACH_BCR, uncached_space); | 56 | READ_BCR(ARC_REG_D_UNCACH_BCR, uncached_space); |
54 | cpu->uncached_base = uncached_space.start << 24; | 57 | cpu->uncached_base = uncached_space.start << 24; |
55 | 58 | ||
56 | cpu->extn.mul = read_aux_reg(ARC_REG_MUL_BCR); | 59 | READ_BCR(ARC_REG_MUL_BCR, cpu->extn_mpy); |
57 | cpu->extn.swap = read_aux_reg(ARC_REG_SWAP_BCR); | ||
58 | cpu->extn.norm = read_aux_reg(ARC_REG_NORM_BCR); | ||
59 | cpu->extn.minmax = read_aux_reg(ARC_REG_MIXMAX_BCR); | ||
60 | cpu->extn.barrel = read_aux_reg(ARC_REG_BARREL_BCR); | ||
61 | READ_BCR(ARC_REG_MAC_BCR, cpu->extn_mac_mul); | ||
62 | 60 | ||
63 | cpu->extn.ext_arith = read_aux_reg(ARC_REG_EXTARITH_BCR); | 61 | cpu->extn.norm = read_aux_reg(ARC_REG_NORM_BCR) > 1 ? 1 : 0; /* 2,3 */ |
64 | cpu->extn.crc = read_aux_reg(ARC_REG_CRC_BCR); | 62 | cpu->extn.barrel = read_aux_reg(ARC_REG_BARREL_BCR) > 1 ? 1 : 0; /* 2,3 */ |
63 | cpu->extn.swap = read_aux_reg(ARC_REG_SWAP_BCR) ? 1 : 0; /* 1,3 */ | ||
64 | cpu->extn.crc = read_aux_reg(ARC_REG_CRC_BCR) ? 1 : 0; | ||
65 | cpu->extn.minmax = read_aux_reg(ARC_REG_MIXMAX_BCR) > 1 ? 1 : 0; /* 2 */ | ||
65 | 66 | ||
66 | /* Note that we read the CCM BCRs independent of kernel config | 67 | /* Note that we read the CCM BCRs independent of kernel config |
67 | * This is to catch the cases where user doesn't know that | 68 | * This is to catch the cases where user doesn't know that |
@@ -95,43 +96,76 @@ static void read_arc_build_cfg_regs(void) | |||
95 | read_decode_mmu_bcr(); | 96 | read_decode_mmu_bcr(); |
96 | read_decode_cache_bcr(); | 97 | read_decode_cache_bcr(); |
97 | 98 | ||
98 | READ_BCR(ARC_REG_FP_BCR, cpu->fp); | 99 | { |
99 | READ_BCR(ARC_REG_DPFP_BCR, cpu->dpfp); | 100 | struct bcr_fp_arcompact sp, dp; |
101 | struct bcr_bpu_arcompact bpu; | ||
102 | |||
103 | READ_BCR(ARC_REG_FP_BCR, sp); | ||
104 | READ_BCR(ARC_REG_DPFP_BCR, dp); | ||
105 | cpu->extn.fpu_sp = sp.ver ? 1 : 0; | ||
106 | cpu->extn.fpu_dp = dp.ver ? 1 : 0; | ||
107 | |||
108 | READ_BCR(ARC_REG_BPU_BCR, bpu); | ||
109 | cpu->bpu.ver = bpu.ver; | ||
110 | cpu->bpu.full = bpu.fam ? 1 : 0; | ||
111 | if (bpu.ent) { | ||
112 | cpu->bpu.num_cache = 256 << (bpu.ent - 1); | ||
113 | cpu->bpu.num_pred = 256 << (bpu.ent - 1); | ||
114 | } | ||
115 | } | ||
116 | |||
117 | READ_BCR(ARC_REG_AP_BCR, bcr); | ||
118 | cpu->extn.ap = bcr.ver ? 1 : 0; | ||
119 | |||
120 | READ_BCR(ARC_REG_SMART_BCR, bcr); | ||
121 | cpu->extn.smart = bcr.ver ? 1 : 0; | ||
122 | |||
123 | cpu->extn.debug = cpu->extn.ap | cpu->extn.smart; | ||
100 | } | 124 | } |
101 | 125 | ||
102 | static const struct cpuinfo_data arc_cpu_tbl[] = { | 126 | static const struct cpuinfo_data arc_cpu_tbl[] = { |
103 | { {0x10, "ARCTangent A5"}, 0x1F}, | ||
104 | { {0x20, "ARC 600" }, 0x2F}, | 127 | { {0x20, "ARC 600" }, 0x2F}, |
105 | { {0x30, "ARC 700" }, 0x33}, | 128 | { {0x30, "ARC 700" }, 0x33}, |
106 | { {0x34, "ARC 700 R4.10"}, 0x34}, | 129 | { {0x34, "ARC 700 R4.10"}, 0x34}, |
130 | { {0x35, "ARC 700 R4.11"}, 0x35}, | ||
107 | { {0x00, NULL } } | 131 | { {0x00, NULL } } |
108 | }; | 132 | }; |
109 | 133 | ||
134 | #define IS_AVAIL1(v, str) ((v) ? str : "") | ||
135 | #define IS_USED(cfg) (IS_ENABLED(cfg) ? "" : "(not used) ") | ||
136 | #define IS_AVAIL2(v, str, cfg) IS_AVAIL1(v, str), IS_AVAIL1(v, IS_USED(cfg)) | ||
137 | |||
110 | static char *arc_cpu_mumbojumbo(int cpu_id, char *buf, int len) | 138 | static char *arc_cpu_mumbojumbo(int cpu_id, char *buf, int len) |
111 | { | 139 | { |
112 | int n = 0; | ||
113 | struct cpuinfo_arc *cpu = &cpuinfo_arc700[cpu_id]; | 140 | struct cpuinfo_arc *cpu = &cpuinfo_arc700[cpu_id]; |
114 | struct bcr_identity *core = &cpu->core; | 141 | struct bcr_identity *core = &cpu->core; |
115 | const struct cpuinfo_data *tbl; | 142 | const struct cpuinfo_data *tbl; |
116 | int be = 0; | 143 | char *isa_nm; |
117 | #ifdef CONFIG_CPU_BIG_ENDIAN | 144 | int i, be, atomic; |
118 | be = 1; | 145 | int n = 0; |
119 | #endif | 146 | |
120 | FIX_PTR(cpu); | 147 | FIX_PTR(cpu); |
121 | 148 | ||
149 | { | ||
150 | isa_nm = "ARCompact"; | ||
151 | be = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN); | ||
152 | |||
153 | atomic = cpu->isa.atomic1; | ||
154 | if (!cpu->isa.ver) /* ISA BCR absent, use Kconfig info */ | ||
155 | atomic = IS_ENABLED(CONFIG_ARC_HAS_LLSC); | ||
156 | } | ||
157 | |||
122 | n += scnprintf(buf + n, len - n, | 158 | n += scnprintf(buf + n, len - n, |
123 | "\nARC IDENTITY\t: Family [%#02x]" | 159 | "\nIDENTITY\t: ARCVER [%#02x] ARCNUM [%#02x] CHIPID [%#4x]\n", |
124 | " Cpu-id [%#02x] Chip-id [%#4x]\n", | 160 | core->family, core->cpu_id, core->chip_id); |
125 | core->family, core->cpu_id, | ||
126 | core->chip_id); | ||
127 | 161 | ||
128 | for (tbl = &arc_cpu_tbl[0]; tbl->info.id != 0; tbl++) { | 162 | for (tbl = &arc_cpu_tbl[0]; tbl->info.id != 0; tbl++) { |
129 | if ((core->family >= tbl->info.id) && | 163 | if ((core->family >= tbl->info.id) && |
130 | (core->family <= tbl->up_range)) { | 164 | (core->family <= tbl->up_range)) { |
131 | n += scnprintf(buf + n, len - n, | 165 | n += scnprintf(buf + n, len - n, |
132 | "processor\t: %s %s\n", | 166 | "processor [%d]\t: %s (%s ISA) %s\n", |
133 | tbl->info.str, | 167 | cpu_id, tbl->info.str, isa_nm, |
134 | be ? "[Big Endian]" : ""); | 168 | IS_AVAIL1(be, "[Big-Endian]")); |
135 | break; | 169 | break; |
136 | } | 170 | } |
137 | } | 171 | } |
@@ -143,34 +177,35 @@ static char *arc_cpu_mumbojumbo(int cpu_id, char *buf, int len) | |||
143 | (unsigned int)(arc_get_core_freq() / 1000000), | 177 | (unsigned int)(arc_get_core_freq() / 1000000), |
144 | (unsigned int)(arc_get_core_freq() / 10000) % 100); | 178 | (unsigned int)(arc_get_core_freq() / 10000) % 100); |
145 | 179 | ||
146 | n += scnprintf(buf + n, len - n, "Timers\t\t: %s %s\n", | 180 | n += scnprintf(buf + n, len - n, "Timers\t\t: %s%s%s%s\nISA Extn\t: ", |
147 | (cpu->timers & 0x200) ? "TIMER1" : "", | 181 | IS_AVAIL1(cpu->timers.t0, "Timer0 "), |
148 | (cpu->timers & 0x100) ? "TIMER0" : ""); | 182 | IS_AVAIL1(cpu->timers.t1, "Timer1 "), |
183 | IS_AVAIL2(cpu->timers.rtsc, "64-bit RTSC ", CONFIG_ARC_HAS_RTSC)); | ||
149 | 184 | ||
150 | n += scnprintf(buf + n, len - n, "Vect Tbl Base\t: %#x\n", | 185 | n += i = scnprintf(buf + n, len - n, "%s%s", |
151 | cpu->vec_base); | 186 | IS_AVAIL2(atomic, "atomic ", CONFIG_ARC_HAS_LLSC)); |
152 | 187 | ||
153 | n += scnprintf(buf + n, len - n, "UNCACHED Base\t: %#x\n", | 188 | if (i) |
154 | cpu->uncached_base); | 189 | n += scnprintf(buf + n, len - n, "\n\t\t: "); |
155 | 190 | ||
156 | return buf; | 191 | n += scnprintf(buf + n, len - n, "%s%s%s%s%s%s%s%s\n", |
157 | } | 192 | IS_AVAIL1(cpu->extn_mpy.ver, "mpy "), |
193 | IS_AVAIL1(cpu->extn.norm, "norm "), | ||
194 | IS_AVAIL1(cpu->extn.barrel, "barrel-shift "), | ||
195 | IS_AVAIL1(cpu->extn.swap, "swap "), | ||
196 | IS_AVAIL1(cpu->extn.minmax, "minmax "), | ||
197 | IS_AVAIL1(cpu->extn.crc, "crc "), | ||
198 | IS_AVAIL2(1, "swape", CONFIG_ARC_HAS_SWAPE)); | ||
158 | 199 | ||
159 | static const struct id_to_str mul_type_nm[] = { | 200 | if (cpu->bpu.ver) |
160 | { 0x0, "N/A"}, | 201 | n += scnprintf(buf + n, len - n, |
161 | { 0x1, "32x32 (spl Result Reg)" }, | 202 | "BPU\t\t: %s%s match, cache:%d, Predict Table:%d\n", |
162 | { 0x2, "32x32 (ANY Result Reg)" } | 203 | IS_AVAIL1(cpu->bpu.full, "full"), |
163 | }; | 204 | IS_AVAIL1(!cpu->bpu.full, "partial"), |
205 | cpu->bpu.num_cache, cpu->bpu.num_pred); | ||
164 | 206 | ||
165 | static const struct id_to_str mac_mul_nm[] = { | 207 | return buf; |
166 | {0x0, "N/A"}, | 208 | } |
167 | {0x1, "N/A"}, | ||
168 | {0x2, "Dual 16 x 16"}, | ||
169 | {0x3, "N/A"}, | ||
170 | {0x4, "32x16"}, | ||
171 | {0x5, "N/A"}, | ||
172 | {0x6, "Dual 16x16 and 32x16"} | ||
173 | }; | ||
174 | 209 | ||
175 | static char *arc_extn_mumbojumbo(int cpu_id, char *buf, int len) | 210 | static char *arc_extn_mumbojumbo(int cpu_id, char *buf, int len) |
176 | { | 211 | { |
@@ -178,67 +213,46 @@ static char *arc_extn_mumbojumbo(int cpu_id, char *buf, int len) | |||
178 | struct cpuinfo_arc *cpu = &cpuinfo_arc700[cpu_id]; | 213 | struct cpuinfo_arc *cpu = &cpuinfo_arc700[cpu_id]; |
179 | 214 | ||
180 | FIX_PTR(cpu); | 215 | FIX_PTR(cpu); |
181 | #define IS_AVAIL1(var, str) ((var) ? str : "") | ||
182 | #define IS_AVAIL2(var, str) ((var == 0x2) ? str : "") | ||
183 | #define IS_USED(cfg) (IS_ENABLED(cfg) ? "(in-use)" : "(not used)") | ||
184 | 216 | ||
185 | n += scnprintf(buf + n, len - n, | 217 | n += scnprintf(buf + n, len - n, |
186 | "Extn [700-Base]\t: %s %s %s %s %s %s\n", | 218 | "Vector Table\t: %#x\nUncached Base\t: %#x\n", |
187 | IS_AVAIL2(cpu->extn.norm, "norm,"), | 219 | cpu->vec_base, cpu->uncached_base); |
188 | IS_AVAIL2(cpu->extn.barrel, "barrel-shift,"), | 220 | |
189 | IS_AVAIL1(cpu->extn.swap, "swap,"), | 221 | if (cpu->extn.fpu_sp || cpu->extn.fpu_dp) |
190 | IS_AVAIL2(cpu->extn.minmax, "minmax,"), | 222 | n += scnprintf(buf + n, len - n, "FPU\t\t: %s%s\n", |
191 | IS_AVAIL1(cpu->extn.crc, "crc,"), | 223 | IS_AVAIL1(cpu->extn.fpu_sp, "SP "), |
192 | IS_AVAIL2(cpu->extn.ext_arith, "ext-arith")); | 224 | IS_AVAIL1(cpu->extn.fpu_dp, "DP ")); |
193 | 225 | ||
194 | n += scnprintf(buf + n, len - n, "Extn [700-MPY]\t: %s", | 226 | if (cpu->extn.debug) |
195 | mul_type_nm[cpu->extn.mul].str); | 227 | n += scnprintf(buf + n, len - n, "DEBUG\t\t: %s%s%s\n", |
196 | 228 | IS_AVAIL1(cpu->extn.ap, "ActionPoint "), | |
197 | n += scnprintf(buf + n, len - n, " MAC MPY: %s\n", | 229 | IS_AVAIL1(cpu->extn.smart, "smaRT "), |
198 | mac_mul_nm[cpu->extn_mac_mul.type].str); | 230 | IS_AVAIL1(cpu->extn.rtt, "RTT ")); |
199 | 231 | ||
200 | if (cpu->core.family == 0x34) { | 232 | if (cpu->dccm.sz || cpu->iccm.sz) |
201 | n += scnprintf(buf + n, len - n, | 233 | n += scnprintf(buf + n, len - n, "Extn [CCM]\t: DCCM @ %x, %d KB / ICCM: @ %x, %d KB\n", |
202 | "Extn [700-4.10]\t: LLOCK/SCOND %s, SWAPE %s, RTSC %s\n", | 234 | cpu->dccm.base_addr, TO_KB(cpu->dccm.sz), |
203 | IS_USED(CONFIG_ARC_HAS_LLSC), | ||
204 | IS_USED(CONFIG_ARC_HAS_SWAPE), | ||
205 | IS_USED(CONFIG_ARC_HAS_RTSC)); | ||
206 | } | ||
207 | |||
208 | n += scnprintf(buf + n, len - n, "Extn [CCM]\t: %s", | ||
209 | !(cpu->dccm.sz || cpu->iccm.sz) ? "N/A" : ""); | ||
210 | |||
211 | if (cpu->dccm.sz) | ||
212 | n += scnprintf(buf + n, len - n, "DCCM: @ %x, %d KB ", | ||
213 | cpu->dccm.base_addr, TO_KB(cpu->dccm.sz)); | ||
214 | |||
215 | if (cpu->iccm.sz) | ||
216 | n += scnprintf(buf + n, len - n, "ICCM: @ %x, %d KB", | ||
217 | cpu->iccm.base_addr, TO_KB(cpu->iccm.sz)); | 235 | cpu->iccm.base_addr, TO_KB(cpu->iccm.sz)); |
218 | 236 | ||
219 | n += scnprintf(buf + n, len - n, "\nExtn [FPU]\t: %s", | ||
220 | !(cpu->fp.ver || cpu->dpfp.ver) ? "N/A" : ""); | ||
221 | |||
222 | if (cpu->fp.ver) | ||
223 | n += scnprintf(buf + n, len - n, "SP [v%d] %s", | ||
224 | cpu->fp.ver, cpu->fp.fast ? "(fast)" : ""); | ||
225 | |||
226 | if (cpu->dpfp.ver) | ||
227 | n += scnprintf(buf + n, len - n, "DP [v%d] %s", | ||
228 | cpu->dpfp.ver, cpu->dpfp.fast ? "(fast)" : ""); | ||
229 | |||
230 | n += scnprintf(buf + n, len - n, "\n"); | ||
231 | |||
232 | n += scnprintf(buf + n, len - n, | 237 | n += scnprintf(buf + n, len - n, |
233 | "OS ABI [v3]\t: no-legacy-syscalls\n"); | 238 | "OS ABI [v3]\t: no-legacy-syscalls\n"); |
234 | 239 | ||
235 | return buf; | 240 | return buf; |
236 | } | 241 | } |
237 | 242 | ||
238 | static void arc_chk_ccms(void) | 243 | static void arc_chk_core_config(void) |
239 | { | 244 | { |
240 | #if defined(CONFIG_ARC_HAS_DCCM) || defined(CONFIG_ARC_HAS_ICCM) | ||
241 | struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()]; | 245 | struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()]; |
246 | int fpu_enabled; | ||
247 | |||
248 | if (!cpu->timers.t0) | ||
249 | panic("Timer0 is not present!\n"); | ||
250 | |||
251 | if (!cpu->timers.t1) | ||
252 | panic("Timer1 is not present!\n"); | ||
253 | |||
254 | if (IS_ENABLED(CONFIG_ARC_HAS_RTSC) && !cpu->timers.rtsc) | ||
255 | panic("RTSC is not present\n"); | ||
242 | 256 | ||
243 | #ifdef CONFIG_ARC_HAS_DCCM | 257 | #ifdef CONFIG_ARC_HAS_DCCM |
244 | /* | 258 | /* |
@@ -256,33 +270,20 @@ static void arc_chk_ccms(void) | |||
256 | if (CONFIG_ARC_ICCM_SZ != cpu->iccm.sz) | 270 | if (CONFIG_ARC_ICCM_SZ != cpu->iccm.sz) |
257 | panic("Linux built with incorrect ICCM Size\n"); | 271 | panic("Linux built with incorrect ICCM Size\n"); |
258 | #endif | 272 | #endif |
259 | #endif | ||
260 | } | ||
261 | 273 | ||
262 | /* | 274 | /* |
263 | * Ensure that FP hardware and kernel config match | 275 | * FP hardware/software config sanity |
264 | * -If hardware contains DPFP, kernel needs to save/restore FPU state | 276 | * -If hardware contains DPFP, kernel needs to save/restore FPU state |
265 | * across context switches | 277 | * -If not, it will crash trying to save/restore the non-existant regs |
266 | * -If hardware lacks DPFP, but kernel configured to save FPU state then | 278 | * |
267 | * kernel trying to access non-existant DPFP regs will crash | 279 | * (only DPDP checked since SP has no arch visible regs) |
268 | * | 280 | */ |
269 | * We only check for Dbl precision Floating Point, because only DPFP | 281 | fpu_enabled = IS_ENABLED(CONFIG_ARC_FPU_SAVE_RESTORE); |
270 | * hardware has dedicated regs which need to be saved/restored on ctx-sw | ||
271 | * (Single Precision uses core regs), thus kernel is kind of oblivious to it | ||
272 | */ | ||
273 | static void arc_chk_fpu(void) | ||
274 | { | ||
275 | struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()]; | ||
276 | 282 | ||
277 | if (cpu->dpfp.ver) { | 283 | if (cpu->extn.fpu_dp && !fpu_enabled) |
278 | #ifndef CONFIG_ARC_FPU_SAVE_RESTORE | 284 | pr_warn("CONFIG_ARC_FPU_SAVE_RESTORE needed for working apps\n"); |
279 | pr_warn("DPFP support broken in this kernel...\n"); | 285 | else if (!cpu->extn.fpu_dp && fpu_enabled) |
280 | #endif | 286 | panic("FPU non-existent, disable CONFIG_ARC_FPU_SAVE_RESTORE\n"); |
281 | } else { | ||
282 | #ifdef CONFIG_ARC_FPU_SAVE_RESTORE | ||
283 | panic("H/w lacks DPFP support, apps won't work\n"); | ||
284 | #endif | ||
285 | } | ||
286 | } | 287 | } |
287 | 288 | ||
288 | /* | 289 | /* |
@@ -303,15 +304,11 @@ void setup_processor(void) | |||
303 | 304 | ||
304 | arc_mmu_init(); | 305 | arc_mmu_init(); |
305 | arc_cache_init(); | 306 | arc_cache_init(); |
306 | arc_chk_ccms(); | ||
307 | 307 | ||
308 | printk(arc_extn_mumbojumbo(cpu_id, str, sizeof(str))); | 308 | printk(arc_extn_mumbojumbo(cpu_id, str, sizeof(str))); |
309 | |||
310 | #ifdef CONFIG_SMP | ||
311 | printk(arc_platform_smp_cpuinfo()); | 309 | printk(arc_platform_smp_cpuinfo()); |
312 | #endif | ||
313 | 310 | ||
314 | arc_chk_fpu(); | 311 | arc_chk_core_config(); |
315 | } | 312 | } |
316 | 313 | ||
317 | static inline int is_kernel(unsigned long addr) | 314 | static inline int is_kernel(unsigned long addr) |
@@ -360,11 +357,7 @@ void __init setup_arch(char **cmdline_p) | |||
360 | machine_desc->init_early(); | 357 | machine_desc->init_early(); |
361 | 358 | ||
362 | setup_processor(); | 359 | setup_processor(); |
363 | |||
364 | #ifdef CONFIG_SMP | ||
365 | smp_init_cpus(); | 360 | smp_init_cpus(); |
366 | #endif | ||
367 | |||
368 | setup_arch_memory(); | 361 | setup_arch_memory(); |
369 | 362 | ||
370 | /* copy flat DT out of .init and then unflatten it */ | 363 | /* copy flat DT out of .init and then unflatten it */ |
@@ -385,7 +378,13 @@ void __init setup_arch(char **cmdline_p) | |||
385 | 378 | ||
386 | static int __init customize_machine(void) | 379 | static int __init customize_machine(void) |
387 | { | 380 | { |
388 | /* Add platform devices */ | 381 | of_clk_init(NULL); |
382 | /* | ||
383 | * Traverses flattened DeviceTree - registering platform devices | ||
384 | * (if any) complete with their resources | ||
385 | */ | ||
386 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
387 | |||
389 | if (machine_desc->init_machine) | 388 | if (machine_desc->init_machine) |
390 | machine_desc->init_machine(); | 389 | machine_desc->init_machine(); |
391 | 390 | ||
@@ -419,19 +418,14 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
419 | 418 | ||
420 | seq_printf(m, arc_cpu_mumbojumbo(cpu_id, str, PAGE_SIZE)); | 419 | seq_printf(m, arc_cpu_mumbojumbo(cpu_id, str, PAGE_SIZE)); |
421 | 420 | ||
422 | seq_printf(m, "Bogo MIPS : \t%lu.%02lu\n", | 421 | seq_printf(m, "Bogo MIPS\t: %lu.%02lu\n", |
423 | loops_per_jiffy / (500000 / HZ), | 422 | loops_per_jiffy / (500000 / HZ), |
424 | (loops_per_jiffy / (5000 / HZ)) % 100); | 423 | (loops_per_jiffy / (5000 / HZ)) % 100); |
425 | 424 | ||
426 | seq_printf(m, arc_mmu_mumbojumbo(cpu_id, str, PAGE_SIZE)); | 425 | seq_printf(m, arc_mmu_mumbojumbo(cpu_id, str, PAGE_SIZE)); |
427 | |||
428 | seq_printf(m, arc_cache_mumbojumbo(cpu_id, str, PAGE_SIZE)); | 426 | seq_printf(m, arc_cache_mumbojumbo(cpu_id, str, PAGE_SIZE)); |
429 | |||
430 | seq_printf(m, arc_extn_mumbojumbo(cpu_id, str, PAGE_SIZE)); | 427 | seq_printf(m, arc_extn_mumbojumbo(cpu_id, str, PAGE_SIZE)); |
431 | |||
432 | #ifdef CONFIG_SMP | ||
433 | seq_printf(m, arc_platform_smp_cpuinfo()); | 428 | seq_printf(m, arc_platform_smp_cpuinfo()); |
434 | #endif | ||
435 | 429 | ||
436 | free_page((unsigned long)str); | 430 | free_page((unsigned long)str); |
437 | done: | 431 | done: |
diff --git a/arch/arc/kernel/smp.c b/arch/arc/kernel/smp.c index dcd317c47d09..d01df0c517a2 100644 --- a/arch/arc/kernel/smp.c +++ b/arch/arc/kernel/smp.c | |||
@@ -101,7 +101,7 @@ void __weak arc_platform_smp_wait_to_boot(int cpu) | |||
101 | 101 | ||
102 | const char *arc_platform_smp_cpuinfo(void) | 102 | const char *arc_platform_smp_cpuinfo(void) |
103 | { | 103 | { |
104 | return plat_smp_ops.info; | 104 | return plat_smp_ops.info ? : ""; |
105 | } | 105 | } |
106 | 106 | ||
107 | /* | 107 | /* |
diff --git a/arch/arc/mm/cache_arc700.c b/arch/arc/mm/cache_arc700.c index 9e1142729fd1..8c3a3e02ba92 100644 --- a/arch/arc/mm/cache_arc700.c +++ b/arch/arc/mm/cache_arc700.c | |||
@@ -530,16 +530,9 @@ EXPORT_SYMBOL(dma_cache_wback); | |||
530 | */ | 530 | */ |
531 | void flush_icache_range(unsigned long kstart, unsigned long kend) | 531 | void flush_icache_range(unsigned long kstart, unsigned long kend) |
532 | { | 532 | { |
533 | unsigned int tot_sz, off, sz; | 533 | unsigned int tot_sz; |
534 | unsigned long phy, pfn; | ||
535 | 534 | ||
536 | /* printk("Kernel Cache Cohenercy: %lx to %lx\n",kstart, kend); */ | 535 | WARN(kstart < TASK_SIZE, "%s() can't handle user vaddr", __func__); |
537 | |||
538 | /* This is not the right API for user virtual address */ | ||
539 | if (kstart < TASK_SIZE) { | ||
540 | BUG_ON("Flush icache range for user virtual addr space"); | ||
541 | return; | ||
542 | } | ||
543 | 536 | ||
544 | /* Shortcut for bigger flush ranges. | 537 | /* Shortcut for bigger flush ranges. |
545 | * Here we don't care if this was kernel virtual or phy addr | 538 | * Here we don't care if this was kernel virtual or phy addr |
@@ -572,6 +565,9 @@ void flush_icache_range(unsigned long kstart, unsigned long kend) | |||
572 | * straddles across 2 virtual pages and hence need for loop | 565 | * straddles across 2 virtual pages and hence need for loop |
573 | */ | 566 | */ |
574 | while (tot_sz > 0) { | 567 | while (tot_sz > 0) { |
568 | unsigned int off, sz; | ||
569 | unsigned long phy, pfn; | ||
570 | |||
575 | off = kstart % PAGE_SIZE; | 571 | off = kstart % PAGE_SIZE; |
576 | pfn = vmalloc_to_pfn((void *)kstart); | 572 | pfn = vmalloc_to_pfn((void *)kstart); |
577 | phy = (pfn << PAGE_SHIFT) + off; | 573 | phy = (pfn << PAGE_SHIFT) + off; |
diff --git a/arch/arc/mm/tlb.c b/arch/arc/mm/tlb.c index e1acf0ce5647..7f47d2a56f44 100644 --- a/arch/arc/mm/tlb.c +++ b/arch/arc/mm/tlb.c | |||
@@ -609,14 +609,12 @@ char *arc_mmu_mumbojumbo(int cpu_id, char *buf, int len) | |||
609 | int n = 0; | 609 | int n = 0; |
610 | struct cpuinfo_arc_mmu *p_mmu = &cpuinfo_arc700[cpu_id].mmu; | 610 | struct cpuinfo_arc_mmu *p_mmu = &cpuinfo_arc700[cpu_id].mmu; |
611 | 611 | ||
612 | n += scnprintf(buf + n, len - n, "ARC700 MMU [v%x]\t: %dk PAGE, ", | ||
613 | p_mmu->ver, TO_KB(p_mmu->pg_sz)); | ||
614 | |||
615 | n += scnprintf(buf + n, len - n, | 612 | n += scnprintf(buf + n, len - n, |
616 | "J-TLB %d (%dx%d), uDTLB %d, uITLB %d, %s\n", | 613 | "MMU [v%x]\t: %dk PAGE, JTLB %d (%dx%d), uDTLB %d, uITLB %d %s\n", |
614 | p_mmu->ver, TO_KB(p_mmu->pg_sz), | ||
617 | p_mmu->num_tlb, p_mmu->sets, p_mmu->ways, | 615 | p_mmu->num_tlb, p_mmu->sets, p_mmu->ways, |
618 | p_mmu->u_dtlb, p_mmu->u_itlb, | 616 | p_mmu->u_dtlb, p_mmu->u_itlb, |
619 | IS_ENABLED(CONFIG_ARC_MMU_SASID) ? "SASID" : ""); | 617 | IS_ENABLED(CONFIG_ARC_MMU_SASID) ? ",SASID" : ""); |
620 | 618 | ||
621 | return buf; | 619 | return buf; |
622 | } | 620 | } |
diff --git a/arch/arc/plat-arcfpga/Kconfig b/arch/arc/plat-arcfpga/Kconfig index b9f34cf55acf..217593a70751 100644 --- a/arch/arc/plat-arcfpga/Kconfig +++ b/arch/arc/plat-arcfpga/Kconfig | |||
@@ -8,7 +8,7 @@ | |||
8 | 8 | ||
9 | menuconfig ARC_PLAT_FPGA_LEGACY | 9 | menuconfig ARC_PLAT_FPGA_LEGACY |
10 | bool "\"Legacy\" ARC FPGA dev Boards" | 10 | bool "\"Legacy\" ARC FPGA dev Boards" |
11 | select ISS_SMP_EXTN if SMP | 11 | select ARC_HAS_COH_CACHES if SMP |
12 | help | 12 | help |
13 | Support for ARC development boards, provided by Synopsys. | 13 | Support for ARC development boards, provided by Synopsys. |
14 | These are based on FPGA or ISS. e.g. | 14 | These are based on FPGA or ISS. e.g. |
@@ -18,17 +18,6 @@ menuconfig ARC_PLAT_FPGA_LEGACY | |||
18 | 18 | ||
19 | if ARC_PLAT_FPGA_LEGACY | 19 | if ARC_PLAT_FPGA_LEGACY |
20 | 20 | ||
21 | config ARC_BOARD_ANGEL4 | ||
22 | bool "ARC Angel4" | ||
23 | default y | ||
24 | help | ||
25 | ARC Angel4 FPGA Ref Platform (Xilinx Virtex Based) | ||
26 | |||
27 | config ARC_BOARD_ML509 | ||
28 | bool "ML509" | ||
29 | help | ||
30 | ARC ML509 FPGA Ref Platform (Xilinx Virtex-5 Based) | ||
31 | |||
32 | config ISS_SMP_EXTN | 21 | config ISS_SMP_EXTN |
33 | bool "ARC SMP Extensions (ISS Models only)" | 22 | bool "ARC SMP Extensions (ISS Models only)" |
34 | default n | 23 | default n |
diff --git a/arch/arc/plat-arcfpga/include/plat/irq.h b/arch/arc/plat-arcfpga/include/plat/irq.h deleted file mode 100644 index 2c9dea690ac4..000000000000 --- a/arch/arc/plat-arcfpga/include/plat/irq.h +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | * vineetg: Feb 2009 | ||
9 | * -For AA4 board, IRQ assignments to peripherals | ||
10 | */ | ||
11 | |||
12 | #ifndef __PLAT_IRQ_H | ||
13 | #define __PLAT_IRQ_H | ||
14 | |||
15 | #define UART0_IRQ 5 | ||
16 | #define UART1_IRQ 10 | ||
17 | #define UART2_IRQ 11 | ||
18 | |||
19 | #define IDE_IRQ 13 | ||
20 | #define PCI_IRQ 14 | ||
21 | #define PS2_IRQ 15 | ||
22 | |||
23 | #ifdef CONFIG_SMP | ||
24 | #define IDU_INTERRUPT_0 16 | ||
25 | #endif | ||
26 | |||
27 | #endif | ||
diff --git a/arch/arc/plat-arcfpga/include/plat/memmap.h b/arch/arc/plat-arcfpga/include/plat/memmap.h deleted file mode 100644 index 5c78e6135a1f..000000000000 --- a/arch/arc/plat-arcfpga/include/plat/memmap.h +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | * vineetg: Feb 2009 | ||
9 | * -For AA4 board, System Memory Map for Peripherals etc | ||
10 | */ | ||
11 | |||
12 | #ifndef __PLAT_MEMMAP_H | ||
13 | #define __PLAT_MEMMAP_H | ||
14 | |||
15 | #define UART0_BASE 0xC0FC1000 | ||
16 | #define UART1_BASE 0xC0FC1100 | ||
17 | |||
18 | #define IDE_CONTROLLER_BASE 0xC0FC9000 | ||
19 | |||
20 | #define AHB_PCI_HOST_BRG_BASE 0xC0FD0000 | ||
21 | |||
22 | #define PGU_BASEADDR 0xC0FC8000 | ||
23 | #define VLCK_ADDR 0xC0FCF028 | ||
24 | |||
25 | #define BVCI_LAT_UNIT_BASE 0xC0FED000 | ||
26 | |||
27 | #define PS2_BASE_ADDR 0xC0FCC000 | ||
28 | |||
29 | #endif | ||
diff --git a/arch/arc/plat-arcfpga/platform.c b/arch/arc/plat-arcfpga/platform.c index 1038949a99a1..afc88254acc1 100644 --- a/arch/arc/plat-arcfpga/platform.c +++ b/arch/arc/plat-arcfpga/platform.c | |||
@@ -8,37 +8,9 @@ | |||
8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/types.h> | ||
12 | #include <linux/init.h> | 11 | #include <linux/init.h> |
13 | #include <linux/device.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/console.h> | ||
17 | #include <linux/of_platform.h> | ||
18 | #include <asm/setup.h> | ||
19 | #include <asm/clk.h> | ||
20 | #include <asm/mach_desc.h> | 12 | #include <asm/mach_desc.h> |
21 | #include <plat/memmap.h> | ||
22 | #include <plat/smp.h> | 13 | #include <plat/smp.h> |
23 | #include <plat/irq.h> | ||
24 | |||
25 | static void __init plat_fpga_early_init(void) | ||
26 | { | ||
27 | pr_info("[plat-arcfpga]: registering early dev resources\n"); | ||
28 | |||
29 | #ifdef CONFIG_ISS_SMP_EXTN | ||
30 | iss_model_init_early_smp(); | ||
31 | #endif | ||
32 | } | ||
33 | |||
34 | static void __init plat_fpga_populate_dev(void) | ||
35 | { | ||
36 | /* | ||
37 | * Traverses flattened DeviceTree - registering platform devices | ||
38 | * (if any) complete with their resources | ||
39 | */ | ||
40 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
41 | } | ||
42 | 14 | ||
43 | /*----------------------- Machine Descriptions ------------------------------ | 15 | /*----------------------- Machine Descriptions ------------------------------ |
44 | * | 16 | * |
@@ -48,41 +20,26 @@ static void __init plat_fpga_populate_dev(void) | |||
48 | * callback set, by matching the DT compatible name. | 20 | * callback set, by matching the DT compatible name. |
49 | */ | 21 | */ |
50 | 22 | ||
51 | static const char *aa4_compat[] __initconst = { | 23 | static const char *legacy_fpga_compat[] __initconst = { |
52 | "snps,arc-angel4", | 24 | "snps,arc-angel4", |
53 | NULL, | ||
54 | }; | ||
55 | |||
56 | MACHINE_START(ANGEL4, "angel4") | ||
57 | .dt_compat = aa4_compat, | ||
58 | .init_early = plat_fpga_early_init, | ||
59 | .init_machine = plat_fpga_populate_dev, | ||
60 | #ifdef CONFIG_ISS_SMP_EXTN | ||
61 | .init_smp = iss_model_init_smp, | ||
62 | #endif | ||
63 | MACHINE_END | ||
64 | |||
65 | static const char *ml509_compat[] __initconst = { | ||
66 | "snps,arc-ml509", | 25 | "snps,arc-ml509", |
67 | NULL, | 26 | NULL, |
68 | }; | 27 | }; |
69 | 28 | ||
70 | MACHINE_START(ML509, "ml509") | 29 | MACHINE_START(LEGACY_FPGA, "legacy_fpga") |
71 | .dt_compat = ml509_compat, | 30 | .dt_compat = legacy_fpga_compat, |
72 | .init_early = plat_fpga_early_init, | 31 | #ifdef CONFIG_ISS_SMP_EXTN |
73 | .init_machine = plat_fpga_populate_dev, | 32 | .init_early = iss_model_init_early_smp, |
74 | #ifdef CONFIG_SMP | ||
75 | .init_smp = iss_model_init_smp, | 33 | .init_smp = iss_model_init_smp, |
76 | #endif | 34 | #endif |
77 | MACHINE_END | 35 | MACHINE_END |
78 | 36 | ||
79 | static const char *nsimosci_compat[] __initconst = { | 37 | static const char *simulation_compat[] __initconst = { |
38 | "snps,nsim", | ||
80 | "snps,nsimosci", | 39 | "snps,nsimosci", |
81 | NULL, | 40 | NULL, |
82 | }; | 41 | }; |
83 | 42 | ||
84 | MACHINE_START(NSIMOSCI, "nsimosci") | 43 | MACHINE_START(SIMULATION, "simulation") |
85 | .dt_compat = nsimosci_compat, | 44 | .dt_compat = simulation_compat, |
86 | .init_early = NULL, | ||
87 | .init_machine = plat_fpga_populate_dev, | ||
88 | MACHINE_END | 45 | MACHINE_END |
diff --git a/arch/arc/plat-arcfpga/smp.c b/arch/arc/plat-arcfpga/smp.c index 92bad9122077..64797ba3bbe3 100644 --- a/arch/arc/plat-arcfpga/smp.c +++ b/arch/arc/plat-arcfpga/smp.c | |||
@@ -13,9 +13,10 @@ | |||
13 | 13 | ||
14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
15 | #include <linux/irq.h> | 15 | #include <linux/irq.h> |
16 | #include <plat/irq.h> | ||
17 | #include <plat/smp.h> | 16 | #include <plat/smp.h> |
18 | 17 | ||
18 | #define IDU_INTERRUPT_0 16 | ||
19 | |||
19 | static char smp_cpuinfo_buf[128]; | 20 | static char smp_cpuinfo_buf[128]; |
20 | 21 | ||
21 | /* | 22 | /* |
diff --git a/arch/arc/plat-tb10x/Kconfig b/arch/arc/plat-tb10x/Kconfig index 6994c188dc88..d14b3d3c5dfd 100644 --- a/arch/arc/plat-tb10x/Kconfig +++ b/arch/arc/plat-tb10x/Kconfig | |||
@@ -18,7 +18,6 @@ | |||
18 | 18 | ||
19 | menuconfig ARC_PLAT_TB10X | 19 | menuconfig ARC_PLAT_TB10X |
20 | bool "Abilis TB10x" | 20 | bool "Abilis TB10x" |
21 | select COMMON_CLK | ||
22 | select PINCTRL | 21 | select PINCTRL |
23 | select PINCTRL_TB10X | 22 | select PINCTRL_TB10X |
24 | select PINMUX | 23 | select PINMUX |
diff --git a/arch/arc/plat-tb10x/tb10x.c b/arch/arc/plat-tb10x/tb10x.c index 06cb30929460..da0ac0960a4b 100644 --- a/arch/arc/plat-tb10x/tb10x.c +++ b/arch/arc/plat-tb10x/tb10x.c | |||
@@ -19,21 +19,9 @@ | |||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
20 | */ | 20 | */ |
21 | 21 | ||
22 | |||
23 | #include <linux/init.h> | 22 | #include <linux/init.h> |
24 | #include <linux/of_platform.h> | ||
25 | #include <linux/clk-provider.h> | ||
26 | #include <linux/pinctrl/consumer.h> | ||
27 | |||
28 | #include <asm/mach_desc.h> | 23 | #include <asm/mach_desc.h> |
29 | 24 | ||
30 | |||
31 | static void __init tb10x_platform_init(void) | ||
32 | { | ||
33 | of_clk_init(NULL); | ||
34 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
35 | } | ||
36 | |||
37 | static const char *tb10x_compat[] __initdata = { | 25 | static const char *tb10x_compat[] __initdata = { |
38 | "abilis,arc-tb10x", | 26 | "abilis,arc-tb10x", |
39 | NULL, | 27 | NULL, |
@@ -41,5 +29,4 @@ static const char *tb10x_compat[] __initdata = { | |||
41 | 29 | ||
42 | MACHINE_START(TB10x, "tb10x") | 30 | MACHINE_START(TB10x, "tb10x") |
43 | .dt_compat = tb10x_compat, | 31 | .dt_compat = tb10x_compat, |
44 | .init_machine = tb10x_platform_init, | ||
45 | MACHINE_END | 32 | MACHINE_END |