aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/Kconfig8
-rw-r--r--arch/arm/configs/omap_4430sdp_defconfig128
-rw-r--r--arch/arm/mach-omap2/Makefile4
-rw-r--r--arch/arm/mach-omap2/omap-headsmp.S46
-rw-r--r--arch/arm/mach-omap2/omap-smp.c178
-rw-r--r--arch/arm/mach-omap2/timer-gp.c4
-rw-r--r--arch/arm/mach-omap2/timer-mpu.c34
-rw-r--r--arch/arm/plat-omap/include/mach/entry-macro.S28
-rw-r--r--arch/arm/plat-omap/include/mach/irqs.h2
-rw-r--r--arch/arm/plat-omap/include/mach/smp.h51
10 files changed, 445 insertions, 38 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 646a5d5eb8c..8381bd79314 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -846,10 +846,10 @@ source "kernel/time/Kconfig"
846 846
847config SMP 847config SMP
848 bool "Symmetric Multi-Processing (EXPERIMENTAL)" 848 bool "Symmetric Multi-Processing (EXPERIMENTAL)"
849 depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP) 849 depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP ||ARCH_OMAP4)
850 depends on GENERIC_CLOCKEVENTS 850 depends on GENERIC_CLOCKEVENTS
851 select USE_GENERIC_SMP_HELPERS 851 select USE_GENERIC_SMP_HELPERS
852 select HAVE_ARM_SCU if ARCH_REALVIEW 852 select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4)
853 help 853 help
854 This enables support for systems with more than one CPU. If you have 854 This enables support for systems with more than one CPU. If you have
855 a system with only one CPU, like most personal computers, say N. If 855 a system with only one CPU, like most personal computers, say N. If
@@ -917,9 +917,9 @@ config HOTPLUG_CPU
917 917
918config LOCAL_TIMERS 918config LOCAL_TIMERS
919 bool "Use local timer interrupts" 919 bool "Use local timer interrupts"
920 depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || REALVIEW_EB_A9MP) 920 depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || REALVIEW_EB_A9MP || ARCH_OMAP4)
921 default y 921 default y
922 select HAVE_ARM_TWD if ARCH_REALVIEW 922 select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_OMAP4)
923 help 923 help
924 Enable support for local timers on SMP platforms, rather then the 924 Enable support for local timers on SMP platforms, rather then the
925 legacy IPI broadcast method. Local timers allows the system 925 legacy IPI broadcast method. Local timers allows the system
diff --git a/arch/arm/configs/omap_4430sdp_defconfig b/arch/arm/configs/omap_4430sdp_defconfig
index 67a3a770cc2..23e43ea4efa 100644
--- a/arch/arm/configs/omap_4430sdp_defconfig
+++ b/arch/arm/configs/omap_4430sdp_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.29 3# Linux kernel version: 2.6.30-rc7
4# Fri April 19 19:58:24 20089 4# Tue Jun 9 12:36:23 2009
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y 7CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -9,17 +9,13 @@ CONFIG_GENERIC_GPIO=y
9CONFIG_GENERIC_TIME=y 9CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_CLOCKEVENTS=y 10CONFIG_GENERIC_CLOCKEVENTS=y
11CONFIG_MMU=y 11CONFIG_MMU=y
12# CONFIG_NO_IOPORT is not set
13CONFIG_GENERIC_HARDIRQS=y 12CONFIG_GENERIC_HARDIRQS=y
14CONFIG_STACKTRACE_SUPPORT=y 13CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_HAVE_LATENCYTOP_SUPPORT=y
16CONFIG_LOCKDEP_SUPPORT=y 14CONFIG_LOCKDEP_SUPPORT=y
17CONFIG_TRACE_IRQFLAGS_SUPPORT=y 15CONFIG_TRACE_IRQFLAGS_SUPPORT=y
18CONFIG_HARDIRQS_SW_RESEND=y 16CONFIG_HARDIRQS_SW_RESEND=y
19CONFIG_GENERIC_IRQ_PROBE=y 17CONFIG_GENERIC_IRQ_PROBE=y
20CONFIG_RWSEM_GENERIC_SPINLOCK=y 18CONFIG_RWSEM_GENERIC_SPINLOCK=y
21# CONFIG_ARCH_HAS_ILOG2_U32 is not set
22# CONFIG_ARCH_HAS_ILOG2_U64 is not set
23CONFIG_GENERIC_HWEIGHT=y 19CONFIG_GENERIC_HWEIGHT=y
24CONFIG_GENERIC_CALIBRATE_DELAY=y 20CONFIG_GENERIC_CALIBRATE_DELAY=y
25CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 21CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
@@ -30,7 +26,7 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
30# General setup 26# General setup
31# 27#
32CONFIG_EXPERIMENTAL=y 28CONFIG_EXPERIMENTAL=y
33CONFIG_BROKEN_ON_SMP=y 29CONFIG_LOCK_KERNEL=y
34CONFIG_INIT_ENV_ARG_LIMIT=32 30CONFIG_INIT_ENV_ARG_LIMIT=32
35CONFIG_LOCALVERSION="" 31CONFIG_LOCALVERSION=""
36CONFIG_LOCALVERSION_AUTO=y 32CONFIG_LOCALVERSION_AUTO=y
@@ -62,6 +58,9 @@ CONFIG_SYSFS_DEPRECATED_V2=y
62# CONFIG_NAMESPACES is not set 58# CONFIG_NAMESPACES is not set
63CONFIG_BLK_DEV_INITRD=y 59CONFIG_BLK_DEV_INITRD=y
64CONFIG_INITRAMFS_SOURCE="" 60CONFIG_INITRAMFS_SOURCE=""
61CONFIG_RD_GZIP=y
62# CONFIG_RD_BZIP2 is not set
63# CONFIG_RD_LZMA is not set
65CONFIG_CC_OPTIMIZE_FOR_SIZE=y 64CONFIG_CC_OPTIMIZE_FOR_SIZE=y
66CONFIG_SYSCTL=y 65CONFIG_SYSCTL=y
67CONFIG_ANON_INODES=y 66CONFIG_ANON_INODES=y
@@ -71,6 +70,7 @@ CONFIG_UID16=y
71CONFIG_KALLSYMS=y 70CONFIG_KALLSYMS=y
72# CONFIG_KALLSYMS_ALL is not set 71# CONFIG_KALLSYMS_ALL is not set
73# CONFIG_KALLSYMS_EXTRA_PASS is not set 72# CONFIG_KALLSYMS_EXTRA_PASS is not set
73# CONFIG_STRIP_ASM_SYMS is not set
74CONFIG_HOTPLUG=y 74CONFIG_HOTPLUG=y
75CONFIG_PRINTK=y 75CONFIG_PRINTK=y
76CONFIG_BUG=y 76CONFIG_BUG=y
@@ -84,16 +84,20 @@ CONFIG_EVENTFD=y
84CONFIG_SHMEM=y 84CONFIG_SHMEM=y
85CONFIG_AIO=y 85CONFIG_AIO=y
86CONFIG_VM_EVENT_COUNTERS=y 86CONFIG_VM_EVENT_COUNTERS=y
87CONFIG_SLUB_DEBUG=y
87CONFIG_COMPAT_BRK=y 88CONFIG_COMPAT_BRK=y
88# CONFIG_SLAB is not set 89# CONFIG_SLAB is not set
89# CONFIG_SLUB is not set 90CONFIG_SLUB=y
90# CONFIG_SLOB is not set 91# CONFIG_SLOB is not set
91# CONFIG_PROFILING is not set 92# CONFIG_PROFILING is not set
93# CONFIG_MARKERS is not set
92CONFIG_HAVE_OPROFILE=y 94CONFIG_HAVE_OPROFILE=y
93# CONFIG_KPROBES is not set 95# CONFIG_KPROBES is not set
94CONFIG_HAVE_KPROBES=y 96CONFIG_HAVE_KPROBES=y
95CONFIG_HAVE_KRETPROBES=y 97CONFIG_HAVE_KRETPROBES=y
98CONFIG_USE_GENERIC_SMP_HELPERS=y
96CONFIG_HAVE_CLK=y 99CONFIG_HAVE_CLK=y
100# CONFIG_SLOW_WORK is not set
97CONFIG_HAVE_GENERIC_DMA_COHERENT=y 101CONFIG_HAVE_GENERIC_DMA_COHERENT=y
98CONFIG_SLABINFO=y 102CONFIG_SLABINFO=y
99CONFIG_RT_MUTEXES=y 103CONFIG_RT_MUTEXES=y
@@ -104,9 +108,9 @@ CONFIG_MODULE_UNLOAD=y
104# CONFIG_MODULE_FORCE_UNLOAD is not set 108# CONFIG_MODULE_FORCE_UNLOAD is not set
105CONFIG_MODVERSIONS=y 109CONFIG_MODVERSIONS=y
106CONFIG_MODULE_SRCVERSION_ALL=y 110CONFIG_MODULE_SRCVERSION_ALL=y
111CONFIG_STOP_MACHINE=y
107CONFIG_BLOCK=y 112CONFIG_BLOCK=y
108# CONFIG_LBD is not set 113# CONFIG_LBD is not set
109# CONFIG_BLK_DEV_IO_TRACE is not set
110# CONFIG_BLK_DEV_BSG is not set 114# CONFIG_BLK_DEV_BSG is not set
111# CONFIG_BLK_DEV_INTEGRITY is not set 115# CONFIG_BLK_DEV_INTEGRITY is not set
112 116
@@ -133,12 +137,13 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
133# CONFIG_ARCH_VERSATILE is not set 137# CONFIG_ARCH_VERSATILE is not set
134# CONFIG_ARCH_AT91 is not set 138# CONFIG_ARCH_AT91 is not set
135# CONFIG_ARCH_CLPS711X is not set 139# CONFIG_ARCH_CLPS711X is not set
140# CONFIG_ARCH_GEMINI is not set
136# CONFIG_ARCH_EBSA110 is not set 141# CONFIG_ARCH_EBSA110 is not set
137# CONFIG_ARCH_EP93XX is not set 142# CONFIG_ARCH_EP93XX is not set
138# CONFIG_ARCH_FOOTBRIDGE is not set 143# CONFIG_ARCH_FOOTBRIDGE is not set
144# CONFIG_ARCH_MXC is not set
139# CONFIG_ARCH_NETX is not set 145# CONFIG_ARCH_NETX is not set
140# CONFIG_ARCH_H720X is not set 146# CONFIG_ARCH_H720X is not set
141# CONFIG_ARCH_IMX is not set
142# CONFIG_ARCH_IOP13XX is not set 147# CONFIG_ARCH_IOP13XX is not set
143# CONFIG_ARCH_IOP32X is not set 148# CONFIG_ARCH_IOP32X is not set
144# CONFIG_ARCH_IOP33X is not set 149# CONFIG_ARCH_IOP33X is not set
@@ -147,14 +152,16 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
147# CONFIG_ARCH_IXP4XX is not set 152# CONFIG_ARCH_IXP4XX is not set
148# CONFIG_ARCH_L7200 is not set 153# CONFIG_ARCH_L7200 is not set
149# CONFIG_ARCH_KIRKWOOD is not set 154# CONFIG_ARCH_KIRKWOOD is not set
150# CONFIG_ARCH_KS8695 is not set
151# CONFIG_ARCH_NS9XXX is not set
152# CONFIG_ARCH_LOKI is not set 155# CONFIG_ARCH_LOKI is not set
153# CONFIG_ARCH_MV78XX0 is not set 156# CONFIG_ARCH_MV78XX0 is not set
154# CONFIG_ARCH_MXC is not set
155# CONFIG_ARCH_ORION5X is not set 157# CONFIG_ARCH_ORION5X is not set
158# CONFIG_ARCH_MMP is not set
159# CONFIG_ARCH_KS8695 is not set
160# CONFIG_ARCH_NS9XXX is not set
161# CONFIG_ARCH_W90X900 is not set
156# CONFIG_ARCH_PNX4008 is not set 162# CONFIG_ARCH_PNX4008 is not set
157# CONFIG_ARCH_PXA is not set 163# CONFIG_ARCH_PXA is not set
164# CONFIG_ARCH_MSM is not set
158# CONFIG_ARCH_RPC is not set 165# CONFIG_ARCH_RPC is not set
159# CONFIG_ARCH_SA1100 is not set 166# CONFIG_ARCH_SA1100 is not set
160# CONFIG_ARCH_S3C2410 is not set 167# CONFIG_ARCH_S3C2410 is not set
@@ -163,8 +170,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
163# CONFIG_ARCH_LH7A40X is not set 170# CONFIG_ARCH_LH7A40X is not set
164# CONFIG_ARCH_DAVINCI is not set 171# CONFIG_ARCH_DAVINCI is not set
165CONFIG_ARCH_OMAP=y 172CONFIG_ARCH_OMAP=y
166# CONFIG_ARCH_MSM is not set
167# CONFIG_ARCH_W90X900 is not set
168 173
169# 174#
170# TI OMAP Implementations 175# TI OMAP Implementations
@@ -178,8 +183,6 @@ CONFIG_ARCH_OMAP4=y
178# OMAP Feature Selections 183# OMAP Feature Selections
179# 184#
180# CONFIG_OMAP_RESET_CLOCKS is not set 185# CONFIG_OMAP_RESET_CLOCKS is not set
181# CONFIG_OMAP_COMPONENT_VERSION is not set
182# CONFIG_OMAP_GPIO_SWITCH is not set
183# CONFIG_OMAP_MUX is not set 186# CONFIG_OMAP_MUX is not set
184# CONFIG_OMAP_MCBSP is not set 187# CONFIG_OMAP_MCBSP is not set
185# CONFIG_OMAP_MBOX_FWK is not set 188# CONFIG_OMAP_MBOX_FWK is not set
@@ -191,8 +194,6 @@ CONFIG_OMAP_LL_DEBUG_UART1=y
191# CONFIG_OMAP_LL_DEBUG_UART2 is not set 194# CONFIG_OMAP_LL_DEBUG_UART2 is not set
192# CONFIG_OMAP_LL_DEBUG_UART3 is not set 195# CONFIG_OMAP_LL_DEBUG_UART3 is not set
193 196
194
195
196# 197#
197# OMAP Board Type 198# OMAP Board Type
198# 199#
@@ -224,7 +225,9 @@ CONFIG_CPU_CP15_MMU=y
224CONFIG_CPU_DCACHE_DISABLE=y 225CONFIG_CPU_DCACHE_DISABLE=y
225# CONFIG_CPU_BPREDICT_DISABLE is not set 226# CONFIG_CPU_BPREDICT_DISABLE is not set
226CONFIG_HAS_TLS_REG=y 227CONFIG_HAS_TLS_REG=y
227# CONFIG_OUTER_CACHE is not set 228# CONFIG_ARM_ERRATA_430973 is not set
229# CONFIG_ARM_ERRATA_458693 is not set
230# CONFIG_ARM_ERRATA_460075 is not set
228CONFIG_ARM_GIC=y 231CONFIG_ARM_GIC=y
229 232
230# 233#
@@ -240,17 +243,23 @@ CONFIG_ARM_GIC=y
240# CONFIG_NO_HZ is not set 243# CONFIG_NO_HZ is not set
241# CONFIG_HIGH_RES_TIMERS is not set 244# CONFIG_HIGH_RES_TIMERS is not set
242CONFIG_GENERIC_CLOCKEVENTS_BUILD=y 245CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
246CONFIG_SMP=y
247CONFIG_HAVE_ARM_SCU=y
248CONFIG_HAVE_ARM_TWD=y
243CONFIG_VMSPLIT_3G=y 249CONFIG_VMSPLIT_3G=y
244# CONFIG_VMSPLIT_2G is not set 250# CONFIG_VMSPLIT_2G is not set
245# CONFIG_VMSPLIT_1G is not set 251# CONFIG_VMSPLIT_1G is not set
246CONFIG_PAGE_OFFSET=0xC0000000 252CONFIG_PAGE_OFFSET=0xC0000000
253CONFIG_NR_CPUS=2
254# CONFIG_HOTPLUG_CPU is not set
255CONFIG_LOCAL_TIMERS=y
247# CONFIG_PREEMPT is not set 256# CONFIG_PREEMPT is not set
248CONFIG_HZ=128 257CONFIG_HZ=128
249CONFIG_AEABI=y 258CONFIG_AEABI=y
250# CONFIG_OABI_COMPAT is not set 259# CONFIG_OABI_COMPAT is not set
251CONFIG_ARCH_FLATMEM_HAS_HOLES=y
252# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set 260# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
253# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set 261# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
262# CONFIG_HIGHMEM is not set
254CONFIG_SELECT_MEMORY_MODEL=y 263CONFIG_SELECT_MEMORY_MODEL=y
255CONFIG_FLATMEM_MANUAL=y 264CONFIG_FLATMEM_MANUAL=y
256# CONFIG_DISCONTIGMEM_MANUAL is not set 265# CONFIG_DISCONTIGMEM_MANUAL is not set
@@ -263,6 +272,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
263CONFIG_ZONE_DMA_FLAG=0 272CONFIG_ZONE_DMA_FLAG=0
264CONFIG_VIRT_TO_BUS=y 273CONFIG_VIRT_TO_BUS=y
265# CONFIG_UNEVICTABLE_LRU is not set 274# CONFIG_UNEVICTABLE_LRU is not set
275CONFIG_HAVE_MLOCK=y
266# CONFIG_LEDS is not set 276# CONFIG_LEDS is not set
267CONFIG_ALIGNMENT_TRAP=y 277CONFIG_ALIGNMENT_TRAP=y
268 278
@@ -288,9 +298,6 @@ CONFIG_CMDLINE="root=/dev/ram0 rw mem=128M console=ttyS0,115200n8 initrd=0x81600
288# 298#
289# At least one emulation must be selected 299# At least one emulation must be selected
290# 300#
291CONFIG_FPE_NWFPE=y
292# CONFIG_FPE_NWFPE_XP is not set
293# CONFIG_FPE_FASTFPE is not set
294CONFIG_VFP=y 301CONFIG_VFP=y
295CONFIG_VFPv3=y 302CONFIG_VFPv3=y
296# CONFIG_NEON is not set 303# CONFIG_NEON is not set
@@ -299,7 +306,6 @@ CONFIG_VFPv3=y
299# Userspace binary formats 306# Userspace binary formats
300# 307#
301CONFIG_BINFMT_ELF=y 308CONFIG_BINFMT_ELF=y
302# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
303CONFIG_HAVE_AOUT=y 309CONFIG_HAVE_AOUT=y
304# CONFIG_BINFMT_AOUT is not set 310# CONFIG_BINFMT_AOUT is not set
305CONFIG_BINFMT_MISC=y 311CONFIG_BINFMT_MISC=y
@@ -415,6 +421,7 @@ CONFIG_UNIX98_PTYS=y
415# CONFIG_LEGACY_PTYS is not set 421# CONFIG_LEGACY_PTYS is not set
416# CONFIG_IPMI_HANDLER is not set 422# CONFIG_IPMI_HANDLER is not set
417CONFIG_HW_RANDOM=y 423CONFIG_HW_RANDOM=y
424# CONFIG_HW_RANDOM_TIMERIOMEM is not set
418# CONFIG_R3964 is not set 425# CONFIG_R3964 is not set
419# CONFIG_RAW_DRIVER is not set 426# CONFIG_RAW_DRIVER is not set
420# CONFIG_TCG_TPM is not set 427# CONFIG_TCG_TPM is not set
@@ -509,22 +516,19 @@ CONFIG_DUMMY_CONSOLE=y
509CONFIG_RTC_LIB=y 516CONFIG_RTC_LIB=y
510# CONFIG_RTC_CLASS is not set 517# CONFIG_RTC_CLASS is not set
511# CONFIG_DMADEVICES is not set 518# CONFIG_DMADEVICES is not set
519# CONFIG_AUXDISPLAY is not set
512# CONFIG_REGULATOR is not set 520# CONFIG_REGULATOR is not set
513# CONFIG_UIO is not set 521# CONFIG_UIO is not set
514# CONFIG_STAGING is not set 522# CONFIG_STAGING is not set
515 523
516# 524#
517# CBUS support
518#
519# CONFIG_CBUS is not set
520
521#
522# File systems 525# File systems
523# 526#
524CONFIG_EXT2_FS=y 527CONFIG_EXT2_FS=y
525# CONFIG_EXT2_FS_XATTR is not set 528# CONFIG_EXT2_FS_XATTR is not set
526# CONFIG_EXT2_FS_XIP is not set 529# CONFIG_EXT2_FS_XIP is not set
527CONFIG_EXT3_FS=y 530CONFIG_EXT3_FS=y
531# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
528# CONFIG_EXT3_FS_XATTR is not set 532# CONFIG_EXT3_FS_XATTR is not set
529# CONFIG_EXT4_FS is not set 533# CONFIG_EXT4_FS is not set
530CONFIG_JBD=y 534CONFIG_JBD=y
@@ -548,6 +552,11 @@ CONFIG_QUOTACTL=y
548# CONFIG_FUSE_FS is not set 552# CONFIG_FUSE_FS is not set
549 553
550# 554#
555# Caches
556#
557# CONFIG_FSCACHE is not set
558
559#
551# CD-ROM/DVD Filesystems 560# CD-ROM/DVD Filesystems
552# 561#
553# CONFIG_ISO9660_FS is not set 562# CONFIG_ISO9660_FS is not set
@@ -568,6 +577,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
568# 577#
569CONFIG_PROC_FS=y 578CONFIG_PROC_FS=y
570CONFIG_PROC_SYSCTL=y 579CONFIG_PROC_SYSCTL=y
580CONFIG_PROC_PAGE_MONITOR=y
571CONFIG_SYSFS=y 581CONFIG_SYSFS=y
572CONFIG_TMPFS=y 582CONFIG_TMPFS=y
573# CONFIG_TMPFS_POSIX_ACL is not set 583# CONFIG_TMPFS_POSIX_ACL is not set
@@ -591,6 +601,7 @@ CONFIG_MISC_FILESYSTEMS=y
591# CONFIG_ROMFS_FS is not set 601# CONFIG_ROMFS_FS is not set
592# CONFIG_SYSV_FS is not set 602# CONFIG_SYSV_FS is not set
593# CONFIG_UFS_FS is not set 603# CONFIG_UFS_FS is not set
604# CONFIG_NILFS2_FS is not set
594 605
595# 606#
596# Partition Types 607# Partition Types
@@ -666,11 +677,37 @@ CONFIG_MAGIC_SYSRQ=y
666# CONFIG_DEBUG_FS is not set 677# CONFIG_DEBUG_FS is not set
667# CONFIG_HEADERS_CHECK is not set 678# CONFIG_HEADERS_CHECK is not set
668CONFIG_DEBUG_KERNEL=y 679CONFIG_DEBUG_KERNEL=y
680# CONFIG_DEBUG_SHIRQ is not set
681CONFIG_DETECT_SOFTLOCKUP=y
682# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
683CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
684CONFIG_DETECT_HUNG_TASK=y
685# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
686CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
687CONFIG_SCHED_DEBUG=y
688# CONFIG_SCHEDSTATS is not set
689# CONFIG_TIMER_STATS is not set
690# CONFIG_DEBUG_OBJECTS is not set
691# CONFIG_SLUB_DEBUG_ON is not set
692# CONFIG_SLUB_STATS is not set
693# CONFIG_DEBUG_RT_MUTEXES is not set
694# CONFIG_RT_MUTEX_TESTER is not set
695# CONFIG_DEBUG_SPINLOCK is not set
696# CONFIG_DEBUG_MUTEXES is not set
697# CONFIG_DEBUG_LOCK_ALLOC is not set
698# CONFIG_PROVE_LOCKING is not set
699# CONFIG_LOCK_STAT is not set
700# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
701# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
702# CONFIG_DEBUG_KOBJECT is not set
669# CONFIG_DEBUG_BUGVERBOSE is not set 703# CONFIG_DEBUG_BUGVERBOSE is not set
670CONFIG_DEBUG_INFO=y 704CONFIG_DEBUG_INFO=y
671# CONFIG_DEBUG_VM is not set 705# CONFIG_DEBUG_VM is not set
672# CONFIG_DEBUG_WRITECOUNT is not set 706# CONFIG_DEBUG_WRITECOUNT is not set
673# CONFIG_DEBUG_MEMORY_INIT is not set 707# CONFIG_DEBUG_MEMORY_INIT is not set
708# CONFIG_DEBUG_LIST is not set
709# CONFIG_DEBUG_SG is not set
710# CONFIG_DEBUG_NOTIFIERS is not set
674CONFIG_FRAME_POINTER=y 711CONFIG_FRAME_POINTER=y
675# CONFIG_BOOT_PRINTK_DELAY is not set 712# CONFIG_BOOT_PRINTK_DELAY is not set
676# CONFIG_RCU_TORTURE_TEST is not set 713# CONFIG_RCU_TORTURE_TEST is not set
@@ -678,8 +715,9 @@ CONFIG_FRAME_POINTER=y
678# CONFIG_BACKTRACE_SELF_TEST is not set 715# CONFIG_BACKTRACE_SELF_TEST is not set
679# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set 716# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
680# CONFIG_FAULT_INJECTION is not set 717# CONFIG_FAULT_INJECTION is not set
681# CONFIG_LATENCYTOP is not set 718# CONFIG_PAGE_POISONING is not set
682CONFIG_HAVE_FUNCTION_TRACER=y 719CONFIG_HAVE_FUNCTION_TRACER=y
720CONFIG_TRACING_SUPPORT=y
683 721
684# 722#
685# Tracers 723# Tracers
@@ -688,17 +726,21 @@ CONFIG_HAVE_FUNCTION_TRACER=y
688# CONFIG_IRQSOFF_TRACER is not set 726# CONFIG_IRQSOFF_TRACER is not set
689# CONFIG_SCHED_TRACER is not set 727# CONFIG_SCHED_TRACER is not set
690# CONFIG_CONTEXT_SWITCH_TRACER is not set 728# CONFIG_CONTEXT_SWITCH_TRACER is not set
729# CONFIG_EVENT_TRACER is not set
691# CONFIG_BOOT_TRACER is not set 730# CONFIG_BOOT_TRACER is not set
692# CONFIG_TRACE_BRANCH_PROFILING is not set 731# CONFIG_TRACE_BRANCH_PROFILING is not set
693# CONFIG_STACK_TRACER is not set 732# CONFIG_STACK_TRACER is not set
694# CONFIG_DYNAMIC_PRINTK_DEBUG is not set 733# CONFIG_KMEMTRACE is not set
734# CONFIG_WORKQUEUE_TRACER is not set
735# CONFIG_BLK_DEV_IO_TRACE is not set
695# CONFIG_SAMPLES is not set 736# CONFIG_SAMPLES is not set
696CONFIG_HAVE_ARCH_KGDB=y 737CONFIG_HAVE_ARCH_KGDB=y
697# CONFIG_KGDB is not set 738# CONFIG_KGDB is not set
739# CONFIG_ARM_UNWIND is not set
698# CONFIG_DEBUG_USER is not set 740# CONFIG_DEBUG_USER is not set
699# CONFIG_DEBUG_ERRORS is not set 741# CONFIG_DEBUG_ERRORS is not set
700# CONFIG_DEBUG_STACK_USAGE is not set 742# CONFIG_DEBUG_STACK_USAGE is not set
701# CONFIG_DEBUG_ICEDCC is not set 743# CONFIG_DEBUG_LL is not set
702 744
703# 745#
704# Security options 746# Security options
@@ -712,11 +754,21 @@ CONFIG_CRYPTO=y
712# 754#
713# Crypto core or helper 755# Crypto core or helper
714# 756#
757# CONFIG_CRYPTO_FIPS is not set
715CONFIG_CRYPTO_ALGAPI=y 758CONFIG_CRYPTO_ALGAPI=y
759CONFIG_CRYPTO_ALGAPI2=y
760CONFIG_CRYPTO_AEAD2=y
716CONFIG_CRYPTO_BLKCIPHER=y 761CONFIG_CRYPTO_BLKCIPHER=y
762CONFIG_CRYPTO_BLKCIPHER2=y
763CONFIG_CRYPTO_HASH=y
764CONFIG_CRYPTO_HASH2=y
765CONFIG_CRYPTO_RNG2=y
766CONFIG_CRYPTO_PCOMP=y
717CONFIG_CRYPTO_MANAGER=y 767CONFIG_CRYPTO_MANAGER=y
768CONFIG_CRYPTO_MANAGER2=y
718# CONFIG_CRYPTO_GF128MUL is not set 769# CONFIG_CRYPTO_GF128MUL is not set
719# CONFIG_CRYPTO_NULL is not set 770# CONFIG_CRYPTO_NULL is not set
771CONFIG_CRYPTO_WORKQUEUE=y
720# CONFIG_CRYPTO_CRYPTD is not set 772# CONFIG_CRYPTO_CRYPTD is not set
721# CONFIG_CRYPTO_AUTHENC is not set 773# CONFIG_CRYPTO_AUTHENC is not set
722# CONFIG_CRYPTO_TEST is not set 774# CONFIG_CRYPTO_TEST is not set
@@ -785,8 +837,15 @@ CONFIG_CRYPTO_DES=y
785# Compression 837# Compression
786# 838#
787# CONFIG_CRYPTO_DEFLATE is not set 839# CONFIG_CRYPTO_DEFLATE is not set
840# CONFIG_CRYPTO_ZLIB is not set
788# CONFIG_CRYPTO_LZO is not set 841# CONFIG_CRYPTO_LZO is not set
842
843#
844# Random Number Generation
845#
846# CONFIG_CRYPTO_ANSI_CPRNG is not set
789CONFIG_CRYPTO_HW=y 847CONFIG_CRYPTO_HW=y
848# CONFIG_BINARY_PRINTF is not set
790 849
791# 850#
792# Library routines 851# Library routines
@@ -800,7 +859,8 @@ CONFIG_CRC_T10DIF=y
800CONFIG_CRC32=y 859CONFIG_CRC32=y
801# CONFIG_CRC7 is not set 860# CONFIG_CRC7 is not set
802CONFIG_LIBCRC32C=y 861CONFIG_LIBCRC32C=y
803CONFIG_PLIST=y 862CONFIG_ZLIB_INFLATE=y
863CONFIG_DECOMPRESS_GZIP=y
804CONFIG_HAS_IOMEM=y 864CONFIG_HAS_IOMEM=y
805CONFIG_HAS_IOPORT=y 865CONFIG_HAS_IOPORT=y
806CONFIG_HAS_DMA=y 866CONFIG_HAS_DMA=y
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 6226e64d99a..735bae5b0de 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -14,6 +14,10 @@ obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(prcm-common) $(clock-common)
14 14
15obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o 15obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
16 16
17# SMP support ONLY available for OMAP4
18obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o
19obj-$(CONFIG_LOCAL_TIMERS) += timer-mpu.o
20
17# Functions loaded to SRAM 21# Functions loaded to SRAM
18obj-$(CONFIG_ARCH_OMAP2420) += sram242x.o 22obj-$(CONFIG_ARCH_OMAP2420) += sram242x.o
19obj-$(CONFIG_ARCH_OMAP2430) += sram243x.o 23obj-$(CONFIG_ARCH_OMAP2430) += sram243x.o
diff --git a/arch/arm/mach-omap2/omap-headsmp.S b/arch/arm/mach-omap2/omap-headsmp.S
new file mode 100644
index 00000000000..4afadba0947
--- /dev/null
+++ b/arch/arm/mach-omap2/omap-headsmp.S
@@ -0,0 +1,46 @@
1/*
2 * Secondary CPU startup routine source file.
3 *
4 * Copyright (C) 2009 Texas Instruments, Inc.
5 *
6 * Author:
7 * Santosh Shilimkar <santosh.shilimkar@ti.com>
8 *
9 * Interface functions needed for the SMP. This file is based on arm
10 * realview smp platform.
11 * Copyright (c) 2003 ARM Limited.
12 *
13 * This program is free software,you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16 */
17
18#include <linux/linkage.h>
19#include <linux/init.h>
20
21/* Physical address needed since MMU not enabled yet on secondary core */
22#define OMAP4_AUX_CORE_BOOT1_PA 0x48281804
23
24 __INIT
25
26/*
27 * OMAP4 specific entry point for secondary CPU to jump from ROM
28 * code. This routine also provides a holding flag into which
29 * secondary core is held until we're ready for it to initialise.
30 * The primary core will update the this flag using a hardware
31 * register AuxCoreBoot1.
32 */
33ENTRY(omap_secondary_startup)
34 mrc p15, 0, r0, c0, c0, 5
35 and r0, r0, #0x0f
36hold: ldr r1, =OMAP4_AUX_CORE_BOOT1_PA @ read from AuxCoreBoot1
37 ldr r2, [r1]
38 cmp r2, r0
39 bne hold
40
41 /*
42 * we've been released from the cpu_release,secondary_stack
43 * should now contain the SVC stack for this core
44 */
45 b secondary_startup
46
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
new file mode 100644
index 00000000000..8fe8d230f21
--- /dev/null
+++ b/arch/arm/mach-omap2/omap-smp.c
@@ -0,0 +1,178 @@
1/*
2 * OMAP4 SMP source file. It contains platform specific fucntions
3 * needed for the linux smp kernel.
4 *
5 * Copyright (C) 2009 Texas Instruments, Inc.
6 *
7 * Author:
8 * Santosh Shilimkar <santosh.shilimkar@ti.com>
9 *
10 * Platform file needed for the OMAP4 SMP. This file is based on arm
11 * realview smp platform.
12 * * Copyright (c) 2002 ARM Limited.
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
17 */
18#include <linux/init.h>
19#include <linux/device.h>
20#include <linux/jiffies.h>
21#include <linux/smp.h>
22#include <linux/io.h>
23
24#include <asm/localtimer.h>
25#include <asm/smp_scu.h>
26#include <mach/hardware.h>
27
28/* Registers used for communicating startup information */
29#define OMAP4_AUXCOREBOOT_REG0 (OMAP44XX_VA_WKUPGEN_BASE + 0x800)
30#define OMAP4_AUXCOREBOOT_REG1 (OMAP44XX_VA_WKUPGEN_BASE + 0x804)
31
32/* SCU base address */
33static void __iomem *scu_base = OMAP44XX_VA_SCU_BASE;
34
35/*
36 * Use SCU config register to count number of cores
37 */
38static inline unsigned int get_core_count(void)
39{
40 if (scu_base)
41 return scu_get_core_count(scu_base);
42 return 1;
43}
44
45static DEFINE_SPINLOCK(boot_lock);
46
47void __cpuinit platform_secondary_init(unsigned int cpu)
48{
49 trace_hardirqs_off();
50
51 /*
52 * If any interrupts are already enabled for the primary
53 * core (e.g. timer irq), then they will not have been enabled
54 * for us: do so
55 */
56
57 gic_cpu_init(0, IO_ADDRESS(OMAP44XX_GIC_CPU_BASE));
58
59 /*
60 * Synchronise with the boot thread.
61 */
62 spin_lock(&boot_lock);
63 spin_unlock(&boot_lock);
64}
65
66int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
67{
68 unsigned long timeout;
69
70 /*
71 * Set synchronisation state between this boot processor
72 * and the secondary one
73 */
74 spin_lock(&boot_lock);
75
76 /*
77 * Update the AuxCoreBoot1 with boot state for secondary core.
78 * omap_secondary_startup() routine will hold the secondary core till
79 * the AuxCoreBoot1 register is updated with cpu state
80 * A barrier is added to ensure that write buffer is drained
81 */
82 __raw_writel(cpu, OMAP4_AUXCOREBOOT_REG1);
83 smp_wmb();
84
85 timeout = jiffies + (1 * HZ);
86 while (time_before(jiffies, timeout))
87 ;
88
89 /*
90 * Now the secondary core is starting up let it run its
91 * calibrations, then wait for it to finish
92 */
93 spin_unlock(&boot_lock);
94
95 return 0;
96}
97
98static void __init wakeup_secondary(void)
99{
100 /*
101 * Write the address of secondary startup routine into the
102 * AuxCoreBoot0 where ROM code will jump and start executing
103 * on secondary core once out of WFE
104 * A barrier is added to ensure that write buffer is drained
105 */
106 __raw_writel(virt_to_phys(omap_secondary_startup), \
107 OMAP4_AUXCOREBOOT_REG0);
108 smp_wmb();
109
110 /*
111 * Send a 'sev' to wake the secondary core from WFE.
112 */
113 set_event();
114 mb();
115}
116
117/*
118 * Initialise the CPU possible map early - this describes the CPUs
119 * which may be present or become present in the system.
120 */
121void __init smp_init_cpus(void)
122{
123 unsigned int i, ncores = get_core_count();
124
125 for (i = 0; i < ncores; i++)
126 set_cpu_possible(i, true);
127}
128
129void __init smp_prepare_cpus(unsigned int max_cpus)
130{
131 unsigned int ncores = get_core_count();
132 unsigned int cpu = smp_processor_id();
133 int i;
134
135 /* sanity check */
136 if (ncores == 0) {
137 printk(KERN_ERR
138 "OMAP4: strange core count of 0? Default to 1\n");
139 ncores = 1;
140 }
141
142 if (ncores > NR_CPUS) {
143 printk(KERN_WARNING
144 "OMAP4: no. of cores (%d) greater than configured "
145 "maximum of %d - clipping\n",
146 ncores, NR_CPUS);
147 ncores = NR_CPUS;
148 }
149 smp_store_cpu_info(cpu);
150
151 /*
152 * are we trying to boot more cores than exist?
153 */
154 if (max_cpus > ncores)
155 max_cpus = ncores;
156
157 /*
158 * Initialise the present map, which describes the set of CPUs
159 * actually populated at the present time.
160 */
161 for (i = 0; i < max_cpus; i++)
162 set_cpu_present(i, true);
163
164 if (max_cpus > 1) {
165 /*
166 * Enable the local timer or broadcast device for the
167 * boot CPU, but only if we have more than one CPU.
168 */
169 percpu_timer_setup();
170
171 /*
172 * Initialise the SCU and wake up the secondary core using
173 * wakeup_secondary().
174 */
175 scu_enable(scu_base);
176 wakeup_secondary();
177 }
178}
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
index 2ce474a9d2b..97eeeebcb06 100644
--- a/arch/arm/mach-omap2/timer-gp.c
+++ b/arch/arm/mach-omap2/timer-gp.c
@@ -38,6 +38,7 @@
38 38
39#include <asm/mach/time.h> 39#include <asm/mach/time.h>
40#include <mach/dmtimer.h> 40#include <mach/dmtimer.h>
41#include <asm/localtimer.h>
41 42
42/* MAX_GPTIMER_ID: number of GPTIMERs on the chip */ 43/* MAX_GPTIMER_ID: number of GPTIMERs on the chip */
43#define MAX_GPTIMER_ID 12 44#define MAX_GPTIMER_ID 12
@@ -229,6 +230,9 @@ static void __init omap2_gp_clocksource_init(void)
229 230
230static void __init omap2_gp_timer_init(void) 231static void __init omap2_gp_timer_init(void)
231{ 232{
233#ifdef CONFIG_LOCAL_TIMERS
234 twd_base = IO_ADDRESS(OMAP44XX_LOCAL_TWD_BASE);
235#endif
232 omap_dm_timer_init(); 236 omap_dm_timer_init();
233 237
234 omap2_gp_clockevent_init(); 238 omap2_gp_clockevent_init();
diff --git a/arch/arm/mach-omap2/timer-mpu.c b/arch/arm/mach-omap2/timer-mpu.c
new file mode 100644
index 00000000000..c1a650a9910
--- /dev/null
+++ b/arch/arm/mach-omap2/timer-mpu.c
@@ -0,0 +1,34 @@
1/*
2 * The MPU local timer source file. In OMAP4, both cortex-a9 cores have
3 * own timer in it's MPU domain. These timers will be driving the
4 * linux kernel SMP tick framework when active. These timers are not
5 * part of the wake up domain.
6 *
7 * Copyright (C) 2009 Texas Instruments, Inc.
8 *
9 * Author:
10 * Santosh Shilimkar <santosh.shilimkar@ti.com>
11 *
12 * This file is based on arm realview smp platform file.
13 * Copyright (C) 2002 ARM Ltd.
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
18 */
19#include <linux/init.h>
20#include <linux/smp.h>
21#include <linux/clockchips.h>
22#include <asm/irq.h>
23#include <asm/smp_twd.h>
24#include <asm/localtimer.h>
25
26/*
27 * Setup the local clock events for a CPU.
28 */
29void __cpuinit local_timer_setup(struct clock_event_device *evt)
30{
31 evt->irq = INT_44XX_LOCALTIMER_IRQ;
32 twd_timer_setup(evt);
33}
34
diff --git a/arch/arm/plat-omap/include/mach/entry-macro.S b/arch/arm/plat-omap/include/mach/entry-macro.S
index 00f45c01390..56426ed45ef 100644
--- a/arch/arm/plat-omap/include/mach/entry-macro.S
+++ b/arch/arm/plat-omap/include/mach/entry-macro.S
@@ -136,6 +136,34 @@
136 cmpne \irqnr, \tmp 136 cmpne \irqnr, \tmp
137 cmpcs \irqnr, \irqnr 137 cmpcs \irqnr, \irqnr
138 .endm 138 .endm
139
140 /* We assume that irqstat (the raw value of the IRQ acknowledge
141 * register) is preserved from the macro above.
142 * If there is an IPI, we immediately signal end of interrupt
143 * on the controller, since this requires the original irqstat
144 * value which we won't easily be able to recreate later.
145 */
146
147 .macro test_for_ipi, irqnr, irqstat, base, tmp
148 bic \irqnr, \irqstat, #0x1c00
149 cmp \irqnr, #16
150 it cc
151 strcc \irqstat, [\base, #GIC_CPU_EOI]
152 it cs
153 cmpcs \irqnr, \irqnr
154 .endm
155
156 /* As above, this assumes that irqstat and base are preserved */
157
158 .macro test_for_ltirq, irqnr, irqstat, base, tmp
159 bic \irqnr, \irqstat, #0x1c00
160 mov \tmp, #0
161 cmp \irqnr, #29
162 itt eq
163 moveq \tmp, #1
164 streq \irqstat, [\base, #GIC_CPU_EOI]
165 cmp \tmp, #0
166 .endm
139#endif 167#endif
140 168
141 .macro irq_prio_table 169 .macro irq_prio_table
diff --git a/arch/arm/plat-omap/include/mach/irqs.h b/arch/arm/plat-omap/include/mach/irqs.h
index 8015fe27c8b..fb7cb772399 100644
--- a/arch/arm/plat-omap/include/mach/irqs.h
+++ b/arch/arm/plat-omap/include/mach/irqs.h
@@ -427,6 +427,8 @@
427 427
428 428
429#define IRQ_GIC_START 32 429#define IRQ_GIC_START 32
430#define INT_44XX_LOCALTIMER_IRQ 29
431#define INT_44XX_LOCALWDT_IRQ 30
430 432
431#define INT_44XX_BENCH_MPU_EMUL (3 + IRQ_GIC_START) 433#define INT_44XX_BENCH_MPU_EMUL (3 + IRQ_GIC_START)
432#define INT_44XX_SSM_ABORT_IRQ (6 + IRQ_GIC_START) 434#define INT_44XX_SSM_ABORT_IRQ (6 + IRQ_GIC_START)
diff --git a/arch/arm/plat-omap/include/mach/smp.h b/arch/arm/plat-omap/include/mach/smp.h
new file mode 100644
index 00000000000..dcaa8fde706
--- /dev/null
+++ b/arch/arm/plat-omap/include/mach/smp.h
@@ -0,0 +1,51 @@
1/*
2 * OMAP4 machine specific smp.h
3 *
4 * Copyright (C) 2009 Texas Instruments, Inc.
5 *
6 * Author:
7 * Santosh Shilimkar <santosh.shilimkar@ti.com>
8 *
9 * Interface functions needed for the SMP. This file is based on arm
10 * realview smp platform.
11 * Copyright (c) 2003 ARM Limited.
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16 */
17#ifndef OMAP_ARCH_SMP_H
18#define OMAP_ARCH_SMP_H
19
20#include <asm/hardware/gic.h>
21
22/*
23 * set_event() is used to wake up secondary core from wfe using sev. ROM
24 * code puts the second core into wfe(standby).
25 *
26 */
27#define set_event() __asm__ __volatile__ ("sev" : : : "memory")
28
29/* Needed for secondary core boot */
30extern void omap_secondary_startup(void);
31
32/*
33 * We use Soft IRQ1 as the IPI
34 */
35static inline void smp_cross_call(const struct cpumask *mask)
36{
37 gic_raise_softirq(mask, 1);
38}
39
40/*
41 * Read MPIDR: Multiprocessor affinity register
42 */
43#define hard_smp_processor_id() \
44 ({ \
45 unsigned int cpunum; \
46 __asm__("mrc p15, 0, %0, c0, c0, 5" \
47 : "=r" (cpunum)); \
48 cpunum &= 0x0F; \
49 })
50
51#endif