diff options
Diffstat (limited to 'arch')
672 files changed, 16274 insertions, 5801 deletions
diff --git a/arch/alpha/include/asm/percpu.h b/arch/alpha/include/asm/percpu.h index 06c5c7a4afd3..b663f1f10b6a 100644 --- a/arch/alpha/include/asm/percpu.h +++ b/arch/alpha/include/asm/percpu.h | |||
@@ -30,7 +30,7 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; | |||
30 | 30 | ||
31 | #ifndef MODULE | 31 | #ifndef MODULE |
32 | #define SHIFT_PERCPU_PTR(var, offset) RELOC_HIDE(&per_cpu_var(var), (offset)) | 32 | #define SHIFT_PERCPU_PTR(var, offset) RELOC_HIDE(&per_cpu_var(var), (offset)) |
33 | #define PER_CPU_ATTRIBUTES | 33 | #define PER_CPU_DEF_ATTRIBUTES |
34 | #else | 34 | #else |
35 | /* | 35 | /* |
36 | * To calculate addresses of locally defined variables, GCC uses 32-bit | 36 | * To calculate addresses of locally defined variables, GCC uses 32-bit |
@@ -49,7 +49,7 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; | |||
49 | : "=&r"(__ptr), "=&r"(tmp_gp)); \ | 49 | : "=&r"(__ptr), "=&r"(tmp_gp)); \ |
50 | (typeof(&per_cpu_var(var)))(__ptr + (offset)); }) | 50 | (typeof(&per_cpu_var(var)))(__ptr + (offset)); }) |
51 | 51 | ||
52 | #define PER_CPU_ATTRIBUTES __used | 52 | #define PER_CPU_DEF_ATTRIBUTES __used |
53 | 53 | ||
54 | #endif /* MODULE */ | 54 | #endif /* MODULE */ |
55 | 55 | ||
@@ -71,7 +71,7 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; | |||
71 | #define __get_cpu_var(var) per_cpu_var(var) | 71 | #define __get_cpu_var(var) per_cpu_var(var) |
72 | #define __raw_get_cpu_var(var) per_cpu_var(var) | 72 | #define __raw_get_cpu_var(var) per_cpu_var(var) |
73 | 73 | ||
74 | #define PER_CPU_ATTRIBUTES | 74 | #define PER_CPU_DEF_ATTRIBUTES |
75 | 75 | ||
76 | #endif /* SMP */ | 76 | #endif /* SMP */ |
77 | 77 | ||
diff --git a/arch/alpha/include/asm/thread_info.h b/arch/alpha/include/asm/thread_info.h index d069526bd767..60c83abfde70 100644 --- a/arch/alpha/include/asm/thread_info.h +++ b/arch/alpha/include/asm/thread_info.h | |||
@@ -37,6 +37,7 @@ struct thread_info { | |||
37 | .task = &tsk, \ | 37 | .task = &tsk, \ |
38 | .exec_domain = &default_exec_domain, \ | 38 | .exec_domain = &default_exec_domain, \ |
39 | .addr_limit = KERNEL_DS, \ | 39 | .addr_limit = KERNEL_DS, \ |
40 | .preempt_count = INIT_PREEMPT_COUNT, \ | ||
40 | .restart_block = { \ | 41 | .restart_block = { \ |
41 | .fn = do_no_restart_syscall, \ | 42 | .fn = do_no_restart_syscall, \ |
42 | }, \ | 43 | }, \ |
diff --git a/arch/alpha/kernel/ptrace.c b/arch/alpha/kernel/ptrace.c index 1e9ad52c460e..e072041d19f8 100644 --- a/arch/alpha/kernel/ptrace.c +++ b/arch/alpha/kernel/ptrace.c | |||
@@ -8,7 +8,6 @@ | |||
8 | #include <linux/sched.h> | 8 | #include <linux/sched.h> |
9 | #include <linux/mm.h> | 9 | #include <linux/mm.h> |
10 | #include <linux/smp.h> | 10 | #include <linux/smp.h> |
11 | #include <linux/smp_lock.h> | ||
12 | #include <linux/errno.h> | 11 | #include <linux/errno.h> |
13 | #include <linux/ptrace.h> | 12 | #include <linux/ptrace.h> |
14 | #include <linux/user.h> | 13 | #include <linux/user.h> |
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c index 4829f96585b1..00a31deaa96e 100644 --- a/arch/alpha/mm/fault.c +++ b/arch/alpha/mm/fault.c | |||
@@ -146,7 +146,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr, | |||
146 | /* If for any reason at all we couldn't handle the fault, | 146 | /* If for any reason at all we couldn't handle the fault, |
147 | make sure we exit gracefully rather than endlessly redo | 147 | make sure we exit gracefully rather than endlessly redo |
148 | the fault. */ | 148 | the fault. */ |
149 | fault = handle_mm_fault(mm, vma, address, cause > 0); | 149 | fault = handle_mm_fault(mm, vma, address, cause > 0 ? FAULT_FLAG_WRITE : 0); |
150 | up_read(&mm->mmap_sem); | 150 | up_read(&mm->mmap_sem); |
151 | if (unlikely(fault & VM_FAULT_ERROR)) { | 151 | if (unlikely(fault & VM_FAULT_ERROR)) { |
152 | if (fault & VM_FAULT_OOM) | 152 | if (fault & VM_FAULT_OOM) |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 29475101a7b3..aef63c8e3d2d 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -1241,7 +1241,7 @@ endmenu | |||
1241 | 1241 | ||
1242 | menu "CPU Power Management" | 1242 | menu "CPU Power Management" |
1243 | 1243 | ||
1244 | if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_PXA) | 1244 | if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_PXA || ARCH_S3C64XX) |
1245 | 1245 | ||
1246 | source "drivers/cpufreq/Kconfig" | 1246 | source "drivers/cpufreq/Kconfig" |
1247 | 1247 | ||
@@ -1272,6 +1272,10 @@ config CPU_FREQ_PXA | |||
1272 | default y | 1272 | default y |
1273 | select CPU_FREQ_DEFAULT_GOV_USERSPACE | 1273 | select CPU_FREQ_DEFAULT_GOV_USERSPACE |
1274 | 1274 | ||
1275 | config CPU_FREQ_S3C64XX | ||
1276 | bool "CPUfreq support for Samsung S3C64XX CPUs" | ||
1277 | depends on CPU_FREQ && CPU_S3C6410 | ||
1278 | |||
1275 | endif | 1279 | endif |
1276 | 1280 | ||
1277 | source "drivers/cpuidle/Kconfig" | 1281 | source "drivers/cpuidle/Kconfig" |
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index a71fd941ade7..a89e4734b8f0 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
@@ -99,14 +99,6 @@ config DEBUG_CLPS711X_UART2 | |||
99 | output to the second serial port on these devices. Saying N will | 99 | output to the second serial port on these devices. Saying N will |
100 | cause the debug messages to appear on the first serial port. | 100 | cause the debug messages to appear on the first serial port. |
101 | 101 | ||
102 | config DEBUG_S3C_PORT | ||
103 | depends on DEBUG_LL && PLAT_S3C | ||
104 | bool "Kernel low-level debugging messages via S3C UART" | ||
105 | help | ||
106 | Say Y here if you want debug print routines to go to one of the | ||
107 | S3C internal UARTs. The chosen UART must have been configured | ||
108 | before it is used. | ||
109 | |||
110 | config DEBUG_S3C_UART | 102 | config DEBUG_S3C_UART |
111 | depends on PLAT_S3C | 103 | depends on PLAT_S3C |
112 | int "S3C UART to use for low-level debug" | 104 | int "S3C UART to use for low-level debug" |
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 01d49be3b2ca..4515728c5345 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -674,6 +674,15 @@ proc_types: | |||
674 | b __armv4_mmu_cache_off | 674 | b __armv4_mmu_cache_off |
675 | b __armv5tej_mmu_cache_flush | 675 | b __armv5tej_mmu_cache_flush |
676 | 676 | ||
677 | #ifdef CONFIG_CPU_FEROCEON_OLD_ID | ||
678 | /* this conflicts with the standard ARMv5TE entry */ | ||
679 | .long 0x41009260 @ Old Feroceon | ||
680 | .long 0xff00fff0 | ||
681 | b __armv4_mmu_cache_on | ||
682 | b __armv4_mmu_cache_off | ||
683 | b __armv5tej_mmu_cache_flush | ||
684 | #endif | ||
685 | |||
677 | .word 0x66015261 @ FA526 | 686 | .word 0x66015261 @ FA526 |
678 | .word 0xff01fff1 | 687 | .word 0xff01fff1 |
679 | b __fa526_cache_on | 688 | b __fa526_cache_on |
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c index 664c7b8b1ba8..337741f734ac 100644 --- a/arch/arm/common/gic.c +++ b/arch/arm/common/gic.c | |||
@@ -117,7 +117,7 @@ static int gic_set_cpu(unsigned int irq, const struct cpumask *mask_val) | |||
117 | u32 val; | 117 | u32 val; |
118 | 118 | ||
119 | spin_lock(&irq_controller_lock); | 119 | spin_lock(&irq_controller_lock); |
120 | irq_desc[irq].cpu = cpu; | 120 | irq_desc[irq].node = cpu; |
121 | val = readl(reg) & ~(0xff << shift); | 121 | val = readl(reg) & ~(0xff << shift); |
122 | val |= 1 << (cpu + shift); | 122 | val |= 1 << (cpu + shift); |
123 | writel(val, reg); | 123 | writel(val, reg); |
diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c index 887c6eb3a18a..6ed89836e908 100644 --- a/arch/arm/common/vic.c +++ b/arch/arm/common/vic.c | |||
@@ -229,14 +229,18 @@ static int vic_set_wake(unsigned int irq, unsigned int on) | |||
229 | { | 229 | { |
230 | struct vic_device *v = vic_from_irq(irq); | 230 | struct vic_device *v = vic_from_irq(irq); |
231 | unsigned int off = irq & 31; | 231 | unsigned int off = irq & 31; |
232 | u32 bit = 1 << off; | ||
232 | 233 | ||
233 | if (!v) | 234 | if (!v) |
234 | return -EINVAL; | 235 | return -EINVAL; |
235 | 236 | ||
237 | if (!(bit & v->resume_sources)) | ||
238 | return -EINVAL; | ||
239 | |||
236 | if (on) | 240 | if (on) |
237 | v->resume_irqs |= 1 << off; | 241 | v->resume_irqs |= bit; |
238 | else | 242 | else |
239 | v->resume_irqs &= ~(1 << off); | 243 | v->resume_irqs &= ~bit; |
240 | 244 | ||
241 | return 0; | 245 | return 0; |
242 | } | 246 | } |
diff --git a/arch/arm/configs/kb9202_defconfig b/arch/arm/configs/kb9202_defconfig index 8e74c66f239d..605a8462f172 100644 --- a/arch/arm/configs/kb9202_defconfig +++ b/arch/arm/configs/kb9202_defconfig | |||
@@ -1,109 +1,246 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.13-rc2 | 3 | # Linux kernel version: 2.6.30-rc8 |
4 | # Sun Aug 14 19:26:59 2005 | 4 | # Wed Jun 3 13:52:33 2009 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
8 | CONFIG_GENERIC_GPIO=y | ||
9 | CONFIG_GENERIC_TIME=y | ||
10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
7 | CONFIG_MMU=y | 11 | CONFIG_MMU=y |
8 | CONFIG_UID16=y | 12 | # CONFIG_NO_IOPORT is not set |
13 | CONFIG_GENERIC_HARDIRQS=y | ||
14 | CONFIG_STACKTRACE_SUPPORT=y | ||
15 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
16 | CONFIG_LOCKDEP_SUPPORT=y | ||
17 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
18 | CONFIG_HARDIRQS_SW_RESEND=y | ||
19 | CONFIG_GENERIC_IRQ_PROBE=y | ||
9 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 20 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
21 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
22 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
23 | CONFIG_GENERIC_HWEIGHT=y | ||
10 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 24 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
25 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
26 | CONFIG_VECTORS_BASE=0xffff0000 | ||
27 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
11 | 28 | ||
12 | # | 29 | # |
13 | # Code maturity level options | 30 | # General setup |
14 | # | 31 | # |
15 | # CONFIG_EXPERIMENTAL is not set | 32 | CONFIG_EXPERIMENTAL=y |
16 | CONFIG_CLEAN_COMPILE=y | ||
17 | CONFIG_BROKEN_ON_SMP=y | 33 | CONFIG_BROKEN_ON_SMP=y |
34 | CONFIG_LOCK_KERNEL=y | ||
18 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 35 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
19 | |||
20 | # | ||
21 | # General setup | ||
22 | # | ||
23 | CONFIG_LOCALVERSION="" | 36 | CONFIG_LOCALVERSION="" |
37 | CONFIG_LOCALVERSION_AUTO=y | ||
24 | # CONFIG_SWAP is not set | 38 | # CONFIG_SWAP is not set |
25 | # CONFIG_SYSVIPC is not set | 39 | CONFIG_SYSVIPC=y |
26 | # CONFIG_BSD_PROCESS_ACCT is not set | 40 | CONFIG_SYSVIPC_SYSCTL=y |
41 | CONFIG_POSIX_MQUEUE=y | ||
42 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
43 | CONFIG_BSD_PROCESS_ACCT=y | ||
44 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
45 | # CONFIG_TASKSTATS is not set | ||
46 | CONFIG_AUDIT=y | ||
47 | |||
48 | # | ||
49 | # RCU Subsystem | ||
50 | # | ||
51 | CONFIG_CLASSIC_RCU=y | ||
52 | # CONFIG_TREE_RCU is not set | ||
53 | # CONFIG_PREEMPT_RCU is not set | ||
54 | # CONFIG_TREE_RCU_TRACE is not set | ||
55 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
56 | CONFIG_IKCONFIG=y | ||
57 | CONFIG_IKCONFIG_PROC=y | ||
58 | CONFIG_LOG_BUF_SHIFT=17 | ||
59 | # CONFIG_GROUP_SCHED is not set | ||
60 | # CONFIG_CGROUPS is not set | ||
61 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
62 | # CONFIG_RELAY is not set | ||
63 | CONFIG_NAMESPACES=y | ||
64 | # CONFIG_UTS_NS is not set | ||
65 | # CONFIG_IPC_NS is not set | ||
66 | # CONFIG_USER_NS is not set | ||
67 | # CONFIG_PID_NS is not set | ||
68 | # CONFIG_NET_NS is not set | ||
69 | CONFIG_BLK_DEV_INITRD=y | ||
70 | CONFIG_INITRAMFS_SOURCE="" | ||
71 | CONFIG_RD_GZIP=y | ||
72 | CONFIG_RD_BZIP2=y | ||
73 | CONFIG_RD_LZMA=y | ||
74 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
27 | CONFIG_SYSCTL=y | 75 | CONFIG_SYSCTL=y |
28 | # CONFIG_AUDIT is not set | 76 | CONFIG_ANON_INODES=y |
29 | CONFIG_HOTPLUG=y | ||
30 | # CONFIG_KOBJECT_UEVENT is not set | ||
31 | # CONFIG_IKCONFIG is not set | ||
32 | # CONFIG_EMBEDDED is not set | 77 | # CONFIG_EMBEDDED is not set |
78 | CONFIG_UID16=y | ||
79 | CONFIG_SYSCTL_SYSCALL=y | ||
33 | CONFIG_KALLSYMS=y | 80 | CONFIG_KALLSYMS=y |
34 | # CONFIG_KALLSYMS_ALL is not set | 81 | # CONFIG_KALLSYMS_ALL is not set |
35 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 82 | CONFIG_KALLSYMS_EXTRA_PASS=y |
83 | # CONFIG_STRIP_ASM_SYMS is not set | ||
84 | CONFIG_HOTPLUG=y | ||
36 | CONFIG_PRINTK=y | 85 | CONFIG_PRINTK=y |
37 | CONFIG_BUG=y | 86 | CONFIG_BUG=y |
87 | CONFIG_ELF_CORE=y | ||
38 | CONFIG_BASE_FULL=y | 88 | CONFIG_BASE_FULL=y |
39 | CONFIG_FUTEX=y | 89 | CONFIG_FUTEX=y |
40 | CONFIG_EPOLL=y | 90 | CONFIG_EPOLL=y |
41 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 91 | CONFIG_SIGNALFD=y |
92 | CONFIG_TIMERFD=y | ||
93 | CONFIG_EVENTFD=y | ||
42 | CONFIG_SHMEM=y | 94 | CONFIG_SHMEM=y |
43 | CONFIG_CC_ALIGN_FUNCTIONS=0 | 95 | CONFIG_AIO=y |
44 | CONFIG_CC_ALIGN_LABELS=0 | 96 | CONFIG_VM_EVENT_COUNTERS=y |
45 | CONFIG_CC_ALIGN_LOOPS=0 | 97 | CONFIG_SLUB_DEBUG=y |
46 | CONFIG_CC_ALIGN_JUMPS=0 | 98 | CONFIG_COMPAT_BRK=y |
47 | # CONFIG_TINY_SHMEM is not set | 99 | # CONFIG_SLAB is not set |
100 | CONFIG_SLUB=y | ||
101 | # CONFIG_SLOB is not set | ||
102 | # CONFIG_PROFILING is not set | ||
103 | CONFIG_TRACEPOINTS=y | ||
104 | CONFIG_MARKERS=y | ||
105 | CONFIG_HAVE_OPROFILE=y | ||
106 | # CONFIG_KPROBES is not set | ||
107 | CONFIG_HAVE_KPROBES=y | ||
108 | CONFIG_HAVE_KRETPROBES=y | ||
109 | CONFIG_HAVE_CLK=y | ||
110 | # CONFIG_SLOW_WORK is not set | ||
111 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
112 | CONFIG_SLABINFO=y | ||
113 | CONFIG_RT_MUTEXES=y | ||
48 | CONFIG_BASE_SMALL=0 | 114 | CONFIG_BASE_SMALL=0 |
115 | CONFIG_MODULES=y | ||
116 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
117 | CONFIG_MODULE_UNLOAD=y | ||
118 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
119 | CONFIG_MODVERSIONS=y | ||
120 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
121 | CONFIG_BLOCK=y | ||
122 | # CONFIG_LBD is not set | ||
123 | # CONFIG_BLK_DEV_BSG is not set | ||
124 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
49 | 125 | ||
50 | # | 126 | # |
51 | # Loadable module support | 127 | # IO Schedulers |
52 | # | 128 | # |
53 | CONFIG_MODULES=y | 129 | CONFIG_IOSCHED_NOOP=y |
54 | CONFIG_MODULE_UNLOAD=y | 130 | # CONFIG_IOSCHED_AS is not set |
55 | CONFIG_OBSOLETE_MODPARM=y | 131 | # CONFIG_IOSCHED_DEADLINE is not set |
56 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 132 | CONFIG_IOSCHED_CFQ=y |
57 | CONFIG_KMOD=y | 133 | # CONFIG_DEFAULT_AS is not set |
134 | # CONFIG_DEFAULT_DEADLINE is not set | ||
135 | CONFIG_DEFAULT_CFQ=y | ||
136 | # CONFIG_DEFAULT_NOOP is not set | ||
137 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
138 | # CONFIG_FREEZER is not set | ||
58 | 139 | ||
59 | # | 140 | # |
60 | # System Type | 141 | # System Type |
61 | # | 142 | # |
62 | # CONFIG_ARCH_CLPS7500 is not set | 143 | # CONFIG_ARCH_AAEC2000 is not set |
144 | # CONFIG_ARCH_INTEGRATOR is not set | ||
145 | # CONFIG_ARCH_REALVIEW is not set | ||
146 | # CONFIG_ARCH_VERSATILE is not set | ||
147 | CONFIG_ARCH_AT91=y | ||
63 | # CONFIG_ARCH_CLPS711X is not set | 148 | # CONFIG_ARCH_CLPS711X is not set |
64 | # CONFIG_ARCH_CO285 is not set | ||
65 | # CONFIG_ARCH_EBSA110 is not set | 149 | # CONFIG_ARCH_EBSA110 is not set |
150 | # CONFIG_ARCH_EP93XX is not set | ||
151 | # CONFIG_ARCH_GEMINI is not set | ||
66 | # CONFIG_ARCH_FOOTBRIDGE is not set | 152 | # CONFIG_ARCH_FOOTBRIDGE is not set |
67 | # CONFIG_ARCH_INTEGRATOR is not set | 153 | # CONFIG_ARCH_NETX is not set |
68 | # CONFIG_ARCH_IOP3XX is not set | 154 | # CONFIG_ARCH_H720X is not set |
69 | # CONFIG_ARCH_IXP4XX is not set | 155 | # CONFIG_ARCH_IMX is not set |
156 | # CONFIG_ARCH_IOP13XX is not set | ||
157 | # CONFIG_ARCH_IOP32X is not set | ||
158 | # CONFIG_ARCH_IOP33X is not set | ||
159 | # CONFIG_ARCH_IXP23XX is not set | ||
70 | # CONFIG_ARCH_IXP2000 is not set | 160 | # CONFIG_ARCH_IXP2000 is not set |
161 | # CONFIG_ARCH_IXP4XX is not set | ||
71 | # CONFIG_ARCH_L7200 is not set | 162 | # CONFIG_ARCH_L7200 is not set |
163 | # CONFIG_ARCH_KIRKWOOD is not set | ||
164 | # CONFIG_ARCH_KS8695 is not set | ||
165 | # CONFIG_ARCH_NS9XXX is not set | ||
166 | # CONFIG_ARCH_LOKI is not set | ||
167 | # CONFIG_ARCH_MV78XX0 is not set | ||
168 | # CONFIG_ARCH_MXC is not set | ||
169 | # CONFIG_ARCH_ORION5X is not set | ||
170 | # CONFIG_ARCH_PNX4008 is not set | ||
72 | # CONFIG_ARCH_PXA is not set | 171 | # CONFIG_ARCH_PXA is not set |
172 | # CONFIG_ARCH_MMP is not set | ||
73 | # CONFIG_ARCH_RPC is not set | 173 | # CONFIG_ARCH_RPC is not set |
74 | # CONFIG_ARCH_SA1100 is not set | 174 | # CONFIG_ARCH_SA1100 is not set |
75 | # CONFIG_ARCH_S3C2410 is not set | 175 | # CONFIG_ARCH_S3C2410 is not set |
176 | # CONFIG_ARCH_S3C64XX is not set | ||
76 | # CONFIG_ARCH_SHARK is not set | 177 | # CONFIG_ARCH_SHARK is not set |
77 | # CONFIG_ARCH_LH7A40X is not set | 178 | # CONFIG_ARCH_LH7A40X is not set |
179 | # CONFIG_ARCH_DAVINCI is not set | ||
78 | # CONFIG_ARCH_OMAP is not set | 180 | # CONFIG_ARCH_OMAP is not set |
79 | # CONFIG_ARCH_VERSATILE is not set | 181 | # CONFIG_ARCH_MSM is not set |
80 | # CONFIG_ARCH_IMX is not set | 182 | # CONFIG_ARCH_W90X900 is not set |
81 | # CONFIG_ARCH_H720X is not set | 183 | |
82 | # CONFIG_ARCH_AAEC2000 is not set | 184 | # |
83 | CONFIG_ARCH_AT91=y | 185 | # Atmel AT91 System-on-Chip |
186 | # | ||
84 | CONFIG_ARCH_AT91RM9200=y | 187 | CONFIG_ARCH_AT91RM9200=y |
188 | # CONFIG_ARCH_AT91SAM9260 is not set | ||
189 | # CONFIG_ARCH_AT91SAM9261 is not set | ||
190 | # CONFIG_ARCH_AT91SAM9263 is not set | ||
191 | # CONFIG_ARCH_AT91SAM9RL is not set | ||
192 | # CONFIG_ARCH_AT91SAM9G20 is not set | ||
193 | # CONFIG_ARCH_AT91CAP9 is not set | ||
194 | # CONFIG_ARCH_AT91X40 is not set | ||
195 | CONFIG_AT91_PMC_UNIT=y | ||
85 | 196 | ||
86 | # | 197 | # |
87 | # AT91RM9200 Implementations | 198 | # AT91RM9200 Board Type |
88 | # | 199 | # |
200 | # CONFIG_MACH_ONEARM is not set | ||
89 | # CONFIG_ARCH_AT91RM9200DK is not set | 201 | # CONFIG_ARCH_AT91RM9200DK is not set |
90 | # CONFIG_MACH_AT91RM9200EK is not set | 202 | # CONFIG_MACH_AT91RM9200EK is not set |
91 | # CONFIG_MACH_CSB337 is not set | 203 | # CONFIG_MACH_CSB337 is not set |
92 | # CONFIG_MACH_CSB637 is not set | 204 | # CONFIG_MACH_CSB637 is not set |
93 | # CONFIG_MACH_CARMEVA is not set | 205 | # CONFIG_MACH_CARMEVA is not set |
206 | # CONFIG_MACH_ATEB9200 is not set | ||
94 | CONFIG_MACH_KB9200=y | 207 | CONFIG_MACH_KB9200=y |
208 | # CONFIG_MACH_PICOTUX2XX is not set | ||
209 | # CONFIG_MACH_KAFA is not set | ||
210 | # CONFIG_MACH_ECBAT91 is not set | ||
211 | # CONFIG_MACH_YL9200 is not set | ||
212 | |||
213 | # | ||
214 | # AT91 Board Options | ||
215 | # | ||
216 | |||
217 | # | ||
218 | # AT91 Feature Selections | ||
219 | # | ||
220 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
221 | CONFIG_AT91_TIMER_HZ=128 | ||
222 | CONFIG_AT91_EARLY_DBGU=y | ||
223 | # CONFIG_AT91_EARLY_USART0 is not set | ||
224 | # CONFIG_AT91_EARLY_USART1 is not set | ||
225 | # CONFIG_AT91_EARLY_USART2 is not set | ||
226 | # CONFIG_AT91_EARLY_USART3 is not set | ||
227 | # CONFIG_AT91_EARLY_USART4 is not set | ||
228 | # CONFIG_AT91_EARLY_USART5 is not set | ||
95 | 229 | ||
96 | # | 230 | # |
97 | # Processor Type | 231 | # Processor Type |
98 | # | 232 | # |
99 | CONFIG_CPU_32=y | 233 | CONFIG_CPU_32=y |
100 | CONFIG_CPU_ARM920T=y | 234 | CONFIG_CPU_ARM920T=y |
101 | CONFIG_CPU_32v4=y | 235 | CONFIG_CPU_32v4T=y |
102 | CONFIG_CPU_ABRT_EV4T=y | 236 | CONFIG_CPU_ABRT_EV4T=y |
237 | CONFIG_CPU_PABRT_NOIFAR=y | ||
103 | CONFIG_CPU_CACHE_V4WT=y | 238 | CONFIG_CPU_CACHE_V4WT=y |
104 | CONFIG_CPU_CACHE_VIVT=y | 239 | CONFIG_CPU_CACHE_VIVT=y |
105 | CONFIG_CPU_COPY_V4WB=y | 240 | CONFIG_CPU_COPY_V4WB=y |
106 | CONFIG_CPU_TLB_V4WBI=y | 241 | CONFIG_CPU_TLB_V4WBI=y |
242 | CONFIG_CPU_CP15=y | ||
243 | CONFIG_CPU_CP15_MMU=y | ||
107 | 244 | ||
108 | # | 245 | # |
109 | # Processor Features | 246 | # Processor Features |
@@ -112,23 +249,48 @@ CONFIG_ARM_THUMB=y | |||
112 | # CONFIG_CPU_ICACHE_DISABLE is not set | 249 | # CONFIG_CPU_ICACHE_DISABLE is not set |
113 | # CONFIG_CPU_DCACHE_DISABLE is not set | 250 | # CONFIG_CPU_DCACHE_DISABLE is not set |
114 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | 251 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set |
252 | # CONFIG_OUTER_CACHE is not set | ||
115 | 253 | ||
116 | # | 254 | # |
117 | # Bus support | 255 | # Bus support |
118 | # | 256 | # |
119 | CONFIG_ISA_DMA_API=y | 257 | # CONFIG_PCI_SYSCALL is not set |
120 | 258 | # CONFIG_ARCH_SUPPORTS_MSI is not set | |
121 | # | ||
122 | # PCCARD (PCMCIA/CardBus) support | ||
123 | # | ||
124 | # CONFIG_PCCARD is not set | 259 | # CONFIG_PCCARD is not set |
125 | 260 | ||
126 | # | 261 | # |
127 | # Kernel Features | 262 | # Kernel Features |
128 | # | 263 | # |
129 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 264 | CONFIG_TICK_ONESHOT=y |
265 | CONFIG_NO_HZ=y | ||
266 | CONFIG_HIGH_RES_TIMERS=y | ||
267 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
268 | CONFIG_VMSPLIT_3G=y | ||
269 | # CONFIG_VMSPLIT_2G is not set | ||
270 | # CONFIG_VMSPLIT_1G is not set | ||
271 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
272 | CONFIG_PREEMPT=y | ||
273 | CONFIG_HZ=128 | ||
274 | CONFIG_AEABI=y | ||
275 | CONFIG_OABI_COMPAT=y | ||
276 | # CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set | ||
277 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set | ||
278 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set | ||
279 | # CONFIG_HIGHMEM is not set | ||
280 | CONFIG_SELECT_MEMORY_MODEL=y | ||
281 | CONFIG_FLATMEM_MANUAL=y | ||
282 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
283 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
130 | CONFIG_FLATMEM=y | 284 | CONFIG_FLATMEM=y |
131 | CONFIG_FLAT_NODE_MEM_MAP=y | 285 | CONFIG_FLAT_NODE_MEM_MAP=y |
286 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
287 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
288 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
289 | CONFIG_ZONE_DMA_FLAG=0 | ||
290 | CONFIG_VIRT_TO_BUS=y | ||
291 | CONFIG_UNEVICTABLE_LRU=y | ||
292 | CONFIG_HAVE_MLOCK=y | ||
293 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
132 | # CONFIG_LEDS is not set | 294 | # CONFIG_LEDS is not set |
133 | CONFIG_ALIGNMENT_TRAP=y | 295 | CONFIG_ALIGNMENT_TRAP=y |
134 | 296 | ||
@@ -137,8 +299,16 @@ CONFIG_ALIGNMENT_TRAP=y | |||
137 | # | 299 | # |
138 | CONFIG_ZBOOT_ROM_TEXT=0x10000000 | 300 | CONFIG_ZBOOT_ROM_TEXT=0x10000000 |
139 | CONFIG_ZBOOT_ROM_BSS=0x20040000 | 301 | CONFIG_ZBOOT_ROM_BSS=0x20040000 |
140 | CONFIG_ZBOOT_ROM=y | 302 | # CONFIG_ZBOOT_ROM is not set |
141 | CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933" | 303 | CONFIG_CMDLINE="noinitrd root=/dev/mtdblock0 rootfstype=jffs2 mem=64M" |
304 | # CONFIG_XIP_KERNEL is not set | ||
305 | CONFIG_KEXEC=y | ||
306 | CONFIG_ATAGS_PROC=y | ||
307 | |||
308 | # | ||
309 | # CPU Power Management | ||
310 | # | ||
311 | # CONFIG_CPU_IDLE is not set | ||
142 | 312 | ||
143 | # | 313 | # |
144 | # Floating point emulation | 314 | # Floating point emulation |
@@ -149,74 +319,251 @@ CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933" | |||
149 | # | 319 | # |
150 | CONFIG_FPE_NWFPE=y | 320 | CONFIG_FPE_NWFPE=y |
151 | # CONFIG_FPE_NWFPE_XP is not set | 321 | # CONFIG_FPE_NWFPE_XP is not set |
322 | # CONFIG_FPE_FASTFPE is not set | ||
152 | 323 | ||
153 | # | 324 | # |
154 | # Userspace binary formats | 325 | # Userspace binary formats |
155 | # | 326 | # |
156 | CONFIG_BINFMT_ELF=y | 327 | CONFIG_BINFMT_ELF=y |
157 | CONFIG_BINFMT_AOUT=y | 328 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set |
329 | CONFIG_HAVE_AOUT=y | ||
330 | # CONFIG_BINFMT_AOUT is not set | ||
158 | CONFIG_BINFMT_MISC=y | 331 | CONFIG_BINFMT_MISC=y |
159 | # CONFIG_ARTHUR is not set | ||
160 | 332 | ||
161 | # | 333 | # |
162 | # Power management options | 334 | # Power management options |
163 | # | 335 | # |
164 | # CONFIG_PM is not set | 336 | # CONFIG_PM is not set |
337 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
338 | CONFIG_NET=y | ||
165 | 339 | ||
166 | # | 340 | # |
167 | # Device Drivers | 341 | # Networking options |
168 | # | 342 | # |
343 | CONFIG_PACKET=y | ||
344 | # CONFIG_PACKET_MMAP is not set | ||
345 | CONFIG_UNIX=y | ||
346 | # CONFIG_NET_KEY is not set | ||
347 | CONFIG_INET=y | ||
348 | # CONFIG_IP_MULTICAST is not set | ||
349 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
350 | CONFIG_IP_FIB_HASH=y | ||
351 | CONFIG_IP_PNP=y | ||
352 | CONFIG_IP_PNP_DHCP=y | ||
353 | CONFIG_IP_PNP_BOOTP=y | ||
354 | # CONFIG_IP_PNP_RARP is not set | ||
355 | # CONFIG_NET_IPIP is not set | ||
356 | # CONFIG_NET_IPGRE is not set | ||
357 | # CONFIG_ARPD is not set | ||
358 | # CONFIG_SYN_COOKIES is not set | ||
359 | # CONFIG_INET_AH is not set | ||
360 | # CONFIG_INET_ESP is not set | ||
361 | # CONFIG_INET_IPCOMP is not set | ||
362 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
363 | # CONFIG_INET_TUNNEL is not set | ||
364 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
365 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
366 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
367 | # CONFIG_INET_LRO is not set | ||
368 | # CONFIG_INET_DIAG is not set | ||
369 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
370 | CONFIG_TCP_CONG_CUBIC=y | ||
371 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
372 | # CONFIG_TCP_MD5SIG is not set | ||
373 | # CONFIG_IPV6 is not set | ||
374 | # CONFIG_NETWORK_SECMARK is not set | ||
375 | # CONFIG_NETFILTER is not set | ||
376 | # CONFIG_IP_DCCP is not set | ||
377 | # CONFIG_IP_SCTP is not set | ||
378 | # CONFIG_TIPC is not set | ||
379 | # CONFIG_ATM is not set | ||
380 | # CONFIG_BRIDGE is not set | ||
381 | # CONFIG_NET_DSA is not set | ||
382 | # CONFIG_VLAN_8021Q is not set | ||
383 | # CONFIG_DECNET is not set | ||
384 | # CONFIG_LLC2 is not set | ||
385 | # CONFIG_IPX is not set | ||
386 | # CONFIG_ATALK is not set | ||
387 | # CONFIG_X25 is not set | ||
388 | # CONFIG_LAPB is not set | ||
389 | # CONFIG_ECONET is not set | ||
390 | # CONFIG_WAN_ROUTER is not set | ||
391 | # CONFIG_PHONET is not set | ||
392 | # CONFIG_NET_SCHED is not set | ||
393 | # CONFIG_DCB is not set | ||
169 | 394 | ||
170 | # | 395 | # |
171 | # Generic Driver Options | 396 | # Network testing |
172 | # | 397 | # |
173 | CONFIG_STANDALONE=y | 398 | # CONFIG_NET_PKTGEN is not set |
174 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 399 | # CONFIG_NET_DROP_MONITOR is not set |
175 | # CONFIG_FW_LOADER is not set | 400 | # CONFIG_HAMRADIO is not set |
176 | CONFIG_DEBUG_DRIVER=y | 401 | # CONFIG_CAN is not set |
402 | # CONFIG_IRDA is not set | ||
403 | # CONFIG_BT is not set | ||
404 | # CONFIG_AF_RXRPC is not set | ||
405 | # CONFIG_WIRELESS is not set | ||
406 | # CONFIG_WIMAX is not set | ||
407 | # CONFIG_RFKILL is not set | ||
408 | # CONFIG_NET_9P is not set | ||
177 | 409 | ||
178 | # | 410 | # |
179 | # Memory Technology Devices (MTD) | 411 | # Device Drivers |
180 | # | 412 | # |
181 | # CONFIG_MTD is not set | ||
182 | 413 | ||
183 | # | 414 | # |
184 | # Parallel port support | 415 | # Generic Driver Options |
185 | # | 416 | # |
417 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
418 | CONFIG_STANDALONE=y | ||
419 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
420 | CONFIG_FW_LOADER=y | ||
421 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
422 | CONFIG_EXTRA_FIRMWARE="" | ||
423 | # CONFIG_DEBUG_DRIVER is not set | ||
424 | # CONFIG_DEBUG_DEVRES is not set | ||
425 | # CONFIG_SYS_HYPERVISOR is not set | ||
426 | # CONFIG_CONNECTOR is not set | ||
427 | CONFIG_MTD=y | ||
428 | # CONFIG_MTD_DEBUG is not set | ||
429 | CONFIG_MTD_CONCAT=y | ||
430 | CONFIG_MTD_PARTITIONS=y | ||
431 | # CONFIG_MTD_TESTS is not set | ||
432 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
433 | CONFIG_MTD_CMDLINE_PARTS=y | ||
434 | # CONFIG_MTD_AFS_PARTS is not set | ||
435 | # CONFIG_MTD_AR7_PARTS is not set | ||
436 | |||
437 | # | ||
438 | # User Modules And Translation Layers | ||
439 | # | ||
440 | CONFIG_MTD_CHAR=y | ||
441 | CONFIG_MTD_BLKDEVS=y | ||
442 | CONFIG_MTD_BLOCK=y | ||
443 | # CONFIG_FTL is not set | ||
444 | # CONFIG_NFTL is not set | ||
445 | # CONFIG_INFTL is not set | ||
446 | # CONFIG_RFD_FTL is not set | ||
447 | # CONFIG_SSFDC is not set | ||
448 | # CONFIG_MTD_OOPS is not set | ||
449 | |||
450 | # | ||
451 | # RAM/ROM/Flash chip drivers | ||
452 | # | ||
453 | CONFIG_MTD_CFI=y | ||
454 | # CONFIG_MTD_JEDECPROBE is not set | ||
455 | CONFIG_MTD_GEN_PROBE=y | ||
456 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
457 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
458 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
459 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
460 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
461 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
462 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
463 | CONFIG_MTD_CFI_I1=y | ||
464 | CONFIG_MTD_CFI_I2=y | ||
465 | # CONFIG_MTD_CFI_I4 is not set | ||
466 | # CONFIG_MTD_CFI_I8 is not set | ||
467 | CONFIG_MTD_CFI_INTELEXT=y | ||
468 | # CONFIG_MTD_CFI_AMDSTD is not set | ||
469 | # CONFIG_MTD_CFI_STAA is not set | ||
470 | CONFIG_MTD_CFI_UTIL=y | ||
471 | # CONFIG_MTD_RAM is not set | ||
472 | # CONFIG_MTD_ROM is not set | ||
473 | # CONFIG_MTD_ABSENT is not set | ||
474 | |||
475 | # | ||
476 | # Mapping drivers for chip access | ||
477 | # | ||
478 | CONFIG_MTD_COMPLEX_MAPPINGS=y | ||
479 | CONFIG_MTD_PHYSMAP=y | ||
480 | # CONFIG_MTD_PHYSMAP_COMPAT is not set | ||
481 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
482 | # CONFIG_MTD_PLATRAM is not set | ||
483 | |||
484 | # | ||
485 | # Self-contained MTD device drivers | ||
486 | # | ||
487 | # CONFIG_MTD_SLRAM is not set | ||
488 | # CONFIG_MTD_PHRAM is not set | ||
489 | # CONFIG_MTD_MTDRAM is not set | ||
490 | # CONFIG_MTD_BLOCK2MTD is not set | ||
491 | |||
492 | # | ||
493 | # Disk-On-Chip Device Drivers | ||
494 | # | ||
495 | # CONFIG_MTD_DOC2000 is not set | ||
496 | # CONFIG_MTD_DOC2001 is not set | ||
497 | # CONFIG_MTD_DOC2001PLUS is not set | ||
498 | CONFIG_MTD_NAND=y | ||
499 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
500 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
501 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
502 | # CONFIG_MTD_NAND_GPIO is not set | ||
503 | CONFIG_MTD_NAND_IDS=y | ||
504 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
505 | CONFIG_MTD_NAND_ATMEL=y | ||
506 | # CONFIG_MTD_NAND_ATMEL_ECC_HW is not set | ||
507 | CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y | ||
508 | # CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set | ||
509 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
510 | # CONFIG_MTD_NAND_PLATFORM is not set | ||
511 | # CONFIG_MTD_ALAUDA is not set | ||
512 | # CONFIG_MTD_ONENAND is not set | ||
513 | |||
514 | # | ||
515 | # LPDDR flash memory drivers | ||
516 | # | ||
517 | # CONFIG_MTD_LPDDR is not set | ||
518 | |||
519 | # | ||
520 | # UBI - Unsorted block images | ||
521 | # | ||
522 | CONFIG_MTD_UBI=y | ||
523 | CONFIG_MTD_UBI_WL_THRESHOLD=4096 | ||
524 | CONFIG_MTD_UBI_BEB_RESERVE=1 | ||
525 | CONFIG_MTD_UBI_GLUEBI=y | ||
526 | |||
527 | # | ||
528 | # UBI debugging options | ||
529 | # | ||
530 | # CONFIG_MTD_UBI_DEBUG is not set | ||
186 | # CONFIG_PARPORT is not set | 531 | # CONFIG_PARPORT is not set |
187 | 532 | CONFIG_BLK_DEV=y | |
188 | # | ||
189 | # Plug and Play support | ||
190 | # | ||
191 | |||
192 | # | ||
193 | # Block devices | ||
194 | # | ||
195 | # CONFIG_BLK_DEV_COW_COMMON is not set | 533 | # CONFIG_BLK_DEV_COW_COMMON is not set |
196 | CONFIG_BLK_DEV_LOOP=y | 534 | CONFIG_BLK_DEV_LOOP=y |
197 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | 535 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set |
198 | CONFIG_BLK_DEV_NBD=y | 536 | # CONFIG_BLK_DEV_NBD is not set |
199 | # CONFIG_BLK_DEV_UB is not set | 537 | # CONFIG_BLK_DEV_UB is not set |
200 | CONFIG_BLK_DEV_RAM=y | 538 | CONFIG_BLK_DEV_RAM=y |
201 | CONFIG_BLK_DEV_RAM_COUNT=16 | 539 | CONFIG_BLK_DEV_RAM_COUNT=16 |
202 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 540 | CONFIG_BLK_DEV_RAM_SIZE=16384 |
203 | CONFIG_BLK_DEV_INITRD=y | 541 | # CONFIG_BLK_DEV_XIP is not set |
204 | CONFIG_INITRAMFS_SOURCE="" | ||
205 | # CONFIG_CDROM_PKTCDVD is not set | 542 | # CONFIG_CDROM_PKTCDVD is not set |
543 | # CONFIG_ATA_OVER_ETH is not set | ||
544 | CONFIG_MISC_DEVICES=y | ||
545 | CONFIG_ATMEL_TCLIB=y | ||
546 | CONFIG_ATMEL_TCB_CLKSRC=y | ||
547 | CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 | ||
548 | CONFIG_ATMEL_SSC=y | ||
549 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
550 | # CONFIG_C2PORT is not set | ||
206 | 551 | ||
207 | # | 552 | # |
208 | # IO Schedulers | 553 | # EEPROM support |
209 | # | 554 | # |
210 | CONFIG_IOSCHED_NOOP=y | 555 | # CONFIG_EEPROM_93CX6 is not set |
211 | CONFIG_IOSCHED_AS=y | 556 | CONFIG_HAVE_IDE=y |
212 | CONFIG_IOSCHED_DEADLINE=y | 557 | # CONFIG_IDE is not set |
213 | CONFIG_IOSCHED_CFQ=y | ||
214 | # CONFIG_ATA_OVER_ETH is not set | ||
215 | 558 | ||
216 | # | 559 | # |
217 | # SCSI device support | 560 | # SCSI device support |
218 | # | 561 | # |
562 | # CONFIG_RAID_ATTRS is not set | ||
219 | CONFIG_SCSI=y | 563 | CONFIG_SCSI=y |
564 | CONFIG_SCSI_DMA=y | ||
565 | # CONFIG_SCSI_TGT is not set | ||
566 | # CONFIG_SCSI_NETLINK is not set | ||
220 | CONFIG_SCSI_PROC_FS=y | 567 | CONFIG_SCSI_PROC_FS=y |
221 | 568 | ||
222 | # | 569 | # |
@@ -232,145 +579,87 @@ CONFIG_CHR_DEV_SG=y | |||
232 | # | 579 | # |
233 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | 580 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs |
234 | # | 581 | # |
235 | # CONFIG_SCSI_MULTI_LUN is not set | 582 | CONFIG_SCSI_MULTI_LUN=y |
236 | # CONFIG_SCSI_CONSTANTS is not set | 583 | CONFIG_SCSI_CONSTANTS=y |
237 | # CONFIG_SCSI_LOGGING is not set | 584 | CONFIG_SCSI_LOGGING=y |
585 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
586 | CONFIG_SCSI_WAIT_SCAN=m | ||
238 | 587 | ||
239 | # | 588 | # |
240 | # SCSI Transport Attributes | 589 | # SCSI Transports |
241 | # | 590 | # |
242 | # CONFIG_SCSI_SPI_ATTRS is not set | 591 | CONFIG_SCSI_SPI_ATTRS=m |
243 | # CONFIG_SCSI_FC_ATTRS is not set | 592 | # CONFIG_SCSI_FC_ATTRS is not set |
244 | # CONFIG_SCSI_ISCSI_ATTRS is not set | 593 | # CONFIG_SCSI_ISCSI_ATTRS is not set |
245 | 594 | # CONFIG_SCSI_SAS_LIBSAS is not set | |
246 | # | 595 | # CONFIG_SCSI_SRP_ATTRS is not set |
247 | # SCSI low-level drivers | 596 | # CONFIG_SCSI_LOWLEVEL is not set |
248 | # | 597 | # CONFIG_SCSI_DH is not set |
249 | # CONFIG_SCSI_SATA is not set | 598 | # CONFIG_SCSI_OSD_INITIATOR is not set |
250 | # CONFIG_SCSI_DEBUG is not set | 599 | # CONFIG_ATA is not set |
251 | |||
252 | # | ||
253 | # Multi-device support (RAID and LVM) | ||
254 | # | ||
255 | # CONFIG_MD is not set | 600 | # CONFIG_MD is not set |
256 | |||
257 | # | ||
258 | # Fusion MPT device support | ||
259 | # | ||
260 | # CONFIG_FUSION is not set | ||
261 | |||
262 | # | ||
263 | # IEEE 1394 (FireWire) support | ||
264 | # | ||
265 | |||
266 | # | ||
267 | # I2O device support | ||
268 | # | ||
269 | |||
270 | # | ||
271 | # Networking support | ||
272 | # | ||
273 | CONFIG_NET=y | ||
274 | |||
275 | # | ||
276 | # Networking options | ||
277 | # | ||
278 | CONFIG_PACKET=y | ||
279 | # CONFIG_PACKET_MMAP is not set | ||
280 | CONFIG_UNIX=y | ||
281 | # CONFIG_NET_KEY is not set | ||
282 | CONFIG_INET=y | ||
283 | CONFIG_IP_MULTICAST=y | ||
284 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
285 | CONFIG_IP_FIB_HASH=y | ||
286 | CONFIG_IP_PNP=y | ||
287 | CONFIG_IP_PNP_DHCP=y | ||
288 | # CONFIG_IP_PNP_BOOTP is not set | ||
289 | # CONFIG_IP_PNP_RARP is not set | ||
290 | # CONFIG_NET_IPIP is not set | ||
291 | # CONFIG_NET_IPGRE is not set | ||
292 | # CONFIG_IP_MROUTE is not set | ||
293 | # CONFIG_SYN_COOKIES is not set | ||
294 | # CONFIG_INET_AH is not set | ||
295 | # CONFIG_INET_ESP is not set | ||
296 | # CONFIG_INET_IPCOMP is not set | ||
297 | # CONFIG_INET_TUNNEL is not set | ||
298 | # CONFIG_IP_TCPDIAG is not set | ||
299 | # CONFIG_IP_TCPDIAG_IPV6 is not set | ||
300 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
301 | CONFIG_TCP_CONG_BIC=y | ||
302 | # CONFIG_IPV6 is not set | ||
303 | # CONFIG_NETFILTER is not set | ||
304 | # CONFIG_BRIDGE is not set | ||
305 | # CONFIG_VLAN_8021Q is not set | ||
306 | # CONFIG_DECNET is not set | ||
307 | # CONFIG_LLC2 is not set | ||
308 | # CONFIG_IPX is not set | ||
309 | # CONFIG_ATALK is not set | ||
310 | |||
311 | # | ||
312 | # QoS and/or fair queueing | ||
313 | # | ||
314 | # CONFIG_NET_SCHED is not set | ||
315 | # CONFIG_NET_CLS_ROUTE is not set | ||
316 | |||
317 | # | ||
318 | # Network testing | ||
319 | # | ||
320 | # CONFIG_NET_PKTGEN is not set | ||
321 | # CONFIG_NETPOLL is not set | ||
322 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
323 | # CONFIG_HAMRADIO is not set | ||
324 | # CONFIG_IRDA is not set | ||
325 | # CONFIG_BT is not set | ||
326 | CONFIG_NETDEVICES=y | 601 | CONFIG_NETDEVICES=y |
602 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
327 | # CONFIG_DUMMY is not set | 603 | # CONFIG_DUMMY is not set |
328 | # CONFIG_BONDING is not set | 604 | # CONFIG_BONDING is not set |
605 | # CONFIG_MACVLAN is not set | ||
329 | # CONFIG_EQUALIZER is not set | 606 | # CONFIG_EQUALIZER is not set |
330 | # CONFIG_TUN is not set | 607 | # CONFIG_TUN is not set |
331 | 608 | # CONFIG_VETH is not set | |
332 | # | 609 | # CONFIG_PHYLIB is not set |
333 | # Ethernet (10 or 100Mbit) | ||
334 | # | ||
335 | CONFIG_NET_ETHERNET=y | 610 | CONFIG_NET_ETHERNET=y |
336 | CONFIG_MII=y | 611 | CONFIG_MII=y |
337 | CONFIG_ARM_AT91_ETHER=y | 612 | CONFIG_ARM_AT91_ETHER=y |
613 | # CONFIG_AX88796 is not set | ||
338 | # CONFIG_SMC91X is not set | 614 | # CONFIG_SMC91X is not set |
339 | # CONFIG_DM9000 is not set | 615 | # CONFIG_DM9000 is not set |
616 | # CONFIG_ETHOC is not set | ||
617 | # CONFIG_SMC911X is not set | ||
618 | # CONFIG_SMSC911X is not set | ||
619 | # CONFIG_DNET is not set | ||
620 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
621 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
622 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
623 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
624 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
625 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
626 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
627 | # CONFIG_B44 is not set | ||
628 | # CONFIG_NETDEV_1000 is not set | ||
629 | # CONFIG_NETDEV_10000 is not set | ||
340 | 630 | ||
341 | # | 631 | # |
342 | # Ethernet (1000 Mbit) | 632 | # Wireless LAN |
343 | # | ||
344 | |||
345 | # | ||
346 | # Ethernet (10000 Mbit) | ||
347 | # | ||
348 | |||
349 | # | ||
350 | # Token Ring devices | ||
351 | # | 633 | # |
634 | # CONFIG_WLAN_PRE80211 is not set | ||
635 | # CONFIG_WLAN_80211 is not set | ||
352 | 636 | ||
353 | # | 637 | # |
354 | # Wireless LAN (non-hamradio) | 638 | # Enable WiMAX (Networking options) to see the WiMAX drivers |
355 | # | 639 | # |
356 | # CONFIG_NET_RADIO is not set | ||
357 | 640 | ||
358 | # | 641 | # |
359 | # Wan interfaces | 642 | # USB Network Adapters |
360 | # | 643 | # |
644 | # CONFIG_USB_CATC is not set | ||
645 | # CONFIG_USB_KAWETH is not set | ||
646 | # CONFIG_USB_PEGASUS is not set | ||
647 | # CONFIG_USB_RTL8150 is not set | ||
648 | # CONFIG_USB_USBNET is not set | ||
361 | # CONFIG_WAN is not set | 649 | # CONFIG_WAN is not set |
362 | # CONFIG_PPP is not set | 650 | # CONFIG_PPP is not set |
363 | # CONFIG_SLIP is not set | 651 | # CONFIG_SLIP is not set |
364 | 652 | # CONFIG_NETCONSOLE is not set | |
365 | # | 653 | # CONFIG_NETPOLL is not set |
366 | # ISDN subsystem | 654 | # CONFIG_NET_POLL_CONTROLLER is not set |
367 | # | ||
368 | # CONFIG_ISDN is not set | 655 | # CONFIG_ISDN is not set |
369 | 656 | ||
370 | # | 657 | # |
371 | # Input device support | 658 | # Input device support |
372 | # | 659 | # |
373 | CONFIG_INPUT=y | 660 | CONFIG_INPUT=y |
661 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
662 | # CONFIG_INPUT_POLLDEV is not set | ||
374 | 663 | ||
375 | # | 664 | # |
376 | # Userland interfaces | 665 | # Userland interfaces |
@@ -380,7 +669,6 @@ CONFIG_INPUT_MOUSEDEV=y | |||
380 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | 669 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 |
381 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | 670 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 |
382 | # CONFIG_INPUT_JOYDEV is not set | 671 | # CONFIG_INPUT_JOYDEV is not set |
383 | # CONFIG_INPUT_TSDEV is not set | ||
384 | # CONFIG_INPUT_EVDEV is not set | 672 | # CONFIG_INPUT_EVDEV is not set |
385 | # CONFIG_INPUT_EVBUG is not set | 673 | # CONFIG_INPUT_EVBUG is not set |
386 | 674 | ||
@@ -390,23 +678,25 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | |||
390 | # CONFIG_INPUT_KEYBOARD is not set | 678 | # CONFIG_INPUT_KEYBOARD is not set |
391 | # CONFIG_INPUT_MOUSE is not set | 679 | # CONFIG_INPUT_MOUSE is not set |
392 | # CONFIG_INPUT_JOYSTICK is not set | 680 | # CONFIG_INPUT_JOYSTICK is not set |
681 | # CONFIG_INPUT_TABLET is not set | ||
393 | # CONFIG_INPUT_TOUCHSCREEN is not set | 682 | # CONFIG_INPUT_TOUCHSCREEN is not set |
394 | # CONFIG_INPUT_MISC is not set | 683 | # CONFIG_INPUT_MISC is not set |
395 | 684 | ||
396 | # | 685 | # |
397 | # Hardware I/O ports | 686 | # Hardware I/O ports |
398 | # | 687 | # |
399 | CONFIG_SERIO=y | 688 | # CONFIG_SERIO is not set |
400 | # CONFIG_SERIO_SERPORT is not set | ||
401 | # CONFIG_SERIO_RAW is not set | ||
402 | # CONFIG_GAMEPORT is not set | 689 | # CONFIG_GAMEPORT is not set |
403 | 690 | ||
404 | # | 691 | # |
405 | # Character devices | 692 | # Character devices |
406 | # | 693 | # |
407 | CONFIG_VT=y | 694 | CONFIG_VT=y |
695 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
408 | CONFIG_VT_CONSOLE=y | 696 | CONFIG_VT_CONSOLE=y |
409 | CONFIG_HW_CONSOLE=y | 697 | CONFIG_HW_CONSOLE=y |
698 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
699 | CONFIG_DEVKMEM=y | ||
410 | # CONFIG_SERIAL_NONSTANDARD is not set | 700 | # CONFIG_SERIAL_NONSTANDARD is not set |
411 | 701 | ||
412 | # | 702 | # |
@@ -419,215 +709,362 @@ CONFIG_HW_CONSOLE=y | |||
419 | # | 709 | # |
420 | CONFIG_SERIAL_ATMEL=y | 710 | CONFIG_SERIAL_ATMEL=y |
421 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 711 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
712 | CONFIG_SERIAL_ATMEL_PDC=y | ||
713 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | ||
422 | CONFIG_SERIAL_CORE=y | 714 | CONFIG_SERIAL_CORE=y |
423 | CONFIG_SERIAL_CORE_CONSOLE=y | 715 | CONFIG_SERIAL_CORE_CONSOLE=y |
424 | CONFIG_UNIX98_PTYS=y | 716 | CONFIG_UNIX98_PTYS=y |
425 | CONFIG_LEGACY_PTYS=y | 717 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set |
426 | CONFIG_LEGACY_PTY_COUNT=256 | 718 | # CONFIG_LEGACY_PTYS is not set |
719 | # CONFIG_IPMI_HANDLER is not set | ||
720 | # CONFIG_HW_RANDOM is not set | ||
721 | # CONFIG_R3964 is not set | ||
722 | # CONFIG_RAW_DRIVER is not set | ||
723 | # CONFIG_TCG_TPM is not set | ||
724 | # CONFIG_I2C is not set | ||
725 | # CONFIG_SPI is not set | ||
726 | CONFIG_ARCH_REQUIRE_GPIOLIB=y | ||
727 | CONFIG_GPIOLIB=y | ||
728 | # CONFIG_DEBUG_GPIO is not set | ||
729 | # CONFIG_GPIO_SYSFS is not set | ||
427 | 730 | ||
428 | # | 731 | # |
429 | # IPMI | 732 | # Memory mapped GPIO expanders: |
430 | # | 733 | # |
431 | # CONFIG_IPMI_HANDLER is not set | ||
432 | 734 | ||
433 | # | 735 | # |
434 | # Watchdog Cards | 736 | # I2C GPIO expanders: |
435 | # | 737 | # |
436 | # CONFIG_WATCHDOG is not set | ||
437 | # CONFIG_NVRAM is not set | ||
438 | # CONFIG_RTC is not set | ||
439 | # CONFIG_AT91RM9200_RTC is not set | ||
440 | # CONFIG_DTLK is not set | ||
441 | # CONFIG_R3964 is not set | ||
442 | 738 | ||
443 | # | 739 | # |
444 | # Ftape, the floppy tape device driver | 740 | # PCI GPIO expanders: |
445 | # | 741 | # |
446 | # CONFIG_RAW_DRIVER is not set | ||
447 | 742 | ||
448 | # | 743 | # |
449 | # TPM devices | 744 | # SPI GPIO expanders: |
450 | # | 745 | # |
451 | # CONFIG_AT91_SPI is not set | 746 | # CONFIG_W1 is not set |
747 | # CONFIG_POWER_SUPPLY is not set | ||
748 | # CONFIG_HWMON is not set | ||
749 | # CONFIG_THERMAL is not set | ||
750 | # CONFIG_THERMAL_HWMON is not set | ||
751 | CONFIG_WATCHDOG=y | ||
752 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
452 | 753 | ||
453 | # | 754 | # |
454 | # I2C support | 755 | # Watchdog Device Drivers |
455 | # | 756 | # |
456 | # CONFIG_I2C is not set | 757 | # CONFIG_SOFT_WATCHDOG is not set |
758 | CONFIG_AT91RM9200_WATCHDOG=y | ||
759 | |||
760 | # | ||
761 | # USB-based Watchdog Cards | ||
762 | # | ||
763 | # CONFIG_USBPCWATCHDOG is not set | ||
764 | CONFIG_SSB_POSSIBLE=y | ||
457 | 765 | ||
458 | # | 766 | # |
459 | # Misc devices | 767 | # Sonics Silicon Backplane |
460 | # | 768 | # |
769 | # CONFIG_SSB is not set | ||
770 | |||
771 | # | ||
772 | # Multifunction device drivers | ||
773 | # | ||
774 | # CONFIG_MFD_CORE is not set | ||
775 | # CONFIG_MFD_SM501 is not set | ||
776 | # CONFIG_MFD_ASIC3 is not set | ||
777 | # CONFIG_HTC_EGPIO is not set | ||
778 | # CONFIG_HTC_PASIC3 is not set | ||
779 | # CONFIG_MFD_TMIO is not set | ||
780 | # CONFIG_MFD_T7L66XB is not set | ||
781 | # CONFIG_MFD_TC6387XB is not set | ||
782 | # CONFIG_MFD_TC6393XB is not set | ||
461 | 783 | ||
462 | # | 784 | # |
463 | # Multimedia devices | 785 | # Multimedia devices |
464 | # | 786 | # |
787 | |||
788 | # | ||
789 | # Multimedia core support | ||
790 | # | ||
465 | # CONFIG_VIDEO_DEV is not set | 791 | # CONFIG_VIDEO_DEV is not set |
792 | # CONFIG_DVB_CORE is not set | ||
793 | # CONFIG_VIDEO_MEDIA is not set | ||
466 | 794 | ||
467 | # | 795 | # |
468 | # Digital Video Broadcasting Devices | 796 | # Multimedia drivers |
469 | # | 797 | # |
470 | # CONFIG_DVB is not set | 798 | # CONFIG_DAB is not set |
471 | 799 | ||
472 | # | 800 | # |
473 | # Graphics support | 801 | # Graphics support |
474 | # | 802 | # |
475 | # CONFIG_FB is not set | 803 | # CONFIG_VGASTATE is not set |
804 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
805 | CONFIG_FB=y | ||
806 | # CONFIG_FIRMWARE_EDID is not set | ||
807 | # CONFIG_FB_DDC is not set | ||
808 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
809 | # CONFIG_FB_CFB_FILLRECT is not set | ||
810 | # CONFIG_FB_CFB_COPYAREA is not set | ||
811 | # CONFIG_FB_CFB_IMAGEBLIT is not set | ||
812 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
813 | # CONFIG_FB_SYS_FILLRECT is not set | ||
814 | # CONFIG_FB_SYS_COPYAREA is not set | ||
815 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
816 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
817 | # CONFIG_FB_SYS_FOPS is not set | ||
818 | # CONFIG_FB_SVGALIB is not set | ||
819 | # CONFIG_FB_MACMODES is not set | ||
820 | # CONFIG_FB_BACKLIGHT is not set | ||
821 | CONFIG_FB_MODE_HELPERS=y | ||
822 | CONFIG_FB_TILEBLITTING=y | ||
823 | |||
824 | # | ||
825 | # Frame buffer hardware drivers | ||
826 | # | ||
827 | # CONFIG_FB_S1D13XXX is not set | ||
828 | # CONFIG_FB_VIRTUAL is not set | ||
829 | # CONFIG_FB_METRONOME is not set | ||
830 | # CONFIG_FB_MB862XX is not set | ||
831 | # CONFIG_FB_BROADSHEET is not set | ||
832 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
833 | # CONFIG_LCD_CLASS_DEVICE is not set | ||
834 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
835 | # CONFIG_BACKLIGHT_GENERIC is not set | ||
836 | |||
837 | # | ||
838 | # Display device support | ||
839 | # | ||
840 | # CONFIG_DISPLAY_SUPPORT is not set | ||
476 | 841 | ||
477 | # | 842 | # |
478 | # Console display driver support | 843 | # Console display driver support |
479 | # | 844 | # |
480 | # CONFIG_VGA_CONSOLE is not set | 845 | # CONFIG_VGA_CONSOLE is not set |
481 | CONFIG_DUMMY_CONSOLE=y | 846 | CONFIG_DUMMY_CONSOLE=y |
482 | 847 | CONFIG_FRAMEBUFFER_CONSOLE=y | |
483 | # | 848 | # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set |
484 | # Sound | 849 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set |
485 | # | 850 | CONFIG_FONTS=y |
851 | # CONFIG_FONT_8x8 is not set | ||
852 | # CONFIG_FONT_8x16 is not set | ||
853 | # CONFIG_FONT_6x11 is not set | ||
854 | # CONFIG_FONT_7x14 is not set | ||
855 | # CONFIG_FONT_PEARL_8x8 is not set | ||
856 | # CONFIG_FONT_ACORN_8x8 is not set | ||
857 | CONFIG_FONT_MINI_4x6=y | ||
858 | # CONFIG_FONT_SUN8x16 is not set | ||
859 | # CONFIG_FONT_SUN12x22 is not set | ||
860 | # CONFIG_FONT_10x18 is not set | ||
861 | # CONFIG_LOGO is not set | ||
486 | # CONFIG_SOUND is not set | 862 | # CONFIG_SOUND is not set |
487 | 863 | # CONFIG_HID_SUPPORT is not set | |
488 | # | 864 | CONFIG_USB_SUPPORT=y |
489 | # USB support | ||
490 | # | ||
491 | CONFIG_USB_ARCH_HAS_HCD=y | 865 | CONFIG_USB_ARCH_HAS_HCD=y |
492 | CONFIG_USB_ARCH_HAS_OHCI=y | 866 | CONFIG_USB_ARCH_HAS_OHCI=y |
867 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
493 | CONFIG_USB=y | 868 | CONFIG_USB=y |
494 | CONFIG_USB_DEBUG=y | 869 | # CONFIG_USB_DEBUG is not set |
870 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
495 | 871 | ||
496 | # | 872 | # |
497 | # Miscellaneous USB options | 873 | # Miscellaneous USB options |
498 | # | 874 | # |
499 | CONFIG_USB_DEVICEFS=y | 875 | CONFIG_USB_DEVICEFS=y |
876 | CONFIG_USB_DEVICE_CLASS=y | ||
877 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
878 | # CONFIG_USB_OTG is not set | ||
879 | # CONFIG_USB_MON is not set | ||
880 | # CONFIG_USB_WUSB is not set | ||
881 | # CONFIG_USB_WUSB_CBAF is not set | ||
500 | 882 | ||
501 | # | 883 | # |
502 | # USB Host Controller Drivers | 884 | # USB Host Controller Drivers |
503 | # | 885 | # |
886 | # CONFIG_USB_C67X00_HCD is not set | ||
887 | # CONFIG_USB_OXU210HP_HCD is not set | ||
504 | # CONFIG_USB_ISP116X_HCD is not set | 888 | # CONFIG_USB_ISP116X_HCD is not set |
889 | # CONFIG_USB_ISP1760_HCD is not set | ||
505 | CONFIG_USB_OHCI_HCD=y | 890 | CONFIG_USB_OHCI_HCD=y |
506 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | 891 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set |
892 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
507 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | 893 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y |
508 | # CONFIG_USB_SL811_HCD is not set | 894 | # CONFIG_USB_SL811_HCD is not set |
895 | # CONFIG_USB_R8A66597_HCD is not set | ||
896 | # CONFIG_USB_HWA_HCD is not set | ||
897 | # CONFIG_USB_MUSB_HDRC is not set | ||
509 | 898 | ||
510 | # | 899 | # |
511 | # USB Device Class drivers | 900 | # USB Device Class drivers |
512 | # | 901 | # |
513 | # CONFIG_USB_BLUETOOTH_TTY is not set | ||
514 | # CONFIG_USB_ACM is not set | 902 | # CONFIG_USB_ACM is not set |
515 | # CONFIG_USB_PRINTER is not set | 903 | # CONFIG_USB_PRINTER is not set |
904 | # CONFIG_USB_WDM is not set | ||
905 | # CONFIG_USB_TMC is not set | ||
516 | 906 | ||
517 | # | 907 | # |
518 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information | 908 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may |
519 | # | 909 | # |
520 | CONFIG_USB_STORAGE=y | ||
521 | CONFIG_USB_STORAGE_DEBUG=y | ||
522 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
523 | # CONFIG_USB_STORAGE_DPCM is not set | ||
524 | |||
525 | # | ||
526 | # USB Input Devices | ||
527 | # | ||
528 | # CONFIG_USB_HID is not set | ||
529 | 910 | ||
530 | # | 911 | # |
531 | # USB HID Boot Protocol drivers | 912 | # also be needed; see USB_STORAGE Help for more info |
532 | # | 913 | # |
533 | # CONFIG_USB_KBD is not set | 914 | CONFIG_USB_STORAGE=y |
534 | # CONFIG_USB_MOUSE is not set | 915 | # CONFIG_USB_STORAGE_DEBUG is not set |
535 | # CONFIG_USB_AIPTEK is not set | 916 | # CONFIG_USB_STORAGE_DATAFAB is not set |
536 | # CONFIG_USB_WACOM is not set | 917 | # CONFIG_USB_STORAGE_FREECOM is not set |
537 | # CONFIG_USB_ACECAD is not set | 918 | # CONFIG_USB_STORAGE_ISD200 is not set |
538 | # CONFIG_USB_KBTAB is not set | 919 | # CONFIG_USB_STORAGE_USBAT is not set |
539 | # CONFIG_USB_POWERMATE is not set | 920 | # CONFIG_USB_STORAGE_SDDR09 is not set |
540 | # CONFIG_USB_MTOUCH is not set | 921 | # CONFIG_USB_STORAGE_SDDR55 is not set |
541 | # CONFIG_USB_ITMTOUCH is not set | 922 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
542 | # CONFIG_USB_EGALAX is not set | 923 | # CONFIG_USB_STORAGE_ALAUDA is not set |
543 | # CONFIG_USB_XPAD is not set | 924 | # CONFIG_USB_STORAGE_ONETOUCH is not set |
544 | # CONFIG_USB_ATI_REMOTE is not set | 925 | # CONFIG_USB_STORAGE_KARMA is not set |
926 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
927 | CONFIG_USB_LIBUSUAL=y | ||
545 | 928 | ||
546 | # | 929 | # |
547 | # USB Imaging devices | 930 | # USB Imaging devices |
548 | # | 931 | # |
932 | # CONFIG_USB_MDC800 is not set | ||
549 | # CONFIG_USB_MICROTEK is not set | 933 | # CONFIG_USB_MICROTEK is not set |
550 | 934 | ||
551 | # | 935 | # |
552 | # USB Multimedia devices | 936 | # USB port drivers |
553 | # | 937 | # |
554 | # CONFIG_USB_DABUSB is not set | 938 | # CONFIG_USB_SERIAL is not set |
555 | 939 | ||
556 | # | 940 | # |
557 | # Video4Linux support is needed for USB Multimedia device support | 941 | # USB Miscellaneous drivers |
558 | # | 942 | # |
943 | # CONFIG_USB_EMI62 is not set | ||
944 | # CONFIG_USB_EMI26 is not set | ||
945 | # CONFIG_USB_ADUTUX is not set | ||
946 | # CONFIG_USB_SEVSEG is not set | ||
947 | # CONFIG_USB_RIO500 is not set | ||
948 | # CONFIG_USB_LEGOTOWER is not set | ||
949 | # CONFIG_USB_LCD is not set | ||
950 | # CONFIG_USB_BERRY_CHARGE is not set | ||
951 | # CONFIG_USB_LED is not set | ||
952 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
953 | # CONFIG_USB_CYTHERM is not set | ||
954 | # CONFIG_USB_IDMOUSE is not set | ||
955 | # CONFIG_USB_FTDI_ELAN is not set | ||
956 | # CONFIG_USB_APPLEDISPLAY is not set | ||
957 | # CONFIG_USB_LD is not set | ||
958 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
959 | # CONFIG_USB_IOWARRIOR is not set | ||
960 | # CONFIG_USB_TEST is not set | ||
961 | # CONFIG_USB_ISIGHTFW is not set | ||
962 | # CONFIG_USB_VST is not set | ||
963 | # CONFIG_USB_GADGET is not set | ||
559 | 964 | ||
560 | # | 965 | # |
561 | # USB Network Adapters | 966 | # OTG and related infrastructure |
562 | # | 967 | # |
563 | # CONFIG_USB_KAWETH is not set | 968 | # CONFIG_USB_GPIO_VBUS is not set |
564 | # CONFIG_USB_PEGASUS is not set | 969 | # CONFIG_NOP_USB_XCEIV is not set |
565 | # CONFIG_USB_USBNET is not set | 970 | CONFIG_MMC=y |
566 | # CONFIG_USB_MON is not set | 971 | # CONFIG_MMC_DEBUG is not set |
972 | # CONFIG_MMC_UNSAFE_RESUME is not set | ||
567 | 973 | ||
568 | # | 974 | # |
569 | # USB port drivers | 975 | # MMC/SD/SDIO Card Drivers |
570 | # | 976 | # |
977 | CONFIG_MMC_BLOCK=y | ||
978 | CONFIG_MMC_BLOCK_BOUNCE=y | ||
979 | # CONFIG_SDIO_UART is not set | ||
980 | # CONFIG_MMC_TEST is not set | ||
571 | 981 | ||
572 | # | 982 | # |
573 | # USB Serial Converter support | 983 | # MMC/SD/SDIO Host Controller Drivers |
574 | # | 984 | # |
575 | # CONFIG_USB_SERIAL is not set | 985 | # CONFIG_MMC_SDHCI is not set |
986 | CONFIG_MMC_AT91=y | ||
987 | # CONFIG_MEMSTICK is not set | ||
988 | # CONFIG_ACCESSIBILITY is not set | ||
989 | # CONFIG_NEW_LEDS is not set | ||
990 | CONFIG_RTC_LIB=y | ||
991 | CONFIG_RTC_CLASS=y | ||
992 | CONFIG_RTC_HCTOSYS=y | ||
993 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
994 | # CONFIG_RTC_DEBUG is not set | ||
576 | 995 | ||
577 | # | 996 | # |
578 | # USB Miscellaneous drivers | 997 | # RTC interfaces |
579 | # | 998 | # |
580 | # CONFIG_USB_EMI62 is not set | 999 | CONFIG_RTC_INTF_SYSFS=y |
581 | # CONFIG_USB_EMI26 is not set | 1000 | CONFIG_RTC_INTF_PROC=y |
582 | # CONFIG_USB_LCD is not set | 1001 | CONFIG_RTC_INTF_DEV=y |
583 | # CONFIG_USB_LED is not set | 1002 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set |
584 | # CONFIG_USB_CYTHERM is not set | 1003 | # CONFIG_RTC_DRV_TEST is not set |
585 | # CONFIG_USB_PHIDGETKIT is not set | ||
586 | # CONFIG_USB_PHIDGETSERVO is not set | ||
587 | # CONFIG_USB_IDMOUSE is not set | ||
588 | 1004 | ||
589 | # | 1005 | # |
590 | # USB DSL modem support | 1006 | # SPI RTC drivers |
591 | # | 1007 | # |
592 | 1008 | ||
593 | # | 1009 | # |
594 | # USB Gadget Support | 1010 | # Platform RTC drivers |
595 | # | 1011 | # |
596 | # CONFIG_USB_GADGET is not set | 1012 | # CONFIG_RTC_DRV_CMOS is not set |
1013 | # CONFIG_RTC_DRV_DS1286 is not set | ||
1014 | # CONFIG_RTC_DRV_DS1511 is not set | ||
1015 | # CONFIG_RTC_DRV_DS1553 is not set | ||
1016 | # CONFIG_RTC_DRV_DS1742 is not set | ||
1017 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
1018 | # CONFIG_RTC_DRV_M48T86 is not set | ||
1019 | # CONFIG_RTC_DRV_M48T35 is not set | ||
1020 | # CONFIG_RTC_DRV_M48T59 is not set | ||
1021 | # CONFIG_RTC_DRV_BQ4802 is not set | ||
1022 | # CONFIG_RTC_DRV_V3020 is not set | ||
597 | 1023 | ||
598 | # | 1024 | # |
599 | # MMC/SD Card support | 1025 | # on-CPU RTC drivers |
600 | # | 1026 | # |
601 | # CONFIG_MMC is not set | 1027 | CONFIG_RTC_DRV_AT91RM9200=y |
1028 | # CONFIG_DMADEVICES is not set | ||
1029 | # CONFIG_AUXDISPLAY is not set | ||
1030 | # CONFIG_REGULATOR is not set | ||
1031 | # CONFIG_UIO is not set | ||
1032 | # CONFIG_STAGING is not set | ||
602 | 1033 | ||
603 | # | 1034 | # |
604 | # File systems | 1035 | # File systems |
605 | # | 1036 | # |
606 | CONFIG_EXT2_FS=y | 1037 | CONFIG_EXT2_FS=y |
607 | CONFIG_EXT2_FS_XATTR=y | 1038 | # CONFIG_EXT2_FS_XATTR is not set |
608 | # CONFIG_EXT2_FS_POSIX_ACL is not set | ||
609 | # CONFIG_EXT2_FS_SECURITY is not set | ||
610 | # CONFIG_EXT2_FS_XIP is not set | 1039 | # CONFIG_EXT2_FS_XIP is not set |
611 | CONFIG_EXT3_FS=y | 1040 | CONFIG_EXT3_FS=y |
1041 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
612 | CONFIG_EXT3_FS_XATTR=y | 1042 | CONFIG_EXT3_FS_XATTR=y |
613 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 1043 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
614 | # CONFIG_EXT3_FS_SECURITY is not set | 1044 | # CONFIG_EXT3_FS_SECURITY is not set |
1045 | # CONFIG_EXT4_FS is not set | ||
615 | CONFIG_JBD=y | 1046 | CONFIG_JBD=y |
616 | # CONFIG_JBD_DEBUG is not set | 1047 | # CONFIG_JBD_DEBUG is not set |
617 | CONFIG_FS_MBCACHE=y | 1048 | CONFIG_FS_MBCACHE=y |
618 | # CONFIG_REISERFS_FS is not set | 1049 | # CONFIG_REISERFS_FS is not set |
619 | # CONFIG_JFS_FS is not set | 1050 | # CONFIG_JFS_FS is not set |
1051 | # CONFIG_FS_POSIX_ACL is not set | ||
1052 | CONFIG_FILE_LOCKING=y | ||
1053 | # CONFIG_XFS_FS is not set | ||
1054 | # CONFIG_OCFS2_FS is not set | ||
1055 | # CONFIG_BTRFS_FS is not set | ||
1056 | # CONFIG_DNOTIFY is not set | ||
1057 | CONFIG_INOTIFY=y | ||
1058 | CONFIG_INOTIFY_USER=y | ||
1059 | # CONFIG_QUOTA is not set | ||
1060 | # CONFIG_AUTOFS_FS is not set | ||
1061 | # CONFIG_AUTOFS4_FS is not set | ||
1062 | # CONFIG_FUSE_FS is not set | ||
620 | 1063 | ||
621 | # | 1064 | # |
622 | # XFS support | 1065 | # Caches |
623 | # | 1066 | # |
624 | # CONFIG_XFS_FS is not set | 1067 | # CONFIG_FSCACHE is not set |
625 | # CONFIG_MINIX_FS is not set | ||
626 | # CONFIG_ROMFS_FS is not set | ||
627 | # CONFIG_QUOTA is not set | ||
628 | CONFIG_DNOTIFY=y | ||
629 | CONFIG_AUTOFS_FS=y | ||
630 | CONFIG_AUTOFS4_FS=y | ||
631 | 1068 | ||
632 | # | 1069 | # |
633 | # CD-ROM/DVD Filesystems | 1070 | # CD-ROM/DVD Filesystems |
@@ -639,7 +1076,7 @@ CONFIG_AUTOFS4_FS=y | |||
639 | # DOS/FAT/NT Filesystems | 1076 | # DOS/FAT/NT Filesystems |
640 | # | 1077 | # |
641 | CONFIG_FAT_FS=y | 1078 | CONFIG_FAT_FS=y |
642 | CONFIG_MSDOS_FS=y | 1079 | # CONFIG_MSDOS_FS is not set |
643 | CONFIG_VFAT_FS=y | 1080 | CONFIG_VFAT_FS=y |
644 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 1081 | CONFIG_FAT_DEFAULT_CODEPAGE=437 |
645 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 1082 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" |
@@ -649,53 +1086,70 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
649 | # Pseudo filesystems | 1086 | # Pseudo filesystems |
650 | # | 1087 | # |
651 | CONFIG_PROC_FS=y | 1088 | CONFIG_PROC_FS=y |
1089 | CONFIG_PROC_SYSCTL=y | ||
1090 | CONFIG_PROC_PAGE_MONITOR=y | ||
652 | CONFIG_SYSFS=y | 1091 | CONFIG_SYSFS=y |
653 | CONFIG_DEVPTS_FS_XATTR=y | ||
654 | # CONFIG_DEVPTS_FS_SECURITY is not set | ||
655 | CONFIG_TMPFS=y | 1092 | CONFIG_TMPFS=y |
656 | # CONFIG_TMPFS_XATTR is not set | 1093 | # CONFIG_TMPFS_POSIX_ACL is not set |
657 | # CONFIG_HUGETLB_PAGE is not set | 1094 | # CONFIG_HUGETLB_PAGE is not set |
658 | CONFIG_RAMFS=y | 1095 | CONFIG_CONFIGFS_FS=y |
659 | 1096 | CONFIG_MISC_FILESYSTEMS=y | |
660 | # | 1097 | # CONFIG_ADFS_FS is not set |
661 | # Miscellaneous filesystems | 1098 | # CONFIG_AFFS_FS is not set |
662 | # | 1099 | # CONFIG_HFS_FS is not set |
663 | # CONFIG_HFSPLUS_FS is not set | 1100 | # CONFIG_HFSPLUS_FS is not set |
1101 | # CONFIG_BEFS_FS is not set | ||
1102 | # CONFIG_BFS_FS is not set | ||
1103 | # CONFIG_EFS_FS is not set | ||
1104 | CONFIG_JFFS2_FS=y | ||
1105 | CONFIG_JFFS2_FS_DEBUG=0 | ||
1106 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
1107 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
1108 | # CONFIG_JFFS2_SUMMARY is not set | ||
1109 | # CONFIG_JFFS2_FS_XATTR is not set | ||
1110 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
1111 | CONFIG_JFFS2_ZLIB=y | ||
1112 | # CONFIG_JFFS2_LZO is not set | ||
1113 | CONFIG_JFFS2_RTIME=y | ||
1114 | # CONFIG_JFFS2_RUBIN is not set | ||
1115 | # CONFIG_UBIFS_FS is not set | ||
664 | # CONFIG_CRAMFS is not set | 1116 | # CONFIG_CRAMFS is not set |
1117 | # CONFIG_SQUASHFS is not set | ||
665 | # CONFIG_VXFS_FS is not set | 1118 | # CONFIG_VXFS_FS is not set |
1119 | # CONFIG_MINIX_FS is not set | ||
1120 | # CONFIG_OMFS_FS is not set | ||
666 | # CONFIG_HPFS_FS is not set | 1121 | # CONFIG_HPFS_FS is not set |
667 | # CONFIG_QNX4FS_FS is not set | 1122 | # CONFIG_QNX4FS_FS is not set |
1123 | # CONFIG_ROMFS_FS is not set | ||
668 | # CONFIG_SYSV_FS is not set | 1124 | # CONFIG_SYSV_FS is not set |
669 | # CONFIG_UFS_FS is not set | 1125 | # CONFIG_UFS_FS is not set |
670 | 1126 | # CONFIG_NILFS2_FS is not set | |
671 | # | 1127 | CONFIG_NETWORK_FILESYSTEMS=y |
672 | # Network File Systems | ||
673 | # | ||
674 | CONFIG_NFS_FS=y | 1128 | CONFIG_NFS_FS=y |
675 | CONFIG_NFS_V3=y | 1129 | CONFIG_NFS_V3=y |
676 | # CONFIG_NFS_V3_ACL is not set | 1130 | # CONFIG_NFS_V3_ACL is not set |
677 | # CONFIG_NFSD is not set | 1131 | # CONFIG_NFS_V4 is not set |
678 | CONFIG_ROOT_NFS=y | 1132 | CONFIG_ROOT_NFS=y |
1133 | # CONFIG_NFSD is not set | ||
679 | CONFIG_LOCKD=y | 1134 | CONFIG_LOCKD=y |
680 | CONFIG_LOCKD_V4=y | 1135 | CONFIG_LOCKD_V4=y |
681 | CONFIG_NFS_COMMON=y | 1136 | CONFIG_NFS_COMMON=y |
682 | CONFIG_SUNRPC=y | 1137 | CONFIG_SUNRPC=y |
1138 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
1139 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
683 | # CONFIG_SMB_FS is not set | 1140 | # CONFIG_SMB_FS is not set |
684 | # CONFIG_CIFS is not set | 1141 | # CONFIG_CIFS is not set |
685 | # CONFIG_NCP_FS is not set | 1142 | # CONFIG_NCP_FS is not set |
686 | # CONFIG_CODA_FS is not set | 1143 | # CONFIG_CODA_FS is not set |
1144 | # CONFIG_AFS_FS is not set | ||
687 | 1145 | ||
688 | # | 1146 | # |
689 | # Partition Types | 1147 | # Partition Types |
690 | # | 1148 | # |
691 | # CONFIG_PARTITION_ADVANCED is not set | 1149 | # CONFIG_PARTITION_ADVANCED is not set |
692 | CONFIG_MSDOS_PARTITION=y | 1150 | CONFIG_MSDOS_PARTITION=y |
693 | |||
694 | # | ||
695 | # Native Language Support | ||
696 | # | ||
697 | CONFIG_NLS=y | 1151 | CONFIG_NLS=y |
698 | CONFIG_NLS_DEFAULT="utf8" | 1152 | CONFIG_NLS_DEFAULT="iso8859-1" |
699 | CONFIG_NLS_CODEPAGE_437=y | 1153 | CONFIG_NLS_CODEPAGE_437=y |
700 | # CONFIG_NLS_CODEPAGE_737 is not set | 1154 | # CONFIG_NLS_CODEPAGE_737 is not set |
701 | # CONFIG_NLS_CODEPAGE_775 is not set | 1155 | # CONFIG_NLS_CODEPAGE_775 is not set |
@@ -719,7 +1173,7 @@ CONFIG_NLS_CODEPAGE_437=y | |||
719 | # CONFIG_NLS_ISO8859_8 is not set | 1173 | # CONFIG_NLS_ISO8859_8 is not set |
720 | # CONFIG_NLS_CODEPAGE_1250 is not set | 1174 | # CONFIG_NLS_CODEPAGE_1250 is not set |
721 | # CONFIG_NLS_CODEPAGE_1251 is not set | 1175 | # CONFIG_NLS_CODEPAGE_1251 is not set |
722 | CONFIG_NLS_ASCII=y | 1176 | # CONFIG_NLS_ASCII is not set |
723 | # CONFIG_NLS_ISO8859_1 is not set | 1177 | # CONFIG_NLS_ISO8859_1 is not set |
724 | # CONFIG_NLS_ISO8859_2 is not set | 1178 | # CONFIG_NLS_ISO8859_2 is not set |
725 | # CONFIG_NLS_ISO8859_3 is not set | 1179 | # CONFIG_NLS_ISO8859_3 is not set |
@@ -733,47 +1187,119 @@ CONFIG_NLS_ASCII=y | |||
733 | # CONFIG_NLS_ISO8859_15 is not set | 1187 | # CONFIG_NLS_ISO8859_15 is not set |
734 | # CONFIG_NLS_KOI8_R is not set | 1188 | # CONFIG_NLS_KOI8_R is not set |
735 | # CONFIG_NLS_KOI8_U is not set | 1189 | # CONFIG_NLS_KOI8_U is not set |
736 | # CONFIG_NLS_UTF8 is not set | 1190 | CONFIG_NLS_UTF8=y |
1191 | # CONFIG_DLM is not set | ||
737 | 1192 | ||
738 | # | 1193 | # |
739 | # Kernel hacking | 1194 | # Kernel hacking |
740 | # | 1195 | # |
741 | # CONFIG_PRINTK_TIME is not set | 1196 | # CONFIG_PRINTK_TIME is not set |
1197 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1198 | CONFIG_ENABLE_MUST_CHECK=y | ||
1199 | CONFIG_FRAME_WARN=1024 | ||
1200 | CONFIG_MAGIC_SYSRQ=y | ||
1201 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1202 | CONFIG_DEBUG_FS=y | ||
1203 | # CONFIG_HEADERS_CHECK is not set | ||
742 | CONFIG_DEBUG_KERNEL=y | 1204 | CONFIG_DEBUG_KERNEL=y |
743 | # CONFIG_MAGIC_SYSRQ is not set | 1205 | # CONFIG_DEBUG_SHIRQ is not set |
744 | CONFIG_LOG_BUF_SHIFT=14 | 1206 | CONFIG_DETECT_SOFTLOCKUP=y |
1207 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
1208 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
1209 | CONFIG_DETECT_HUNG_TASK=y | ||
1210 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
1211 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
1212 | # CONFIG_SCHED_DEBUG is not set | ||
745 | # CONFIG_SCHEDSTATS is not set | 1213 | # CONFIG_SCHEDSTATS is not set |
746 | # CONFIG_DEBUG_SLAB is not set | 1214 | # CONFIG_TIMER_STATS is not set |
1215 | # CONFIG_DEBUG_OBJECTS is not set | ||
1216 | # CONFIG_SLUB_DEBUG_ON is not set | ||
1217 | # CONFIG_SLUB_STATS is not set | ||
1218 | # CONFIG_DEBUG_PREEMPT is not set | ||
1219 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1220 | # CONFIG_RT_MUTEX_TESTER is not set | ||
747 | # CONFIG_DEBUG_SPINLOCK is not set | 1221 | # CONFIG_DEBUG_SPINLOCK is not set |
1222 | # CONFIG_DEBUG_MUTEXES is not set | ||
1223 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1224 | # CONFIG_PROVE_LOCKING is not set | ||
1225 | # CONFIG_LOCK_STAT is not set | ||
748 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1226 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1227 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
749 | # CONFIG_DEBUG_KOBJECT is not set | 1228 | # CONFIG_DEBUG_KOBJECT is not set |
750 | CONFIG_DEBUG_BUGVERBOSE=y | 1229 | CONFIG_DEBUG_BUGVERBOSE=y |
751 | # CONFIG_DEBUG_INFO is not set | 1230 | # CONFIG_DEBUG_INFO is not set |
752 | # CONFIG_DEBUG_FS is not set | 1231 | # CONFIG_DEBUG_VM is not set |
753 | CONFIG_FRAME_POINTER=y | 1232 | # CONFIG_DEBUG_WRITECOUNT is not set |
754 | CONFIG_DEBUG_USER=y | 1233 | CONFIG_DEBUG_MEMORY_INIT=y |
755 | CONFIG_DEBUG_ERRORS=y | 1234 | # CONFIG_DEBUG_LIST is not set |
756 | CONFIG_DEBUG_LL=y | 1235 | # CONFIG_DEBUG_SG is not set |
757 | # CONFIG_DEBUG_ICEDCC is not set | 1236 | # CONFIG_DEBUG_NOTIFIERS is not set |
1237 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
1238 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1239 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
1240 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1241 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
1242 | # CONFIG_FAULT_INJECTION is not set | ||
1243 | # CONFIG_LATENCYTOP is not set | ||
1244 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
1245 | # CONFIG_PAGE_POISONING is not set | ||
1246 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
1247 | CONFIG_TRACING_SUPPORT=y | ||
1248 | |||
1249 | # | ||
1250 | # Tracers | ||
1251 | # | ||
1252 | # CONFIG_FUNCTION_TRACER is not set | ||
1253 | # CONFIG_IRQSOFF_TRACER is not set | ||
1254 | # CONFIG_PREEMPT_TRACER is not set | ||
1255 | # CONFIG_SCHED_TRACER is not set | ||
1256 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | ||
1257 | # CONFIG_EVENT_TRACER is not set | ||
1258 | # CONFIG_BOOT_TRACER is not set | ||
1259 | # CONFIG_TRACE_BRANCH_PROFILING is not set | ||
1260 | # CONFIG_STACK_TRACER is not set | ||
1261 | # CONFIG_KMEMTRACE is not set | ||
1262 | # CONFIG_WORKQUEUE_TRACER is not set | ||
1263 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
1264 | # CONFIG_DYNAMIC_DEBUG is not set | ||
1265 | # CONFIG_SAMPLES is not set | ||
1266 | CONFIG_HAVE_ARCH_KGDB=y | ||
1267 | # CONFIG_KGDB is not set | ||
1268 | CONFIG_ARM_UNWIND=y | ||
1269 | # CONFIG_DEBUG_USER is not set | ||
1270 | # CONFIG_DEBUG_ERRORS is not set | ||
1271 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1272 | # CONFIG_DEBUG_LL is not set | ||
758 | 1273 | ||
759 | # | 1274 | # |
760 | # Security options | 1275 | # Security options |
761 | # | 1276 | # |
762 | # CONFIG_KEYS is not set | 1277 | # CONFIG_KEYS is not set |
763 | # CONFIG_SECURITY is not set | 1278 | # CONFIG_SECURITY is not set |
764 | 1279 | # CONFIG_SECURITYFS is not set | |
765 | # | 1280 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
766 | # Cryptographic options | ||
767 | # | ||
768 | # CONFIG_CRYPTO is not set | 1281 | # CONFIG_CRYPTO is not set |
769 | 1282 | # CONFIG_BINARY_PRINTF is not set | |
770 | # | ||
771 | # Hardware crypto devices | ||
772 | # | ||
773 | 1283 | ||
774 | # | 1284 | # |
775 | # Library routines | 1285 | # Library routines |
776 | # | 1286 | # |
1287 | CONFIG_BITREVERSE=y | ||
1288 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
777 | # CONFIG_CRC_CCITT is not set | 1289 | # CONFIG_CRC_CCITT is not set |
1290 | # CONFIG_CRC16 is not set | ||
1291 | # CONFIG_CRC_T10DIF is not set | ||
1292 | # CONFIG_CRC_ITU_T is not set | ||
778 | CONFIG_CRC32=y | 1293 | CONFIG_CRC32=y |
1294 | # CONFIG_CRC7 is not set | ||
779 | # CONFIG_LIBCRC32C is not set | 1295 | # CONFIG_LIBCRC32C is not set |
1296 | CONFIG_AUDIT_GENERIC=y | ||
1297 | CONFIG_ZLIB_INFLATE=y | ||
1298 | CONFIG_ZLIB_DEFLATE=y | ||
1299 | CONFIG_DECOMPRESS_GZIP=y | ||
1300 | CONFIG_DECOMPRESS_BZIP2=y | ||
1301 | CONFIG_DECOMPRESS_LZMA=y | ||
1302 | CONFIG_HAS_IOMEM=y | ||
1303 | CONFIG_HAS_IOPORT=y | ||
1304 | CONFIG_HAS_DMA=y | ||
1305 | CONFIG_NLATTR=y | ||
diff --git a/arch/arm/configs/mini2440_defconfig b/arch/arm/configs/mini2440_defconfig new file mode 100644 index 000000000000..e49ed40f3be7 --- /dev/null +++ b/arch/arm/configs/mini2440_defconfig | |||
@@ -0,0 +1,2097 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.30-rc6 | ||
4 | # Wed May 20 12:29:51 2009 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_HAVE_PWM=y | ||
8 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
9 | CONFIG_GENERIC_GPIO=y | ||
10 | # CONFIG_GENERIC_TIME is not set | ||
11 | # CONFIG_GENERIC_CLOCKEVENTS is not set | ||
12 | CONFIG_MMU=y | ||
13 | CONFIG_NO_IOPORT=y | ||
14 | CONFIG_GENERIC_HARDIRQS=y | ||
15 | CONFIG_STACKTRACE_SUPPORT=y | ||
16 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
17 | CONFIG_LOCKDEP_SUPPORT=y | ||
18 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
19 | CONFIG_HARDIRQS_SW_RESEND=y | ||
20 | CONFIG_GENERIC_IRQ_PROBE=y | ||
21 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
22 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
23 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
24 | CONFIG_GENERIC_HWEIGHT=y | ||
25 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
26 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
27 | CONFIG_VECTORS_BASE=0xffff0000 | ||
28 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
29 | |||
30 | # | ||
31 | # General setup | ||
32 | # | ||
33 | CONFIG_EXPERIMENTAL=y | ||
34 | CONFIG_BROKEN_ON_SMP=y | ||
35 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
36 | CONFIG_LOCALVERSION="" | ||
37 | # CONFIG_LOCALVERSION_AUTO is not set | ||
38 | CONFIG_SWAP=y | ||
39 | CONFIG_SYSVIPC=y | ||
40 | CONFIG_SYSVIPC_SYSCTL=y | ||
41 | CONFIG_POSIX_MQUEUE=y | ||
42 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
43 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
44 | # CONFIG_TASKSTATS is not set | ||
45 | # CONFIG_AUDIT is not set | ||
46 | |||
47 | # | ||
48 | # RCU Subsystem | ||
49 | # | ||
50 | CONFIG_CLASSIC_RCU=y | ||
51 | # CONFIG_TREE_RCU is not set | ||
52 | # CONFIG_PREEMPT_RCU is not set | ||
53 | # CONFIG_TREE_RCU_TRACE is not set | ||
54 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
55 | # CONFIG_IKCONFIG is not set | ||
56 | CONFIG_LOG_BUF_SHIFT=17 | ||
57 | # CONFIG_GROUP_SCHED is not set | ||
58 | # CONFIG_CGROUPS is not set | ||
59 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
60 | CONFIG_RELAY=y | ||
61 | CONFIG_NAMESPACES=y | ||
62 | CONFIG_UTS_NS=y | ||
63 | CONFIG_IPC_NS=y | ||
64 | # CONFIG_USER_NS is not set | ||
65 | # CONFIG_PID_NS is not set | ||
66 | # CONFIG_NET_NS is not set | ||
67 | CONFIG_BLK_DEV_INITRD=y | ||
68 | CONFIG_INITRAMFS_SOURCE="" | ||
69 | CONFIG_RD_GZIP=y | ||
70 | CONFIG_RD_BZIP2=y | ||
71 | CONFIG_RD_LZMA=y | ||
72 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
73 | CONFIG_SYSCTL=y | ||
74 | CONFIG_ANON_INODES=y | ||
75 | # CONFIG_EMBEDDED is not set | ||
76 | CONFIG_UID16=y | ||
77 | CONFIG_SYSCTL_SYSCALL=y | ||
78 | CONFIG_KALLSYMS=y | ||
79 | # CONFIG_KALLSYMS_ALL is not set | ||
80 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
81 | CONFIG_STRIP_ASM_SYMS=y | ||
82 | CONFIG_HOTPLUG=y | ||
83 | CONFIG_PRINTK=y | ||
84 | CONFIG_BUG=y | ||
85 | CONFIG_ELF_CORE=y | ||
86 | CONFIG_BASE_FULL=y | ||
87 | CONFIG_FUTEX=y | ||
88 | CONFIG_EPOLL=y | ||
89 | CONFIG_SIGNALFD=y | ||
90 | CONFIG_TIMERFD=y | ||
91 | CONFIG_EVENTFD=y | ||
92 | CONFIG_SHMEM=y | ||
93 | CONFIG_AIO=y | ||
94 | CONFIG_VM_EVENT_COUNTERS=y | ||
95 | CONFIG_SLUB_DEBUG=y | ||
96 | # CONFIG_COMPAT_BRK is not set | ||
97 | # CONFIG_SLAB is not set | ||
98 | CONFIG_SLUB=y | ||
99 | # CONFIG_SLOB is not set | ||
100 | # CONFIG_PROFILING is not set | ||
101 | # CONFIG_MARKERS is not set | ||
102 | CONFIG_HAVE_OPROFILE=y | ||
103 | # CONFIG_KPROBES is not set | ||
104 | CONFIG_HAVE_KPROBES=y | ||
105 | CONFIG_HAVE_KRETPROBES=y | ||
106 | CONFIG_HAVE_CLK=y | ||
107 | # CONFIG_SLOW_WORK is not set | ||
108 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
109 | CONFIG_SLABINFO=y | ||
110 | CONFIG_RT_MUTEXES=y | ||
111 | CONFIG_BASE_SMALL=0 | ||
112 | CONFIG_MODULES=y | ||
113 | CONFIG_MODULE_FORCE_LOAD=y | ||
114 | CONFIG_MODULE_UNLOAD=y | ||
115 | CONFIG_MODULE_FORCE_UNLOAD=y | ||
116 | # CONFIG_MODVERSIONS is not set | ||
117 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
118 | CONFIG_BLOCK=y | ||
119 | CONFIG_LBD=y | ||
120 | # CONFIG_BLK_DEV_BSG is not set | ||
121 | CONFIG_BLK_DEV_INTEGRITY=y | ||
122 | |||
123 | # | ||
124 | # IO Schedulers | ||
125 | # | ||
126 | CONFIG_IOSCHED_NOOP=y | ||
127 | CONFIG_IOSCHED_AS=y | ||
128 | CONFIG_IOSCHED_DEADLINE=y | ||
129 | CONFIG_IOSCHED_CFQ=y | ||
130 | CONFIG_DEFAULT_AS=y | ||
131 | # CONFIG_DEFAULT_DEADLINE is not set | ||
132 | # CONFIG_DEFAULT_CFQ is not set | ||
133 | # CONFIG_DEFAULT_NOOP is not set | ||
134 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
135 | CONFIG_FREEZER=y | ||
136 | |||
137 | # | ||
138 | # System Type | ||
139 | # | ||
140 | # CONFIG_ARCH_AAEC2000 is not set | ||
141 | # CONFIG_ARCH_INTEGRATOR is not set | ||
142 | # CONFIG_ARCH_REALVIEW is not set | ||
143 | # CONFIG_ARCH_VERSATILE is not set | ||
144 | # CONFIG_ARCH_AT91 is not set | ||
145 | # CONFIG_ARCH_CLPS711X is not set | ||
146 | # CONFIG_ARCH_EBSA110 is not set | ||
147 | # CONFIG_ARCH_EP93XX is not set | ||
148 | # CONFIG_ARCH_GEMINI is not set | ||
149 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
150 | # CONFIG_ARCH_NETX is not set | ||
151 | # CONFIG_ARCH_H720X is not set | ||
152 | # CONFIG_ARCH_IMX is not set | ||
153 | # CONFIG_ARCH_IOP13XX is not set | ||
154 | # CONFIG_ARCH_IOP32X is not set | ||
155 | # CONFIG_ARCH_IOP33X is not set | ||
156 | # CONFIG_ARCH_IXP23XX is not set | ||
157 | # CONFIG_ARCH_IXP2000 is not set | ||
158 | # CONFIG_ARCH_IXP4XX is not set | ||
159 | # CONFIG_ARCH_L7200 is not set | ||
160 | # CONFIG_ARCH_KIRKWOOD is not set | ||
161 | # CONFIG_ARCH_KS8695 is not set | ||
162 | # CONFIG_ARCH_NS9XXX is not set | ||
163 | # CONFIG_ARCH_LOKI is not set | ||
164 | # CONFIG_ARCH_MV78XX0 is not set | ||
165 | # CONFIG_ARCH_MXC is not set | ||
166 | # CONFIG_ARCH_ORION5X is not set | ||
167 | # CONFIG_ARCH_PNX4008 is not set | ||
168 | # CONFIG_ARCH_PXA is not set | ||
169 | # CONFIG_ARCH_MMP is not set | ||
170 | # CONFIG_ARCH_RPC is not set | ||
171 | # CONFIG_ARCH_SA1100 is not set | ||
172 | CONFIG_ARCH_S3C2410=y | ||
173 | # CONFIG_ARCH_S3C64XX is not set | ||
174 | # CONFIG_ARCH_SHARK is not set | ||
175 | # CONFIG_ARCH_LH7A40X is not set | ||
176 | # CONFIG_ARCH_DAVINCI is not set | ||
177 | # CONFIG_ARCH_OMAP is not set | ||
178 | # CONFIG_ARCH_MSM is not set | ||
179 | # CONFIG_ARCH_W90X900 is not set | ||
180 | CONFIG_PLAT_S3C24XX=y | ||
181 | CONFIG_S3C2410_CLOCK=y | ||
182 | CONFIG_CPU_S3C244X=y | ||
183 | CONFIG_S3C24XX_PWM=y | ||
184 | CONFIG_S3C24XX_GPIO_EXTRA=0 | ||
185 | CONFIG_S3C2410_DMA=y | ||
186 | # CONFIG_S3C2410_DMA_DEBUG is not set | ||
187 | CONFIG_S3C24XX_ADC=y | ||
188 | CONFIG_PLAT_S3C=y | ||
189 | CONFIG_CPU_LLSERIAL_S3C2440_ONLY=y | ||
190 | CONFIG_CPU_LLSERIAL_S3C2440=y | ||
191 | |||
192 | # | ||
193 | # Boot options | ||
194 | # | ||
195 | # CONFIG_S3C_BOOT_WATCHDOG is not set | ||
196 | # CONFIG_S3C_BOOT_ERROR_RESET is not set | ||
197 | CONFIG_S3C_BOOT_UART_FORCE_FIFO=y | ||
198 | |||
199 | # | ||
200 | # Power management | ||
201 | # | ||
202 | # CONFIG_S3C2410_PM_DEBUG is not set | ||
203 | # CONFIG_S3C2410_PM_CHECK is not set | ||
204 | CONFIG_S3C_LOWLEVEL_UART_PORT=0 | ||
205 | CONFIG_S3C_GPIO_SPACE=0 | ||
206 | |||
207 | # | ||
208 | # S3C2400 Machines | ||
209 | # | ||
210 | CONFIG_S3C2410_PM=y | ||
211 | CONFIG_S3C2410_GPIO=y | ||
212 | |||
213 | # | ||
214 | # S3C2410 Machines | ||
215 | # | ||
216 | # CONFIG_ARCH_SMDK2410 is not set | ||
217 | # CONFIG_ARCH_H1940 is not set | ||
218 | # CONFIG_MACH_N30 is not set | ||
219 | # CONFIG_ARCH_BAST is not set | ||
220 | # CONFIG_MACH_OTOM is not set | ||
221 | # CONFIG_MACH_AML_M5900 is not set | ||
222 | # CONFIG_MACH_TCT_HAMMER is not set | ||
223 | # CONFIG_MACH_VR1000 is not set | ||
224 | # CONFIG_MACH_QT2410 is not set | ||
225 | |||
226 | # | ||
227 | # S3C2412 Machines | ||
228 | # | ||
229 | # CONFIG_MACH_JIVE is not set | ||
230 | # CONFIG_MACH_SMDK2413 is not set | ||
231 | # CONFIG_MACH_SMDK2412 is not set | ||
232 | # CONFIG_MACH_VSTMS is not set | ||
233 | CONFIG_CPU_S3C2440=y | ||
234 | CONFIG_S3C2440_DMA=y | ||
235 | |||
236 | # | ||
237 | # S3C2440 Machines | ||
238 | # | ||
239 | # CONFIG_MACH_ANUBIS is not set | ||
240 | # CONFIG_MACH_OSIRIS is not set | ||
241 | # CONFIG_MACH_RX3715 is not set | ||
242 | # CONFIG_ARCH_S3C2440 is not set | ||
243 | # CONFIG_MACH_NEXCODER_2440 is not set | ||
244 | # CONFIG_MACH_AT2440EVB is not set | ||
245 | CONFIG_MACH_MINI2440=y | ||
246 | |||
247 | # | ||
248 | # S3C2442 Machines | ||
249 | # | ||
250 | |||
251 | # | ||
252 | # S3C2443 Machines | ||
253 | # | ||
254 | # CONFIG_MACH_SMDK2443 is not set | ||
255 | |||
256 | # | ||
257 | # Processor Type | ||
258 | # | ||
259 | CONFIG_CPU_32=y | ||
260 | CONFIG_CPU_ARM920T=y | ||
261 | CONFIG_CPU_32v4T=y | ||
262 | CONFIG_CPU_ABRT_EV4T=y | ||
263 | CONFIG_CPU_PABRT_NOIFAR=y | ||
264 | CONFIG_CPU_CACHE_V4WT=y | ||
265 | CONFIG_CPU_CACHE_VIVT=y | ||
266 | CONFIG_CPU_COPY_V4WB=y | ||
267 | CONFIG_CPU_TLB_V4WBI=y | ||
268 | CONFIG_CPU_CP15=y | ||
269 | CONFIG_CPU_CP15_MMU=y | ||
270 | |||
271 | # | ||
272 | # Processor Features | ||
273 | # | ||
274 | CONFIG_ARM_THUMB=y | ||
275 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
276 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
277 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
278 | # CONFIG_OUTER_CACHE is not set | ||
279 | |||
280 | # | ||
281 | # Bus support | ||
282 | # | ||
283 | # CONFIG_PCI_SYSCALL is not set | ||
284 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
285 | # CONFIG_PCCARD is not set | ||
286 | |||
287 | # | ||
288 | # Kernel Features | ||
289 | # | ||
290 | CONFIG_VMSPLIT_3G=y | ||
291 | # CONFIG_VMSPLIT_2G is not set | ||
292 | # CONFIG_VMSPLIT_1G is not set | ||
293 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
294 | # CONFIG_PREEMPT is not set | ||
295 | CONFIG_HZ=200 | ||
296 | CONFIG_AEABI=y | ||
297 | # CONFIG_OABI_COMPAT is not set | ||
298 | CONFIG_ARCH_FLATMEM_HAS_HOLES=y | ||
299 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set | ||
300 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set | ||
301 | # CONFIG_HIGHMEM is not set | ||
302 | CONFIG_SELECT_MEMORY_MODEL=y | ||
303 | CONFIG_FLATMEM_MANUAL=y | ||
304 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
305 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
306 | CONFIG_FLATMEM=y | ||
307 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
308 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
309 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
310 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
311 | CONFIG_ZONE_DMA_FLAG=0 | ||
312 | CONFIG_VIRT_TO_BUS=y | ||
313 | CONFIG_UNEVICTABLE_LRU=y | ||
314 | CONFIG_HAVE_MLOCK=y | ||
315 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
316 | CONFIG_ALIGNMENT_TRAP=y | ||
317 | |||
318 | # | ||
319 | # Boot options | ||
320 | # | ||
321 | CONFIG_ZBOOT_ROM_TEXT=0 | ||
322 | CONFIG_ZBOOT_ROM_BSS=0 | ||
323 | CONFIG_CMDLINE="" | ||
324 | # CONFIG_XIP_KERNEL is not set | ||
325 | CONFIG_KEXEC=y | ||
326 | CONFIG_ATAGS_PROC=y | ||
327 | |||
328 | # | ||
329 | # CPU Power Management | ||
330 | # | ||
331 | CONFIG_CPU_IDLE=y | ||
332 | CONFIG_CPU_IDLE_GOV_LADDER=y | ||
333 | |||
334 | # | ||
335 | # Floating point emulation | ||
336 | # | ||
337 | |||
338 | # | ||
339 | # At least one emulation must be selected | ||
340 | # | ||
341 | |||
342 | # | ||
343 | # Userspace binary formats | ||
344 | # | ||
345 | CONFIG_BINFMT_ELF=y | ||
346 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
347 | CONFIG_HAVE_AOUT=y | ||
348 | CONFIG_BINFMT_AOUT=m | ||
349 | CONFIG_BINFMT_MISC=m | ||
350 | |||
351 | # | ||
352 | # Power management options | ||
353 | # | ||
354 | CONFIG_PM=y | ||
355 | # CONFIG_PM_DEBUG is not set | ||
356 | CONFIG_PM_SLEEP=y | ||
357 | CONFIG_SUSPEND=y | ||
358 | CONFIG_SUSPEND_FREEZER=y | ||
359 | CONFIG_APM_EMULATION=y | ||
360 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
361 | CONFIG_NET=y | ||
362 | |||
363 | # | ||
364 | # Networking options | ||
365 | # | ||
366 | CONFIG_PACKET=y | ||
367 | CONFIG_PACKET_MMAP=y | ||
368 | CONFIG_UNIX=y | ||
369 | CONFIG_XFRM=y | ||
370 | CONFIG_XFRM_USER=m | ||
371 | # CONFIG_XFRM_SUB_POLICY is not set | ||
372 | # CONFIG_XFRM_MIGRATE is not set | ||
373 | # CONFIG_XFRM_STATISTICS is not set | ||
374 | CONFIG_NET_KEY=m | ||
375 | # CONFIG_NET_KEY_MIGRATE is not set | ||
376 | CONFIG_INET=y | ||
377 | CONFIG_IP_MULTICAST=y | ||
378 | CONFIG_IP_ADVANCED_ROUTER=y | ||
379 | CONFIG_ASK_IP_FIB_HASH=y | ||
380 | # CONFIG_IP_FIB_TRIE is not set | ||
381 | CONFIG_IP_FIB_HASH=y | ||
382 | CONFIG_IP_MULTIPLE_TABLES=y | ||
383 | CONFIG_IP_ROUTE_MULTIPATH=y | ||
384 | CONFIG_IP_ROUTE_VERBOSE=y | ||
385 | CONFIG_IP_PNP=y | ||
386 | CONFIG_IP_PNP_DHCP=y | ||
387 | CONFIG_IP_PNP_BOOTP=y | ||
388 | CONFIG_IP_PNP_RARP=y | ||
389 | # CONFIG_NET_IPIP is not set | ||
390 | # CONFIG_NET_IPGRE is not set | ||
391 | CONFIG_IP_MROUTE=y | ||
392 | CONFIG_IP_PIMSM_V1=y | ||
393 | CONFIG_IP_PIMSM_V2=y | ||
394 | # CONFIG_ARPD is not set | ||
395 | CONFIG_SYN_COOKIES=y | ||
396 | # CONFIG_INET_AH is not set | ||
397 | # CONFIG_INET_ESP is not set | ||
398 | # CONFIG_INET_IPCOMP is not set | ||
399 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
400 | # CONFIG_INET_TUNNEL is not set | ||
401 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
402 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
403 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
404 | # CONFIG_INET_LRO is not set | ||
405 | CONFIG_INET_DIAG=m | ||
406 | CONFIG_INET_TCP_DIAG=m | ||
407 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
408 | CONFIG_TCP_CONG_CUBIC=y | ||
409 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
410 | # CONFIG_TCP_MD5SIG is not set | ||
411 | # CONFIG_IPV6 is not set | ||
412 | # CONFIG_NETWORK_SECMARK is not set | ||
413 | CONFIG_NETFILTER=y | ||
414 | # CONFIG_NETFILTER_DEBUG is not set | ||
415 | CONFIG_NETFILTER_ADVANCED=y | ||
416 | CONFIG_BRIDGE_NETFILTER=y | ||
417 | |||
418 | # | ||
419 | # Core Netfilter Configuration | ||
420 | # | ||
421 | # CONFIG_NETFILTER_NETLINK_QUEUE is not set | ||
422 | # CONFIG_NETFILTER_NETLINK_LOG is not set | ||
423 | # CONFIG_NF_CONNTRACK is not set | ||
424 | # CONFIG_NETFILTER_XTABLES is not set | ||
425 | # CONFIG_IP_VS is not set | ||
426 | |||
427 | # | ||
428 | # IP: Netfilter Configuration | ||
429 | # | ||
430 | # CONFIG_NF_DEFRAG_IPV4 is not set | ||
431 | # CONFIG_IP_NF_QUEUE is not set | ||
432 | # CONFIG_IP_NF_IPTABLES is not set | ||
433 | # CONFIG_IP_NF_ARPTABLES is not set | ||
434 | # CONFIG_BRIDGE_NF_EBTABLES is not set | ||
435 | # CONFIG_IP_DCCP is not set | ||
436 | # CONFIG_IP_SCTP is not set | ||
437 | # CONFIG_TIPC is not set | ||
438 | # CONFIG_ATM is not set | ||
439 | CONFIG_STP=m | ||
440 | CONFIG_GARP=m | ||
441 | CONFIG_BRIDGE=m | ||
442 | # CONFIG_NET_DSA is not set | ||
443 | CONFIG_VLAN_8021Q=m | ||
444 | CONFIG_VLAN_8021Q_GVRP=y | ||
445 | # CONFIG_DECNET is not set | ||
446 | CONFIG_LLC=m | ||
447 | # CONFIG_LLC2 is not set | ||
448 | # CONFIG_IPX is not set | ||
449 | # CONFIG_ATALK is not set | ||
450 | # CONFIG_X25 is not set | ||
451 | # CONFIG_LAPB is not set | ||
452 | # CONFIG_ECONET is not set | ||
453 | # CONFIG_WAN_ROUTER is not set | ||
454 | # CONFIG_PHONET is not set | ||
455 | # CONFIG_NET_SCHED is not set | ||
456 | # CONFIG_DCB is not set | ||
457 | |||
458 | # | ||
459 | # Network testing | ||
460 | # | ||
461 | CONFIG_NET_PKTGEN=m | ||
462 | # CONFIG_HAMRADIO is not set | ||
463 | # CONFIG_CAN is not set | ||
464 | # CONFIG_IRDA is not set | ||
465 | CONFIG_BT=m | ||
466 | CONFIG_BT_L2CAP=m | ||
467 | CONFIG_BT_SCO=m | ||
468 | CONFIG_BT_RFCOMM=m | ||
469 | CONFIG_BT_RFCOMM_TTY=y | ||
470 | CONFIG_BT_BNEP=m | ||
471 | CONFIG_BT_BNEP_MC_FILTER=y | ||
472 | CONFIG_BT_BNEP_PROTO_FILTER=y | ||
473 | CONFIG_BT_HIDP=m | ||
474 | |||
475 | # | ||
476 | # Bluetooth device drivers | ||
477 | # | ||
478 | CONFIG_BT_HCIBTUSB=m | ||
479 | CONFIG_BT_HCIBTSDIO=m | ||
480 | CONFIG_BT_HCIUART=m | ||
481 | CONFIG_BT_HCIUART_H4=y | ||
482 | CONFIG_BT_HCIUART_BCSP=y | ||
483 | CONFIG_BT_HCIUART_LL=y | ||
484 | CONFIG_BT_HCIBCM203X=m | ||
485 | CONFIG_BT_HCIBPA10X=m | ||
486 | CONFIG_BT_HCIBFUSB=m | ||
487 | CONFIG_BT_HCIVHCI=m | ||
488 | # CONFIG_AF_RXRPC is not set | ||
489 | CONFIG_FIB_RULES=y | ||
490 | CONFIG_WIRELESS=y | ||
491 | CONFIG_CFG80211=m | ||
492 | CONFIG_CFG80211_REG_DEBUG=y | ||
493 | CONFIG_WIRELESS_OLD_REGULATORY=y | ||
494 | CONFIG_WIRELESS_EXT=y | ||
495 | CONFIG_WIRELESS_EXT_SYSFS=y | ||
496 | CONFIG_LIB80211=m | ||
497 | CONFIG_LIB80211_CRYPT_WEP=m | ||
498 | CONFIG_LIB80211_CRYPT_CCMP=m | ||
499 | CONFIG_LIB80211_CRYPT_TKIP=m | ||
500 | # CONFIG_LIB80211_DEBUG is not set | ||
501 | CONFIG_MAC80211=m | ||
502 | |||
503 | # | ||
504 | # Rate control algorithm selection | ||
505 | # | ||
506 | CONFIG_MAC80211_RC_MINSTREL=y | ||
507 | # CONFIG_MAC80211_RC_DEFAULT_PID is not set | ||
508 | CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y | ||
509 | CONFIG_MAC80211_RC_DEFAULT="minstrel" | ||
510 | CONFIG_MAC80211_MESH=y | ||
511 | CONFIG_MAC80211_LEDS=y | ||
512 | # CONFIG_MAC80211_DEBUGFS is not set | ||
513 | # CONFIG_MAC80211_DEBUG_MENU is not set | ||
514 | # CONFIG_WIMAX is not set | ||
515 | # CONFIG_RFKILL is not set | ||
516 | # CONFIG_NET_9P is not set | ||
517 | |||
518 | # | ||
519 | # Device Drivers | ||
520 | # | ||
521 | |||
522 | # | ||
523 | # Generic Driver Options | ||
524 | # | ||
525 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
526 | CONFIG_STANDALONE=y | ||
527 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
528 | CONFIG_FW_LOADER=y | ||
529 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
530 | CONFIG_EXTRA_FIRMWARE="" | ||
531 | # CONFIG_DEBUG_DRIVER is not set | ||
532 | # CONFIG_DEBUG_DEVRES is not set | ||
533 | # CONFIG_SYS_HYPERVISOR is not set | ||
534 | CONFIG_CONNECTOR=m | ||
535 | CONFIG_MTD=y | ||
536 | # CONFIG_MTD_DEBUG is not set | ||
537 | CONFIG_MTD_CONCAT=y | ||
538 | CONFIG_MTD_PARTITIONS=y | ||
539 | # CONFIG_MTD_TESTS is not set | ||
540 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
541 | CONFIG_MTD_CMDLINE_PARTS=y | ||
542 | # CONFIG_MTD_AFS_PARTS is not set | ||
543 | # CONFIG_MTD_AR7_PARTS is not set | ||
544 | |||
545 | # | ||
546 | # User Modules And Translation Layers | ||
547 | # | ||
548 | CONFIG_MTD_CHAR=y | ||
549 | CONFIG_MTD_BLKDEVS=y | ||
550 | CONFIG_MTD_BLOCK=y | ||
551 | CONFIG_FTL=y | ||
552 | CONFIG_NFTL=y | ||
553 | CONFIG_NFTL_RW=y | ||
554 | CONFIG_INFTL=y | ||
555 | CONFIG_RFD_FTL=y | ||
556 | # CONFIG_SSFDC is not set | ||
557 | # CONFIG_MTD_OOPS is not set | ||
558 | |||
559 | # | ||
560 | # RAM/ROM/Flash chip drivers | ||
561 | # | ||
562 | CONFIG_MTD_CFI=y | ||
563 | CONFIG_MTD_JEDECPROBE=y | ||
564 | CONFIG_MTD_GEN_PROBE=y | ||
565 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
566 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
567 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
568 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
569 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
570 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
571 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
572 | CONFIG_MTD_CFI_I1=y | ||
573 | CONFIG_MTD_CFI_I2=y | ||
574 | # CONFIG_MTD_CFI_I4 is not set | ||
575 | # CONFIG_MTD_CFI_I8 is not set | ||
576 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
577 | CONFIG_MTD_CFI_AMDSTD=y | ||
578 | CONFIG_MTD_CFI_STAA=y | ||
579 | CONFIG_MTD_CFI_UTIL=y | ||
580 | CONFIG_MTD_RAM=y | ||
581 | CONFIG_MTD_ROM=y | ||
582 | # CONFIG_MTD_ABSENT is not set | ||
583 | |||
584 | # | ||
585 | # Mapping drivers for chip access | ||
586 | # | ||
587 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
588 | # CONFIG_MTD_PHYSMAP is not set | ||
589 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
590 | # CONFIG_MTD_IMPA7 is not set | ||
591 | # CONFIG_MTD_PLATRAM is not set | ||
592 | |||
593 | # | ||
594 | # Self-contained MTD device drivers | ||
595 | # | ||
596 | # CONFIG_MTD_DATAFLASH is not set | ||
597 | # CONFIG_MTD_M25P80 is not set | ||
598 | # CONFIG_MTD_SLRAM is not set | ||
599 | # CONFIG_MTD_PHRAM is not set | ||
600 | # CONFIG_MTD_MTDRAM is not set | ||
601 | # CONFIG_MTD_BLOCK2MTD is not set | ||
602 | |||
603 | # | ||
604 | # Disk-On-Chip Device Drivers | ||
605 | # | ||
606 | # CONFIG_MTD_DOC2000 is not set | ||
607 | # CONFIG_MTD_DOC2001 is not set | ||
608 | # CONFIG_MTD_DOC2001PLUS is not set | ||
609 | CONFIG_MTD_NAND=y | ||
610 | CONFIG_MTD_NAND_VERIFY_WRITE=y | ||
611 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
612 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
613 | # CONFIG_MTD_NAND_GPIO is not set | ||
614 | CONFIG_MTD_NAND_IDS=y | ||
615 | CONFIG_MTD_NAND_S3C2410=y | ||
616 | # CONFIG_MTD_NAND_S3C2410_DEBUG is not set | ||
617 | # CONFIG_MTD_NAND_S3C2410_HWECC is not set | ||
618 | # CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set | ||
619 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
620 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
621 | CONFIG_MTD_NAND_PLATFORM=y | ||
622 | # CONFIG_MTD_ALAUDA is not set | ||
623 | # CONFIG_MTD_ONENAND is not set | ||
624 | |||
625 | # | ||
626 | # LPDDR flash memory drivers | ||
627 | # | ||
628 | CONFIG_MTD_LPDDR=y | ||
629 | CONFIG_MTD_QINFO_PROBE=y | ||
630 | |||
631 | # | ||
632 | # UBI - Unsorted block images | ||
633 | # | ||
634 | # CONFIG_MTD_UBI is not set | ||
635 | # CONFIG_PARPORT is not set | ||
636 | CONFIG_BLK_DEV=y | ||
637 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
638 | CONFIG_BLK_DEV_LOOP=m | ||
639 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
640 | CONFIG_BLK_DEV_NBD=m | ||
641 | # CONFIG_BLK_DEV_UB is not set | ||
642 | CONFIG_BLK_DEV_RAM=y | ||
643 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
644 | CONFIG_BLK_DEV_RAM_SIZE=65536 | ||
645 | # CONFIG_BLK_DEV_XIP is not set | ||
646 | CONFIG_CDROM_PKTCDVD=m | ||
647 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | ||
648 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | ||
649 | # CONFIG_ATA_OVER_ETH is not set | ||
650 | CONFIG_MISC_DEVICES=y | ||
651 | # CONFIG_ICS932S401 is not set | ||
652 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
653 | # CONFIG_ISL29003 is not set | ||
654 | # CONFIG_C2PORT is not set | ||
655 | |||
656 | # | ||
657 | # EEPROM support | ||
658 | # | ||
659 | CONFIG_EEPROM_AT24=y | ||
660 | # CONFIG_EEPROM_AT25 is not set | ||
661 | # CONFIG_EEPROM_LEGACY is not set | ||
662 | # CONFIG_EEPROM_93CX6 is not set | ||
663 | CONFIG_HAVE_IDE=y | ||
664 | # CONFIG_IDE is not set | ||
665 | |||
666 | # | ||
667 | # SCSI device support | ||
668 | # | ||
669 | # CONFIG_RAID_ATTRS is not set | ||
670 | CONFIG_SCSI=m | ||
671 | CONFIG_SCSI_DMA=y | ||
672 | # CONFIG_SCSI_TGT is not set | ||
673 | # CONFIG_SCSI_NETLINK is not set | ||
674 | # CONFIG_SCSI_PROC_FS is not set | ||
675 | |||
676 | # | ||
677 | # SCSI support type (disk, tape, CD-ROM) | ||
678 | # | ||
679 | CONFIG_BLK_DEV_SD=m | ||
680 | # CONFIG_CHR_DEV_ST is not set | ||
681 | # CONFIG_CHR_DEV_OSST is not set | ||
682 | # CONFIG_BLK_DEV_SR is not set | ||
683 | CONFIG_CHR_DEV_SG=m | ||
684 | # CONFIG_CHR_DEV_SCH is not set | ||
685 | |||
686 | # | ||
687 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
688 | # | ||
689 | # CONFIG_SCSI_MULTI_LUN is not set | ||
690 | # CONFIG_SCSI_CONSTANTS is not set | ||
691 | # CONFIG_SCSI_LOGGING is not set | ||
692 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
693 | CONFIG_SCSI_WAIT_SCAN=m | ||
694 | |||
695 | # | ||
696 | # SCSI Transports | ||
697 | # | ||
698 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
699 | # CONFIG_SCSI_FC_ATTRS is not set | ||
700 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
701 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
702 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
703 | # CONFIG_SCSI_LOWLEVEL is not set | ||
704 | # CONFIG_SCSI_DH is not set | ||
705 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
706 | # CONFIG_ATA is not set | ||
707 | # CONFIG_MD is not set | ||
708 | CONFIG_NETDEVICES=y | ||
709 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
710 | # CONFIG_DUMMY is not set | ||
711 | # CONFIG_BONDING is not set | ||
712 | # CONFIG_MACVLAN is not set | ||
713 | # CONFIG_EQUALIZER is not set | ||
714 | CONFIG_TUN=m | ||
715 | # CONFIG_VETH is not set | ||
716 | # CONFIG_PHYLIB is not set | ||
717 | CONFIG_NET_ETHERNET=y | ||
718 | CONFIG_MII=y | ||
719 | # CONFIG_AX88796 is not set | ||
720 | # CONFIG_SMC91X is not set | ||
721 | CONFIG_DM9000=y | ||
722 | CONFIG_DM9000_DEBUGLEVEL=4 | ||
723 | # CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set | ||
724 | # CONFIG_ENC28J60 is not set | ||
725 | # CONFIG_ETHOC is not set | ||
726 | # CONFIG_SMC911X is not set | ||
727 | # CONFIG_SMSC911X is not set | ||
728 | # CONFIG_DNET is not set | ||
729 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
730 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
731 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
732 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
733 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
734 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
735 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
736 | # CONFIG_B44 is not set | ||
737 | # CONFIG_NETDEV_1000 is not set | ||
738 | # CONFIG_NETDEV_10000 is not set | ||
739 | |||
740 | # | ||
741 | # Wireless LAN | ||
742 | # | ||
743 | # CONFIG_WLAN_PRE80211 is not set | ||
744 | CONFIG_WLAN_80211=y | ||
745 | CONFIG_LIBERTAS=m | ||
746 | # CONFIG_LIBERTAS_USB is not set | ||
747 | CONFIG_LIBERTAS_SDIO=m | ||
748 | # CONFIG_LIBERTAS_SPI is not set | ||
749 | # CONFIG_LIBERTAS_DEBUG is not set | ||
750 | # CONFIG_LIBERTAS_THINFIRM is not set | ||
751 | # CONFIG_AT76C50X_USB is not set | ||
752 | # CONFIG_USB_ZD1201 is not set | ||
753 | # CONFIG_USB_NET_RNDIS_WLAN is not set | ||
754 | # CONFIG_RTL8187 is not set | ||
755 | # CONFIG_MAC80211_HWSIM is not set | ||
756 | # CONFIG_P54_COMMON is not set | ||
757 | # CONFIG_AR9170_USB is not set | ||
758 | CONFIG_HOSTAP=m | ||
759 | CONFIG_HOSTAP_FIRMWARE=y | ||
760 | CONFIG_HOSTAP_FIRMWARE_NVRAM=y | ||
761 | # CONFIG_B43 is not set | ||
762 | # CONFIG_B43LEGACY is not set | ||
763 | CONFIG_ZD1211RW=m | ||
764 | CONFIG_ZD1211RW_DEBUG=y | ||
765 | # CONFIG_RT2X00 is not set | ||
766 | |||
767 | # | ||
768 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
769 | # | ||
770 | |||
771 | # | ||
772 | # USB Network Adapters | ||
773 | # | ||
774 | # CONFIG_USB_CATC is not set | ||
775 | # CONFIG_USB_KAWETH is not set | ||
776 | # CONFIG_USB_PEGASUS is not set | ||
777 | # CONFIG_USB_RTL8150 is not set | ||
778 | # CONFIG_USB_USBNET is not set | ||
779 | # CONFIG_WAN is not set | ||
780 | CONFIG_PPP=m | ||
781 | CONFIG_PPP_MULTILINK=y | ||
782 | CONFIG_PPP_FILTER=y | ||
783 | CONFIG_PPP_ASYNC=m | ||
784 | CONFIG_PPP_SYNC_TTY=m | ||
785 | CONFIG_PPP_DEFLATE=m | ||
786 | CONFIG_PPP_BSDCOMP=m | ||
787 | CONFIG_PPP_MPPE=m | ||
788 | # CONFIG_PPPOE is not set | ||
789 | # CONFIG_PPPOL2TP is not set | ||
790 | # CONFIG_SLIP is not set | ||
791 | CONFIG_SLHC=m | ||
792 | # CONFIG_NETCONSOLE is not set | ||
793 | # CONFIG_NETPOLL is not set | ||
794 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
795 | # CONFIG_ISDN is not set | ||
796 | |||
797 | # | ||
798 | # Input device support | ||
799 | # | ||
800 | CONFIG_INPUT=y | ||
801 | CONFIG_INPUT_FF_MEMLESS=y | ||
802 | # CONFIG_INPUT_POLLDEV is not set | ||
803 | |||
804 | # | ||
805 | # Userland interfaces | ||
806 | # | ||
807 | CONFIG_INPUT_MOUSEDEV=y | ||
808 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
809 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
810 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
811 | # CONFIG_INPUT_JOYDEV is not set | ||
812 | CONFIG_INPUT_EVDEV=y | ||
813 | CONFIG_INPUT_EVBUG=m | ||
814 | |||
815 | # | ||
816 | # Input Device Drivers | ||
817 | # | ||
818 | CONFIG_INPUT_KEYBOARD=y | ||
819 | # CONFIG_KEYBOARD_ATKBD is not set | ||
820 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
821 | # CONFIG_KEYBOARD_LKKBD is not set | ||
822 | # CONFIG_KEYBOARD_XTKBD is not set | ||
823 | # CONFIG_KEYBOARD_NEWTON is not set | ||
824 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
825 | CONFIG_KEYBOARD_GPIO=y | ||
826 | CONFIG_INPUT_MOUSE=y | ||
827 | CONFIG_MOUSE_PS2=y | ||
828 | CONFIG_MOUSE_PS2_ALPS=y | ||
829 | CONFIG_MOUSE_PS2_LOGIPS2PP=y | ||
830 | CONFIG_MOUSE_PS2_SYNAPTICS=y | ||
831 | CONFIG_MOUSE_PS2_TRACKPOINT=y | ||
832 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
833 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
834 | # CONFIG_MOUSE_SERIAL is not set | ||
835 | # CONFIG_MOUSE_APPLETOUCH is not set | ||
836 | # CONFIG_MOUSE_BCM5974 is not set | ||
837 | # CONFIG_MOUSE_VSXXXAA is not set | ||
838 | # CONFIG_MOUSE_GPIO is not set | ||
839 | # CONFIG_INPUT_JOYSTICK is not set | ||
840 | # CONFIG_INPUT_TABLET is not set | ||
841 | CONFIG_INPUT_TOUCHSCREEN=y | ||
842 | # CONFIG_TOUCHSCREEN_ADS7846 is not set | ||
843 | # CONFIG_TOUCHSCREEN_AD7877 is not set | ||
844 | # CONFIG_TOUCHSCREEN_AD7879_I2C is not set | ||
845 | # CONFIG_TOUCHSCREEN_AD7879_SPI is not set | ||
846 | # CONFIG_TOUCHSCREEN_AD7879 is not set | ||
847 | # CONFIG_TOUCHSCREEN_FUJITSU is not set | ||
848 | # CONFIG_TOUCHSCREEN_GUNZE is not set | ||
849 | # CONFIG_TOUCHSCREEN_ELO is not set | ||
850 | # CONFIG_TOUCHSCREEN_WACOM_W8001 is not set | ||
851 | # CONFIG_TOUCHSCREEN_MTOUCH is not set | ||
852 | # CONFIG_TOUCHSCREEN_INEXIO is not set | ||
853 | # CONFIG_TOUCHSCREEN_MK712 is not set | ||
854 | # CONFIG_TOUCHSCREEN_PENMOUNT is not set | ||
855 | # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set | ||
856 | # CONFIG_TOUCHSCREEN_TOUCHWIN is not set | ||
857 | # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set | ||
858 | # CONFIG_TOUCHSCREEN_TOUCHIT213 is not set | ||
859 | # CONFIG_TOUCHSCREEN_TSC2007 is not set | ||
860 | # CONFIG_INPUT_MISC is not set | ||
861 | |||
862 | # | ||
863 | # Hardware I/O ports | ||
864 | # | ||
865 | CONFIG_SERIO=y | ||
866 | CONFIG_SERIO_SERPORT=y | ||
867 | CONFIG_SERIO_LIBPS2=y | ||
868 | CONFIG_SERIO_RAW=y | ||
869 | # CONFIG_GAMEPORT is not set | ||
870 | |||
871 | # | ||
872 | # Character devices | ||
873 | # | ||
874 | CONFIG_VT=y | ||
875 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
876 | CONFIG_VT_CONSOLE=y | ||
877 | CONFIG_HW_CONSOLE=y | ||
878 | CONFIG_VT_HW_CONSOLE_BINDING=y | ||
879 | CONFIG_DEVKMEM=y | ||
880 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
881 | |||
882 | # | ||
883 | # Serial drivers | ||
884 | # | ||
885 | # CONFIG_SERIAL_8250 is not set | ||
886 | |||
887 | # | ||
888 | # Non-8250 serial port support | ||
889 | # | ||
890 | CONFIG_SERIAL_SAMSUNG=y | ||
891 | CONFIG_SERIAL_SAMSUNG_UARTS=3 | ||
892 | CONFIG_SERIAL_SAMSUNG_CONSOLE=y | ||
893 | CONFIG_SERIAL_S3C2440=y | ||
894 | # CONFIG_SERIAL_MAX3100 is not set | ||
895 | CONFIG_SERIAL_CORE=y | ||
896 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
897 | CONFIG_UNIX98_PTYS=y | ||
898 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
899 | CONFIG_LEGACY_PTYS=y | ||
900 | CONFIG_LEGACY_PTY_COUNT=128 | ||
901 | CONFIG_IPMI_HANDLER=m | ||
902 | # CONFIG_IPMI_PANIC_EVENT is not set | ||
903 | CONFIG_IPMI_DEVICE_INTERFACE=m | ||
904 | CONFIG_IPMI_SI=m | ||
905 | CONFIG_IPMI_WATCHDOG=m | ||
906 | CONFIG_IPMI_POWEROFF=m | ||
907 | CONFIG_HW_RANDOM=y | ||
908 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
909 | # CONFIG_R3964 is not set | ||
910 | # CONFIG_RAW_DRIVER is not set | ||
911 | # CONFIG_TCG_TPM is not set | ||
912 | CONFIG_I2C=y | ||
913 | CONFIG_I2C_BOARDINFO=y | ||
914 | CONFIG_I2C_CHARDEV=y | ||
915 | CONFIG_I2C_HELPER_AUTO=y | ||
916 | CONFIG_I2C_ALGOBIT=y | ||
917 | |||
918 | # | ||
919 | # I2C Hardware Bus support | ||
920 | # | ||
921 | |||
922 | # | ||
923 | # I2C system bus drivers (mostly embedded / system-on-chip) | ||
924 | # | ||
925 | # CONFIG_I2C_GPIO is not set | ||
926 | # CONFIG_I2C_OCORES is not set | ||
927 | CONFIG_I2C_S3C2410=y | ||
928 | CONFIG_I2C_SIMTEC=y | ||
929 | |||
930 | # | ||
931 | # External I2C/SMBus adapter drivers | ||
932 | # | ||
933 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
934 | # CONFIG_I2C_TAOS_EVM is not set | ||
935 | # CONFIG_I2C_TINY_USB is not set | ||
936 | |||
937 | # | ||
938 | # Other I2C/SMBus bus drivers | ||
939 | # | ||
940 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
941 | # CONFIG_I2C_STUB is not set | ||
942 | |||
943 | # | ||
944 | # Miscellaneous I2C Chip support | ||
945 | # | ||
946 | # CONFIG_DS1682 is not set | ||
947 | # CONFIG_SENSORS_PCF8574 is not set | ||
948 | # CONFIG_PCF8575 is not set | ||
949 | # CONFIG_SENSORS_PCA9539 is not set | ||
950 | # CONFIG_SENSORS_MAX6875 is not set | ||
951 | CONFIG_SENSORS_TSL2550=m | ||
952 | # CONFIG_I2C_DEBUG_CORE is not set | ||
953 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
954 | # CONFIG_I2C_DEBUG_BUS is not set | ||
955 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
956 | CONFIG_SPI=y | ||
957 | # CONFIG_SPI_DEBUG is not set | ||
958 | CONFIG_SPI_MASTER=y | ||
959 | |||
960 | # | ||
961 | # SPI Master Controller Drivers | ||
962 | # | ||
963 | CONFIG_SPI_BITBANG=y | ||
964 | # CONFIG_SPI_GPIO is not set | ||
965 | CONFIG_SPI_S3C24XX=y | ||
966 | # CONFIG_SPI_S3C24XX_GPIO is not set | ||
967 | |||
968 | # | ||
969 | # SPI Protocol Masters | ||
970 | # | ||
971 | CONFIG_SPI_SPIDEV=y | ||
972 | # CONFIG_SPI_TLE62X0 is not set | ||
973 | CONFIG_ARCH_REQUIRE_GPIOLIB=y | ||
974 | CONFIG_GPIOLIB=y | ||
975 | # CONFIG_DEBUG_GPIO is not set | ||
976 | CONFIG_GPIO_SYSFS=y | ||
977 | |||
978 | # | ||
979 | # Memory mapped GPIO expanders: | ||
980 | # | ||
981 | |||
982 | # | ||
983 | # I2C GPIO expanders: | ||
984 | # | ||
985 | # CONFIG_GPIO_MAX732X is not set | ||
986 | # CONFIG_GPIO_PCA953X is not set | ||
987 | # CONFIG_GPIO_PCF857X is not set | ||
988 | |||
989 | # | ||
990 | # PCI GPIO expanders: | ||
991 | # | ||
992 | |||
993 | # | ||
994 | # SPI GPIO expanders: | ||
995 | # | ||
996 | # CONFIG_GPIO_MAX7301 is not set | ||
997 | # CONFIG_GPIO_MCP23S08 is not set | ||
998 | # CONFIG_W1 is not set | ||
999 | # CONFIG_POWER_SUPPLY is not set | ||
1000 | CONFIG_HWMON=y | ||
1001 | # CONFIG_HWMON_VID is not set | ||
1002 | # CONFIG_SENSORS_AD7414 is not set | ||
1003 | # CONFIG_SENSORS_AD7418 is not set | ||
1004 | # CONFIG_SENSORS_ADCXX is not set | ||
1005 | # CONFIG_SENSORS_ADM1021 is not set | ||
1006 | # CONFIG_SENSORS_ADM1025 is not set | ||
1007 | # CONFIG_SENSORS_ADM1026 is not set | ||
1008 | # CONFIG_SENSORS_ADM1029 is not set | ||
1009 | # CONFIG_SENSORS_ADM1031 is not set | ||
1010 | # CONFIG_SENSORS_ADM9240 is not set | ||
1011 | # CONFIG_SENSORS_ADT7462 is not set | ||
1012 | # CONFIG_SENSORS_ADT7470 is not set | ||
1013 | # CONFIG_SENSORS_ADT7473 is not set | ||
1014 | # CONFIG_SENSORS_ADT7475 is not set | ||
1015 | # CONFIG_SENSORS_ATXP1 is not set | ||
1016 | # CONFIG_SENSORS_DS1621 is not set | ||
1017 | # CONFIG_SENSORS_F71805F is not set | ||
1018 | # CONFIG_SENSORS_F71882FG is not set | ||
1019 | # CONFIG_SENSORS_F75375S is not set | ||
1020 | # CONFIG_SENSORS_G760A is not set | ||
1021 | # CONFIG_SENSORS_GL518SM is not set | ||
1022 | # CONFIG_SENSORS_GL520SM is not set | ||
1023 | # CONFIG_SENSORS_IBMAEM is not set | ||
1024 | # CONFIG_SENSORS_IBMPEX is not set | ||
1025 | # CONFIG_SENSORS_IT87 is not set | ||
1026 | # CONFIG_SENSORS_LM63 is not set | ||
1027 | # CONFIG_SENSORS_LM70 is not set | ||
1028 | CONFIG_SENSORS_LM75=y | ||
1029 | # CONFIG_SENSORS_LM77 is not set | ||
1030 | # CONFIG_SENSORS_LM78 is not set | ||
1031 | # CONFIG_SENSORS_LM80 is not set | ||
1032 | # CONFIG_SENSORS_LM83 is not set | ||
1033 | # CONFIG_SENSORS_LM85 is not set | ||
1034 | # CONFIG_SENSORS_LM87 is not set | ||
1035 | # CONFIG_SENSORS_LM90 is not set | ||
1036 | # CONFIG_SENSORS_LM92 is not set | ||
1037 | # CONFIG_SENSORS_LM93 is not set | ||
1038 | # CONFIG_SENSORS_LTC4215 is not set | ||
1039 | # CONFIG_SENSORS_LTC4245 is not set | ||
1040 | # CONFIG_SENSORS_LM95241 is not set | ||
1041 | # CONFIG_SENSORS_MAX1111 is not set | ||
1042 | # CONFIG_SENSORS_MAX1619 is not set | ||
1043 | # CONFIG_SENSORS_MAX6650 is not set | ||
1044 | # CONFIG_SENSORS_PC87360 is not set | ||
1045 | # CONFIG_SENSORS_PC87427 is not set | ||
1046 | # CONFIG_SENSORS_PCF8591 is not set | ||
1047 | # CONFIG_SENSORS_SHT15 is not set | ||
1048 | # CONFIG_SENSORS_DME1737 is not set | ||
1049 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
1050 | # CONFIG_SENSORS_SMSC47M192 is not set | ||
1051 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
1052 | # CONFIG_SENSORS_ADS7828 is not set | ||
1053 | # CONFIG_SENSORS_THMC50 is not set | ||
1054 | # CONFIG_SENSORS_VT1211 is not set | ||
1055 | # CONFIG_SENSORS_W83781D is not set | ||
1056 | # CONFIG_SENSORS_W83791D is not set | ||
1057 | # CONFIG_SENSORS_W83792D is not set | ||
1058 | # CONFIG_SENSORS_W83793 is not set | ||
1059 | # CONFIG_SENSORS_W83L785TS is not set | ||
1060 | # CONFIG_SENSORS_W83L786NG is not set | ||
1061 | # CONFIG_SENSORS_W83627HF is not set | ||
1062 | # CONFIG_SENSORS_W83627EHF is not set | ||
1063 | # CONFIG_SENSORS_LIS3_SPI is not set | ||
1064 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
1065 | CONFIG_THERMAL=m | ||
1066 | # CONFIG_THERMAL_HWMON is not set | ||
1067 | CONFIG_WATCHDOG=y | ||
1068 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
1069 | |||
1070 | # | ||
1071 | # Watchdog Device Drivers | ||
1072 | # | ||
1073 | # CONFIG_SOFT_WATCHDOG is not set | ||
1074 | CONFIG_S3C2410_WATCHDOG=y | ||
1075 | |||
1076 | # | ||
1077 | # USB-based Watchdog Cards | ||
1078 | # | ||
1079 | # CONFIG_USBPCWATCHDOG is not set | ||
1080 | CONFIG_SSB_POSSIBLE=y | ||
1081 | |||
1082 | # | ||
1083 | # Sonics Silicon Backplane | ||
1084 | # | ||
1085 | # CONFIG_SSB is not set | ||
1086 | |||
1087 | # | ||
1088 | # Multifunction device drivers | ||
1089 | # | ||
1090 | # CONFIG_MFD_CORE is not set | ||
1091 | # CONFIG_MFD_SM501 is not set | ||
1092 | # CONFIG_MFD_ASIC3 is not set | ||
1093 | # CONFIG_HTC_EGPIO is not set | ||
1094 | # CONFIG_HTC_PASIC3 is not set | ||
1095 | # CONFIG_TPS65010 is not set | ||
1096 | # CONFIG_TWL4030_CORE is not set | ||
1097 | # CONFIG_MFD_TMIO is not set | ||
1098 | # CONFIG_MFD_T7L66XB is not set | ||
1099 | # CONFIG_MFD_TC6387XB is not set | ||
1100 | # CONFIG_MFD_TC6393XB is not set | ||
1101 | # CONFIG_PMIC_DA903X is not set | ||
1102 | # CONFIG_MFD_WM8400 is not set | ||
1103 | # CONFIG_MFD_WM8350_I2C is not set | ||
1104 | # CONFIG_MFD_PCF50633 is not set | ||
1105 | |||
1106 | # | ||
1107 | # Multimedia devices | ||
1108 | # | ||
1109 | |||
1110 | # | ||
1111 | # Multimedia core support | ||
1112 | # | ||
1113 | CONFIG_VIDEO_DEV=m | ||
1114 | CONFIG_VIDEO_V4L2_COMMON=m | ||
1115 | CONFIG_VIDEO_ALLOW_V4L1=y | ||
1116 | CONFIG_VIDEO_V4L1_COMPAT=y | ||
1117 | CONFIG_DVB_CORE=m | ||
1118 | CONFIG_VIDEO_MEDIA=m | ||
1119 | |||
1120 | # | ||
1121 | # Multimedia drivers | ||
1122 | # | ||
1123 | # CONFIG_MEDIA_ATTACH is not set | ||
1124 | CONFIG_MEDIA_TUNER=m | ||
1125 | # CONFIG_MEDIA_TUNER_CUSTOMISE is not set | ||
1126 | CONFIG_MEDIA_TUNER_SIMPLE=m | ||
1127 | CONFIG_MEDIA_TUNER_TDA8290=m | ||
1128 | CONFIG_MEDIA_TUNER_TDA9887=m | ||
1129 | CONFIG_MEDIA_TUNER_TEA5761=m | ||
1130 | CONFIG_MEDIA_TUNER_TEA5767=m | ||
1131 | CONFIG_MEDIA_TUNER_MT20XX=m | ||
1132 | CONFIG_MEDIA_TUNER_XC2028=m | ||
1133 | CONFIG_MEDIA_TUNER_XC5000=m | ||
1134 | CONFIG_MEDIA_TUNER_MC44S803=m | ||
1135 | CONFIG_VIDEO_V4L2=m | ||
1136 | CONFIG_VIDEO_V4L1=m | ||
1137 | CONFIG_VIDEOBUF_GEN=m | ||
1138 | CONFIG_VIDEO_CAPTURE_DRIVERS=y | ||
1139 | # CONFIG_VIDEO_ADV_DEBUG is not set | ||
1140 | # CONFIG_VIDEO_FIXED_MINOR_RANGES is not set | ||
1141 | CONFIG_VIDEO_HELPER_CHIPS_AUTO=y | ||
1142 | # CONFIG_VIDEO_VIVI is not set | ||
1143 | # CONFIG_VIDEO_CPIA is not set | ||
1144 | # CONFIG_VIDEO_CPIA2 is not set | ||
1145 | # CONFIG_VIDEO_SAA5246A is not set | ||
1146 | # CONFIG_VIDEO_SAA5249 is not set | ||
1147 | # CONFIG_VIDEO_AU0828 is not set | ||
1148 | CONFIG_SOC_CAMERA=m | ||
1149 | # CONFIG_SOC_CAMERA_MT9M001 is not set | ||
1150 | # CONFIG_SOC_CAMERA_MT9M111 is not set | ||
1151 | # CONFIG_SOC_CAMERA_MT9T031 is not set | ||
1152 | # CONFIG_SOC_CAMERA_MT9V022 is not set | ||
1153 | # CONFIG_SOC_CAMERA_TW9910 is not set | ||
1154 | CONFIG_SOC_CAMERA_PLATFORM=m | ||
1155 | # CONFIG_SOC_CAMERA_OV772X is not set | ||
1156 | # CONFIG_VIDEO_SH_MOBILE_CEU is not set | ||
1157 | CONFIG_V4L_USB_DRIVERS=y | ||
1158 | # CONFIG_USB_VIDEO_CLASS is not set | ||
1159 | CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y | ||
1160 | CONFIG_USB_GSPCA=m | ||
1161 | # CONFIG_USB_M5602 is not set | ||
1162 | # CONFIG_USB_STV06XX is not set | ||
1163 | # CONFIG_USB_GSPCA_CONEX is not set | ||
1164 | # CONFIG_USB_GSPCA_ETOMS is not set | ||
1165 | # CONFIG_USB_GSPCA_FINEPIX is not set | ||
1166 | # CONFIG_USB_GSPCA_MARS is not set | ||
1167 | # CONFIG_USB_GSPCA_MR97310A is not set | ||
1168 | # CONFIG_USB_GSPCA_OV519 is not set | ||
1169 | # CONFIG_USB_GSPCA_OV534 is not set | ||
1170 | # CONFIG_USB_GSPCA_PAC207 is not set | ||
1171 | # CONFIG_USB_GSPCA_PAC7311 is not set | ||
1172 | # CONFIG_USB_GSPCA_SONIXB is not set | ||
1173 | # CONFIG_USB_GSPCA_SONIXJ is not set | ||
1174 | # CONFIG_USB_GSPCA_SPCA500 is not set | ||
1175 | # CONFIG_USB_GSPCA_SPCA501 is not set | ||
1176 | # CONFIG_USB_GSPCA_SPCA505 is not set | ||
1177 | # CONFIG_USB_GSPCA_SPCA506 is not set | ||
1178 | # CONFIG_USB_GSPCA_SPCA508 is not set | ||
1179 | # CONFIG_USB_GSPCA_SPCA561 is not set | ||
1180 | # CONFIG_USB_GSPCA_SQ905 is not set | ||
1181 | # CONFIG_USB_GSPCA_SQ905C is not set | ||
1182 | # CONFIG_USB_GSPCA_STK014 is not set | ||
1183 | # CONFIG_USB_GSPCA_SUNPLUS is not set | ||
1184 | # CONFIG_USB_GSPCA_T613 is not set | ||
1185 | # CONFIG_USB_GSPCA_TV8532 is not set | ||
1186 | # CONFIG_USB_GSPCA_VC032X is not set | ||
1187 | CONFIG_USB_GSPCA_ZC3XX=m | ||
1188 | # CONFIG_VIDEO_PVRUSB2 is not set | ||
1189 | # CONFIG_VIDEO_HDPVR is not set | ||
1190 | # CONFIG_VIDEO_EM28XX is not set | ||
1191 | # CONFIG_VIDEO_CX231XX is not set | ||
1192 | # CONFIG_VIDEO_USBVISION is not set | ||
1193 | # CONFIG_USB_VICAM is not set | ||
1194 | # CONFIG_USB_IBMCAM is not set | ||
1195 | # CONFIG_USB_KONICAWC is not set | ||
1196 | # CONFIG_USB_QUICKCAM_MESSENGER is not set | ||
1197 | # CONFIG_USB_ET61X251 is not set | ||
1198 | # CONFIG_VIDEO_OVCAMCHIP is not set | ||
1199 | # CONFIG_USB_OV511 is not set | ||
1200 | # CONFIG_USB_SE401 is not set | ||
1201 | # CONFIG_USB_SN9C102 is not set | ||
1202 | # CONFIG_USB_STV680 is not set | ||
1203 | # CONFIG_USB_ZC0301 is not set | ||
1204 | # CONFIG_USB_PWC is not set | ||
1205 | # CONFIG_USB_PWC_INPUT_EVDEV is not set | ||
1206 | # CONFIG_USB_ZR364XX is not set | ||
1207 | # CONFIG_USB_STKWEBCAM is not set | ||
1208 | # CONFIG_USB_S2255 is not set | ||
1209 | CONFIG_RADIO_ADAPTERS=y | ||
1210 | # CONFIG_USB_DSBR is not set | ||
1211 | # CONFIG_USB_SI470X is not set | ||
1212 | # CONFIG_USB_MR800 is not set | ||
1213 | # CONFIG_RADIO_TEA5764 is not set | ||
1214 | # CONFIG_DVB_DYNAMIC_MINORS is not set | ||
1215 | CONFIG_DVB_CAPTURE_DRIVERS=y | ||
1216 | # CONFIG_TTPCI_EEPROM is not set | ||
1217 | |||
1218 | # | ||
1219 | # Supported USB Adapters | ||
1220 | # | ||
1221 | # CONFIG_DVB_USB is not set | ||
1222 | # CONFIG_DVB_SIANO_SMS1XXX is not set | ||
1223 | |||
1224 | # | ||
1225 | # Supported FlexCopII (B2C2) Adapters | ||
1226 | # | ||
1227 | # CONFIG_DVB_B2C2_FLEXCOP is not set | ||
1228 | |||
1229 | # | ||
1230 | # Supported DVB Frontends | ||
1231 | # | ||
1232 | # CONFIG_DVB_FE_CUSTOMISE is not set | ||
1233 | # CONFIG_DAB is not set | ||
1234 | |||
1235 | # | ||
1236 | # Graphics support | ||
1237 | # | ||
1238 | # CONFIG_VGASTATE is not set | ||
1239 | CONFIG_VIDEO_OUTPUT_CONTROL=y | ||
1240 | CONFIG_FB=y | ||
1241 | CONFIG_FIRMWARE_EDID=y | ||
1242 | # CONFIG_FB_DDC is not set | ||
1243 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
1244 | CONFIG_FB_CFB_FILLRECT=y | ||
1245 | CONFIG_FB_CFB_COPYAREA=y | ||
1246 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
1247 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
1248 | # CONFIG_FB_SYS_FILLRECT is not set | ||
1249 | # CONFIG_FB_SYS_COPYAREA is not set | ||
1250 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
1251 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
1252 | # CONFIG_FB_SYS_FOPS is not set | ||
1253 | # CONFIG_FB_SVGALIB is not set | ||
1254 | # CONFIG_FB_MACMODES is not set | ||
1255 | # CONFIG_FB_BACKLIGHT is not set | ||
1256 | CONFIG_FB_MODE_HELPERS=y | ||
1257 | CONFIG_FB_TILEBLITTING=y | ||
1258 | |||
1259 | # | ||
1260 | # Frame buffer hardware drivers | ||
1261 | # | ||
1262 | # CONFIG_FB_UVESA is not set | ||
1263 | # CONFIG_FB_S1D13XXX is not set | ||
1264 | CONFIG_FB_S3C2410=y | ||
1265 | # CONFIG_FB_S3C2410_DEBUG is not set | ||
1266 | # CONFIG_FB_VIRTUAL is not set | ||
1267 | # CONFIG_FB_METRONOME is not set | ||
1268 | # CONFIG_FB_MB862XX is not set | ||
1269 | # CONFIG_FB_BROADSHEET is not set | ||
1270 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
1271 | CONFIG_LCD_CLASS_DEVICE=y | ||
1272 | # CONFIG_LCD_LTV350QV is not set | ||
1273 | # CONFIG_LCD_ILI9320 is not set | ||
1274 | # CONFIG_LCD_TDO24M is not set | ||
1275 | # CONFIG_LCD_VGG2432A4 is not set | ||
1276 | CONFIG_LCD_PLATFORM=y | ||
1277 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
1278 | # CONFIG_BACKLIGHT_GENERIC is not set | ||
1279 | CONFIG_BACKLIGHT_PWM=y | ||
1280 | |||
1281 | # | ||
1282 | # Display device support | ||
1283 | # | ||
1284 | CONFIG_DISPLAY_SUPPORT=y | ||
1285 | |||
1286 | # | ||
1287 | # Display hardware drivers | ||
1288 | # | ||
1289 | |||
1290 | # | ||
1291 | # Console display driver support | ||
1292 | # | ||
1293 | # CONFIG_VGA_CONSOLE is not set | ||
1294 | CONFIG_DUMMY_CONSOLE=y | ||
1295 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
1296 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
1297 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y | ||
1298 | CONFIG_FONTS=y | ||
1299 | CONFIG_FONT_8x8=y | ||
1300 | # CONFIG_FONT_8x16 is not set | ||
1301 | # CONFIG_FONT_6x11 is not set | ||
1302 | # CONFIG_FONT_7x14 is not set | ||
1303 | # CONFIG_FONT_PEARL_8x8 is not set | ||
1304 | # CONFIG_FONT_ACORN_8x8 is not set | ||
1305 | CONFIG_FONT_MINI_4x6=y | ||
1306 | # CONFIG_FONT_SUN8x16 is not set | ||
1307 | # CONFIG_FONT_SUN12x22 is not set | ||
1308 | # CONFIG_FONT_10x18 is not set | ||
1309 | CONFIG_LOGO=y | ||
1310 | # CONFIG_LOGO_LINUX_MONO is not set | ||
1311 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
1312 | CONFIG_LOGO_LINUX_CLUT224=y | ||
1313 | CONFIG_SOUND=y | ||
1314 | CONFIG_SOUND_OSS_CORE=y | ||
1315 | CONFIG_SND=y | ||
1316 | CONFIG_SND_TIMER=y | ||
1317 | CONFIG_SND_PCM=y | ||
1318 | CONFIG_SND_HWDEP=m | ||
1319 | CONFIG_SND_RAWMIDI=m | ||
1320 | CONFIG_SND_JACK=y | ||
1321 | CONFIG_SND_SEQUENCER=m | ||
1322 | CONFIG_SND_SEQ_DUMMY=m | ||
1323 | CONFIG_SND_OSSEMUL=y | ||
1324 | CONFIG_SND_MIXER_OSS=m | ||
1325 | CONFIG_SND_PCM_OSS=m | ||
1326 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
1327 | CONFIG_SND_SEQUENCER_OSS=y | ||
1328 | CONFIG_SND_DYNAMIC_MINORS=y | ||
1329 | CONFIG_SND_SUPPORT_OLD_API=y | ||
1330 | CONFIG_SND_VERBOSE_PROCFS=y | ||
1331 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
1332 | # CONFIG_SND_DEBUG is not set | ||
1333 | # CONFIG_SND_DRIVERS is not set | ||
1334 | # CONFIG_SND_ARM is not set | ||
1335 | # CONFIG_SND_SPI is not set | ||
1336 | CONFIG_SND_USB=y | ||
1337 | CONFIG_SND_USB_AUDIO=m | ||
1338 | CONFIG_SND_USB_CAIAQ=m | ||
1339 | CONFIG_SND_USB_CAIAQ_INPUT=y | ||
1340 | CONFIG_SND_SOC=y | ||
1341 | CONFIG_SND_S3C24XX_SOC=y | ||
1342 | CONFIG_SND_S3C24XX_SOC_I2S=y | ||
1343 | # CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set | ||
1344 | CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X=y | ||
1345 | CONFIG_SND_SOC_I2C_AND_SPI=y | ||
1346 | # CONFIG_SND_SOC_ALL_CODECS is not set | ||
1347 | CONFIG_SND_SOC_L3=y | ||
1348 | CONFIG_SND_SOC_UDA134X=y | ||
1349 | # CONFIG_SOUND_PRIME is not set | ||
1350 | CONFIG_HID_SUPPORT=y | ||
1351 | CONFIG_HID=y | ||
1352 | # CONFIG_HID_DEBUG is not set | ||
1353 | CONFIG_HIDRAW=y | ||
1354 | |||
1355 | # | ||
1356 | # USB Input Devices | ||
1357 | # | ||
1358 | CONFIG_USB_HID=y | ||
1359 | CONFIG_HID_PID=y | ||
1360 | CONFIG_USB_HIDDEV=y | ||
1361 | |||
1362 | # | ||
1363 | # Special HID drivers | ||
1364 | # | ||
1365 | CONFIG_HID_A4TECH=y | ||
1366 | CONFIG_HID_APPLE=y | ||
1367 | CONFIG_HID_BELKIN=y | ||
1368 | CONFIG_HID_CHERRY=y | ||
1369 | CONFIG_HID_CHICONY=y | ||
1370 | CONFIG_HID_CYPRESS=y | ||
1371 | # CONFIG_DRAGONRISE_FF is not set | ||
1372 | CONFIG_HID_EZKEY=y | ||
1373 | CONFIG_HID_KYE=y | ||
1374 | CONFIG_HID_GYRATION=y | ||
1375 | CONFIG_HID_KENSINGTON=y | ||
1376 | CONFIG_HID_LOGITECH=y | ||
1377 | # CONFIG_LOGITECH_FF is not set | ||
1378 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | ||
1379 | CONFIG_HID_MICROSOFT=y | ||
1380 | CONFIG_HID_MONTEREY=y | ||
1381 | CONFIG_HID_NTRIG=y | ||
1382 | CONFIG_HID_PANTHERLORD=y | ||
1383 | # CONFIG_PANTHERLORD_FF is not set | ||
1384 | CONFIG_HID_PETALYNX=y | ||
1385 | CONFIG_HID_SAMSUNG=y | ||
1386 | CONFIG_HID_SONY=y | ||
1387 | CONFIG_HID_SUNPLUS=y | ||
1388 | # CONFIG_GREENASIA_FF is not set | ||
1389 | CONFIG_HID_TOPSEED=y | ||
1390 | # CONFIG_THRUSTMASTER_FF is not set | ||
1391 | # CONFIG_ZEROPLUS_FF is not set | ||
1392 | CONFIG_USB_SUPPORT=y | ||
1393 | CONFIG_USB_ARCH_HAS_HCD=y | ||
1394 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
1395 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
1396 | CONFIG_USB=y | ||
1397 | # CONFIG_USB_DEBUG is not set | ||
1398 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
1399 | |||
1400 | # | ||
1401 | # Miscellaneous USB options | ||
1402 | # | ||
1403 | CONFIG_USB_DEVICEFS=y | ||
1404 | # CONFIG_USB_DEVICE_CLASS is not set | ||
1405 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
1406 | # CONFIG_USB_SUSPEND is not set | ||
1407 | # CONFIG_USB_OTG is not set | ||
1408 | # CONFIG_USB_MON is not set | ||
1409 | # CONFIG_USB_WUSB is not set | ||
1410 | # CONFIG_USB_WUSB_CBAF is not set | ||
1411 | |||
1412 | # | ||
1413 | # USB Host Controller Drivers | ||
1414 | # | ||
1415 | # CONFIG_USB_C67X00_HCD is not set | ||
1416 | # CONFIG_USB_OXU210HP_HCD is not set | ||
1417 | # CONFIG_USB_ISP116X_HCD is not set | ||
1418 | # CONFIG_USB_ISP1760_HCD is not set | ||
1419 | CONFIG_USB_OHCI_HCD=y | ||
1420 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
1421 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
1422 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
1423 | # CONFIG_USB_SL811_HCD is not set | ||
1424 | # CONFIG_USB_R8A66597_HCD is not set | ||
1425 | # CONFIG_USB_HWA_HCD is not set | ||
1426 | # CONFIG_USB_MUSB_HDRC is not set | ||
1427 | # CONFIG_USB_GADGET_MUSB_HDRC is not set | ||
1428 | |||
1429 | # | ||
1430 | # USB Device Class drivers | ||
1431 | # | ||
1432 | CONFIG_USB_ACM=m | ||
1433 | # CONFIG_USB_PRINTER is not set | ||
1434 | CONFIG_USB_WDM=m | ||
1435 | # CONFIG_USB_TMC is not set | ||
1436 | |||
1437 | # | ||
1438 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
1439 | # | ||
1440 | |||
1441 | # | ||
1442 | # also be needed; see USB_STORAGE Help for more info | ||
1443 | # | ||
1444 | CONFIG_USB_STORAGE=m | ||
1445 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
1446 | CONFIG_USB_STORAGE_DATAFAB=m | ||
1447 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
1448 | CONFIG_USB_STORAGE_ISD200=m | ||
1449 | CONFIG_USB_STORAGE_USBAT=m | ||
1450 | CONFIG_USB_STORAGE_SDDR09=m | ||
1451 | CONFIG_USB_STORAGE_SDDR55=m | ||
1452 | CONFIG_USB_STORAGE_JUMPSHOT=m | ||
1453 | CONFIG_USB_STORAGE_ALAUDA=m | ||
1454 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
1455 | # CONFIG_USB_STORAGE_KARMA is not set | ||
1456 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
1457 | CONFIG_USB_LIBUSUAL=y | ||
1458 | |||
1459 | # | ||
1460 | # USB Imaging devices | ||
1461 | # | ||
1462 | # CONFIG_USB_MDC800 is not set | ||
1463 | # CONFIG_USB_MICROTEK is not set | ||
1464 | |||
1465 | # | ||
1466 | # USB port drivers | ||
1467 | # | ||
1468 | CONFIG_USB_SERIAL=m | ||
1469 | # CONFIG_USB_EZUSB is not set | ||
1470 | # CONFIG_USB_SERIAL_GENERIC is not set | ||
1471 | # CONFIG_USB_SERIAL_AIRCABLE is not set | ||
1472 | # CONFIG_USB_SERIAL_ARK3116 is not set | ||
1473 | # CONFIG_USB_SERIAL_BELKIN is not set | ||
1474 | # CONFIG_USB_SERIAL_CH341 is not set | ||
1475 | # CONFIG_USB_SERIAL_WHITEHEAT is not set | ||
1476 | # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set | ||
1477 | CONFIG_USB_SERIAL_CP210X=m | ||
1478 | # CONFIG_USB_SERIAL_CYPRESS_M8 is not set | ||
1479 | # CONFIG_USB_SERIAL_EMPEG is not set | ||
1480 | CONFIG_USB_SERIAL_FTDI_SIO=m | ||
1481 | # CONFIG_USB_SERIAL_FUNSOFT is not set | ||
1482 | # CONFIG_USB_SERIAL_VISOR is not set | ||
1483 | # CONFIG_USB_SERIAL_IPAQ is not set | ||
1484 | # CONFIG_USB_SERIAL_IR is not set | ||
1485 | # CONFIG_USB_SERIAL_EDGEPORT is not set | ||
1486 | # CONFIG_USB_SERIAL_EDGEPORT_TI is not set | ||
1487 | # CONFIG_USB_SERIAL_GARMIN is not set | ||
1488 | # CONFIG_USB_SERIAL_IPW is not set | ||
1489 | # CONFIG_USB_SERIAL_IUU is not set | ||
1490 | # CONFIG_USB_SERIAL_KEYSPAN_PDA is not set | ||
1491 | # CONFIG_USB_SERIAL_KEYSPAN is not set | ||
1492 | # CONFIG_USB_SERIAL_KLSI is not set | ||
1493 | # CONFIG_USB_SERIAL_KOBIL_SCT is not set | ||
1494 | # CONFIG_USB_SERIAL_MCT_U232 is not set | ||
1495 | # CONFIG_USB_SERIAL_MOS7720 is not set | ||
1496 | # CONFIG_USB_SERIAL_MOS7840 is not set | ||
1497 | # CONFIG_USB_SERIAL_MOTOROLA is not set | ||
1498 | # CONFIG_USB_SERIAL_NAVMAN is not set | ||
1499 | # CONFIG_USB_SERIAL_PL2303 is not set | ||
1500 | # CONFIG_USB_SERIAL_OTI6858 is not set | ||
1501 | # CONFIG_USB_SERIAL_QUALCOMM is not set | ||
1502 | CONFIG_USB_SERIAL_SPCP8X5=m | ||
1503 | # CONFIG_USB_SERIAL_HP4X is not set | ||
1504 | # CONFIG_USB_SERIAL_SAFE is not set | ||
1505 | # CONFIG_USB_SERIAL_SIEMENS_MPI is not set | ||
1506 | # CONFIG_USB_SERIAL_SIERRAWIRELESS is not set | ||
1507 | # CONFIG_USB_SERIAL_SYMBOL is not set | ||
1508 | # CONFIG_USB_SERIAL_TI is not set | ||
1509 | # CONFIG_USB_SERIAL_CYBERJACK is not set | ||
1510 | # CONFIG_USB_SERIAL_XIRCOM is not set | ||
1511 | # CONFIG_USB_SERIAL_OPTION is not set | ||
1512 | # CONFIG_USB_SERIAL_OMNINET is not set | ||
1513 | # CONFIG_USB_SERIAL_OPTICON is not set | ||
1514 | # CONFIG_USB_SERIAL_DEBUG is not set | ||
1515 | |||
1516 | # | ||
1517 | # USB Miscellaneous drivers | ||
1518 | # | ||
1519 | # CONFIG_USB_EMI62 is not set | ||
1520 | # CONFIG_USB_EMI26 is not set | ||
1521 | # CONFIG_USB_ADUTUX is not set | ||
1522 | # CONFIG_USB_SEVSEG is not set | ||
1523 | # CONFIG_USB_RIO500 is not set | ||
1524 | # CONFIG_USB_LEGOTOWER is not set | ||
1525 | # CONFIG_USB_LCD is not set | ||
1526 | # CONFIG_USB_BERRY_CHARGE is not set | ||
1527 | # CONFIG_USB_LED is not set | ||
1528 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
1529 | # CONFIG_USB_CYTHERM is not set | ||
1530 | # CONFIG_USB_IDMOUSE is not set | ||
1531 | # CONFIG_USB_FTDI_ELAN is not set | ||
1532 | # CONFIG_USB_APPLEDISPLAY is not set | ||
1533 | # CONFIG_USB_LD is not set | ||
1534 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
1535 | # CONFIG_USB_IOWARRIOR is not set | ||
1536 | # CONFIG_USB_TEST is not set | ||
1537 | # CONFIG_USB_ISIGHTFW is not set | ||
1538 | # CONFIG_USB_VST is not set | ||
1539 | CONFIG_USB_GADGET=y | ||
1540 | # CONFIG_USB_GADGET_DEBUG is not set | ||
1541 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | ||
1542 | # CONFIG_USB_GADGET_DEBUG_FS is not set | ||
1543 | CONFIG_USB_GADGET_VBUS_DRAW=2 | ||
1544 | CONFIG_USB_GADGET_SELECTED=y | ||
1545 | # CONFIG_USB_GADGET_AT91 is not set | ||
1546 | # CONFIG_USB_GADGET_ATMEL_USBA is not set | ||
1547 | # CONFIG_USB_GADGET_FSL_USB2 is not set | ||
1548 | # CONFIG_USB_GADGET_LH7A40X is not set | ||
1549 | # CONFIG_USB_GADGET_OMAP is not set | ||
1550 | # CONFIG_USB_GADGET_PXA25X is not set | ||
1551 | # CONFIG_USB_GADGET_PXA27X is not set | ||
1552 | CONFIG_USB_GADGET_S3C2410=y | ||
1553 | CONFIG_USB_S3C2410=y | ||
1554 | # CONFIG_USB_S3C2410_DEBUG is not set | ||
1555 | # CONFIG_USB_GADGET_IMX is not set | ||
1556 | # CONFIG_USB_GADGET_M66592 is not set | ||
1557 | # CONFIG_USB_GADGET_AMD5536UDC is not set | ||
1558 | # CONFIG_USB_GADGET_FSL_QE is not set | ||
1559 | # CONFIG_USB_GADGET_CI13XXX is not set | ||
1560 | # CONFIG_USB_GADGET_NET2280 is not set | ||
1561 | # CONFIG_USB_GADGET_GOKU is not set | ||
1562 | # CONFIG_USB_GADGET_DUMMY_HCD is not set | ||
1563 | # CONFIG_USB_GADGET_DUALSPEED is not set | ||
1564 | CONFIG_USB_ZERO=m | ||
1565 | CONFIG_USB_ETH=m | ||
1566 | CONFIG_USB_ETH_RNDIS=y | ||
1567 | CONFIG_USB_GADGETFS=m | ||
1568 | CONFIG_USB_FILE_STORAGE=m | ||
1569 | # CONFIG_USB_FILE_STORAGE_TEST is not set | ||
1570 | CONFIG_USB_G_SERIAL=m | ||
1571 | # CONFIG_USB_MIDI_GADGET is not set | ||
1572 | # CONFIG_USB_G_PRINTER is not set | ||
1573 | CONFIG_USB_CDC_COMPOSITE=m | ||
1574 | |||
1575 | # | ||
1576 | # OTG and related infrastructure | ||
1577 | # | ||
1578 | # CONFIG_USB_GPIO_VBUS is not set | ||
1579 | # CONFIG_NOP_USB_XCEIV is not set | ||
1580 | CONFIG_MMC=y | ||
1581 | # CONFIG_MMC_DEBUG is not set | ||
1582 | # CONFIG_MMC_UNSAFE_RESUME is not set | ||
1583 | |||
1584 | # | ||
1585 | # MMC/SD/SDIO Card Drivers | ||
1586 | # | ||
1587 | CONFIG_MMC_BLOCK=y | ||
1588 | CONFIG_MMC_BLOCK_BOUNCE=y | ||
1589 | CONFIG_SDIO_UART=y | ||
1590 | # CONFIG_MMC_TEST is not set | ||
1591 | |||
1592 | # | ||
1593 | # MMC/SD/SDIO Host Controller Drivers | ||
1594 | # | ||
1595 | CONFIG_MMC_SDHCI=y | ||
1596 | CONFIG_MMC_SPI=y | ||
1597 | CONFIG_MMC_S3C=y | ||
1598 | # CONFIG_MEMSTICK is not set | ||
1599 | # CONFIG_ACCESSIBILITY is not set | ||
1600 | CONFIG_NEW_LEDS=y | ||
1601 | CONFIG_LEDS_CLASS=y | ||
1602 | |||
1603 | # | ||
1604 | # LED drivers | ||
1605 | # | ||
1606 | CONFIG_LEDS_S3C24XX=y | ||
1607 | # CONFIG_LEDS_PCA9532 is not set | ||
1608 | CONFIG_LEDS_GPIO=y | ||
1609 | CONFIG_LEDS_GPIO_PLATFORM=y | ||
1610 | # CONFIG_LEDS_LP5521 is not set | ||
1611 | # CONFIG_LEDS_PCA955X is not set | ||
1612 | # CONFIG_LEDS_DAC124S085 is not set | ||
1613 | # CONFIG_LEDS_PWM is not set | ||
1614 | # CONFIG_LEDS_BD2802 is not set | ||
1615 | |||
1616 | # | ||
1617 | # LED Triggers | ||
1618 | # | ||
1619 | CONFIG_LEDS_TRIGGERS=y | ||
1620 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
1621 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
1622 | CONFIG_LEDS_TRIGGER_BACKLIGHT=y | ||
1623 | CONFIG_LEDS_TRIGGER_GPIO=y | ||
1624 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
1625 | |||
1626 | # | ||
1627 | # iptables trigger is under Netfilter config (LED target) | ||
1628 | # | ||
1629 | CONFIG_RTC_LIB=y | ||
1630 | CONFIG_RTC_CLASS=y | ||
1631 | CONFIG_RTC_HCTOSYS=y | ||
1632 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
1633 | # CONFIG_RTC_DEBUG is not set | ||
1634 | |||
1635 | # | ||
1636 | # RTC interfaces | ||
1637 | # | ||
1638 | CONFIG_RTC_INTF_SYSFS=y | ||
1639 | CONFIG_RTC_INTF_PROC=y | ||
1640 | CONFIG_RTC_INTF_DEV=y | ||
1641 | CONFIG_RTC_INTF_DEV_UIE_EMUL=y | ||
1642 | # CONFIG_RTC_DRV_TEST is not set | ||
1643 | |||
1644 | # | ||
1645 | # I2C RTC drivers | ||
1646 | # | ||
1647 | # CONFIG_RTC_DRV_DS1307 is not set | ||
1648 | # CONFIG_RTC_DRV_DS1374 is not set | ||
1649 | # CONFIG_RTC_DRV_DS1672 is not set | ||
1650 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
1651 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
1652 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
1653 | # CONFIG_RTC_DRV_X1205 is not set | ||
1654 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
1655 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
1656 | # CONFIG_RTC_DRV_M41T80 is not set | ||
1657 | # CONFIG_RTC_DRV_S35390A is not set | ||
1658 | # CONFIG_RTC_DRV_FM3130 is not set | ||
1659 | # CONFIG_RTC_DRV_RX8581 is not set | ||
1660 | |||
1661 | # | ||
1662 | # SPI RTC drivers | ||
1663 | # | ||
1664 | # CONFIG_RTC_DRV_M41T94 is not set | ||
1665 | # CONFIG_RTC_DRV_DS1305 is not set | ||
1666 | # CONFIG_RTC_DRV_DS1390 is not set | ||
1667 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
1668 | # CONFIG_RTC_DRV_R9701 is not set | ||
1669 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
1670 | # CONFIG_RTC_DRV_DS3234 is not set | ||
1671 | |||
1672 | # | ||
1673 | # Platform RTC drivers | ||
1674 | # | ||
1675 | # CONFIG_RTC_DRV_CMOS is not set | ||
1676 | # CONFIG_RTC_DRV_DS1286 is not set | ||
1677 | # CONFIG_RTC_DRV_DS1511 is not set | ||
1678 | # CONFIG_RTC_DRV_DS1553 is not set | ||
1679 | # CONFIG_RTC_DRV_DS1742 is not set | ||
1680 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
1681 | # CONFIG_RTC_DRV_M48T86 is not set | ||
1682 | # CONFIG_RTC_DRV_M48T35 is not set | ||
1683 | # CONFIG_RTC_DRV_M48T59 is not set | ||
1684 | # CONFIG_RTC_DRV_BQ4802 is not set | ||
1685 | # CONFIG_RTC_DRV_V3020 is not set | ||
1686 | |||
1687 | # | ||
1688 | # on-CPU RTC drivers | ||
1689 | # | ||
1690 | CONFIG_RTC_DRV_S3C=y | ||
1691 | CONFIG_DMADEVICES=y | ||
1692 | |||
1693 | # | ||
1694 | # DMA Devices | ||
1695 | # | ||
1696 | # CONFIG_AUXDISPLAY is not set | ||
1697 | # CONFIG_REGULATOR is not set | ||
1698 | # CONFIG_UIO is not set | ||
1699 | # CONFIG_STAGING is not set | ||
1700 | |||
1701 | # | ||
1702 | # File systems | ||
1703 | # | ||
1704 | CONFIG_EXT2_FS=m | ||
1705 | CONFIG_EXT2_FS_XATTR=y | ||
1706 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
1707 | CONFIG_EXT2_FS_SECURITY=y | ||
1708 | # CONFIG_EXT2_FS_XIP is not set | ||
1709 | CONFIG_EXT3_FS=y | ||
1710 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
1711 | CONFIG_EXT3_FS_XATTR=y | ||
1712 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
1713 | CONFIG_EXT3_FS_SECURITY=y | ||
1714 | # CONFIG_EXT4_FS is not set | ||
1715 | CONFIG_JBD=y | ||
1716 | # CONFIG_JBD_DEBUG is not set | ||
1717 | CONFIG_FS_MBCACHE=y | ||
1718 | # CONFIG_REISERFS_FS is not set | ||
1719 | # CONFIG_JFS_FS is not set | ||
1720 | CONFIG_FS_POSIX_ACL=y | ||
1721 | CONFIG_FILE_LOCKING=y | ||
1722 | # CONFIG_XFS_FS is not set | ||
1723 | # CONFIG_GFS2_FS is not set | ||
1724 | # CONFIG_OCFS2_FS is not set | ||
1725 | # CONFIG_BTRFS_FS is not set | ||
1726 | CONFIG_DNOTIFY=y | ||
1727 | CONFIG_INOTIFY=y | ||
1728 | CONFIG_INOTIFY_USER=y | ||
1729 | # CONFIG_QUOTA is not set | ||
1730 | CONFIG_AUTOFS_FS=y | ||
1731 | CONFIG_AUTOFS4_FS=y | ||
1732 | # CONFIG_FUSE_FS is not set | ||
1733 | CONFIG_GENERIC_ACL=y | ||
1734 | |||
1735 | # | ||
1736 | # Caches | ||
1737 | # | ||
1738 | # CONFIG_FSCACHE is not set | ||
1739 | |||
1740 | # | ||
1741 | # CD-ROM/DVD Filesystems | ||
1742 | # | ||
1743 | # CONFIG_ISO9660_FS is not set | ||
1744 | # CONFIG_UDF_FS is not set | ||
1745 | |||
1746 | # | ||
1747 | # DOS/FAT/NT Filesystems | ||
1748 | # | ||
1749 | CONFIG_FAT_FS=y | ||
1750 | CONFIG_MSDOS_FS=y | ||
1751 | CONFIG_VFAT_FS=y | ||
1752 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1753 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1754 | # CONFIG_NTFS_FS is not set | ||
1755 | |||
1756 | # | ||
1757 | # Pseudo filesystems | ||
1758 | # | ||
1759 | CONFIG_PROC_FS=y | ||
1760 | CONFIG_PROC_SYSCTL=y | ||
1761 | CONFIG_PROC_PAGE_MONITOR=y | ||
1762 | CONFIG_SYSFS=y | ||
1763 | CONFIG_TMPFS=y | ||
1764 | CONFIG_TMPFS_POSIX_ACL=y | ||
1765 | # CONFIG_HUGETLB_PAGE is not set | ||
1766 | CONFIG_CONFIGFS_FS=m | ||
1767 | CONFIG_MISC_FILESYSTEMS=y | ||
1768 | # CONFIG_ADFS_FS is not set | ||
1769 | # CONFIG_AFFS_FS is not set | ||
1770 | # CONFIG_ECRYPT_FS is not set | ||
1771 | # CONFIG_HFS_FS is not set | ||
1772 | # CONFIG_HFSPLUS_FS is not set | ||
1773 | # CONFIG_BEFS_FS is not set | ||
1774 | # CONFIG_BFS_FS is not set | ||
1775 | # CONFIG_EFS_FS is not set | ||
1776 | CONFIG_JFFS2_FS=y | ||
1777 | CONFIG_JFFS2_FS_DEBUG=0 | ||
1778 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
1779 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
1780 | # CONFIG_JFFS2_SUMMARY is not set | ||
1781 | # CONFIG_JFFS2_FS_XATTR is not set | ||
1782 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
1783 | CONFIG_JFFS2_ZLIB=y | ||
1784 | # CONFIG_JFFS2_LZO is not set | ||
1785 | CONFIG_JFFS2_RTIME=y | ||
1786 | # CONFIG_JFFS2_RUBIN is not set | ||
1787 | CONFIG_CRAMFS=y | ||
1788 | # CONFIG_SQUASHFS is not set | ||
1789 | # CONFIG_VXFS_FS is not set | ||
1790 | # CONFIG_MINIX_FS is not set | ||
1791 | # CONFIG_OMFS_FS is not set | ||
1792 | # CONFIG_HPFS_FS is not set | ||
1793 | # CONFIG_QNX4FS_FS is not set | ||
1794 | CONFIG_ROMFS_FS=y | ||
1795 | # CONFIG_ROMFS_BACKED_BY_BLOCK is not set | ||
1796 | # CONFIG_ROMFS_BACKED_BY_MTD is not set | ||
1797 | CONFIG_ROMFS_BACKED_BY_BOTH=y | ||
1798 | CONFIG_ROMFS_ON_BLOCK=y | ||
1799 | CONFIG_ROMFS_ON_MTD=y | ||
1800 | # CONFIG_SYSV_FS is not set | ||
1801 | # CONFIG_UFS_FS is not set | ||
1802 | # CONFIG_NILFS2_FS is not set | ||
1803 | CONFIG_NETWORK_FILESYSTEMS=y | ||
1804 | CONFIG_NFS_FS=y | ||
1805 | CONFIG_NFS_V3=y | ||
1806 | CONFIG_NFS_V3_ACL=y | ||
1807 | CONFIG_NFS_V4=y | ||
1808 | CONFIG_ROOT_NFS=y | ||
1809 | # CONFIG_NFSD is not set | ||
1810 | CONFIG_LOCKD=y | ||
1811 | CONFIG_LOCKD_V4=y | ||
1812 | CONFIG_NFS_ACL_SUPPORT=y | ||
1813 | CONFIG_NFS_COMMON=y | ||
1814 | CONFIG_SUNRPC=y | ||
1815 | CONFIG_SUNRPC_GSS=y | ||
1816 | CONFIG_RPCSEC_GSS_KRB5=y | ||
1817 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1818 | # CONFIG_SMB_FS is not set | ||
1819 | # CONFIG_CIFS is not set | ||
1820 | # CONFIG_NCP_FS is not set | ||
1821 | # CONFIG_CODA_FS is not set | ||
1822 | # CONFIG_AFS_FS is not set | ||
1823 | |||
1824 | # | ||
1825 | # Partition Types | ||
1826 | # | ||
1827 | CONFIG_PARTITION_ADVANCED=y | ||
1828 | # CONFIG_ACORN_PARTITION is not set | ||
1829 | # CONFIG_OSF_PARTITION is not set | ||
1830 | # CONFIG_AMIGA_PARTITION is not set | ||
1831 | # CONFIG_ATARI_PARTITION is not set | ||
1832 | # CONFIG_MAC_PARTITION is not set | ||
1833 | CONFIG_MSDOS_PARTITION=y | ||
1834 | CONFIG_BSD_DISKLABEL=y | ||
1835 | CONFIG_MINIX_SUBPARTITION=y | ||
1836 | CONFIG_SOLARIS_X86_PARTITION=y | ||
1837 | CONFIG_UNIXWARE_DISKLABEL=y | ||
1838 | CONFIG_LDM_PARTITION=y | ||
1839 | # CONFIG_LDM_DEBUG is not set | ||
1840 | # CONFIG_SGI_PARTITION is not set | ||
1841 | # CONFIG_ULTRIX_PARTITION is not set | ||
1842 | # CONFIG_SUN_PARTITION is not set | ||
1843 | # CONFIG_KARMA_PARTITION is not set | ||
1844 | CONFIG_EFI_PARTITION=y | ||
1845 | # CONFIG_SYSV68_PARTITION is not set | ||
1846 | CONFIG_NLS=y | ||
1847 | CONFIG_NLS_DEFAULT="cp437" | ||
1848 | CONFIG_NLS_CODEPAGE_437=m | ||
1849 | CONFIG_NLS_CODEPAGE_737=m | ||
1850 | CONFIG_NLS_CODEPAGE_775=m | ||
1851 | CONFIG_NLS_CODEPAGE_850=m | ||
1852 | CONFIG_NLS_CODEPAGE_852=m | ||
1853 | CONFIG_NLS_CODEPAGE_855=m | ||
1854 | CONFIG_NLS_CODEPAGE_857=m | ||
1855 | CONFIG_NLS_CODEPAGE_860=m | ||
1856 | CONFIG_NLS_CODEPAGE_861=m | ||
1857 | CONFIG_NLS_CODEPAGE_862=m | ||
1858 | CONFIG_NLS_CODEPAGE_863=m | ||
1859 | CONFIG_NLS_CODEPAGE_864=m | ||
1860 | CONFIG_NLS_CODEPAGE_865=m | ||
1861 | CONFIG_NLS_CODEPAGE_866=m | ||
1862 | CONFIG_NLS_CODEPAGE_869=m | ||
1863 | CONFIG_NLS_CODEPAGE_936=m | ||
1864 | CONFIG_NLS_CODEPAGE_950=m | ||
1865 | CONFIG_NLS_CODEPAGE_932=m | ||
1866 | CONFIG_NLS_CODEPAGE_949=m | ||
1867 | CONFIG_NLS_CODEPAGE_874=m | ||
1868 | CONFIG_NLS_ISO8859_8=m | ||
1869 | CONFIG_NLS_CODEPAGE_1250=m | ||
1870 | CONFIG_NLS_CODEPAGE_1251=m | ||
1871 | CONFIG_NLS_ASCII=m | ||
1872 | CONFIG_NLS_ISO8859_1=m | ||
1873 | CONFIG_NLS_ISO8859_2=m | ||
1874 | CONFIG_NLS_ISO8859_3=m | ||
1875 | CONFIG_NLS_ISO8859_4=m | ||
1876 | CONFIG_NLS_ISO8859_5=m | ||
1877 | CONFIG_NLS_ISO8859_6=m | ||
1878 | CONFIG_NLS_ISO8859_7=m | ||
1879 | CONFIG_NLS_ISO8859_9=m | ||
1880 | CONFIG_NLS_ISO8859_13=m | ||
1881 | CONFIG_NLS_ISO8859_14=m | ||
1882 | CONFIG_NLS_ISO8859_15=m | ||
1883 | CONFIG_NLS_KOI8_R=m | ||
1884 | CONFIG_NLS_KOI8_U=m | ||
1885 | CONFIG_NLS_UTF8=m | ||
1886 | # CONFIG_DLM is not set | ||
1887 | |||
1888 | # | ||
1889 | # Kernel hacking | ||
1890 | # | ||
1891 | # CONFIG_PRINTK_TIME is not set | ||
1892 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||
1893 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
1894 | CONFIG_FRAME_WARN=1024 | ||
1895 | # CONFIG_MAGIC_SYSRQ is not set | ||
1896 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1897 | CONFIG_DEBUG_FS=y | ||
1898 | # CONFIG_HEADERS_CHECK is not set | ||
1899 | CONFIG_DEBUG_KERNEL=y | ||
1900 | # CONFIG_DEBUG_SHIRQ is not set | ||
1901 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1902 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
1903 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
1904 | CONFIG_DETECT_HUNG_TASK=y | ||
1905 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
1906 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
1907 | # CONFIG_SCHED_DEBUG is not set | ||
1908 | # CONFIG_SCHEDSTATS is not set | ||
1909 | # CONFIG_TIMER_STATS is not set | ||
1910 | # CONFIG_DEBUG_OBJECTS is not set | ||
1911 | # CONFIG_SLUB_DEBUG_ON is not set | ||
1912 | # CONFIG_SLUB_STATS is not set | ||
1913 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1914 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1915 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1916 | # CONFIG_DEBUG_MUTEXES is not set | ||
1917 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1918 | # CONFIG_PROVE_LOCKING is not set | ||
1919 | # CONFIG_LOCK_STAT is not set | ||
1920 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1921 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1922 | # CONFIG_DEBUG_KOBJECT is not set | ||
1923 | CONFIG_DEBUG_BUGVERBOSE=y | ||
1924 | CONFIG_DEBUG_INFO=y | ||
1925 | # CONFIG_DEBUG_VM is not set | ||
1926 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
1927 | CONFIG_DEBUG_MEMORY_INIT=y | ||
1928 | # CONFIG_DEBUG_LIST is not set | ||
1929 | # CONFIG_DEBUG_SG is not set | ||
1930 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
1931 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
1932 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1933 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
1934 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1935 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
1936 | # CONFIG_FAULT_INJECTION is not set | ||
1937 | # CONFIG_LATENCYTOP is not set | ||
1938 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
1939 | # CONFIG_PAGE_POISONING is not set | ||
1940 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
1941 | CONFIG_TRACING_SUPPORT=y | ||
1942 | |||
1943 | # | ||
1944 | # Tracers | ||
1945 | # | ||
1946 | # CONFIG_FUNCTION_TRACER is not set | ||
1947 | # CONFIG_SCHED_TRACER is not set | ||
1948 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | ||
1949 | # CONFIG_EVENT_TRACER is not set | ||
1950 | # CONFIG_BOOT_TRACER is not set | ||
1951 | # CONFIG_TRACE_BRANCH_PROFILING is not set | ||
1952 | # CONFIG_STACK_TRACER is not set | ||
1953 | # CONFIG_KMEMTRACE is not set | ||
1954 | # CONFIG_WORKQUEUE_TRACER is not set | ||
1955 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
1956 | # CONFIG_DYNAMIC_DEBUG is not set | ||
1957 | # CONFIG_SAMPLES is not set | ||
1958 | CONFIG_HAVE_ARCH_KGDB=y | ||
1959 | # CONFIG_KGDB is not set | ||
1960 | CONFIG_ARM_UNWIND=y | ||
1961 | CONFIG_DEBUG_USER=y | ||
1962 | # CONFIG_DEBUG_ERRORS is not set | ||
1963 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1964 | # CONFIG_DEBUG_LL is not set | ||
1965 | CONFIG_DEBUG_S3C_UART=0 | ||
1966 | |||
1967 | # | ||
1968 | # Security options | ||
1969 | # | ||
1970 | CONFIG_KEYS=y | ||
1971 | # CONFIG_KEYS_DEBUG_PROC_KEYS is not set | ||
1972 | # CONFIG_SECURITY is not set | ||
1973 | # CONFIG_SECURITYFS is not set | ||
1974 | CONFIG_SECURITY_FILE_CAPABILITIES=y | ||
1975 | CONFIG_CRYPTO=y | ||
1976 | |||
1977 | # | ||
1978 | # Crypto core or helper | ||
1979 | # | ||
1980 | CONFIG_CRYPTO_FIPS=y | ||
1981 | CONFIG_CRYPTO_ALGAPI=y | ||
1982 | CONFIG_CRYPTO_ALGAPI2=y | ||
1983 | CONFIG_CRYPTO_AEAD=m | ||
1984 | CONFIG_CRYPTO_AEAD2=y | ||
1985 | CONFIG_CRYPTO_BLKCIPHER=y | ||
1986 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
1987 | CONFIG_CRYPTO_HASH=y | ||
1988 | CONFIG_CRYPTO_HASH2=y | ||
1989 | CONFIG_CRYPTO_RNG=m | ||
1990 | CONFIG_CRYPTO_RNG2=y | ||
1991 | CONFIG_CRYPTO_PCOMP=y | ||
1992 | CONFIG_CRYPTO_MANAGER=y | ||
1993 | CONFIG_CRYPTO_MANAGER2=y | ||
1994 | CONFIG_CRYPTO_GF128MUL=m | ||
1995 | CONFIG_CRYPTO_NULL=m | ||
1996 | CONFIG_CRYPTO_WORKQUEUE=y | ||
1997 | CONFIG_CRYPTO_CRYPTD=m | ||
1998 | CONFIG_CRYPTO_AUTHENC=m | ||
1999 | CONFIG_CRYPTO_TEST=m | ||
2000 | |||
2001 | # | ||
2002 | # Authenticated Encryption with Associated Data | ||
2003 | # | ||
2004 | CONFIG_CRYPTO_CCM=m | ||
2005 | CONFIG_CRYPTO_GCM=m | ||
2006 | CONFIG_CRYPTO_SEQIV=m | ||
2007 | |||
2008 | # | ||
2009 | # Block modes | ||
2010 | # | ||
2011 | CONFIG_CRYPTO_CBC=y | ||
2012 | CONFIG_CRYPTO_CTR=m | ||
2013 | CONFIG_CRYPTO_CTS=m | ||
2014 | CONFIG_CRYPTO_ECB=y | ||
2015 | CONFIG_CRYPTO_LRW=m | ||
2016 | CONFIG_CRYPTO_PCBC=m | ||
2017 | CONFIG_CRYPTO_XTS=m | ||
2018 | |||
2019 | # | ||
2020 | # Hash modes | ||
2021 | # | ||
2022 | CONFIG_CRYPTO_HMAC=y | ||
2023 | CONFIG_CRYPTO_XCBC=m | ||
2024 | |||
2025 | # | ||
2026 | # Digest | ||
2027 | # | ||
2028 | CONFIG_CRYPTO_CRC32C=m | ||
2029 | CONFIG_CRYPTO_MD4=m | ||
2030 | CONFIG_CRYPTO_MD5=y | ||
2031 | CONFIG_CRYPTO_MICHAEL_MIC=y | ||
2032 | CONFIG_CRYPTO_RMD128=m | ||
2033 | CONFIG_CRYPTO_RMD160=m | ||
2034 | CONFIG_CRYPTO_RMD256=m | ||
2035 | CONFIG_CRYPTO_RMD320=m | ||
2036 | CONFIG_CRYPTO_SHA1=m | ||
2037 | CONFIG_CRYPTO_SHA256=m | ||
2038 | CONFIG_CRYPTO_SHA512=m | ||
2039 | CONFIG_CRYPTO_TGR192=m | ||
2040 | CONFIG_CRYPTO_WP512=m | ||
2041 | |||
2042 | # | ||
2043 | # Ciphers | ||
2044 | # | ||
2045 | CONFIG_CRYPTO_AES=y | ||
2046 | CONFIG_CRYPTO_ANUBIS=m | ||
2047 | CONFIG_CRYPTO_ARC4=y | ||
2048 | CONFIG_CRYPTO_BLOWFISH=m | ||
2049 | CONFIG_CRYPTO_CAMELLIA=m | ||
2050 | CONFIG_CRYPTO_CAST5=m | ||
2051 | CONFIG_CRYPTO_CAST6=m | ||
2052 | CONFIG_CRYPTO_DES=y | ||
2053 | CONFIG_CRYPTO_FCRYPT=m | ||
2054 | CONFIG_CRYPTO_KHAZAD=m | ||
2055 | CONFIG_CRYPTO_SALSA20=m | ||
2056 | CONFIG_CRYPTO_SEED=m | ||
2057 | CONFIG_CRYPTO_SERPENT=m | ||
2058 | CONFIG_CRYPTO_TEA=m | ||
2059 | CONFIG_CRYPTO_TWOFISH=m | ||
2060 | CONFIG_CRYPTO_TWOFISH_COMMON=m | ||
2061 | |||
2062 | # | ||
2063 | # Compression | ||
2064 | # | ||
2065 | CONFIG_CRYPTO_DEFLATE=m | ||
2066 | CONFIG_CRYPTO_ZLIB=m | ||
2067 | CONFIG_CRYPTO_LZO=m | ||
2068 | |||
2069 | # | ||
2070 | # Random Number Generation | ||
2071 | # | ||
2072 | CONFIG_CRYPTO_ANSI_CPRNG=m | ||
2073 | CONFIG_CRYPTO_HW=y | ||
2074 | # CONFIG_BINARY_PRINTF is not set | ||
2075 | |||
2076 | # | ||
2077 | # Library routines | ||
2078 | # | ||
2079 | CONFIG_BITREVERSE=y | ||
2080 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
2081 | CONFIG_CRC_CCITT=m | ||
2082 | CONFIG_CRC16=m | ||
2083 | CONFIG_CRC_T10DIF=y | ||
2084 | CONFIG_CRC_ITU_T=y | ||
2085 | CONFIG_CRC32=y | ||
2086 | CONFIG_CRC7=y | ||
2087 | CONFIG_LIBCRC32C=m | ||
2088 | CONFIG_ZLIB_INFLATE=y | ||
2089 | CONFIG_ZLIB_DEFLATE=y | ||
2090 | CONFIG_LZO_COMPRESS=m | ||
2091 | CONFIG_LZO_DECOMPRESS=m | ||
2092 | CONFIG_DECOMPRESS_GZIP=y | ||
2093 | CONFIG_DECOMPRESS_BZIP2=y | ||
2094 | CONFIG_DECOMPRESS_LZMA=y | ||
2095 | CONFIG_HAS_IOMEM=y | ||
2096 | CONFIG_HAS_DMA=y | ||
2097 | CONFIG_NLATTR=y | ||
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig index 2d58b8fe59be..b49810461e41 100644 --- a/arch/arm/configs/s3c2410_defconfig +++ b/arch/arm/configs/s3c2410_defconfig | |||
@@ -260,6 +260,7 @@ CONFIG_MACH_NEXCODER_2440=y | |||
260 | CONFIG_SMDK2440_CPU2440=y | 260 | CONFIG_SMDK2440_CPU2440=y |
261 | CONFIG_MACH_AT2440EVB=y | 261 | CONFIG_MACH_AT2440EVB=y |
262 | CONFIG_CPU_S3C2442=y | 262 | CONFIG_CPU_S3C2442=y |
263 | CONFIG_MACH_MINI2440=y | ||
263 | 264 | ||
264 | # | 265 | # |
265 | # S3C2442 Machines | 266 | # S3C2442 Machines |
@@ -2298,7 +2299,6 @@ CONFIG_DEBUG_ERRORS=y | |||
2298 | # CONFIG_DEBUG_STACK_USAGE is not set | 2299 | # CONFIG_DEBUG_STACK_USAGE is not set |
2299 | CONFIG_DEBUG_LL=y | 2300 | CONFIG_DEBUG_LL=y |
2300 | # CONFIG_DEBUG_ICEDCC is not set | 2301 | # CONFIG_DEBUG_ICEDCC is not set |
2301 | CONFIG_DEBUG_S3C_PORT=y | ||
2302 | CONFIG_DEBUG_S3C_UART=0 | 2302 | CONFIG_DEBUG_S3C_UART=0 |
2303 | 2303 | ||
2304 | # | 2304 | # |
diff --git a/arch/arm/configs/s3c6400_defconfig b/arch/arm/configs/s3c6400_defconfig index 2e8fa50e9a09..32860609e057 100644 --- a/arch/arm/configs/s3c6400_defconfig +++ b/arch/arm/configs/s3c6400_defconfig | |||
@@ -816,7 +816,6 @@ CONFIG_DEBUG_ERRORS=y | |||
816 | # CONFIG_DEBUG_STACK_USAGE is not set | 816 | # CONFIG_DEBUG_STACK_USAGE is not set |
817 | CONFIG_DEBUG_LL=y | 817 | CONFIG_DEBUG_LL=y |
818 | # CONFIG_DEBUG_ICEDCC is not set | 818 | # CONFIG_DEBUG_ICEDCC is not set |
819 | CONFIG_DEBUG_S3C_PORT=y | ||
820 | CONFIG_DEBUG_S3C_UART=0 | 819 | CONFIG_DEBUG_S3C_UART=0 |
821 | 820 | ||
822 | # | 821 | # |
diff --git a/arch/arm/configs/tct_hammer_defconfig b/arch/arm/configs/tct_hammer_defconfig index 07dfb98df4f0..9d32faef05f6 100644 --- a/arch/arm/configs/tct_hammer_defconfig +++ b/arch/arm/configs/tct_hammer_defconfig | |||
@@ -857,7 +857,6 @@ CONFIG_DEBUG_ERRORS=y | |||
857 | # CONFIG_DEBUG_STACK_USAGE is not set | 857 | # CONFIG_DEBUG_STACK_USAGE is not set |
858 | CONFIG_DEBUG_LL=y | 858 | CONFIG_DEBUG_LL=y |
859 | # CONFIG_DEBUG_ICEDCC is not set | 859 | # CONFIG_DEBUG_ICEDCC is not set |
860 | # CONFIG_DEBUG_S3C_PORT is not set | ||
861 | CONFIG_DEBUG_S3C_UART=0 | 860 | CONFIG_DEBUG_S3C_UART=0 |
862 | 861 | ||
863 | # | 862 | # |
diff --git a/arch/arm/configs/u300_defconfig b/arch/arm/configs/u300_defconfig index 2d827e121147..4762d9001298 100644 --- a/arch/arm/configs/u300_defconfig +++ b/arch/arm/configs/u300_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.30-rc6 | 3 | # Linux kernel version: 2.6.31-rc1 |
4 | # Mon Jun 1 09:18:22 2009 | 4 | # Thu Jul 2 00:16:59 2009 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | 7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y |
@@ -9,7 +9,7 @@ CONFIG_GENERIC_GPIO=y | |||
9 | CONFIG_GENERIC_TIME=y | 9 | CONFIG_GENERIC_TIME=y |
10 | CONFIG_GENERIC_CLOCKEVENTS=y | 10 | CONFIG_GENERIC_CLOCKEVENTS=y |
11 | CONFIG_MMU=y | 11 | CONFIG_MMU=y |
12 | # CONFIG_NO_IOPORT is not set | 12 | CONFIG_HAVE_TCM=y |
13 | CONFIG_GENERIC_HARDIRQS=y | 13 | CONFIG_GENERIC_HARDIRQS=y |
14 | CONFIG_STACKTRACE_SUPPORT=y | 14 | CONFIG_STACKTRACE_SUPPORT=y |
15 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | 15 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y |
@@ -18,13 +18,12 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y | |||
18 | CONFIG_HARDIRQS_SW_RESEND=y | 18 | CONFIG_HARDIRQS_SW_RESEND=y |
19 | CONFIG_GENERIC_IRQ_PROBE=y | 19 | CONFIG_GENERIC_IRQ_PROBE=y |
20 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 20 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
21 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
22 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
23 | CONFIG_GENERIC_HWEIGHT=y | 21 | CONFIG_GENERIC_HWEIGHT=y |
24 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 22 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
25 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | 23 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y |
26 | CONFIG_VECTORS_BASE=0xffff0000 | 24 | CONFIG_VECTORS_BASE=0xffff0000 |
27 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 25 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
26 | CONFIG_CONSTRUCTORS=y | ||
28 | 27 | ||
29 | # | 28 | # |
30 | # General setup | 29 | # General setup |
@@ -68,7 +67,6 @@ CONFIG_SYSCTL_SYSCALL=y | |||
68 | CONFIG_KALLSYMS=y | 67 | CONFIG_KALLSYMS=y |
69 | # CONFIG_KALLSYMS_ALL is not set | 68 | # CONFIG_KALLSYMS_ALL is not set |
70 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 69 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
71 | # CONFIG_STRIP_ASM_SYMS is not set | ||
72 | CONFIG_HOTPLUG=y | 70 | CONFIG_HOTPLUG=y |
73 | CONFIG_PRINTK=y | 71 | CONFIG_PRINTK=y |
74 | CONFIG_BUG=y | 72 | CONFIG_BUG=y |
@@ -81,8 +79,13 @@ CONFIG_TIMERFD=y | |||
81 | CONFIG_EVENTFD=y | 79 | CONFIG_EVENTFD=y |
82 | CONFIG_SHMEM=y | 80 | CONFIG_SHMEM=y |
83 | # CONFIG_AIO is not set | 81 | # CONFIG_AIO is not set |
82 | |||
83 | # | ||
84 | # Performance Counters | ||
85 | # | ||
84 | # CONFIG_VM_EVENT_COUNTERS is not set | 86 | # CONFIG_VM_EVENT_COUNTERS is not set |
85 | CONFIG_SLUB_DEBUG=y | 87 | CONFIG_SLUB_DEBUG=y |
88 | # CONFIG_STRIP_ASM_SYMS is not set | ||
86 | CONFIG_COMPAT_BRK=y | 89 | CONFIG_COMPAT_BRK=y |
87 | # CONFIG_SLAB is not set | 90 | # CONFIG_SLAB is not set |
88 | CONFIG_SLUB=y | 91 | CONFIG_SLUB=y |
@@ -94,6 +97,10 @@ CONFIG_HAVE_OPROFILE=y | |||
94 | CONFIG_HAVE_KPROBES=y | 97 | CONFIG_HAVE_KPROBES=y |
95 | CONFIG_HAVE_KRETPROBES=y | 98 | CONFIG_HAVE_KRETPROBES=y |
96 | CONFIG_HAVE_CLK=y | 99 | CONFIG_HAVE_CLK=y |
100 | |||
101 | # | ||
102 | # GCOV-based kernel profiling | ||
103 | # | ||
97 | # CONFIG_SLOW_WORK is not set | 104 | # CONFIG_SLOW_WORK is not set |
98 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | 105 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y |
99 | CONFIG_SLABINFO=y | 106 | CONFIG_SLABINFO=y |
@@ -106,7 +113,7 @@ CONFIG_MODULE_UNLOAD=y | |||
106 | # CONFIG_MODVERSIONS is not set | 113 | # CONFIG_MODVERSIONS is not set |
107 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 114 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
108 | CONFIG_BLOCK=y | 115 | CONFIG_BLOCK=y |
109 | # CONFIG_LBD is not set | 116 | CONFIG_LBDAF=y |
110 | # CONFIG_BLK_DEV_BSG is not set | 117 | # CONFIG_BLK_DEV_BSG is not set |
111 | # CONFIG_BLK_DEV_INTEGRITY is not set | 118 | # CONFIG_BLK_DEV_INTEGRITY is not set |
112 | 119 | ||
@@ -138,9 +145,9 @@ CONFIG_DEFAULT_IOSCHED="deadline" | |||
138 | # CONFIG_ARCH_EP93XX is not set | 145 | # CONFIG_ARCH_EP93XX is not set |
139 | # CONFIG_ARCH_FOOTBRIDGE is not set | 146 | # CONFIG_ARCH_FOOTBRIDGE is not set |
140 | # CONFIG_ARCH_MXC is not set | 147 | # CONFIG_ARCH_MXC is not set |
148 | # CONFIG_ARCH_STMP3XXX is not set | ||
141 | # CONFIG_ARCH_NETX is not set | 149 | # CONFIG_ARCH_NETX is not set |
142 | # CONFIG_ARCH_H720X is not set | 150 | # CONFIG_ARCH_H720X is not set |
143 | # CONFIG_ARCH_IMX is not set | ||
144 | # CONFIG_ARCH_IOP13XX is not set | 151 | # CONFIG_ARCH_IOP13XX is not set |
145 | # CONFIG_ARCH_IOP32X is not set | 152 | # CONFIG_ARCH_IOP32X is not set |
146 | # CONFIG_ARCH_IOP33X is not set | 153 | # CONFIG_ARCH_IOP33X is not set |
@@ -216,8 +223,8 @@ CONFIG_ARM_THUMB=y | |||
216 | # CONFIG_CPU_DCACHE_DISABLE is not set | 223 | # CONFIG_CPU_DCACHE_DISABLE is not set |
217 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | 224 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set |
218 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | 225 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set |
219 | # CONFIG_OUTER_CACHE is not set | ||
220 | CONFIG_ARM_VIC=y | 226 | CONFIG_ARM_VIC=y |
227 | CONFIG_ARM_VIC_NR=2 | ||
221 | CONFIG_COMMON_CLKDEV=y | 228 | CONFIG_COMMON_CLKDEV=y |
222 | 229 | ||
223 | # | 230 | # |
@@ -243,7 +250,6 @@ CONFIG_PREEMPT=y | |||
243 | CONFIG_HZ=100 | 250 | CONFIG_HZ=100 |
244 | CONFIG_AEABI=y | 251 | CONFIG_AEABI=y |
245 | CONFIG_OABI_COMPAT=y | 252 | CONFIG_OABI_COMPAT=y |
246 | CONFIG_ARCH_FLATMEM_HAS_HOLES=y | ||
247 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set | 253 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set |
248 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set | 254 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set |
249 | # CONFIG_HIGHMEM is not set | 255 | # CONFIG_HIGHMEM is not set |
@@ -258,17 +264,18 @@ CONFIG_SPLIT_PTLOCK_CPUS=4096 | |||
258 | # CONFIG_PHYS_ADDR_T_64BIT is not set | 264 | # CONFIG_PHYS_ADDR_T_64BIT is not set |
259 | CONFIG_ZONE_DMA_FLAG=0 | 265 | CONFIG_ZONE_DMA_FLAG=0 |
260 | CONFIG_VIRT_TO_BUS=y | 266 | CONFIG_VIRT_TO_BUS=y |
261 | CONFIG_UNEVICTABLE_LRU=y | ||
262 | CONFIG_HAVE_MLOCK=y | 267 | CONFIG_HAVE_MLOCK=y |
263 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | 268 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y |
269 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
264 | CONFIG_ALIGNMENT_TRAP=y | 270 | CONFIG_ALIGNMENT_TRAP=y |
271 | # CONFIG_UACCESS_WITH_MEMCPY is not set | ||
265 | 272 | ||
266 | # | 273 | # |
267 | # Boot options | 274 | # Boot options |
268 | # | 275 | # |
269 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 276 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
270 | CONFIG_ZBOOT_ROM_BSS=0x0 | 277 | CONFIG_ZBOOT_ROM_BSS=0x0 |
271 | CONFIG_CMDLINE="root=/dev/mtdblock2 rw rootfstype=yaffs2 console=ttyAMA0,115200n8 ab3100.force=0,0x48 mtdparts=u300nand:128k@0x0(bootrecords)ro,8064k@128k(free)ro,253952k@8192k(platform) lpj=515072" | 278 | CONFIG_CMDLINE="root=/dev/ram0 rw rootfstype=rootfs console=ttyAMA0,115200n8 lpj=515072" |
272 | # CONFIG_XIP_KERNEL is not set | 279 | # CONFIG_XIP_KERNEL is not set |
273 | # CONFIG_KEXEC is not set | 280 | # CONFIG_KEXEC is not set |
274 | 281 | ||
@@ -359,6 +366,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
359 | # CONFIG_ECONET is not set | 366 | # CONFIG_ECONET is not set |
360 | # CONFIG_WAN_ROUTER is not set | 367 | # CONFIG_WAN_ROUTER is not set |
361 | # CONFIG_PHONET is not set | 368 | # CONFIG_PHONET is not set |
369 | # CONFIG_IEEE802154 is not set | ||
362 | # CONFIG_NET_SCHED is not set | 370 | # CONFIG_NET_SCHED is not set |
363 | # CONFIG_DCB is not set | 371 | # CONFIG_DCB is not set |
364 | 372 | ||
@@ -497,6 +505,7 @@ CONFIG_MISC_DEVICES=y | |||
497 | # CONFIG_EEPROM_AT24 is not set | 505 | # CONFIG_EEPROM_AT24 is not set |
498 | # CONFIG_EEPROM_AT25 is not set | 506 | # CONFIG_EEPROM_AT25 is not set |
499 | # CONFIG_EEPROM_LEGACY is not set | 507 | # CONFIG_EEPROM_LEGACY is not set |
508 | # CONFIG_EEPROM_MAX6875 is not set | ||
500 | # CONFIG_EEPROM_93CX6 is not set | 509 | # CONFIG_EEPROM_93CX6 is not set |
501 | CONFIG_HAVE_IDE=y | 510 | CONFIG_HAVE_IDE=y |
502 | # CONFIG_IDE is not set | 511 | # CONFIG_IDE is not set |
@@ -538,6 +547,7 @@ CONFIG_INPUT_KEYBOARD=y | |||
538 | # CONFIG_KEYBOARD_XTKBD is not set | 547 | # CONFIG_KEYBOARD_XTKBD is not set |
539 | # CONFIG_KEYBOARD_NEWTON is not set | 548 | # CONFIG_KEYBOARD_NEWTON is not set |
540 | # CONFIG_KEYBOARD_STOWAWAY is not set | 549 | # CONFIG_KEYBOARD_STOWAWAY is not set |
550 | # CONFIG_KEYBOARD_LM8323 is not set | ||
541 | # CONFIG_KEYBOARD_GPIO is not set | 551 | # CONFIG_KEYBOARD_GPIO is not set |
542 | # CONFIG_INPUT_MOUSE is not set | 552 | # CONFIG_INPUT_MOUSE is not set |
543 | # CONFIG_INPUT_JOYSTICK is not set | 553 | # CONFIG_INPUT_JOYSTICK is not set |
@@ -597,9 +607,11 @@ CONFIG_I2C_HELPER_AUTO=y | |||
597 | # | 607 | # |
598 | # I2C system bus drivers (mostly embedded / system-on-chip) | 608 | # I2C system bus drivers (mostly embedded / system-on-chip) |
599 | # | 609 | # |
610 | # CONFIG_I2C_DESIGNWARE is not set | ||
600 | # CONFIG_I2C_GPIO is not set | 611 | # CONFIG_I2C_GPIO is not set |
601 | # CONFIG_I2C_OCORES is not set | 612 | # CONFIG_I2C_OCORES is not set |
602 | # CONFIG_I2C_SIMTEC is not set | 613 | # CONFIG_I2C_SIMTEC is not set |
614 | CONFIG_I2C_STU300=y | ||
603 | 615 | ||
604 | # | 616 | # |
605 | # External I2C/SMBus adapter drivers | 617 | # External I2C/SMBus adapter drivers |
@@ -620,7 +632,6 @@ CONFIG_I2C_HELPER_AUTO=y | |||
620 | # CONFIG_SENSORS_PCF8574 is not set | 632 | # CONFIG_SENSORS_PCF8574 is not set |
621 | # CONFIG_PCF8575 is not set | 633 | # CONFIG_PCF8575 is not set |
622 | # CONFIG_SENSORS_PCA9539 is not set | 634 | # CONFIG_SENSORS_PCA9539 is not set |
623 | # CONFIG_SENSORS_MAX6875 is not set | ||
624 | # CONFIG_SENSORS_TSL2550 is not set | 635 | # CONFIG_SENSORS_TSL2550 is not set |
625 | # CONFIG_I2C_DEBUG_CORE is not set | 636 | # CONFIG_I2C_DEBUG_CORE is not set |
626 | # CONFIG_I2C_DEBUG_ALGO is not set | 637 | # CONFIG_I2C_DEBUG_ALGO is not set |
@@ -635,6 +646,7 @@ CONFIG_SPI_MASTER=y | |||
635 | # | 646 | # |
636 | # CONFIG_SPI_BITBANG is not set | 647 | # CONFIG_SPI_BITBANG is not set |
637 | # CONFIG_SPI_GPIO is not set | 648 | # CONFIG_SPI_GPIO is not set |
649 | CONFIG_SPI_PL022=y | ||
638 | 650 | ||
639 | # | 651 | # |
640 | # SPI Protocol Masters | 652 | # SPI Protocol Masters |
@@ -647,6 +659,7 @@ CONFIG_POWER_SUPPLY=y | |||
647 | # CONFIG_PDA_POWER is not set | 659 | # CONFIG_PDA_POWER is not set |
648 | # CONFIG_BATTERY_DS2760 is not set | 660 | # CONFIG_BATTERY_DS2760 is not set |
649 | # CONFIG_BATTERY_BQ27x00 is not set | 661 | # CONFIG_BATTERY_BQ27x00 is not set |
662 | # CONFIG_BATTERY_MAX17040 is not set | ||
650 | # CONFIG_HWMON is not set | 663 | # CONFIG_HWMON is not set |
651 | # CONFIG_THERMAL is not set | 664 | # CONFIG_THERMAL is not set |
652 | # CONFIG_THERMAL_HWMON is not set | 665 | # CONFIG_THERMAL_HWMON is not set |
@@ -657,6 +670,7 @@ CONFIG_WATCHDOG=y | |||
657 | # Watchdog Device Drivers | 670 | # Watchdog Device Drivers |
658 | # | 671 | # |
659 | # CONFIG_SOFT_WATCHDOG is not set | 672 | # CONFIG_SOFT_WATCHDOG is not set |
673 | CONFIG_COH901327_WATCHDOG=y | ||
660 | CONFIG_SSB_POSSIBLE=y | 674 | CONFIG_SSB_POSSIBLE=y |
661 | 675 | ||
662 | # | 676 | # |
@@ -678,22 +692,9 @@ CONFIG_SSB_POSSIBLE=y | |||
678 | # CONFIG_MFD_WM8400 is not set | 692 | # CONFIG_MFD_WM8400 is not set |
679 | # CONFIG_MFD_WM8350_I2C is not set | 693 | # CONFIG_MFD_WM8350_I2C is not set |
680 | # CONFIG_MFD_PCF50633 is not set | 694 | # CONFIG_MFD_PCF50633 is not set |
681 | 695 | CONFIG_AB3100_CORE=y | |
682 | # | 696 | # CONFIG_EZX_PCAP is not set |
683 | # Multimedia devices | 697 | # CONFIG_MEDIA_SUPPORT is not set |
684 | # | ||
685 | |||
686 | # | ||
687 | # Multimedia core support | ||
688 | # | ||
689 | # CONFIG_VIDEO_DEV is not set | ||
690 | # CONFIG_DVB_CORE is not set | ||
691 | # CONFIG_VIDEO_MEDIA is not set | ||
692 | |||
693 | # | ||
694 | # Multimedia drivers | ||
695 | # | ||
696 | # CONFIG_DAB is not set | ||
697 | 698 | ||
698 | # | 699 | # |
699 | # Graphics support | 700 | # Graphics support |
@@ -760,6 +761,11 @@ CONFIG_SND_JACK=y | |||
760 | # CONFIG_SND_VERBOSE_PROCFS is not set | 761 | # CONFIG_SND_VERBOSE_PROCFS is not set |
761 | # CONFIG_SND_VERBOSE_PRINTK is not set | 762 | # CONFIG_SND_VERBOSE_PRINTK is not set |
762 | # CONFIG_SND_DEBUG is not set | 763 | # CONFIG_SND_DEBUG is not set |
764 | # CONFIG_SND_RAWMIDI_SEQ is not set | ||
765 | # CONFIG_SND_OPL3_LIB_SEQ is not set | ||
766 | # CONFIG_SND_OPL4_LIB_SEQ is not set | ||
767 | # CONFIG_SND_SBAWE_SEQ is not set | ||
768 | # CONFIG_SND_EMU10K1_SEQ is not set | ||
763 | # CONFIG_SND_DRIVERS is not set | 769 | # CONFIG_SND_DRIVERS is not set |
764 | # CONFIG_SND_ARM is not set | 770 | # CONFIG_SND_ARM is not set |
765 | # CONFIG_SND_SPI is not set | 771 | # CONFIG_SND_SPI is not set |
@@ -770,7 +776,7 @@ CONFIG_SND_SOC_I2C_AND_SPI=y | |||
770 | # CONFIG_HID_SUPPORT is not set | 776 | # CONFIG_HID_SUPPORT is not set |
771 | # CONFIG_USB_SUPPORT is not set | 777 | # CONFIG_USB_SUPPORT is not set |
772 | CONFIG_MMC=y | 778 | CONFIG_MMC=y |
773 | # CONFIG_MMC_DEBUG is not set | 779 | CONFIG_MMC_DEBUG=y |
774 | # CONFIG_MMC_UNSAFE_RESUME is not set | 780 | # CONFIG_MMC_UNSAFE_RESUME is not set |
775 | 781 | ||
776 | # | 782 | # |
@@ -797,7 +803,7 @@ CONFIG_LEDS_CLASS=y | |||
797 | # | 803 | # |
798 | # CONFIG_LEDS_PCA9532 is not set | 804 | # CONFIG_LEDS_PCA9532 is not set |
799 | # CONFIG_LEDS_GPIO is not set | 805 | # CONFIG_LEDS_GPIO is not set |
800 | # CONFIG_LEDS_LP5521 is not set | 806 | # CONFIG_LEDS_LP3944 is not set |
801 | # CONFIG_LEDS_PCA955X is not set | 807 | # CONFIG_LEDS_PCA955X is not set |
802 | # CONFIG_LEDS_DAC124S085 is not set | 808 | # CONFIG_LEDS_DAC124S085 is not set |
803 | # CONFIG_LEDS_BD2802 is not set | 809 | # CONFIG_LEDS_BD2802 is not set |
@@ -845,6 +851,7 @@ CONFIG_RTC_INTF_DEV=y | |||
845 | # CONFIG_RTC_DRV_S35390A is not set | 851 | # CONFIG_RTC_DRV_S35390A is not set |
846 | # CONFIG_RTC_DRV_FM3130 is not set | 852 | # CONFIG_RTC_DRV_FM3130 is not set |
847 | # CONFIG_RTC_DRV_RX8581 is not set | 853 | # CONFIG_RTC_DRV_RX8581 is not set |
854 | # CONFIG_RTC_DRV_RX8025 is not set | ||
848 | 855 | ||
849 | # | 856 | # |
850 | # SPI RTC drivers | 857 | # SPI RTC drivers |
@@ -887,7 +894,10 @@ CONFIG_REGULATOR=y | |||
887 | # CONFIG_REGULATOR_DEBUG is not set | 894 | # CONFIG_REGULATOR_DEBUG is not set |
888 | # CONFIG_REGULATOR_FIXED_VOLTAGE is not set | 895 | # CONFIG_REGULATOR_FIXED_VOLTAGE is not set |
889 | # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set | 896 | # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set |
897 | # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set | ||
890 | # CONFIG_REGULATOR_BQ24022 is not set | 898 | # CONFIG_REGULATOR_BQ24022 is not set |
899 | # CONFIG_REGULATOR_MAX1586 is not set | ||
900 | # CONFIG_REGULATOR_LP3971 is not set | ||
891 | # CONFIG_UIO is not set | 901 | # CONFIG_UIO is not set |
892 | # CONFIG_STAGING is not set | 902 | # CONFIG_STAGING is not set |
893 | 903 | ||
@@ -900,16 +910,20 @@ CONFIG_REGULATOR=y | |||
900 | # CONFIG_REISERFS_FS is not set | 910 | # CONFIG_REISERFS_FS is not set |
901 | # CONFIG_JFS_FS is not set | 911 | # CONFIG_JFS_FS is not set |
902 | # CONFIG_FS_POSIX_ACL is not set | 912 | # CONFIG_FS_POSIX_ACL is not set |
903 | CONFIG_FILE_LOCKING=y | ||
904 | # CONFIG_XFS_FS is not set | 913 | # CONFIG_XFS_FS is not set |
914 | # CONFIG_GFS2_FS is not set | ||
905 | # CONFIG_OCFS2_FS is not set | 915 | # CONFIG_OCFS2_FS is not set |
906 | # CONFIG_BTRFS_FS is not set | 916 | # CONFIG_BTRFS_FS is not set |
917 | CONFIG_FILE_LOCKING=y | ||
918 | CONFIG_FSNOTIFY=y | ||
907 | # CONFIG_DNOTIFY is not set | 919 | # CONFIG_DNOTIFY is not set |
908 | # CONFIG_INOTIFY is not set | 920 | # CONFIG_INOTIFY is not set |
921 | CONFIG_INOTIFY_USER=y | ||
909 | # CONFIG_QUOTA is not set | 922 | # CONFIG_QUOTA is not set |
910 | # CONFIG_AUTOFS_FS is not set | 923 | # CONFIG_AUTOFS_FS is not set |
911 | # CONFIG_AUTOFS4_FS is not set | 924 | # CONFIG_AUTOFS4_FS is not set |
912 | CONFIG_FUSE_FS=y | 925 | CONFIG_FUSE_FS=y |
926 | # CONFIG_CUSE is not set | ||
913 | 927 | ||
914 | # | 928 | # |
915 | # Caches | 929 | # Caches |
@@ -1033,6 +1047,7 @@ CONFIG_TIMER_STATS=y | |||
1033 | # CONFIG_DEBUG_OBJECTS is not set | 1047 | # CONFIG_DEBUG_OBJECTS is not set |
1034 | # CONFIG_SLUB_DEBUG_ON is not set | 1048 | # CONFIG_SLUB_DEBUG_ON is not set |
1035 | # CONFIG_SLUB_STATS is not set | 1049 | # CONFIG_SLUB_STATS is not set |
1050 | # CONFIG_DEBUG_KMEMLEAK is not set | ||
1036 | # CONFIG_DEBUG_PREEMPT is not set | 1051 | # CONFIG_DEBUG_PREEMPT is not set |
1037 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1052 | # CONFIG_DEBUG_RT_MUTEXES is not set |
1038 | # CONFIG_RT_MUTEX_TESTER is not set | 1053 | # CONFIG_RT_MUTEX_TESTER is not set |
@@ -1063,18 +1078,16 @@ CONFIG_DEBUG_INFO=y | |||
1063 | # CONFIG_PAGE_POISONING is not set | 1078 | # CONFIG_PAGE_POISONING is not set |
1064 | CONFIG_HAVE_FUNCTION_TRACER=y | 1079 | CONFIG_HAVE_FUNCTION_TRACER=y |
1065 | CONFIG_TRACING_SUPPORT=y | 1080 | CONFIG_TRACING_SUPPORT=y |
1066 | 1081 | CONFIG_FTRACE=y | |
1067 | # | ||
1068 | # Tracers | ||
1069 | # | ||
1070 | # CONFIG_FUNCTION_TRACER is not set | 1082 | # CONFIG_FUNCTION_TRACER is not set |
1071 | # CONFIG_IRQSOFF_TRACER is not set | 1083 | # CONFIG_IRQSOFF_TRACER is not set |
1072 | # CONFIG_PREEMPT_TRACER is not set | 1084 | # CONFIG_PREEMPT_TRACER is not set |
1073 | # CONFIG_SCHED_TRACER is not set | 1085 | # CONFIG_SCHED_TRACER is not set |
1074 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 1086 | # CONFIG_ENABLE_DEFAULT_TRACERS is not set |
1075 | # CONFIG_EVENT_TRACER is not set | ||
1076 | # CONFIG_BOOT_TRACER is not set | 1087 | # CONFIG_BOOT_TRACER is not set |
1077 | # CONFIG_TRACE_BRANCH_PROFILING is not set | 1088 | CONFIG_BRANCH_PROFILE_NONE=y |
1089 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
1090 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
1078 | # CONFIG_STACK_TRACER is not set | 1091 | # CONFIG_STACK_TRACER is not set |
1079 | # CONFIG_KMEMTRACE is not set | 1092 | # CONFIG_KMEMTRACE is not set |
1080 | # CONFIG_WORKQUEUE_TRACER is not set | 1093 | # CONFIG_WORKQUEUE_TRACER is not set |
@@ -1109,6 +1122,7 @@ CONFIG_GENERIC_FIND_LAST_BIT=y | |||
1109 | # CONFIG_CRC32 is not set | 1122 | # CONFIG_CRC32 is not set |
1110 | # CONFIG_CRC7 is not set | 1123 | # CONFIG_CRC7 is not set |
1111 | # CONFIG_LIBCRC32C is not set | 1124 | # CONFIG_LIBCRC32C is not set |
1125 | CONFIG_GENERIC_ALLOCATOR=y | ||
1112 | CONFIG_HAS_IOMEM=y | 1126 | CONFIG_HAS_IOMEM=y |
1113 | CONFIG_HAS_IOPORT=y | 1127 | CONFIG_HAS_IOPORT=y |
1114 | CONFIG_HAS_DMA=y | 1128 | CONFIG_HAS_DMA=y |
diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h index be962c1349c4..9c746af1bf6e 100644 --- a/arch/arm/include/asm/page.h +++ b/arch/arm/include/asm/page.h | |||
@@ -12,7 +12,7 @@ | |||
12 | 12 | ||
13 | /* PAGE_SHIFT determines the page size */ | 13 | /* PAGE_SHIFT determines the page size */ |
14 | #define PAGE_SHIFT 12 | 14 | #define PAGE_SHIFT 12 |
15 | #define PAGE_SIZE (1UL << PAGE_SHIFT) | 15 | #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) |
16 | #define PAGE_MASK (~(PAGE_SIZE-1)) | 16 | #define PAGE_MASK (~(PAGE_SIZE-1)) |
17 | 17 | ||
18 | #ifndef __ASSEMBLY__ | 18 | #ifndef __ASSEMBLY__ |
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 1cd2d6416bda..c433c6c73112 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h | |||
@@ -285,15 +285,6 @@ extern struct page *empty_zero_page; | |||
285 | #define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) | 285 | #define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) |
286 | #define pte_special(pte) (0) | 286 | #define pte_special(pte) (0) |
287 | 287 | ||
288 | /* | ||
289 | * The following only works if pte_present() is not true. | ||
290 | */ | ||
291 | #define pte_file(pte) (pte_val(pte) & L_PTE_FILE) | ||
292 | #define pte_to_pgoff(x) (pte_val(x) >> 2) | ||
293 | #define pgoff_to_pte(x) __pte(((x) << 2) | L_PTE_FILE) | ||
294 | |||
295 | #define PTE_FILE_MAX_BITS 30 | ||
296 | |||
297 | #define PTE_BIT_FUNC(fn,op) \ | 288 | #define PTE_BIT_FUNC(fn,op) \ |
298 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; } | 289 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; } |
299 | 290 | ||
@@ -384,16 +375,50 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
384 | 375 | ||
385 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; | 376 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; |
386 | 377 | ||
387 | /* Encode and decode a swap entry. | 378 | /* |
379 | * Encode and decode a swap entry. Swap entries are stored in the Linux | ||
380 | * page tables as follows: | ||
388 | * | 381 | * |
389 | * We support up to 32GB of swap on 4k machines | 382 | * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 |
383 | * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 | ||
384 | * <--------------- offset --------------------> <--- type --> 0 0 | ||
385 | * | ||
386 | * This gives us up to 127 swap files and 32GB per swap file. Note that | ||
387 | * the offset field is always non-zero. | ||
390 | */ | 388 | */ |
391 | #define __swp_type(x) (((x).val >> 2) & 0x7f) | 389 | #define __SWP_TYPE_SHIFT 2 |
392 | #define __swp_offset(x) ((x).val >> 9) | 390 | #define __SWP_TYPE_BITS 7 |
393 | #define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 9) }) | 391 | #define __SWP_TYPE_MASK ((1 << __SWP_TYPE_BITS) - 1) |
392 | #define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT) | ||
393 | |||
394 | #define __swp_type(x) (((x).val >> __SWP_TYPE_SHIFT) & __SWP_TYPE_MASK) | ||
395 | #define __swp_offset(x) ((x).val >> __SWP_OFFSET_SHIFT) | ||
396 | #define __swp_entry(type,offset) ((swp_entry_t) { ((type) << __SWP_TYPE_SHIFT) | ((offset) << __SWP_OFFSET_SHIFT) }) | ||
397 | |||
394 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) | 398 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) |
395 | #define __swp_entry_to_pte(swp) ((pte_t) { (swp).val }) | 399 | #define __swp_entry_to_pte(swp) ((pte_t) { (swp).val }) |
396 | 400 | ||
401 | /* | ||
402 | * It is an error for the kernel to have more swap files than we can | ||
403 | * encode in the PTEs. This ensures that we know when MAX_SWAPFILES | ||
404 | * is increased beyond what we presently support. | ||
405 | */ | ||
406 | #define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS) | ||
407 | |||
408 | /* | ||
409 | * Encode and decode a file entry. File entries are stored in the Linux | ||
410 | * page tables as follows: | ||
411 | * | ||
412 | * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 | ||
413 | * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 | ||
414 | * <------------------------ offset -------------------------> 1 0 | ||
415 | */ | ||
416 | #define pte_file(pte) (pte_val(pte) & L_PTE_FILE) | ||
417 | #define pte_to_pgoff(x) (pte_val(x) >> 2) | ||
418 | #define pgoff_to_pte(x) __pte(((x) << 2) | L_PTE_FILE) | ||
419 | |||
420 | #define PTE_FILE_MAX_BITS 30 | ||
421 | |||
397 | /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ | 422 | /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ |
398 | /* FIXME: this is not correct */ | 423 | /* FIXME: this is not correct */ |
399 | #define kern_addr_valid(addr) (1) | 424 | #define kern_addr_valid(addr) (1) |
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h index 4f8848260ee2..73394e50cbca 100644 --- a/arch/arm/include/asm/thread_info.h +++ b/arch/arm/include/asm/thread_info.h | |||
@@ -73,7 +73,7 @@ struct thread_info { | |||
73 | .task = &tsk, \ | 73 | .task = &tsk, \ |
74 | .exec_domain = &default_exec_domain, \ | 74 | .exec_domain = &default_exec_domain, \ |
75 | .flags = 0, \ | 75 | .flags = 0, \ |
76 | .preempt_count = 1, \ | 76 | .preempt_count = INIT_PREEMPT_COUNT, \ |
77 | .addr_limit = KERNEL_DS, \ | 77 | .addr_limit = KERNEL_DS, \ |
78 | .cpu_domain = domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \ | 78 | .cpu_domain = domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \ |
79 | domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \ | 79 | domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \ |
diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h index 94cc58ef61ae..0e97b8cb77d5 100644 --- a/arch/arm/include/asm/unistd.h +++ b/arch/arm/include/asm/unistd.h | |||
@@ -389,6 +389,8 @@ | |||
389 | #define __NR_inotify_init1 (__NR_SYSCALL_BASE+360) | 389 | #define __NR_inotify_init1 (__NR_SYSCALL_BASE+360) |
390 | #define __NR_preadv (__NR_SYSCALL_BASE+361) | 390 | #define __NR_preadv (__NR_SYSCALL_BASE+361) |
391 | #define __NR_pwritev (__NR_SYSCALL_BASE+362) | 391 | #define __NR_pwritev (__NR_SYSCALL_BASE+362) |
392 | #define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363) | ||
393 | #define __NR_perf_counter_open (__NR_SYSCALL_BASE+364) | ||
392 | 394 | ||
393 | /* | 395 | /* |
394 | * The following SWIs are ARM private. | 396 | * The following SWIs are ARM private. |
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 1680e9e9c831..f776e72a4cb8 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S | |||
@@ -372,6 +372,8 @@ | |||
372 | /* 360 */ CALL(sys_inotify_init1) | 372 | /* 360 */ CALL(sys_inotify_init1) |
373 | CALL(sys_preadv) | 373 | CALL(sys_preadv) |
374 | CALL(sys_pwritev) | 374 | CALL(sys_pwritev) |
375 | CALL(sys_rt_tgsigqueueinfo) | ||
376 | CALL(sys_perf_counter_open) | ||
375 | #ifndef syscalls_counted | 377 | #ifndef syscalls_counted |
376 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls | 378 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls |
377 | #define syscalls_counted | 379 | #define syscalls_counted |
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 6874c7dca75a..b7c3490eaa24 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c | |||
@@ -98,17 +98,6 @@ unlock: | |||
98 | return 0; | 98 | return 0; |
99 | } | 99 | } |
100 | 100 | ||
101 | /* Handle bad interrupts */ | ||
102 | static struct irq_desc bad_irq_desc = { | ||
103 | .handle_irq = handle_bad_irq, | ||
104 | .lock = __SPIN_LOCK_UNLOCKED(bad_irq_desc.lock), | ||
105 | }; | ||
106 | |||
107 | #ifdef CONFIG_CPUMASK_OFFSTACK | ||
108 | /* We are not allocating bad_irq_desc.affinity or .pending_mask */ | ||
109 | #error "ARM architecture does not support CONFIG_CPUMASK_OFFSTACK." | ||
110 | #endif | ||
111 | |||
112 | /* | 101 | /* |
113 | * do_IRQ handles all hardware IRQ's. Decoded IRQs should not | 102 | * do_IRQ handles all hardware IRQ's. Decoded IRQs should not |
114 | * come via this function. Instead, they should provide their | 103 | * come via this function. Instead, they should provide their |
@@ -124,10 +113,13 @@ asmlinkage void __exception asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
124 | * Some hardware gives randomly wrong interrupts. Rather | 113 | * Some hardware gives randomly wrong interrupts. Rather |
125 | * than crashing, do something sensible. | 114 | * than crashing, do something sensible. |
126 | */ | 115 | */ |
127 | if (irq >= NR_IRQS) | 116 | if (unlikely(irq >= NR_IRQS)) { |
128 | handle_bad_irq(irq, &bad_irq_desc); | 117 | if (printk_ratelimit()) |
129 | else | 118 | printk(KERN_WARNING "Bad IRQ%u\n", irq); |
119 | ack_bad_irq(irq); | ||
120 | } else { | ||
130 | generic_handle_irq(irq); | 121 | generic_handle_irq(irq); |
122 | } | ||
131 | 123 | ||
132 | /* AT91 specific workaround */ | 124 | /* AT91 specific workaround */ |
133 | irq_finish(irq); | 125 | irq_finish(irq); |
@@ -165,10 +157,6 @@ void __init init_IRQ(void) | |||
165 | for (irq = 0; irq < NR_IRQS; irq++) | 157 | for (irq = 0; irq < NR_IRQS; irq++) |
166 | irq_desc[irq].status |= IRQ_NOREQUEST | IRQ_NOPROBE; | 158 | irq_desc[irq].status |= IRQ_NOREQUEST | IRQ_NOPROBE; |
167 | 159 | ||
168 | #ifdef CONFIG_SMP | ||
169 | cpumask_setall(bad_irq_desc.affinity); | ||
170 | bad_irq_desc.cpu = smp_processor_id(); | ||
171 | #endif | ||
172 | init_arch_irq(); | 160 | init_arch_irq(); |
173 | } | 161 | } |
174 | 162 | ||
@@ -176,7 +164,7 @@ void __init init_IRQ(void) | |||
176 | 164 | ||
177 | static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu) | 165 | static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu) |
178 | { | 166 | { |
179 | pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->cpu, cpu); | 167 | pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->node, cpu); |
180 | 168 | ||
181 | spin_lock_irq(&desc->lock); | 169 | spin_lock_irq(&desc->lock); |
182 | desc->chip->set_affinity(irq, cpumask_of(cpu)); | 170 | desc->chip->set_affinity(irq, cpumask_of(cpu)); |
@@ -195,7 +183,7 @@ void migrate_irqs(void) | |||
195 | for (i = 0; i < NR_IRQS; i++) { | 183 | for (i = 0; i < NR_IRQS; i++) { |
196 | struct irq_desc *desc = irq_desc + i; | 184 | struct irq_desc *desc = irq_desc + i; |
197 | 185 | ||
198 | if (desc->cpu == cpu) { | 186 | if (desc->node == cpu) { |
199 | unsigned int newcpu = cpumask_any_and(desc->affinity, | 187 | unsigned int newcpu = cpumask_any_and(desc->affinity, |
200 | cpu_online_mask); | 188 | cpu_online_mask); |
201 | if (newcpu >= nr_cpu_ids) { | 189 | if (newcpu >= nr_cpu_ids) { |
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 1585423699ee..39196dff478c 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -114,9 +114,6 @@ void arm_machine_restart(char mode, const char *cmd) | |||
114 | /* | 114 | /* |
115 | * Function pointers to optional machine specific functions | 115 | * Function pointers to optional machine specific functions |
116 | */ | 116 | */ |
117 | void (*pm_idle)(void); | ||
118 | EXPORT_SYMBOL(pm_idle); | ||
119 | |||
120 | void (*pm_power_off)(void); | 117 | void (*pm_power_off)(void); |
121 | EXPORT_SYMBOL(pm_power_off); | 118 | EXPORT_SYMBOL(pm_power_off); |
122 | 119 | ||
@@ -130,20 +127,19 @@ EXPORT_SYMBOL_GPL(arm_pm_restart); | |||
130 | */ | 127 | */ |
131 | static void default_idle(void) | 128 | static void default_idle(void) |
132 | { | 129 | { |
133 | if (hlt_counter) | 130 | if (!need_resched()) |
134 | cpu_relax(); | 131 | arch_idle(); |
135 | else { | 132 | local_irq_enable(); |
136 | local_irq_disable(); | ||
137 | if (!need_resched()) | ||
138 | arch_idle(); | ||
139 | local_irq_enable(); | ||
140 | } | ||
141 | } | 133 | } |
142 | 134 | ||
135 | void (*pm_idle)(void) = default_idle; | ||
136 | EXPORT_SYMBOL(pm_idle); | ||
137 | |||
143 | /* | 138 | /* |
144 | * The idle thread. We try to conserve power, while trying to keep | 139 | * The idle thread, has rather strange semantics for calling pm_idle, |
145 | * overall latency low. The architecture specific idle is passed | 140 | * but this is what x86 does and we need to do the same, so that |
146 | * a value to indicate the level of "idleness" of the system. | 141 | * things like cpuidle get called in the same way. The only difference |
142 | * is that we always respect 'hlt_counter' to prevent low power idle. | ||
147 | */ | 143 | */ |
148 | void cpu_idle(void) | 144 | void cpu_idle(void) |
149 | { | 145 | { |
@@ -151,21 +147,31 @@ void cpu_idle(void) | |||
151 | 147 | ||
152 | /* endless idle loop with no priority at all */ | 148 | /* endless idle loop with no priority at all */ |
153 | while (1) { | 149 | while (1) { |
154 | void (*idle)(void) = pm_idle; | 150 | tick_nohz_stop_sched_tick(1); |
155 | 151 | leds_event(led_idle_start); | |
152 | while (!need_resched()) { | ||
156 | #ifdef CONFIG_HOTPLUG_CPU | 153 | #ifdef CONFIG_HOTPLUG_CPU |
157 | if (cpu_is_offline(smp_processor_id())) { | 154 | if (cpu_is_offline(smp_processor_id())) |
158 | leds_event(led_idle_start); | 155 | cpu_die(); |
159 | cpu_die(); | ||
160 | } | ||
161 | #endif | 156 | #endif |
162 | 157 | ||
163 | if (!idle) | 158 | local_irq_disable(); |
164 | idle = default_idle; | 159 | if (hlt_counter) { |
165 | leds_event(led_idle_start); | 160 | local_irq_enable(); |
166 | tick_nohz_stop_sched_tick(1); | 161 | cpu_relax(); |
167 | while (!need_resched()) | 162 | } else { |
168 | idle(); | 163 | stop_critical_timings(); |
164 | pm_idle(); | ||
165 | start_critical_timings(); | ||
166 | /* | ||
167 | * This will eventually be removed - pm_idle | ||
168 | * functions should always return with IRQs | ||
169 | * enabled. | ||
170 | */ | ||
171 | WARN_ON(irqs_disabled()); | ||
172 | local_irq_enable(); | ||
173 | } | ||
174 | } | ||
169 | leds_event(led_idle_end); | 175 | leds_event(led_idle_end); |
170 | tick_nohz_restart_sched_tick(); | 176 | tick_nohz_restart_sched_tick(); |
171 | preempt_enable_no_resched(); | 177 | preempt_enable_no_resched(); |
@@ -352,6 +358,23 @@ asm( ".section .text\n" | |||
352 | " .size kernel_thread_helper, . - kernel_thread_helper\n" | 358 | " .size kernel_thread_helper, . - kernel_thread_helper\n" |
353 | " .previous"); | 359 | " .previous"); |
354 | 360 | ||
361 | #ifdef CONFIG_ARM_UNWIND | ||
362 | extern void kernel_thread_exit(long code); | ||
363 | asm( ".section .text\n" | ||
364 | " .align\n" | ||
365 | " .type kernel_thread_exit, #function\n" | ||
366 | "kernel_thread_exit:\n" | ||
367 | " .fnstart\n" | ||
368 | " .cantunwind\n" | ||
369 | " bl do_exit\n" | ||
370 | " nop\n" | ||
371 | " .fnend\n" | ||
372 | " .size kernel_thread_exit, . - kernel_thread_exit\n" | ||
373 | " .previous"); | ||
374 | #else | ||
375 | #define kernel_thread_exit do_exit | ||
376 | #endif | ||
377 | |||
355 | /* | 378 | /* |
356 | * Create a kernel thread. | 379 | * Create a kernel thread. |
357 | */ | 380 | */ |
@@ -363,7 +386,7 @@ pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) | |||
363 | 386 | ||
364 | regs.ARM_r1 = (unsigned long)arg; | 387 | regs.ARM_r1 = (unsigned long)arg; |
365 | regs.ARM_r2 = (unsigned long)fn; | 388 | regs.ARM_r2 = (unsigned long)fn; |
366 | regs.ARM_r3 = (unsigned long)do_exit; | 389 | regs.ARM_r3 = (unsigned long)kernel_thread_exit; |
367 | regs.ARM_pc = (unsigned long)kernel_thread_helper; | 390 | regs.ARM_pc = (unsigned long)kernel_thread_helper; |
368 | regs.ARM_cpsr = SVC_MODE | PSR_ENDSTATE; | 391 | regs.ARM_cpsr = SVC_MODE | PSR_ENDSTATE; |
369 | 392 | ||
diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c index 1dedc2c7ff49..dd56e11f339a 100644 --- a/arch/arm/kernel/unwind.c +++ b/arch/arm/kernel/unwind.c | |||
@@ -212,7 +212,8 @@ static int unwind_exec_insn(struct unwind_ctrl_block *ctrl) | |||
212 | ctrl->vrs[14] = *vsp++; | 212 | ctrl->vrs[14] = *vsp++; |
213 | ctrl->vrs[SP] = (unsigned long)vsp; | 213 | ctrl->vrs[SP] = (unsigned long)vsp; |
214 | } else if (insn == 0xb0) { | 214 | } else if (insn == 0xb0) { |
215 | ctrl->vrs[PC] = ctrl->vrs[LR]; | 215 | if (ctrl->vrs[PC] == 0) |
216 | ctrl->vrs[PC] = ctrl->vrs[LR]; | ||
216 | /* no further processing */ | 217 | /* no further processing */ |
217 | ctrl->entries = 0; | 218 | ctrl->entries = 0; |
218 | } else if (insn == 0xb1) { | 219 | } else if (insn == 0xb1) { |
@@ -309,18 +310,20 @@ int unwind_frame(struct stackframe *frame) | |||
309 | } | 310 | } |
310 | 311 | ||
311 | while (ctrl.entries > 0) { | 312 | while (ctrl.entries > 0) { |
312 | int urc; | 313 | int urc = unwind_exec_insn(&ctrl); |
313 | |||
314 | if (ctrl.vrs[SP] < low || ctrl.vrs[SP] >= high) | ||
315 | return -URC_FAILURE; | ||
316 | urc = unwind_exec_insn(&ctrl); | ||
317 | if (urc < 0) | 314 | if (urc < 0) |
318 | return urc; | 315 | return urc; |
316 | if (ctrl.vrs[SP] < low || ctrl.vrs[SP] >= high) | ||
317 | return -URC_FAILURE; | ||
319 | } | 318 | } |
320 | 319 | ||
321 | if (ctrl.vrs[PC] == 0) | 320 | if (ctrl.vrs[PC] == 0) |
322 | ctrl.vrs[PC] = ctrl.vrs[LR]; | 321 | ctrl.vrs[PC] = ctrl.vrs[LR]; |
323 | 322 | ||
323 | /* check for infinite loop */ | ||
324 | if (frame->pc == ctrl.vrs[PC]) | ||
325 | return -URC_FAILURE; | ||
326 | |||
324 | frame->fp = ctrl.vrs[FP]; | 327 | frame->fp = ctrl.vrs[FP]; |
325 | frame->sp = ctrl.vrs[SP]; | 328 | frame->sp = ctrl.vrs[SP]; |
326 | frame->lr = ctrl.vrs[LR]; | 329 | frame->lr = ctrl.vrs[LR]; |
@@ -332,7 +335,6 @@ int unwind_frame(struct stackframe *frame) | |||
332 | void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk) | 335 | void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk) |
333 | { | 336 | { |
334 | struct stackframe frame; | 337 | struct stackframe frame; |
335 | unsigned long high, low; | ||
336 | register unsigned long current_sp asm ("sp"); | 338 | register unsigned long current_sp asm ("sp"); |
337 | 339 | ||
338 | pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk); | 340 | pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk); |
@@ -362,9 +364,6 @@ void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk) | |||
362 | frame.pc = thread_saved_pc(tsk); | 364 | frame.pc = thread_saved_pc(tsk); |
363 | } | 365 | } |
364 | 366 | ||
365 | low = frame.sp & ~(THREAD_SIZE - 1); | ||
366 | high = low + THREAD_SIZE; | ||
367 | |||
368 | while (1) { | 367 | while (1) { |
369 | int urc; | 368 | int urc; |
370 | unsigned long where = frame.pc; | 369 | unsigned long where = frame.pc; |
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 6c0779792546..69371028a202 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <asm-generic/vmlinux.lds.h> | 6 | #include <asm-generic/vmlinux.lds.h> |
7 | #include <asm/thread_info.h> | 7 | #include <asm/thread_info.h> |
8 | #include <asm/memory.h> | 8 | #include <asm/memory.h> |
9 | #include <asm/page.h> | ||
9 | 10 | ||
10 | OUTPUT_ARCH(arm) | 11 | OUTPUT_ARCH(arm) |
11 | ENTRY(stext) | 12 | ENTRY(stext) |
@@ -63,7 +64,7 @@ SECTIONS | |||
63 | usr/built-in.o(.init.ramfs) | 64 | usr/built-in.o(.init.ramfs) |
64 | __initramfs_end = .; | 65 | __initramfs_end = .; |
65 | #endif | 66 | #endif |
66 | . = ALIGN(4096); | 67 | . = ALIGN(PAGE_SIZE); |
67 | __per_cpu_load = .; | 68 | __per_cpu_load = .; |
68 | __per_cpu_start = .; | 69 | __per_cpu_start = .; |
69 | *(.data.percpu.page_aligned) | 70 | *(.data.percpu.page_aligned) |
@@ -73,7 +74,7 @@ SECTIONS | |||
73 | #ifndef CONFIG_XIP_KERNEL | 74 | #ifndef CONFIG_XIP_KERNEL |
74 | __init_begin = _stext; | 75 | __init_begin = _stext; |
75 | INIT_DATA | 76 | INIT_DATA |
76 | . = ALIGN(4096); | 77 | . = ALIGN(PAGE_SIZE); |
77 | __init_end = .; | 78 | __init_end = .; |
78 | #endif | 79 | #endif |
79 | } | 80 | } |
@@ -84,6 +85,14 @@ SECTIONS | |||
84 | *(.exitcall.exit) | 85 | *(.exitcall.exit) |
85 | *(.ARM.exidx.exit.text) | 86 | *(.ARM.exidx.exit.text) |
86 | *(.ARM.extab.exit.text) | 87 | *(.ARM.extab.exit.text) |
88 | #ifndef CONFIG_HOTPLUG_CPU | ||
89 | *(.ARM.exidx.cpuexit.text) | ||
90 | *(.ARM.extab.cpuexit.text) | ||
91 | #endif | ||
92 | #ifndef CONFIG_HOTPLUG | ||
93 | *(.ARM.exidx.devexit.text) | ||
94 | *(.ARM.extab.devexit.text) | ||
95 | #endif | ||
87 | #ifndef CONFIG_MMU | 96 | #ifndef CONFIG_MMU |
88 | *(.fixup) | 97 | *(.fixup) |
89 | *(__ex_table) | 98 | *(__ex_table) |
@@ -110,7 +119,7 @@ SECTIONS | |||
110 | *(.got) /* Global offset table */ | 119 | *(.got) /* Global offset table */ |
111 | } | 120 | } |
112 | 121 | ||
113 | RODATA | 122 | RO_DATA(PAGE_SIZE) |
114 | 123 | ||
115 | _etext = .; /* End of text and rodata section */ | 124 | _etext = .; /* End of text and rodata section */ |
116 | 125 | ||
@@ -150,17 +159,17 @@ SECTIONS | |||
150 | *(.data.init_task) | 159 | *(.data.init_task) |
151 | 160 | ||
152 | #ifdef CONFIG_XIP_KERNEL | 161 | #ifdef CONFIG_XIP_KERNEL |
153 | . = ALIGN(4096); | 162 | . = ALIGN(PAGE_SIZE); |
154 | __init_begin = .; | 163 | __init_begin = .; |
155 | INIT_DATA | 164 | INIT_DATA |
156 | . = ALIGN(4096); | 165 | . = ALIGN(PAGE_SIZE); |
157 | __init_end = .; | 166 | __init_end = .; |
158 | #endif | 167 | #endif |
159 | 168 | ||
160 | . = ALIGN(4096); | 169 | . = ALIGN(PAGE_SIZE); |
161 | __nosave_begin = .; | 170 | __nosave_begin = .; |
162 | *(.data.nosave) | 171 | *(.data.nosave) |
163 | . = ALIGN(4096); | 172 | . = ALIGN(PAGE_SIZE); |
164 | __nosave_end = .; | 173 | __nosave_end = .; |
165 | 174 | ||
166 | /* | 175 | /* |
diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index cc270beadd5d..a55398ed1211 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c | |||
@@ -24,6 +24,8 @@ | |||
24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
25 | #include <linux/spi/spi.h> | 25 | #include <linux/spi/spi.h> |
26 | #include <linux/spi/at73c213.h> | 26 | #include <linux/spi/at73c213.h> |
27 | #include <linux/gpio_keys.h> | ||
28 | #include <linux/input.h> | ||
27 | #include <linux/clk.h> | 29 | #include <linux/clk.h> |
28 | 30 | ||
29 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
@@ -218,6 +220,56 @@ static struct gpio_led ek_leds[] = { | |||
218 | } | 220 | } |
219 | }; | 221 | }; |
220 | 222 | ||
223 | |||
224 | /* | ||
225 | * GPIO Buttons | ||
226 | */ | ||
227 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
228 | static struct gpio_keys_button ek_buttons[] = { | ||
229 | { | ||
230 | .gpio = AT91_PIN_PA30, | ||
231 | .code = BTN_3, | ||
232 | .desc = "Button 3", | ||
233 | .active_low = 1, | ||
234 | .wakeup = 1, | ||
235 | }, | ||
236 | { | ||
237 | .gpio = AT91_PIN_PA31, | ||
238 | .code = BTN_4, | ||
239 | .desc = "Button 4", | ||
240 | .active_low = 1, | ||
241 | .wakeup = 1, | ||
242 | } | ||
243 | }; | ||
244 | |||
245 | static struct gpio_keys_platform_data ek_button_data = { | ||
246 | .buttons = ek_buttons, | ||
247 | .nbuttons = ARRAY_SIZE(ek_buttons), | ||
248 | }; | ||
249 | |||
250 | static struct platform_device ek_button_device = { | ||
251 | .name = "gpio-keys", | ||
252 | .id = -1, | ||
253 | .num_resources = 0, | ||
254 | .dev = { | ||
255 | .platform_data = &ek_button_data, | ||
256 | } | ||
257 | }; | ||
258 | |||
259 | static void __init ek_add_device_buttons(void) | ||
260 | { | ||
261 | at91_set_gpio_input(AT91_PIN_PA30, 1); /* btn3 */ | ||
262 | at91_set_deglitch(AT91_PIN_PA30, 1); | ||
263 | at91_set_gpio_input(AT91_PIN_PA31, 1); /* btn4 */ | ||
264 | at91_set_deglitch(AT91_PIN_PA31, 1); | ||
265 | |||
266 | platform_device_register(&ek_button_device); | ||
267 | } | ||
268 | #else | ||
269 | static void __init ek_add_device_buttons(void) {} | ||
270 | #endif | ||
271 | |||
272 | |||
221 | static struct i2c_board_info __initdata ek_i2c_devices[] = { | 273 | static struct i2c_board_info __initdata ek_i2c_devices[] = { |
222 | { | 274 | { |
223 | I2C_BOARD_INFO("24c512", 0x50), | 275 | I2C_BOARD_INFO("24c512", 0x50), |
@@ -245,6 +297,8 @@ static void __init ek_board_init(void) | |||
245 | at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices)); | 297 | at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices)); |
246 | /* LEDs */ | 298 | /* LEDs */ |
247 | at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); | 299 | at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); |
300 | /* Push Buttons */ | ||
301 | ek_add_device_buttons(); | ||
248 | /* PCK0 provides MCLK to the WM8731 */ | 302 | /* PCK0 provides MCLK to the WM8731 */ |
249 | at91_set_B_periph(AT91_PIN_PC1, 0); | 303 | at91_set_B_periph(AT91_PIN_PC1, 0); |
250 | /* SSC (for WM8731) */ | 304 | /* SSC (for WM8731) */ |
diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c index 35e12a49d1a6..f6b5672cabd6 100644 --- a/arch/arm/mach-at91/board-sam9rlek.c +++ b/arch/arm/mach-at91/board-sam9rlek.c | |||
@@ -186,19 +186,21 @@ static struct fb_monspecs at91fb_default_monspecs = { | |||
186 | static void at91_lcdc_power_control(int on) | 186 | static void at91_lcdc_power_control(int on) |
187 | { | 187 | { |
188 | if (on) | 188 | if (on) |
189 | at91_set_gpio_value(AT91_PIN_PA30, 0); /* power up */ | 189 | at91_set_gpio_value(AT91_PIN_PC1, 0); /* power up */ |
190 | else | 190 | else |
191 | at91_set_gpio_value(AT91_PIN_PA30, 1); /* power down */ | 191 | at91_set_gpio_value(AT91_PIN_PC1, 1); /* power down */ |
192 | } | 192 | } |
193 | 193 | ||
194 | /* Driver datas */ | 194 | /* Driver datas */ |
195 | static struct atmel_lcdfb_info __initdata ek_lcdc_data = { | 195 | static struct atmel_lcdfb_info __initdata ek_lcdc_data = { |
196 | .lcdcon_is_backlight = true, | ||
196 | .default_bpp = 16, | 197 | .default_bpp = 16, |
197 | .default_dmacon = ATMEL_LCDC_DMAEN, | 198 | .default_dmacon = ATMEL_LCDC_DMAEN, |
198 | .default_lcdcon2 = AT91SAM9RL_DEFAULT_LCDCON2, | 199 | .default_lcdcon2 = AT91SAM9RL_DEFAULT_LCDCON2, |
199 | .default_monspecs = &at91fb_default_monspecs, | 200 | .default_monspecs = &at91fb_default_monspecs, |
200 | .atmel_lcdfb_power_control = at91_lcdc_power_control, | 201 | .atmel_lcdfb_power_control = at91_lcdc_power_control, |
201 | .guard_time = 1, | 202 | .guard_time = 1, |
203 | .lcd_wiring_mode = ATMEL_LCDC_WIRING_RGB, | ||
202 | }; | 204 | }; |
203 | 205 | ||
204 | #else | 206 | #else |
diff --git a/arch/arm/mach-davinci/include/mach/nand.h b/arch/arm/mach-davinci/include/mach/nand.h index aa482841270b..b520c4b5678a 100644 --- a/arch/arm/mach-davinci/include/mach/nand.h +++ b/arch/arm/mach-davinci/include/mach/nand.h | |||
@@ -68,10 +68,14 @@ struct davinci_nand_pdata { /* platform_data */ | |||
68 | 68 | ||
69 | /* none == NAND_ECC_NONE (strongly *not* advised!!) | 69 | /* none == NAND_ECC_NONE (strongly *not* advised!!) |
70 | * soft == NAND_ECC_SOFT | 70 | * soft == NAND_ECC_SOFT |
71 | * 1-bit == NAND_ECC_HW | 71 | * else == NAND_ECC_HW, according to ecc_bits |
72 | * 4-bit == NAND_ECC_HW_SYNDROME (not on all chips) | 72 | * |
73 | * All DaVinci-family chips support 1-bit hardware ECC. | ||
74 | * Newer ones also support 4-bit ECC, but are awkward | ||
75 | * using it with large page chips. | ||
73 | */ | 76 | */ |
74 | nand_ecc_modes_t ecc_mode; | 77 | nand_ecc_modes_t ecc_mode; |
78 | u8 ecc_bits; | ||
75 | 79 | ||
76 | /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */ | 80 | /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */ |
77 | unsigned options; | 81 | unsigned options; |
diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c index e70fc7c66bbb..ed2a48a9ce74 100644 --- a/arch/arm/mach-omap1/board-nokia770.c +++ b/arch/arm/mach-omap1/board-nokia770.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <mach/hwa742.h> | 36 | #include <mach/hwa742.h> |
37 | #include <mach/lcd_mipid.h> | 37 | #include <mach/lcd_mipid.h> |
38 | #include <mach/mmc.h> | 38 | #include <mach/mmc.h> |
39 | #include <mach/usb.h> | ||
40 | #include <mach/clock.h> | 39 | #include <mach/clock.h> |
41 | 40 | ||
42 | #define ADS7846_PENDOWN_GPIO 15 | 41 | #define ADS7846_PENDOWN_GPIO 15 |
@@ -205,9 +204,11 @@ static int nokia770_mmc_get_cover_state(struct device *dev, int slot) | |||
205 | static struct omap_mmc_platform_data nokia770_mmc2_data = { | 204 | static struct omap_mmc_platform_data nokia770_mmc2_data = { |
206 | .nr_slots = 1, | 205 | .nr_slots = 1, |
207 | .dma_mask = 0xffffffff, | 206 | .dma_mask = 0xffffffff, |
207 | .max_freq = 12000000, | ||
208 | .slots[0] = { | 208 | .slots[0] = { |
209 | .set_power = nokia770_mmc_set_power, | 209 | .set_power = nokia770_mmc_set_power, |
210 | .get_cover_state = nokia770_mmc_get_cover_state, | 210 | .get_cover_state = nokia770_mmc_get_cover_state, |
211 | .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, | ||
211 | .name = "mmcblk", | 212 | .name = "mmcblk", |
212 | }, | 213 | }, |
213 | }; | 214 | }; |
diff --git a/arch/arm/mach-omap1/mailbox.c b/arch/arm/mach-omap1/mailbox.c index 0af4d6c85b47..6810b4aeb02c 100644 --- a/arch/arm/mach-omap1/mailbox.c +++ b/arch/arm/mach-omap1/mailbox.c | |||
@@ -203,5 +203,5 @@ module_exit(omap1_mbox_exit); | |||
203 | 203 | ||
204 | MODULE_LICENSE("GPL v2"); | 204 | MODULE_LICENSE("GPL v2"); |
205 | MODULE_DESCRIPTION("omap mailbox: omap1 architecture specific functions"); | 205 | MODULE_DESCRIPTION("omap mailbox: omap1 architecture specific functions"); |
206 | MODULE_AUTHOR("Hiroshi DOYU" <Hiroshi.DOYU@nokia.com>); | 206 | MODULE_AUTHOR("Hiroshi DOYU <Hiroshi.DOYU@nokia.com>"); |
207 | MODULE_ALIAS("platform:omap1-mailbox"); | 207 | MODULE_ALIAS("platform:omap1-mailbox"); |
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index da93b86234ed..9a0bf6744a05 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c | |||
@@ -362,6 +362,7 @@ static struct omap_onenand_platform_data board_onenand_data = { | |||
362 | .gpio_irq = 65, | 362 | .gpio_irq = 65, |
363 | .parts = onenand_partitions, | 363 | .parts = onenand_partitions, |
364 | .nr_parts = ARRAY_SIZE(onenand_partitions), | 364 | .nr_parts = ARRAY_SIZE(onenand_partitions), |
365 | .flags = ONENAND_SYNC_READWRITE, | ||
365 | }; | 366 | }; |
366 | 367 | ||
367 | static void __init board_onenand_init(void) | 368 | static void __init board_onenand_init(void) |
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index ba528f85749c..b0665f161c03 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c | |||
@@ -302,7 +302,7 @@ int omap2_wait_clock_ready(void __iomem *reg, u32 mask, const char *name) | |||
302 | udelay(1); | 302 | udelay(1); |
303 | } | 303 | } |
304 | 304 | ||
305 | if (i < MAX_CLOCK_ENABLE_WAIT) | 305 | if (i <= MAX_CLOCK_ENABLE_WAIT) |
306 | pr_debug("Clock %s stable after %d loops\n", name, i); | 306 | pr_debug("Clock %s stable after %d loops\n", name, i); |
307 | else | 307 | else |
308 | printk(KERN_ERR "Clock %s didn't enable in %d tries\n", | 308 | printk(KERN_ERR "Clock %s didn't enable in %d tries\n", |
diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c index 9e43fe5209d3..045da923e75b 100644 --- a/arch/arm/mach-omap2/clock34xx.c +++ b/arch/arm/mach-omap2/clock34xx.c | |||
@@ -286,6 +286,20 @@ static struct omap_clk omap34xx_clks[] = { | |||
286 | 286 | ||
287 | #define MIN_SDRC_DLL_LOCK_FREQ 83000000 | 287 | #define MIN_SDRC_DLL_LOCK_FREQ 83000000 |
288 | 288 | ||
289 | #define CYCLES_PER_MHZ 1000000 | ||
290 | |||
291 | /* Scale factor for fixed-point arith in omap3_core_dpll_m2_set_rate() */ | ||
292 | #define SDRC_MPURATE_SCALE 8 | ||
293 | |||
294 | /* 2^SDRC_MPURATE_BASE_SHIFT: MPU MHz that SDRC_MPURATE_LOOPS is defined for */ | ||
295 | #define SDRC_MPURATE_BASE_SHIFT 9 | ||
296 | |||
297 | /* | ||
298 | * SDRC_MPURATE_LOOPS: Number of MPU loops to execute at | ||
299 | * 2^MPURATE_BASE_SHIFT MHz for SDRC to stabilize | ||
300 | */ | ||
301 | #define SDRC_MPURATE_LOOPS 96 | ||
302 | |||
289 | /** | 303 | /** |
290 | * omap3_dpll_recalc - recalculate DPLL rate | 304 | * omap3_dpll_recalc - recalculate DPLL rate |
291 | * @clk: DPLL struct clk | 305 | * @clk: DPLL struct clk |
@@ -709,7 +723,8 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate) | |||
709 | { | 723 | { |
710 | u32 new_div = 0; | 724 | u32 new_div = 0; |
711 | u32 unlock_dll = 0; | 725 | u32 unlock_dll = 0; |
712 | unsigned long validrate, sdrcrate; | 726 | u32 c; |
727 | unsigned long validrate, sdrcrate, mpurate; | ||
713 | struct omap_sdrc_params *sp; | 728 | struct omap_sdrc_params *sp; |
714 | 729 | ||
715 | if (!clk || !rate) | 730 | if (!clk || !rate) |
@@ -718,18 +733,15 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate) | |||
718 | if (clk != &dpll3_m2_ck) | 733 | if (clk != &dpll3_m2_ck) |
719 | return -EINVAL; | 734 | return -EINVAL; |
720 | 735 | ||
721 | if (rate == clk->rate) | ||
722 | return 0; | ||
723 | |||
724 | validrate = omap2_clksel_round_rate_div(clk, rate, &new_div); | 736 | validrate = omap2_clksel_round_rate_div(clk, rate, &new_div); |
725 | if (validrate != rate) | 737 | if (validrate != rate) |
726 | return -EINVAL; | 738 | return -EINVAL; |
727 | 739 | ||
728 | sdrcrate = sdrc_ick.rate; | 740 | sdrcrate = sdrc_ick.rate; |
729 | if (rate > clk->rate) | 741 | if (rate > clk->rate) |
730 | sdrcrate <<= ((rate / clk->rate) - 1); | 742 | sdrcrate <<= ((rate / clk->rate) >> 1); |
731 | else | 743 | else |
732 | sdrcrate >>= ((clk->rate / rate) - 1); | 744 | sdrcrate >>= ((clk->rate / rate) >> 1); |
733 | 745 | ||
734 | sp = omap2_sdrc_get_params(sdrcrate); | 746 | sp = omap2_sdrc_get_params(sdrcrate); |
735 | if (!sp) | 747 | if (!sp) |
@@ -740,17 +752,25 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate) | |||
740 | unlock_dll = 1; | 752 | unlock_dll = 1; |
741 | } | 753 | } |
742 | 754 | ||
755 | /* | ||
756 | * XXX This only needs to be done when the CPU frequency changes | ||
757 | */ | ||
758 | mpurate = arm_fck.rate / CYCLES_PER_MHZ; | ||
759 | c = (mpurate << SDRC_MPURATE_SCALE) >> SDRC_MPURATE_BASE_SHIFT; | ||
760 | c += 1; /* for safety */ | ||
761 | c *= SDRC_MPURATE_LOOPS; | ||
762 | c >>= SDRC_MPURATE_SCALE; | ||
763 | if (c == 0) | ||
764 | c = 1; | ||
765 | |||
743 | pr_debug("clock: changing CORE DPLL rate from %lu to %lu\n", clk->rate, | 766 | pr_debug("clock: changing CORE DPLL rate from %lu to %lu\n", clk->rate, |
744 | validrate); | 767 | validrate); |
745 | pr_debug("clock: SDRC timing params used: %08x %08x %08x\n", | 768 | pr_debug("clock: SDRC timing params used: %08x %08x %08x\n", |
746 | sp->rfr_ctrl, sp->actim_ctrla, sp->actim_ctrlb); | 769 | sp->rfr_ctrl, sp->actim_ctrla, sp->actim_ctrlb); |
747 | 770 | ||
748 | /* REVISIT: SRAM code doesn't support other M2 divisors yet */ | ||
749 | WARN_ON(new_div != 1 && new_div != 2); | ||
750 | |||
751 | /* REVISIT: Add SDRC_MR changing to this code also */ | ||
752 | omap3_configure_core_dpll(sp->rfr_ctrl, sp->actim_ctrla, | 771 | omap3_configure_core_dpll(sp->rfr_ctrl, sp->actim_ctrla, |
753 | sp->actim_ctrlb, new_div, unlock_dll); | 772 | sp->actim_ctrlb, new_div, unlock_dll, c, |
773 | sp->mr, rate > clk->rate); | ||
754 | 774 | ||
755 | return 0; | 775 | return 0; |
756 | } | 776 | } |
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c index 2fd22f9c5f0e..54fec53a48e7 100644 --- a/arch/arm/mach-omap2/gpmc-onenand.c +++ b/arch/arm/mach-omap2/gpmc-onenand.c | |||
@@ -31,6 +31,8 @@ static struct platform_device gpmc_onenand_device = { | |||
31 | static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base) | 31 | static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base) |
32 | { | 32 | { |
33 | struct gpmc_timings t; | 33 | struct gpmc_timings t; |
34 | u32 reg; | ||
35 | int err; | ||
34 | 36 | ||
35 | const int t_cer = 15; | 37 | const int t_cer = 15; |
36 | const int t_avdp = 12; | 38 | const int t_avdp = 12; |
@@ -43,6 +45,11 @@ static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base) | |||
43 | const int t_wpl = 40; | 45 | const int t_wpl = 40; |
44 | const int t_wph = 30; | 46 | const int t_wph = 30; |
45 | 47 | ||
48 | /* Ensure sync read and sync write are disabled */ | ||
49 | reg = readw(onenand_base + ONENAND_REG_SYS_CFG1); | ||
50 | reg &= ~ONENAND_SYS_CFG1_SYNC_READ & ~ONENAND_SYS_CFG1_SYNC_WRITE; | ||
51 | writew(reg, onenand_base + ONENAND_REG_SYS_CFG1); | ||
52 | |||
46 | memset(&t, 0, sizeof(t)); | 53 | memset(&t, 0, sizeof(t)); |
47 | t.sync_clk = 0; | 54 | t.sync_clk = 0; |
48 | t.cs_on = 0; | 55 | t.cs_on = 0; |
@@ -74,7 +81,16 @@ static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base) | |||
74 | GPMC_CONFIG1_DEVICESIZE_16 | | 81 | GPMC_CONFIG1_DEVICESIZE_16 | |
75 | GPMC_CONFIG1_MUXADDDATA); | 82 | GPMC_CONFIG1_MUXADDDATA); |
76 | 83 | ||
77 | return gpmc_cs_set_timings(cs, &t); | 84 | err = gpmc_cs_set_timings(cs, &t); |
85 | if (err) | ||
86 | return err; | ||
87 | |||
88 | /* Ensure sync read and sync write are disabled */ | ||
89 | reg = readw(onenand_base + ONENAND_REG_SYS_CFG1); | ||
90 | reg &= ~ONENAND_SYS_CFG1_SYNC_READ & ~ONENAND_SYS_CFG1_SYNC_WRITE; | ||
91 | writew(reg, onenand_base + ONENAND_REG_SYS_CFG1); | ||
92 | |||
93 | return 0; | ||
78 | } | 94 | } |
79 | 95 | ||
80 | static void set_onenand_cfg(void __iomem *onenand_base, int latency, | 96 | static void set_onenand_cfg(void __iomem *onenand_base, int latency, |
@@ -124,7 +140,8 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg, | |||
124 | } else if (cfg->flags & ONENAND_SYNC_READWRITE) { | 140 | } else if (cfg->flags & ONENAND_SYNC_READWRITE) { |
125 | sync_read = 1; | 141 | sync_read = 1; |
126 | sync_write = 1; | 142 | sync_write = 1; |
127 | } | 143 | } else |
144 | return omap2_onenand_set_async_mode(cs, onenand_base); | ||
128 | 145 | ||
129 | if (!freq) { | 146 | if (!freq) { |
130 | /* Very first call freq is not known */ | 147 | /* Very first call freq is not known */ |
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index 458990e20c60..a98201cc265c 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c | |||
@@ -48,6 +48,28 @@ int omap_chip_is(struct omap_chip_id oci) | |||
48 | } | 48 | } |
49 | EXPORT_SYMBOL(omap_chip_is); | 49 | EXPORT_SYMBOL(omap_chip_is); |
50 | 50 | ||
51 | int omap_type(void) | ||
52 | { | ||
53 | u32 val = 0; | ||
54 | |||
55 | if (cpu_is_omap24xx()) | ||
56 | val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS); | ||
57 | else if (cpu_is_omap34xx()) | ||
58 | val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS); | ||
59 | else { | ||
60 | pr_err("Cannot detect omap type!\n"); | ||
61 | goto out; | ||
62 | } | ||
63 | |||
64 | val &= OMAP2_DEVICETYPE_MASK; | ||
65 | val >>= 8; | ||
66 | |||
67 | out: | ||
68 | return val; | ||
69 | } | ||
70 | EXPORT_SYMBOL(omap_type); | ||
71 | |||
72 | |||
51 | /*----------------------------------------------------------------------------*/ | 73 | /*----------------------------------------------------------------------------*/ |
52 | 74 | ||
53 | #define OMAP_TAP_IDCODE 0x0204 | 75 | #define OMAP_TAP_IDCODE 0x0204 |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index 32afd9448216..3a86b0f66031 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/clk.h> | ||
24 | 25 | ||
25 | #include <asm/tlb.h> | 26 | #include <asm/tlb.h> |
26 | 27 | ||
@@ -241,6 +242,40 @@ void __init omap2_map_common_io(void) | |||
241 | omapfb_reserve_sdram(); | 242 | omapfb_reserve_sdram(); |
242 | } | 243 | } |
243 | 244 | ||
245 | /* | ||
246 | * omap2_init_reprogram_sdrc - reprogram SDRC timing parameters | ||
247 | * | ||
248 | * Sets the CORE DPLL3 M2 divider to the same value that it's at | ||
249 | * currently. This has the effect of setting the SDRC SDRAM AC timing | ||
250 | * registers to the values currently defined by the kernel. Currently | ||
251 | * only defined for OMAP3; will return 0 if called on OMAP2. Returns | ||
252 | * -EINVAL if the dpll3_m2_ck cannot be found, 0 if called on OMAP2, | ||
253 | * or passes along the return value of clk_set_rate(). | ||
254 | */ | ||
255 | static int __init _omap2_init_reprogram_sdrc(void) | ||
256 | { | ||
257 | struct clk *dpll3_m2_ck; | ||
258 | int v = -EINVAL; | ||
259 | long rate; | ||
260 | |||
261 | if (!cpu_is_omap34xx()) | ||
262 | return 0; | ||
263 | |||
264 | dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck"); | ||
265 | if (!dpll3_m2_ck) | ||
266 | return -EINVAL; | ||
267 | |||
268 | rate = clk_get_rate(dpll3_m2_ck); | ||
269 | pr_info("Reprogramming SDRC clock to %ld Hz\n", rate); | ||
270 | v = clk_set_rate(dpll3_m2_ck, rate); | ||
271 | if (v) | ||
272 | pr_err("dpll3_m2_clk rate change failed: %d\n", v); | ||
273 | |||
274 | clk_put(dpll3_m2_ck); | ||
275 | |||
276 | return v; | ||
277 | } | ||
278 | |||
244 | void __init omap2_init_common_hw(struct omap_sdrc_params *sp) | 279 | void __init omap2_init_common_hw(struct omap_sdrc_params *sp) |
245 | { | 280 | { |
246 | omap2_mux_init(); | 281 | omap2_mux_init(); |
@@ -249,6 +284,7 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sp) | |||
249 | clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); | 284 | clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); |
250 | omap2_clk_init(); | 285 | omap2_clk_init(); |
251 | omap2_sdrc_init(sp); | 286 | omap2_sdrc_init(sp); |
287 | _omap2_init_reprogram_sdrc(); | ||
252 | #endif | 288 | #endif |
253 | gpmc_init(); | 289 | gpmc_init(); |
254 | } | 290 | } |
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c index fd5b8a5925cc..6f71f3730c97 100644 --- a/arch/arm/mach-omap2/mailbox.c +++ b/arch/arm/mach-omap2/mailbox.c | |||
@@ -282,12 +282,12 @@ static int __devinit omap2_mbox_probe(struct platform_device *pdev) | |||
282 | return -ENOMEM; | 282 | return -ENOMEM; |
283 | 283 | ||
284 | /* DSP or IVA2 IRQ */ | 284 | /* DSP or IVA2 IRQ */ |
285 | mbox_dsp_info.irq = platform_get_irq(pdev, 0); | 285 | ret = platform_get_irq(pdev, 0); |
286 | if (mbox_dsp_info.irq < 0) { | 286 | if (ret < 0) { |
287 | dev_err(&pdev->dev, "invalid irq resource\n"); | 287 | dev_err(&pdev->dev, "invalid irq resource\n"); |
288 | ret = -ENODEV; | ||
289 | goto err_dsp; | 288 | goto err_dsp; |
290 | } | 289 | } |
290 | mbox_dsp_info.irq = ret; | ||
291 | 291 | ||
292 | ret = omap_mbox_register(&pdev->dev, &mbox_dsp_info); | 292 | ret = omap_mbox_register(&pdev->dev, &mbox_dsp_info); |
293 | if (ret) | 293 | if (ret) |
diff --git a/arch/arm/mach-omap2/mmc-twl4030.c b/arch/arm/mach-omap2/mmc-twl4030.c index 9756a878fd90..1541fd4c8d0f 100644 --- a/arch/arm/mach-omap2/mmc-twl4030.c +++ b/arch/arm/mach-omap2/mmc-twl4030.c | |||
@@ -263,8 +263,19 @@ static int twl_mmc1_set_power(struct device *dev, int slot, int power_on, | |||
263 | static int twl_mmc23_set_power(struct device *dev, int slot, int power_on, int vdd) | 263 | static int twl_mmc23_set_power(struct device *dev, int slot, int power_on, int vdd) |
264 | { | 264 | { |
265 | int ret = 0; | 265 | int ret = 0; |
266 | struct twl_mmc_controller *c = &hsmmc[1]; | 266 | struct twl_mmc_controller *c = NULL; |
267 | struct omap_mmc_platform_data *mmc = dev->platform_data; | 267 | struct omap_mmc_platform_data *mmc = dev->platform_data; |
268 | int i; | ||
269 | |||
270 | for (i = 1; i < ARRAY_SIZE(hsmmc); i++) { | ||
271 | if (mmc == hsmmc[i].mmc) { | ||
272 | c = &hsmmc[i]; | ||
273 | break; | ||
274 | } | ||
275 | } | ||
276 | |||
277 | if (c == NULL) | ||
278 | return -ENODEV; | ||
268 | 279 | ||
269 | /* If we don't see a Vcc regulator, assume it's a fixed | 280 | /* If we don't see a Vcc regulator, assume it's a fixed |
270 | * voltage always-on regulator. | 281 | * voltage always-on regulator. |
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c index 73e2971b1757..983f1cb676be 100644 --- a/arch/arm/mach-omap2/powerdomain.c +++ b/arch/arm/mach-omap2/powerdomain.c | |||
@@ -1099,7 +1099,7 @@ int pwrdm_wait_transition(struct powerdomain *pwrdm) | |||
1099 | (c++ < PWRDM_TRANSITION_BAILOUT)) | 1099 | (c++ < PWRDM_TRANSITION_BAILOUT)) |
1100 | udelay(1); | 1100 | udelay(1); |
1101 | 1101 | ||
1102 | if (c >= PWRDM_TRANSITION_BAILOUT) { | 1102 | if (c > PWRDM_TRANSITION_BAILOUT) { |
1103 | printk(KERN_ERR "powerdomain: waited too long for " | 1103 | printk(KERN_ERR "powerdomain: waited too long for " |
1104 | "powerdomain %s to complete transition\n", pwrdm->name); | 1104 | "powerdomain %s to complete transition\n", pwrdm->name); |
1105 | return -EAGAIN; | 1105 | return -EAGAIN; |
diff --git a/arch/arm/mach-omap2/sram34xx.S b/arch/arm/mach-omap2/sram34xx.S index c080c82521e1..f41f8d96ddba 100644 --- a/arch/arm/mach-omap2/sram34xx.S +++ b/arch/arm/mach-omap2/sram34xx.S | |||
@@ -3,13 +3,12 @@ | |||
3 | * | 3 | * |
4 | * Omap3 specific functions that need to be run in internal SRAM | 4 | * Omap3 specific functions that need to be run in internal SRAM |
5 | * | 5 | * |
6 | * (C) Copyright 2007 | 6 | * Copyright (C) 2004, 2007, 2008 Texas Instruments, Inc. |
7 | * Texas Instruments Inc. | 7 | * Copyright (C) 2008 Nokia Corporation |
8 | * Rajendra Nayak <rnayak@ti.com> | ||
9 | * | 8 | * |
10 | * (C) Copyright 2004 | 9 | * Rajendra Nayak <rnayak@ti.com> |
11 | * Texas Instruments, <www.ti.com> | ||
12 | * Richard Woodruff <r-woodruff2@ti.com> | 10 | * Richard Woodruff <r-woodruff2@ti.com> |
11 | * Paul Walmsley | ||
13 | * | 12 | * |
14 | * This program is free software; you can redistribute it and/or | 13 | * This program is free software; you can redistribute it and/or |
15 | * modify it under the terms of the GNU General Public License as | 14 | * modify it under the terms of the GNU General Public License as |
@@ -37,61 +36,112 @@ | |||
37 | 36 | ||
38 | .text | 37 | .text |
39 | 38 | ||
39 | /* r4 parameters */ | ||
40 | #define SDRC_NO_UNLOCK_DLL 0x0 | ||
41 | #define SDRC_UNLOCK_DLL 0x1 | ||
42 | |||
43 | /* SDRC_DLLA_CTRL bit settings */ | ||
44 | #define FIXEDDELAY_SHIFT 24 | ||
45 | #define FIXEDDELAY_MASK (0xff << FIXEDDELAY_SHIFT) | ||
46 | #define DLLIDLE_MASK 0x4 | ||
47 | |||
48 | /* | ||
49 | * SDRC_DLLA_CTRL default values: TI hardware team indicates that | ||
50 | * FIXEDDELAY should be initialized to 0xf. This apparently was | ||
51 | * empirically determined during process testing, so no derivation | ||
52 | * was provided. | ||
53 | */ | ||
54 | #define FIXEDDELAY_DEFAULT (0x0f << FIXEDDELAY_SHIFT) | ||
55 | |||
56 | /* SDRC_DLLA_STATUS bit settings */ | ||
57 | #define LOCKSTATUS_MASK 0x4 | ||
58 | |||
59 | /* SDRC_POWER bit settings */ | ||
60 | #define SRFRONIDLEREQ_MASK 0x40 | ||
61 | #define PWDENA_MASK 0x4 | ||
62 | |||
63 | /* CM_IDLEST1_CORE bit settings */ | ||
64 | #define ST_SDRC_MASK 0x2 | ||
65 | |||
66 | /* CM_ICLKEN1_CORE bit settings */ | ||
67 | #define EN_SDRC_MASK 0x2 | ||
68 | |||
69 | /* CM_CLKSEL1_PLL bit settings */ | ||
70 | #define CORE_DPLL_CLKOUT_DIV_SHIFT 0x1b | ||
71 | |||
40 | /* | 72 | /* |
41 | * Change frequency of core dpll | 73 | * omap3_sram_configure_core_dpll - change DPLL3 M2 divider |
42 | * r0 = sdrc_rfr_ctrl r1 = sdrc_actim_ctrla r2 = sdrc_actim_ctrlb r3 = M2 | 74 | * r0 = new SDRC_RFR_CTRL register contents |
43 | * r4 = Unlock SDRC DLL? (1 = yes, 0 = no) -- only unlock DLL for | 75 | * r1 = new SDRC_ACTIM_CTRLA register contents |
76 | * r2 = new SDRC_ACTIM_CTRLB register contents | ||
77 | * r3 = new M2 divider setting (only 1 and 2 supported right now) | ||
78 | * r4 = unlock SDRC DLL? (1 = yes, 0 = no). Only unlock DLL for | ||
44 | * SDRC rates < 83MHz | 79 | * SDRC rates < 83MHz |
80 | * r5 = number of MPU cycles to wait for SDRC to stabilize after | ||
81 | * reprogramming the SDRC when switching to a slower MPU speed | ||
82 | * r6 = new SDRC_MR_0 register value | ||
83 | * r7 = increasing SDRC rate? (1 = yes, 0 = no) | ||
84 | * | ||
45 | */ | 85 | */ |
46 | ENTRY(omap3_sram_configure_core_dpll) | 86 | ENTRY(omap3_sram_configure_core_dpll) |
47 | stmfd sp!, {r1-r12, lr} @ store regs to stack | 87 | stmfd sp!, {r1-r12, lr} @ store regs to stack |
48 | ldr r4, [sp, #52] @ pull extra args off the stack | 88 | ldr r4, [sp, #52] @ pull extra args off the stack |
89 | ldr r5, [sp, #56] @ load extra args from the stack | ||
90 | ldr r6, [sp, #60] @ load extra args from the stack | ||
91 | ldr r7, [sp, #64] @ load extra args from the stack | ||
49 | dsb @ flush buffered writes to interconnect | 92 | dsb @ flush buffered writes to interconnect |
50 | cmp r3, #0x2 | 93 | cmp r7, #1 @ if increasing SDRC clk rate, |
51 | blne configure_sdrc | 94 | bleq configure_sdrc @ program the SDRC regs early (for RFR) |
52 | cmp r4, #0x1 | 95 | cmp r4, #SDRC_UNLOCK_DLL @ set the intended DLL state |
53 | bleq unlock_dll | 96 | bleq unlock_dll |
54 | blne lock_dll | 97 | blne lock_dll |
55 | bl sdram_in_selfrefresh @ put the SDRAM in self refresh | 98 | bl sdram_in_selfrefresh @ put SDRAM in self refresh, idle SDRC |
56 | bl configure_core_dpll | 99 | bl configure_core_dpll @ change the DPLL3 M2 divider |
57 | bl enable_sdrc | 100 | bl enable_sdrc @ take SDRC out of idle |
58 | cmp r4, #0x1 | 101 | cmp r4, #SDRC_UNLOCK_DLL @ wait for DLL status to change |
59 | bleq wait_dll_unlock | 102 | bleq wait_dll_unlock |
60 | blne wait_dll_lock | 103 | blne wait_dll_lock |
61 | cmp r3, #0x1 | 104 | cmp r7, #1 @ if increasing SDRC clk rate, |
62 | blne configure_sdrc | 105 | beq return_to_sdram @ return to SDRAM code, otherwise, |
106 | bl configure_sdrc @ reprogram SDRC regs now | ||
107 | mov r12, r5 | ||
108 | bl wait_clk_stable @ wait for SDRC to stabilize | ||
109 | return_to_sdram: | ||
63 | isb @ prevent speculative exec past here | 110 | isb @ prevent speculative exec past here |
64 | mov r0, #0 @ return value | 111 | mov r0, #0 @ return value |
65 | ldmfd sp!, {r1-r12, pc} @ restore regs and return | 112 | ldmfd sp!, {r1-r12, pc} @ restore regs and return |
66 | unlock_dll: | 113 | unlock_dll: |
67 | ldr r11, omap3_sdrc_dlla_ctrl | 114 | ldr r11, omap3_sdrc_dlla_ctrl |
68 | ldr r12, [r11] | 115 | ldr r12, [r11] |
69 | orr r12, r12, #0x4 | 116 | and r12, r12, #FIXEDDELAY_MASK |
117 | orr r12, r12, #FIXEDDELAY_DEFAULT | ||
118 | orr r12, r12, #DLLIDLE_MASK | ||
70 | str r12, [r11] @ (no OCP barrier needed) | 119 | str r12, [r11] @ (no OCP barrier needed) |
71 | bx lr | 120 | bx lr |
72 | lock_dll: | 121 | lock_dll: |
73 | ldr r11, omap3_sdrc_dlla_ctrl | 122 | ldr r11, omap3_sdrc_dlla_ctrl |
74 | ldr r12, [r11] | 123 | ldr r12, [r11] |
75 | bic r12, r12, #0x4 | 124 | bic r12, r12, #DLLIDLE_MASK |
76 | str r12, [r11] @ (no OCP barrier needed) | 125 | str r12, [r11] @ (no OCP barrier needed) |
77 | bx lr | 126 | bx lr |
78 | sdram_in_selfrefresh: | 127 | sdram_in_selfrefresh: |
79 | ldr r11, omap3_sdrc_power @ read the SDRC_POWER register | 128 | ldr r11, omap3_sdrc_power @ read the SDRC_POWER register |
80 | ldr r12, [r11] @ read the contents of SDRC_POWER | 129 | ldr r12, [r11] @ read the contents of SDRC_POWER |
81 | mov r9, r12 @ keep a copy of SDRC_POWER bits | 130 | mov r9, r12 @ keep a copy of SDRC_POWER bits |
82 | orr r12, r12, #0x40 @ enable self refresh on idle req | 131 | orr r12, r12, #SRFRONIDLEREQ_MASK @ enable self refresh on idle |
83 | bic r12, r12, #0x4 @ clear PWDENA | 132 | bic r12, r12, #PWDENA_MASK @ clear PWDENA |
84 | str r12, [r11] @ write back to SDRC_POWER register | 133 | str r12, [r11] @ write back to SDRC_POWER register |
85 | ldr r12, [r11] @ posted-write barrier for SDRC | 134 | ldr r12, [r11] @ posted-write barrier for SDRC |
135 | idle_sdrc: | ||
86 | ldr r11, omap3_cm_iclken1_core @ read the CM_ICLKEN1_CORE reg | 136 | ldr r11, omap3_cm_iclken1_core @ read the CM_ICLKEN1_CORE reg |
87 | ldr r12, [r11] | 137 | ldr r12, [r11] |
88 | bic r12, r12, #0x2 @ disable iclk bit for SDRC | 138 | bic r12, r12, #EN_SDRC_MASK @ disable iclk bit for SDRC |
89 | str r12, [r11] | 139 | str r12, [r11] |
90 | wait_sdrc_idle: | 140 | wait_sdrc_idle: |
91 | ldr r11, omap3_cm_idlest1_core | 141 | ldr r11, omap3_cm_idlest1_core |
92 | ldr r12, [r11] | 142 | ldr r12, [r11] |
93 | and r12, r12, #0x2 @ check for SDRC idle | 143 | and r12, r12, #ST_SDRC_MASK @ check for SDRC idle |
94 | cmp r12, #2 | 144 | cmp r12, #ST_SDRC_MASK |
95 | bne wait_sdrc_idle | 145 | bne wait_sdrc_idle |
96 | bx lr | 146 | bx lr |
97 | configure_core_dpll: | 147 | configure_core_dpll: |
@@ -99,36 +149,23 @@ configure_core_dpll: | |||
99 | ldr r12, [r11] | 149 | ldr r12, [r11] |
100 | ldr r10, core_m2_mask_val @ modify m2 for core dpll | 150 | ldr r10, core_m2_mask_val @ modify m2 for core dpll |
101 | and r12, r12, r10 | 151 | and r12, r12, r10 |
102 | orr r12, r12, r3, lsl #0x1B @ r3 contains the M2 val | 152 | orr r12, r12, r3, lsl #CORE_DPLL_CLKOUT_DIV_SHIFT |
103 | str r12, [r11] | 153 | str r12, [r11] |
104 | ldr r12, [r11] @ posted-write barrier for CM | 154 | ldr r12, [r11] @ posted-write barrier for CM |
105 | mov r12, #0x800 @ wait for the clock to stabilise | ||
106 | cmp r3, #2 | ||
107 | bne wait_clk_stable | ||
108 | bx lr | 155 | bx lr |
109 | wait_clk_stable: | 156 | wait_clk_stable: |
110 | subs r12, r12, #1 | 157 | subs r12, r12, #1 |
111 | bne wait_clk_stable | 158 | bne wait_clk_stable |
112 | nop | ||
113 | nop | ||
114 | nop | ||
115 | nop | ||
116 | nop | ||
117 | nop | ||
118 | nop | ||
119 | nop | ||
120 | nop | ||
121 | nop | ||
122 | bx lr | 159 | bx lr |
123 | enable_sdrc: | 160 | enable_sdrc: |
124 | ldr r11, omap3_cm_iclken1_core | 161 | ldr r11, omap3_cm_iclken1_core |
125 | ldr r12, [r11] | 162 | ldr r12, [r11] |
126 | orr r12, r12, #0x2 @ enable iclk bit for SDRC | 163 | orr r12, r12, #EN_SDRC_MASK @ enable iclk bit for SDRC |
127 | str r12, [r11] | 164 | str r12, [r11] |
128 | wait_sdrc_idle1: | 165 | wait_sdrc_idle1: |
129 | ldr r11, omap3_cm_idlest1_core | 166 | ldr r11, omap3_cm_idlest1_core |
130 | ldr r12, [r11] | 167 | ldr r12, [r11] |
131 | and r12, r12, #0x2 | 168 | and r12, r12, #ST_SDRC_MASK |
132 | cmp r12, #0 | 169 | cmp r12, #0 |
133 | bne wait_sdrc_idle1 | 170 | bne wait_sdrc_idle1 |
134 | restore_sdrc_power_val: | 171 | restore_sdrc_power_val: |
@@ -138,14 +175,14 @@ restore_sdrc_power_val: | |||
138 | wait_dll_lock: | 175 | wait_dll_lock: |
139 | ldr r11, omap3_sdrc_dlla_status | 176 | ldr r11, omap3_sdrc_dlla_status |
140 | ldr r12, [r11] | 177 | ldr r12, [r11] |
141 | and r12, r12, #0x4 | 178 | and r12, r12, #LOCKSTATUS_MASK |
142 | cmp r12, #0x4 | 179 | cmp r12, #LOCKSTATUS_MASK |
143 | bne wait_dll_lock | 180 | bne wait_dll_lock |
144 | bx lr | 181 | bx lr |
145 | wait_dll_unlock: | 182 | wait_dll_unlock: |
146 | ldr r11, omap3_sdrc_dlla_status | 183 | ldr r11, omap3_sdrc_dlla_status |
147 | ldr r12, [r11] | 184 | ldr r12, [r11] |
148 | and r12, r12, #0x4 | 185 | and r12, r12, #LOCKSTATUS_MASK |
149 | cmp r12, #0x0 | 186 | cmp r12, #0x0 |
150 | bne wait_dll_unlock | 187 | bne wait_dll_unlock |
151 | bx lr | 188 | bx lr |
@@ -156,7 +193,9 @@ configure_sdrc: | |||
156 | str r1, [r11] | 193 | str r1, [r11] |
157 | ldr r11, omap3_sdrc_actim_ctrlb | 194 | ldr r11, omap3_sdrc_actim_ctrlb |
158 | str r2, [r11] | 195 | str r2, [r11] |
159 | ldr r2, [r11] @ posted-write barrier for SDRC | 196 | ldr r11, omap3_sdrc_mr_0 |
197 | str r6, [r11] | ||
198 | ldr r6, [r11] @ posted-write barrier for SDRC | ||
160 | bx lr | 199 | bx lr |
161 | 200 | ||
162 | omap3_sdrc_power: | 201 | omap3_sdrc_power: |
@@ -173,6 +212,8 @@ omap3_sdrc_actim_ctrla: | |||
173 | .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_0) | 212 | .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_0) |
174 | omap3_sdrc_actim_ctrlb: | 213 | omap3_sdrc_actim_ctrlb: |
175 | .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_0) | 214 | .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_0) |
215 | omap3_sdrc_mr_0: | ||
216 | .word OMAP34XX_SDRC_REGADDR(SDRC_MR_0) | ||
176 | omap3_sdrc_dlla_status: | 217 | omap3_sdrc_dlla_status: |
177 | .word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS) | 218 | .word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS) |
178 | omap3_sdrc_dlla_ctrl: | 219 | omap3_sdrc_dlla_ctrl: |
diff --git a/arch/arm/mach-orion5x/addr-map.c b/arch/arm/mach-orion5x/addr-map.c index 6f3f77d031d0..d78731edebb6 100644 --- a/arch/arm/mach-orion5x/addr-map.c +++ b/arch/arm/mach-orion5x/addr-map.c | |||
@@ -200,6 +200,6 @@ void __init orion5x_setup_pcie_wa_win(u32 base, u32 size) | |||
200 | 200 | ||
201 | int __init orion5x_setup_sram_win(void) | 201 | int __init orion5x_setup_sram_win(void) |
202 | { | 202 | { |
203 | return setup_cpu_win(win_alloc_count, ORION5X_SRAM_PHYS_BASE, | 203 | return setup_cpu_win(win_alloc_count++, ORION5X_SRAM_PHYS_BASE, |
204 | ORION5X_SRAM_SIZE, TARGET_SRAM, ATTR_SRAM, -1); | 204 | ORION5X_SRAM_SIZE, TARGET_SRAM, ATTR_SRAM, -1); |
205 | } | 205 | } |
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index eafcc49009ea..f87fa1253803 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -562,7 +562,7 @@ static struct platform_device orion5x_crypto_device = { | |||
562 | .resource = orion5x_crypto_res, | 562 | .resource = orion5x_crypto_res, |
563 | }; | 563 | }; |
564 | 564 | ||
565 | int __init orion5x_crypto_init(void) | 565 | static int __init orion5x_crypto_init(void) |
566 | { | 566 | { |
567 | int ret; | 567 | int ret; |
568 | 568 | ||
@@ -697,6 +697,14 @@ void __init orion5x_init(void) | |||
697 | } | 697 | } |
698 | 698 | ||
699 | /* | 699 | /* |
700 | * The 5082/5181l/5182/6082/6082l/6183 have crypto | ||
701 | * while 5180n/5181/5281 don't have crypto. | ||
702 | */ | ||
703 | if ((dev == MV88F5181_DEV_ID && rev >= MV88F5181L_REV_A0) || | ||
704 | dev == MV88F5182_DEV_ID || dev == MV88F6183_DEV_ID) | ||
705 | orion5x_crypto_init(); | ||
706 | |||
707 | /* | ||
700 | * Register watchdog driver | 708 | * Register watchdog driver |
701 | */ | 709 | */ |
702 | orion5x_wdt_init(); | 710 | orion5x_wdt_init(); |
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h index de483e83edd7..8f004503c96d 100644 --- a/arch/arm/mach-orion5x/common.h +++ b/arch/arm/mach-orion5x/common.h | |||
@@ -38,7 +38,6 @@ void orion5x_spi_init(void); | |||
38 | void orion5x_uart0_init(void); | 38 | void orion5x_uart0_init(void); |
39 | void orion5x_uart1_init(void); | 39 | void orion5x_uart1_init(void); |
40 | void orion5x_xor_init(void); | 40 | void orion5x_xor_init(void); |
41 | int orion5x_crypto_init(void); | ||
42 | 41 | ||
43 | /* | 42 | /* |
44 | * PCIe/PCI functions. | 43 | * PCIe/PCI functions. |
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index f4533f8ff4e8..89c992b8f75b 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig | |||
@@ -401,6 +401,16 @@ config MACH_PALMZ72 | |||
401 | Say Y here if you intend to run this kernel on Palm Zire 72 | 401 | Say Y here if you intend to run this kernel on Palm Zire 72 |
402 | handheld computer. | 402 | handheld computer. |
403 | 403 | ||
404 | config MACH_TREO680 | ||
405 | bool "Palm Treo 680" | ||
406 | default y | ||
407 | depends on ARCH_PXA_PALM | ||
408 | select PXA27x | ||
409 | select IWMMXT | ||
410 | help | ||
411 | Say Y here if you intend to run this kernel on Palm Treo 680 | ||
412 | smartphone. | ||
413 | |||
404 | config MACH_PALMLD | 414 | config MACH_PALMLD |
405 | bool "Palm LifeDrive" | 415 | bool "Palm LifeDrive" |
406 | default y | 416 | default y |
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile index d18ffef44b8c..d4c6122a342f 100644 --- a/arch/arm/mach-pxa/Makefile +++ b/arch/arm/mach-pxa/Makefile | |||
@@ -62,6 +62,7 @@ obj-$(CONFIG_MACH_PALMT5) += palmt5.o | |||
62 | obj-$(CONFIG_MACH_PALMTX) += palmtx.o | 62 | obj-$(CONFIG_MACH_PALMTX) += palmtx.o |
63 | obj-$(CONFIG_MACH_PALMLD) += palmld.o | 63 | obj-$(CONFIG_MACH_PALMLD) += palmld.o |
64 | obj-$(CONFIG_MACH_PALMZ72) += palmz72.o | 64 | obj-$(CONFIG_MACH_PALMZ72) += palmz72.o |
65 | obj-$(CONFIG_MACH_TREO680) += treo680.o | ||
65 | obj-$(CONFIG_ARCH_VIPER) += viper.o | 66 | obj-$(CONFIG_ARCH_VIPER) += viper.o |
66 | 67 | ||
67 | ifeq ($(CONFIG_MACH_ZYLONITE),y) | 68 | ifeq ($(CONFIG_MACH_ZYLONITE),y) |
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c index 962dda2e154a..5363e1aea3fb 100644 --- a/arch/arm/mach-pxa/corgi.c +++ b/arch/arm/mach-pxa/corgi.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/pm.h> | 23 | #include <linux/pm.h> |
24 | #include <linux/gpio.h> | 24 | #include <linux/gpio.h> |
25 | #include <linux/backlight.h> | 25 | #include <linux/backlight.h> |
26 | #include <linux/i2c.h> | ||
26 | #include <linux/io.h> | 27 | #include <linux/io.h> |
27 | #include <linux/spi/spi.h> | 28 | #include <linux/spi/spi.h> |
28 | #include <linux/spi/ads7846.h> | 29 | #include <linux/spi/ads7846.h> |
@@ -600,6 +601,10 @@ static struct platform_device *devices[] __initdata = { | |||
600 | &sharpsl_rom_device, | 601 | &sharpsl_rom_device, |
601 | }; | 602 | }; |
602 | 603 | ||
604 | static struct i2c_board_info __initdata corgi_i2c_devices[] = { | ||
605 | { I2C_BOARD_INFO("wm8731", 0x1b) }, | ||
606 | }; | ||
607 | |||
603 | static void corgi_poweroff(void) | 608 | static void corgi_poweroff(void) |
604 | { | 609 | { |
605 | if (!machine_is_corgi()) | 610 | if (!machine_is_corgi()) |
@@ -634,6 +639,7 @@ static void __init corgi_init(void) | |||
634 | pxa_set_mci_info(&corgi_mci_platform_data); | 639 | pxa_set_mci_info(&corgi_mci_platform_data); |
635 | pxa_set_ficp_info(&corgi_ficp_platform_data); | 640 | pxa_set_ficp_info(&corgi_ficp_platform_data); |
636 | pxa_set_i2c_info(NULL); | 641 | pxa_set_i2c_info(NULL); |
642 | i2c_register_board_info(0, ARRAY_AND_SIZE(corgi_i2c_devices)); | ||
637 | 643 | ||
638 | platform_scoop_config = &corgi_pcmcia_config; | 644 | platform_scoop_config = &corgi_pcmcia_config; |
639 | 645 | ||
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c index 243e0802b5f4..63b10d9bb1d3 100644 --- a/arch/arm/mach-pxa/em-x270.c +++ b/arch/arm/mach-pxa/em-x270.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/apm-emulation.h> | 30 | #include <linux/apm-emulation.h> |
31 | #include <linux/i2c.h> | 31 | #include <linux/i2c.h> |
32 | #include <linux/i2c/pca953x.h> | 32 | #include <linux/i2c/pca953x.h> |
33 | #include <linux/regulator/userspace-consumer.h> | ||
33 | 34 | ||
34 | #include <media/soc_camera.h> | 35 | #include <media/soc_camera.h> |
35 | 36 | ||
@@ -735,6 +736,7 @@ static struct pxa2xx_spi_chip em_x270_libertas_chip = { | |||
735 | .rx_threshold = 1, | 736 | .rx_threshold = 1, |
736 | .tx_threshold = 1, | 737 | .tx_threshold = 1, |
737 | .timeout = 1000, | 738 | .timeout = 1000, |
739 | .gpio_cs = 14, | ||
738 | }; | 740 | }; |
739 | 741 | ||
740 | static unsigned long em_x270_libertas_pin_config[] = { | 742 | static unsigned long em_x270_libertas_pin_config[] = { |
@@ -803,7 +805,6 @@ static int em_x270_libertas_teardown(struct spi_device *spi) | |||
803 | 805 | ||
804 | struct libertas_spi_platform_data em_x270_libertas_pdata = { | 806 | struct libertas_spi_platform_data em_x270_libertas_pdata = { |
805 | .use_dummy_writes = 1, | 807 | .use_dummy_writes = 1, |
806 | .gpio_cs = 14, | ||
807 | .setup = em_x270_libertas_setup, | 808 | .setup = em_x270_libertas_setup, |
808 | .teardown = em_x270_libertas_teardown, | 809 | .teardown = em_x270_libertas_teardown, |
809 | }; | 810 | }; |
@@ -838,10 +839,14 @@ static void __init em_x270_init_spi(void) | |||
838 | static inline void em_x270_init_spi(void) {} | 839 | static inline void em_x270_init_spi(void) {} |
839 | #endif | 840 | #endif |
840 | 841 | ||
841 | #if defined(CONFIG_SND_PXA2XX_AC97) || defined(CONFIG_SND_PXA2XX_AC97_MODULE) | 842 | #if defined(CONFIG_SND_PXA2XX_LIB_AC97) |
843 | static pxa2xx_audio_ops_t em_x270_ac97_info = { | ||
844 | .reset_gpio = 113, | ||
845 | }; | ||
846 | |||
842 | static void __init em_x270_init_ac97(void) | 847 | static void __init em_x270_init_ac97(void) |
843 | { | 848 | { |
844 | pxa_set_ac97_info(NULL); | 849 | pxa_set_ac97_info(&em_x270_ac97_info); |
845 | } | 850 | } |
846 | #else | 851 | #else |
847 | static inline void em_x270_init_ac97(void) {} | 852 | static inline void em_x270_init_ac97(void) {} |
@@ -1038,6 +1043,52 @@ static void __init em_x270_init_camera(void) | |||
1038 | static inline void em_x270_init_camera(void) {} | 1043 | static inline void em_x270_init_camera(void) {} |
1039 | #endif | 1044 | #endif |
1040 | 1045 | ||
1046 | static struct regulator_bulk_data em_x270_gps_consumer_supply = { | ||
1047 | .supply = "vcc gps", | ||
1048 | }; | ||
1049 | |||
1050 | static struct regulator_userspace_consumer_data em_x270_gps_consumer_data = { | ||
1051 | .name = "vcc gps", | ||
1052 | .num_supplies = 1, | ||
1053 | .supplies = &em_x270_gps_consumer_supply, | ||
1054 | }; | ||
1055 | |||
1056 | static struct platform_device em_x270_gps_userspace_consumer = { | ||
1057 | .name = "reg-userspace-consumer", | ||
1058 | .id = 0, | ||
1059 | .dev = { | ||
1060 | .platform_data = &em_x270_gps_consumer_data, | ||
1061 | }, | ||
1062 | }; | ||
1063 | |||
1064 | static struct regulator_bulk_data em_x270_gprs_consumer_supply = { | ||
1065 | .supply = "vcc gprs", | ||
1066 | }; | ||
1067 | |||
1068 | static struct regulator_userspace_consumer_data em_x270_gprs_consumer_data = { | ||
1069 | .name = "vcc gprs", | ||
1070 | .num_supplies = 1, | ||
1071 | .supplies = &em_x270_gprs_consumer_supply | ||
1072 | }; | ||
1073 | |||
1074 | static struct platform_device em_x270_gprs_userspace_consumer = { | ||
1075 | .name = "reg-userspace-consumer", | ||
1076 | .id = 1, | ||
1077 | .dev = { | ||
1078 | .platform_data = &em_x270_gprs_consumer_data, | ||
1079 | } | ||
1080 | }; | ||
1081 | |||
1082 | static struct platform_device *em_x270_userspace_consumers[] = { | ||
1083 | &em_x270_gps_userspace_consumer, | ||
1084 | &em_x270_gprs_userspace_consumer, | ||
1085 | }; | ||
1086 | |||
1087 | static void __init em_x270_userspace_consumers_init(void) | ||
1088 | { | ||
1089 | platform_add_devices(ARRAY_AND_SIZE(em_x270_userspace_consumers)); | ||
1090 | } | ||
1091 | |||
1041 | /* DA9030 related initializations */ | 1092 | /* DA9030 related initializations */ |
1042 | #define REGULATOR_CONSUMER(_name, _dev, _supply) \ | 1093 | #define REGULATOR_CONSUMER(_name, _dev, _supply) \ |
1043 | static struct regulator_consumer_supply _name##_consumers[] = { \ | 1094 | static struct regulator_consumer_supply _name##_consumers[] = { \ |
@@ -1047,11 +1098,11 @@ static inline void em_x270_init_camera(void) {} | |||
1047 | }, \ | 1098 | }, \ |
1048 | } | 1099 | } |
1049 | 1100 | ||
1050 | REGULATOR_CONSUMER(ldo3, NULL, "vcc gps"); | 1101 | REGULATOR_CONSUMER(ldo3, &em_x270_gps_userspace_consumer.dev, "vcc gps"); |
1051 | REGULATOR_CONSUMER(ldo5, NULL, "vcc cam"); | 1102 | REGULATOR_CONSUMER(ldo5, NULL, "vcc cam"); |
1052 | REGULATOR_CONSUMER(ldo10, &pxa_device_mci.dev, "vcc sdio"); | 1103 | REGULATOR_CONSUMER(ldo10, &pxa_device_mci.dev, "vcc sdio"); |
1053 | REGULATOR_CONSUMER(ldo12, NULL, "vcc usb"); | 1104 | REGULATOR_CONSUMER(ldo12, NULL, "vcc usb"); |
1054 | REGULATOR_CONSUMER(ldo19, NULL, "vcc gprs"); | 1105 | REGULATOR_CONSUMER(ldo19, &em_x270_gprs_userspace_consumer.dev, "vcc gprs"); |
1055 | 1106 | ||
1056 | #define REGULATOR_INIT(_ldo, _min_uV, _max_uV, _ops_mask) \ | 1107 | #define REGULATOR_INIT(_ldo, _min_uV, _max_uV, _ops_mask) \ |
1057 | static struct regulator_init_data _ldo##_data = { \ | 1108 | static struct regulator_init_data _ldo##_data = { \ |
@@ -1062,6 +1113,7 @@ REGULATOR_CONSUMER(ldo19, NULL, "vcc gprs"); | |||
1062 | .enabled = 0, \ | 1113 | .enabled = 0, \ |
1063 | }, \ | 1114 | }, \ |
1064 | .valid_ops_mask = _ops_mask, \ | 1115 | .valid_ops_mask = _ops_mask, \ |
1116 | .apply_uV = 1, \ | ||
1065 | }, \ | 1117 | }, \ |
1066 | .num_consumer_supplies = ARRAY_SIZE(_ldo##_consumers), \ | 1118 | .num_consumer_supplies = ARRAY_SIZE(_ldo##_consumers), \ |
1067 | .consumer_supplies = _ldo##_consumers, \ | 1119 | .consumer_supplies = _ldo##_consumers, \ |
@@ -1240,6 +1292,7 @@ static void __init em_x270_init(void) | |||
1240 | em_x270_init_spi(); | 1292 | em_x270_init_spi(); |
1241 | em_x270_init_i2c(); | 1293 | em_x270_init_i2c(); |
1242 | em_x270_init_camera(); | 1294 | em_x270_init_camera(); |
1295 | em_x270_userspace_consumers_init(); | ||
1243 | } | 1296 | } |
1244 | 1297 | ||
1245 | MACHINE_START(EM_X270, "Compulab EM-X270") | 1298 | MACHINE_START(EM_X270, "Compulab EM-X270") |
diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c index 7fff467e84fc..81359d574f88 100644 --- a/arch/arm/mach-pxa/hx4700.c +++ b/arch/arm/mach-pxa/hx4700.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/pwm_backlight.h> | 30 | #include <linux/pwm_backlight.h> |
31 | #include <linux/regulator/bq24022.h> | 31 | #include <linux/regulator/bq24022.h> |
32 | #include <linux/regulator/machine.h> | 32 | #include <linux/regulator/machine.h> |
33 | #include <linux/regulator/max1586.h> | ||
33 | #include <linux/spi/ads7846.h> | 34 | #include <linux/spi/ads7846.h> |
34 | #include <linux/spi/spi.h> | 35 | #include <linux/spi/spi.h> |
35 | #include <linux/usb/gpio_vbus.h> | 36 | #include <linux/usb/gpio_vbus.h> |
@@ -775,6 +776,45 @@ static struct platform_device strataflash = { | |||
775 | }; | 776 | }; |
776 | 777 | ||
777 | /* | 778 | /* |
779 | * Maxim MAX1587A on PI2C | ||
780 | */ | ||
781 | |||
782 | static struct regulator_consumer_supply max1587a_consumer = { | ||
783 | .supply = "vcc_core", | ||
784 | }; | ||
785 | |||
786 | static struct regulator_init_data max1587a_v3_info = { | ||
787 | .constraints = { | ||
788 | .name = "vcc_core range", | ||
789 | .min_uV = 900000, | ||
790 | .max_uV = 1705000, | ||
791 | .always_on = 1, | ||
792 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, | ||
793 | }, | ||
794 | .num_consumer_supplies = 1, | ||
795 | .consumer_supplies = &max1587a_consumer, | ||
796 | }; | ||
797 | |||
798 | static struct max1586_subdev_data max1587a_subdev = { | ||
799 | .name = "vcc_core", | ||
800 | .id = MAX1586_V3, | ||
801 | .platform_data = &max1587a_v3_info, | ||
802 | }; | ||
803 | |||
804 | static struct max1586_platform_data max1587a_info = { | ||
805 | .num_subdevs = 1, | ||
806 | .subdevs = &max1587a_subdev, | ||
807 | .v3_gain = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */ | ||
808 | }; | ||
809 | |||
810 | static struct i2c_board_info __initdata pi2c_board_info[] = { | ||
811 | { | ||
812 | I2C_BOARD_INFO("max1586", 0x14), | ||
813 | .platform_data = &max1587a_info, | ||
814 | }, | ||
815 | }; | ||
816 | |||
817 | /* | ||
778 | * PCMCIA | 818 | * PCMCIA |
779 | */ | 819 | */ |
780 | 820 | ||
@@ -828,6 +868,7 @@ static void __init hx4700_init(void) | |||
828 | pxa_set_ficp_info(&ficp_info); | 868 | pxa_set_ficp_info(&ficp_info); |
829 | pxa27x_set_i2c_power_info(NULL); | 869 | pxa27x_set_i2c_power_info(NULL); |
830 | pxa_set_i2c_info(NULL); | 870 | pxa_set_i2c_info(NULL); |
871 | i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info)); | ||
831 | pxa2xx_set_spi_info(2, &pxa_ssp2_master_info); | 872 | pxa2xx_set_spi_info(2, &pxa_ssp2_master_info); |
832 | spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info)); | 873 | spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info)); |
833 | 874 | ||
diff --git a/arch/arm/mach-pxa/include/mach/palmz72.h b/arch/arm/mach-pxa/include/mach/palmz72.h index 5032307ebf7d..2806ef69ba5a 100644 --- a/arch/arm/mach-pxa/include/mach/palmz72.h +++ b/arch/arm/mach-pxa/include/mach/palmz72.h | |||
@@ -21,7 +21,7 @@ | |||
21 | /* SD/MMC */ | 21 | /* SD/MMC */ |
22 | #define GPIO_NR_PALMZ72_SD_DETECT_N 14 | 22 | #define GPIO_NR_PALMZ72_SD_DETECT_N 14 |
23 | #define GPIO_NR_PALMZ72_SD_POWER_N 98 | 23 | #define GPIO_NR_PALMZ72_SD_POWER_N 98 |
24 | #define GPIO_NR_PALMZ72_SD_RO 115 | 24 | #define GPIO_NR_PALMZ72_SD_RO 115 |
25 | 25 | ||
26 | /* Touchscreen */ | 26 | /* Touchscreen */ |
27 | #define GPIO_NR_PALMZ72_WM9712_IRQ 27 | 27 | #define GPIO_NR_PALMZ72_WM9712_IRQ 27 |
@@ -31,8 +31,7 @@ | |||
31 | 31 | ||
32 | /* USB */ | 32 | /* USB */ |
33 | #define GPIO_NR_PALMZ72_USB_DETECT_N 15 | 33 | #define GPIO_NR_PALMZ72_USB_DETECT_N 15 |
34 | #define GPIO_NR_PALMZ72_USB_POWER 95 | 34 | #define GPIO_NR_PALMZ72_USB_PULLUP 95 |
35 | #define GPIO_NR_PALMZ72_USB_PULLUP 12 | ||
36 | 35 | ||
37 | /* LCD/Backlight */ | 36 | /* LCD/Backlight */ |
38 | #define GPIO_NR_PALMZ72_BL_POWER 20 | 37 | #define GPIO_NR_PALMZ72_BL_POWER 20 |
diff --git a/arch/arm/mach-pxa/include/mach/treo680.h b/arch/arm/mach-pxa/include/mach/treo680.h new file mode 100644 index 000000000000..af443b24d99a --- /dev/null +++ b/arch/arm/mach-pxa/include/mach/treo680.h | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * GPIOs and interrupts for Palm Treo 680 smartphone | ||
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 | */ | ||
9 | |||
10 | #ifndef _INCLUDE_TREO680_H_ | ||
11 | #define _INCLUDE_TREO680_H_ | ||
12 | |||
13 | /* GPIOs */ | ||
14 | #define GPIO_NR_TREO680_POWER_DETECT 0 | ||
15 | #define GPIO_NR_TREO680_AMP_EN 27 | ||
16 | #define GPIO_NR_TREO680_KEYB_BL 24 | ||
17 | #define GPIO_NR_TREO680_VIBRATE_EN 44 | ||
18 | #define GPIO_NR_TREO680_GREEN_LED 20 | ||
19 | #define GPIO_NR_TREO680_RED_LED 79 | ||
20 | #define GPIO_NR_TREO680_SD_DETECT_N 113 | ||
21 | #define GPIO_NR_TREO680_SD_READONLY 33 | ||
22 | #define GPIO_NR_TREO680_EP_DETECT_N 116 | ||
23 | #define GPIO_NR_TREO680_SD_POWER 42 | ||
24 | #define GPIO_NR_TREO680_USB_DETECT 1 | ||
25 | #define GPIO_NR_TREO680_USB_PULLUP 114 | ||
26 | #define GPIO_NR_TREO680_GSM_POWER 40 | ||
27 | #define GPIO_NR_TREO680_GSM_RESET 87 | ||
28 | #define GPIO_NR_TREO680_GSM_WAKE 57 | ||
29 | #define GPIO_NR_TREO680_GSM_HOST_WAKE 14 | ||
30 | #define GPIO_NR_TREO680_GSM_TRIGGER 10 | ||
31 | #define GPIO_NR_TREO680_BT_EN 43 | ||
32 | #define GPIO_NR_TREO680_IR_EN 115 | ||
33 | #define GPIO_NR_TREO680_IR_TXD 47 | ||
34 | #define GPIO_NR_TREO680_BL_POWER 38 | ||
35 | #define GPIO_NR_TREO680_LCD_POWER 25 | ||
36 | |||
37 | /* Various addresses */ | ||
38 | #define TREO680_PHYS_RAM_START 0xa0000000 | ||
39 | #define TREO680_PHYS_IO_START 0x40000000 | ||
40 | #define TREO680_STR_BASE 0xa2000000 | ||
41 | |||
42 | /* BACKLIGHT */ | ||
43 | #define TREO680_MAX_INTENSITY 254 | ||
44 | #define TREO680_DEFAULT_INTENSITY 160 | ||
45 | #define TREO680_LIMIT_MASK 0x7F | ||
46 | #define TREO680_PRESCALER 63 | ||
47 | #define TREO680_PERIOD_NS 3500 | ||
48 | |||
49 | #endif | ||
diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c index 4dc8c2ec40a9..2d28132c725b 100644 --- a/arch/arm/mach-pxa/mioa701.c +++ b/arch/arm/mach-pxa/mioa701.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/wm97xx_batt.h> | 37 | #include <linux/wm97xx_batt.h> |
38 | #include <linux/mtd/physmap.h> | 38 | #include <linux/mtd/physmap.h> |
39 | #include <linux/usb/gpio_vbus.h> | 39 | #include <linux/usb/gpio_vbus.h> |
40 | #include <linux/regulator/max1586.h> | ||
40 | 41 | ||
41 | #include <asm/mach-types.h> | 42 | #include <asm/mach-types.h> |
42 | #include <asm/mach/arch.h> | 43 | #include <asm/mach/arch.h> |
@@ -717,6 +718,38 @@ static struct wm97xx_batt_info mioa701_battery_data = { | |||
717 | }; | 718 | }; |
718 | 719 | ||
719 | /* | 720 | /* |
721 | * Voltage regulation | ||
722 | */ | ||
723 | static struct regulator_consumer_supply max1586_consumers[] = { | ||
724 | { | ||
725 | .supply = "vcc_core", | ||
726 | } | ||
727 | }; | ||
728 | |||
729 | static struct regulator_init_data max1586_v3_info = { | ||
730 | .constraints = { | ||
731 | .name = "vcc_core range", | ||
732 | .min_uV = 1000000, | ||
733 | .max_uV = 1705000, | ||
734 | .always_on = 1, | ||
735 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, | ||
736 | }, | ||
737 | .num_consumer_supplies = ARRAY_SIZE(max1586_consumers), | ||
738 | .consumer_supplies = max1586_consumers, | ||
739 | }; | ||
740 | |||
741 | static struct max1586_subdev_data max1586_subdevs[] = { | ||
742 | { .name = "vcc_core", .id = MAX1586_V3, | ||
743 | .platform_data = &max1586_v3_info }, | ||
744 | }; | ||
745 | |||
746 | static struct max1586_platform_data max1586_info = { | ||
747 | .subdevs = max1586_subdevs, | ||
748 | .num_subdevs = ARRAY_SIZE(max1586_subdevs), | ||
749 | .v3_gain = MAX1586_GAIN_NO_R24, /* 700..1475 mV */ | ||
750 | }; | ||
751 | |||
752 | /* | ||
720 | * Camera interface | 753 | * Camera interface |
721 | */ | 754 | */ |
722 | struct pxacamera_platform_data mioa701_pxacamera_platform_data = { | 755 | struct pxacamera_platform_data mioa701_pxacamera_platform_data = { |
@@ -725,6 +758,13 @@ struct pxacamera_platform_data mioa701_pxacamera_platform_data = { | |||
725 | .mclk_10khz = 5000, | 758 | .mclk_10khz = 5000, |
726 | }; | 759 | }; |
727 | 760 | ||
761 | static struct i2c_board_info __initdata mioa701_pi2c_devices[] = { | ||
762 | { | ||
763 | I2C_BOARD_INFO("max1586", 0x14), | ||
764 | .platform_data = &max1586_info, | ||
765 | }, | ||
766 | }; | ||
767 | |||
728 | static struct soc_camera_link iclink = { | 768 | static struct soc_camera_link iclink = { |
729 | .bus_id = 0, /* Must match id in pxa27x_device_camera in device.c */ | 769 | .bus_id = 0, /* Must match id in pxa27x_device_camera in device.c */ |
730 | }; | 770 | }; |
@@ -825,7 +865,9 @@ static void __init mioa701_machine_init(void) | |||
825 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 865 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
826 | gsm_init(); | 866 | gsm_init(); |
827 | 867 | ||
868 | i2c_register_board_info(1, ARRAY_AND_SIZE(mioa701_pi2c_devices)); | ||
828 | pxa_set_i2c_info(&i2c_pdata); | 869 | pxa_set_i2c_info(&i2c_pdata); |
870 | pxa27x_set_i2c_power_info(NULL); | ||
829 | pxa_set_camera_info(&mioa701_pxacamera_platform_data); | 871 | pxa_set_camera_info(&mioa701_pxacamera_platform_data); |
830 | i2c_register_board_info(0, ARRAY_AND_SIZE(mioa701_i2c_devices)); | 872 | i2c_register_board_info(0, ARRAY_AND_SIZE(mioa701_i2c_devices)); |
831 | } | 873 | } |
diff --git a/arch/arm/mach-pxa/palmz72.c b/arch/arm/mach-pxa/palmz72.c index b88eb4dd2c84..c3645aa3fa3d 100644 --- a/arch/arm/mach-pxa/palmz72.c +++ b/arch/arm/mach-pxa/palmz72.c | |||
@@ -27,7 +27,9 @@ | |||
27 | #include <linux/pda_power.h> | 27 | #include <linux/pda_power.h> |
28 | #include <linux/pwm_backlight.h> | 28 | #include <linux/pwm_backlight.h> |
29 | #include <linux/gpio.h> | 29 | #include <linux/gpio.h> |
30 | #include <linux/wm97xx_batt.h> | ||
30 | #include <linux/power_supply.h> | 31 | #include <linux/power_supply.h> |
32 | #include <linux/usb/gpio_vbus.h> | ||
31 | 33 | ||
32 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
33 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
@@ -41,6 +43,8 @@ | |||
41 | #include <mach/irda.h> | 43 | #include <mach/irda.h> |
42 | #include <mach/pxa27x_keypad.h> | 44 | #include <mach/pxa27x_keypad.h> |
43 | #include <mach/udc.h> | 45 | #include <mach/udc.h> |
46 | #include <mach/palmasoc.h> | ||
47 | |||
44 | #include <mach/pm.h> | 48 | #include <mach/pm.h> |
45 | 49 | ||
46 | #include "generic.h" | 50 | #include "generic.h" |
@@ -66,6 +70,8 @@ static unsigned long palmz72_pin_config[] __initdata = { | |||
66 | GPIO29_AC97_SDATA_IN_0, | 70 | GPIO29_AC97_SDATA_IN_0, |
67 | GPIO30_AC97_SDATA_OUT, | 71 | GPIO30_AC97_SDATA_OUT, |
68 | GPIO31_AC97_SYNC, | 72 | GPIO31_AC97_SYNC, |
73 | GPIO89_AC97_SYSCLK, | ||
74 | GPIO113_AC97_nRESET, | ||
69 | 75 | ||
70 | /* IrDA */ | 76 | /* IrDA */ |
71 | GPIO49_GPIO, /* ir disable */ | 77 | GPIO49_GPIO, /* ir disable */ |
@@ -77,8 +83,7 @@ static unsigned long palmz72_pin_config[] __initdata = { | |||
77 | 83 | ||
78 | /* USB */ | 84 | /* USB */ |
79 | GPIO15_GPIO, /* usb detect */ | 85 | GPIO15_GPIO, /* usb detect */ |
80 | GPIO12_GPIO, /* usb pullup */ | 86 | GPIO95_GPIO, /* usb pullup */ |
81 | GPIO95_GPIO, /* usb power */ | ||
82 | 87 | ||
83 | /* Matrix keypad */ | 88 | /* Matrix keypad */ |
84 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, | 89 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, |
@@ -355,6 +360,22 @@ static struct platform_device palmz72_leds = { | |||
355 | }; | 360 | }; |
356 | 361 | ||
357 | /****************************************************************************** | 362 | /****************************************************************************** |
363 | * UDC | ||
364 | ******************************************************************************/ | ||
365 | static struct gpio_vbus_mach_info palmz72_udc_info = { | ||
366 | .gpio_vbus = GPIO_NR_PALMZ72_USB_DETECT_N, | ||
367 | .gpio_pullup = GPIO_NR_PALMZ72_USB_PULLUP, | ||
368 | }; | ||
369 | |||
370 | static struct platform_device palmz72_gpio_vbus = { | ||
371 | .name = "gpio-vbus", | ||
372 | .id = -1, | ||
373 | .dev = { | ||
374 | .platform_data = &palmz72_udc_info, | ||
375 | }, | ||
376 | }; | ||
377 | |||
378 | /****************************************************************************** | ||
358 | * Power supply | 379 | * Power supply |
359 | ******************************************************************************/ | 380 | ******************************************************************************/ |
360 | static int power_supply_init(struct device *dev) | 381 | static int power_supply_init(struct device *dev) |
@@ -422,6 +443,31 @@ static struct platform_device power_supply = { | |||
422 | }; | 443 | }; |
423 | 444 | ||
424 | /****************************************************************************** | 445 | /****************************************************************************** |
446 | * WM97xx battery | ||
447 | ******************************************************************************/ | ||
448 | static struct wm97xx_batt_info wm97xx_batt_pdata = { | ||
449 | .batt_aux = WM97XX_AUX_ID3, | ||
450 | .temp_aux = WM97XX_AUX_ID2, | ||
451 | .charge_gpio = -1, | ||
452 | .max_voltage = PALMZ72_BAT_MAX_VOLTAGE, | ||
453 | .min_voltage = PALMZ72_BAT_MIN_VOLTAGE, | ||
454 | .batt_mult = 1000, | ||
455 | .batt_div = 414, | ||
456 | .temp_mult = 1, | ||
457 | .temp_div = 1, | ||
458 | .batt_tech = POWER_SUPPLY_TECHNOLOGY_LIPO, | ||
459 | .batt_name = "main-batt", | ||
460 | }; | ||
461 | |||
462 | /****************************************************************************** | ||
463 | * aSoC audio | ||
464 | ******************************************************************************/ | ||
465 | static struct platform_device palmz72_asoc = { | ||
466 | .name = "palm27x-asoc", | ||
467 | .id = -1, | ||
468 | }; | ||
469 | |||
470 | /****************************************************************************** | ||
425 | * Framebuffer | 471 | * Framebuffer |
426 | ******************************************************************************/ | 472 | ******************************************************************************/ |
427 | static struct pxafb_mode_info palmz72_lcd_modes[] = { | 473 | static struct pxafb_mode_info palmz72_lcd_modes[] = { |
@@ -527,17 +573,32 @@ device_initcall(palmz72_pm_init); | |||
527 | static struct platform_device *devices[] __initdata = { | 573 | static struct platform_device *devices[] __initdata = { |
528 | &palmz72_backlight, | 574 | &palmz72_backlight, |
529 | &palmz72_leds, | 575 | &palmz72_leds, |
576 | &palmz72_asoc, | ||
530 | &power_supply, | 577 | &power_supply, |
578 | &palmz72_gpio_vbus, | ||
531 | }; | 579 | }; |
532 | 580 | ||
581 | /* setup udc GPIOs initial state */ | ||
582 | static void __init palmz72_udc_init(void) | ||
583 | { | ||
584 | if (!gpio_request(GPIO_NR_PALMZ72_USB_PULLUP, "USB Pullup")) { | ||
585 | gpio_direction_output(GPIO_NR_PALMZ72_USB_PULLUP, 0); | ||
586 | gpio_free(GPIO_NR_PALMZ72_USB_PULLUP); | ||
587 | } | ||
588 | } | ||
589 | |||
533 | static void __init palmz72_init(void) | 590 | static void __init palmz72_init(void) |
534 | { | 591 | { |
535 | pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config)); | 592 | pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config)); |
593 | |||
536 | set_pxa_fb_info(&palmz72_lcd_screen); | 594 | set_pxa_fb_info(&palmz72_lcd_screen); |
537 | pxa_set_mci_info(&palmz72_mci_platform_data); | 595 | pxa_set_mci_info(&palmz72_mci_platform_data); |
596 | palmz72_udc_init(); | ||
538 | pxa_set_ac97_info(NULL); | 597 | pxa_set_ac97_info(NULL); |
539 | pxa_set_ficp_info(&palmz72_ficp_platform_data); | 598 | pxa_set_ficp_info(&palmz72_ficp_platform_data); |
540 | pxa_set_keypad_info(&palmz72_keypad_platform_data); | 599 | pxa_set_keypad_info(&palmz72_keypad_platform_data); |
600 | wm97xx_bat_set_pdata(&wm97xx_batt_pdata); | ||
601 | |||
541 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 602 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
542 | } | 603 | } |
543 | 604 | ||
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index ac431ed10399..9352d4a34837 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
23 | #include <linux/mtd/physmap.h> | 23 | #include <linux/mtd/physmap.h> |
24 | #include <linux/gpio.h> | 24 | #include <linux/gpio.h> |
25 | #include <linux/i2c.h> | ||
25 | #include <linux/spi/spi.h> | 26 | #include <linux/spi/spi.h> |
26 | #include <linux/spi/ads7846.h> | 27 | #include <linux/spi/ads7846.h> |
27 | #include <linux/mtd/sharpsl.h> | 28 | #include <linux/mtd/sharpsl.h> |
@@ -486,6 +487,10 @@ static struct platform_device *devices[] __initdata = { | |||
486 | &sharpsl_rom_device, | 487 | &sharpsl_rom_device, |
487 | }; | 488 | }; |
488 | 489 | ||
490 | static struct i2c_board_info __initdata poodle_i2c_devices[] = { | ||
491 | { I2C_BOARD_INFO("wm8731", 0x1b) }, | ||
492 | }; | ||
493 | |||
489 | static void poodle_poweroff(void) | 494 | static void poodle_poweroff(void) |
490 | { | 495 | { |
491 | arm_machine_restart('h', NULL); | 496 | arm_machine_restart('h', NULL); |
@@ -519,6 +524,7 @@ static void __init poodle_init(void) | |||
519 | pxa_set_mci_info(&poodle_mci_platform_data); | 524 | pxa_set_mci_info(&poodle_mci_platform_data); |
520 | pxa_set_ficp_info(&poodle_ficp_platform_data); | 525 | pxa_set_ficp_info(&poodle_ficp_platform_data); |
521 | pxa_set_i2c_info(NULL); | 526 | pxa_set_i2c_info(NULL); |
527 | i2c_register_board_info(0, ARRAY_AND_SIZE(poodle_i2c_devices)); | ||
522 | poodle_init_spi(); | 528 | poodle_init_spi(); |
523 | } | 529 | } |
524 | 530 | ||
diff --git a/arch/arm/mach-pxa/treo680.c b/arch/arm/mach-pxa/treo680.c new file mode 100644 index 000000000000..a06f19edebb3 --- /dev/null +++ b/arch/arm/mach-pxa/treo680.c | |||
@@ -0,0 +1,612 @@ | |||
1 | /* | ||
2 | * Hardware definitions for Palm Treo 680 | ||
3 | * | ||
4 | * Author: Tomas Cech <sleep_walker@suse.cz> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * (find more info at www.hackndev.com) | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #include <linux/platform_device.h> | ||
15 | #include <linux/delay.h> | ||
16 | #include <linux/irq.h> | ||
17 | #include <linux/gpio_keys.h> | ||
18 | #include <linux/input.h> | ||
19 | #include <linux/pda_power.h> | ||
20 | #include <linux/pwm_backlight.h> | ||
21 | #include <linux/gpio.h> | ||
22 | #include <linux/wm97xx_batt.h> | ||
23 | #include <linux/power_supply.h> | ||
24 | #include <linux/sysdev.h> | ||
25 | #include <linux/w1-gpio.h> | ||
26 | |||
27 | #include <asm/mach-types.h> | ||
28 | #include <asm/mach/arch.h> | ||
29 | #include <asm/mach/map.h> | ||
30 | |||
31 | #include <mach/pxa27x.h> | ||
32 | #include <mach/pxa27x-udc.h> | ||
33 | #include <mach/audio.h> | ||
34 | #include <mach/treo680.h> | ||
35 | #include <mach/mmc.h> | ||
36 | #include <mach/pxafb.h> | ||
37 | #include <mach/irda.h> | ||
38 | #include <mach/pxa27x_keypad.h> | ||
39 | #include <mach/udc.h> | ||
40 | #include <mach/ohci.h> | ||
41 | #include <mach/pxa2xx-regs.h> | ||
42 | #include <mach/palmasoc.h> | ||
43 | #include <mach/camera.h> | ||
44 | |||
45 | #include <sound/pxa2xx-lib.h> | ||
46 | |||
47 | #include "generic.h" | ||
48 | #include "devices.h" | ||
49 | |||
50 | /****************************************************************************** | ||
51 | * Pin configuration | ||
52 | ******************************************************************************/ | ||
53 | static unsigned long treo680_pin_config[] __initdata = { | ||
54 | /* MMC */ | ||
55 | GPIO32_MMC_CLK, | ||
56 | GPIO92_MMC_DAT_0, | ||
57 | GPIO109_MMC_DAT_1, | ||
58 | GPIO110_MMC_DAT_2, | ||
59 | GPIO111_MMC_DAT_3, | ||
60 | GPIO112_MMC_CMD, | ||
61 | GPIO33_GPIO, /* SD read only */ | ||
62 | GPIO113_GPIO, /* SD detect */ | ||
63 | |||
64 | /* AC97 */ | ||
65 | GPIO28_AC97_BITCLK, | ||
66 | GPIO29_AC97_SDATA_IN_0, | ||
67 | GPIO30_AC97_SDATA_OUT, | ||
68 | GPIO31_AC97_SYNC, | ||
69 | GPIO89_AC97_SYSCLK, | ||
70 | GPIO95_AC97_nRESET, | ||
71 | |||
72 | /* IrDA */ | ||
73 | GPIO46_FICP_RXD, | ||
74 | GPIO47_FICP_TXD, | ||
75 | |||
76 | /* PWM */ | ||
77 | GPIO16_PWM0_OUT, | ||
78 | |||
79 | /* USB */ | ||
80 | GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH, /* usb detect */ | ||
81 | |||
82 | /* MATRIX KEYPAD */ | ||
83 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, | ||
84 | GPIO101_KP_MKIN_1, | ||
85 | GPIO102_KP_MKIN_2, | ||
86 | GPIO97_KP_MKIN_3, | ||
87 | GPIO98_KP_MKIN_4, | ||
88 | GPIO99_KP_MKIN_5, | ||
89 | GPIO91_KP_MKIN_6, | ||
90 | GPIO13_KP_MKIN_7, | ||
91 | GPIO103_KP_MKOUT_0 | MFP_LPM_DRIVE_HIGH, | ||
92 | GPIO104_KP_MKOUT_1, | ||
93 | GPIO105_KP_MKOUT_2, | ||
94 | GPIO106_KP_MKOUT_3, | ||
95 | GPIO107_KP_MKOUT_4, | ||
96 | GPIO108_KP_MKOUT_5, | ||
97 | GPIO96_KP_MKOUT_6, | ||
98 | GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH, /* Hotsync button */ | ||
99 | |||
100 | /* LCD */ | ||
101 | GPIO58_LCD_LDD_0, | ||
102 | GPIO59_LCD_LDD_1, | ||
103 | GPIO60_LCD_LDD_2, | ||
104 | GPIO61_LCD_LDD_3, | ||
105 | GPIO62_LCD_LDD_4, | ||
106 | GPIO63_LCD_LDD_5, | ||
107 | GPIO64_LCD_LDD_6, | ||
108 | GPIO65_LCD_LDD_7, | ||
109 | GPIO66_LCD_LDD_8, | ||
110 | GPIO67_LCD_LDD_9, | ||
111 | GPIO68_LCD_LDD_10, | ||
112 | GPIO69_LCD_LDD_11, | ||
113 | GPIO70_LCD_LDD_12, | ||
114 | GPIO71_LCD_LDD_13, | ||
115 | GPIO72_LCD_LDD_14, | ||
116 | GPIO73_LCD_LDD_15, | ||
117 | GPIO74_LCD_FCLK, | ||
118 | GPIO75_LCD_LCLK, | ||
119 | GPIO76_LCD_PCLK, | ||
120 | |||
121 | /* Quick Capture Interface */ | ||
122 | GPIO84_CIF_FV, | ||
123 | GPIO85_CIF_LV, | ||
124 | GPIO53_CIF_MCLK, | ||
125 | GPIO54_CIF_PCLK, | ||
126 | GPIO81_CIF_DD_0, | ||
127 | GPIO55_CIF_DD_1, | ||
128 | GPIO51_CIF_DD_2, | ||
129 | GPIO50_CIF_DD_3, | ||
130 | GPIO52_CIF_DD_4, | ||
131 | GPIO48_CIF_DD_5, | ||
132 | GPIO17_CIF_DD_6, | ||
133 | GPIO12_CIF_DD_7, | ||
134 | |||
135 | /* I2C */ | ||
136 | GPIO117_I2C_SCL, | ||
137 | GPIO118_I2C_SDA, | ||
138 | |||
139 | /* GSM */ | ||
140 | GPIO14_GPIO | WAKEUP_ON_EDGE_BOTH, /* GSM host wake up */ | ||
141 | GPIO34_FFUART_RXD, | ||
142 | GPIO35_FFUART_CTS, | ||
143 | GPIO39_FFUART_TXD, | ||
144 | GPIO41_FFUART_RTS, | ||
145 | |||
146 | /* MISC. */ | ||
147 | GPIO0_GPIO | WAKEUP_ON_EDGE_BOTH, /* external power detect */ | ||
148 | GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH, /* silent switch */ | ||
149 | GPIO116_GPIO, /* headphone detect */ | ||
150 | GPIO11_GPIO | WAKEUP_ON_EDGE_BOTH, /* bluetooth host wake up */ | ||
151 | }; | ||
152 | |||
153 | /****************************************************************************** | ||
154 | * SD/MMC card controller | ||
155 | ******************************************************************************/ | ||
156 | static int treo680_mci_init(struct device *dev, | ||
157 | irq_handler_t treo680_detect_int, void *data) | ||
158 | { | ||
159 | int err = 0; | ||
160 | |||
161 | /* Setup an interrupt for detecting card insert/remove events */ | ||
162 | err = gpio_request(GPIO_NR_TREO680_SD_DETECT_N, "SD IRQ"); | ||
163 | |||
164 | if (err) | ||
165 | goto err; | ||
166 | |||
167 | err = gpio_direction_input(GPIO_NR_TREO680_SD_DETECT_N); | ||
168 | if (err) | ||
169 | goto err2; | ||
170 | |||
171 | err = request_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), | ||
172 | treo680_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM | | ||
173 | IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, | ||
174 | "SD/MMC card detect", data); | ||
175 | |||
176 | if (err) { | ||
177 | dev_err(dev, "%s: cannot request SD/MMC card detect IRQ\n", | ||
178 | __func__); | ||
179 | goto err2; | ||
180 | } | ||
181 | |||
182 | err = gpio_request(GPIO_NR_TREO680_SD_POWER, "SD_POWER"); | ||
183 | if (err) | ||
184 | goto err3; | ||
185 | |||
186 | err = gpio_direction_output(GPIO_NR_TREO680_SD_POWER, 1); | ||
187 | if (err) | ||
188 | goto err4; | ||
189 | |||
190 | err = gpio_request(GPIO_NR_TREO680_SD_READONLY, "SD_READONLY"); | ||
191 | if (err) | ||
192 | goto err4; | ||
193 | |||
194 | err = gpio_direction_input(GPIO_NR_TREO680_SD_READONLY); | ||
195 | if (err) | ||
196 | goto err5; | ||
197 | |||
198 | return 0; | ||
199 | |||
200 | err5: | ||
201 | gpio_free(GPIO_NR_TREO680_SD_READONLY); | ||
202 | err4: | ||
203 | gpio_free(GPIO_NR_TREO680_SD_POWER); | ||
204 | err3: | ||
205 | free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data); | ||
206 | err2: | ||
207 | gpio_free(GPIO_NR_TREO680_SD_DETECT_N); | ||
208 | err: | ||
209 | return err; | ||
210 | } | ||
211 | |||
212 | static void treo680_mci_exit(struct device *dev, void *data) | ||
213 | { | ||
214 | gpio_free(GPIO_NR_TREO680_SD_READONLY); | ||
215 | gpio_free(GPIO_NR_TREO680_SD_POWER); | ||
216 | free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data); | ||
217 | gpio_free(GPIO_NR_TREO680_SD_DETECT_N); | ||
218 | } | ||
219 | |||
220 | static void treo680_mci_power(struct device *dev, unsigned int vdd) | ||
221 | { | ||
222 | struct pxamci_platform_data *p_d = dev->platform_data; | ||
223 | gpio_set_value(GPIO_NR_TREO680_SD_POWER, p_d->ocr_mask & (1 << vdd)); | ||
224 | } | ||
225 | |||
226 | static int treo680_mci_get_ro(struct device *dev) | ||
227 | { | ||
228 | return gpio_get_value(GPIO_NR_TREO680_SD_READONLY); | ||
229 | } | ||
230 | |||
231 | static struct pxamci_platform_data treo680_mci_platform_data = { | ||
232 | .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, | ||
233 | .setpower = treo680_mci_power, | ||
234 | .get_ro = treo680_mci_get_ro, | ||
235 | .init = treo680_mci_init, | ||
236 | .exit = treo680_mci_exit, | ||
237 | }; | ||
238 | |||
239 | /****************************************************************************** | ||
240 | * GPIO keyboard | ||
241 | ******************************************************************************/ | ||
242 | static unsigned int treo680_matrix_keys[] = { | ||
243 | KEY(0, 0, KEY_F8), /* Red/Off/Power */ | ||
244 | KEY(0, 1, KEY_LEFT), | ||
245 | KEY(0, 2, KEY_LEFTCTRL), /* Alternate */ | ||
246 | KEY(0, 3, KEY_L), | ||
247 | KEY(0, 4, KEY_A), | ||
248 | KEY(0, 5, KEY_Q), | ||
249 | KEY(0, 6, KEY_P), | ||
250 | |||
251 | KEY(1, 0, KEY_RIGHTCTRL), /* Menu */ | ||
252 | KEY(1, 1, KEY_RIGHT), | ||
253 | KEY(1, 2, KEY_LEFTSHIFT), /* Left shift */ | ||
254 | KEY(1, 3, KEY_Z), | ||
255 | KEY(1, 4, KEY_S), | ||
256 | KEY(1, 5, KEY_W), | ||
257 | |||
258 | KEY(2, 0, KEY_F1), /* Phone */ | ||
259 | KEY(2, 1, KEY_UP), | ||
260 | KEY(2, 2, KEY_0), | ||
261 | KEY(2, 3, KEY_X), | ||
262 | KEY(2, 4, KEY_D), | ||
263 | KEY(2, 5, KEY_E), | ||
264 | |||
265 | KEY(3, 0, KEY_F10), /* Calendar */ | ||
266 | KEY(3, 1, KEY_DOWN), | ||
267 | KEY(3, 2, KEY_SPACE), | ||
268 | KEY(3, 3, KEY_C), | ||
269 | KEY(3, 4, KEY_F), | ||
270 | KEY(3, 5, KEY_R), | ||
271 | |||
272 | KEY(4, 0, KEY_F12), /* Mail */ | ||
273 | KEY(4, 1, KEY_KPENTER), | ||
274 | KEY(4, 2, KEY_RIGHTALT), /* Alt */ | ||
275 | KEY(4, 3, KEY_V), | ||
276 | KEY(4, 4, KEY_G), | ||
277 | KEY(4, 5, KEY_T), | ||
278 | |||
279 | KEY(5, 0, KEY_F9), /* Home */ | ||
280 | KEY(5, 1, KEY_PAGEUP), /* Side up */ | ||
281 | KEY(5, 2, KEY_DOT), | ||
282 | KEY(5, 3, KEY_B), | ||
283 | KEY(5, 4, KEY_H), | ||
284 | KEY(5, 5, KEY_Y), | ||
285 | |||
286 | KEY(6, 0, KEY_TAB), /* Side Activate */ | ||
287 | KEY(6, 1, KEY_PAGEDOWN), /* Side down */ | ||
288 | KEY(6, 2, KEY_ENTER), | ||
289 | KEY(6, 3, KEY_N), | ||
290 | KEY(6, 4, KEY_J), | ||
291 | KEY(6, 5, KEY_U), | ||
292 | |||
293 | KEY(7, 0, KEY_F6), /* Green/Call */ | ||
294 | KEY(7, 1, KEY_O), | ||
295 | KEY(7, 2, KEY_BACKSPACE), | ||
296 | KEY(7, 3, KEY_M), | ||
297 | KEY(7, 4, KEY_K), | ||
298 | KEY(7, 5, KEY_I), | ||
299 | }; | ||
300 | |||
301 | static struct pxa27x_keypad_platform_data treo680_keypad_platform_data = { | ||
302 | .matrix_key_rows = 8, | ||
303 | .matrix_key_cols = 7, | ||
304 | .matrix_key_map = treo680_matrix_keys, | ||
305 | .matrix_key_map_size = ARRAY_SIZE(treo680_matrix_keys), | ||
306 | .direct_key_map = { KEY_CONNECT }, | ||
307 | .direct_key_num = 1, | ||
308 | |||
309 | .debounce_interval = 30, | ||
310 | }; | ||
311 | |||
312 | /****************************************************************************** | ||
313 | * aSoC audio | ||
314 | ******************************************************************************/ | ||
315 | |||
316 | static pxa2xx_audio_ops_t treo680_ac97_pdata = { | ||
317 | .reset_gpio = 95, | ||
318 | }; | ||
319 | |||
320 | /****************************************************************************** | ||
321 | * Backlight | ||
322 | ******************************************************************************/ | ||
323 | static int treo680_backlight_init(struct device *dev) | ||
324 | { | ||
325 | int ret; | ||
326 | |||
327 | ret = gpio_request(GPIO_NR_TREO680_BL_POWER, "BL POWER"); | ||
328 | if (ret) | ||
329 | goto err; | ||
330 | ret = gpio_direction_output(GPIO_NR_TREO680_BL_POWER, 0); | ||
331 | if (ret) | ||
332 | goto err2; | ||
333 | ret = gpio_request(GPIO_NR_TREO680_LCD_POWER, "LCD POWER"); | ||
334 | if (ret) | ||
335 | goto err2; | ||
336 | ret = gpio_direction_output(GPIO_NR_TREO680_LCD_POWER, 0); | ||
337 | if (ret) | ||
338 | goto err3; | ||
339 | |||
340 | return 0; | ||
341 | err3: | ||
342 | gpio_free(GPIO_NR_TREO680_LCD_POWER); | ||
343 | err2: | ||
344 | gpio_free(GPIO_NR_TREO680_BL_POWER); | ||
345 | err: | ||
346 | return ret; | ||
347 | } | ||
348 | |||
349 | static int treo680_backlight_notify(int brightness) | ||
350 | { | ||
351 | gpio_set_value(GPIO_NR_TREO680_BL_POWER, brightness); | ||
352 | return TREO680_MAX_INTENSITY - brightness; | ||
353 | }; | ||
354 | |||
355 | static void treo680_backlight_exit(struct device *dev) | ||
356 | { | ||
357 | gpio_free(GPIO_NR_TREO680_BL_POWER); | ||
358 | gpio_free(GPIO_NR_TREO680_LCD_POWER); | ||
359 | } | ||
360 | |||
361 | static struct platform_pwm_backlight_data treo680_backlight_data = { | ||
362 | .pwm_id = 0, | ||
363 | .max_brightness = TREO680_MAX_INTENSITY, | ||
364 | .dft_brightness = TREO680_DEFAULT_INTENSITY, | ||
365 | .pwm_period_ns = TREO680_PERIOD_NS, | ||
366 | .init = treo680_backlight_init, | ||
367 | .notify = treo680_backlight_notify, | ||
368 | .exit = treo680_backlight_exit, | ||
369 | }; | ||
370 | |||
371 | static struct platform_device treo680_backlight = { | ||
372 | .name = "pwm-backlight", | ||
373 | .dev = { | ||
374 | .parent = &pxa27x_device_pwm0.dev, | ||
375 | .platform_data = &treo680_backlight_data, | ||
376 | }, | ||
377 | }; | ||
378 | |||
379 | /****************************************************************************** | ||
380 | * IrDA | ||
381 | ******************************************************************************/ | ||
382 | static void treo680_transceiver_mode(struct device *dev, int mode) | ||
383 | { | ||
384 | gpio_set_value(GPIO_NR_TREO680_IR_EN, mode & IR_OFF); | ||
385 | pxa2xx_transceiver_mode(dev, mode); | ||
386 | } | ||
387 | |||
388 | static int treo680_irda_startup(struct device *dev) | ||
389 | { | ||
390 | int err; | ||
391 | |||
392 | err = gpio_request(GPIO_NR_TREO680_IR_EN, "Ir port disable"); | ||
393 | if (err) | ||
394 | goto err1; | ||
395 | |||
396 | err = gpio_direction_output(GPIO_NR_TREO680_IR_EN, 1); | ||
397 | if (err) | ||
398 | goto err2; | ||
399 | |||
400 | return 0; | ||
401 | |||
402 | err2: | ||
403 | dev_err(dev, "treo680_irda: cannot change IR gpio direction\n"); | ||
404 | gpio_free(GPIO_NR_TREO680_IR_EN); | ||
405 | err1: | ||
406 | dev_err(dev, "treo680_irda: cannot allocate IR gpio\n"); | ||
407 | return err; | ||
408 | } | ||
409 | |||
410 | static void treo680_irda_shutdown(struct device *dev) | ||
411 | { | ||
412 | gpio_free(GPIO_NR_TREO680_AMP_EN); | ||
413 | } | ||
414 | |||
415 | static struct pxaficp_platform_data treo680_ficp_info = { | ||
416 | .transceiver_cap = IR_FIRMODE | IR_SIRMODE | IR_OFF, | ||
417 | .startup = treo680_irda_startup, | ||
418 | .shutdown = treo680_irda_shutdown, | ||
419 | .transceiver_mode = treo680_transceiver_mode, | ||
420 | }; | ||
421 | |||
422 | /****************************************************************************** | ||
423 | * UDC | ||
424 | ******************************************************************************/ | ||
425 | static struct pxa2xx_udc_mach_info treo680_udc_info __initdata = { | ||
426 | .gpio_vbus = GPIO_NR_TREO680_USB_DETECT, | ||
427 | .gpio_vbus_inverted = 1, | ||
428 | .gpio_pullup = GPIO_NR_TREO680_USB_PULLUP, | ||
429 | }; | ||
430 | |||
431 | |||
432 | /****************************************************************************** | ||
433 | * USB host | ||
434 | ******************************************************************************/ | ||
435 | static struct pxaohci_platform_data treo680_ohci_info = { | ||
436 | .port_mode = PMM_PERPORT_MODE, | ||
437 | .flags = ENABLE_PORT1 | ENABLE_PORT3, | ||
438 | .power_budget = 0, | ||
439 | }; | ||
440 | |||
441 | /****************************************************************************** | ||
442 | * Power supply | ||
443 | ******************************************************************************/ | ||
444 | static int power_supply_init(struct device *dev) | ||
445 | { | ||
446 | int ret; | ||
447 | |||
448 | ret = gpio_request(GPIO_NR_TREO680_POWER_DETECT, "CABLE_STATE_AC"); | ||
449 | if (ret) | ||
450 | goto err1; | ||
451 | ret = gpio_direction_input(GPIO_NR_TREO680_POWER_DETECT); | ||
452 | if (ret) | ||
453 | goto err2; | ||
454 | |||
455 | return 0; | ||
456 | |||
457 | err2: | ||
458 | gpio_free(GPIO_NR_TREO680_POWER_DETECT); | ||
459 | err1: | ||
460 | return ret; | ||
461 | } | ||
462 | |||
463 | static int treo680_is_ac_online(void) | ||
464 | { | ||
465 | return gpio_get_value(GPIO_NR_TREO680_POWER_DETECT); | ||
466 | } | ||
467 | |||
468 | static void power_supply_exit(struct device *dev) | ||
469 | { | ||
470 | gpio_free(GPIO_NR_TREO680_POWER_DETECT); | ||
471 | } | ||
472 | |||
473 | static char *treo680_supplicants[] = { | ||
474 | "main-battery", | ||
475 | }; | ||
476 | |||
477 | static struct pda_power_pdata power_supply_info = { | ||
478 | .init = power_supply_init, | ||
479 | .is_ac_online = treo680_is_ac_online, | ||
480 | .exit = power_supply_exit, | ||
481 | .supplied_to = treo680_supplicants, | ||
482 | .num_supplicants = ARRAY_SIZE(treo680_supplicants), | ||
483 | }; | ||
484 | |||
485 | static struct platform_device power_supply = { | ||
486 | .name = "pda-power", | ||
487 | .id = -1, | ||
488 | .dev = { | ||
489 | .platform_data = &power_supply_info, | ||
490 | }, | ||
491 | }; | ||
492 | |||
493 | /****************************************************************************** | ||
494 | * Vibra and LEDs | ||
495 | ******************************************************************************/ | ||
496 | static struct gpio_led gpio_leds[] = { | ||
497 | { | ||
498 | .name = "treo680:vibra:vibra", | ||
499 | .default_trigger = "none", | ||
500 | .gpio = GPIO_NR_TREO680_VIBRATE_EN, | ||
501 | }, | ||
502 | { | ||
503 | .name = "treo680:green:led", | ||
504 | .default_trigger = "mmc0", | ||
505 | .gpio = GPIO_NR_TREO680_GREEN_LED, | ||
506 | }, | ||
507 | { | ||
508 | .name = "treo680:keybbl:keybbl", | ||
509 | .default_trigger = "none", | ||
510 | .gpio = GPIO_NR_TREO680_KEYB_BL, | ||
511 | }, | ||
512 | }; | ||
513 | |||
514 | static struct gpio_led_platform_data gpio_led_info = { | ||
515 | .leds = gpio_leds, | ||
516 | .num_leds = ARRAY_SIZE(gpio_leds), | ||
517 | }; | ||
518 | |||
519 | static struct platform_device treo680_leds = { | ||
520 | .name = "leds-gpio", | ||
521 | .id = -1, | ||
522 | .dev = { | ||
523 | .platform_data = &gpio_led_info, | ||
524 | } | ||
525 | }; | ||
526 | |||
527 | |||
528 | /****************************************************************************** | ||
529 | * Framebuffer | ||
530 | ******************************************************************************/ | ||
531 | /* TODO: add support for 324x324 */ | ||
532 | static struct pxafb_mode_info treo680_lcd_modes[] = { | ||
533 | { | ||
534 | .pixclock = 86538, | ||
535 | .xres = 320, | ||
536 | .yres = 320, | ||
537 | .bpp = 16, | ||
538 | |||
539 | .left_margin = 20, | ||
540 | .right_margin = 8, | ||
541 | .upper_margin = 8, | ||
542 | .lower_margin = 5, | ||
543 | |||
544 | .hsync_len = 4, | ||
545 | .vsync_len = 1, | ||
546 | }, | ||
547 | }; | ||
548 | |||
549 | static struct pxafb_mach_info treo680_lcd_screen = { | ||
550 | .modes = treo680_lcd_modes, | ||
551 | .num_modes = ARRAY_SIZE(treo680_lcd_modes), | ||
552 | .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL, | ||
553 | }; | ||
554 | |||
555 | /****************************************************************************** | ||
556 | * Power management - standby | ||
557 | ******************************************************************************/ | ||
558 | static void __init treo680_pm_init(void) | ||
559 | { | ||
560 | static u32 resume[] = { | ||
561 | 0xe3a00101, /* mov r0, #0x40000000 */ | ||
562 | 0xe380060f, /* orr r0, r0, #0x00f00000 */ | ||
563 | 0xe590f008, /* ldr pc, [r0, #0x08] */ | ||
564 | }; | ||
565 | |||
566 | /* this is where the bootloader jumps */ | ||
567 | memcpy(phys_to_virt(TREO680_STR_BASE), resume, sizeof(resume)); | ||
568 | } | ||
569 | |||
570 | /****************************************************************************** | ||
571 | * Machine init | ||
572 | ******************************************************************************/ | ||
573 | static struct platform_device *devices[] __initdata = { | ||
574 | &treo680_backlight, | ||
575 | &treo680_leds, | ||
576 | &power_supply, | ||
577 | }; | ||
578 | |||
579 | /* setup udc GPIOs initial state */ | ||
580 | static void __init treo680_udc_init(void) | ||
581 | { | ||
582 | if (!gpio_request(GPIO_NR_TREO680_USB_PULLUP, "UDC Vbus")) { | ||
583 | gpio_direction_output(GPIO_NR_TREO680_USB_PULLUP, 1); | ||
584 | gpio_free(GPIO_NR_TREO680_USB_PULLUP); | ||
585 | } | ||
586 | } | ||
587 | |||
588 | static void __init treo680_init(void) | ||
589 | { | ||
590 | treo680_pm_init(); | ||
591 | pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config)); | ||
592 | pxa_set_keypad_info(&treo680_keypad_platform_data); | ||
593 | set_pxa_fb_info(&treo680_lcd_screen); | ||
594 | pxa_set_mci_info(&treo680_mci_platform_data); | ||
595 | treo680_udc_init(); | ||
596 | pxa_set_udc_info(&treo680_udc_info); | ||
597 | pxa_set_ac97_info(&treo680_ac97_pdata); | ||
598 | pxa_set_ficp_info(&treo680_ficp_info); | ||
599 | pxa_set_ohci_info(&treo680_ohci_info); | ||
600 | |||
601 | platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
602 | } | ||
603 | |||
604 | MACHINE_START(TREO680, "Palm Treo 680") | ||
605 | .phys_io = TREO680_PHYS_IO_START, | ||
606 | .io_pg_offst = io_p2v(0x40000000), | ||
607 | .boot_params = 0xa0000100, | ||
608 | .map_io = pxa_map_io, | ||
609 | .init_irq = pxa27x_init_irq, | ||
610 | .timer = &pxa_timer, | ||
611 | .init_machine = treo680_init, | ||
612 | MACHINE_END | ||
diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c index 1fe294d0bf9d..ede2a57240a3 100644 --- a/arch/arm/mach-realview/realview_pbx.c +++ b/arch/arm/mach-realview/realview_pbx.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <asm/irq.h> | 27 | #include <asm/irq.h> |
28 | #include <asm/leds.h> | 28 | #include <asm/leds.h> |
29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
30 | #include <asm/smp_twd.h> | ||
30 | #include <asm/hardware/gic.h> | 31 | #include <asm/hardware/gic.h> |
31 | #include <asm/hardware/cache-l2x0.h> | 32 | #include <asm/hardware/cache-l2x0.h> |
32 | 33 | ||
diff --git a/arch/arm/mach-s3c2410/usb-simtec.c b/arch/arm/mach-s3c2410/usb-simtec.c index 6cd9377ddb82..50e25fc5f8ab 100644 --- a/arch/arm/mach-s3c2410/usb-simtec.c +++ b/arch/arm/mach-s3c2410/usb-simtec.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/timer.h> | 22 | #include <linux/timer.h> |
23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
24 | #include <linux/device.h> | 24 | #include <linux/device.h> |
25 | #include <linux/gpio.h> | ||
26 | #include <linux/io.h> | 25 | #include <linux/io.h> |
27 | 26 | ||
28 | #include <asm/mach/arch.h> | 27 | #include <asm/mach/arch.h> |
diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig index 5df73cbf2b40..8cfeaec37306 100644 --- a/arch/arm/mach-s3c2440/Kconfig +++ b/arch/arm/mach-s3c2440/Kconfig | |||
@@ -84,5 +84,15 @@ config MACH_AT2440EVB | |||
84 | help | 84 | help |
85 | Say Y here if you are using the AT2440EVB development board | 85 | Say Y here if you are using the AT2440EVB development board |
86 | 86 | ||
87 | config MACH_MINI2440 | ||
88 | bool "MINI2440 development board" | ||
89 | select CPU_S3C2440 | ||
90 | select EEPROM_AT24 | ||
91 | select LEDS_TRIGGER_BACKLIGHT | ||
92 | select SND_S3C24XX_SOC_S3C24XX_UDA134X | ||
93 | help | ||
94 | Say Y here to select support for the MINI2440. Is a 10cm x 10cm board | ||
95 | available via various sources. It can come with a 3.5" or 7" touch LCD. | ||
96 | |||
87 | endmenu | 97 | endmenu |
88 | 98 | ||
diff --git a/arch/arm/mach-s3c2440/Makefile b/arch/arm/mach-s3c2440/Makefile index 0b4440e79b90..bfadcf684a2a 100644 --- a/arch/arm/mach-s3c2440/Makefile +++ b/arch/arm/mach-s3c2440/Makefile | |||
@@ -22,3 +22,4 @@ obj-$(CONFIG_MACH_RX3715) += mach-rx3715.o | |||
22 | obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o | 22 | obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o |
23 | obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o | 23 | obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o |
24 | obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o | 24 | obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o |
25 | obj-$(CONFIG_MACH_MINI2440) += mach-mini2440.o | ||
diff --git a/arch/arm/mach-s3c2440/mach-mini2440.c b/arch/arm/mach-s3c2440/mach-mini2440.c new file mode 100644 index 000000000000..ec71a6965786 --- /dev/null +++ b/arch/arm/mach-s3c2440/mach-mini2440.c | |||
@@ -0,0 +1,702 @@ | |||
1 | /* linux/arch/arm/mach-s3c2440/mach-mini2440.c | ||
2 | * | ||
3 | * Copyright (c) 2008 Ramax Lo <ramaxlo@gmail.com> | ||
4 | * Based on mach-anubis.c by Ben Dooks <ben@simtec.co.uk> | ||
5 | * and modifications by SBZ <sbz@spgui.org> and | ||
6 | * Weibing <http://weibing.blogbus.com> and | ||
7 | * Michel Pollet <buserror@gmail.com> | ||
8 | * | ||
9 | * For product information, visit http://code.google.com/p/mini2440/ | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify | ||
12 | * it under the terms of the GNU General Public License version 2 as | ||
13 | * published by the Free Software Foundation. | ||
14 | */ | ||
15 | |||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/types.h> | ||
18 | #include <linux/interrupt.h> | ||
19 | #include <linux/list.h> | ||
20 | #include <linux/timer.h> | ||
21 | #include <linux/init.h> | ||
22 | #include <linux/gpio.h> | ||
23 | #include <linux/input.h> | ||
24 | #include <linux/io.h> | ||
25 | #include <linux/serial_core.h> | ||
26 | #include <linux/dm9000.h> | ||
27 | #include <linux/i2c/at24.h> | ||
28 | #include <linux/platform_device.h> | ||
29 | #include <linux/gpio_keys.h> | ||
30 | #include <linux/i2c.h> | ||
31 | #include <linux/mmc/host.h> | ||
32 | |||
33 | #include <asm/mach/arch.h> | ||
34 | #include <asm/mach/map.h> | ||
35 | |||
36 | #include <mach/hardware.h> | ||
37 | #include <mach/fb.h> | ||
38 | #include <asm/mach-types.h> | ||
39 | |||
40 | #include <plat/regs-serial.h> | ||
41 | #include <mach/regs-gpio.h> | ||
42 | #include <mach/leds-gpio.h> | ||
43 | #include <mach/regs-mem.h> | ||
44 | #include <mach/regs-lcd.h> | ||
45 | #include <mach/irqs.h> | ||
46 | #include <plat/nand.h> | ||
47 | #include <plat/iic.h> | ||
48 | #include <plat/mci.h> | ||
49 | #include <plat/udc.h> | ||
50 | |||
51 | #include <linux/mtd/mtd.h> | ||
52 | #include <linux/mtd/nand.h> | ||
53 | #include <linux/mtd/nand_ecc.h> | ||
54 | #include <linux/mtd/partitions.h> | ||
55 | |||
56 | #include <plat/clock.h> | ||
57 | #include <plat/devs.h> | ||
58 | #include <plat/cpu.h> | ||
59 | |||
60 | #include <sound/s3c24xx_uda134x.h> | ||
61 | |||
62 | #define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300) | ||
63 | |||
64 | static struct map_desc mini2440_iodesc[] __initdata = { | ||
65 | /* nothing to declare, move along */ | ||
66 | }; | ||
67 | |||
68 | #define UCON S3C2410_UCON_DEFAULT | ||
69 | #define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB | ||
70 | #define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE | ||
71 | |||
72 | |||
73 | static struct s3c2410_uartcfg mini2440_uartcfgs[] __initdata = { | ||
74 | [0] = { | ||
75 | .hwport = 0, | ||
76 | .flags = 0, | ||
77 | .ucon = UCON, | ||
78 | .ulcon = ULCON, | ||
79 | .ufcon = UFCON, | ||
80 | }, | ||
81 | [1] = { | ||
82 | .hwport = 1, | ||
83 | .flags = 0, | ||
84 | .ucon = UCON, | ||
85 | .ulcon = ULCON, | ||
86 | .ufcon = UFCON, | ||
87 | }, | ||
88 | [2] = { | ||
89 | .hwport = 2, | ||
90 | .flags = 0, | ||
91 | .ucon = UCON, | ||
92 | .ulcon = ULCON, | ||
93 | .ufcon = UFCON, | ||
94 | }, | ||
95 | }; | ||
96 | |||
97 | /* USB device UDC support */ | ||
98 | |||
99 | static void mini2440_udc_pullup(enum s3c2410_udc_cmd_e cmd) | ||
100 | { | ||
101 | pr_debug("udc: pullup(%d)\n", cmd); | ||
102 | |||
103 | switch (cmd) { | ||
104 | case S3C2410_UDC_P_ENABLE : | ||
105 | s3c2410_gpio_setpin(S3C2410_GPC(5), 1); | ||
106 | break; | ||
107 | case S3C2410_UDC_P_DISABLE : | ||
108 | s3c2410_gpio_setpin(S3C2410_GPC(5), 0); | ||
109 | break; | ||
110 | case S3C2410_UDC_P_RESET : | ||
111 | break; | ||
112 | default: | ||
113 | break; | ||
114 | } | ||
115 | } | ||
116 | |||
117 | static struct s3c2410_udc_mach_info mini2440_udc_cfg __initdata = { | ||
118 | .udc_command = mini2440_udc_pullup, | ||
119 | }; | ||
120 | |||
121 | |||
122 | /* LCD timing and setup */ | ||
123 | |||
124 | /* | ||
125 | * This macro simplifies the table bellow | ||
126 | */ | ||
127 | #define _LCD_DECLARE(_clock,_xres,margin_left,margin_right,hsync, \ | ||
128 | _yres,margin_top,margin_bottom,vsync, refresh) \ | ||
129 | .width = _xres, \ | ||
130 | .xres = _xres, \ | ||
131 | .height = _yres, \ | ||
132 | .yres = _yres, \ | ||
133 | .left_margin = margin_left, \ | ||
134 | .right_margin = margin_right, \ | ||
135 | .upper_margin = margin_top, \ | ||
136 | .lower_margin = margin_bottom, \ | ||
137 | .hsync_len = hsync, \ | ||
138 | .vsync_len = vsync, \ | ||
139 | .pixclock = ((_clock*100000000000LL) / \ | ||
140 | ((refresh) * \ | ||
141 | (hsync + margin_left + _xres + margin_right) * \ | ||
142 | (vsync + margin_top + _yres + margin_bottom))), \ | ||
143 | .bpp = 16,\ | ||
144 | .type = (S3C2410_LCDCON1_TFT16BPP |\ | ||
145 | S3C2410_LCDCON1_TFT) | ||
146 | |||
147 | struct s3c2410fb_display mini2440_lcd_cfg[] __initdata = { | ||
148 | [0] = { /* mini2440 + 3.5" TFT + touchscreen */ | ||
149 | _LCD_DECLARE( | ||
150 | 7, /* The 3.5 is quite fast */ | ||
151 | 240, 21, 38, 6, /* x timing */ | ||
152 | 320, 4, 4, 2, /* y timing */ | ||
153 | 60), /* refresh rate */ | ||
154 | .lcdcon5 = (S3C2410_LCDCON5_FRM565 | | ||
155 | S3C2410_LCDCON5_INVVLINE | | ||
156 | S3C2410_LCDCON5_INVVFRAME | | ||
157 | S3C2410_LCDCON5_INVVDEN | | ||
158 | S3C2410_LCDCON5_PWREN), | ||
159 | }, | ||
160 | [1] = { /* mini2440 + 7" TFT + touchscreen */ | ||
161 | _LCD_DECLARE( | ||
162 | 10, /* the 7" runs slower */ | ||
163 | 800, 40, 40, 48, /* x timing */ | ||
164 | 480, 29, 3, 3, /* y timing */ | ||
165 | 50), /* refresh rate */ | ||
166 | .lcdcon5 = (S3C2410_LCDCON5_FRM565 | | ||
167 | S3C2410_LCDCON5_INVVLINE | | ||
168 | S3C2410_LCDCON5_INVVFRAME | | ||
169 | S3C2410_LCDCON5_PWREN), | ||
170 | }, | ||
171 | /* The VGA shield can outout at several resolutions. All share | ||
172 | * the same timings, however, anything smaller than 1024x768 | ||
173 | * will only be displayed in the top left corner of a 1024x768 | ||
174 | * XGA output unless you add optional dip switches to the shield. | ||
175 | * Therefore timings for other resolutions have been ommited here. | ||
176 | */ | ||
177 | [2] = { | ||
178 | _LCD_DECLARE( | ||
179 | 10, | ||
180 | 1024, 1, 2, 2, /* y timing */ | ||
181 | 768, 200, 16, 16, /* x timing */ | ||
182 | 24), /* refresh rate, maximum stable, | ||
183 | tested with the FPGA shield */ | ||
184 | .lcdcon5 = (S3C2410_LCDCON5_FRM565 | | ||
185 | S3C2410_LCDCON5_HWSWP), | ||
186 | }, | ||
187 | }; | ||
188 | |||
189 | /* todo - put into gpio header */ | ||
190 | |||
191 | #define S3C2410_GPCCON_MASK(x) (3 << ((x) * 2)) | ||
192 | #define S3C2410_GPDCON_MASK(x) (3 << ((x) * 2)) | ||
193 | |||
194 | struct s3c2410fb_mach_info mini2440_fb_info __initdata = { | ||
195 | .displays = &mini2440_lcd_cfg[0], /* not constant! see init */ | ||
196 | .num_displays = 1, | ||
197 | .default_display = 0, | ||
198 | |||
199 | /* Enable VD[2..7], VD[10..15], VD[18..23] and VCLK, syncs, VDEN | ||
200 | * and disable the pull down resistors on pins we are using for LCD | ||
201 | * data. */ | ||
202 | |||
203 | .gpcup = (0xf << 1) | (0x3f << 10), | ||
204 | |||
205 | .gpccon = (S3C2410_GPC1_VCLK | S3C2410_GPC2_VLINE | | ||
206 | S3C2410_GPC3_VFRAME | S3C2410_GPC4_VM | | ||
207 | S3C2410_GPC10_VD2 | S3C2410_GPC11_VD3 | | ||
208 | S3C2410_GPC12_VD4 | S3C2410_GPC13_VD5 | | ||
209 | S3C2410_GPC14_VD6 | S3C2410_GPC15_VD7), | ||
210 | |||
211 | .gpccon_mask = (S3C2410_GPCCON_MASK(1) | S3C2410_GPCCON_MASK(2) | | ||
212 | S3C2410_GPCCON_MASK(3) | S3C2410_GPCCON_MASK(4) | | ||
213 | S3C2410_GPCCON_MASK(10) | S3C2410_GPCCON_MASK(11) | | ||
214 | S3C2410_GPCCON_MASK(12) | S3C2410_GPCCON_MASK(13) | | ||
215 | S3C2410_GPCCON_MASK(14) | S3C2410_GPCCON_MASK(15)), | ||
216 | |||
217 | .gpdup = (0x3f << 2) | (0x3f << 10), | ||
218 | |||
219 | .gpdcon = (S3C2410_GPD2_VD10 | S3C2410_GPD3_VD11 | | ||
220 | S3C2410_GPD4_VD12 | S3C2410_GPD5_VD13 | | ||
221 | S3C2410_GPD6_VD14 | S3C2410_GPD7_VD15 | | ||
222 | S3C2410_GPD10_VD18 | S3C2410_GPD11_VD19 | | ||
223 | S3C2410_GPD12_VD20 | S3C2410_GPD13_VD21 | | ||
224 | S3C2410_GPD14_VD22 | S3C2410_GPD15_VD23), | ||
225 | |||
226 | .gpdcon_mask = (S3C2410_GPDCON_MASK(2) | S3C2410_GPDCON_MASK(3) | | ||
227 | S3C2410_GPDCON_MASK(4) | S3C2410_GPDCON_MASK(5) | | ||
228 | S3C2410_GPDCON_MASK(6) | S3C2410_GPDCON_MASK(7) | | ||
229 | S3C2410_GPDCON_MASK(10) | S3C2410_GPDCON_MASK(11)| | ||
230 | S3C2410_GPDCON_MASK(12) | S3C2410_GPDCON_MASK(13)| | ||
231 | S3C2410_GPDCON_MASK(14) | S3C2410_GPDCON_MASK(15)), | ||
232 | }; | ||
233 | |||
234 | /* MMC/SD */ | ||
235 | |||
236 | static struct s3c24xx_mci_pdata mini2440_mmc_cfg __initdata = { | ||
237 | .gpio_detect = S3C2410_GPG(8), | ||
238 | .gpio_wprotect = S3C2410_GPH(8), | ||
239 | .set_power = NULL, | ||
240 | .ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34, | ||
241 | }; | ||
242 | |||
243 | /* NAND Flash on MINI2440 board */ | ||
244 | |||
245 | static struct mtd_partition mini2440_default_nand_part[] __initdata = { | ||
246 | [0] = { | ||
247 | .name = "u-boot", | ||
248 | .size = SZ_256K, | ||
249 | .offset = 0, | ||
250 | }, | ||
251 | [1] = { | ||
252 | .name = "u-boot-env", | ||
253 | .size = SZ_128K, | ||
254 | .offset = SZ_256K, | ||
255 | }, | ||
256 | [2] = { | ||
257 | .name = "kernel", | ||
258 | /* 5 megabytes, for a kernel with no modules | ||
259 | * or a uImage with a ramdisk attached */ | ||
260 | .size = 0x00500000, | ||
261 | .offset = SZ_256K + SZ_128K, | ||
262 | }, | ||
263 | [3] = { | ||
264 | .name = "root", | ||
265 | .offset = SZ_256K + SZ_128K + 0x00500000, | ||
266 | .size = MTDPART_SIZ_FULL, | ||
267 | }, | ||
268 | }; | ||
269 | |||
270 | static struct s3c2410_nand_set mini2440_nand_sets[] __initdata = { | ||
271 | [0] = { | ||
272 | .name = "nand", | ||
273 | .nr_chips = 1, | ||
274 | .nr_partitions = ARRAY_SIZE(mini2440_default_nand_part), | ||
275 | .partitions = mini2440_default_nand_part, | ||
276 | .flash_bbt = 1, /* we use u-boot to create a BBT */ | ||
277 | }, | ||
278 | }; | ||
279 | |||
280 | static struct s3c2410_platform_nand mini2440_nand_info __initdata = { | ||
281 | .tacls = 0, | ||
282 | .twrph0 = 25, | ||
283 | .twrph1 = 15, | ||
284 | .nr_sets = ARRAY_SIZE(mini2440_nand_sets), | ||
285 | .sets = mini2440_nand_sets, | ||
286 | .ignore_unset_ecc = 1, | ||
287 | }; | ||
288 | |||
289 | /* DM9000AEP 10/100 ethernet controller */ | ||
290 | |||
291 | static struct resource mini2440_dm9k_resource[] __initdata = { | ||
292 | [0] = { | ||
293 | .start = MACH_MINI2440_DM9K_BASE, | ||
294 | .end = MACH_MINI2440_DM9K_BASE + 3, | ||
295 | .flags = IORESOURCE_MEM | ||
296 | }, | ||
297 | [1] = { | ||
298 | .start = MACH_MINI2440_DM9K_BASE + 4, | ||
299 | .end = MACH_MINI2440_DM9K_BASE + 7, | ||
300 | .flags = IORESOURCE_MEM | ||
301 | }, | ||
302 | [2] = { | ||
303 | .start = IRQ_EINT7, | ||
304 | .end = IRQ_EINT7, | ||
305 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, | ||
306 | } | ||
307 | }; | ||
308 | |||
309 | /* | ||
310 | * The DM9000 has no eeprom, and it's MAC address is set by | ||
311 | * the bootloader before starting the kernel. | ||
312 | */ | ||
313 | static struct dm9000_plat_data mini2440_dm9k_pdata __initdata = { | ||
314 | .flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM), | ||
315 | }; | ||
316 | |||
317 | static struct platform_device mini2440_device_eth __initdata = { | ||
318 | .name = "dm9000", | ||
319 | .id = -1, | ||
320 | .num_resources = ARRAY_SIZE(mini2440_dm9k_resource), | ||
321 | .resource = mini2440_dm9k_resource, | ||
322 | .dev = { | ||
323 | .platform_data = &mini2440_dm9k_pdata, | ||
324 | }, | ||
325 | }; | ||
326 | |||
327 | /* CON5 | ||
328 | * +--+ /-----\ | ||
329 | * | | | | | ||
330 | * | | | BAT | | ||
331 | * | | \_____/ | ||
332 | * | | | ||
333 | * | | +----+ +----+ | ||
334 | * | | | K5 | | K1 | | ||
335 | * | | +----+ +----+ | ||
336 | * | | +----+ +----+ | ||
337 | * | | | K4 | | K2 | | ||
338 | * | | +----+ +----+ | ||
339 | * | | +----+ +----+ | ||
340 | * | | | K6 | | K3 | | ||
341 | * | | +----+ +----+ | ||
342 | * ..... | ||
343 | */ | ||
344 | static struct gpio_keys_button mini2440_buttons[] __initdata = { | ||
345 | { | ||
346 | .gpio = S3C2410_GPG(0), /* K1 */ | ||
347 | .code = KEY_F1, | ||
348 | .desc = "Button 1", | ||
349 | .active_low = 1, | ||
350 | }, | ||
351 | { | ||
352 | .gpio = S3C2410_GPG(3), /* K2 */ | ||
353 | .code = KEY_F2, | ||
354 | .desc = "Button 2", | ||
355 | .active_low = 1, | ||
356 | }, | ||
357 | { | ||
358 | .gpio = S3C2410_GPG(5), /* K3 */ | ||
359 | .code = KEY_F3, | ||
360 | .desc = "Button 3", | ||
361 | .active_low = 1, | ||
362 | }, | ||
363 | { | ||
364 | .gpio = S3C2410_GPG(6), /* K4 */ | ||
365 | .code = KEY_POWER, | ||
366 | .desc = "Power", | ||
367 | .active_low = 1, | ||
368 | }, | ||
369 | { | ||
370 | .gpio = S3C2410_GPG(7), /* K5 */ | ||
371 | .code = KEY_F5, | ||
372 | .desc = "Button 5", | ||
373 | .active_low = 1, | ||
374 | }, | ||
375 | #if 0 | ||
376 | /* this pin is also known as TCLK1 and seems to already | ||
377 | * marked as "in use" somehow in the kernel -- possibly wrongly */ | ||
378 | { | ||
379 | .gpio = S3C2410_GPG(11), /* K6 */ | ||
380 | .code = KEY_F6, | ||
381 | .desc = "Button 6", | ||
382 | .active_low = 1, | ||
383 | }, | ||
384 | #endif | ||
385 | }; | ||
386 | |||
387 | static struct gpio_keys_platform_data mini2440_button_data __initdata = { | ||
388 | .buttons = mini2440_buttons, | ||
389 | .nbuttons = ARRAY_SIZE(mini2440_buttons), | ||
390 | }; | ||
391 | |||
392 | static struct platform_device mini2440_button_device __initdata = { | ||
393 | .name = "gpio-keys", | ||
394 | .id = -1, | ||
395 | .dev = { | ||
396 | .platform_data = &mini2440_button_data, | ||
397 | } | ||
398 | }; | ||
399 | |||
400 | /* LEDS */ | ||
401 | |||
402 | static struct s3c24xx_led_platdata mini2440_led1_pdata __initdata = { | ||
403 | .name = "led1", | ||
404 | .gpio = S3C2410_GPB(5), | ||
405 | .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE, | ||
406 | .def_trigger = "heartbeat", | ||
407 | }; | ||
408 | |||
409 | static struct s3c24xx_led_platdata mini2440_led2_pdata __initdata = { | ||
410 | .name = "led2", | ||
411 | .gpio = S3C2410_GPB(6), | ||
412 | .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE, | ||
413 | .def_trigger = "nand-disk", | ||
414 | }; | ||
415 | |||
416 | static struct s3c24xx_led_platdata mini2440_led3_pdata __initdata = { | ||
417 | .name = "led3", | ||
418 | .gpio = S3C2410_GPB(7), | ||
419 | .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE, | ||
420 | .def_trigger = "mmc0", | ||
421 | }; | ||
422 | |||
423 | static struct s3c24xx_led_platdata mini2440_led4_pdata __initdata = { | ||
424 | .name = "led4", | ||
425 | .gpio = S3C2410_GPB(8), | ||
426 | .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE, | ||
427 | .def_trigger = "", | ||
428 | }; | ||
429 | |||
430 | static struct s3c24xx_led_platdata mini2440_led_backlight_pdata __initdata = { | ||
431 | .name = "backlight", | ||
432 | .gpio = S3C2410_GPG(4), | ||
433 | .def_trigger = "backlight", | ||
434 | }; | ||
435 | |||
436 | static struct platform_device mini2440_led1 __initdata = { | ||
437 | .name = "s3c24xx_led", | ||
438 | .id = 1, | ||
439 | .dev = { | ||
440 | .platform_data = &mini2440_led1_pdata, | ||
441 | }, | ||
442 | }; | ||
443 | |||
444 | static struct platform_device mini2440_led2 __initdata = { | ||
445 | .name = "s3c24xx_led", | ||
446 | .id = 2, | ||
447 | .dev = { | ||
448 | .platform_data = &mini2440_led2_pdata, | ||
449 | }, | ||
450 | }; | ||
451 | |||
452 | static struct platform_device mini2440_led3 __initdata = { | ||
453 | .name = "s3c24xx_led", | ||
454 | .id = 3, | ||
455 | .dev = { | ||
456 | .platform_data = &mini2440_led3_pdata, | ||
457 | }, | ||
458 | }; | ||
459 | |||
460 | static struct platform_device mini2440_led4 __initdata = { | ||
461 | .name = "s3c24xx_led", | ||
462 | .id = 4, | ||
463 | .dev = { | ||
464 | .platform_data = &mini2440_led4_pdata, | ||
465 | }, | ||
466 | }; | ||
467 | |||
468 | static struct platform_device mini2440_led_backlight __initdata = { | ||
469 | .name = "s3c24xx_led", | ||
470 | .id = 5, | ||
471 | .dev = { | ||
472 | .platform_data = &mini2440_led_backlight_pdata, | ||
473 | }, | ||
474 | }; | ||
475 | |||
476 | /* AUDIO */ | ||
477 | |||
478 | static struct s3c24xx_uda134x_platform_data mini2440_audio_pins __initdata = { | ||
479 | .l3_clk = S3C2410_GPB(4), | ||
480 | .l3_mode = S3C2410_GPB(2), | ||
481 | .l3_data = S3C2410_GPB(3), | ||
482 | .model = UDA134X_UDA1341 | ||
483 | }; | ||
484 | |||
485 | static struct platform_device mini2440_audio __initdata = { | ||
486 | .name = "s3c24xx_uda134x", | ||
487 | .id = 0, | ||
488 | .dev = { | ||
489 | .platform_data = &mini2440_audio_pins, | ||
490 | }, | ||
491 | }; | ||
492 | |||
493 | /* | ||
494 | * I2C devices | ||
495 | */ | ||
496 | static struct at24_platform_data at24c08 = { | ||
497 | .byte_len = SZ_8K / 8, | ||
498 | .page_size = 16, | ||
499 | }; | ||
500 | |||
501 | static struct i2c_board_info mini2440_i2c_devs[] __initdata = { | ||
502 | { | ||
503 | I2C_BOARD_INFO("24c08", 0x50), | ||
504 | .platform_data = &at24c08, | ||
505 | }, | ||
506 | }; | ||
507 | |||
508 | static struct platform_device *mini2440_devices[] __initdata = { | ||
509 | &s3c_device_usb, | ||
510 | &s3c_device_wdt, | ||
511 | /* &s3c_device_adc,*/ /* ADC doesn't like living with touchscreen ! */ | ||
512 | &s3c_device_i2c0, | ||
513 | &s3c_device_rtc, | ||
514 | &s3c_device_usbgadget, | ||
515 | &mini2440_device_eth, | ||
516 | &mini2440_led1, | ||
517 | &mini2440_led2, | ||
518 | &mini2440_led3, | ||
519 | &mini2440_led4, | ||
520 | &mini2440_button_device, | ||
521 | &s3c_device_nand, | ||
522 | &s3c_device_sdi, | ||
523 | &s3c_device_iis, | ||
524 | &mini2440_audio, | ||
525 | /* &s3c_device_timer[0],*/ /* buzzer pwm, no API for it */ | ||
526 | /* remaining devices are optional */ | ||
527 | }; | ||
528 | |||
529 | static void __init mini2440_map_io(void) | ||
530 | { | ||
531 | s3c24xx_init_io(mini2440_iodesc, ARRAY_SIZE(mini2440_iodesc)); | ||
532 | s3c24xx_init_clocks(12000000); | ||
533 | s3c24xx_init_uarts(mini2440_uartcfgs, ARRAY_SIZE(mini2440_uartcfgs)); | ||
534 | |||
535 | s3c_device_nand.dev.platform_data = &mini2440_nand_info; | ||
536 | s3c_device_sdi.dev.platform_data = &mini2440_mmc_cfg; | ||
537 | } | ||
538 | |||
539 | /* | ||
540 | * mini2440_features string | ||
541 | * | ||
542 | * t = Touchscreen present | ||
543 | * b = backlight control | ||
544 | * c = camera [TODO] | ||
545 | * 0-9 LCD configuration | ||
546 | * | ||
547 | */ | ||
548 | static char mini2440_features_str[12] __initdata = "0tb"; | ||
549 | |||
550 | static int __init mini2440_features_setup(char *str) | ||
551 | { | ||
552 | if (str) | ||
553 | strlcpy(mini2440_features_str, str, sizeof(mini2440_features_str)); | ||
554 | return 1; | ||
555 | } | ||
556 | |||
557 | __setup("mini2440=", mini2440_features_setup); | ||
558 | |||
559 | #define FEATURE_SCREEN (1 << 0) | ||
560 | #define FEATURE_BACKLIGHT (1 << 1) | ||
561 | #define FEATURE_TOUCH (1 << 2) | ||
562 | #define FEATURE_CAMERA (1 << 3) | ||
563 | |||
564 | struct mini2440_features_t { | ||
565 | int count; | ||
566 | int done; | ||
567 | int lcd_index; | ||
568 | struct platform_device *optional[8]; | ||
569 | }; | ||
570 | |||
571 | static void mini2440_parse_features( | ||
572 | struct mini2440_features_t * features, | ||
573 | const char * features_str ) | ||
574 | { | ||
575 | const char * fp = features_str; | ||
576 | |||
577 | features->count = 0; | ||
578 | features->done = 0; | ||
579 | features->lcd_index = -1; | ||
580 | |||
581 | while (*fp) { | ||
582 | char f = *fp++; | ||
583 | |||
584 | switch (f) { | ||
585 | case '0'...'9': /* tft screen */ | ||
586 | if (features->done & FEATURE_SCREEN) { | ||
587 | printk(KERN_INFO "MINI2440: '%c' ignored, " | ||
588 | "screen type already set\n", f); | ||
589 | } else { | ||
590 | int li = f - '0'; | ||
591 | if (li >= ARRAY_SIZE(mini2440_lcd_cfg)) | ||
592 | printk(KERN_INFO "MINI2440: " | ||
593 | "'%c' out of range LCD mode\n", f); | ||
594 | else { | ||
595 | features->optional[features->count++] = | ||
596 | &s3c_device_lcd; | ||
597 | features->lcd_index = li; | ||
598 | } | ||
599 | } | ||
600 | features->done |= FEATURE_SCREEN; | ||
601 | break; | ||
602 | case 'b': | ||
603 | if (features->done & FEATURE_BACKLIGHT) | ||
604 | printk(KERN_INFO "MINI2440: '%c' ignored, " | ||
605 | "backlight already set\n", f); | ||
606 | else { | ||
607 | features->optional[features->count++] = | ||
608 | &mini2440_led_backlight; | ||
609 | } | ||
610 | features->done |= FEATURE_BACKLIGHT; | ||
611 | break; | ||
612 | case 't': | ||
613 | printk(KERN_INFO "MINI2440: '%c' ignored, " | ||
614 | "touchscreen not compiled in\n", f); | ||
615 | break; | ||
616 | case 'c': | ||
617 | if (features->done & FEATURE_CAMERA) | ||
618 | printk(KERN_INFO "MINI2440: '%c' ignored, " | ||
619 | "camera already registered\n", f); | ||
620 | else | ||
621 | features->optional[features->count++] = | ||
622 | &s3c_device_camif; | ||
623 | features->done |= FEATURE_CAMERA; | ||
624 | break; | ||
625 | } | ||
626 | } | ||
627 | } | ||
628 | |||
629 | static void __init mini2440_init(void) | ||
630 | { | ||
631 | struct mini2440_features_t features = { 0 }; | ||
632 | int i; | ||
633 | |||
634 | printk(KERN_INFO "MINI2440: Option string mini2440=%s\n", | ||
635 | mini2440_features_str); | ||
636 | |||
637 | /* Parse the feature string */ | ||
638 | mini2440_parse_features(&features, mini2440_features_str); | ||
639 | |||
640 | /* turn LCD on */ | ||
641 | s3c2410_gpio_cfgpin(S3C2410_GPC(0), S3C2410_GPC0_LEND); | ||
642 | |||
643 | /* Turn the backlight early on */ | ||
644 | s3c2410_gpio_setpin(S3C2410_GPG(4), 1); | ||
645 | s3c2410_gpio_cfgpin(S3C2410_GPG(4), S3C2410_GPIO_OUTPUT); | ||
646 | |||
647 | /* remove pullup on optional PWM backlight -- unused on 3.5 and 7"s */ | ||
648 | s3c2410_gpio_pullup(S3C2410_GPB(1), 0); | ||
649 | s3c2410_gpio_setpin(S3C2410_GPB(1), 0); | ||
650 | s3c2410_gpio_cfgpin(S3C2410_GPB(1), S3C2410_GPIO_INPUT); | ||
651 | |||
652 | /* Make sure the D+ pullup pin is output */ | ||
653 | s3c2410_gpio_cfgpin(S3C2410_GPC(5), S3C2410_GPIO_OUTPUT); | ||
654 | |||
655 | /* mark the key as input, without pullups (there is one on the board) */ | ||
656 | for (i = 0; i < ARRAY_SIZE(mini2440_buttons); i++) { | ||
657 | s3c2410_gpio_pullup(mini2440_buttons[i].gpio, 0); | ||
658 | s3c2410_gpio_cfgpin(mini2440_buttons[i].gpio, | ||
659 | S3C2410_GPIO_INPUT); | ||
660 | } | ||
661 | if (features.lcd_index != -1) { | ||
662 | int li; | ||
663 | |||
664 | mini2440_fb_info.displays = | ||
665 | &mini2440_lcd_cfg[features.lcd_index]; | ||
666 | |||
667 | printk(KERN_INFO "MINI2440: LCD"); | ||
668 | for (li = 0; li < ARRAY_SIZE(mini2440_lcd_cfg); li++) | ||
669 | if (li == features.lcd_index) | ||
670 | printk(" [%d:%dx%d]", li, | ||
671 | mini2440_lcd_cfg[li].width, | ||
672 | mini2440_lcd_cfg[li].height); | ||
673 | else | ||
674 | printk(" %d:%dx%d", li, | ||
675 | mini2440_lcd_cfg[li].width, | ||
676 | mini2440_lcd_cfg[li].height); | ||
677 | printk("\n"); | ||
678 | s3c24xx_fb_set_platdata(&mini2440_fb_info); | ||
679 | } | ||
680 | s3c24xx_udc_set_platdata(&mini2440_udc_cfg); | ||
681 | s3c_i2c0_set_platdata(NULL); | ||
682 | i2c_register_board_info(0, mini2440_i2c_devs, | ||
683 | ARRAY_SIZE(mini2440_i2c_devs)); | ||
684 | |||
685 | platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices)); | ||
686 | |||
687 | if (features.count) /* the optional features */ | ||
688 | platform_add_devices(features.optional, features.count); | ||
689 | |||
690 | } | ||
691 | |||
692 | |||
693 | MACHINE_START(MINI2440, "MINI2440") | ||
694 | /* Maintainer: Michel Pollet <buserror@gmail.com> */ | ||
695 | .phys_io = S3C2410_PA_UART, | ||
696 | .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, | ||
697 | .boot_params = S3C2410_SDRAM_PA + 0x100, | ||
698 | .map_io = mini2440_map_io, | ||
699 | .init_machine = mini2440_init, | ||
700 | .init_irq = s3c24xx_init_irq, | ||
701 | .timer = &s3c24xx_timer, | ||
702 | MACHINE_END | ||
diff --git a/arch/arm/mach-s3c2442/Kconfig b/arch/arm/mach-s3c2442/Kconfig index b289d198020e..103e913f2258 100644 --- a/arch/arm/mach-s3c2442/Kconfig +++ b/arch/arm/mach-s3c2442/Kconfig | |||
@@ -24,6 +24,18 @@ config SMDK2440_CPU2442 | |||
24 | depends on ARCH_S3C2440 | 24 | depends on ARCH_S3C2440 |
25 | select CPU_S3C2442 | 25 | select CPU_S3C2442 |
26 | 26 | ||
27 | config MACH_NEO1973_GTA02 | ||
28 | bool "Openmoko GTA02 / Freerunner phone" | ||
29 | select CPU_S3C2442 | ||
30 | select MFD_PCF50633 | ||
31 | select PCF50633_GPIO | ||
32 | select I2C | ||
33 | select POWER_SUPPLY | ||
34 | select MACH_NEO1973 | ||
35 | select S3C2410_PWM | ||
36 | help | ||
37 | Say Y here if you are using the Openmoko GTA02 / Freerunner GSM Phone | ||
38 | |||
27 | 39 | ||
28 | endmenu | 40 | endmenu |
29 | 41 | ||
diff --git a/arch/arm/mach-s3c2442/Makefile b/arch/arm/mach-s3c2442/Makefile index 2a909c6c5798..2a19113a5769 100644 --- a/arch/arm/mach-s3c2442/Makefile +++ b/arch/arm/mach-s3c2442/Makefile | |||
@@ -12,5 +12,7 @@ obj- := | |||
12 | obj-$(CONFIG_CPU_S3C2442) += s3c2442.o | 12 | obj-$(CONFIG_CPU_S3C2442) += s3c2442.o |
13 | obj-$(CONFIG_CPU_S3C2442) += clock.o | 13 | obj-$(CONFIG_CPU_S3C2442) += clock.o |
14 | 14 | ||
15 | obj-$(CONFIG_MACH_NEO1973_GTA02) += mach-gta02.o | ||
16 | |||
15 | # Machine support | 17 | # Machine support |
16 | 18 | ||
diff --git a/arch/arm/mach-s3c2442/include/mach/gta02.h b/arch/arm/mach-s3c2442/include/mach/gta02.h new file mode 100644 index 000000000000..953331d8d56a --- /dev/null +++ b/arch/arm/mach-s3c2442/include/mach/gta02.h | |||
@@ -0,0 +1,84 @@ | |||
1 | #ifndef _GTA02_H | ||
2 | #define _GTA02_H | ||
3 | |||
4 | #include <mach/regs-gpio.h> | ||
5 | |||
6 | /* Different hardware revisions, passed in ATAG_REVISION by u-boot */ | ||
7 | #define GTA02v1_SYSTEM_REV 0x00000310 | ||
8 | #define GTA02v2_SYSTEM_REV 0x00000320 | ||
9 | #define GTA02v3_SYSTEM_REV 0x00000330 | ||
10 | #define GTA02v4_SYSTEM_REV 0x00000340 | ||
11 | #define GTA02v5_SYSTEM_REV 0x00000350 | ||
12 | /* since A7 is basically same as A6, we use A6 PCB ID */ | ||
13 | #define GTA02v6_SYSTEM_REV 0x00000360 | ||
14 | |||
15 | #define GTA02_GPIO_n3DL_GSM S3C2410_GPA(13) /* v1 + v2 + v3 only */ | ||
16 | |||
17 | #define GTA02_GPIO_PWR_LED1 S3C2410_GPB(0) | ||
18 | #define GTA02_GPIO_PWR_LED2 S3C2410_GPB(1) | ||
19 | #define GTA02_GPIO_AUX_LED S3C2410_GPB(2) | ||
20 | #define GTA02_GPIO_VIBRATOR_ON S3C2410_GPB(3) | ||
21 | #define GTA02_GPIO_MODEM_RST S3C2410_GPB(5) | ||
22 | #define GTA02_GPIO_BT_EN S3C2410_GPB(6) | ||
23 | #define GTA02_GPIO_MODEM_ON S3C2410_GPB(7) | ||
24 | #define GTA02_GPIO_EXTINT8 S3C2410_GPB(8) | ||
25 | #define GTA02_GPIO_USB_PULLUP S3C2410_GPB(9) | ||
26 | |||
27 | #define GTA02_GPIO_PIO5 S3C2410_GPC(5) /* v3 + v4 only */ | ||
28 | |||
29 | #define GTA02v3_GPIO_nG1_CS S3C2410_GPD(12) /* v3 + v4 only */ | ||
30 | #define GTA02v3_GPIO_nG2_CS S3C2410_GPD(13) /* v3 + v4 only */ | ||
31 | #define GTA02v5_GPIO_HDQ S3C2410_GPD(14) /* v5 + */ | ||
32 | |||
33 | #define GTA02_GPIO_nG1_INT S3C2410_GPF(0) | ||
34 | #define GTA02_GPIO_IO1 S3C2410_GPF(1) | ||
35 | #define GTA02_GPIO_PIO_2 S3C2410_GPF(2) /* v2 + v3 + v4 only */ | ||
36 | #define GTA02_GPIO_JACK_INSERT S3C2410_GPF(4) | ||
37 | #define GTA02_GPIO_WLAN_GPIO1 S3C2410_GPF(5) /* v2 + v3 + v4 only */ | ||
38 | #define GTA02_GPIO_AUX_KEY S3C2410_GPF(6) | ||
39 | #define GTA02_GPIO_HOLD_KEY S3C2410_GPF(7) | ||
40 | |||
41 | #define GTA02_GPIO_3D_IRQ S3C2410_GPG(4) | ||
42 | #define GTA02v2_GPIO_nG2_INT S3C2410_GPG(8) /* v2 + v3 + v4 only */ | ||
43 | #define GTA02v3_GPIO_nUSB_OC S3C2410_GPG(9) /* v3 + v4 only */ | ||
44 | #define GTA02v3_GPIO_nUSB_FLT S3C2410_GPG(10) /* v3 + v4 only */ | ||
45 | #define GTA02v3_GPIO_nGSM_OC S3C2410_GPG(11) /* v3 + v4 only */ | ||
46 | |||
47 | #define GTA02_GPIO_AMP_SHUT S3C2440_GPJ1 /* v2 + v3 + v4 only */ | ||
48 | #define GTA02v1_GPIO_WLAN_GPIO10 S3C2440_GPJ2 | ||
49 | #define GTA02_GPIO_HP_IN S3C2440_GPJ2 /* v2 + v3 + v4 only */ | ||
50 | #define GTA02_GPIO_INT0 S3C2440_GPJ3 /* v2 + v3 + v4 only */ | ||
51 | #define GTA02_GPIO_nGSM_EN S3C2440_GPJ4 | ||
52 | #define GTA02_GPIO_3D_RESET S3C2440_GPJ5 | ||
53 | #define GTA02_GPIO_nDL_GSM S3C2440_GPJ6 /* v4 + v5 only */ | ||
54 | #define GTA02_GPIO_WLAN_GPIO0 S3C2440_GPJ7 | ||
55 | #define GTA02v1_GPIO_BAT_ID S3C2440_GPJ8 | ||
56 | #define GTA02_GPIO_KEEPACT S3C2440_GPJ8 | ||
57 | #define GTA02v1_GPIO_HP_IN S3C2440_GPJ10 | ||
58 | #define GTA02_CHIP_PWD S3C2440_GPJ11 /* v2 + v3 + v4 only */ | ||
59 | #define GTA02_GPIO_nWLAN_RESET S3C2440_GPJ12 /* v2 + v3 + v4 only */ | ||
60 | |||
61 | #define GTA02_IRQ_GSENSOR_1 IRQ_EINT0 | ||
62 | #define GTA02_IRQ_MODEM IRQ_EINT1 | ||
63 | #define GTA02_IRQ_PIO_2 IRQ_EINT2 /* v2 + v3 + v4 only */ | ||
64 | #define GTA02_IRQ_nJACK_INSERT IRQ_EINT4 | ||
65 | #define GTA02_IRQ_WLAN_GPIO1 IRQ_EINT5 | ||
66 | #define GTA02_IRQ_AUX IRQ_EINT6 | ||
67 | #define GTA02_IRQ_nHOLD IRQ_EINT7 | ||
68 | #define GTA02_IRQ_PCF50633 IRQ_EINT9 | ||
69 | #define GTA02_IRQ_3D IRQ_EINT12 | ||
70 | #define GTA02_IRQ_GSENSOR_2 IRQ_EINT16 /* v2 + v3 + v4 only */ | ||
71 | #define GTA02v3_IRQ_nUSB_OC IRQ_EINT17 /* v3 + v4 only */ | ||
72 | #define GTA02v3_IRQ_nUSB_FLT IRQ_EINT18 /* v3 + v4 only */ | ||
73 | #define GTA02v3_IRQ_nGSM_OC IRQ_EINT19 /* v3 + v4 only */ | ||
74 | |||
75 | /* returns 00 000 on GTA02 A5 and earlier, A6 returns 01 001 */ | ||
76 | #define GTA02_PCB_ID1_0 S3C2410_GPC(13) | ||
77 | #define GTA02_PCB_ID1_1 S3C2410_GPC(15) | ||
78 | #define GTA02_PCB_ID1_2 S3C2410_GPD(0) | ||
79 | #define GTA02_PCB_ID2_0 S3C2410_GPD(3) | ||
80 | #define GTA02_PCB_ID2_1 S3C2410_GPD(4) | ||
81 | |||
82 | int gta02_get_pcb_revision(void); | ||
83 | |||
84 | #endif /* _GTA02_H */ | ||
diff --git a/arch/arm/mach-s3c2442/mach-gta02.c b/arch/arm/mach-s3c2442/mach-gta02.c new file mode 100644 index 000000000000..0fb385bd9cd9 --- /dev/null +++ b/arch/arm/mach-s3c2442/mach-gta02.c | |||
@@ -0,0 +1,645 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-s3c2442/mach-gta02.c | ||
3 | * | ||
4 | * S3C2442 Machine Support for Openmoko GTA02 / FreeRunner. | ||
5 | * | ||
6 | * Copyright (C) 2006-2009 by Openmoko, Inc. | ||
7 | * Authors: Harald Welte <laforge@openmoko.org> | ||
8 | * Andy Green <andy@openmoko.org> | ||
9 | * Werner Almesberger <werner@openmoko.org> | ||
10 | * All rights reserved. | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License as | ||
14 | * published by the Free Software Foundation; either version 2 of | ||
15 | * the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This program is distributed in the hope that it will be useful, | ||
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
20 | * GNU General Public License for more details. | ||
21 | * | ||
22 | * You should have received a copy of the GNU General Public License | ||
23 | * along with this program; if not, write to the Free Software | ||
24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
25 | * MA 02111-1307 USA | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | #include <linux/kernel.h> | ||
30 | #include <linux/types.h> | ||
31 | #include <linux/interrupt.h> | ||
32 | #include <linux/list.h> | ||
33 | #include <linux/delay.h> | ||
34 | #include <linux/timer.h> | ||
35 | #include <linux/init.h> | ||
36 | #include <linux/gpio.h> | ||
37 | #include <linux/workqueue.h> | ||
38 | #include <linux/platform_device.h> | ||
39 | #include <linux/serial_core.h> | ||
40 | #include <linux/spi/spi.h> | ||
41 | |||
42 | #include <linux/mmc/host.h> | ||
43 | |||
44 | #include <linux/mtd/mtd.h> | ||
45 | #include <linux/mtd/nand.h> | ||
46 | #include <linux/mtd/nand_ecc.h> | ||
47 | #include <linux/mtd/partitions.h> | ||
48 | #include <linux/mtd/physmap.h> | ||
49 | #include <linux/io.h> | ||
50 | |||
51 | #include <linux/i2c.h> | ||
52 | #include <linux/backlight.h> | ||
53 | #include <linux/regulator/machine.h> | ||
54 | |||
55 | #include <linux/mfd/pcf50633/core.h> | ||
56 | #include <linux/mfd/pcf50633/mbc.h> | ||
57 | #include <linux/mfd/pcf50633/adc.h> | ||
58 | #include <linux/mfd/pcf50633/gpio.h> | ||
59 | #include <linux/mfd/pcf50633/pmic.h> | ||
60 | |||
61 | #include <asm/mach/arch.h> | ||
62 | #include <asm/mach/map.h> | ||
63 | #include <asm/mach/irq.h> | ||
64 | |||
65 | #include <asm/irq.h> | ||
66 | #include <asm/mach-types.h> | ||
67 | |||
68 | #include <mach/regs-irq.h> | ||
69 | #include <mach/regs-gpio.h> | ||
70 | #include <mach/regs-gpioj.h> | ||
71 | #include <mach/fb.h> | ||
72 | |||
73 | #include <mach/spi.h> | ||
74 | #include <mach/spi-gpio.h> | ||
75 | #include <plat/usb-control.h> | ||
76 | #include <mach/regs-mem.h> | ||
77 | #include <mach/hardware.h> | ||
78 | |||
79 | #include <mach/gta02.h> | ||
80 | |||
81 | #include <plat/regs-serial.h> | ||
82 | #include <plat/nand.h> | ||
83 | #include <plat/devs.h> | ||
84 | #include <plat/cpu.h> | ||
85 | #include <plat/pm.h> | ||
86 | #include <plat/udc.h> | ||
87 | #include <plat/gpio-cfg.h> | ||
88 | #include <plat/iic.h> | ||
89 | |||
90 | static struct pcf50633 *gta02_pcf; | ||
91 | |||
92 | /* | ||
93 | * This gets called every 1ms when we paniced. | ||
94 | */ | ||
95 | |||
96 | static long gta02_panic_blink(long count) | ||
97 | { | ||
98 | long delay = 0; | ||
99 | static long last_blink; | ||
100 | static char led; | ||
101 | |||
102 | /* Fast blink: 200ms period. */ | ||
103 | if (count - last_blink < 100) | ||
104 | return 0; | ||
105 | |||
106 | led ^= 1; | ||
107 | gpio_direction_output(GTA02_GPIO_AUX_LED, led); | ||
108 | |||
109 | last_blink = count; | ||
110 | |||
111 | return delay; | ||
112 | } | ||
113 | |||
114 | |||
115 | static struct map_desc gta02_iodesc[] __initdata = { | ||
116 | { | ||
117 | .virtual = 0xe0000000, | ||
118 | .pfn = __phys_to_pfn(S3C2410_CS3 + 0x01000000), | ||
119 | .length = SZ_1M, | ||
120 | .type = MT_DEVICE | ||
121 | }, | ||
122 | }; | ||
123 | |||
124 | #define UCON (S3C2410_UCON_DEFAULT | S3C2443_UCON_RXERR_IRQEN) | ||
125 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) | ||
126 | #define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE) | ||
127 | |||
128 | static struct s3c2410_uartcfg gta02_uartcfgs[] = { | ||
129 | [0] = { | ||
130 | .hwport = 0, | ||
131 | .flags = 0, | ||
132 | .ucon = UCON, | ||
133 | .ulcon = ULCON, | ||
134 | .ufcon = UFCON, | ||
135 | }, | ||
136 | [1] = { | ||
137 | .hwport = 1, | ||
138 | .flags = 0, | ||
139 | .ucon = UCON, | ||
140 | .ulcon = ULCON, | ||
141 | .ufcon = UFCON, | ||
142 | }, | ||
143 | [2] = { | ||
144 | .hwport = 2, | ||
145 | .flags = 0, | ||
146 | .ucon = UCON, | ||
147 | .ulcon = ULCON, | ||
148 | .ufcon = UFCON, | ||
149 | }, | ||
150 | }; | ||
151 | |||
152 | #ifdef CONFIG_CHARGER_PCF50633 | ||
153 | /* | ||
154 | * On GTA02 the 1A charger features a 48K resistor to 0V on the ID pin. | ||
155 | * We use this to recognize that we can pull 1A from the USB socket. | ||
156 | * | ||
157 | * These constants are the measured pcf50633 ADC levels with the 1A | ||
158 | * charger / 48K resistor, and with no pulldown resistor. | ||
159 | */ | ||
160 | |||
161 | #define ADC_NOM_CHG_DETECT_1A 6 | ||
162 | #define ADC_NOM_CHG_DETECT_USB 43 | ||
163 | |||
164 | static void | ||
165 | gta02_configure_pmu_for_charger(struct pcf50633 *pcf, void *unused, int res) | ||
166 | { | ||
167 | int ma; | ||
168 | |||
169 | /* Interpret charger type */ | ||
170 | if (res < ((ADC_NOM_CHG_DETECT_USB + ADC_NOM_CHG_DETECT_1A) / 2)) { | ||
171 | |||
172 | /* | ||
173 | * Sanity - stop GPO driving out now that we have a 1A charger | ||
174 | * GPO controls USB Host power generation on GTA02 | ||
175 | */ | ||
176 | pcf50633_gpio_set(pcf, PCF50633_GPO, 0); | ||
177 | |||
178 | ma = 1000; | ||
179 | } else | ||
180 | ma = 100; | ||
181 | |||
182 | pcf50633_mbc_usb_curlim_set(pcf, ma); | ||
183 | } | ||
184 | |||
185 | static struct delayed_work gta02_charger_work; | ||
186 | static int gta02_usb_vbus_draw; | ||
187 | |||
188 | static void gta02_charger_worker(struct work_struct *work) | ||
189 | { | ||
190 | if (gta02_usb_vbus_draw) { | ||
191 | pcf50633_mbc_usb_curlim_set(gta02_pcf, gta02_usb_vbus_draw); | ||
192 | return; | ||
193 | } | ||
194 | |||
195 | #ifdef CONFIG_PCF50633_ADC | ||
196 | pcf50633_adc_async_read(gta02_pcf, | ||
197 | PCF50633_ADCC1_MUX_ADCIN1, | ||
198 | PCF50633_ADCC1_AVERAGE_16, | ||
199 | gta02_configure_pmu_for_charger, | ||
200 | NULL); | ||
201 | #else | ||
202 | /* | ||
203 | * If the PCF50633 ADC is disabled we fallback to a | ||
204 | * 100mA limit for safety. | ||
205 | */ | ||
206 | pcf50633_mbc_usb_curlim_set(pcf, 100); | ||
207 | #endif | ||
208 | } | ||
209 | |||
210 | #define GTA02_CHARGER_CONFIGURE_TIMEOUT ((3000 * HZ) / 1000) | ||
211 | |||
212 | static void gta02_pmu_event_callback(struct pcf50633 *pcf, int irq) | ||
213 | { | ||
214 | if (irq == PCF50633_IRQ_USBINS) { | ||
215 | schedule_delayed_work(>a02_charger_work, | ||
216 | GTA02_CHARGER_CONFIGURE_TIMEOUT); | ||
217 | |||
218 | return; | ||
219 | } | ||
220 | |||
221 | if (irq == PCF50633_IRQ_USBREM) { | ||
222 | cancel_delayed_work_sync(>a02_charger_work); | ||
223 | gta02_usb_vbus_draw = 0; | ||
224 | } | ||
225 | } | ||
226 | |||
227 | static void gta02_udc_vbus_draw(unsigned int ma) | ||
228 | { | ||
229 | if (!gta02_pcf) | ||
230 | return; | ||
231 | |||
232 | gta02_usb_vbus_draw = ma; | ||
233 | |||
234 | schedule_delayed_work(>a02_charger_work, | ||
235 | GTA02_CHARGER_CONFIGURE_TIMEOUT); | ||
236 | } | ||
237 | #else /* !CONFIG_CHARGER_PCF50633 */ | ||
238 | #define gta02_pmu_event_callback NULL | ||
239 | #define gta02_udc_vbus_draw NULL | ||
240 | #endif | ||
241 | |||
242 | /* | ||
243 | * This is called when pc50633 is probed, unfortunately quite late in the | ||
244 | * day since it is an I2C bus device. Here we can belatedly define some | ||
245 | * platform devices with the advantage that we can mark the pcf50633 as the | ||
246 | * parent. This makes them get suspended and resumed with their parent | ||
247 | * the pcf50633 still around. | ||
248 | */ | ||
249 | |||
250 | static void gta02_pmu_attach_child_devices(struct pcf50633 *pcf); | ||
251 | |||
252 | |||
253 | static char *gta02_batteries[] = { | ||
254 | "battery", | ||
255 | }; | ||
256 | |||
257 | struct pcf50633_platform_data gta02_pcf_pdata = { | ||
258 | .resumers = { | ||
259 | [0] = PCF50633_INT1_USBINS | | ||
260 | PCF50633_INT1_USBREM | | ||
261 | PCF50633_INT1_ALARM, | ||
262 | [1] = PCF50633_INT2_ONKEYF, | ||
263 | [2] = PCF50633_INT3_ONKEY1S, | ||
264 | [3] = PCF50633_INT4_LOWSYS | | ||
265 | PCF50633_INT4_LOWBAT | | ||
266 | PCF50633_INT4_HIGHTMP, | ||
267 | }, | ||
268 | |||
269 | .batteries = gta02_batteries, | ||
270 | .num_batteries = ARRAY_SIZE(gta02_batteries), | ||
271 | .reg_init_data = { | ||
272 | [PCF50633_REGULATOR_AUTO] = { | ||
273 | .constraints = { | ||
274 | .min_uV = 3300000, | ||
275 | .max_uV = 3300000, | ||
276 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
277 | .always_on = 1, | ||
278 | .apply_uV = 1, | ||
279 | .state_mem = { | ||
280 | .enabled = 1, | ||
281 | }, | ||
282 | }, | ||
283 | }, | ||
284 | [PCF50633_REGULATOR_DOWN1] = { | ||
285 | .constraints = { | ||
286 | .min_uV = 1300000, | ||
287 | .max_uV = 1600000, | ||
288 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
289 | .always_on = 1, | ||
290 | .apply_uV = 1, | ||
291 | }, | ||
292 | }, | ||
293 | [PCF50633_REGULATOR_DOWN2] = { | ||
294 | .constraints = { | ||
295 | .min_uV = 1800000, | ||
296 | .max_uV = 1800000, | ||
297 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
298 | .apply_uV = 1, | ||
299 | .always_on = 1, | ||
300 | .state_mem = { | ||
301 | .enabled = 1, | ||
302 | }, | ||
303 | }, | ||
304 | }, | ||
305 | [PCF50633_REGULATOR_HCLDO] = { | ||
306 | .constraints = { | ||
307 | .min_uV = 2000000, | ||
308 | .max_uV = 3300000, | ||
309 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
310 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, | ||
311 | .always_on = 1, | ||
312 | }, | ||
313 | }, | ||
314 | [PCF50633_REGULATOR_LDO1] = { | ||
315 | .constraints = { | ||
316 | .min_uV = 3300000, | ||
317 | .max_uV = 3300000, | ||
318 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
319 | .apply_uV = 1, | ||
320 | .state_mem = { | ||
321 | .enabled = 0, | ||
322 | }, | ||
323 | }, | ||
324 | }, | ||
325 | [PCF50633_REGULATOR_LDO2] = { | ||
326 | .constraints = { | ||
327 | .min_uV = 3300000, | ||
328 | .max_uV = 3300000, | ||
329 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
330 | .apply_uV = 1, | ||
331 | }, | ||
332 | }, | ||
333 | [PCF50633_REGULATOR_LDO3] = { | ||
334 | .constraints = { | ||
335 | .min_uV = 3000000, | ||
336 | .max_uV = 3000000, | ||
337 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
338 | .apply_uV = 1, | ||
339 | }, | ||
340 | }, | ||
341 | [PCF50633_REGULATOR_LDO4] = { | ||
342 | .constraints = { | ||
343 | .min_uV = 3200000, | ||
344 | .max_uV = 3200000, | ||
345 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
346 | .apply_uV = 1, | ||
347 | }, | ||
348 | }, | ||
349 | [PCF50633_REGULATOR_LDO5] = { | ||
350 | .constraints = { | ||
351 | .min_uV = 3000000, | ||
352 | .max_uV = 3000000, | ||
353 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
354 | .apply_uV = 1, | ||
355 | .state_mem = { | ||
356 | .enabled = 1, | ||
357 | }, | ||
358 | }, | ||
359 | }, | ||
360 | [PCF50633_REGULATOR_LDO6] = { | ||
361 | .constraints = { | ||
362 | .min_uV = 3000000, | ||
363 | .max_uV = 3000000, | ||
364 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
365 | }, | ||
366 | }, | ||
367 | [PCF50633_REGULATOR_MEMLDO] = { | ||
368 | .constraints = { | ||
369 | .min_uV = 1800000, | ||
370 | .max_uV = 1800000, | ||
371 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
372 | .state_mem = { | ||
373 | .enabled = 1, | ||
374 | }, | ||
375 | }, | ||
376 | }, | ||
377 | |||
378 | }, | ||
379 | .probe_done = gta02_pmu_attach_child_devices, | ||
380 | .mbc_event_callback = gta02_pmu_event_callback, | ||
381 | }; | ||
382 | |||
383 | |||
384 | /* NOR Flash. */ | ||
385 | |||
386 | #define GTA02_FLASH_BASE 0x18000000 /* GCS3 */ | ||
387 | #define GTA02_FLASH_SIZE 0x200000 /* 2MBytes */ | ||
388 | |||
389 | static struct physmap_flash_data gta02_nor_flash_data = { | ||
390 | .width = 2, | ||
391 | }; | ||
392 | |||
393 | static struct resource gta02_nor_flash_resource = { | ||
394 | .start = GTA02_FLASH_BASE, | ||
395 | .end = GTA02_FLASH_BASE + GTA02_FLASH_SIZE - 1, | ||
396 | .flags = IORESOURCE_MEM, | ||
397 | }; | ||
398 | |||
399 | static struct platform_device gta02_nor_flash = { | ||
400 | .name = "physmap-flash", | ||
401 | .id = 0, | ||
402 | .dev = { | ||
403 | .platform_data = >a02_nor_flash_data, | ||
404 | }, | ||
405 | .resource = >a02_nor_flash_resource, | ||
406 | .num_resources = 1, | ||
407 | }; | ||
408 | |||
409 | |||
410 | struct platform_device s3c24xx_pwm_device = { | ||
411 | .name = "s3c24xx_pwm", | ||
412 | .num_resources = 0, | ||
413 | }; | ||
414 | |||
415 | static struct i2c_board_info gta02_i2c_devs[] __initdata = { | ||
416 | { | ||
417 | I2C_BOARD_INFO("pcf50633", 0x73), | ||
418 | .irq = GTA02_IRQ_PCF50633, | ||
419 | .platform_data = >a02_pcf_pdata, | ||
420 | }, | ||
421 | { | ||
422 | I2C_BOARD_INFO("wm8753", 0x1a), | ||
423 | }, | ||
424 | }; | ||
425 | |||
426 | static struct s3c2410_nand_set gta02_nand_sets[] = { | ||
427 | [0] = { | ||
428 | /* | ||
429 | * This name is also hard-coded in the boot loaders, so | ||
430 | * changing it would would require all users to upgrade | ||
431 | * their boot loaders, some of which are stored in a NOR | ||
432 | * that is considered to be immutable. | ||
433 | */ | ||
434 | .name = "neo1973-nand", | ||
435 | .nr_chips = 1, | ||
436 | .flash_bbt = 1, | ||
437 | }, | ||
438 | }; | ||
439 | |||
440 | /* | ||
441 | * Choose a set of timings derived from S3C@2442B MCP54 | ||
442 | * data sheet (K5D2G13ACM-D075 MCP Memory). | ||
443 | */ | ||
444 | |||
445 | static struct s3c2410_platform_nand gta02_nand_info = { | ||
446 | .tacls = 0, | ||
447 | .twrph0 = 25, | ||
448 | .twrph1 = 15, | ||
449 | .nr_sets = ARRAY_SIZE(gta02_nand_sets), | ||
450 | .sets = gta02_nand_sets, | ||
451 | }; | ||
452 | |||
453 | |||
454 | static void gta02_udc_command(enum s3c2410_udc_cmd_e cmd) | ||
455 | { | ||
456 | switch (cmd) { | ||
457 | case S3C2410_UDC_P_ENABLE: | ||
458 | pr_debug("%s S3C2410_UDC_P_ENABLE\n", __func__); | ||
459 | gpio_direction_output(GTA02_GPIO_USB_PULLUP, 1); | ||
460 | break; | ||
461 | case S3C2410_UDC_P_DISABLE: | ||
462 | pr_debug("%s S3C2410_UDC_P_DISABLE\n", __func__); | ||
463 | gpio_direction_output(GTA02_GPIO_USB_PULLUP, 0); | ||
464 | break; | ||
465 | case S3C2410_UDC_P_RESET: | ||
466 | pr_debug("%s S3C2410_UDC_P_RESET\n", __func__); | ||
467 | /* FIXME: Do something here. */ | ||
468 | } | ||
469 | } | ||
470 | |||
471 | /* Get PMU to set USB current limit accordingly. */ | ||
472 | static struct s3c2410_udc_mach_info gta02_udc_cfg = { | ||
473 | .vbus_draw = gta02_udc_vbus_draw, | ||
474 | .udc_command = gta02_udc_command, | ||
475 | |||
476 | }; | ||
477 | |||
478 | |||
479 | |||
480 | static void gta02_bl_set_intensity(int intensity) | ||
481 | { | ||
482 | struct pcf50633 *pcf = gta02_pcf; | ||
483 | int old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT); | ||
484 | |||
485 | /* We map 8-bit intensity to 6-bit intensity in hardware. */ | ||
486 | intensity >>= 2; | ||
487 | |||
488 | /* | ||
489 | * This can happen during, eg, print of panic on blanked console, | ||
490 | * but we can't service i2c without interrupts active, so abort. | ||
491 | */ | ||
492 | if (in_atomic()) { | ||
493 | printk(KERN_ERR "gta02_bl_set_intensity called while atomic\n"); | ||
494 | return; | ||
495 | } | ||
496 | |||
497 | old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT); | ||
498 | if (intensity == old_intensity) | ||
499 | return; | ||
500 | |||
501 | /* We can't do this anywhere else. */ | ||
502 | pcf50633_reg_write(pcf, PCF50633_REG_LEDDIM, 5); | ||
503 | |||
504 | if (!(pcf50633_reg_read(pcf, PCF50633_REG_LEDENA) & 3)) | ||
505 | old_intensity = 0; | ||
506 | |||
507 | /* | ||
508 | * The PCF50633 cannot handle LEDOUT = 0 (datasheet p60) | ||
509 | * if seen, you have to re-enable the LED unit. | ||
510 | */ | ||
511 | if (!intensity || !old_intensity) | ||
512 | pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0); | ||
513 | |||
514 | /* Illegal to set LEDOUT to 0. */ | ||
515 | if (!intensity) | ||
516 | pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, 2); | ||
517 | else | ||
518 | pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, | ||
519 | intensity); | ||
520 | |||
521 | if (intensity) | ||
522 | pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 2); | ||
523 | |||
524 | } | ||
525 | |||
526 | static struct generic_bl_info gta02_bl_info = { | ||
527 | .name = "gta02-bl", | ||
528 | .max_intensity = 0xff, | ||
529 | .default_intensity = 0xff, | ||
530 | .set_bl_intensity = gta02_bl_set_intensity, | ||
531 | }; | ||
532 | |||
533 | static struct platform_device gta02_bl_dev = { | ||
534 | .name = "generic-bl", | ||
535 | .id = 1, | ||
536 | .dev = { | ||
537 | .platform_data = >a02_bl_info, | ||
538 | }, | ||
539 | }; | ||
540 | |||
541 | |||
542 | |||
543 | /* USB */ | ||
544 | static struct s3c2410_hcd_info gta02_usb_info = { | ||
545 | .port[0] = { | ||
546 | .flags = S3C_HCDFLG_USED, | ||
547 | }, | ||
548 | .port[1] = { | ||
549 | .flags = 0, | ||
550 | }, | ||
551 | }; | ||
552 | |||
553 | |||
554 | static void __init gta02_map_io(void) | ||
555 | { | ||
556 | s3c24xx_init_io(gta02_iodesc, ARRAY_SIZE(gta02_iodesc)); | ||
557 | s3c24xx_init_clocks(12000000); | ||
558 | s3c24xx_init_uarts(gta02_uartcfgs, ARRAY_SIZE(gta02_uartcfgs)); | ||
559 | } | ||
560 | |||
561 | |||
562 | /* These are the guys that don't need to be children of PMU. */ | ||
563 | |||
564 | static struct platform_device *gta02_devices[] __initdata = { | ||
565 | &s3c_device_usb, | ||
566 | &s3c_device_wdt, | ||
567 | &s3c_device_sdi, | ||
568 | &s3c_device_usbgadget, | ||
569 | &s3c_device_nand, | ||
570 | >a02_nor_flash, | ||
571 | &s3c24xx_pwm_device, | ||
572 | &s3c_device_iis, | ||
573 | &s3c_device_i2c0, | ||
574 | }; | ||
575 | |||
576 | /* These guys DO need to be children of PMU. */ | ||
577 | |||
578 | static struct platform_device *gta02_devices_pmu_children[] = { | ||
579 | >a02_bl_dev, | ||
580 | }; | ||
581 | |||
582 | |||
583 | /* | ||
584 | * This is called when pc50633 is probed, quite late in the day since it is an | ||
585 | * I2C bus device. Here we can define platform devices with the advantage that | ||
586 | * we can mark the pcf50633 as the parent. This makes them get suspended and | ||
587 | * resumed with their parent the pcf50633 still around. All devices whose | ||
588 | * operation depends on something from pcf50633 must have this relationship | ||
589 | * made explicit like this, or suspend and resume will become an unreliable | ||
590 | * hellworld. | ||
591 | */ | ||
592 | |||
593 | static void gta02_pmu_attach_child_devices(struct pcf50633 *pcf) | ||
594 | { | ||
595 | int n; | ||
596 | |||
597 | /* Grab a copy of the now probed PMU pointer. */ | ||
598 | gta02_pcf = pcf; | ||
599 | |||
600 | for (n = 0; n < ARRAY_SIZE(gta02_devices_pmu_children); n++) | ||
601 | gta02_devices_pmu_children[n]->dev.parent = pcf->dev; | ||
602 | |||
603 | platform_add_devices(gta02_devices_pmu_children, | ||
604 | ARRAY_SIZE(gta02_devices_pmu_children)); | ||
605 | } | ||
606 | |||
607 | static void gta02_poweroff(void) | ||
608 | { | ||
609 | pcf50633_reg_set_bit_mask(gta02_pcf, PCF50633_REG_OOCSHDWN, 1, 1); | ||
610 | } | ||
611 | |||
612 | static void __init gta02_machine_init(void) | ||
613 | { | ||
614 | /* Set the panic callback to make AUX LED blink at ~5Hz. */ | ||
615 | panic_blink = gta02_panic_blink; | ||
616 | |||
617 | s3c_pm_init(); | ||
618 | |||
619 | #ifdef CONFIG_CHARGER_PCF50633 | ||
620 | INIT_DELAYED_WORK(>a02_charger_work, gta02_charger_worker); | ||
621 | #endif | ||
622 | |||
623 | s3c_device_usb.dev.platform_data = >a02_usb_info; | ||
624 | s3c_device_nand.dev.platform_data = >a02_nand_info; | ||
625 | |||
626 | s3c24xx_udc_set_platdata(>a02_udc_cfg); | ||
627 | s3c_i2c0_set_platdata(NULL); | ||
628 | |||
629 | i2c_register_board_info(0, gta02_i2c_devs, ARRAY_SIZE(gta02_i2c_devs)); | ||
630 | |||
631 | platform_add_devices(gta02_devices, ARRAY_SIZE(gta02_devices)); | ||
632 | pm_power_off = gta02_poweroff; | ||
633 | } | ||
634 | |||
635 | |||
636 | MACHINE_START(NEO1973_GTA02, "GTA02") | ||
637 | /* Maintainer: Nelson Castillo <arhuaco@freaks-unidos.net> */ | ||
638 | .phys_io = S3C2410_PA_UART, | ||
639 | .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, | ||
640 | .boot_params = S3C2410_SDRAM_PA + 0x100, | ||
641 | .map_io = gta02_map_io, | ||
642 | .init_irq = s3c24xx_init_irq, | ||
643 | .init_machine = gta02_machine_init, | ||
644 | .timer = &s3c24xx_timer, | ||
645 | MACHINE_END | ||
diff --git a/arch/arm/mach-u300/clock.c b/arch/arm/mach-u300/clock.c index 5cd04d6751b3..111f7ea32b38 100644 --- a/arch/arm/mach-u300/clock.c +++ b/arch/arm/mach-u300/clock.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/timer.h> | 25 | #include <linux/timer.h> |
26 | #include <linux/io.h> | 26 | #include <linux/io.h> |
27 | #include <linux/seq_file.h> | ||
27 | 28 | ||
28 | #include <asm/clkdev.h> | 29 | #include <asm/clkdev.h> |
29 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
@@ -702,6 +703,7 @@ static struct clk amba_clk = { | |||
702 | .rate = 52000000, /* this varies! */ | 703 | .rate = 52000000, /* this varies! */ |
703 | .hw_ctrld = true, | 704 | .hw_ctrld = true, |
704 | .reset = false, | 705 | .reset = false, |
706 | .lock = __SPIN_LOCK_UNLOCKED(amba_clk.lock), | ||
705 | }; | 707 | }; |
706 | 708 | ||
707 | /* | 709 | /* |
@@ -720,6 +722,7 @@ static struct clk cpu_clk = { | |||
720 | .set_rate = clk_set_rate_cpuclk, | 722 | .set_rate = clk_set_rate_cpuclk, |
721 | .get_rate = clk_get_rate_cpuclk, | 723 | .get_rate = clk_get_rate_cpuclk, |
722 | .round_rate = clk_round_rate_cpuclk, | 724 | .round_rate = clk_round_rate_cpuclk, |
725 | .lock = __SPIN_LOCK_UNLOCKED(cpu_clk.lock), | ||
723 | }; | 726 | }; |
724 | 727 | ||
725 | static struct clk nandif_clk = { | 728 | static struct clk nandif_clk = { |
@@ -732,6 +735,7 @@ static struct clk nandif_clk = { | |||
732 | .clk_val = U300_SYSCON_SBCER_NANDIF_CLK_EN, | 735 | .clk_val = U300_SYSCON_SBCER_NANDIF_CLK_EN, |
733 | .enable = syscon_clk_enable, | 736 | .enable = syscon_clk_enable, |
734 | .disable = syscon_clk_disable, | 737 | .disable = syscon_clk_disable, |
738 | .lock = __SPIN_LOCK_UNLOCKED(nandif_clk.lock), | ||
735 | }; | 739 | }; |
736 | 740 | ||
737 | static struct clk semi_clk = { | 741 | static struct clk semi_clk = { |
@@ -744,6 +748,7 @@ static struct clk semi_clk = { | |||
744 | .clk_val = U300_SYSCON_SBCER_SEMI_CLK_EN, | 748 | .clk_val = U300_SYSCON_SBCER_SEMI_CLK_EN, |
745 | .enable = syscon_clk_enable, | 749 | .enable = syscon_clk_enable, |
746 | .disable = syscon_clk_disable, | 750 | .disable = syscon_clk_disable, |
751 | .lock = __SPIN_LOCK_UNLOCKED(semi_clk.lock), | ||
747 | }; | 752 | }; |
748 | 753 | ||
749 | #ifdef CONFIG_MACH_U300_BS335 | 754 | #ifdef CONFIG_MACH_U300_BS335 |
@@ -758,6 +763,7 @@ static struct clk isp_clk = { | |||
758 | .clk_val = U300_SYSCON_SBCER_ISP_CLK_EN, | 763 | .clk_val = U300_SYSCON_SBCER_ISP_CLK_EN, |
759 | .enable = syscon_clk_enable, | 764 | .enable = syscon_clk_enable, |
760 | .disable = syscon_clk_disable, | 765 | .disable = syscon_clk_disable, |
766 | .lock = __SPIN_LOCK_UNLOCKED(isp_clk.lock), | ||
761 | }; | 767 | }; |
762 | 768 | ||
763 | static struct clk cds_clk = { | 769 | static struct clk cds_clk = { |
@@ -771,6 +777,7 @@ static struct clk cds_clk = { | |||
771 | .clk_val = U300_SYSCON_SBCER_CDS_CLK_EN, | 777 | .clk_val = U300_SYSCON_SBCER_CDS_CLK_EN, |
772 | .enable = syscon_clk_enable, | 778 | .enable = syscon_clk_enable, |
773 | .disable = syscon_clk_disable, | 779 | .disable = syscon_clk_disable, |
780 | .lock = __SPIN_LOCK_UNLOCKED(cds_clk.lock), | ||
774 | }; | 781 | }; |
775 | #endif | 782 | #endif |
776 | 783 | ||
@@ -785,6 +792,7 @@ static struct clk dma_clk = { | |||
785 | .clk_val = U300_SYSCON_SBCER_DMAC_CLK_EN, | 792 | .clk_val = U300_SYSCON_SBCER_DMAC_CLK_EN, |
786 | .enable = syscon_clk_enable, | 793 | .enable = syscon_clk_enable, |
787 | .disable = syscon_clk_disable, | 794 | .disable = syscon_clk_disable, |
795 | .lock = __SPIN_LOCK_UNLOCKED(dma_clk.lock), | ||
788 | }; | 796 | }; |
789 | 797 | ||
790 | static struct clk aaif_clk = { | 798 | static struct clk aaif_clk = { |
@@ -798,6 +806,7 @@ static struct clk aaif_clk = { | |||
798 | .clk_val = U300_SYSCON_SBCER_AAIF_CLK_EN, | 806 | .clk_val = U300_SYSCON_SBCER_AAIF_CLK_EN, |
799 | .enable = syscon_clk_enable, | 807 | .enable = syscon_clk_enable, |
800 | .disable = syscon_clk_disable, | 808 | .disable = syscon_clk_disable, |
809 | .lock = __SPIN_LOCK_UNLOCKED(aaif_clk.lock), | ||
801 | }; | 810 | }; |
802 | 811 | ||
803 | static struct clk apex_clk = { | 812 | static struct clk apex_clk = { |
@@ -811,6 +820,7 @@ static struct clk apex_clk = { | |||
811 | .clk_val = U300_SYSCON_SBCER_APEX_CLK_EN, | 820 | .clk_val = U300_SYSCON_SBCER_APEX_CLK_EN, |
812 | .enable = syscon_clk_enable, | 821 | .enable = syscon_clk_enable, |
813 | .disable = syscon_clk_disable, | 822 | .disable = syscon_clk_disable, |
823 | .lock = __SPIN_LOCK_UNLOCKED(apex_clk.lock), | ||
814 | }; | 824 | }; |
815 | 825 | ||
816 | static struct clk video_enc_clk = { | 826 | static struct clk video_enc_clk = { |
@@ -825,6 +835,7 @@ static struct clk video_enc_clk = { | |||
825 | .clk_val = U300_SYSCON_SBCER_VIDEO_ENC_CLK_EN, | 835 | .clk_val = U300_SYSCON_SBCER_VIDEO_ENC_CLK_EN, |
826 | .enable = syscon_clk_enable, | 836 | .enable = syscon_clk_enable, |
827 | .disable = syscon_clk_disable, | 837 | .disable = syscon_clk_disable, |
838 | .lock = __SPIN_LOCK_UNLOCKED(video_enc_clk.lock), | ||
828 | }; | 839 | }; |
829 | 840 | ||
830 | static struct clk xgam_clk = { | 841 | static struct clk xgam_clk = { |
@@ -839,6 +850,7 @@ static struct clk xgam_clk = { | |||
839 | .get_rate = clk_get_rate_xgamclk, | 850 | .get_rate = clk_get_rate_xgamclk, |
840 | .enable = syscon_clk_enable, | 851 | .enable = syscon_clk_enable, |
841 | .disable = syscon_clk_disable, | 852 | .disable = syscon_clk_disable, |
853 | .lock = __SPIN_LOCK_UNLOCKED(xgam_clk.lock), | ||
842 | }; | 854 | }; |
843 | 855 | ||
844 | /* This clock is used to activate the video encoder */ | 856 | /* This clock is used to activate the video encoder */ |
@@ -854,6 +866,7 @@ static struct clk ahb_clk = { | |||
854 | .enable = syscon_clk_enable, | 866 | .enable = syscon_clk_enable, |
855 | .disable = syscon_clk_disable, | 867 | .disable = syscon_clk_disable, |
856 | .get_rate = clk_get_rate_ahb_clk, | 868 | .get_rate = clk_get_rate_ahb_clk, |
869 | .lock = __SPIN_LOCK_UNLOCKED(ahb_clk.lock), | ||
857 | }; | 870 | }; |
858 | 871 | ||
859 | 872 | ||
@@ -871,6 +884,7 @@ static struct clk ahb_subsys_clk = { | |||
871 | .enable = syscon_clk_enable, | 884 | .enable = syscon_clk_enable, |
872 | .disable = syscon_clk_disable, | 885 | .disable = syscon_clk_disable, |
873 | .get_rate = clk_get_rate_ahb_clk, | 886 | .get_rate = clk_get_rate_ahb_clk, |
887 | .lock = __SPIN_LOCK_UNLOCKED(ahb_subsys_clk.lock), | ||
874 | }; | 888 | }; |
875 | 889 | ||
876 | static struct clk intcon_clk = { | 890 | static struct clk intcon_clk = { |
@@ -882,6 +896,8 @@ static struct clk intcon_clk = { | |||
882 | .res_reg = U300_SYSCON_VBASE + U300_SYSCON_RRR, | 896 | .res_reg = U300_SYSCON_VBASE + U300_SYSCON_RRR, |
883 | .res_mask = U300_SYSCON_RRR_INTCON_RESET_EN, | 897 | .res_mask = U300_SYSCON_RRR_INTCON_RESET_EN, |
884 | /* INTCON can be reset but not clock-gated */ | 898 | /* INTCON can be reset but not clock-gated */ |
899 | .lock = __SPIN_LOCK_UNLOCKED(intcon_clk.lock), | ||
900 | |||
885 | }; | 901 | }; |
886 | 902 | ||
887 | static struct clk mspro_clk = { | 903 | static struct clk mspro_clk = { |
@@ -895,6 +911,7 @@ static struct clk mspro_clk = { | |||
895 | .clk_val = U300_SYSCON_SBCER_MSPRO_CLK_EN, | 911 | .clk_val = U300_SYSCON_SBCER_MSPRO_CLK_EN, |
896 | .enable = syscon_clk_enable, | 912 | .enable = syscon_clk_enable, |
897 | .disable = syscon_clk_disable, | 913 | .disable = syscon_clk_disable, |
914 | .lock = __SPIN_LOCK_UNLOCKED(mspro_clk.lock), | ||
898 | }; | 915 | }; |
899 | 916 | ||
900 | static struct clk emif_clk = { | 917 | static struct clk emif_clk = { |
@@ -909,6 +926,7 @@ static struct clk emif_clk = { | |||
909 | .enable = syscon_clk_enable, | 926 | .enable = syscon_clk_enable, |
910 | .disable = syscon_clk_disable, | 927 | .disable = syscon_clk_disable, |
911 | .get_rate = clk_get_rate_emif_clk, | 928 | .get_rate = clk_get_rate_emif_clk, |
929 | .lock = __SPIN_LOCK_UNLOCKED(emif_clk.lock), | ||
912 | }; | 930 | }; |
913 | 931 | ||
914 | 932 | ||
@@ -926,6 +944,7 @@ static struct clk fast_clk = { | |||
926 | .clk_val = U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN, | 944 | .clk_val = U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN, |
927 | .enable = syscon_clk_enable, | 945 | .enable = syscon_clk_enable, |
928 | .disable = syscon_clk_disable, | 946 | .disable = syscon_clk_disable, |
947 | .lock = __SPIN_LOCK_UNLOCKED(fast_clk.lock), | ||
929 | }; | 948 | }; |
930 | 949 | ||
931 | static struct clk mmcsd_clk = { | 950 | static struct clk mmcsd_clk = { |
@@ -942,6 +961,7 @@ static struct clk mmcsd_clk = { | |||
942 | .round_rate = clk_round_rate_mclk, | 961 | .round_rate = clk_round_rate_mclk, |
943 | .disable = syscon_clk_disable, | 962 | .disable = syscon_clk_disable, |
944 | .enable = syscon_clk_enable, | 963 | .enable = syscon_clk_enable, |
964 | .lock = __SPIN_LOCK_UNLOCKED(mmcsd_clk.lock), | ||
945 | }; | 965 | }; |
946 | 966 | ||
947 | static struct clk i2s0_clk = { | 967 | static struct clk i2s0_clk = { |
@@ -956,6 +976,7 @@ static struct clk i2s0_clk = { | |||
956 | .enable = syscon_clk_enable, | 976 | .enable = syscon_clk_enable, |
957 | .disable = syscon_clk_disable, | 977 | .disable = syscon_clk_disable, |
958 | .get_rate = clk_get_rate_i2s_i2c_spi, | 978 | .get_rate = clk_get_rate_i2s_i2c_spi, |
979 | .lock = __SPIN_LOCK_UNLOCKED(i2s0_clk.lock), | ||
959 | }; | 980 | }; |
960 | 981 | ||
961 | static struct clk i2s1_clk = { | 982 | static struct clk i2s1_clk = { |
@@ -970,6 +991,7 @@ static struct clk i2s1_clk = { | |||
970 | .enable = syscon_clk_enable, | 991 | .enable = syscon_clk_enable, |
971 | .disable = syscon_clk_disable, | 992 | .disable = syscon_clk_disable, |
972 | .get_rate = clk_get_rate_i2s_i2c_spi, | 993 | .get_rate = clk_get_rate_i2s_i2c_spi, |
994 | .lock = __SPIN_LOCK_UNLOCKED(i2s1_clk.lock), | ||
973 | }; | 995 | }; |
974 | 996 | ||
975 | static struct clk i2c0_clk = { | 997 | static struct clk i2c0_clk = { |
@@ -984,6 +1006,7 @@ static struct clk i2c0_clk = { | |||
984 | .enable = syscon_clk_enable, | 1006 | .enable = syscon_clk_enable, |
985 | .disable = syscon_clk_disable, | 1007 | .disable = syscon_clk_disable, |
986 | .get_rate = clk_get_rate_i2s_i2c_spi, | 1008 | .get_rate = clk_get_rate_i2s_i2c_spi, |
1009 | .lock = __SPIN_LOCK_UNLOCKED(i2c0_clk.lock), | ||
987 | }; | 1010 | }; |
988 | 1011 | ||
989 | static struct clk i2c1_clk = { | 1012 | static struct clk i2c1_clk = { |
@@ -998,6 +1021,7 @@ static struct clk i2c1_clk = { | |||
998 | .enable = syscon_clk_enable, | 1021 | .enable = syscon_clk_enable, |
999 | .disable = syscon_clk_disable, | 1022 | .disable = syscon_clk_disable, |
1000 | .get_rate = clk_get_rate_i2s_i2c_spi, | 1023 | .get_rate = clk_get_rate_i2s_i2c_spi, |
1024 | .lock = __SPIN_LOCK_UNLOCKED(i2c1_clk.lock), | ||
1001 | }; | 1025 | }; |
1002 | 1026 | ||
1003 | static struct clk spi_clk = { | 1027 | static struct clk spi_clk = { |
@@ -1012,6 +1036,7 @@ static struct clk spi_clk = { | |||
1012 | .enable = syscon_clk_enable, | 1036 | .enable = syscon_clk_enable, |
1013 | .disable = syscon_clk_disable, | 1037 | .disable = syscon_clk_disable, |
1014 | .get_rate = clk_get_rate_i2s_i2c_spi, | 1038 | .get_rate = clk_get_rate_i2s_i2c_spi, |
1039 | .lock = __SPIN_LOCK_UNLOCKED(spi_clk.lock), | ||
1015 | }; | 1040 | }; |
1016 | 1041 | ||
1017 | #ifdef CONFIG_MACH_U300_BS335 | 1042 | #ifdef CONFIG_MACH_U300_BS335 |
@@ -1026,6 +1051,7 @@ static struct clk uart1_clk = { | |||
1026 | .clk_val = U300_SYSCON_SBCER_UART1_CLK_EN, | 1051 | .clk_val = U300_SYSCON_SBCER_UART1_CLK_EN, |
1027 | .enable = syscon_clk_enable, | 1052 | .enable = syscon_clk_enable, |
1028 | .disable = syscon_clk_disable, | 1053 | .disable = syscon_clk_disable, |
1054 | .lock = __SPIN_LOCK_UNLOCKED(uart1_clk.lock), | ||
1029 | }; | 1055 | }; |
1030 | #endif | 1056 | #endif |
1031 | 1057 | ||
@@ -1044,6 +1070,7 @@ static struct clk slow_clk = { | |||
1044 | .clk_val = U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN, | 1070 | .clk_val = U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN, |
1045 | .enable = syscon_clk_enable, | 1071 | .enable = syscon_clk_enable, |
1046 | .disable = syscon_clk_disable, | 1072 | .disable = syscon_clk_disable, |
1073 | .lock = __SPIN_LOCK_UNLOCKED(slow_clk.lock), | ||
1047 | }; | 1074 | }; |
1048 | 1075 | ||
1049 | /* TODO: implement SYSCON clock? */ | 1076 | /* TODO: implement SYSCON clock? */ |
@@ -1055,6 +1082,7 @@ static struct clk wdog_clk = { | |||
1055 | .rate = 32768, | 1082 | .rate = 32768, |
1056 | .reset = false, | 1083 | .reset = false, |
1057 | /* This is always on, cannot be enabled/disabled or reset */ | 1084 | /* This is always on, cannot be enabled/disabled or reset */ |
1085 | .lock = __SPIN_LOCK_UNLOCKED(wdog_clk.lock), | ||
1058 | }; | 1086 | }; |
1059 | 1087 | ||
1060 | /* This one is hardwired to PLL13 */ | 1088 | /* This one is hardwired to PLL13 */ |
@@ -1069,6 +1097,7 @@ static struct clk uart_clk = { | |||
1069 | .clk_val = U300_SYSCON_SBCER_UART_CLK_EN, | 1097 | .clk_val = U300_SYSCON_SBCER_UART_CLK_EN, |
1070 | .enable = syscon_clk_enable, | 1098 | .enable = syscon_clk_enable, |
1071 | .disable = syscon_clk_disable, | 1099 | .disable = syscon_clk_disable, |
1100 | .lock = __SPIN_LOCK_UNLOCKED(uart_clk.lock), | ||
1072 | }; | 1101 | }; |
1073 | 1102 | ||
1074 | static struct clk keypad_clk = { | 1103 | static struct clk keypad_clk = { |
@@ -1082,6 +1111,7 @@ static struct clk keypad_clk = { | |||
1082 | .clk_val = U300_SYSCON_SBCER_KEYPAD_CLK_EN, | 1111 | .clk_val = U300_SYSCON_SBCER_KEYPAD_CLK_EN, |
1083 | .enable = syscon_clk_enable, | 1112 | .enable = syscon_clk_enable, |
1084 | .disable = syscon_clk_disable, | 1113 | .disable = syscon_clk_disable, |
1114 | .lock = __SPIN_LOCK_UNLOCKED(keypad_clk.lock), | ||
1085 | }; | 1115 | }; |
1086 | 1116 | ||
1087 | static struct clk gpio_clk = { | 1117 | static struct clk gpio_clk = { |
@@ -1095,6 +1125,7 @@ static struct clk gpio_clk = { | |||
1095 | .clk_val = U300_SYSCON_SBCER_GPIO_CLK_EN, | 1125 | .clk_val = U300_SYSCON_SBCER_GPIO_CLK_EN, |
1096 | .enable = syscon_clk_enable, | 1126 | .enable = syscon_clk_enable, |
1097 | .disable = syscon_clk_disable, | 1127 | .disable = syscon_clk_disable, |
1128 | .lock = __SPIN_LOCK_UNLOCKED(gpio_clk.lock), | ||
1098 | }; | 1129 | }; |
1099 | 1130 | ||
1100 | static struct clk rtc_clk = { | 1131 | static struct clk rtc_clk = { |
@@ -1106,6 +1137,7 @@ static struct clk rtc_clk = { | |||
1106 | .res_reg = U300_SYSCON_VBASE + U300_SYSCON_RSR, | 1137 | .res_reg = U300_SYSCON_VBASE + U300_SYSCON_RSR, |
1107 | .res_mask = U300_SYSCON_RSR_RTC_RESET_EN, | 1138 | .res_mask = U300_SYSCON_RSR_RTC_RESET_EN, |
1108 | /* This clock is always on, cannot be enabled/disabled */ | 1139 | /* This clock is always on, cannot be enabled/disabled */ |
1140 | .lock = __SPIN_LOCK_UNLOCKED(rtc_clk.lock), | ||
1109 | }; | 1141 | }; |
1110 | 1142 | ||
1111 | static struct clk bustr_clk = { | 1143 | static struct clk bustr_clk = { |
@@ -1119,6 +1151,7 @@ static struct clk bustr_clk = { | |||
1119 | .clk_val = U300_SYSCON_SBCER_BTR_CLK_EN, | 1151 | .clk_val = U300_SYSCON_SBCER_BTR_CLK_EN, |
1120 | .enable = syscon_clk_enable, | 1152 | .enable = syscon_clk_enable, |
1121 | .disable = syscon_clk_disable, | 1153 | .disable = syscon_clk_disable, |
1154 | .lock = __SPIN_LOCK_UNLOCKED(bustr_clk.lock), | ||
1122 | }; | 1155 | }; |
1123 | 1156 | ||
1124 | static struct clk evhist_clk = { | 1157 | static struct clk evhist_clk = { |
@@ -1132,6 +1165,7 @@ static struct clk evhist_clk = { | |||
1132 | .clk_val = U300_SYSCON_SBCER_EH_CLK_EN, | 1165 | .clk_val = U300_SYSCON_SBCER_EH_CLK_EN, |
1133 | .enable = syscon_clk_enable, | 1166 | .enable = syscon_clk_enable, |
1134 | .disable = syscon_clk_disable, | 1167 | .disable = syscon_clk_disable, |
1168 | .lock = __SPIN_LOCK_UNLOCKED(evhist_clk.lock), | ||
1135 | }; | 1169 | }; |
1136 | 1170 | ||
1137 | static struct clk timer_clk = { | 1171 | static struct clk timer_clk = { |
@@ -1145,6 +1179,7 @@ static struct clk timer_clk = { | |||
1145 | .clk_val = U300_SYSCON_SBCER_ACC_TMR_CLK_EN, | 1179 | .clk_val = U300_SYSCON_SBCER_ACC_TMR_CLK_EN, |
1146 | .enable = syscon_clk_enable, | 1180 | .enable = syscon_clk_enable, |
1147 | .disable = syscon_clk_disable, | 1181 | .disable = syscon_clk_disable, |
1182 | .lock = __SPIN_LOCK_UNLOCKED(timer_clk.lock), | ||
1148 | }; | 1183 | }; |
1149 | 1184 | ||
1150 | static struct clk app_timer_clk = { | 1185 | static struct clk app_timer_clk = { |
@@ -1158,6 +1193,7 @@ static struct clk app_timer_clk = { | |||
1158 | .clk_val = U300_SYSCON_SBCER_APP_TMR_CLK_EN, | 1193 | .clk_val = U300_SYSCON_SBCER_APP_TMR_CLK_EN, |
1159 | .enable = syscon_clk_enable, | 1194 | .enable = syscon_clk_enable, |
1160 | .disable = syscon_clk_disable, | 1195 | .disable = syscon_clk_disable, |
1196 | .lock = __SPIN_LOCK_UNLOCKED(app_timer_clk.lock), | ||
1161 | }; | 1197 | }; |
1162 | 1198 | ||
1163 | #ifdef CONFIG_MACH_U300_BS335 | 1199 | #ifdef CONFIG_MACH_U300_BS335 |
@@ -1172,6 +1208,7 @@ static struct clk ppm_clk = { | |||
1172 | .clk_val = U300_SYSCON_SBCER_PPM_CLK_EN, | 1208 | .clk_val = U300_SYSCON_SBCER_PPM_CLK_EN, |
1173 | .enable = syscon_clk_enable, | 1209 | .enable = syscon_clk_enable, |
1174 | .disable = syscon_clk_disable, | 1210 | .disable = syscon_clk_disable, |
1211 | .lock = __SPIN_LOCK_UNLOCKED(ppm_clk.lock), | ||
1175 | }; | 1212 | }; |
1176 | #endif | 1213 | #endif |
1177 | 1214 | ||
@@ -1187,53 +1224,53 @@ static struct clk ppm_clk = { | |||
1187 | */ | 1224 | */ |
1188 | static struct clk_lookup lookups[] = { | 1225 | static struct clk_lookup lookups[] = { |
1189 | /* Connected directly to the AMBA bus */ | 1226 | /* Connected directly to the AMBA bus */ |
1190 | DEF_LOOKUP("amba", &amba_clk), | 1227 | DEF_LOOKUP("amba", &amba_clk), |
1191 | DEF_LOOKUP("cpu", &cpu_clk), | 1228 | DEF_LOOKUP("cpu", &cpu_clk), |
1192 | DEF_LOOKUP("nandif", &nandif_clk), | 1229 | DEF_LOOKUP("fsmc", &nandif_clk), |
1193 | DEF_LOOKUP("semi", &semi_clk), | 1230 | DEF_LOOKUP("semi", &semi_clk), |
1194 | #ifdef CONFIG_MACH_U300_BS335 | 1231 | #ifdef CONFIG_MACH_U300_BS335 |
1195 | DEF_LOOKUP("isp", &isp_clk), | 1232 | DEF_LOOKUP("isp", &isp_clk), |
1196 | DEF_LOOKUP("cds", &cds_clk), | 1233 | DEF_LOOKUP("cds", &cds_clk), |
1197 | #endif | 1234 | #endif |
1198 | DEF_LOOKUP("dma", &dma_clk), | 1235 | DEF_LOOKUP("dma", &dma_clk), |
1199 | DEF_LOOKUP("aaif", &aaif_clk), | 1236 | DEF_LOOKUP("msl", &aaif_clk), |
1200 | DEF_LOOKUP("apex", &apex_clk), | 1237 | DEF_LOOKUP("apex", &apex_clk), |
1201 | DEF_LOOKUP("video_enc", &video_enc_clk), | 1238 | DEF_LOOKUP("video_enc", &video_enc_clk), |
1202 | DEF_LOOKUP("xgam", &xgam_clk), | 1239 | DEF_LOOKUP("xgam", &xgam_clk), |
1203 | DEF_LOOKUP("ahb", &ahb_clk), | 1240 | DEF_LOOKUP("ahb", &ahb_clk), |
1204 | /* AHB bridge clocks */ | 1241 | /* AHB bridge clocks */ |
1205 | DEF_LOOKUP("ahb", &ahb_subsys_clk), | 1242 | DEF_LOOKUP("ahb_subsys", &ahb_subsys_clk), |
1206 | DEF_LOOKUP("intcon", &intcon_clk), | 1243 | DEF_LOOKUP("intcon", &intcon_clk), |
1207 | DEF_LOOKUP("mspro", &mspro_clk), | 1244 | DEF_LOOKUP("mspro", &mspro_clk), |
1208 | DEF_LOOKUP("pl172", &emif_clk), | 1245 | DEF_LOOKUP("pl172", &emif_clk), |
1209 | /* FAST bridge clocks */ | 1246 | /* FAST bridge clocks */ |
1210 | DEF_LOOKUP("fast", &fast_clk), | 1247 | DEF_LOOKUP("fast", &fast_clk), |
1211 | DEF_LOOKUP("mmci", &mmcsd_clk), | 1248 | DEF_LOOKUP("mmci", &mmcsd_clk), |
1212 | /* | 1249 | /* |
1213 | * The .0 and .1 identifiers on these comes from the platform device | 1250 | * The .0 and .1 identifiers on these comes from the platform device |
1214 | * .id field and are assigned when the platform devices are registered. | 1251 | * .id field and are assigned when the platform devices are registered. |
1215 | */ | 1252 | */ |
1216 | DEF_LOOKUP("i2s.0", &i2s0_clk), | 1253 | DEF_LOOKUP("i2s.0", &i2s0_clk), |
1217 | DEF_LOOKUP("i2s.1", &i2s1_clk), | 1254 | DEF_LOOKUP("i2s.1", &i2s1_clk), |
1218 | DEF_LOOKUP("stddci2c.0", &i2c0_clk), | 1255 | DEF_LOOKUP("stu300.0", &i2c0_clk), |
1219 | DEF_LOOKUP("stddci2c.1", &i2c1_clk), | 1256 | DEF_LOOKUP("stu300.1", &i2c1_clk), |
1220 | DEF_LOOKUP("pl022", &spi_clk), | 1257 | DEF_LOOKUP("pl022", &spi_clk), |
1221 | #ifdef CONFIG_MACH_U300_BS335 | 1258 | #ifdef CONFIG_MACH_U300_BS335 |
1222 | DEF_LOOKUP("uart1", &uart1_clk), | 1259 | DEF_LOOKUP("uart1", &uart1_clk), |
1223 | #endif | 1260 | #endif |
1224 | /* SLOW bridge clocks */ | 1261 | /* SLOW bridge clocks */ |
1225 | DEF_LOOKUP("slow", &slow_clk), | 1262 | DEF_LOOKUP("slow", &slow_clk), |
1226 | DEF_LOOKUP("wdog", &wdog_clk), | 1263 | DEF_LOOKUP("coh901327_wdog", &wdog_clk), |
1227 | DEF_LOOKUP("uart0", &uart_clk), | 1264 | DEF_LOOKUP("uart0", &uart_clk), |
1228 | DEF_LOOKUP("apptimer", &app_timer_clk), | 1265 | DEF_LOOKUP("apptimer", &app_timer_clk), |
1229 | DEF_LOOKUP("keypad", &keypad_clk), | 1266 | DEF_LOOKUP("coh901461-keypad", &keypad_clk), |
1230 | DEF_LOOKUP("u300-gpio", &gpio_clk), | 1267 | DEF_LOOKUP("u300-gpio", &gpio_clk), |
1231 | DEF_LOOKUP("rtc0", &rtc_clk), | 1268 | DEF_LOOKUP("rtc-coh901331", &rtc_clk), |
1232 | DEF_LOOKUP("bustr", &bustr_clk), | 1269 | DEF_LOOKUP("bustr", &bustr_clk), |
1233 | DEF_LOOKUP("evhist", &evhist_clk), | 1270 | DEF_LOOKUP("evhist", &evhist_clk), |
1234 | DEF_LOOKUP("timer", &timer_clk), | 1271 | DEF_LOOKUP("timer", &timer_clk), |
1235 | #ifdef CONFIG_MACH_U300_BS335 | 1272 | #ifdef CONFIG_MACH_U300_BS335 |
1236 | DEF_LOOKUP("ppm", &ppm_clk), | 1273 | DEF_LOOKUP("ppm", &ppm_clk), |
1237 | #endif | 1274 | #endif |
1238 | }; | 1275 | }; |
1239 | 1276 | ||
@@ -1427,16 +1464,20 @@ static const struct file_operations u300_clocks_operations = { | |||
1427 | .release = single_release, | 1464 | .release = single_release, |
1428 | }; | 1465 | }; |
1429 | 1466 | ||
1430 | static void init_clk_read_procfs(void) | 1467 | static int __init init_clk_read_debugfs(void) |
1431 | { | 1468 | { |
1432 | /* Expose a simple debugfs interface to view all clocks */ | 1469 | /* Expose a simple debugfs interface to view all clocks */ |
1433 | (void) debugfs_create_file("u300_clocks", S_IFREG | S_IRUGO, | 1470 | (void) debugfs_create_file("u300_clocks", S_IFREG | S_IRUGO, |
1434 | NULL, NULL, &u300_clocks_operations); | 1471 | NULL, NULL, |
1435 | } | 1472 | &u300_clocks_operations); |
1436 | #else | 1473 | return 0; |
1437 | static inline void init_clk_read_procfs(void) | ||
1438 | { | ||
1439 | } | 1474 | } |
1475 | /* | ||
1476 | * This needs to come in after the core_initcall() for the | ||
1477 | * overall clocks, because debugfs is not available until | ||
1478 | * the subsystems come up. | ||
1479 | */ | ||
1480 | module_init(init_clk_read_debugfs); | ||
1440 | #endif | 1481 | #endif |
1441 | 1482 | ||
1442 | static int __init u300_clock_init(void) | 1483 | static int __init u300_clock_init(void) |
@@ -1462,8 +1503,6 @@ static int __init u300_clock_init(void) | |||
1462 | 1503 | ||
1463 | clk_register(); | 1504 | clk_register(); |
1464 | 1505 | ||
1465 | init_clk_read_procfs(); | ||
1466 | |||
1467 | /* | 1506 | /* |
1468 | * Some of these may be on when we boot the system so make sure they | 1507 | * Some of these may be on when we boot the system so make sure they |
1469 | * are turned OFF. | 1508 | * are turned OFF. |
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c index 3a398befed41..03cd27d917b9 100644 --- a/arch/arm/mm/alignment.c +++ b/arch/arm/mm/alignment.c | |||
@@ -62,6 +62,12 @@ | |||
62 | #define SHIFT_ASR 0x40 | 62 | #define SHIFT_ASR 0x40 |
63 | #define SHIFT_RORRRX 0x60 | 63 | #define SHIFT_RORRRX 0x60 |
64 | 64 | ||
65 | #define BAD_INSTR 0xdeadc0de | ||
66 | |||
67 | /* Thumb-2 32 bit format per ARMv7 DDI0406A A6.3, either f800h,e800h,f800h */ | ||
68 | #define IS_T32(hi16) \ | ||
69 | (((hi16) & 0xe000) == 0xe000 && ((hi16) & 0x1800)) | ||
70 | |||
65 | static unsigned long ai_user; | 71 | static unsigned long ai_user; |
66 | static unsigned long ai_sys; | 72 | static unsigned long ai_sys; |
67 | static unsigned long ai_skipped; | 73 | static unsigned long ai_skipped; |
@@ -332,38 +338,48 @@ do_alignment_ldrdstrd(unsigned long addr, unsigned long instr, | |||
332 | struct pt_regs *regs) | 338 | struct pt_regs *regs) |
333 | { | 339 | { |
334 | unsigned int rd = RD_BITS(instr); | 340 | unsigned int rd = RD_BITS(instr); |
335 | 341 | unsigned int rd2; | |
336 | if (((rd & 1) == 1) || (rd == 14)) | 342 | int load; |
343 | |||
344 | if ((instr & 0xfe000000) == 0xe8000000) { | ||
345 | /* ARMv7 Thumb-2 32-bit LDRD/STRD */ | ||
346 | rd2 = (instr >> 8) & 0xf; | ||
347 | load = !!(LDST_L_BIT(instr)); | ||
348 | } else if (((rd & 1) == 1) || (rd == 14)) | ||
337 | goto bad; | 349 | goto bad; |
350 | else { | ||
351 | load = ((instr & 0xf0) == 0xd0); | ||
352 | rd2 = rd + 1; | ||
353 | } | ||
338 | 354 | ||
339 | ai_dword += 1; | 355 | ai_dword += 1; |
340 | 356 | ||
341 | if (user_mode(regs)) | 357 | if (user_mode(regs)) |
342 | goto user; | 358 | goto user; |
343 | 359 | ||
344 | if ((instr & 0xf0) == 0xd0) { | 360 | if (load) { |
345 | unsigned long val; | 361 | unsigned long val; |
346 | get32_unaligned_check(val, addr); | 362 | get32_unaligned_check(val, addr); |
347 | regs->uregs[rd] = val; | 363 | regs->uregs[rd] = val; |
348 | get32_unaligned_check(val, addr + 4); | 364 | get32_unaligned_check(val, addr + 4); |
349 | regs->uregs[rd + 1] = val; | 365 | regs->uregs[rd2] = val; |
350 | } else { | 366 | } else { |
351 | put32_unaligned_check(regs->uregs[rd], addr); | 367 | put32_unaligned_check(regs->uregs[rd], addr); |
352 | put32_unaligned_check(regs->uregs[rd + 1], addr + 4); | 368 | put32_unaligned_check(regs->uregs[rd2], addr + 4); |
353 | } | 369 | } |
354 | 370 | ||
355 | return TYPE_LDST; | 371 | return TYPE_LDST; |
356 | 372 | ||
357 | user: | 373 | user: |
358 | if ((instr & 0xf0) == 0xd0) { | 374 | if (load) { |
359 | unsigned long val; | 375 | unsigned long val; |
360 | get32t_unaligned_check(val, addr); | 376 | get32t_unaligned_check(val, addr); |
361 | regs->uregs[rd] = val; | 377 | regs->uregs[rd] = val; |
362 | get32t_unaligned_check(val, addr + 4); | 378 | get32t_unaligned_check(val, addr + 4); |
363 | regs->uregs[rd + 1] = val; | 379 | regs->uregs[rd2] = val; |
364 | } else { | 380 | } else { |
365 | put32t_unaligned_check(regs->uregs[rd], addr); | 381 | put32t_unaligned_check(regs->uregs[rd], addr); |
366 | put32t_unaligned_check(regs->uregs[rd + 1], addr + 4); | 382 | put32t_unaligned_check(regs->uregs[rd2], addr + 4); |
367 | } | 383 | } |
368 | 384 | ||
369 | return TYPE_LDST; | 385 | return TYPE_LDST; |
@@ -616,8 +632,72 @@ thumb2arm(u16 tinstr) | |||
616 | /* Else fall through for illegal instruction case */ | 632 | /* Else fall through for illegal instruction case */ |
617 | 633 | ||
618 | default: | 634 | default: |
619 | return 0xdeadc0de; | 635 | return BAD_INSTR; |
636 | } | ||
637 | } | ||
638 | |||
639 | /* | ||
640 | * Convert Thumb-2 32 bit LDM, STM, LDRD, STRD to equivalent instruction | ||
641 | * handlable by ARM alignment handler, also find the corresponding handler, | ||
642 | * so that we can reuse ARM userland alignment fault fixups for Thumb. | ||
643 | * | ||
644 | * @pinstr: original Thumb-2 instruction; returns new handlable instruction | ||
645 | * @regs: register context. | ||
646 | * @poffset: return offset from faulted addr for later writeback | ||
647 | * | ||
648 | * NOTES: | ||
649 | * 1. Comments below refer to ARMv7 DDI0406A Thumb Instruction sections. | ||
650 | * 2. Register name Rt from ARMv7 is same as Rd from ARMv6 (Rd is Rt) | ||
651 | */ | ||
652 | static void * | ||
653 | do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs, | ||
654 | union offset_union *poffset) | ||
655 | { | ||
656 | unsigned long instr = *pinstr; | ||
657 | u16 tinst1 = (instr >> 16) & 0xffff; | ||
658 | u16 tinst2 = instr & 0xffff; | ||
659 | poffset->un = 0; | ||
660 | |||
661 | switch (tinst1 & 0xffe0) { | ||
662 | /* A6.3.5 Load/Store multiple */ | ||
663 | case 0xe880: /* STM/STMIA/STMEA,LDM/LDMIA, PUSH/POP T2 */ | ||
664 | case 0xe8a0: /* ...above writeback version */ | ||
665 | case 0xe900: /* STMDB/STMFD, LDMDB/LDMEA */ | ||
666 | case 0xe920: /* ...above writeback version */ | ||
667 | /* no need offset decision since handler calculates it */ | ||
668 | return do_alignment_ldmstm; | ||
669 | |||
670 | case 0xf840: /* POP/PUSH T3 (single register) */ | ||
671 | if (RN_BITS(instr) == 13 && (tinst2 & 0x09ff) == 0x0904) { | ||
672 | u32 L = !!(LDST_L_BIT(instr)); | ||
673 | const u32 subset[2] = { | ||
674 | 0xe92d0000, /* STMDB sp!,{registers} */ | ||
675 | 0xe8bd0000, /* LDMIA sp!,{registers} */ | ||
676 | }; | ||
677 | *pinstr = subset[L] | (1<<RD_BITS(instr)); | ||
678 | return do_alignment_ldmstm; | ||
679 | } | ||
680 | /* Else fall through for illegal instruction case */ | ||
681 | break; | ||
682 | |||
683 | /* A6.3.6 Load/store double, STRD/LDRD(immed, lit, reg) */ | ||
684 | case 0xe860: | ||
685 | case 0xe960: | ||
686 | case 0xe8e0: | ||
687 | case 0xe9e0: | ||
688 | poffset->un = (tinst2 & 0xff) << 2; | ||
689 | case 0xe940: | ||
690 | case 0xe9c0: | ||
691 | return do_alignment_ldrdstrd; | ||
692 | |||
693 | /* | ||
694 | * No need to handle load/store instructions up to word size | ||
695 | * since ARMv6 and later CPUs can perform unaligned accesses. | ||
696 | */ | ||
697 | default: | ||
698 | break; | ||
620 | } | 699 | } |
700 | return NULL; | ||
621 | } | 701 | } |
622 | 702 | ||
623 | static int | 703 | static int |
@@ -630,6 +710,8 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
630 | mm_segment_t fs; | 710 | mm_segment_t fs; |
631 | unsigned int fault; | 711 | unsigned int fault; |
632 | u16 tinstr = 0; | 712 | u16 tinstr = 0; |
713 | int isize = 4; | ||
714 | int thumb2_32b = 0; | ||
633 | 715 | ||
634 | instrptr = instruction_pointer(regs); | 716 | instrptr = instruction_pointer(regs); |
635 | 717 | ||
@@ -637,8 +719,19 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
637 | set_fs(KERNEL_DS); | 719 | set_fs(KERNEL_DS); |
638 | if (thumb_mode(regs)) { | 720 | if (thumb_mode(regs)) { |
639 | fault = __get_user(tinstr, (u16 *)(instrptr & ~1)); | 721 | fault = __get_user(tinstr, (u16 *)(instrptr & ~1)); |
640 | if (!(fault)) | 722 | if (!fault) { |
641 | instr = thumb2arm(tinstr); | 723 | if (cpu_architecture() >= CPU_ARCH_ARMv7 && |
724 | IS_T32(tinstr)) { | ||
725 | /* Thumb-2 32-bit */ | ||
726 | u16 tinst2 = 0; | ||
727 | fault = __get_user(tinst2, (u16 *)(instrptr+2)); | ||
728 | instr = (tinstr << 16) | tinst2; | ||
729 | thumb2_32b = 1; | ||
730 | } else { | ||
731 | isize = 2; | ||
732 | instr = thumb2arm(tinstr); | ||
733 | } | ||
734 | } | ||
642 | } else | 735 | } else |
643 | fault = __get_user(instr, (u32 *)instrptr); | 736 | fault = __get_user(instr, (u32 *)instrptr); |
644 | set_fs(fs); | 737 | set_fs(fs); |
@@ -655,7 +748,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
655 | 748 | ||
656 | fixup: | 749 | fixup: |
657 | 750 | ||
658 | regs->ARM_pc += thumb_mode(regs) ? 2 : 4; | 751 | regs->ARM_pc += isize; |
659 | 752 | ||
660 | switch (CODING_BITS(instr)) { | 753 | switch (CODING_BITS(instr)) { |
661 | case 0x00000000: /* 3.13.4 load/store instruction extensions */ | 754 | case 0x00000000: /* 3.13.4 load/store instruction extensions */ |
@@ -714,18 +807,25 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
714 | handler = do_alignment_ldrstr; | 807 | handler = do_alignment_ldrstr; |
715 | break; | 808 | break; |
716 | 809 | ||
717 | case 0x08000000: /* ldm or stm */ | 810 | case 0x08000000: /* ldm or stm, or thumb-2 32bit instruction */ |
718 | handler = do_alignment_ldmstm; | 811 | if (thumb2_32b) |
812 | handler = do_alignment_t32_to_handler(&instr, regs, &offset); | ||
813 | else | ||
814 | handler = do_alignment_ldmstm; | ||
719 | break; | 815 | break; |
720 | 816 | ||
721 | default: | 817 | default: |
722 | goto bad; | 818 | goto bad; |
723 | } | 819 | } |
724 | 820 | ||
821 | if (!handler) | ||
822 | goto bad; | ||
725 | type = handler(addr, instr, regs); | 823 | type = handler(addr, instr, regs); |
726 | 824 | ||
727 | if (type == TYPE_ERROR || type == TYPE_FAULT) | 825 | if (type == TYPE_ERROR || type == TYPE_FAULT) { |
826 | regs->ARM_pc -= isize; | ||
728 | goto bad_or_fault; | 827 | goto bad_or_fault; |
828 | } | ||
729 | 829 | ||
730 | if (type == TYPE_LDST) | 830 | if (type == TYPE_LDST) |
731 | do_alignment_finish_ldst(addr, instr, regs, offset); | 831 | do_alignment_finish_ldst(addr, instr, regs, offset); |
@@ -735,7 +835,6 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
735 | bad_or_fault: | 835 | bad_or_fault: |
736 | if (type == TYPE_ERROR) | 836 | if (type == TYPE_ERROR) |
737 | goto bad; | 837 | goto bad; |
738 | regs->ARM_pc -= thumb_mode(regs) ? 2 : 4; | ||
739 | /* | 838 | /* |
740 | * We got a fault - fix it up, or die. | 839 | * We got a fault - fix it up, or die. |
741 | */ | 840 | */ |
@@ -751,8 +850,8 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
751 | */ | 850 | */ |
752 | printk(KERN_ERR "Alignment trap: not handling instruction " | 851 | printk(KERN_ERR "Alignment trap: not handling instruction " |
753 | "%0*lx at [<%08lx>]\n", | 852 | "%0*lx at [<%08lx>]\n", |
754 | thumb_mode(regs) ? 4 : 8, | 853 | isize << 1, |
755 | thumb_mode(regs) ? tinstr : instr, instrptr); | 854 | isize == 2 ? tinstr : instr, instrptr); |
756 | ai_skipped += 1; | 855 | ai_skipped += 1; |
757 | return 1; | 856 | return 1; |
758 | 857 | ||
@@ -763,8 +862,8 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
763 | printk("Alignment trap: %s (%d) PC=0x%08lx Instr=0x%0*lx " | 862 | printk("Alignment trap: %s (%d) PC=0x%08lx Instr=0x%0*lx " |
764 | "Address=0x%08lx FSR 0x%03x\n", current->comm, | 863 | "Address=0x%08lx FSR 0x%03x\n", current->comm, |
765 | task_pid_nr(current), instrptr, | 864 | task_pid_nr(current), instrptr, |
766 | thumb_mode(regs) ? 4 : 8, | 865 | isize << 1, |
767 | thumb_mode(regs) ? tinstr : instr, | 866 | isize == 2 ? tinstr : instr, |
768 | addr, fsr); | 867 | addr, fsr); |
769 | 868 | ||
770 | if (ai_usermode & UM_FIXUP) | 869 | if (ai_usermode & UM_FIXUP) |
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c index 0455557a2899..6fdcbb709827 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c | |||
@@ -208,7 +208,7 @@ good_area: | |||
208 | * than endlessly redo the fault. | 208 | * than endlessly redo the fault. |
209 | */ | 209 | */ |
210 | survive: | 210 | survive: |
211 | fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, fsr & (1 << 11)); | 211 | fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, (fsr & (1 << 11)) ? FAULT_FLAG_WRITE : 0); |
212 | if (unlikely(fault & VM_FAULT_ERROR)) { | 212 | if (unlikely(fault & VM_FAULT_ERROR)) { |
213 | if (fault & VM_FAULT_OOM) | 213 | if (fault & VM_FAULT_OOM) |
214 | goto out_of_memory; | 214 | goto out_of_memory; |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index fdaa9bb87c16..4722582b17b8 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -836,6 +836,13 @@ void __init reserve_node_zero(pg_data_t *pgdat) | |||
836 | BOOTMEM_EXCLUSIVE); | 836 | BOOTMEM_EXCLUSIVE); |
837 | } | 837 | } |
838 | 838 | ||
839 | if (machine_is_treo680()) { | ||
840 | reserve_bootmem_node(pgdat, 0xa0000000, 0x1000, | ||
841 | BOOTMEM_EXCLUSIVE); | ||
842 | reserve_bootmem_node(pgdat, 0xa2000000, 0x1000, | ||
843 | BOOTMEM_EXCLUSIVE); | ||
844 | } | ||
845 | |||
839 | if (machine_is_palmt5()) | 846 | if (machine_is_palmt5()) |
840 | reserve_bootmem_node(pgdat, 0xa0200000, 0x1000, | 847 | reserve_bootmem_node(pgdat, 0xa0200000, 0x1000, |
841 | BOOTMEM_EXCLUSIVE); | 848 | BOOTMEM_EXCLUSIVE); |
diff --git a/arch/arm/mm/proc-syms.c b/arch/arm/mm/proc-syms.c index 195e48edd8c2..ac5c80062b70 100644 --- a/arch/arm/mm/proc-syms.c +++ b/arch/arm/mm/proc-syms.c | |||
@@ -27,6 +27,7 @@ EXPORT_SYMBOL(__cpuc_flush_kern_all); | |||
27 | EXPORT_SYMBOL(__cpuc_flush_user_all); | 27 | EXPORT_SYMBOL(__cpuc_flush_user_all); |
28 | EXPORT_SYMBOL(__cpuc_flush_user_range); | 28 | EXPORT_SYMBOL(__cpuc_flush_user_range); |
29 | EXPORT_SYMBOL(__cpuc_coherent_kern_range); | 29 | EXPORT_SYMBOL(__cpuc_coherent_kern_range); |
30 | EXPORT_SYMBOL(__cpuc_flush_dcache_page); | ||
30 | EXPORT_SYMBOL(dmac_inv_range); /* because of flush_ioremap_region() */ | 31 | EXPORT_SYMBOL(dmac_inv_range); /* because of flush_ioremap_region() */ |
31 | #else | 32 | #else |
32 | EXPORT_SYMBOL(cpu_cache); | 33 | EXPORT_SYMBOL(cpu_cache); |
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index def14ec265b3..7677a4a1cef2 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -2457,6 +2457,19 @@ static int __init omap_init_dma(void) | |||
2457 | setup_irq(irq, &omap24xx_dma_irq); | 2457 | setup_irq(irq, &omap24xx_dma_irq); |
2458 | } | 2458 | } |
2459 | 2459 | ||
2460 | /* Enable smartidle idlemodes and autoidle */ | ||
2461 | if (cpu_is_omap34xx()) { | ||
2462 | u32 v = dma_read(OCP_SYSCONFIG); | ||
2463 | v &= ~(DMA_SYSCONFIG_MIDLEMODE_MASK | | ||
2464 | DMA_SYSCONFIG_SIDLEMODE_MASK | | ||
2465 | DMA_SYSCONFIG_AUTOIDLE); | ||
2466 | v |= (DMA_SYSCONFIG_MIDLEMODE(DMA_IDLEMODE_SMARTIDLE) | | ||
2467 | DMA_SYSCONFIG_SIDLEMODE(DMA_IDLEMODE_SMARTIDLE) | | ||
2468 | DMA_SYSCONFIG_AUTOIDLE); | ||
2469 | dma_write(v , OCP_SYSCONFIG); | ||
2470 | } | ||
2471 | |||
2472 | |||
2460 | /* FIXME: Update LCD DMA to work on 24xx */ | 2473 | /* FIXME: Update LCD DMA to work on 24xx */ |
2461 | if (cpu_class_is_omap1()) { | 2474 | if (cpu_class_is_omap1()) { |
2462 | r = request_irq(INT_DMA_LCD, lcd_dma_irq_handler, 0, | 2475 | r = request_irq(INT_DMA_LCD, lcd_dma_irq_handler, 0, |
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 7fd89ba8d3b5..26b387c12423 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
@@ -1585,6 +1585,7 @@ static int __init _omap_gpio_init(void) | |||
1585 | __raw_writel(0x00000000, bank->base + OMAP24XX_GPIO_IRQENABLE1); | 1585 | __raw_writel(0x00000000, bank->base + OMAP24XX_GPIO_IRQENABLE1); |
1586 | __raw_writel(0xffffffff, bank->base + OMAP24XX_GPIO_IRQSTATUS1); | 1586 | __raw_writel(0xffffffff, bank->base + OMAP24XX_GPIO_IRQSTATUS1); |
1587 | __raw_writew(0x0015, bank->base + OMAP24XX_GPIO_SYSCONFIG); | 1587 | __raw_writew(0x0015, bank->base + OMAP24XX_GPIO_SYSCONFIG); |
1588 | __raw_writel(0x00000000, bank->base + OMAP24XX_GPIO_DEBOUNCE_EN); | ||
1588 | 1589 | ||
1589 | /* Initialize interface clock ungated, module enabled */ | 1590 | /* Initialize interface clock ungated, module enabled */ |
1590 | __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL); | 1591 | __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL); |
diff --git a/arch/arm/plat-omap/include/mach/cpu.h b/arch/arm/plat-omap/include/mach/cpu.h index fc60c4ebcc28..285eaa3a8275 100644 --- a/arch/arm/plat-omap/include/mach/cpu.h +++ b/arch/arm/plat-omap/include/mach/cpu.h | |||
@@ -30,6 +30,17 @@ | |||
30 | #ifndef __ASM_ARCH_OMAP_CPU_H | 30 | #ifndef __ASM_ARCH_OMAP_CPU_H |
31 | #define __ASM_ARCH_OMAP_CPU_H | 31 | #define __ASM_ARCH_OMAP_CPU_H |
32 | 32 | ||
33 | /* | ||
34 | * Omap device type i.e. EMU/HS/TST/GP/BAD | ||
35 | */ | ||
36 | #define OMAP2_DEVICE_TYPE_TEST 0 | ||
37 | #define OMAP2_DEVICE_TYPE_EMU 1 | ||
38 | #define OMAP2_DEVICE_TYPE_SEC 2 | ||
39 | #define OMAP2_DEVICE_TYPE_GP 3 | ||
40 | #define OMAP2_DEVICE_TYPE_BAD 4 | ||
41 | |||
42 | int omap_type(void); | ||
43 | |||
33 | struct omap_chip_id { | 44 | struct omap_chip_id { |
34 | u8 oc; | 45 | u8 oc; |
35 | u8 type; | 46 | u8 type; |
@@ -424,17 +435,6 @@ IS_OMAP_TYPE(3430, 0x3430) | |||
424 | 435 | ||
425 | 436 | ||
426 | int omap_chip_is(struct omap_chip_id oci); | 437 | int omap_chip_is(struct omap_chip_id oci); |
427 | int omap_type(void); | ||
428 | |||
429 | /* | ||
430 | * Macro to detect device type i.e. EMU/HS/TST/GP/BAD | ||
431 | */ | ||
432 | #define OMAP2_DEVICE_TYPE_TEST 0 | ||
433 | #define OMAP2_DEVICE_TYPE_EMU 1 | ||
434 | #define OMAP2_DEVICE_TYPE_SEC 2 | ||
435 | #define OMAP2_DEVICE_TYPE_GP 3 | ||
436 | #define OMAP2_DEVICE_TYPE_BAD 4 | ||
437 | |||
438 | void omap2_check_revision(void); | 438 | void omap2_check_revision(void); |
439 | 439 | ||
440 | #endif /* defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) */ | 440 | #endif /* defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) */ |
diff --git a/arch/arm/plat-omap/include/mach/dma.h b/arch/arm/plat-omap/include/mach/dma.h index 8c1eae88737e..7b939cc01962 100644 --- a/arch/arm/plat-omap/include/mach/dma.h +++ b/arch/arm/plat-omap/include/mach/dma.h | |||
@@ -389,6 +389,21 @@ | |||
389 | #define DMA_THREAD_FIFO_25 (0x02 << 14) | 389 | #define DMA_THREAD_FIFO_25 (0x02 << 14) |
390 | #define DMA_THREAD_FIFO_50 (0x03 << 14) | 390 | #define DMA_THREAD_FIFO_50 (0x03 << 14) |
391 | 391 | ||
392 | /* DMA4_OCP_SYSCONFIG bits */ | ||
393 | #define DMA_SYSCONFIG_MIDLEMODE_MASK (3 << 12) | ||
394 | #define DMA_SYSCONFIG_CLOCKACTIVITY_MASK (3 << 8) | ||
395 | #define DMA_SYSCONFIG_EMUFREE (1 << 5) | ||
396 | #define DMA_SYSCONFIG_SIDLEMODE_MASK (3 << 3) | ||
397 | #define DMA_SYSCONFIG_SOFTRESET (1 << 2) | ||
398 | #define DMA_SYSCONFIG_AUTOIDLE (1 << 0) | ||
399 | |||
400 | #define DMA_SYSCONFIG_MIDLEMODE(n) ((n) << 12) | ||
401 | #define DMA_SYSCONFIG_SIDLEMODE(n) ((n) << 3) | ||
402 | |||
403 | #define DMA_IDLEMODE_SMARTIDLE 0x2 | ||
404 | #define DMA_IDLEMODE_NO_IDLE 0x1 | ||
405 | #define DMA_IDLEMODE_FORCE_IDLE 0x0 | ||
406 | |||
392 | /* Chaining modes*/ | 407 | /* Chaining modes*/ |
393 | #ifndef CONFIG_ARCH_OMAP1 | 408 | #ifndef CONFIG_ARCH_OMAP1 |
394 | #define OMAP_DMA_STATIC_CHAIN 0x1 | 409 | #define OMAP_DMA_STATIC_CHAIN 0x1 |
diff --git a/arch/arm/plat-omap/include/mach/io.h b/arch/arm/plat-omap/include/mach/io.h index 3b2814720569..73f483d56ca6 100644 --- a/arch/arm/plat-omap/include/mach/io.h +++ b/arch/arm/plat-omap/include/mach/io.h | |||
@@ -201,7 +201,7 @@ | |||
201 | #define OMAP2_IO_ADDRESS(pa) IOMEM(__OMAP2_IO_ADDRESS(pa)) | 201 | #define OMAP2_IO_ADDRESS(pa) IOMEM(__OMAP2_IO_ADDRESS(pa)) |
202 | 202 | ||
203 | #ifdef __ASSEMBLER__ | 203 | #ifdef __ASSEMBLER__ |
204 | #define IOMEM(x) x | 204 | #define IOMEM(x) (x) |
205 | #else | 205 | #else |
206 | #define IOMEM(x) ((void __force __iomem *)(x)) | 206 | #define IOMEM(x) ((void __force __iomem *)(x)) |
207 | 207 | ||
diff --git a/arch/arm/plat-omap/include/mach/sram.h b/arch/arm/plat-omap/include/mach/sram.h index dca7c16ae903..4d53cc59d7a3 100644 --- a/arch/arm/plat-omap/include/mach/sram.h +++ b/arch/arm/plat-omap/include/mach/sram.h | |||
@@ -24,7 +24,8 @@ extern u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass); | |||
24 | extern u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl, | 24 | extern u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl, |
25 | u32 sdrc_actim_ctrla, | 25 | u32 sdrc_actim_ctrla, |
26 | u32 sdrc_actim_ctrlb, u32 m2, | 26 | u32 sdrc_actim_ctrlb, u32 m2, |
27 | u32 unlock_dll); | 27 | u32 unlock_dll, u32 f, u32 sdrc_mr, |
28 | u32 inc); | ||
28 | 29 | ||
29 | /* Do not use these */ | 30 | /* Do not use these */ |
30 | extern void omap1_sram_reprogram_clock(u32 ckctl, u32 dpllctl); | 31 | extern void omap1_sram_reprogram_clock(u32 ckctl, u32 dpllctl); |
@@ -62,7 +63,8 @@ extern unsigned long omap243x_sram_reprogram_sdrc_sz; | |||
62 | extern u32 omap3_sram_configure_core_dpll(u32 sdrc_rfr_ctrl, | 63 | extern u32 omap3_sram_configure_core_dpll(u32 sdrc_rfr_ctrl, |
63 | u32 sdrc_actim_ctrla, | 64 | u32 sdrc_actim_ctrla, |
64 | u32 sdrc_actim_ctrlb, u32 m2, | 65 | u32 sdrc_actim_ctrlb, u32 m2, |
65 | u32 unlock_dll); | 66 | u32 unlock_dll, u32 f, u32 sdrc_mr, |
67 | u32 inc); | ||
66 | extern unsigned long omap3_sram_configure_core_dpll_sz; | 68 | extern unsigned long omap3_sram_configure_core_dpll_sz; |
67 | 69 | ||
68 | #endif | 70 | #endif |
diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c index 4cf449fa2cb5..4a0301399013 100644 --- a/arch/arm/plat-omap/iommu.c +++ b/arch/arm/plat-omap/iommu.c | |||
@@ -298,7 +298,7 @@ void flush_iotlb_page(struct iommu *obj, u32 da) | |||
298 | if ((start <= da) && (da < start + bytes)) { | 298 | if ((start <= da) && (da < start + bytes)) { |
299 | dev_dbg(obj->dev, "%s: %08x<=%08x(%x)\n", | 299 | dev_dbg(obj->dev, "%s: %08x<=%08x(%x)\n", |
300 | __func__, start, da, bytes); | 300 | __func__, start, da, bytes); |
301 | 301 | iotlb_load_cr(obj, &cr); | |
302 | iommu_write_reg(obj, 1, MMU_FLUSH_ENTRY); | 302 | iommu_write_reg(obj, 1, MMU_FLUSH_ENTRY); |
303 | } | 303 | } |
304 | } | 304 | } |
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c index a5b9bcd6b108..4ea73804d21e 100644 --- a/arch/arm/plat-omap/sram.c +++ b/arch/arm/plat-omap/sram.c | |||
@@ -133,7 +133,12 @@ void __init omap_detect_sram(void) | |||
133 | if (cpu_is_omap34xx()) { | 133 | if (cpu_is_omap34xx()) { |
134 | omap_sram_base = OMAP3_SRAM_PUB_VA; | 134 | omap_sram_base = OMAP3_SRAM_PUB_VA; |
135 | omap_sram_start = OMAP3_SRAM_PUB_PA; | 135 | omap_sram_start = OMAP3_SRAM_PUB_PA; |
136 | omap_sram_size = 0x8000; /* 32K */ | 136 | if ((omap_type() == OMAP2_DEVICE_TYPE_EMU) || |
137 | (omap_type() == OMAP2_DEVICE_TYPE_SEC)) { | ||
138 | omap_sram_size = 0x7000; /* 28K */ | ||
139 | } else { | ||
140 | omap_sram_size = 0x8000; /* 32K */ | ||
141 | } | ||
137 | } else { | 142 | } else { |
138 | omap_sram_base = OMAP2_SRAM_PUB_VA; | 143 | omap_sram_base = OMAP2_SRAM_PUB_VA; |
139 | omap_sram_start = OMAP2_SRAM_PUB_PA; | 144 | omap_sram_start = OMAP2_SRAM_PUB_PA; |
@@ -371,15 +376,17 @@ static inline int omap243x_sram_init(void) | |||
371 | static u32 (*_omap3_sram_configure_core_dpll)(u32 sdrc_rfr_ctrl, | 376 | static u32 (*_omap3_sram_configure_core_dpll)(u32 sdrc_rfr_ctrl, |
372 | u32 sdrc_actim_ctrla, | 377 | u32 sdrc_actim_ctrla, |
373 | u32 sdrc_actim_ctrlb, | 378 | u32 sdrc_actim_ctrlb, |
374 | u32 m2, u32 unlock_dll); | 379 | u32 m2, u32 unlock_dll, |
380 | u32 f, u32 sdrc_mr, u32 inc); | ||
375 | u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl, u32 sdrc_actim_ctrla, | 381 | u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl, u32 sdrc_actim_ctrla, |
376 | u32 sdrc_actim_ctrlb, u32 m2, u32 unlock_dll) | 382 | u32 sdrc_actim_ctrlb, u32 m2, u32 unlock_dll, |
383 | u32 f, u32 sdrc_mr, u32 inc) | ||
377 | { | 384 | { |
378 | BUG_ON(!_omap3_sram_configure_core_dpll); | 385 | BUG_ON(!_omap3_sram_configure_core_dpll); |
379 | return _omap3_sram_configure_core_dpll(sdrc_rfr_ctrl, | 386 | return _omap3_sram_configure_core_dpll(sdrc_rfr_ctrl, |
380 | sdrc_actim_ctrla, | 387 | sdrc_actim_ctrla, |
381 | sdrc_actim_ctrlb, m2, | 388 | sdrc_actim_ctrlb, m2, |
382 | unlock_dll); | 389 | unlock_dll, f, sdrc_mr, inc); |
383 | } | 390 | } |
384 | 391 | ||
385 | /* REVISIT: Should this be same as omap34xx_sram_init() after off-idle? */ | 392 | /* REVISIT: Should this be same as omap34xx_sram_init() after off-idle? */ |
diff --git a/arch/arm/plat-s3c/Makefile b/arch/arm/plat-s3c/Makefile index 610651455a78..0761766b1833 100644 --- a/arch/arm/plat-s3c/Makefile +++ b/arch/arm/plat-s3c/Makefile | |||
@@ -34,6 +34,7 @@ obj-$(CONFIG_S3C_DEV_HSMMC) += dev-hsmmc.o | |||
34 | obj-$(CONFIG_S3C_DEV_HSMMC1) += dev-hsmmc1.o | 34 | obj-$(CONFIG_S3C_DEV_HSMMC1) += dev-hsmmc1.o |
35 | obj-y += dev-i2c0.o | 35 | obj-y += dev-i2c0.o |
36 | obj-$(CONFIG_S3C_DEV_I2C1) += dev-i2c1.o | 36 | obj-$(CONFIG_S3C_DEV_I2C1) += dev-i2c1.o |
37 | obj-$(CONFIG_SND_S3C64XX_SOC_I2S) += dev-audio.o | ||
37 | obj-$(CONFIG_S3C_DEV_FB) += dev-fb.o | 38 | obj-$(CONFIG_S3C_DEV_FB) += dev-fb.o |
38 | obj-$(CONFIG_S3C_DEV_USB_HOST) += dev-usb.o | 39 | obj-$(CONFIG_S3C_DEV_USB_HOST) += dev-usb.o |
39 | obj-$(CONFIG_S3C_DEV_USB_HSOTG) += dev-usb-hsotg.o | 40 | obj-$(CONFIG_S3C_DEV_USB_HSOTG) += dev-usb-hsotg.o |
diff --git a/arch/arm/plat-s3c/dev-audio.c b/arch/arm/plat-s3c/dev-audio.c new file mode 100644 index 000000000000..1322beb40dd7 --- /dev/null +++ b/arch/arm/plat-s3c/dev-audio.c | |||
@@ -0,0 +1,68 @@ | |||
1 | /* linux/arch/arm/plat-s3c/dev-audio.c | ||
2 | * | ||
3 | * Copyright 2009 Wolfson Microelectronics | ||
4 | * Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
5 | * | ||
6 | |||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/string.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | |||
16 | #include <mach/irqs.h> | ||
17 | #include <mach/map.h> | ||
18 | |||
19 | #include <plat/devs.h> | ||
20 | |||
21 | |||
22 | static struct resource s3c64xx_iis0_resource[] = { | ||
23 | [0] = { | ||
24 | .start = S3C64XX_PA_IIS0, | ||
25 | .end = S3C64XX_PA_IIS0 + 0x100 - 1, | ||
26 | .flags = IORESOURCE_MEM, | ||
27 | }, | ||
28 | }; | ||
29 | |||
30 | struct platform_device s3c64xx_device_iis0 = { | ||
31 | .name = "s3c64xx-iis", | ||
32 | .id = 0, | ||
33 | .num_resources = ARRAY_SIZE(s3c64xx_iis0_resource), | ||
34 | .resource = s3c64xx_iis0_resource, | ||
35 | }; | ||
36 | EXPORT_SYMBOL(s3c64xx_device_iis0); | ||
37 | |||
38 | static struct resource s3c64xx_iis1_resource[] = { | ||
39 | [0] = { | ||
40 | .start = S3C64XX_PA_IIS1, | ||
41 | .end = S3C64XX_PA_IIS1 + 0x100 - 1, | ||
42 | .flags = IORESOURCE_MEM, | ||
43 | }, | ||
44 | }; | ||
45 | |||
46 | struct platform_device s3c64xx_device_iis1 = { | ||
47 | .name = "s3c64xx-iis", | ||
48 | .id = 1, | ||
49 | .num_resources = ARRAY_SIZE(s3c64xx_iis1_resource), | ||
50 | .resource = s3c64xx_iis1_resource, | ||
51 | }; | ||
52 | EXPORT_SYMBOL(s3c64xx_device_iis1); | ||
53 | |||
54 | static struct resource s3c64xx_iisv4_resource[] = { | ||
55 | [0] = { | ||
56 | .start = S3C64XX_PA_IISV4, | ||
57 | .end = S3C64XX_PA_IISV4 + 0x100 - 1, | ||
58 | .flags = IORESOURCE_MEM, | ||
59 | }, | ||
60 | }; | ||
61 | |||
62 | struct platform_device s3c64xx_device_iisv4 = { | ||
63 | .name = "s3c64xx-iis-v4", | ||
64 | .id = -1, | ||
65 | .num_resources = ARRAY_SIZE(s3c64xx_iisv4_resource), | ||
66 | .resource = s3c64xx_iisv4_resource, | ||
67 | }; | ||
68 | EXPORT_SYMBOL(s3c64xx_device_iisv4); | ||
diff --git a/arch/arm/plat-s3c/gpio-config.c b/arch/arm/plat-s3c/gpio-config.c index 08044dec9731..456969b6fa0d 100644 --- a/arch/arm/plat-s3c/gpio-config.c +++ b/arch/arm/plat-s3c/gpio-config.c | |||
@@ -119,7 +119,7 @@ int s3c_gpio_setcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip, | |||
119 | unsigned int shift = (off & 7) * 4; | 119 | unsigned int shift = (off & 7) * 4; |
120 | u32 con; | 120 | u32 con; |
121 | 121 | ||
122 | if (off < 8 && chip->chip.ngpio >= 8) | 122 | if (off < 8 && chip->chip.ngpio > 8) |
123 | reg -= 4; | 123 | reg -= 4; |
124 | 124 | ||
125 | if (s3c_gpio_is_cfg_special(cfg)) { | 125 | if (s3c_gpio_is_cfg_special(cfg)) { |
diff --git a/arch/arm/plat-s3c/include/plat/devs.h b/arch/arm/plat-s3c/include/plat/devs.h index a0b6768fddcf..2e170827e0b0 100644 --- a/arch/arm/plat-s3c/include/plat/devs.h +++ b/arch/arm/plat-s3c/include/plat/devs.h | |||
@@ -24,16 +24,20 @@ extern struct platform_device *s3c24xx_uart_src[]; | |||
24 | 24 | ||
25 | extern struct platform_device s3c_device_timer[]; | 25 | extern struct platform_device s3c_device_timer[]; |
26 | 26 | ||
27 | extern struct platform_device s3c64xx_device_iis0; | ||
28 | extern struct platform_device s3c64xx_device_iis1; | ||
29 | extern struct platform_device s3c64xx_device_iisv4; | ||
30 | |||
27 | extern struct platform_device s3c_device_fb; | 31 | extern struct platform_device s3c_device_fb; |
28 | extern struct platform_device s3c_device_usb; | 32 | extern struct platform_device s3c_device_usb; |
29 | extern struct platform_device s3c_device_lcd; | 33 | extern struct platform_device s3c_device_lcd; |
30 | extern struct platform_device s3c_device_wdt; | 34 | extern struct platform_device s3c_device_wdt; |
31 | extern struct platform_device s3c_device_i2c0; | 35 | extern struct platform_device s3c_device_i2c0; |
32 | extern struct platform_device s3c_device_i2c1; | 36 | extern struct platform_device s3c_device_i2c1; |
33 | extern struct platform_device s3c_device_iis; | ||
34 | extern struct platform_device s3c_device_rtc; | 37 | extern struct platform_device s3c_device_rtc; |
35 | extern struct platform_device s3c_device_adc; | 38 | extern struct platform_device s3c_device_adc; |
36 | extern struct platform_device s3c_device_sdi; | 39 | extern struct platform_device s3c_device_sdi; |
40 | extern struct platform_device s3c_device_iis; | ||
37 | extern struct platform_device s3c_device_hwmon; | 41 | extern struct platform_device s3c_device_hwmon; |
38 | extern struct platform_device s3c_device_hsmmc0; | 42 | extern struct platform_device s3c_device_hsmmc0; |
39 | extern struct platform_device s3c_device_hsmmc1; | 43 | extern struct platform_device s3c_device_hsmmc1; |
diff --git a/arch/arm/plat-s3c/include/plat/nand.h b/arch/arm/plat-s3c/include/plat/nand.h index f4dcd14af059..18f958801e64 100644 --- a/arch/arm/plat-s3c/include/plat/nand.h +++ b/arch/arm/plat-s3c/include/plat/nand.h | |||
@@ -10,19 +10,26 @@ | |||
10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | /* struct s3c2410_nand_set | 13 | /** |
14 | * struct s3c2410_nand_set - define a set of one or more nand chips | ||
15 | * @disable_ecc: Entirely disable ECC - Dangerous | ||
16 | * @flash_bbt: Openmoko u-boot can create a Bad Block Table | ||
17 | * Setting this flag will allow the kernel to | ||
18 | * look for it at boot time and also skip the NAND | ||
19 | * scan. | ||
20 | * @nr_chips: Number of chips in this set | ||
21 | * @nr_partitions: Number of partitions pointed to by @partitions | ||
22 | * @name: Name of set (optional) | ||
23 | * @nr_map: Map for low-layer logical to physical chip numbers (option) | ||
24 | * @partitions: The mtd partition list | ||
14 | * | 25 | * |
15 | * define an set of one or more nand chips registered with an unique mtd | 26 | * define a set of one or more nand chips registered with an unique mtd. Also |
16 | * | 27 | * allows to pass flag to the underlying NAND layer. 'disable_ecc' will trigger |
17 | * nr_chips = number of chips in this set | 28 | * a warning at boot time. |
18 | * nr_partitions = number of partitions pointed to be partitoons (or zero) | 29 | */ |
19 | * name = name of set (optional) | ||
20 | * nr_map = map for low-layer logical to physical chip numbers (option) | ||
21 | * partitions = mtd partition list | ||
22 | */ | ||
23 | |||
24 | struct s3c2410_nand_set { | 30 | struct s3c2410_nand_set { |
25 | unsigned int disable_ecc : 1; | 31 | unsigned int disable_ecc:1; |
32 | unsigned int flash_bbt:1; | ||
26 | 33 | ||
27 | int nr_chips; | 34 | int nr_chips; |
28 | int nr_partitions; | 35 | int nr_partitions; |
@@ -39,7 +46,7 @@ struct s3c2410_platform_nand { | |||
39 | int twrph0; /* active time for nWE/nOE */ | 46 | int twrph0; /* active time for nWE/nOE */ |
40 | int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */ | 47 | int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */ |
41 | 48 | ||
42 | unsigned int ignore_unset_ecc : 1; | 49 | unsigned int ignore_unset_ecc:1; |
43 | 50 | ||
44 | int nr_sets; | 51 | int nr_sets; |
45 | struct s3c2410_nand_set *sets; | 52 | struct s3c2410_nand_set *sets; |
diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile index 636cb12711df..579a165c2827 100644 --- a/arch/arm/plat-s3c24xx/Makefile +++ b/arch/arm/plat-s3c24xx/Makefile | |||
@@ -29,7 +29,7 @@ obj-$(CONFIG_PM_SIMTEC) += pm-simtec.o | |||
29 | obj-$(CONFIG_PM) += pm.o | 29 | obj-$(CONFIG_PM) += pm.o |
30 | obj-$(CONFIG_PM) += irq-pm.o | 30 | obj-$(CONFIG_PM) += irq-pm.o |
31 | obj-$(CONFIG_PM) += sleep.o | 31 | obj-$(CONFIG_PM) += sleep.o |
32 | obj-$(CONFIG_HAVE_PWM) += pwm.o | 32 | obj-$(CONFIG_S3C24XX_PWM) += pwm.o |
33 | obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o | 33 | obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o |
34 | obj-$(CONFIG_S3C2410_DMA) += dma.o | 34 | obj-$(CONFIG_S3C2410_DMA) += dma.o |
35 | obj-$(CONFIG_S3C24XX_ADC) += adc.o | 35 | obj-$(CONFIG_S3C24XX_ADC) += adc.o |
diff --git a/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c b/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c index 9edf7894eedd..da7a61728c18 100644 --- a/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c +++ b/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c | |||
@@ -12,8 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | 15 | #include <linux/gpio.h> | |
16 | #include <mach/hardware.h> | ||
17 | 16 | ||
18 | #include <mach/spi.h> | 17 | #include <mach/spi.h> |
19 | #include <mach/regs-gpio.h> | 18 | #include <mach/regs-gpio.h> |
diff --git a/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c b/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c index f34d0fc69ad8..86b9edc67413 100644 --- a/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c +++ b/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c | |||
@@ -12,8 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | 15 | #include <linux/gpio.h> | |
16 | #include <mach/hardware.h> | ||
17 | 16 | ||
18 | #include <mach/spi.h> | 17 | #include <mach/spi.h> |
19 | #include <mach/regs-gpio.h> | 18 | #include <mach/regs-gpio.h> |
diff --git a/arch/arm/plat-s3c64xx/Makefile b/arch/arm/plat-s3c64xx/Makefile index 2ed5df34f9ea..3c8882cd6268 100644 --- a/arch/arm/plat-s3c64xx/Makefile +++ b/arch/arm/plat-s3c64xx/Makefile | |||
@@ -23,6 +23,7 @@ obj-y += gpiolib.o | |||
23 | 23 | ||
24 | obj-$(CONFIG_CPU_S3C6400_INIT) += s3c6400-init.o | 24 | obj-$(CONFIG_CPU_S3C6400_INIT) += s3c6400-init.o |
25 | obj-$(CONFIG_CPU_S3C6400_CLOCK) += s3c6400-clock.o | 25 | obj-$(CONFIG_CPU_S3C6400_CLOCK) += s3c6400-clock.o |
26 | obj-$(CONFIG_CPU_FREQ_S3C64XX) += cpufreq.o | ||
26 | 27 | ||
27 | # PM support | 28 | # PM support |
28 | 29 | ||
diff --git a/arch/arm/plat-s3c64xx/clock.c b/arch/arm/plat-s3c64xx/clock.c index 0bc2fa1dfc40..7a36e899360d 100644 --- a/arch/arm/plat-s3c64xx/clock.c +++ b/arch/arm/plat-s3c64xx/clock.c | |||
@@ -191,7 +191,7 @@ static struct clk init_clocks[] = { | |||
191 | .id = -1, | 191 | .id = -1, |
192 | .parent = &clk_h, | 192 | .parent = &clk_h, |
193 | .enable = s3c64xx_hclk_ctrl, | 193 | .enable = s3c64xx_hclk_ctrl, |
194 | .ctrlbit = S3C_CLKCON_SCLK_UHOST, | 194 | .ctrlbit = S3C_CLKCON_HCLK_UHOST, |
195 | }, { | 195 | }, { |
196 | .name = "hsmmc", | 196 | .name = "hsmmc", |
197 | .id = 0, | 197 | .id = 0, |
diff --git a/arch/arm/plat-s3c64xx/cpufreq.c b/arch/arm/plat-s3c64xx/cpufreq.c new file mode 100644 index 000000000000..e6e0843215df --- /dev/null +++ b/arch/arm/plat-s3c64xx/cpufreq.c | |||
@@ -0,0 +1,262 @@ | |||
1 | /* linux/arch/arm/plat-s3c64xx/cpufreq.c | ||
2 | * | ||
3 | * Copyright 2009 Wolfson Microelectronics plc | ||
4 | * | ||
5 | * S3C64xx CPUfreq Support | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/types.h> | ||
14 | #include <linux/init.h> | ||
15 | #include <linux/cpufreq.h> | ||
16 | #include <linux/clk.h> | ||
17 | #include <linux/err.h> | ||
18 | #include <linux/regulator/consumer.h> | ||
19 | |||
20 | static struct clk *armclk; | ||
21 | static struct regulator *vddarm; | ||
22 | |||
23 | #ifdef CONFIG_CPU_S3C6410 | ||
24 | struct s3c64xx_dvfs { | ||
25 | unsigned int vddarm_min; | ||
26 | unsigned int vddarm_max; | ||
27 | }; | ||
28 | |||
29 | static struct s3c64xx_dvfs s3c64xx_dvfs_table[] = { | ||
30 | [0] = { 1000000, 1000000 }, | ||
31 | [1] = { 1000000, 1050000 }, | ||
32 | [2] = { 1050000, 1100000 }, | ||
33 | [3] = { 1050000, 1150000 }, | ||
34 | [4] = { 1250000, 1350000 }, | ||
35 | }; | ||
36 | |||
37 | static struct cpufreq_frequency_table s3c64xx_freq_table[] = { | ||
38 | { 0, 66000 }, | ||
39 | { 0, 133000 }, | ||
40 | { 1, 222000 }, | ||
41 | { 1, 266000 }, | ||
42 | { 2, 333000 }, | ||
43 | { 2, 400000 }, | ||
44 | { 3, 532000 }, | ||
45 | { 3, 533000 }, | ||
46 | { 4, 667000 }, | ||
47 | { 0, CPUFREQ_TABLE_END }, | ||
48 | }; | ||
49 | #endif | ||
50 | |||
51 | static int s3c64xx_cpufreq_verify_speed(struct cpufreq_policy *policy) | ||
52 | { | ||
53 | if (policy->cpu != 0) | ||
54 | return -EINVAL; | ||
55 | |||
56 | return cpufreq_frequency_table_verify(policy, s3c64xx_freq_table); | ||
57 | } | ||
58 | |||
59 | static unsigned int s3c64xx_cpufreq_get_speed(unsigned int cpu) | ||
60 | { | ||
61 | if (cpu != 0) | ||
62 | return 0; | ||
63 | |||
64 | return clk_get_rate(armclk) / 1000; | ||
65 | } | ||
66 | |||
67 | static int s3c64xx_cpufreq_set_target(struct cpufreq_policy *policy, | ||
68 | unsigned int target_freq, | ||
69 | unsigned int relation) | ||
70 | { | ||
71 | int ret; | ||
72 | unsigned int i; | ||
73 | struct cpufreq_freqs freqs; | ||
74 | struct s3c64xx_dvfs *dvfs; | ||
75 | |||
76 | ret = cpufreq_frequency_table_target(policy, s3c64xx_freq_table, | ||
77 | target_freq, relation, &i); | ||
78 | if (ret != 0) | ||
79 | return ret; | ||
80 | |||
81 | freqs.cpu = 0; | ||
82 | freqs.old = clk_get_rate(armclk) / 1000; | ||
83 | freqs.new = s3c64xx_freq_table[i].frequency; | ||
84 | freqs.flags = 0; | ||
85 | dvfs = &s3c64xx_dvfs_table[s3c64xx_freq_table[i].index]; | ||
86 | |||
87 | if (freqs.old == freqs.new) | ||
88 | return 0; | ||
89 | |||
90 | pr_debug("cpufreq: Transition %d-%dkHz\n", freqs.old, freqs.new); | ||
91 | |||
92 | cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | ||
93 | |||
94 | #ifdef CONFIG_REGULATOR | ||
95 | if (vddarm && freqs.new > freqs.old) { | ||
96 | ret = regulator_set_voltage(vddarm, | ||
97 | dvfs->vddarm_min, | ||
98 | dvfs->vddarm_max); | ||
99 | if (ret != 0) { | ||
100 | pr_err("cpufreq: Failed to set VDDARM for %dkHz: %d\n", | ||
101 | freqs.new, ret); | ||
102 | goto err; | ||
103 | } | ||
104 | } | ||
105 | #endif | ||
106 | |||
107 | ret = clk_set_rate(armclk, freqs.new * 1000); | ||
108 | if (ret < 0) { | ||
109 | pr_err("cpufreq: Failed to set rate %dkHz: %d\n", | ||
110 | freqs.new, ret); | ||
111 | goto err; | ||
112 | } | ||
113 | |||
114 | #ifdef CONFIG_REGULATOR | ||
115 | if (vddarm && freqs.new < freqs.old) { | ||
116 | ret = regulator_set_voltage(vddarm, | ||
117 | dvfs->vddarm_min, | ||
118 | dvfs->vddarm_max); | ||
119 | if (ret != 0) { | ||
120 | pr_err("cpufreq: Failed to set VDDARM for %dkHz: %d\n", | ||
121 | freqs.new, ret); | ||
122 | goto err_clk; | ||
123 | } | ||
124 | } | ||
125 | #endif | ||
126 | |||
127 | cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | ||
128 | |||
129 | pr_debug("cpufreq: Set actual frequency %lukHz\n", | ||
130 | clk_get_rate(armclk) / 1000); | ||
131 | |||
132 | return 0; | ||
133 | |||
134 | err_clk: | ||
135 | if (clk_set_rate(armclk, freqs.old * 1000) < 0) | ||
136 | pr_err("Failed to restore original clock rate\n"); | ||
137 | err: | ||
138 | cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | ||
139 | |||
140 | return ret; | ||
141 | } | ||
142 | |||
143 | #ifdef CONFIG_REGULATOR | ||
144 | static void __init s3c64xx_cpufreq_constrain_voltages(void) | ||
145 | { | ||
146 | int count, v, i, found; | ||
147 | struct cpufreq_frequency_table *freq; | ||
148 | struct s3c64xx_dvfs *dvfs; | ||
149 | |||
150 | count = regulator_count_voltages(vddarm); | ||
151 | if (count < 0) { | ||
152 | pr_err("cpufreq: Unable to check supported voltages\n"); | ||
153 | return; | ||
154 | } | ||
155 | |||
156 | freq = s3c64xx_freq_table; | ||
157 | while (freq->frequency != CPUFREQ_TABLE_END) { | ||
158 | if (freq->frequency == CPUFREQ_ENTRY_INVALID) | ||
159 | continue; | ||
160 | |||
161 | dvfs = &s3c64xx_dvfs_table[freq->index]; | ||
162 | found = 0; | ||
163 | |||
164 | for (i = 0; i < count; i++) { | ||
165 | v = regulator_list_voltage(vddarm, i); | ||
166 | if (v >= dvfs->vddarm_min && v <= dvfs->vddarm_max) | ||
167 | found = 1; | ||
168 | } | ||
169 | |||
170 | if (!found) { | ||
171 | pr_debug("cpufreq: %dkHz unsupported by regulator\n", | ||
172 | freq->frequency); | ||
173 | freq->frequency = CPUFREQ_ENTRY_INVALID; | ||
174 | } | ||
175 | |||
176 | freq++; | ||
177 | } | ||
178 | } | ||
179 | #endif | ||
180 | |||
181 | static int __init s3c64xx_cpufreq_driver_init(struct cpufreq_policy *policy) | ||
182 | { | ||
183 | int ret; | ||
184 | struct cpufreq_frequency_table *freq; | ||
185 | |||
186 | if (policy->cpu != 0) | ||
187 | return -EINVAL; | ||
188 | |||
189 | if (s3c64xx_freq_table == NULL) { | ||
190 | pr_err("cpufreq: No frequency information for this CPU\n"); | ||
191 | return -ENODEV; | ||
192 | } | ||
193 | |||
194 | armclk = clk_get(NULL, "armclk"); | ||
195 | if (IS_ERR(armclk)) { | ||
196 | pr_err("cpufreq: Unable to obtain ARMCLK: %ld\n", | ||
197 | PTR_ERR(armclk)); | ||
198 | return PTR_ERR(armclk); | ||
199 | } | ||
200 | |||
201 | #ifdef CONFIG_REGULATOR | ||
202 | vddarm = regulator_get(NULL, "vddarm"); | ||
203 | if (IS_ERR(vddarm)) { | ||
204 | ret = PTR_ERR(vddarm); | ||
205 | pr_err("cpufreq: Failed to obtain VDDARM: %d\n", ret); | ||
206 | pr_err("cpufreq: Only frequency scaling available\n"); | ||
207 | vddarm = NULL; | ||
208 | } else { | ||
209 | s3c64xx_cpufreq_constrain_voltages(); | ||
210 | } | ||
211 | #endif | ||
212 | |||
213 | freq = s3c64xx_freq_table; | ||
214 | while (freq->frequency != CPUFREQ_TABLE_END) { | ||
215 | unsigned long r; | ||
216 | |||
217 | /* Check for frequencies we can generate */ | ||
218 | r = clk_round_rate(armclk, freq->frequency * 1000); | ||
219 | r /= 1000; | ||
220 | if (r != freq->frequency) | ||
221 | freq->frequency = CPUFREQ_ENTRY_INVALID; | ||
222 | |||
223 | /* If we have no regulator then assume startup | ||
224 | * frequency is the maximum we can support. */ | ||
225 | if (!vddarm && freq->frequency > s3c64xx_cpufreq_get_speed(0)) | ||
226 | freq->frequency = CPUFREQ_ENTRY_INVALID; | ||
227 | |||
228 | freq++; | ||
229 | } | ||
230 | |||
231 | policy->cur = clk_get_rate(armclk) / 1000; | ||
232 | |||
233 | /* Pick a conservative guess in ns: we'll need ~1 I2C/SPI | ||
234 | * write plus clock reprogramming. */ | ||
235 | policy->cpuinfo.transition_latency = 2 * 1000 * 1000; | ||
236 | |||
237 | ret = cpufreq_frequency_table_cpuinfo(policy, s3c64xx_freq_table); | ||
238 | if (ret != 0) { | ||
239 | pr_err("cpufreq: Failed to configure frequency table: %d\n", | ||
240 | ret); | ||
241 | regulator_put(vddarm); | ||
242 | clk_put(armclk); | ||
243 | } | ||
244 | |||
245 | return ret; | ||
246 | } | ||
247 | |||
248 | static struct cpufreq_driver s3c64xx_cpufreq_driver = { | ||
249 | .owner = THIS_MODULE, | ||
250 | .flags = 0, | ||
251 | .verify = s3c64xx_cpufreq_verify_speed, | ||
252 | .target = s3c64xx_cpufreq_set_target, | ||
253 | .get = s3c64xx_cpufreq_get_speed, | ||
254 | .init = s3c64xx_cpufreq_driver_init, | ||
255 | .name = "s3c", | ||
256 | }; | ||
257 | |||
258 | static int __init s3c64xx_cpufreq_init(void) | ||
259 | { | ||
260 | return cpufreq_register_driver(&s3c64xx_cpufreq_driver); | ||
261 | } | ||
262 | module_init(s3c64xx_cpufreq_init); | ||
diff --git a/arch/arm/plat-s3c64xx/gpiolib.c b/arch/arm/plat-s3c64xx/gpiolib.c index da7b60ee5e67..92859290ea33 100644 --- a/arch/arm/plat-s3c64xx/gpiolib.c +++ b/arch/arm/plat-s3c64xx/gpiolib.c | |||
@@ -321,6 +321,11 @@ static struct s3c_gpio_cfg gpio_2bit_cfg_eint11 = { | |||
321 | .get_pull = s3c_gpio_getpull_updown, | 321 | .get_pull = s3c_gpio_getpull_updown, |
322 | }; | 322 | }; |
323 | 323 | ||
324 | int s3c64xx_gpio2int_gpn(struct gpio_chip *chip, unsigned pin) | ||
325 | { | ||
326 | return IRQ_EINT(0) + pin; | ||
327 | } | ||
328 | |||
324 | static struct s3c_gpio_chip gpio_2bit[] = { | 329 | static struct s3c_gpio_chip gpio_2bit[] = { |
325 | { | 330 | { |
326 | .base = S3C64XX_GPF_BASE, | 331 | .base = S3C64XX_GPF_BASE, |
@@ -353,6 +358,7 @@ static struct s3c_gpio_chip gpio_2bit[] = { | |||
353 | .base = S3C64XX_GPN(0), | 358 | .base = S3C64XX_GPN(0), |
354 | .ngpio = S3C64XX_GPIO_N_NR, | 359 | .ngpio = S3C64XX_GPIO_N_NR, |
355 | .label = "GPN", | 360 | .label = "GPN", |
361 | .to_irq = s3c64xx_gpio2int_gpn, | ||
356 | }, | 362 | }, |
357 | }, { | 363 | }, { |
358 | .base = S3C64XX_GPO_BASE, | 364 | .base = S3C64XX_GPO_BASE, |
diff --git a/arch/arm/plat-s3c64xx/include/plat/regs-clock.h b/arch/arm/plat-s3c64xx/include/plat/regs-clock.h index 52836d41e333..a8777a755dfa 100644 --- a/arch/arm/plat-s3c64xx/include/plat/regs-clock.h +++ b/arch/arm/plat-s3c64xx/include/plat/regs-clock.h | |||
@@ -88,11 +88,11 @@ | |||
88 | #define S3C6400_CLKDIV2_SPI0_SHIFT (0) | 88 | #define S3C6400_CLKDIV2_SPI0_SHIFT (0) |
89 | 89 | ||
90 | /* HCLK GATE Registers */ | 90 | /* HCLK GATE Registers */ |
91 | #define S3C_CLKCON_HCLK_BUS (1<<30) | 91 | #define S3C_CLKCON_HCLK_3DSE (1<<31) |
92 | #define S3C_CLKCON_HCLK_SECUR (1<<29) | 92 | #define S3C_CLKCON_HCLK_UHOST (1<<29) |
93 | #define S3C_CLKCON_HCLK_SDMA1 (1<<28) | 93 | #define S3C_CLKCON_HCLK_SECUR (1<<28) |
94 | #define S3C_CLKCON_HCLK_SDMA2 (1<<27) | 94 | #define S3C_CLKCON_HCLK_SDMA1 (1<<27) |
95 | #define S3C_CLKCON_HCLK_UHOST (1<<26) | 95 | #define S3C_CLKCON_HCLK_SDMA0 (1<<26) |
96 | #define S3C_CLKCON_HCLK_IROM (1<<25) | 96 | #define S3C_CLKCON_HCLK_IROM (1<<25) |
97 | #define S3C_CLKCON_HCLK_DDR1 (1<<24) | 97 | #define S3C_CLKCON_HCLK_DDR1 (1<<24) |
98 | #define S3C_CLKCON_HCLK_DDR0 (1<<23) | 98 | #define S3C_CLKCON_HCLK_DDR0 (1<<23) |
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index fec64678a63a..33026eff2aa4 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types | |||
@@ -12,7 +12,7 @@ | |||
12 | # | 12 | # |
13 | # http://www.arm.linux.org.uk/developer/machines/?action=new | 13 | # http://www.arm.linux.org.uk/developer/machines/?action=new |
14 | # | 14 | # |
15 | # Last update: Fri May 29 10:14:20 2009 | 15 | # Last update: Sat Jun 20 22:28:39 2009 |
16 | # | 16 | # |
17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number | 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number |
18 | # | 18 | # |
@@ -1455,7 +1455,7 @@ gba MACH_GBA GBA 1457 | |||
1455 | h6044 MACH_H6044 H6044 1458 | 1455 | h6044 MACH_H6044 H6044 1458 |
1456 | app MACH_APP APP 1459 | 1456 | app MACH_APP APP 1459 |
1457 | tct_hammer MACH_TCT_HAMMER TCT_HAMMER 1460 | 1457 | tct_hammer MACH_TCT_HAMMER TCT_HAMMER 1460 |
1458 | herald MACH_HERMES HERMES 1461 | 1458 | herald MACH_HERALD HERALD 1461 |
1459 | artemis MACH_ARTEMIS ARTEMIS 1462 | 1459 | artemis MACH_ARTEMIS ARTEMIS 1462 |
1460 | htctitan MACH_HTCTITAN HTCTITAN 1463 | 1460 | htctitan MACH_HTCTITAN HTCTITAN 1463 |
1461 | qranium MACH_QRANIUM QRANIUM 1464 | 1461 | qranium MACH_QRANIUM QRANIUM 1464 |
@@ -2245,3 +2245,38 @@ str9 MACH_STR9 STR9 2257 | |||
2245 | omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258 | 2245 | omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258 |
2246 | simcom MACH_SIMCOM SIMCOM 2259 | 2246 | simcom MACH_SIMCOM SIMCOM 2259 |
2247 | mcwebio MACH_MCWEBIO MCWEBIO 2260 | 2247 | mcwebio MACH_MCWEBIO MCWEBIO 2260 |
2248 | omap3_phrazer MACH_OMAP3_PHRAZER OMAP3_PHRAZER 2261 | ||
2249 | darwin MACH_DARWIN DARWIN 2262 | ||
2250 | oratiscomu MACH_ORATISCOMU ORATISCOMU 2263 | ||
2251 | rtsbc20 MACH_RTSBC20 RTSBC20 2264 | ||
2252 | i780 MACH_I780 I780 2265 | ||
2253 | gemini324 MACH_GEMINI324 GEMINI324 2266 | ||
2254 | oratislan MACH_ORATISLAN ORATISLAN 2267 | ||
2255 | oratisalog MACH_ORATISALOG ORATISALOG 2268 | ||
2256 | oratismadi MACH_ORATISMADI ORATISMADI 2269 | ||
2257 | oratisot16 MACH_ORATISOT16 ORATISOT16 2270 | ||
2258 | oratisdesk MACH_ORATISDESK ORATISDESK 2271 | ||
2259 | v2p_ca9 MACH_V2P_CA9 V2P_CA9 2272 | ||
2260 | sintexo MACH_SINTEXO SINTEXO 2273 | ||
2261 | cm3389 MACH_CM3389 CM3389 2274 | ||
2262 | omap3_cio MACH_OMAP3_CIO OMAP3_CIO 2275 | ||
2263 | sgh_i900 MACH_SGH_I900 SGH_I900 2276 | ||
2264 | bst100 MACH_BST100 BST100 2277 | ||
2265 | passion MACH_PASSION PASSION 2278 | ||
2266 | indesign_at91sam MACH_INDESIGN_AT91SAM INDESIGN_AT91SAM 2279 | ||
2267 | c4_badger MACH_C4_BADGER C4_BADGER 2280 | ||
2268 | c4_viper MACH_C4_VIPER C4_VIPER 2281 | ||
2269 | d2net MACH_D2NET D2NET 2282 | ||
2270 | bigdisk MACH_BIGDISK BIGDISK 2283 | ||
2271 | notalvision MACH_NOTALVISION NOTALVISION 2284 | ||
2272 | omap3_kboc MACH_OMAP3_KBOC OMAP3_KBOC 2285 | ||
2273 | cyclone MACH_CYCLONE CYCLONE 2286 | ||
2274 | ninja MACH_NINJA NINJA 2287 | ||
2275 | at91sam9g20ek_2mmc MACH_AT91SAM9G20EK_2MMC AT91SAM9G20EK_2MMC 2288 | ||
2276 | bcmring MACH_BCMRING BCMRING 2289 | ||
2277 | resol_dl2 MACH_RESOL_DL2 RESOL_DL2 2290 | ||
2278 | ifosw MACH_IFOSW IFOSW 2291 | ||
2279 | htcrhodium MACH_HTCRHODIUM HTCRHODIUM 2292 | ||
2280 | htctopaz MACH_HTCTOPAZ HTCTOPAZ 2293 | ||
2281 | matrix504 MACH_MATRIX504 MATRIX504 2294 | ||
2282 | mrfsa MACH_MRFSA MRFSA 2295 | ||
diff --git a/arch/avr32/include/asm/thread_info.h b/arch/avr32/include/asm/thread_info.h index 4442f8d2d423..fc42de5ca209 100644 --- a/arch/avr32/include/asm/thread_info.h +++ b/arch/avr32/include/asm/thread_info.h | |||
@@ -40,7 +40,7 @@ struct thread_info { | |||
40 | .exec_domain = &default_exec_domain, \ | 40 | .exec_domain = &default_exec_domain, \ |
41 | .flags = 0, \ | 41 | .flags = 0, \ |
42 | .cpu = 0, \ | 42 | .cpu = 0, \ |
43 | .preempt_count = 1, \ | 43 | .preempt_count = INIT_PREEMPT_COUNT, \ |
44 | .restart_block = { \ | 44 | .restart_block = { \ |
45 | .fn = do_no_restart_syscall \ | 45 | .fn = do_no_restart_syscall \ |
46 | } \ | 46 | } \ |
diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c index 6e3d491184ea..b91b2044af9c 100644 --- a/arch/avr32/kernel/traps.c +++ b/arch/avr32/kernel/traps.c | |||
@@ -32,22 +32,25 @@ void NORET_TYPE die(const char *str, struct pt_regs *regs, long err) | |||
32 | spin_lock_irq(&die_lock); | 32 | spin_lock_irq(&die_lock); |
33 | bust_spinlocks(1); | 33 | bust_spinlocks(1); |
34 | 34 | ||
35 | printk(KERN_ALERT "Oops: %s, sig: %ld [#%d]\n" KERN_EMERG, | 35 | printk(KERN_ALERT "Oops: %s, sig: %ld [#%d]\n", |
36 | str, err, ++die_counter); | 36 | str, err, ++die_counter); |
37 | |||
38 | printk(KERN_EMERG); | ||
39 | |||
37 | #ifdef CONFIG_PREEMPT | 40 | #ifdef CONFIG_PREEMPT |
38 | printk("PREEMPT "); | 41 | printk(KERN_CONT "PREEMPT "); |
39 | #endif | 42 | #endif |
40 | #ifdef CONFIG_FRAME_POINTER | 43 | #ifdef CONFIG_FRAME_POINTER |
41 | printk("FRAME_POINTER "); | 44 | printk(KERN_CONT "FRAME_POINTER "); |
42 | #endif | 45 | #endif |
43 | if (current_cpu_data.features & AVR32_FEATURE_OCD) { | 46 | if (current_cpu_data.features & AVR32_FEATURE_OCD) { |
44 | unsigned long did = ocd_read(DID); | 47 | unsigned long did = ocd_read(DID); |
45 | printk("chip: 0x%03lx:0x%04lx rev %lu\n", | 48 | printk(KERN_CONT "chip: 0x%03lx:0x%04lx rev %lu\n", |
46 | (did >> 1) & 0x7ff, | 49 | (did >> 1) & 0x7ff, |
47 | (did >> 12) & 0x7fff, | 50 | (did >> 12) & 0x7fff, |
48 | (did >> 28) & 0xf); | 51 | (did >> 28) & 0xf); |
49 | } else { | 52 | } else { |
50 | printk("cpu: arch %u r%u / core %u r%u\n", | 53 | printk(KERN_CONT "cpu: arch %u r%u / core %u r%u\n", |
51 | current_cpu_data.arch_type, | 54 | current_cpu_data.arch_type, |
52 | current_cpu_data.arch_revision, | 55 | current_cpu_data.arch_revision, |
53 | current_cpu_data.cpu_type, | 56 | current_cpu_data.cpu_type, |
diff --git a/arch/avr32/mm/fault.c b/arch/avr32/mm/fault.c index 62d4abbaa654..b61d86d3debf 100644 --- a/arch/avr32/mm/fault.c +++ b/arch/avr32/mm/fault.c | |||
@@ -133,7 +133,7 @@ good_area: | |||
133 | * fault. | 133 | * fault. |
134 | */ | 134 | */ |
135 | survive: | 135 | survive: |
136 | fault = handle_mm_fault(mm, vma, address, writeaccess); | 136 | fault = handle_mm_fault(mm, vma, address, writeaccess ? FAULT_FLAG_WRITE : 0); |
137 | if (unlikely(fault & VM_FAULT_ERROR)) { | 137 | if (unlikely(fault & VM_FAULT_ERROR)) { |
138 | if (fault & VM_FAULT_OOM) | 138 | if (fault & VM_FAULT_OOM) |
139 | goto out_of_memory; | 139 | goto out_of_memory; |
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 8ea0d942cdea..7faa2f554ab1 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig | |||
@@ -274,7 +274,7 @@ config BF_REV_0_0 | |||
274 | 274 | ||
275 | config BF_REV_0_1 | 275 | config BF_REV_0_1 |
276 | bool "0.1" | 276 | bool "0.1" |
277 | depends on (BF52x || (BF54x && !BF54xM)) | 277 | depends on (BF51x || BF52x || (BF54x && !BF54xM)) |
278 | 278 | ||
279 | config BF_REV_0_2 | 279 | config BF_REV_0_2 |
280 | bool "0.2" | 280 | bool "0.2" |
@@ -358,7 +358,7 @@ config MEM_MT48LC8M32B2B5_7 | |||
358 | 358 | ||
359 | config MEM_MT48LC32M16A2TG_75 | 359 | config MEM_MT48LC32M16A2TG_75 |
360 | bool | 360 | bool |
361 | depends on (BFIN527_EZKIT || BFIN532_IP0X || BLACKSTAMP || BFIN526_EZBRD) | 361 | depends on (BFIN527_EZKIT || BFIN532_IP0X || BLACKSTAMP) |
362 | default y | 362 | default y |
363 | 363 | ||
364 | config MEM_MT48LC32M8A2_75 | 364 | config MEM_MT48LC32M8A2_75 |
@@ -366,6 +366,11 @@ config MEM_MT48LC32M8A2_75 | |||
366 | depends on (BFIN518F_EZBRD) | 366 | depends on (BFIN518F_EZBRD) |
367 | default y | 367 | default y |
368 | 368 | ||
369 | config MEM_MT48H32M16LFCJ_75 | ||
370 | bool | ||
371 | depends on (BFIN526_EZBRD) | ||
372 | default y | ||
373 | |||
369 | source "arch/blackfin/mach-bf518/Kconfig" | 374 | source "arch/blackfin/mach-bf518/Kconfig" |
370 | source "arch/blackfin/mach-bf527/Kconfig" | 375 | source "arch/blackfin/mach-bf527/Kconfig" |
371 | source "arch/blackfin/mach-bf533/Kconfig" | 376 | source "arch/blackfin/mach-bf533/Kconfig" |
@@ -623,7 +628,6 @@ choice | |||
623 | config TICKSOURCE_GPTMR0 | 628 | config TICKSOURCE_GPTMR0 |
624 | bool "Gptimer0 (SCLK domain)" | 629 | bool "Gptimer0 (SCLK domain)" |
625 | select BFIN_GPTIMERS | 630 | select BFIN_GPTIMERS |
626 | depends on !IPIPE | ||
627 | 631 | ||
628 | config TICKSOURCE_CORETMR | 632 | config TICKSOURCE_CORETMR |
629 | bool "Core timer (CCLK domain)" | 633 | bool "Core timer (CCLK domain)" |
@@ -644,6 +648,7 @@ config CYCLES_CLOCKSOURCE | |||
644 | 648 | ||
645 | config GPTMR0_CLOCKSOURCE | 649 | config GPTMR0_CLOCKSOURCE |
646 | bool "Use GPTimer0 as a clocksource (higher rating)" | 650 | bool "Use GPTimer0 as a clocksource (higher rating)" |
651 | select BFIN_GPTIMERS | ||
647 | depends on GENERIC_CLOCKEVENTS | 652 | depends on GENERIC_CLOCKEVENTS |
648 | depends on !TICKSOURCE_GPTMR0 | 653 | depends on !TICKSOURCE_GPTMR0 |
649 | 654 | ||
@@ -908,23 +913,41 @@ endchoice | |||
908 | 913 | ||
909 | 914 | ||
910 | comment "Cache Support" | 915 | comment "Cache Support" |
916 | |||
911 | config BFIN_ICACHE | 917 | config BFIN_ICACHE |
912 | bool "Enable ICACHE" | 918 | bool "Enable ICACHE" |
919 | default y | ||
920 | config BFIN_ICACHE_LOCK | ||
921 | bool "Enable Instruction Cache Locking" | ||
922 | depends on BFIN_ICACHE | ||
923 | default n | ||
924 | config BFIN_EXTMEM_ICACHEABLE | ||
925 | bool "Enable ICACHE for external memory" | ||
926 | depends on BFIN_ICACHE | ||
927 | default y | ||
928 | config BFIN_L2_ICACHEABLE | ||
929 | bool "Enable ICACHE for L2 SRAM" | ||
930 | depends on BFIN_ICACHE | ||
931 | depends on BF54x || BF561 | ||
932 | default n | ||
933 | |||
913 | config BFIN_DCACHE | 934 | config BFIN_DCACHE |
914 | bool "Enable DCACHE" | 935 | bool "Enable DCACHE" |
936 | default y | ||
915 | config BFIN_DCACHE_BANKA | 937 | config BFIN_DCACHE_BANKA |
916 | bool "Enable only 16k BankA DCACHE - BankB is SRAM" | 938 | bool "Enable only 16k BankA DCACHE - BankB is SRAM" |
917 | depends on BFIN_DCACHE && !BF531 | 939 | depends on BFIN_DCACHE && !BF531 |
918 | default n | 940 | default n |
919 | config BFIN_ICACHE_LOCK | 941 | config BFIN_EXTMEM_DCACHEABLE |
920 | bool "Enable Instruction Cache Locking" | 942 | bool "Enable DCACHE for external memory" |
921 | |||
922 | choice | ||
923 | prompt "External memory cache policy" | ||
924 | depends on BFIN_DCACHE | 943 | depends on BFIN_DCACHE |
925 | default BFIN_WB if !SMP | 944 | default y |
926 | default BFIN_WT if SMP | 945 | choice |
927 | config BFIN_WB | 946 | prompt "External memory DCACHE policy" |
947 | depends on BFIN_EXTMEM_DCACHEABLE | ||
948 | default BFIN_EXTMEM_WRITEBACK if !SMP | ||
949 | default BFIN_EXTMEM_WRITETHROUGH if SMP | ||
950 | config BFIN_EXTMEM_WRITEBACK | ||
928 | bool "Write back" | 951 | bool "Write back" |
929 | depends on !SMP | 952 | depends on !SMP |
930 | help | 953 | help |
@@ -942,7 +965,7 @@ config BFIN_WB | |||
942 | If you are unsure of the options and you want to be safe, | 965 | If you are unsure of the options and you want to be safe, |
943 | then go with Write Through. | 966 | then go with Write Through. |
944 | 967 | ||
945 | config BFIN_WT | 968 | config BFIN_EXTMEM_WRITETHROUGH |
946 | bool "Write through" | 969 | bool "Write through" |
947 | help | 970 | help |
948 | Write Back Policy: | 971 | Write Back Policy: |
@@ -961,23 +984,26 @@ config BFIN_WT | |||
961 | 984 | ||
962 | endchoice | 985 | endchoice |
963 | 986 | ||
987 | config BFIN_L2_DCACHEABLE | ||
988 | bool "Enable DCACHE for L2 SRAM" | ||
989 | depends on BFIN_DCACHE | ||
990 | depends on BF54x || BF561 | ||
991 | default n | ||
964 | choice | 992 | choice |
965 | prompt "L2 SRAM cache policy" | 993 | prompt "L2 SRAM DCACHE policy" |
966 | depends on (BF54x || BF561) | 994 | depends on BFIN_L2_DCACHEABLE |
967 | default BFIN_L2_WT | 995 | default BFIN_L2_WRITEBACK |
968 | config BFIN_L2_WB | 996 | config BFIN_L2_WRITEBACK |
969 | bool "Write back" | 997 | bool "Write back" |
970 | depends on !SMP | 998 | depends on !SMP |
971 | 999 | ||
972 | config BFIN_L2_WT | 1000 | config BFIN_L2_WRITETHROUGH |
973 | bool "Write through" | 1001 | bool "Write through" |
974 | depends on !SMP | 1002 | depends on !SMP |
975 | |||
976 | config BFIN_L2_NOT_CACHED | ||
977 | bool "Not cached" | ||
978 | |||
979 | endchoice | 1003 | endchoice |
980 | 1004 | ||
1005 | |||
1006 | comment "Memory Protection Unit" | ||
981 | config MPU | 1007 | config MPU |
982 | bool "Enable the memory protection unit (EXPERIMENTAL)" | 1008 | bool "Enable the memory protection unit (EXPERIMENTAL)" |
983 | default n | 1009 | default n |
diff --git a/arch/blackfin/boot/Makefile b/arch/blackfin/boot/Makefile index 3ab6f23561dd..fd9ccc5fea10 100644 --- a/arch/blackfin/boot/Makefile +++ b/arch/blackfin/boot/Makefile | |||
@@ -13,7 +13,7 @@ extra-y += vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma | |||
13 | 13 | ||
14 | quiet_cmd_uimage = UIMAGE $@ | 14 | quiet_cmd_uimage = UIMAGE $@ |
15 | cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A $(ARCH) -O linux -T kernel \ | 15 | cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A $(ARCH) -O linux -T kernel \ |
16 | -C $(2) -n 'Linux-$(KERNELRELEASE)' -a $(CONFIG_BOOT_LOAD) \ | 16 | -C $(2) -n '$(MACHINE)-$(KERNELRELEASE)' -a $(CONFIG_BOOT_LOAD) \ |
17 | -e $(shell $(NM) vmlinux | awk '$$NF == "__start" {print $$1}') \ | 17 | -e $(shell $(NM) vmlinux | awk '$$NF == "__start" {print $$1}') \ |
18 | -d $< $@ | 18 | -d $< $@ |
19 | 19 | ||
diff --git a/arch/blackfin/configs/BF518F-EZBRD_defconfig b/arch/blackfin/configs/BF518F-EZBRD_defconfig index baec1337f282..dcfb4889559a 100644 --- a/arch/blackfin/configs/BF518F-EZBRD_defconfig +++ b/arch/blackfin/configs/BF518F-EZBRD_defconfig | |||
@@ -326,11 +326,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
326 | # Cache Support | 326 | # Cache Support |
327 | # | 327 | # |
328 | CONFIG_BFIN_ICACHE=y | 328 | CONFIG_BFIN_ICACHE=y |
329 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
329 | CONFIG_BFIN_DCACHE=y | 330 | CONFIG_BFIN_DCACHE=y |
330 | # CONFIG_BFIN_DCACHE_BANKA is not set | 331 | # CONFIG_BFIN_DCACHE_BANKA is not set |
331 | # CONFIG_BFIN_ICACHE_LOCK is not set | 332 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
332 | CONFIG_BFIN_WB=y | 333 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
333 | # CONFIG_BFIN_WT is not set | 334 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
335 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
336 | |||
337 | # | ||
338 | # Memory Protection Unit | ||
339 | # | ||
334 | # CONFIG_MPU is not set | 340 | # CONFIG_MPU is not set |
335 | 341 | ||
336 | # | 342 | # |
@@ -413,11 +419,11 @@ CONFIG_IP_PNP=y | |||
413 | # CONFIG_INET_IPCOMP is not set | 419 | # CONFIG_INET_IPCOMP is not set |
414 | # CONFIG_INET_XFRM_TUNNEL is not set | 420 | # CONFIG_INET_XFRM_TUNNEL is not set |
415 | # CONFIG_INET_TUNNEL is not set | 421 | # CONFIG_INET_TUNNEL is not set |
416 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 422 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
417 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 423 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
418 | CONFIG_INET_XFRM_MODE_BEET=y | 424 | # CONFIG_INET_XFRM_MODE_BEET is not set |
419 | # CONFIG_INET_LRO is not set | 425 | # CONFIG_INET_LRO is not set |
420 | CONFIG_INET_DIAG=y | 426 | # CONFIG_INET_DIAG is not set |
421 | CONFIG_INET_TCP_DIAG=y | 427 | CONFIG_INET_TCP_DIAG=y |
422 | # CONFIG_TCP_CONG_ADVANCED is not set | 428 | # CONFIG_TCP_CONG_ADVANCED is not set |
423 | CONFIG_TCP_CONG_CUBIC=y | 429 | CONFIG_TCP_CONG_CUBIC=y |
@@ -916,7 +922,7 @@ CONFIG_MMC_BLOCK_BOUNCE=y | |||
916 | # CONFIG_MMC_SDHCI is not set | 922 | # CONFIG_MMC_SDHCI is not set |
917 | CONFIG_SDH_BFIN=m | 923 | CONFIG_SDH_BFIN=m |
918 | CONFIG_SDH_BFIN_MISSING_CMD_PULLUP_WORKAROUND=y | 924 | CONFIG_SDH_BFIN_MISSING_CMD_PULLUP_WORKAROUND=y |
919 | CONFIG_SDH_BFIN_ENABLE_SDIO_IRQ=y | 925 | # CONFIG_SDH_BFIN_ENABLE_SDIO_IRQ is not set |
920 | # CONFIG_MMC_SPI is not set | 926 | # CONFIG_MMC_SPI is not set |
921 | # CONFIG_MEMSTICK is not set | 927 | # CONFIG_MEMSTICK is not set |
922 | # CONFIG_NEW_LEDS is not set | 928 | # CONFIG_NEW_LEDS is not set |
@@ -1147,7 +1153,7 @@ CONFIG_SCHED_DEBUG=y | |||
1147 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1153 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1148 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1154 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1149 | # CONFIG_DEBUG_KOBJECT is not set | 1155 | # CONFIG_DEBUG_KOBJECT is not set |
1150 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1156 | CONFIG_DEBUG_BUGVERBOSE=y |
1151 | CONFIG_DEBUG_INFO=y | 1157 | CONFIG_DEBUG_INFO=y |
1152 | # CONFIG_DEBUG_VM is not set | 1158 | # CONFIG_DEBUG_VM is not set |
1153 | # CONFIG_DEBUG_WRITECOUNT is not set | 1159 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/BF526-EZBRD_defconfig b/arch/blackfin/configs/BF526-EZBRD_defconfig index c06262e41f7c..48a3a7a9099c 100644 --- a/arch/blackfin/configs/BF526-EZBRD_defconfig +++ b/arch/blackfin/configs/BF526-EZBRD_defconfig | |||
@@ -331,16 +331,18 @@ CONFIG_DMA_UNCACHED_1M=y | |||
331 | # Cache Support | 331 | # Cache Support |
332 | # | 332 | # |
333 | CONFIG_BFIN_ICACHE=y | 333 | CONFIG_BFIN_ICACHE=y |
334 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
334 | CONFIG_BFIN_DCACHE=y | 335 | CONFIG_BFIN_DCACHE=y |
335 | # CONFIG_BFIN_DCACHE_BANKA is not set | 336 | # CONFIG_BFIN_DCACHE_BANKA is not set |
336 | # CONFIG_BFIN_ICACHE_LOCK is not set | 337 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
337 | CONFIG_BFIN_WB=y | 338 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
338 | # CONFIG_BFIN_WT is not set | 339 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
339 | # CONFIG_MPU is not set | 340 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set |
340 | 341 | ||
341 | # | 342 | # |
342 | # Asynchonous Memory Configuration | 343 | # Memory Protection Unit |
343 | # | 344 | # |
345 | # CONFIG_MPU is not set | ||
344 | 346 | ||
345 | # | 347 | # |
346 | # EBIU_AMGCTL Global Control | 348 | # EBIU_AMGCTL Global Control |
@@ -418,11 +420,11 @@ CONFIG_IP_PNP=y | |||
418 | # CONFIG_INET_IPCOMP is not set | 420 | # CONFIG_INET_IPCOMP is not set |
419 | # CONFIG_INET_XFRM_TUNNEL is not set | 421 | # CONFIG_INET_XFRM_TUNNEL is not set |
420 | # CONFIG_INET_TUNNEL is not set | 422 | # CONFIG_INET_TUNNEL is not set |
421 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 423 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
422 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 424 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
423 | CONFIG_INET_XFRM_MODE_BEET=y | 425 | # CONFIG_INET_XFRM_MODE_BEET is not set |
424 | # CONFIG_INET_LRO is not set | 426 | # CONFIG_INET_LRO is not set |
425 | CONFIG_INET_DIAG=y | 427 | # CONFIG_INET_DIAG is not set |
426 | CONFIG_INET_TCP_DIAG=y | 428 | CONFIG_INET_TCP_DIAG=y |
427 | # CONFIG_TCP_CONG_ADVANCED is not set | 429 | # CONFIG_TCP_CONG_ADVANCED is not set |
428 | CONFIG_TCP_CONG_CUBIC=y | 430 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1424,7 +1426,7 @@ CONFIG_SCHED_DEBUG=y | |||
1424 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1426 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1425 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1427 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1426 | # CONFIG_DEBUG_KOBJECT is not set | 1428 | # CONFIG_DEBUG_KOBJECT is not set |
1427 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1429 | CONFIG_DEBUG_BUGVERBOSE=y |
1428 | CONFIG_DEBUG_INFO=y | 1430 | CONFIG_DEBUG_INFO=y |
1429 | # CONFIG_DEBUG_VM is not set | 1431 | # CONFIG_DEBUG_VM is not set |
1430 | # CONFIG_DEBUG_WRITECOUNT is not set | 1432 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/BF527-EZKIT_defconfig b/arch/blackfin/configs/BF527-EZKIT_defconfig index e9175c608aa7..dd8352791daf 100644 --- a/arch/blackfin/configs/BF527-EZKIT_defconfig +++ b/arch/blackfin/configs/BF527-EZKIT_defconfig | |||
@@ -331,11 +331,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
331 | # Cache Support | 331 | # Cache Support |
332 | # | 332 | # |
333 | CONFIG_BFIN_ICACHE=y | 333 | CONFIG_BFIN_ICACHE=y |
334 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
334 | CONFIG_BFIN_DCACHE=y | 335 | CONFIG_BFIN_DCACHE=y |
335 | # CONFIG_BFIN_DCACHE_BANKA is not set | 336 | # CONFIG_BFIN_DCACHE_BANKA is not set |
336 | # CONFIG_BFIN_ICACHE_LOCK is not set | 337 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
337 | CONFIG_BFIN_WB=y | 338 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
338 | # CONFIG_BFIN_WT is not set | 339 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
340 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
341 | |||
342 | # | ||
343 | # Memory Protection Unit | ||
344 | # | ||
339 | # CONFIG_MPU is not set | 345 | # CONFIG_MPU is not set |
340 | 346 | ||
341 | # | 347 | # |
@@ -418,11 +424,11 @@ CONFIG_IP_PNP=y | |||
418 | # CONFIG_INET_IPCOMP is not set | 424 | # CONFIG_INET_IPCOMP is not set |
419 | # CONFIG_INET_XFRM_TUNNEL is not set | 425 | # CONFIG_INET_XFRM_TUNNEL is not set |
420 | # CONFIG_INET_TUNNEL is not set | 426 | # CONFIG_INET_TUNNEL is not set |
421 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 427 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
422 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 428 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
423 | CONFIG_INET_XFRM_MODE_BEET=y | 429 | # CONFIG_INET_XFRM_MODE_BEET is not set |
424 | # CONFIG_INET_LRO is not set | 430 | # CONFIG_INET_LRO is not set |
425 | CONFIG_INET_DIAG=y | 431 | # CONFIG_INET_DIAG is not set |
426 | CONFIG_INET_TCP_DIAG=y | 432 | CONFIG_INET_TCP_DIAG=y |
427 | # CONFIG_TCP_CONG_ADVANCED is not set | 433 | # CONFIG_TCP_CONG_ADVANCED is not set |
428 | CONFIG_TCP_CONG_CUBIC=y | 434 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1505,7 +1511,7 @@ CONFIG_SCHED_DEBUG=y | |||
1505 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1511 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1506 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1512 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1507 | # CONFIG_DEBUG_KOBJECT is not set | 1513 | # CONFIG_DEBUG_KOBJECT is not set |
1508 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1514 | CONFIG_DEBUG_BUGVERBOSE=y |
1509 | CONFIG_DEBUG_INFO=y | 1515 | CONFIG_DEBUG_INFO=y |
1510 | # CONFIG_DEBUG_VM is not set | 1516 | # CONFIG_DEBUG_VM is not set |
1511 | # CONFIG_DEBUG_WRITECOUNT is not set | 1517 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/BF533-EZKIT_defconfig b/arch/blackfin/configs/BF533-EZKIT_defconfig index 5aa63bafdd62..4c044805cb5c 100644 --- a/arch/blackfin/configs/BF533-EZKIT_defconfig +++ b/arch/blackfin/configs/BF533-EZKIT_defconfig | |||
@@ -292,12 +292,21 @@ CONFIG_DMA_UNCACHED_1M=y | |||
292 | # | 292 | # |
293 | # Cache Support | 293 | # Cache Support |
294 | # | 294 | # |
295 | # | ||
296 | # Cache Support | ||
297 | # | ||
295 | CONFIG_BFIN_ICACHE=y | 298 | CONFIG_BFIN_ICACHE=y |
299 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
296 | CONFIG_BFIN_DCACHE=y | 300 | CONFIG_BFIN_DCACHE=y |
297 | # CONFIG_BFIN_DCACHE_BANKA is not set | 301 | # CONFIG_BFIN_DCACHE_BANKA is not set |
298 | # CONFIG_BFIN_ICACHE_LOCK is not set | 302 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
299 | CONFIG_BFIN_WB=y | 303 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
300 | # CONFIG_BFIN_WT is not set | 304 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
305 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
306 | |||
307 | # | ||
308 | # Memory Protection Unit | ||
309 | # | ||
301 | # CONFIG_MPU is not set | 310 | # CONFIG_MPU is not set |
302 | 311 | ||
303 | # | 312 | # |
@@ -391,11 +400,11 @@ CONFIG_IP_PNP=y | |||
391 | # CONFIG_INET_IPCOMP is not set | 400 | # CONFIG_INET_IPCOMP is not set |
392 | # CONFIG_INET_XFRM_TUNNEL is not set | 401 | # CONFIG_INET_XFRM_TUNNEL is not set |
393 | # CONFIG_INET_TUNNEL is not set | 402 | # CONFIG_INET_TUNNEL is not set |
394 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 403 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
395 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 404 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
396 | CONFIG_INET_XFRM_MODE_BEET=y | 405 | # CONFIG_INET_XFRM_MODE_BEET is not set |
397 | # CONFIG_INET_LRO is not set | 406 | # CONFIG_INET_LRO is not set |
398 | CONFIG_INET_DIAG=y | 407 | # CONFIG_INET_DIAG is not set |
399 | CONFIG_INET_TCP_DIAG=y | 408 | CONFIG_INET_TCP_DIAG=y |
400 | # CONFIG_TCP_CONG_ADVANCED is not set | 409 | # CONFIG_TCP_CONG_ADVANCED is not set |
401 | CONFIG_TCP_CONG_CUBIC=y | 410 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1052,7 +1061,7 @@ CONFIG_SCHED_DEBUG=y | |||
1052 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1061 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1053 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1062 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1054 | # CONFIG_DEBUG_KOBJECT is not set | 1063 | # CONFIG_DEBUG_KOBJECT is not set |
1055 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1064 | CONFIG_DEBUG_BUGVERBOSE=y |
1056 | CONFIG_DEBUG_INFO=y | 1065 | CONFIG_DEBUG_INFO=y |
1057 | # CONFIG_DEBUG_VM is not set | 1066 | # CONFIG_DEBUG_VM is not set |
1058 | # CONFIG_DEBUG_WRITECOUNT is not set | 1067 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/BF533-STAMP_defconfig b/arch/blackfin/configs/BF533-STAMP_defconfig index fed25329e13c..c99bbcd09a68 100644 --- a/arch/blackfin/configs/BF533-STAMP_defconfig +++ b/arch/blackfin/configs/BF533-STAMP_defconfig | |||
@@ -293,11 +293,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
293 | # Cache Support | 293 | # Cache Support |
294 | # | 294 | # |
295 | CONFIG_BFIN_ICACHE=y | 295 | CONFIG_BFIN_ICACHE=y |
296 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
296 | CONFIG_BFIN_DCACHE=y | 297 | CONFIG_BFIN_DCACHE=y |
297 | # CONFIG_BFIN_DCACHE_BANKA is not set | 298 | # CONFIG_BFIN_DCACHE_BANKA is not set |
298 | # CONFIG_BFIN_ICACHE_LOCK is not set | 299 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
299 | CONFIG_BFIN_WB=y | 300 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
300 | # CONFIG_BFIN_WT is not set | 301 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
302 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
303 | |||
304 | # | ||
305 | # Memory Protection Unit | ||
306 | # | ||
301 | # CONFIG_MPU is not set | 307 | # CONFIG_MPU is not set |
302 | 308 | ||
303 | # | 309 | # |
@@ -391,11 +397,11 @@ CONFIG_IP_PNP=y | |||
391 | # CONFIG_INET_IPCOMP is not set | 397 | # CONFIG_INET_IPCOMP is not set |
392 | # CONFIG_INET_XFRM_TUNNEL is not set | 398 | # CONFIG_INET_XFRM_TUNNEL is not set |
393 | # CONFIG_INET_TUNNEL is not set | 399 | # CONFIG_INET_TUNNEL is not set |
394 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 400 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
395 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 401 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
396 | CONFIG_INET_XFRM_MODE_BEET=y | 402 | # CONFIG_INET_XFRM_MODE_BEET is not set |
397 | # CONFIG_INET_LRO is not set | 403 | # CONFIG_INET_LRO is not set |
398 | CONFIG_INET_DIAG=y | 404 | # CONFIG_INET_DIAG is not set |
399 | CONFIG_INET_TCP_DIAG=y | 405 | CONFIG_INET_TCP_DIAG=y |
400 | # CONFIG_TCP_CONG_ADVANCED is not set | 406 | # CONFIG_TCP_CONG_ADVANCED is not set |
401 | CONFIG_TCP_CONG_CUBIC=y | 407 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1216,7 +1222,7 @@ CONFIG_SCHED_DEBUG=y | |||
1216 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1222 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1217 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1223 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1218 | # CONFIG_DEBUG_KOBJECT is not set | 1224 | # CONFIG_DEBUG_KOBJECT is not set |
1219 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1225 | CONFIG_DEBUG_BUGVERBOSE=y |
1220 | CONFIG_DEBUG_INFO=y | 1226 | CONFIG_DEBUG_INFO=y |
1221 | # CONFIG_DEBUG_VM is not set | 1227 | # CONFIG_DEBUG_VM is not set |
1222 | # CONFIG_DEBUG_WRITECOUNT is not set | 1228 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/BF537-STAMP_defconfig b/arch/blackfin/configs/BF537-STAMP_defconfig index f9ac20d55799..092ffda80e68 100644 --- a/arch/blackfin/configs/BF537-STAMP_defconfig +++ b/arch/blackfin/configs/BF537-STAMP_defconfig | |||
@@ -300,11 +300,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
300 | # Cache Support | 300 | # Cache Support |
301 | # | 301 | # |
302 | CONFIG_BFIN_ICACHE=y | 302 | CONFIG_BFIN_ICACHE=y |
303 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
303 | CONFIG_BFIN_DCACHE=y | 304 | CONFIG_BFIN_DCACHE=y |
304 | # CONFIG_BFIN_DCACHE_BANKA is not set | 305 | # CONFIG_BFIN_DCACHE_BANKA is not set |
305 | # CONFIG_BFIN_ICACHE_LOCK is not set | 306 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
306 | CONFIG_BFIN_WB=y | 307 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
307 | # CONFIG_BFIN_WT is not set | 308 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
309 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
310 | |||
311 | # | ||
312 | # Memory Protection Unit | ||
313 | # | ||
308 | # CONFIG_MPU is not set | 314 | # CONFIG_MPU is not set |
309 | 315 | ||
310 | # | 316 | # |
@@ -399,11 +405,11 @@ CONFIG_IP_PNP=y | |||
399 | # CONFIG_INET_IPCOMP is not set | 405 | # CONFIG_INET_IPCOMP is not set |
400 | # CONFIG_INET_XFRM_TUNNEL is not set | 406 | # CONFIG_INET_XFRM_TUNNEL is not set |
401 | # CONFIG_INET_TUNNEL is not set | 407 | # CONFIG_INET_TUNNEL is not set |
402 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 408 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
403 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 409 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
404 | CONFIG_INET_XFRM_MODE_BEET=y | 410 | # CONFIG_INET_XFRM_MODE_BEET is not set |
405 | # CONFIG_INET_LRO is not set | 411 | # CONFIG_INET_LRO is not set |
406 | CONFIG_INET_DIAG=y | 412 | # CONFIG_INET_DIAG is not set |
407 | CONFIG_INET_TCP_DIAG=y | 413 | CONFIG_INET_TCP_DIAG=y |
408 | # CONFIG_TCP_CONG_ADVANCED is not set | 414 | # CONFIG_TCP_CONG_ADVANCED is not set |
409 | CONFIG_TCP_CONG_CUBIC=y | 415 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1269,7 +1275,7 @@ CONFIG_SCHED_DEBUG=y | |||
1269 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1275 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1270 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1276 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1271 | # CONFIG_DEBUG_KOBJECT is not set | 1277 | # CONFIG_DEBUG_KOBJECT is not set |
1272 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1278 | CONFIG_DEBUG_BUGVERBOSE=y |
1273 | CONFIG_DEBUG_INFO=y | 1279 | CONFIG_DEBUG_INFO=y |
1274 | # CONFIG_DEBUG_VM is not set | 1280 | # CONFIG_DEBUG_VM is not set |
1275 | # CONFIG_DEBUG_WRITECOUNT is not set | 1281 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/BF538-EZKIT_defconfig b/arch/blackfin/configs/BF538-EZKIT_defconfig index ee98e227b887..fa698a89f6fe 100644 --- a/arch/blackfin/configs/BF538-EZKIT_defconfig +++ b/arch/blackfin/configs/BF538-EZKIT_defconfig | |||
@@ -311,11 +311,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
311 | # Cache Support | 311 | # Cache Support |
312 | # | 312 | # |
313 | CONFIG_BFIN_ICACHE=y | 313 | CONFIG_BFIN_ICACHE=y |
314 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
314 | CONFIG_BFIN_DCACHE=y | 315 | CONFIG_BFIN_DCACHE=y |
315 | # CONFIG_BFIN_DCACHE_BANKA is not set | 316 | # CONFIG_BFIN_DCACHE_BANKA is not set |
316 | # CONFIG_BFIN_ICACHE_LOCK is not set | 317 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
317 | CONFIG_BFIN_WB=y | 318 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
318 | # CONFIG_BFIN_WT is not set | 319 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
320 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
321 | |||
322 | # | ||
323 | # Memory Protection Unit | ||
324 | # | ||
319 | # CONFIG_MPU is not set | 325 | # CONFIG_MPU is not set |
320 | 326 | ||
321 | # | 327 | # |
@@ -398,11 +404,11 @@ CONFIG_IP_PNP=y | |||
398 | # CONFIG_INET_IPCOMP is not set | 404 | # CONFIG_INET_IPCOMP is not set |
399 | # CONFIG_INET_XFRM_TUNNEL is not set | 405 | # CONFIG_INET_XFRM_TUNNEL is not set |
400 | # CONFIG_INET_TUNNEL is not set | 406 | # CONFIG_INET_TUNNEL is not set |
401 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 407 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
402 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 408 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
403 | CONFIG_INET_XFRM_MODE_BEET=y | 409 | # CONFIG_INET_XFRM_MODE_BEET is not set |
404 | # CONFIG_INET_LRO is not set | 410 | # CONFIG_INET_LRO is not set |
405 | CONFIG_INET_DIAG=y | 411 | # CONFIG_INET_DIAG is not set |
406 | CONFIG_INET_TCP_DIAG=y | 412 | CONFIG_INET_TCP_DIAG=y |
407 | # CONFIG_TCP_CONG_ADVANCED is not set | 413 | # CONFIG_TCP_CONG_ADVANCED is not set |
408 | CONFIG_TCP_CONG_CUBIC=y | 414 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1203,7 +1209,7 @@ CONFIG_SCHED_DEBUG=y | |||
1203 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1209 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1204 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1210 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1205 | # CONFIG_DEBUG_KOBJECT is not set | 1211 | # CONFIG_DEBUG_KOBJECT is not set |
1206 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1212 | CONFIG_DEBUG_BUGVERBOSE=y |
1207 | CONFIG_DEBUG_INFO=y | 1213 | CONFIG_DEBUG_INFO=y |
1208 | # CONFIG_DEBUG_VM is not set | 1214 | # CONFIG_DEBUG_VM is not set |
1209 | # CONFIG_DEBUG_WRITECOUNT is not set | 1215 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/BF548-EZKIT_defconfig b/arch/blackfin/configs/BF548-EZKIT_defconfig index deeabef8ab80..b3d3cab81cfe 100644 --- a/arch/blackfin/configs/BF548-EZKIT_defconfig +++ b/arch/blackfin/configs/BF548-EZKIT_defconfig | |||
@@ -366,14 +366,19 @@ CONFIG_DMA_UNCACHED_2M=y | |||
366 | # Cache Support | 366 | # Cache Support |
367 | # | 367 | # |
368 | CONFIG_BFIN_ICACHE=y | 368 | CONFIG_BFIN_ICACHE=y |
369 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
369 | CONFIG_BFIN_DCACHE=y | 370 | CONFIG_BFIN_DCACHE=y |
370 | # CONFIG_BFIN_DCACHE_BANKA is not set | 371 | # CONFIG_BFIN_DCACHE_BANKA is not set |
371 | # CONFIG_BFIN_ICACHE_LOCK is not set | 372 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
372 | CONFIG_BFIN_WB=y | 373 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
373 | # CONFIG_BFIN_WT is not set | 374 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
374 | # CONFIG_BFIN_L2_WB is not set | 375 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set |
375 | CONFIG_BFIN_L2_WT=y | 376 | # CONFIG_BFIN_L2_ICACHEABLE is not set |
376 | # CONFIG_BFIN_L2_NOT_CACHED is not set | 377 | # CONFIG_BFIN_L2_DCACHEABLE is not set |
378 | |||
379 | # | ||
380 | # Memory Protection Unit | ||
381 | # | ||
377 | # CONFIG_MPU is not set | 382 | # CONFIG_MPU is not set |
378 | 383 | ||
379 | # | 384 | # |
@@ -459,11 +464,11 @@ CONFIG_IP_PNP=y | |||
459 | # CONFIG_INET_IPCOMP is not set | 464 | # CONFIG_INET_IPCOMP is not set |
460 | # CONFIG_INET_XFRM_TUNNEL is not set | 465 | # CONFIG_INET_XFRM_TUNNEL is not set |
461 | # CONFIG_INET_TUNNEL is not set | 466 | # CONFIG_INET_TUNNEL is not set |
462 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 467 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
463 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 468 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
464 | CONFIG_INET_XFRM_MODE_BEET=y | 469 | # CONFIG_INET_XFRM_MODE_BEET is not set |
465 | # CONFIG_INET_LRO is not set | 470 | # CONFIG_INET_LRO is not set |
466 | CONFIG_INET_DIAG=y | 471 | # CONFIG_INET_DIAG is not set |
467 | CONFIG_INET_TCP_DIAG=y | 472 | CONFIG_INET_TCP_DIAG=y |
468 | # CONFIG_TCP_CONG_ADVANCED is not set | 473 | # CONFIG_TCP_CONG_ADVANCED is not set |
469 | CONFIG_TCP_CONG_CUBIC=y | 474 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1606,7 +1611,7 @@ CONFIG_SCHED_DEBUG=y | |||
1606 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1611 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1607 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1612 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1608 | # CONFIG_DEBUG_KOBJECT is not set | 1613 | # CONFIG_DEBUG_KOBJECT is not set |
1609 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1614 | CONFIG_DEBUG_BUGVERBOSE=y |
1610 | CONFIG_DEBUG_INFO=y | 1615 | CONFIG_DEBUG_INFO=y |
1611 | # CONFIG_DEBUG_VM is not set | 1616 | # CONFIG_DEBUG_VM is not set |
1612 | # CONFIG_DEBUG_WRITECOUNT is not set | 1617 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/BF561-EZKIT_defconfig b/arch/blackfin/configs/BF561-EZKIT_defconfig index dcfbe2e2931e..0313cd1d9824 100644 --- a/arch/blackfin/configs/BF561-EZKIT_defconfig +++ b/arch/blackfin/configs/BF561-EZKIT_defconfig | |||
@@ -331,14 +331,19 @@ CONFIG_DMA_UNCACHED_1M=y | |||
331 | # Cache Support | 331 | # Cache Support |
332 | # | 332 | # |
333 | CONFIG_BFIN_ICACHE=y | 333 | CONFIG_BFIN_ICACHE=y |
334 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
334 | CONFIG_BFIN_DCACHE=y | 335 | CONFIG_BFIN_DCACHE=y |
335 | # CONFIG_BFIN_DCACHE_BANKA is not set | 336 | # CONFIG_BFIN_DCACHE_BANKA is not set |
336 | # CONFIG_BFIN_ICACHE_LOCK is not set | 337 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
337 | CONFIG_BFIN_WB=y | 338 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
338 | # CONFIG_BFIN_WT is not set | 339 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
339 | # CONFIG_BFIN_L2_WB is not set | 340 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set |
340 | CONFIG_BFIN_L2_WT=y | 341 | # CONFIG_BFIN_L2_ICACHEABLE is not set |
341 | # CONFIG_BFIN_L2_NOT_CACHED is not set | 342 | # CONFIG_BFIN_L2_DCACHEABLE is not set |
343 | |||
344 | # | ||
345 | # Memory Protection Unit | ||
346 | # | ||
342 | # CONFIG_MPU is not set | 347 | # CONFIG_MPU is not set |
343 | 348 | ||
344 | # | 349 | # |
@@ -425,11 +430,11 @@ CONFIG_IP_PNP=y | |||
425 | # CONFIG_INET_IPCOMP is not set | 430 | # CONFIG_INET_IPCOMP is not set |
426 | # CONFIG_INET_XFRM_TUNNEL is not set | 431 | # CONFIG_INET_XFRM_TUNNEL is not set |
427 | # CONFIG_INET_TUNNEL is not set | 432 | # CONFIG_INET_TUNNEL is not set |
428 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 433 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
429 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 434 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
430 | CONFIG_INET_XFRM_MODE_BEET=y | 435 | # CONFIG_INET_XFRM_MODE_BEET is not set |
431 | # CONFIG_INET_LRO is not set | 436 | # CONFIG_INET_LRO is not set |
432 | CONFIG_INET_DIAG=y | 437 | # CONFIG_INET_DIAG is not set |
433 | CONFIG_INET_TCP_DIAG=y | 438 | CONFIG_INET_TCP_DIAG=y |
434 | # CONFIG_TCP_CONG_ADVANCED is not set | 439 | # CONFIG_TCP_CONG_ADVANCED is not set |
435 | CONFIG_TCP_CONG_CUBIC=y | 440 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1044,7 +1049,7 @@ CONFIG_SCHED_DEBUG=y | |||
1044 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1049 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1045 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1050 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1046 | # CONFIG_DEBUG_KOBJECT is not set | 1051 | # CONFIG_DEBUG_KOBJECT is not set |
1047 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1052 | CONFIG_DEBUG_BUGVERBOSE=y |
1048 | CONFIG_DEBUG_INFO=y | 1053 | CONFIG_DEBUG_INFO=y |
1049 | # CONFIG_DEBUG_VM is not set | 1054 | # CONFIG_DEBUG_VM is not set |
1050 | # CONFIG_DEBUG_WRITECOUNT is not set | 1055 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/BlackStamp_defconfig b/arch/blackfin/configs/BlackStamp_defconfig index 174c578b8ec4..5d944ffd4ab0 100644 --- a/arch/blackfin/configs/BlackStamp_defconfig +++ b/arch/blackfin/configs/BlackStamp_defconfig | |||
@@ -285,11 +285,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
285 | # Cache Support | 285 | # Cache Support |
286 | # | 286 | # |
287 | CONFIG_BFIN_ICACHE=y | 287 | CONFIG_BFIN_ICACHE=y |
288 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
288 | CONFIG_BFIN_DCACHE=y | 289 | CONFIG_BFIN_DCACHE=y |
289 | # CONFIG_BFIN_DCACHE_BANKA is not set | 290 | # CONFIG_BFIN_DCACHE_BANKA is not set |
290 | # CONFIG_BFIN_ICACHE_LOCK is not set | 291 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
291 | CONFIG_BFIN_WB=y | 292 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
292 | # CONFIG_BFIN_WT is not set | 293 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
294 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
295 | |||
296 | # | ||
297 | # Memory Protection Unit | ||
298 | # | ||
293 | # CONFIG_MPU is not set | 299 | # CONFIG_MPU is not set |
294 | 300 | ||
295 | # | 301 | # |
diff --git a/arch/blackfin/configs/CM-BF527_defconfig b/arch/blackfin/configs/CM-BF527_defconfig index e17875e8abe8..648a31d01bf4 100644 --- a/arch/blackfin/configs/CM-BF527_defconfig +++ b/arch/blackfin/configs/CM-BF527_defconfig | |||
@@ -329,11 +329,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
329 | # Cache Support | 329 | # Cache Support |
330 | # | 330 | # |
331 | CONFIG_BFIN_ICACHE=y | 331 | CONFIG_BFIN_ICACHE=y |
332 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
332 | CONFIG_BFIN_DCACHE=y | 333 | CONFIG_BFIN_DCACHE=y |
333 | # CONFIG_BFIN_DCACHE_BANKA is not set | 334 | # CONFIG_BFIN_DCACHE_BANKA is not set |
334 | # CONFIG_BFIN_ICACHE_LOCK is not set | 335 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
335 | CONFIG_BFIN_WB=y | 336 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
336 | # CONFIG_BFIN_WT is not set | 337 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
338 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
339 | |||
340 | # | ||
341 | # Memory Protection Unit | ||
342 | # | ||
337 | # CONFIG_MPU is not set | 343 | # CONFIG_MPU is not set |
338 | 344 | ||
339 | # | 345 | # |
@@ -417,11 +423,11 @@ CONFIG_IP_PNP=y | |||
417 | # CONFIG_INET_IPCOMP is not set | 423 | # CONFIG_INET_IPCOMP is not set |
418 | # CONFIG_INET_XFRM_TUNNEL is not set | 424 | # CONFIG_INET_XFRM_TUNNEL is not set |
419 | # CONFIG_INET_TUNNEL is not set | 425 | # CONFIG_INET_TUNNEL is not set |
420 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 426 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
421 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 427 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
422 | CONFIG_INET_XFRM_MODE_BEET=y | 428 | # CONFIG_INET_XFRM_MODE_BEET is not set |
423 | # CONFIG_INET_LRO is not set | 429 | # CONFIG_INET_LRO is not set |
424 | CONFIG_INET_DIAG=y | 430 | # CONFIG_INET_DIAG is not set |
425 | CONFIG_INET_TCP_DIAG=y | 431 | CONFIG_INET_TCP_DIAG=y |
426 | # CONFIG_TCP_CONG_ADVANCED is not set | 432 | # CONFIG_TCP_CONG_ADVANCED is not set |
427 | CONFIG_TCP_CONG_CUBIC=y | 433 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1246,7 +1252,7 @@ CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | |||
1246 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1252 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1247 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1253 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1248 | # CONFIG_DEBUG_KOBJECT is not set | 1254 | # CONFIG_DEBUG_KOBJECT is not set |
1249 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1255 | CONFIG_DEBUG_BUGVERBOSE=y |
1250 | # CONFIG_DEBUG_INFO is not set | 1256 | # CONFIG_DEBUG_INFO is not set |
1251 | # CONFIG_DEBUG_VM is not set | 1257 | # CONFIG_DEBUG_VM is not set |
1252 | # CONFIG_DEBUG_WRITECOUNT is not set | 1258 | # CONFIG_DEBUG_WRITECOUNT is not set |
diff --git a/arch/blackfin/configs/CM-BF533_defconfig b/arch/blackfin/configs/CM-BF533_defconfig index fafd95e84b28..ae665b93b875 100644 --- a/arch/blackfin/configs/CM-BF533_defconfig +++ b/arch/blackfin/configs/CM-BF533_defconfig | |||
@@ -262,12 +262,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
262 | # Cache Support | 262 | # Cache Support |
263 | # | 263 | # |
264 | CONFIG_BFIN_ICACHE=y | 264 | CONFIG_BFIN_ICACHE=y |
265 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
265 | CONFIG_BFIN_DCACHE=y | 266 | CONFIG_BFIN_DCACHE=y |
266 | # CONFIG_BFIN_DCACHE_BANKA is not set | 267 | # CONFIG_BFIN_DCACHE_BANKA is not set |
267 | # CONFIG_BFIN_ICACHE_LOCK is not set | 268 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
268 | CONFIG_BFIN_WB=y | 269 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
269 | # CONFIG_BFIN_WT is not set | 270 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
270 | CONFIG_L1_MAX_PIECE=16 | 271 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set |
272 | |||
273 | # | ||
274 | # Memory Protection Unit | ||
275 | # | ||
271 | # CONFIG_MPU is not set | 276 | # CONFIG_MPU is not set |
272 | 277 | ||
273 | # | 278 | # |
@@ -353,10 +358,10 @@ CONFIG_IP_FIB_HASH=y | |||
353 | # CONFIG_INET_IPCOMP is not set | 358 | # CONFIG_INET_IPCOMP is not set |
354 | # CONFIG_INET_XFRM_TUNNEL is not set | 359 | # CONFIG_INET_XFRM_TUNNEL is not set |
355 | # CONFIG_INET_TUNNEL is not set | 360 | # CONFIG_INET_TUNNEL is not set |
356 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 361 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
357 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 362 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
358 | CONFIG_INET_XFRM_MODE_BEET=y | 363 | # CONFIG_INET_XFRM_MODE_BEET is not set |
359 | CONFIG_INET_DIAG=y | 364 | # CONFIG_INET_DIAG is not set |
360 | CONFIG_INET_TCP_DIAG=y | 365 | CONFIG_INET_TCP_DIAG=y |
361 | # CONFIG_TCP_CONG_ADVANCED is not set | 366 | # CONFIG_TCP_CONG_ADVANCED is not set |
362 | CONFIG_TCP_CONG_CUBIC=y | 367 | CONFIG_TCP_CONG_CUBIC=y |
@@ -873,7 +878,7 @@ CONFIG_ENABLE_MUST_CHECK=y | |||
873 | CONFIG_DEBUG_FS=y | 878 | CONFIG_DEBUG_FS=y |
874 | # CONFIG_HEADERS_CHECK is not set | 879 | # CONFIG_HEADERS_CHECK is not set |
875 | # CONFIG_DEBUG_KERNEL is not set | 880 | # CONFIG_DEBUG_KERNEL is not set |
876 | # CONFIG_DEBUG_BUGVERBOSE is not set | 881 | CONFIG_DEBUG_BUGVERBOSE=y |
877 | CONFIG_DEBUG_MMRS=y | 882 | CONFIG_DEBUG_MMRS=y |
878 | CONFIG_DEBUG_HUNT_FOR_ZERO=y | 883 | CONFIG_DEBUG_HUNT_FOR_ZERO=y |
879 | CONFIG_DEBUG_BFIN_HWTRACE_ON=y | 884 | CONFIG_DEBUG_BFIN_HWTRACE_ON=y |
diff --git a/arch/blackfin/configs/CM-BF537E_defconfig b/arch/blackfin/configs/CM-BF537E_defconfig index e73aa5af58b9..d74b6f4db35d 100644 --- a/arch/blackfin/configs/CM-BF537E_defconfig +++ b/arch/blackfin/configs/CM-BF537E_defconfig | |||
@@ -297,11 +297,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
297 | # Cache Support | 297 | # Cache Support |
298 | # | 298 | # |
299 | CONFIG_BFIN_ICACHE=y | 299 | CONFIG_BFIN_ICACHE=y |
300 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
300 | CONFIG_BFIN_DCACHE=y | 301 | CONFIG_BFIN_DCACHE=y |
301 | # CONFIG_BFIN_DCACHE_BANKA is not set | 302 | # CONFIG_BFIN_DCACHE_BANKA is not set |
302 | # CONFIG_BFIN_ICACHE_LOCK is not set | 303 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
303 | CONFIG_BFIN_WB=y | 304 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
304 | # CONFIG_BFIN_WT is not set | 305 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
306 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
307 | |||
308 | # | ||
309 | # Memory Protection Unit | ||
310 | # | ||
305 | # CONFIG_MPU is not set | 311 | # CONFIG_MPU is not set |
306 | 312 | ||
307 | # | 313 | # |
@@ -383,11 +389,11 @@ CONFIG_IP_PNP=y | |||
383 | # CONFIG_INET_IPCOMP is not set | 389 | # CONFIG_INET_IPCOMP is not set |
384 | # CONFIG_INET_XFRM_TUNNEL is not set | 390 | # CONFIG_INET_XFRM_TUNNEL is not set |
385 | # CONFIG_INET_TUNNEL is not set | 391 | # CONFIG_INET_TUNNEL is not set |
386 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 392 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
387 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 393 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
388 | CONFIG_INET_XFRM_MODE_BEET=y | 394 | # CONFIG_INET_XFRM_MODE_BEET is not set |
389 | # CONFIG_INET_LRO is not set | 395 | # CONFIG_INET_LRO is not set |
390 | CONFIG_INET_DIAG=y | 396 | # CONFIG_INET_DIAG is not set |
391 | CONFIG_INET_TCP_DIAG=y | 397 | CONFIG_INET_TCP_DIAG=y |
392 | # CONFIG_TCP_CONG_ADVANCED is not set | 398 | # CONFIG_TCP_CONG_ADVANCED is not set |
393 | CONFIG_TCP_CONG_CUBIC=y | 399 | CONFIG_TCP_CONG_CUBIC=y |
@@ -861,7 +867,7 @@ CONFIG_DEBUG_FS=y | |||
861 | # CONFIG_HEADERS_CHECK is not set | 867 | # CONFIG_HEADERS_CHECK is not set |
862 | CONFIG_DEBUG_SECTION_MISMATCH=y | 868 | CONFIG_DEBUG_SECTION_MISMATCH=y |
863 | # CONFIG_DEBUG_KERNEL is not set | 869 | # CONFIG_DEBUG_KERNEL is not set |
864 | # CONFIG_DEBUG_BUGVERBOSE is not set | 870 | CONFIG_DEBUG_BUGVERBOSE=y |
865 | # CONFIG_DEBUG_MEMORY_INIT is not set | 871 | # CONFIG_DEBUG_MEMORY_INIT is not set |
866 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 872 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
867 | 873 | ||
diff --git a/arch/blackfin/configs/CM-BF537U_defconfig b/arch/blackfin/configs/CM-BF537U_defconfig index 80211303f6b9..7fc8dfa1719f 100644 --- a/arch/blackfin/configs/CM-BF537U_defconfig +++ b/arch/blackfin/configs/CM-BF537U_defconfig | |||
@@ -270,12 +270,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
270 | # Cache Support | 270 | # Cache Support |
271 | # | 271 | # |
272 | CONFIG_BFIN_ICACHE=y | 272 | CONFIG_BFIN_ICACHE=y |
273 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
273 | CONFIG_BFIN_DCACHE=y | 274 | CONFIG_BFIN_DCACHE=y |
274 | # CONFIG_BFIN_DCACHE_BANKA is not set | 275 | # CONFIG_BFIN_DCACHE_BANKA is not set |
275 | # CONFIG_BFIN_ICACHE_LOCK is not set | 276 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
276 | CONFIG_BFIN_WB=y | 277 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
277 | # CONFIG_BFIN_WT is not set | 278 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
278 | CONFIG_L1_MAX_PIECE=16 | 279 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set |
280 | |||
281 | # | ||
282 | # Memory Protection Unit | ||
283 | # | ||
279 | # CONFIG_MPU is not set | 284 | # CONFIG_MPU is not set |
280 | 285 | ||
281 | # | 286 | # |
@@ -361,10 +366,10 @@ CONFIG_IP_FIB_HASH=y | |||
361 | # CONFIG_INET_IPCOMP is not set | 366 | # CONFIG_INET_IPCOMP is not set |
362 | # CONFIG_INET_XFRM_TUNNEL is not set | 367 | # CONFIG_INET_XFRM_TUNNEL is not set |
363 | # CONFIG_INET_TUNNEL is not set | 368 | # CONFIG_INET_TUNNEL is not set |
364 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 369 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
365 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 370 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
366 | CONFIG_INET_XFRM_MODE_BEET=y | 371 | # CONFIG_INET_XFRM_MODE_BEET is not set |
367 | CONFIG_INET_DIAG=y | 372 | # CONFIG_INET_DIAG is not set |
368 | CONFIG_INET_TCP_DIAG=y | 373 | CONFIG_INET_TCP_DIAG=y |
369 | # CONFIG_TCP_CONG_ADVANCED is not set | 374 | # CONFIG_TCP_CONG_ADVANCED is not set |
370 | CONFIG_TCP_CONG_CUBIC=y | 375 | CONFIG_TCP_CONG_CUBIC=y |
@@ -901,7 +906,7 @@ CONFIG_ENABLE_MUST_CHECK=y | |||
901 | CONFIG_DEBUG_FS=y | 906 | CONFIG_DEBUG_FS=y |
902 | # CONFIG_HEADERS_CHECK is not set | 907 | # CONFIG_HEADERS_CHECK is not set |
903 | # CONFIG_DEBUG_KERNEL is not set | 908 | # CONFIG_DEBUG_KERNEL is not set |
904 | # CONFIG_DEBUG_BUGVERBOSE is not set | 909 | CONFIG_DEBUG_BUGVERBOSE=y |
905 | CONFIG_DEBUG_MMRS=y | 910 | CONFIG_DEBUG_MMRS=y |
906 | CONFIG_DEBUG_HUNT_FOR_ZERO=y | 911 | CONFIG_DEBUG_HUNT_FOR_ZERO=y |
907 | CONFIG_DEBUG_BFIN_HWTRACE_ON=y | 912 | CONFIG_DEBUG_BFIN_HWTRACE_ON=y |
diff --git a/arch/blackfin/configs/CM-BF548_defconfig b/arch/blackfin/configs/CM-BF548_defconfig index dd815f0d1517..acca4e51a45a 100644 --- a/arch/blackfin/configs/CM-BF548_defconfig +++ b/arch/blackfin/configs/CM-BF548_defconfig | |||
@@ -333,12 +333,19 @@ CONFIG_DMA_UNCACHED_1M=y | |||
333 | # Cache Support | 333 | # Cache Support |
334 | # | 334 | # |
335 | CONFIG_BFIN_ICACHE=y | 335 | CONFIG_BFIN_ICACHE=y |
336 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
336 | CONFIG_BFIN_DCACHE=y | 337 | CONFIG_BFIN_DCACHE=y |
337 | # CONFIG_BFIN_DCACHE_BANKA is not set | 338 | # CONFIG_BFIN_DCACHE_BANKA is not set |
338 | # CONFIG_BFIN_ICACHE_LOCK is not set | 339 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
339 | CONFIG_BFIN_WB=y | 340 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
340 | # CONFIG_BFIN_WT is not set | 341 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
341 | CONFIG_L1_MAX_PIECE=16 | 342 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set |
343 | # CONFIG_BFIN_L2_ICACHEABLE is not set | ||
344 | # CONFIG_BFIN_L2_DCACHEABLE is not set | ||
345 | |||
346 | # | ||
347 | # Memory Protection Unit | ||
348 | # | ||
342 | # CONFIG_MPU is not set | 349 | # CONFIG_MPU is not set |
343 | 350 | ||
344 | # | 351 | # |
@@ -428,11 +435,11 @@ CONFIG_IP_PNP=y | |||
428 | # CONFIG_INET_IPCOMP is not set | 435 | # CONFIG_INET_IPCOMP is not set |
429 | # CONFIG_INET_XFRM_TUNNEL is not set | 436 | # CONFIG_INET_XFRM_TUNNEL is not set |
430 | # CONFIG_INET_TUNNEL is not set | 437 | # CONFIG_INET_TUNNEL is not set |
431 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 438 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
432 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 439 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
433 | CONFIG_INET_XFRM_MODE_BEET=y | 440 | # CONFIG_INET_XFRM_MODE_BEET is not set |
434 | # CONFIG_INET_LRO is not set | 441 | # CONFIG_INET_LRO is not set |
435 | CONFIG_INET_DIAG=y | 442 | # CONFIG_INET_DIAG is not set |
436 | CONFIG_INET_TCP_DIAG=y | 443 | CONFIG_INET_TCP_DIAG=y |
437 | # CONFIG_TCP_CONG_ADVANCED is not set | 444 | # CONFIG_TCP_CONG_ADVANCED is not set |
438 | CONFIG_TCP_CONG_CUBIC=y | 445 | CONFIG_TCP_CONG_CUBIC=y |
@@ -1334,7 +1341,7 @@ CONFIG_ENABLE_MUST_CHECK=y | |||
1334 | CONFIG_DEBUG_FS=y | 1341 | CONFIG_DEBUG_FS=y |
1335 | # CONFIG_HEADERS_CHECK is not set | 1342 | # CONFIG_HEADERS_CHECK is not set |
1336 | # CONFIG_DEBUG_KERNEL is not set | 1343 | # CONFIG_DEBUG_KERNEL is not set |
1337 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1344 | CONFIG_DEBUG_BUGVERBOSE=y |
1338 | # CONFIG_SAMPLES is not set | 1345 | # CONFIG_SAMPLES is not set |
1339 | CONFIG_DEBUG_MMRS=y | 1346 | CONFIG_DEBUG_MMRS=y |
1340 | CONFIG_DEBUG_HUNT_FOR_ZERO=y | 1347 | CONFIG_DEBUG_HUNT_FOR_ZERO=y |
diff --git a/arch/blackfin/configs/CM-BF561_defconfig b/arch/blackfin/configs/CM-BF561_defconfig index 16c198bd40c5..bae4ee6e68bb 100644 --- a/arch/blackfin/configs/CM-BF561_defconfig +++ b/arch/blackfin/configs/CM-BF561_defconfig | |||
@@ -308,12 +308,19 @@ CONFIG_DMA_UNCACHED_1M=y | |||
308 | # Cache Support | 308 | # Cache Support |
309 | # | 309 | # |
310 | CONFIG_BFIN_ICACHE=y | 310 | CONFIG_BFIN_ICACHE=y |
311 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
311 | CONFIG_BFIN_DCACHE=y | 312 | CONFIG_BFIN_DCACHE=y |
312 | # CONFIG_BFIN_DCACHE_BANKA is not set | 313 | # CONFIG_BFIN_DCACHE_BANKA is not set |
313 | # CONFIG_BFIN_ICACHE_LOCK is not set | 314 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
314 | CONFIG_BFIN_WB=y | 315 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
315 | # CONFIG_BFIN_WT is not set | 316 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
316 | CONFIG_L1_MAX_PIECE=16 | 317 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set |
318 | # CONFIG_BFIN_L2_ICACHEABLE is not set | ||
319 | # CONFIG_BFIN_L2_DCACHEABLE is not set | ||
320 | |||
321 | # | ||
322 | # Memory Protection Unit | ||
323 | # | ||
317 | # CONFIG_MPU is not set | 324 | # CONFIG_MPU is not set |
318 | 325 | ||
319 | # | 326 | # |
@@ -395,11 +402,11 @@ CONFIG_IP_FIB_HASH=y | |||
395 | # CONFIG_INET_IPCOMP is not set | 402 | # CONFIG_INET_IPCOMP is not set |
396 | # CONFIG_INET_XFRM_TUNNEL is not set | 403 | # CONFIG_INET_XFRM_TUNNEL is not set |
397 | # CONFIG_INET_TUNNEL is not set | 404 | # CONFIG_INET_TUNNEL is not set |
398 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 405 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
399 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 406 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
400 | CONFIG_INET_XFRM_MODE_BEET=y | 407 | # CONFIG_INET_XFRM_MODE_BEET is not set |
401 | # CONFIG_INET_LRO is not set | 408 | # CONFIG_INET_LRO is not set |
402 | CONFIG_INET_DIAG=y | 409 | # CONFIG_INET_DIAG is not set |
403 | CONFIG_INET_TCP_DIAG=y | 410 | CONFIG_INET_TCP_DIAG=y |
404 | # CONFIG_TCP_CONG_ADVANCED is not set | 411 | # CONFIG_TCP_CONG_ADVANCED is not set |
405 | CONFIG_TCP_CONG_CUBIC=y | 412 | CONFIG_TCP_CONG_CUBIC=y |
@@ -837,7 +844,7 @@ CONFIG_ENABLE_MUST_CHECK=y | |||
837 | CONFIG_DEBUG_FS=y | 844 | CONFIG_DEBUG_FS=y |
838 | # CONFIG_HEADERS_CHECK is not set | 845 | # CONFIG_HEADERS_CHECK is not set |
839 | # CONFIG_DEBUG_KERNEL is not set | 846 | # CONFIG_DEBUG_KERNEL is not set |
840 | # CONFIG_DEBUG_BUGVERBOSE is not set | 847 | CONFIG_DEBUG_BUGVERBOSE=y |
841 | # CONFIG_SAMPLES is not set | 848 | # CONFIG_SAMPLES is not set |
842 | CONFIG_DEBUG_MMRS=y | 849 | CONFIG_DEBUG_MMRS=y |
843 | CONFIG_DEBUG_HUNT_FOR_ZERO=y | 850 | CONFIG_DEBUG_HUNT_FOR_ZERO=y |
diff --git a/arch/blackfin/configs/H8606_defconfig b/arch/blackfin/configs/H8606_defconfig index 6b4c1a982383..a6a7c8ede705 100644 --- a/arch/blackfin/configs/H8606_defconfig +++ b/arch/blackfin/configs/H8606_defconfig | |||
@@ -258,12 +258,18 @@ CONFIG_DMA_UNCACHED_1M=y | |||
258 | # Cache Support | 258 | # Cache Support |
259 | # | 259 | # |
260 | CONFIG_BFIN_ICACHE=y | 260 | CONFIG_BFIN_ICACHE=y |
261 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
261 | CONFIG_BFIN_DCACHE=y | 262 | CONFIG_BFIN_DCACHE=y |
262 | # CONFIG_BFIN_DCACHE_BANKA is not set | 263 | # CONFIG_BFIN_DCACHE_BANKA is not set |
263 | CONFIG_BFIN_ICACHE_LOCK=y | 264 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
264 | CONFIG_BFIN_WB=y | 265 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
265 | # CONFIG_BFIN_WT is not set | 266 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
266 | CONFIG_L1_MAX_PIECE=16 | 267 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set |
268 | |||
269 | # | ||
270 | # Memory Protection Unit | ||
271 | # | ||
272 | # CONFIG_MPU is not set | ||
267 | 273 | ||
268 | # | 274 | # |
269 | # Asynchonous Memory Configuration | 275 | # Asynchonous Memory Configuration |
diff --git a/arch/blackfin/configs/PNAV-10_defconfig b/arch/blackfin/configs/PNAV-10_defconfig index 09701f907e9b..ff377fae061b 100644 --- a/arch/blackfin/configs/PNAV-10_defconfig +++ b/arch/blackfin/configs/PNAV-10_defconfig | |||
@@ -295,11 +295,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
295 | # Cache Support | 295 | # Cache Support |
296 | # | 296 | # |
297 | CONFIG_BFIN_ICACHE=y | 297 | CONFIG_BFIN_ICACHE=y |
298 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
298 | CONFIG_BFIN_DCACHE=y | 299 | CONFIG_BFIN_DCACHE=y |
299 | # CONFIG_BFIN_DCACHE_BANKA is not set | 300 | # CONFIG_BFIN_DCACHE_BANKA is not set |
300 | # CONFIG_BFIN_ICACHE_LOCK is not set | 301 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
301 | CONFIG_BFIN_WB=y | 302 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
302 | # CONFIG_BFIN_WT is not set | 303 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
304 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
305 | |||
306 | # | ||
307 | # Memory Protection Unit | ||
308 | # | ||
303 | # CONFIG_MPU is not set | 309 | # CONFIG_MPU is not set |
304 | 310 | ||
305 | # | 311 | # |
@@ -382,11 +388,11 @@ CONFIG_IP_PNP=y | |||
382 | # CONFIG_INET_IPCOMP is not set | 388 | # CONFIG_INET_IPCOMP is not set |
383 | # CONFIG_INET_XFRM_TUNNEL is not set | 389 | # CONFIG_INET_XFRM_TUNNEL is not set |
384 | # CONFIG_INET_TUNNEL is not set | 390 | # CONFIG_INET_TUNNEL is not set |
385 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 391 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
386 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 392 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
387 | CONFIG_INET_XFRM_MODE_BEET=y | 393 | # CONFIG_INET_XFRM_MODE_BEET is not set |
388 | # CONFIG_INET_LRO is not set | 394 | # CONFIG_INET_LRO is not set |
389 | CONFIG_INET_DIAG=y | 395 | # CONFIG_INET_DIAG is not set |
390 | CONFIG_INET_TCP_DIAG=y | 396 | CONFIG_INET_TCP_DIAG=y |
391 | # CONFIG_TCP_CONG_ADVANCED is not set | 397 | # CONFIG_TCP_CONG_ADVANCED is not set |
392 | CONFIG_TCP_CONG_CUBIC=y | 398 | CONFIG_TCP_CONG_CUBIC=y |
diff --git a/arch/blackfin/configs/SRV1_defconfig b/arch/blackfin/configs/SRV1_defconfig index ec84a53daae9..814f9cacf407 100644 --- a/arch/blackfin/configs/SRV1_defconfig +++ b/arch/blackfin/configs/SRV1_defconfig | |||
@@ -279,12 +279,18 @@ CONFIG_DMA_UNCACHED_2M=y | |||
279 | # Cache Support | 279 | # Cache Support |
280 | # | 280 | # |
281 | CONFIG_BFIN_ICACHE=y | 281 | CONFIG_BFIN_ICACHE=y |
282 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
282 | CONFIG_BFIN_DCACHE=y | 283 | CONFIG_BFIN_DCACHE=y |
283 | # CONFIG_BFIN_DCACHE_BANKA is not set | 284 | # CONFIG_BFIN_DCACHE_BANKA is not set |
284 | # CONFIG_BFIN_ICACHE_LOCK is not set | 285 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
285 | CONFIG_BFIN_WB=y | 286 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
286 | # CONFIG_BFIN_WT is not set | 287 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
287 | CONFIG_L1_MAX_PIECE=16 | 288 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set |
289 | |||
290 | # | ||
291 | # Memory Protection Unit | ||
292 | # | ||
293 | # CONFIG_MPU is not set | ||
288 | 294 | ||
289 | # | 295 | # |
290 | # Asynchonous Memory Configuration | 296 | # Asynchonous Memory Configuration |
diff --git a/arch/blackfin/configs/TCM-BF537_defconfig b/arch/blackfin/configs/TCM-BF537_defconfig index 6e2796240fdc..375e75a27abc 100644 --- a/arch/blackfin/configs/TCM-BF537_defconfig +++ b/arch/blackfin/configs/TCM-BF537_defconfig | |||
@@ -287,11 +287,17 @@ CONFIG_DMA_UNCACHED_1M=y | |||
287 | # Cache Support | 287 | # Cache Support |
288 | # | 288 | # |
289 | CONFIG_BFIN_ICACHE=y | 289 | CONFIG_BFIN_ICACHE=y |
290 | # CONFIG_BFIN_ICACHE_LOCK is not set | ||
290 | CONFIG_BFIN_DCACHE=y | 291 | CONFIG_BFIN_DCACHE=y |
291 | # CONFIG_BFIN_DCACHE_BANKA is not set | 292 | # CONFIG_BFIN_DCACHE_BANKA is not set |
292 | # CONFIG_BFIN_ICACHE_LOCK is not set | 293 | CONFIG_BFIN_EXTMEM_ICACHEABLE=y |
293 | CONFIG_BFIN_WB=y | 294 | CONFIG_BFIN_EXTMEM_DCACHEABLE=y |
294 | # CONFIG_BFIN_WT is not set | 295 | CONFIG_BFIN_EXTMEM_WRITEBACK=y |
296 | # CONFIG_BFIN_EXTMEM_WRITETHROUGH is not set | ||
297 | |||
298 | # | ||
299 | # Memory Protection Unit | ||
300 | # | ||
295 | # CONFIG_MPU is not set | 301 | # CONFIG_MPU is not set |
296 | 302 | ||
297 | # | 303 | # |
@@ -709,7 +715,7 @@ CONFIG_FRAME_WARN=1024 | |||
709 | CONFIG_DEBUG_FS=y | 715 | CONFIG_DEBUG_FS=y |
710 | # CONFIG_HEADERS_CHECK is not set | 716 | # CONFIG_HEADERS_CHECK is not set |
711 | # CONFIG_DEBUG_KERNEL is not set | 717 | # CONFIG_DEBUG_KERNEL is not set |
712 | # CONFIG_DEBUG_BUGVERBOSE is not set | 718 | CONFIG_DEBUG_BUGVERBOSE=y |
713 | # CONFIG_DEBUG_MEMORY_INIT is not set | 719 | # CONFIG_DEBUG_MEMORY_INIT is not set |
714 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 720 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
715 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | 721 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set |
diff --git a/arch/blackfin/include/asm/blackfin.h b/arch/blackfin/include/asm/blackfin.h index 8bb2cb139756..4d4439583396 100644 --- a/arch/blackfin/include/asm/blackfin.h +++ b/arch/blackfin/include/asm/blackfin.h | |||
@@ -86,6 +86,7 @@ static inline void CSYNC(void) | |||
86 | 86 | ||
87 | #endif /* __ASSEMBLY__ */ | 87 | #endif /* __ASSEMBLY__ */ |
88 | 88 | ||
89 | #include <asm/mem_map.h> | ||
89 | #include <mach/blackfin.h> | 90 | #include <mach/blackfin.h> |
90 | #include <asm/bfin-global.h> | 91 | #include <asm/bfin-global.h> |
91 | 92 | ||
diff --git a/arch/blackfin/include/asm/cache.h b/arch/blackfin/include/asm/cache.h index 2ef669ed9222..477050ad5c53 100644 --- a/arch/blackfin/include/asm/cache.h +++ b/arch/blackfin/include/asm/cache.h | |||
@@ -35,10 +35,10 @@ | |||
35 | 35 | ||
36 | #if defined(CONFIG_SMP) && \ | 36 | #if defined(CONFIG_SMP) && \ |
37 | !defined(CONFIG_BFIN_CACHE_COHERENT) | 37 | !defined(CONFIG_BFIN_CACHE_COHERENT) |
38 | # if defined(CONFIG_BFIN_ICACHE) | 38 | # if defined(CONFIG_BFIN_ICACHEABLE) || defined(CONFIG_BFIN_L2_ICACHEABLE) |
39 | # define __ARCH_SYNC_CORE_ICACHE | 39 | # define __ARCH_SYNC_CORE_ICACHE |
40 | # endif | 40 | # endif |
41 | # if defined(CONFIG_BFIN_DCACHE) | 41 | # if defined(CONFIG_BFIN_DCACHEABLE) || defined(CONFIG_BFIN_L2_DCACHEABLE) |
42 | # define __ARCH_SYNC_CORE_DCACHE | 42 | # define __ARCH_SYNC_CORE_DCACHE |
43 | # endif | 43 | # endif |
44 | #ifndef __ASSEMBLY__ | 44 | #ifndef __ASSEMBLY__ |
diff --git a/arch/blackfin/include/asm/cacheflush.h b/arch/blackfin/include/asm/cacheflush.h index 5c17dee53b5d..7e55549e180f 100644 --- a/arch/blackfin/include/asm/cacheflush.h +++ b/arch/blackfin/include/asm/cacheflush.h | |||
@@ -56,7 +56,7 @@ extern void blackfin_invalidate_entire_icache(void); | |||
56 | 56 | ||
57 | static inline void flush_icache_range(unsigned start, unsigned end) | 57 | static inline void flush_icache_range(unsigned start, unsigned end) |
58 | { | 58 | { |
59 | #if defined(CONFIG_BFIN_WB) | 59 | #if defined(CONFIG_BFIN_EXTMEM_WRITEBACK) || defined(CONFIG_BFIN_L2_WRITEBACK) |
60 | blackfin_dcache_flush_range(start, end); | 60 | blackfin_dcache_flush_range(start, end); |
61 | #endif | 61 | #endif |
62 | 62 | ||
@@ -87,9 +87,9 @@ do { memcpy(dst, src, len); \ | |||
87 | #else | 87 | #else |
88 | # define invalidate_dcache_range(start,end) do { } while (0) | 88 | # define invalidate_dcache_range(start,end) do { } while (0) |
89 | #endif | 89 | #endif |
90 | #if defined(CONFIG_BFIN_DCACHE) && defined(CONFIG_BFIN_WB) | 90 | #if defined(CONFIG_BFIN_EXTMEM_WRITEBACK) || defined(CONFIG_BFIN_L2_WRITEBACK) |
91 | # define flush_dcache_range(start,end) blackfin_dcache_flush_range((start), (end)) | 91 | # define flush_dcache_range(start,end) blackfin_dcache_flush_range((start), (end)) |
92 | # define flush_dcache_page(page) blackfin_dflush_page(page_address(page)) | 92 | # define flush_dcache_page(page) blackfin_dflush_page(page_address(page)) |
93 | #else | 93 | #else |
94 | # define flush_dcache_range(start,end) do { } while (0) | 94 | # define flush_dcache_range(start,end) do { } while (0) |
95 | # define flush_dcache_page(page) do { } while (0) | 95 | # define flush_dcache_page(page) do { } while (0) |
@@ -100,7 +100,7 @@ extern unsigned long reserved_mem_icache_on; | |||
100 | 100 | ||
101 | static inline int bfin_addr_dcacheable(unsigned long addr) | 101 | static inline int bfin_addr_dcacheable(unsigned long addr) |
102 | { | 102 | { |
103 | #ifdef CONFIG_BFIN_DCACHE | 103 | #ifdef CONFIG_BFIN_EXTMEM_DCACHEABLE |
104 | if (addr < (_ramend - DMA_UNCACHED_REGION)) | 104 | if (addr < (_ramend - DMA_UNCACHED_REGION)) |
105 | return 1; | 105 | return 1; |
106 | #endif | 106 | #endif |
@@ -109,7 +109,7 @@ static inline int bfin_addr_dcacheable(unsigned long addr) | |||
109 | addr >= _ramend && addr < physical_mem_end) | 109 | addr >= _ramend && addr < physical_mem_end) |
110 | return 1; | 110 | return 1; |
111 | 111 | ||
112 | #ifndef CONFIG_BFIN_L2_NOT_CACHED | 112 | #ifdef CONFIG_BFIN_L2_DCACHEABLE |
113 | if (addr >= L2_START && addr < L2_START + L2_LENGTH) | 113 | if (addr >= L2_START && addr < L2_START + L2_LENGTH) |
114 | return 1; | 114 | return 1; |
115 | #endif | 115 | #endif |
diff --git a/arch/blackfin/include/asm/cplb.h b/arch/blackfin/include/asm/cplb.h index a75a6a9f0949..c5dacf8f8cf9 100644 --- a/arch/blackfin/include/asm/cplb.h +++ b/arch/blackfin/include/asm/cplb.h | |||
@@ -37,8 +37,6 @@ | |||
37 | #define L1_IMEMORY ( CPLB_USER_RD | CPLB_VALID | CPLB_LOCK) | 37 | #define L1_IMEMORY ( CPLB_USER_RD | CPLB_VALID | CPLB_LOCK) |
38 | #define SDRAM_INON_CHBL ( CPLB_USER_RD | CPLB_VALID) | 38 | #define SDRAM_INON_CHBL ( CPLB_USER_RD | CPLB_VALID) |
39 | 39 | ||
40 | /*Use the menuconfig cache policy here - CONFIG_BFIN_WT/CONFIG_BFIN_WB*/ | ||
41 | |||
42 | #if ANOMALY_05000158 | 40 | #if ANOMALY_05000158 |
43 | #define ANOMALY_05000158_WORKAROUND 0x200 | 41 | #define ANOMALY_05000158_WORKAROUND 0x200 |
44 | #else | 42 | #else |
@@ -47,10 +45,12 @@ | |||
47 | 45 | ||
48 | #define CPLB_COMMON (CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158_WORKAROUND) | 46 | #define CPLB_COMMON (CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158_WORKAROUND) |
49 | 47 | ||
50 | #ifdef CONFIG_BFIN_WB /*Write Back Policy */ | 48 | #ifdef CONFIG_BFIN_EXTMEM_WRITEBACK |
51 | #define SDRAM_DGENERIC (CPLB_L1_CHBL | CPLB_COMMON) | 49 | #define SDRAM_DGENERIC (CPLB_L1_CHBL | CPLB_COMMON) |
52 | #else /*Write Through */ | 50 | #elif defined(CONFIG_BFIN_EXTMEM_WRITETHROUGH) |
53 | #define SDRAM_DGENERIC (CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_COMMON) | 51 | #define SDRAM_DGENERIC (CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_COMMON) |
52 | #else | ||
53 | #define SDRAM_DGENERIC (CPLB_COMMON) | ||
54 | #endif | 54 | #endif |
55 | 55 | ||
56 | #define SDRAM_DNON_CHBL (CPLB_COMMON) | 56 | #define SDRAM_DNON_CHBL (CPLB_COMMON) |
@@ -61,21 +61,23 @@ | |||
61 | 61 | ||
62 | #ifdef CONFIG_SMP | 62 | #ifdef CONFIG_SMP |
63 | #define L2_ATTR (INITIAL_T | I_CPLB | D_CPLB) | 63 | #define L2_ATTR (INITIAL_T | I_CPLB | D_CPLB) |
64 | #define L2_IMEMORY (CPLB_COMMON) | 64 | #define L2_IMEMORY (CPLB_COMMON | PAGE_SIZE_1MB) |
65 | #define L2_DMEMORY (CPLB_LOCK | CPLB_COMMON) | 65 | #define L2_DMEMORY (CPLB_LOCK | CPLB_COMMON | PAGE_SIZE_1MB) |
66 | 66 | ||
67 | #else | 67 | #else |
68 | #define L2_ATTR (INITIAL_T | SWITCH_T | I_CPLB | D_CPLB) | 68 | #define L2_ATTR (INITIAL_T | SWITCH_T | I_CPLB | D_CPLB) |
69 | #define L2_IMEMORY (SDRAM_IGENERIC) | 69 | # if defined(CONFIG_BFIN_L2_ICACHEABLE) |
70 | 70 | # define L2_IMEMORY (CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID | PAGE_SIZE_1MB) | |
71 | # if defined(CONFIG_BFIN_L2_WB) | 71 | # else |
72 | # define L2_DMEMORY (CPLB_L1_CHBL | CPLB_COMMON) | 72 | # define L2_IMEMORY ( CPLB_USER_RD | CPLB_VALID | PAGE_SIZE_1MB) |
73 | # elif defined(CONFIG_BFIN_L2_WT) | 73 | # endif |
74 | # define L2_DMEMORY (CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_COMMON) | 74 | |
75 | # elif defined(CONFIG_BFIN_L2_NOT_CACHED) | 75 | # if defined(CONFIG_BFIN_L2_WRITEBACK) |
76 | # define L2_DMEMORY (CPLB_COMMON) | 76 | # define L2_DMEMORY (CPLB_L1_CHBL | CPLB_COMMON | PAGE_SIZE_1MB) |
77 | # elif defined(CONFIG_BFIN_L2_WRITETHROUGH) | ||
78 | # define L2_DMEMORY (CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_COMMON | PAGE_SIZE_1MB) | ||
77 | # else | 79 | # else |
78 | # define L2_DMEMORY (0) | 80 | # define L2_DMEMORY (CPLB_COMMON | PAGE_SIZE_1MB) |
79 | # endif | 81 | # endif |
80 | #endif /* CONFIG_SMP */ | 82 | #endif /* CONFIG_SMP */ |
81 | 83 | ||
diff --git a/arch/blackfin/include/asm/dma-mapping.h b/arch/blackfin/include/asm/dma-mapping.h index d7d9148e433c..ed6b1f3cccce 100644 --- a/arch/blackfin/include/asm/dma-mapping.h +++ b/arch/blackfin/include/asm/dma-mapping.h | |||
@@ -95,4 +95,17 @@ static inline void dma_sync_single_for_device(struct device *dev, | |||
95 | enum dma_data_direction dir) | 95 | enum dma_data_direction dir) |
96 | { | 96 | { |
97 | } | 97 | } |
98 | |||
99 | static inline void dma_sync_sg_for_cpu(struct device *dev, | ||
100 | struct scatterlist *sg, | ||
101 | int nents, enum dma_data_direction dir) | ||
102 | { | ||
103 | } | ||
104 | |||
105 | static inline void dma_sync_sg_for_device(struct device *dev, | ||
106 | struct scatterlist *sg, | ||
107 | int nents, enum dma_data_direction dir) | ||
108 | { | ||
109 | } | ||
110 | |||
98 | #endif /* _BLACKFIN_DMA_MAPPING_H */ | 111 | #endif /* _BLACKFIN_DMA_MAPPING_H */ |
diff --git a/arch/blackfin/include/asm/ipipe.h b/arch/blackfin/include/asm/ipipe.h index bbe1c3726b69..87ba9ad399cb 100644 --- a/arch/blackfin/include/asm/ipipe.h +++ b/arch/blackfin/include/asm/ipipe.h | |||
@@ -35,9 +35,9 @@ | |||
35 | #include <asm/atomic.h> | 35 | #include <asm/atomic.h> |
36 | #include <asm/traps.h> | 36 | #include <asm/traps.h> |
37 | 37 | ||
38 | #define IPIPE_ARCH_STRING "1.10-00" | 38 | #define IPIPE_ARCH_STRING "1.11-00" |
39 | #define IPIPE_MAJOR_NUMBER 1 | 39 | #define IPIPE_MAJOR_NUMBER 1 |
40 | #define IPIPE_MINOR_NUMBER 10 | 40 | #define IPIPE_MINOR_NUMBER 11 |
41 | #define IPIPE_PATCH_NUMBER 0 | 41 | #define IPIPE_PATCH_NUMBER 0 |
42 | 42 | ||
43 | #ifdef CONFIG_SMP | 43 | #ifdef CONFIG_SMP |
@@ -207,7 +207,7 @@ void ipipe_init_irq_threads(void); | |||
207 | 207 | ||
208 | int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc); | 208 | int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc); |
209 | 209 | ||
210 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | 210 | #ifdef CONFIG_TICKSOURCE_CORETMR |
211 | #define IRQ_SYSTMR IRQ_CORETMR | 211 | #define IRQ_SYSTMR IRQ_CORETMR |
212 | #define IRQ_PRIOTMR IRQ_CORETMR | 212 | #define IRQ_PRIOTMR IRQ_CORETMR |
213 | #else | 213 | #else |
@@ -240,8 +240,13 @@ int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc); | |||
240 | #define ipipe_init_irq_threads() do { } while (0) | 240 | #define ipipe_init_irq_threads() do { } while (0) |
241 | #define ipipe_start_irq_thread(irq, desc) 0 | 241 | #define ipipe_start_irq_thread(irq, desc) 0 |
242 | 242 | ||
243 | #ifndef CONFIG_TICKSOURCE_GPTMR0 | ||
243 | #define IRQ_SYSTMR IRQ_CORETMR | 244 | #define IRQ_SYSTMR IRQ_CORETMR |
244 | #define IRQ_PRIOTMR IRQ_CORETMR | 245 | #define IRQ_PRIOTMR IRQ_CORETMR |
246 | #else | ||
247 | #define IRQ_SYSTMR IRQ_TIMER0 | ||
248 | #define IRQ_PRIOTMR CONFIG_IRQ_TIMER0 | ||
249 | #endif | ||
245 | 250 | ||
246 | #define __ipipe_root_tick_p(regs) 1 | 251 | #define __ipipe_root_tick_p(regs) 1 |
247 | 252 | ||
diff --git a/arch/blackfin/include/asm/ipipe_base.h b/arch/blackfin/include/asm/ipipe_base.h index 3e8acbd1a3be..490098f532a7 100644 --- a/arch/blackfin/include/asm/ipipe_base.h +++ b/arch/blackfin/include/asm/ipipe_base.h | |||
@@ -51,23 +51,23 @@ | |||
51 | 51 | ||
52 | extern unsigned long __ipipe_root_status; /* Alias to ipipe_root_cpudom_var(status) */ | 52 | extern unsigned long __ipipe_root_status; /* Alias to ipipe_root_cpudom_var(status) */ |
53 | 53 | ||
54 | static inline void __ipipe_stall_root(void) | 54 | #define __ipipe_stall_root() \ |
55 | { | 55 | do { \ |
56 | volatile unsigned long *p = &__ipipe_root_status; | 56 | volatile unsigned long *p = &__ipipe_root_status; \ |
57 | set_bit(0, p); | 57 | set_bit(0, p); \ |
58 | } | 58 | } while (0) |
59 | 59 | ||
60 | static inline unsigned long __ipipe_test_and_stall_root(void) | 60 | #define __ipipe_test_and_stall_root() \ |
61 | { | 61 | ({ \ |
62 | volatile unsigned long *p = &__ipipe_root_status; | 62 | volatile unsigned long *p = &__ipipe_root_status; \ |
63 | return test_and_set_bit(0, p); | 63 | test_and_set_bit(0, p); \ |
64 | } | 64 | }) |
65 | 65 | ||
66 | static inline unsigned long __ipipe_test_root(void) | 66 | #define __ipipe_test_root() \ |
67 | { | 67 | ({ \ |
68 | const unsigned long *p = &__ipipe_root_status; | 68 | const unsigned long *p = &__ipipe_root_status; \ |
69 | return test_bit(0, p); | 69 | test_bit(0, p); \ |
70 | } | 70 | }) |
71 | 71 | ||
72 | #endif /* !__ASSEMBLY__ */ | 72 | #endif /* !__ASSEMBLY__ */ |
73 | 73 | ||
diff --git a/arch/blackfin/include/asm/irq.h b/arch/blackfin/include/asm/irq.h index 9a7f63a83c47..42a15f5ce0d0 100644 --- a/arch/blackfin/include/asm/irq.h +++ b/arch/blackfin/include/asm/irq.h | |||
@@ -22,13 +22,6 @@ | |||
22 | /* SYS_IRQS and NR_IRQS are defined in <mach-bf5xx/irq.h> */ | 22 | /* SYS_IRQS and NR_IRQS are defined in <mach-bf5xx/irq.h> */ |
23 | #include <mach/irq.h> | 23 | #include <mach/irq.h> |
24 | 24 | ||
25 | /* Xenomai IPIPE helpers */ | ||
26 | #define local_irq_restore_hw(x) local_irq_restore(x) | ||
27 | #define local_irq_save_hw(x) local_irq_save(x) | ||
28 | #define local_irq_enable_hw(x) local_irq_enable(x) | ||
29 | #define local_irq_disable_hw(x) local_irq_disable(x) | ||
30 | #define irqs_disabled_hw(x) irqs_disabled(x) | ||
31 | |||
32 | #if ANOMALY_05000244 && defined(CONFIG_BFIN_ICACHE) | 25 | #if ANOMALY_05000244 && defined(CONFIG_BFIN_ICACHE) |
33 | # define NOP_PAD_ANOMALY_05000244 "nop; nop;" | 26 | # define NOP_PAD_ANOMALY_05000244 "nop; nop;" |
34 | #else | 27 | #else |
diff --git a/arch/blackfin/include/asm/irqflags.h b/arch/blackfin/include/asm/irqflags.h index 139cba4651b1..9b19a19d9ae9 100644 --- a/arch/blackfin/include/asm/irqflags.h +++ b/arch/blackfin/include/asm/irqflags.h | |||
@@ -31,6 +31,150 @@ static inline unsigned long bfin_cli(void) | |||
31 | return flags; | 31 | return flags; |
32 | } | 32 | } |
33 | 33 | ||
34 | #ifdef CONFIG_IPIPE | ||
35 | |||
36 | #include <linux/ipipe_base.h> | ||
37 | #include <linux/ipipe_trace.h> | ||
38 | |||
39 | #ifdef CONFIG_DEBUG_HWERR | ||
40 | # define bfin_no_irqs 0x3f | ||
41 | #else | ||
42 | # define bfin_no_irqs 0x1f | ||
43 | #endif | ||
44 | |||
45 | #define raw_local_irq_disable() \ | ||
46 | do { \ | ||
47 | ipipe_check_context(ipipe_root_domain); \ | ||
48 | __ipipe_stall_root(); \ | ||
49 | barrier(); \ | ||
50 | } while (0) | ||
51 | |||
52 | static inline void raw_local_irq_enable(void) | ||
53 | { | ||
54 | barrier(); | ||
55 | ipipe_check_context(ipipe_root_domain); | ||
56 | __ipipe_unstall_root(); | ||
57 | } | ||
58 | |||
59 | #define raw_local_save_flags_ptr(x) \ | ||
60 | do { \ | ||
61 | *(x) = __ipipe_test_root() ? bfin_no_irqs : bfin_irq_flags; \ | ||
62 | } while (0) | ||
63 | |||
64 | #define raw_local_save_flags(x) raw_local_save_flags_ptr(&(x)) | ||
65 | |||
66 | #define raw_irqs_disabled_flags(x) ((x) == bfin_no_irqs) | ||
67 | |||
68 | #define raw_local_irq_save_ptr(x) \ | ||
69 | do { \ | ||
70 | *(x) = __ipipe_test_and_stall_root() ? bfin_no_irqs : bfin_irq_flags; \ | ||
71 | barrier(); \ | ||
72 | } while (0) | ||
73 | |||
74 | #define raw_local_irq_save(x) \ | ||
75 | do { \ | ||
76 | ipipe_check_context(ipipe_root_domain); \ | ||
77 | raw_local_irq_save_ptr(&(x)); \ | ||
78 | } while (0) | ||
79 | |||
80 | static inline unsigned long raw_mangle_irq_bits(int virt, unsigned long real) | ||
81 | { | ||
82 | /* | ||
83 | * Merge virtual and real interrupt mask bits into a single | ||
84 | * 32bit word. | ||
85 | */ | ||
86 | return (real & ~(1 << 31)) | ((virt != 0) << 31); | ||
87 | } | ||
88 | |||
89 | static inline int raw_demangle_irq_bits(unsigned long *x) | ||
90 | { | ||
91 | int virt = (*x & (1 << 31)) != 0; | ||
92 | *x &= ~(1L << 31); | ||
93 | return virt; | ||
94 | } | ||
95 | |||
96 | static inline void local_irq_disable_hw_notrace(void) | ||
97 | { | ||
98 | bfin_cli(); | ||
99 | } | ||
100 | |||
101 | static inline void local_irq_enable_hw_notrace(void) | ||
102 | { | ||
103 | bfin_sti(bfin_irq_flags); | ||
104 | } | ||
105 | |||
106 | #define local_save_flags_hw(flags) \ | ||
107 | do { \ | ||
108 | (flags) = bfin_read_IMASK(); \ | ||
109 | } while (0) | ||
110 | |||
111 | #define irqs_disabled_flags_hw(flags) (((flags) & ~0x3f) == 0) | ||
112 | |||
113 | #define irqs_disabled_hw() \ | ||
114 | ({ \ | ||
115 | unsigned long flags; \ | ||
116 | local_save_flags_hw(flags); \ | ||
117 | irqs_disabled_flags_hw(flags); \ | ||
118 | }) | ||
119 | |||
120 | static inline void local_irq_save_ptr_hw(unsigned long *flags) | ||
121 | { | ||
122 | *flags = bfin_cli(); | ||
123 | #ifdef CONFIG_DEBUG_HWERR | ||
124 | bfin_sti(0x3f); | ||
125 | #endif | ||
126 | } | ||
127 | |||
128 | #define local_irq_save_hw_notrace(flags) \ | ||
129 | do { \ | ||
130 | local_irq_save_ptr_hw(&(flags)); \ | ||
131 | } while (0) | ||
132 | |||
133 | static inline void local_irq_restore_hw_notrace(unsigned long flags) | ||
134 | { | ||
135 | if (!irqs_disabled_flags_hw(flags)) | ||
136 | local_irq_enable_hw_notrace(); | ||
137 | } | ||
138 | |||
139 | #ifdef CONFIG_IPIPE_TRACE_IRQSOFF | ||
140 | # define local_irq_disable_hw() \ | ||
141 | do { \ | ||
142 | if (!irqs_disabled_hw()) { \ | ||
143 | local_irq_disable_hw_notrace(); \ | ||
144 | ipipe_trace_begin(0x80000000); \ | ||
145 | } \ | ||
146 | } while (0) | ||
147 | # define local_irq_enable_hw() \ | ||
148 | do { \ | ||
149 | if (irqs_disabled_hw()) { \ | ||
150 | ipipe_trace_end(0x80000000); \ | ||
151 | local_irq_enable_hw_notrace(); \ | ||
152 | } \ | ||
153 | } while (0) | ||
154 | # define local_irq_save_hw(flags) \ | ||
155 | do { \ | ||
156 | local_save_flags_hw(flags); \ | ||
157 | if (!irqs_disabled_flags_hw(flags)) { \ | ||
158 | local_irq_disable_hw_notrace(); \ | ||
159 | ipipe_trace_begin(0x80000001); \ | ||
160 | } \ | ||
161 | } while (0) | ||
162 | # define local_irq_restore_hw(flags) \ | ||
163 | do { \ | ||
164 | if (!irqs_disabled_flags_hw(flags)) { \ | ||
165 | ipipe_trace_end(0x80000001); \ | ||
166 | local_irq_enable_hw_notrace(); \ | ||
167 | } \ | ||
168 | } while (0) | ||
169 | #else /* !CONFIG_IPIPE_TRACE_IRQSOFF */ | ||
170 | # define local_irq_disable_hw() local_irq_disable_hw_notrace() | ||
171 | # define local_irq_enable_hw() local_irq_enable_hw_notrace() | ||
172 | # define local_irq_save_hw(flags) local_irq_save_hw_notrace(flags) | ||
173 | # define local_irq_restore_hw(flags) local_irq_restore_hw_notrace(flags) | ||
174 | #endif /* !CONFIG_IPIPE_TRACE_IRQSOFF */ | ||
175 | |||
176 | #else /* CONFIG_IPIPE */ | ||
177 | |||
34 | static inline void raw_local_irq_disable(void) | 178 | static inline void raw_local_irq_disable(void) |
35 | { | 179 | { |
36 | bfin_cli(); | 180 | bfin_cli(); |
@@ -44,12 +188,6 @@ static inline void raw_local_irq_enable(void) | |||
44 | 188 | ||
45 | #define raw_irqs_disabled_flags(flags) (((flags) & ~0x3f) == 0) | 189 | #define raw_irqs_disabled_flags(flags) (((flags) & ~0x3f) == 0) |
46 | 190 | ||
47 | static inline void raw_local_irq_restore(unsigned long flags) | ||
48 | { | ||
49 | if (!raw_irqs_disabled_flags(flags)) | ||
50 | raw_local_irq_enable(); | ||
51 | } | ||
52 | |||
53 | static inline unsigned long __raw_local_irq_save(void) | 191 | static inline unsigned long __raw_local_irq_save(void) |
54 | { | 192 | { |
55 | unsigned long flags = bfin_cli(); | 193 | unsigned long flags = bfin_cli(); |
@@ -60,4 +198,18 @@ static inline unsigned long __raw_local_irq_save(void) | |||
60 | } | 198 | } |
61 | #define raw_local_irq_save(flags) do { (flags) = __raw_local_irq_save(); } while (0) | 199 | #define raw_local_irq_save(flags) do { (flags) = __raw_local_irq_save(); } while (0) |
62 | 200 | ||
201 | #define local_irq_save_hw(flags) raw_local_irq_save(flags) | ||
202 | #define local_irq_restore_hw(flags) raw_local_irq_restore(flags) | ||
203 | #define local_irq_enable_hw() raw_local_irq_enable() | ||
204 | #define local_irq_disable_hw() raw_local_irq_disable() | ||
205 | #define irqs_disabled_hw() irqs_disabled() | ||
206 | |||
207 | #endif /* !CONFIG_IPIPE */ | ||
208 | |||
209 | static inline void raw_local_irq_restore(unsigned long flags) | ||
210 | { | ||
211 | if (!raw_irqs_disabled_flags(flags)) | ||
212 | raw_local_irq_enable(); | ||
213 | } | ||
214 | |||
63 | #endif | 215 | #endif |
diff --git a/arch/blackfin/include/asm/mem_init.h b/arch/blackfin/include/asm/mem_init.h index 61f7487fbf12..4179e329b9c9 100644 --- a/arch/blackfin/include/asm/mem_init.h +++ b/arch/blackfin/include/asm/mem_init.h | |||
@@ -59,7 +59,7 @@ | |||
59 | #define SDRAM_tRP TRP_1 | 59 | #define SDRAM_tRP TRP_1 |
60 | #define SDRAM_tRP_num 1 | 60 | #define SDRAM_tRP_num 1 |
61 | #define SDRAM_tRAS TRAS_4 | 61 | #define SDRAM_tRAS TRAS_4 |
62 | #define SDRAM_tRAS_num 3 | 62 | #define SDRAM_tRAS_num 4 |
63 | #define SDRAM_tRCD TRCD_1 | 63 | #define SDRAM_tRCD TRCD_1 |
64 | #define SDRAM_tWR TWR_2 | 64 | #define SDRAM_tWR TWR_2 |
65 | #endif | 65 | #endif |
@@ -89,6 +89,85 @@ | |||
89 | #endif | 89 | #endif |
90 | #endif | 90 | #endif |
91 | 91 | ||
92 | /* | ||
93 | * The BF526-EZ-Board changed SDRAM chips between revisions, | ||
94 | * so we use below timings to accommodate both. | ||
95 | */ | ||
96 | #if defined(CONFIG_MEM_MT48H32M16LFCJ_75) | ||
97 | #if (CONFIG_SCLK_HZ > 119402985) | ||
98 | #define SDRAM_tRP TRP_2 | ||
99 | #define SDRAM_tRP_num 2 | ||
100 | #define SDRAM_tRAS TRAS_8 | ||
101 | #define SDRAM_tRAS_num 8 | ||
102 | #define SDRAM_tRCD TRCD_2 | ||
103 | #define SDRAM_tWR TWR_2 | ||
104 | #endif | ||
105 | #if (CONFIG_SCLK_HZ > 104477612) && (CONFIG_SCLK_HZ <= 119402985) | ||
106 | #define SDRAM_tRP TRP_2 | ||
107 | #define SDRAM_tRP_num 2 | ||
108 | #define SDRAM_tRAS TRAS_7 | ||
109 | #define SDRAM_tRAS_num 7 | ||
110 | #define SDRAM_tRCD TRCD_2 | ||
111 | #define SDRAM_tWR TWR_2 | ||
112 | #endif | ||
113 | #if (CONFIG_SCLK_HZ > 89552239) && (CONFIG_SCLK_HZ <= 104477612) | ||
114 | #define SDRAM_tRP TRP_2 | ||
115 | #define SDRAM_tRP_num 2 | ||
116 | #define SDRAM_tRAS TRAS_6 | ||
117 | #define SDRAM_tRAS_num 6 | ||
118 | #define SDRAM_tRCD TRCD_2 | ||
119 | #define SDRAM_tWR TWR_2 | ||
120 | #endif | ||
121 | #if (CONFIG_SCLK_HZ > 74626866) && (CONFIG_SCLK_HZ <= 89552239) | ||
122 | #define SDRAM_tRP TRP_2 | ||
123 | #define SDRAM_tRP_num 2 | ||
124 | #define SDRAM_tRAS TRAS_5 | ||
125 | #define SDRAM_tRAS_num 5 | ||
126 | #define SDRAM_tRCD TRCD_2 | ||
127 | #define SDRAM_tWR TWR_2 | ||
128 | #endif | ||
129 | #if (CONFIG_SCLK_HZ > 66666667) && (CONFIG_SCLK_HZ <= 74626866) | ||
130 | #define SDRAM_tRP TRP_2 | ||
131 | #define SDRAM_tRP_num 2 | ||
132 | #define SDRAM_tRAS TRAS_4 | ||
133 | #define SDRAM_tRAS_num 4 | ||
134 | #define SDRAM_tRCD TRCD_2 | ||
135 | #define SDRAM_tWR TWR_2 | ||
136 | #endif | ||
137 | #if (CONFIG_SCLK_HZ > 59701493) && (CONFIG_SCLK_HZ <= 66666667) | ||
138 | #define SDRAM_tRP TRP_2 | ||
139 | #define SDRAM_tRP_num 2 | ||
140 | #define SDRAM_tRAS TRAS_4 | ||
141 | #define SDRAM_tRAS_num 4 | ||
142 | #define SDRAM_tRCD TRCD_1 | ||
143 | #define SDRAM_tWR TWR_2 | ||
144 | #endif | ||
145 | #if (CONFIG_SCLK_HZ > 44776119) && (CONFIG_SCLK_HZ <= 59701493) | ||
146 | #define SDRAM_tRP TRP_2 | ||
147 | #define SDRAM_tRP_num 2 | ||
148 | #define SDRAM_tRAS TRAS_3 | ||
149 | #define SDRAM_tRAS_num 3 | ||
150 | #define SDRAM_tRCD TRCD_1 | ||
151 | #define SDRAM_tWR TWR_2 | ||
152 | #endif | ||
153 | #if (CONFIG_SCLK_HZ > 29850746) && (CONFIG_SCLK_HZ <= 44776119) | ||
154 | #define SDRAM_tRP TRP_1 | ||
155 | #define SDRAM_tRP_num 1 | ||
156 | #define SDRAM_tRAS TRAS_3 | ||
157 | #define SDRAM_tRAS_num 3 | ||
158 | #define SDRAM_tRCD TRCD_1 | ||
159 | #define SDRAM_tWR TWR_2 | ||
160 | #endif | ||
161 | #if (CONFIG_SCLK_HZ <= 29850746) | ||
162 | #define SDRAM_tRP TRP_1 | ||
163 | #define SDRAM_tRP_num 1 | ||
164 | #define SDRAM_tRAS TRAS_2 | ||
165 | #define SDRAM_tRAS_num 2 | ||
166 | #define SDRAM_tRCD TRCD_1 | ||
167 | #define SDRAM_tWR TWR_2 | ||
168 | #endif | ||
169 | #endif | ||
170 | |||
92 | #if defined(CONFIG_MEM_MT48LC16M8A2TG_75) || \ | 171 | #if defined(CONFIG_MEM_MT48LC16M8A2TG_75) || \ |
93 | defined(CONFIG_MEM_MT48LC8M32B2B5_7) | 172 | defined(CONFIG_MEM_MT48LC8M32B2B5_7) |
94 | /*SDRAM INFORMATION: */ | 173 | /*SDRAM INFORMATION: */ |
@@ -109,6 +188,13 @@ | |||
109 | #define SDRAM_CL CL_3 | 188 | #define SDRAM_CL CL_3 |
110 | #endif | 189 | #endif |
111 | 190 | ||
191 | #if defined(CONFIG_MEM_MT48H32M16LFCJ_75) | ||
192 | /*SDRAM INFORMATION: */ | ||
193 | #define SDRAM_Tref 64 /* Refresh period in milliseconds */ | ||
194 | #define SDRAM_NRA 8192 /* Number of row addresses in SDRAM */ | ||
195 | #define SDRAM_CL CL_2 | ||
196 | #endif | ||
197 | |||
112 | 198 | ||
113 | #ifdef CONFIG_BFIN_KERNEL_CLOCK_MEMINIT_CALC | 199 | #ifdef CONFIG_BFIN_KERNEL_CLOCK_MEMINIT_CALC |
114 | /* Equation from section 17 (p17-46) of BF533 HRM */ | 200 | /* Equation from section 17 (p17-46) of BF533 HRM */ |
diff --git a/arch/blackfin/include/asm/mem_map.h b/arch/blackfin/include/asm/mem_map.h index e92b31051bb7..5e21627c9ba2 100644 --- a/arch/blackfin/include/asm/mem_map.h +++ b/arch/blackfin/include/asm/mem_map.h | |||
@@ -1,87 +1,84 @@ | |||
1 | /* | 1 | /* |
2 | * mem_map.h | 2 | * Common Blackfin memory map |
3 | * Common header file for blackfin family of processors. | ||
4 | * | 3 | * |
4 | * Copyright 2004-2009 Analog Devices Inc. | ||
5 | * Licensed under the GPL-2 or later. | ||
5 | */ | 6 | */ |
6 | 7 | ||
7 | #ifndef _MEM_MAP_H_ | 8 | #ifndef __BFIN_MEM_MAP_H__ |
8 | #define _MEM_MAP_H_ | 9 | #define __BFIN_MEM_MAP_H__ |
9 | 10 | ||
10 | #include <mach/mem_map.h> | 11 | #include <mach/mem_map.h> |
11 | 12 | ||
12 | #ifndef __ASSEMBLY__ | 13 | /* Every Blackfin so far has MMRs like this */ |
14 | #ifndef COREMMR_BASE | ||
15 | # define COREMMR_BASE 0xFFE00000 | ||
16 | #endif | ||
17 | #ifndef SYSMMR_BASE | ||
18 | # define SYSMMR_BASE 0xFFC00000 | ||
19 | #endif | ||
13 | 20 | ||
14 | #ifdef CONFIG_SMP | 21 | /* Every Blackfin so far has on-chip Scratch Pad SRAM like this */ |
15 | static inline ulong get_l1_scratch_start_cpu(int cpu) | 22 | #ifndef L1_SCRATCH_START |
16 | { | 23 | # define L1_SCRATCH_START 0xFFB00000 |
17 | return (cpu) ? COREB_L1_SCRATCH_START : COREA_L1_SCRATCH_START; | 24 | # define L1_SCRATCH_LENGTH 0x1000 |
18 | } | 25 | #endif |
19 | static inline ulong get_l1_code_start_cpu(int cpu) | ||
20 | { | ||
21 | return (cpu) ? COREB_L1_CODE_START : COREA_L1_CODE_START; | ||
22 | } | ||
23 | static inline ulong get_l1_data_a_start_cpu(int cpu) | ||
24 | { | ||
25 | return (cpu) ? COREB_L1_DATA_A_START : COREA_L1_DATA_A_START; | ||
26 | } | ||
27 | static inline ulong get_l1_data_b_start_cpu(int cpu) | ||
28 | { | ||
29 | return (cpu) ? COREB_L1_DATA_B_START : COREA_L1_DATA_B_START; | ||
30 | } | ||
31 | 26 | ||
32 | static inline ulong get_l1_scratch_start(void) | 27 | /* Most parts lack on-chip L2 SRAM */ |
33 | { | 28 | #ifndef L2_START |
34 | return get_l1_scratch_start_cpu(blackfin_core_id()); | 29 | # define L2_START 0 |
35 | } | 30 | # define L2_LENGTH 0 |
36 | static inline ulong get_l1_code_start(void) | 31 | #endif |
37 | { | 32 | |
38 | return get_l1_code_start_cpu(blackfin_core_id()); | 33 | /* Most parts lack on-chip L1 ROM */ |
39 | } | 34 | #ifndef L1_ROM_START |
40 | static inline ulong get_l1_data_a_start(void) | 35 | # define L1_ROM_START 0 |
41 | { | 36 | # define L1_ROM_LENGTH 0 |
42 | return get_l1_data_a_start_cpu(blackfin_core_id()); | 37 | #endif |
43 | } | 38 | |
44 | static inline ulong get_l1_data_b_start(void) | 39 | /* Allow wonky SMP ports to override this */ |
45 | { | 40 | #ifndef GET_PDA_SAFE |
46 | return get_l1_data_b_start_cpu(blackfin_core_id()); | 41 | # define GET_PDA_SAFE(preg) \ |
47 | } | 42 | preg.l = _cpu_pda; \ |
43 | preg.h = _cpu_pda; | ||
44 | # define GET_PDA(preg, dreg) GET_PDA_SAFE(preg) | ||
48 | 45 | ||
49 | #else /* !CONFIG_SMP */ | 46 | # ifndef __ASSEMBLY__ |
50 | 47 | ||
51 | static inline ulong get_l1_scratch_start_cpu(int cpu) | 48 | static inline unsigned long get_l1_scratch_start_cpu(int cpu) |
52 | { | 49 | { |
53 | return L1_SCRATCH_START; | 50 | return L1_SCRATCH_START; |
54 | } | 51 | } |
55 | static inline ulong get_l1_code_start_cpu(int cpu) | 52 | static inline unsigned long get_l1_code_start_cpu(int cpu) |
56 | { | 53 | { |
57 | return L1_CODE_START; | 54 | return L1_CODE_START; |
58 | } | 55 | } |
59 | static inline ulong get_l1_data_a_start_cpu(int cpu) | 56 | static inline unsigned long get_l1_data_a_start_cpu(int cpu) |
60 | { | 57 | { |
61 | return L1_DATA_A_START; | 58 | return L1_DATA_A_START; |
62 | } | 59 | } |
63 | static inline ulong get_l1_data_b_start_cpu(int cpu) | 60 | static inline unsigned long get_l1_data_b_start_cpu(int cpu) |
64 | { | 61 | { |
65 | return L1_DATA_B_START; | 62 | return L1_DATA_B_START; |
66 | } | 63 | } |
67 | static inline ulong get_l1_scratch_start(void) | 64 | static inline unsigned long get_l1_scratch_start(void) |
68 | { | 65 | { |
69 | return get_l1_scratch_start_cpu(0); | 66 | return get_l1_scratch_start_cpu(0); |
70 | } | 67 | } |
71 | static inline ulong get_l1_code_start(void) | 68 | static inline unsigned long get_l1_code_start(void) |
72 | { | 69 | { |
73 | return get_l1_code_start_cpu(0); | 70 | return get_l1_code_start_cpu(0); |
74 | } | 71 | } |
75 | static inline ulong get_l1_data_a_start(void) | 72 | static inline unsigned long get_l1_data_a_start(void) |
76 | { | 73 | { |
77 | return get_l1_data_a_start_cpu(0); | 74 | return get_l1_data_a_start_cpu(0); |
78 | } | 75 | } |
79 | static inline ulong get_l1_data_b_start(void) | 76 | static inline unsigned long get_l1_data_b_start(void) |
80 | { | 77 | { |
81 | return get_l1_data_b_start_cpu(0); | 78 | return get_l1_data_b_start_cpu(0); |
82 | } | 79 | } |
83 | 80 | ||
84 | #endif /* CONFIG_SMP */ | 81 | # endif /* __ASSEMBLY__ */ |
85 | #endif /* __ASSEMBLY__ */ | 82 | #endif /* !GET_PDA_SAFE */ |
86 | 83 | ||
87 | #endif /* _MEM_MAP_H_ */ | 84 | #endif |
diff --git a/arch/blackfin/include/asm/system.h b/arch/blackfin/include/asm/system.h index 294dbda24164..85e8f16cf8c2 100644 --- a/arch/blackfin/include/asm/system.h +++ b/arch/blackfin/include/asm/system.h | |||
@@ -135,11 +135,13 @@ struct __xchg_dummy { | |||
135 | }; | 135 | }; |
136 | #define __xg(x) ((volatile struct __xchg_dummy *)(x)) | 136 | #define __xg(x) ((volatile struct __xchg_dummy *)(x)) |
137 | 137 | ||
138 | #include <mach/blackfin.h> | ||
139 | |||
138 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, | 140 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, |
139 | int size) | 141 | int size) |
140 | { | 142 | { |
141 | unsigned long tmp = 0; | 143 | unsigned long tmp = 0; |
142 | unsigned long flags = 0; | 144 | unsigned long flags; |
143 | 145 | ||
144 | local_irq_save_hw(flags); | 146 | local_irq_save_hw(flags); |
145 | 147 | ||
diff --git a/arch/blackfin/include/asm/thread_info.h b/arch/blackfin/include/asm/thread_info.h index 2920087516f2..2bbfdd950afc 100644 --- a/arch/blackfin/include/asm/thread_info.h +++ b/arch/blackfin/include/asm/thread_info.h | |||
@@ -77,7 +77,7 @@ struct thread_info { | |||
77 | .exec_domain = &default_exec_domain, \ | 77 | .exec_domain = &default_exec_domain, \ |
78 | .flags = 0, \ | 78 | .flags = 0, \ |
79 | .cpu = 0, \ | 79 | .cpu = 0, \ |
80 | .preempt_count = 1, \ | 80 | .preempt_count = INIT_PREEMPT_COUNT, \ |
81 | .restart_block = { \ | 81 | .restart_block = { \ |
82 | .fn = do_no_restart_syscall, \ | 82 | .fn = do_no_restart_syscall, \ |
83 | }, \ | 83 | }, \ |
diff --git a/arch/blackfin/include/asm/traps.h b/arch/blackfin/include/asm/traps.h index 34f7295fb070..3cdc454cde23 100644 --- a/arch/blackfin/include/asm/traps.h +++ b/arch/blackfin/include/asm/traps.h | |||
@@ -111,9 +111,7 @@ | |||
111 | level " bits in the Watchpoint Instruction Address Control register (WPIACTL) is set.\n" | 111 | level " bits in the Watchpoint Instruction Address Control register (WPIACTL) is set.\n" |
112 | #define EXC_0x2A(level) \ | 112 | #define EXC_0x2A(level) \ |
113 | "Instruction fetch misaligned address violation\n" \ | 113 | "Instruction fetch misaligned address violation\n" \ |
114 | level " - Attempted misaligned instruction cache fetch. On a misaligned instruction fetch\n" \ | 114 | level " - Attempted misaligned instruction cache fetch.\n" |
115 | level " exception, the return address provided in RETX is the destination address which is\n" \ | ||
116 | level " misaligned, rather than the address of the offending instruction.\n" | ||
117 | #define EXC_0x2B(level) \ | 115 | #define EXC_0x2B(level) \ |
118 | "CPLB protection violation\n" \ | 116 | "CPLB protection violation\n" \ |
119 | level " - Illegal instruction fetch access (memory protection violation).\n" | 117 | level " - Illegal instruction fetch access (memory protection violation).\n" |
diff --git a/arch/blackfin/include/asm/uaccess.h b/arch/blackfin/include/asm/uaccess.h index 8894e9ffbb57..2f469a1f80fb 100644 --- a/arch/blackfin/include/asm/uaccess.h +++ b/arch/blackfin/include/asm/uaccess.h | |||
@@ -265,4 +265,26 @@ __clear_user(void *to, unsigned long n) | |||
265 | 265 | ||
266 | #define clear_user(to, n) __clear_user(to, n) | 266 | #define clear_user(to, n) __clear_user(to, n) |
267 | 267 | ||
268 | /* How to interpret these return values: | ||
269 | * CORE: can be accessed by core load or dma memcpy | ||
270 | * CORE_ONLY: can only be accessed by core load | ||
271 | * DMA: can only be accessed by dma memcpy | ||
272 | * IDMA: can only be accessed by interprocessor dma memcpy (BF561) | ||
273 | * ITEST: can be accessed by isram memcpy or dma memcpy | ||
274 | */ | ||
275 | enum { | ||
276 | BFIN_MEM_ACCESS_CORE = 0, | ||
277 | BFIN_MEM_ACCESS_CORE_ONLY, | ||
278 | BFIN_MEM_ACCESS_DMA, | ||
279 | BFIN_MEM_ACCESS_IDMA, | ||
280 | BFIN_MEM_ACCESS_ITEST, | ||
281 | }; | ||
282 | /** | ||
283 | * bfin_mem_access_type() - what kind of memory access is required | ||
284 | * @addr: the address to check | ||
285 | * @size: number of bytes needed | ||
286 | * @return: <0 is error, >=0 is BFIN_MEM_ACCESS_xxx enum (see above) | ||
287 | */ | ||
288 | int bfin_mem_access_type(unsigned long addr, unsigned long size); | ||
289 | |||
268 | #endif /* _BLACKFIN_UACCESS_H */ | 290 | #endif /* _BLACKFIN_UACCESS_H */ |
diff --git a/arch/blackfin/include/asm/unistd.h b/arch/blackfin/include/asm/unistd.h index da35133c171d..c8e7ee4768cd 100644 --- a/arch/blackfin/include/asm/unistd.h +++ b/arch/blackfin/include/asm/unistd.h | |||
@@ -381,8 +381,9 @@ | |||
381 | #define __NR_preadv 366 | 381 | #define __NR_preadv 366 |
382 | #define __NR_pwritev 367 | 382 | #define __NR_pwritev 367 |
383 | #define __NR_rt_tgsigqueueinfo 368 | 383 | #define __NR_rt_tgsigqueueinfo 368 |
384 | #define __NR_perf_counter_open 369 | ||
384 | 385 | ||
385 | #define __NR_syscall 369 | 386 | #define __NR_syscall 370 |
386 | #define NR_syscalls __NR_syscall | 387 | #define NR_syscalls __NR_syscall |
387 | 388 | ||
388 | /* Old optional stuff no one actually uses */ | 389 | /* Old optional stuff no one actually uses */ |
diff --git a/arch/blackfin/kernel/Makefile b/arch/blackfin/kernel/Makefile index 3731088e181b..141d9281e4b0 100644 --- a/arch/blackfin/kernel/Makefile +++ b/arch/blackfin/kernel/Makefile | |||
@@ -20,7 +20,6 @@ obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o | |||
20 | CFLAGS_REMOVE_ftrace.o = -pg | 20 | CFLAGS_REMOVE_ftrace.o = -pg |
21 | 21 | ||
22 | obj-$(CONFIG_IPIPE) += ipipe.o | 22 | obj-$(CONFIG_IPIPE) += ipipe.o |
23 | obj-$(CONFIG_IPIPE_TRACE_MCOUNT) += mcount.o | ||
24 | obj-$(CONFIG_BFIN_GPTIMERS) += gptimers.o | 23 | obj-$(CONFIG_BFIN_GPTIMERS) += gptimers.o |
25 | obj-$(CONFIG_CPLB_INFO) += cplbinfo.o | 24 | obj-$(CONFIG_CPLB_INFO) += cplbinfo.o |
26 | obj-$(CONFIG_MODULES) += module.o | 25 | obj-$(CONFIG_MODULES) += module.o |
diff --git a/arch/blackfin/kernel/cplb-mpu/cplbinit.c b/arch/blackfin/kernel/cplb-mpu/cplbinit.c index c006a44527bf..36193eed9a1f 100644 --- a/arch/blackfin/kernel/cplb-mpu/cplbinit.c +++ b/arch/blackfin/kernel/cplb-mpu/cplbinit.c | |||
@@ -46,13 +46,13 @@ void __init generate_cplb_tables_cpu(unsigned int cpu) | |||
46 | 46 | ||
47 | printk(KERN_INFO "MPU: setting up cplb tables with memory protection\n"); | 47 | printk(KERN_INFO "MPU: setting up cplb tables with memory protection\n"); |
48 | 48 | ||
49 | #ifdef CONFIG_BFIN_ICACHE | 49 | #ifdef CONFIG_BFIN_EXTMEM_ICACHEABLE |
50 | i_cache = CPLB_L1_CHBL | ANOMALY_05000158_WORKAROUND; | 50 | i_cache = CPLB_L1_CHBL | ANOMALY_05000158_WORKAROUND; |
51 | #endif | 51 | #endif |
52 | 52 | ||
53 | #ifdef CONFIG_BFIN_DCACHE | 53 | #ifdef CONFIG_BFIN_EXTMEM_DCACHEABLE |
54 | d_cache = CPLB_L1_CHBL; | 54 | d_cache = CPLB_L1_CHBL; |
55 | #ifdef CONFIG_BFIN_WT | 55 | #ifdef CONFIG_BFIN_EXTMEM_WRITETROUGH |
56 | d_cache |= CPLB_L1_AOW | CPLB_WT; | 56 | d_cache |= CPLB_L1_AOW | CPLB_WT; |
57 | #endif | 57 | #endif |
58 | #endif | 58 | #endif |
@@ -91,9 +91,9 @@ void __init generate_cplb_tables_cpu(unsigned int cpu) | |||
91 | /* Cover L2 memory */ | 91 | /* Cover L2 memory */ |
92 | #if L2_LENGTH > 0 | 92 | #if L2_LENGTH > 0 |
93 | dcplb_tbl[cpu][i_d].addr = L2_START; | 93 | dcplb_tbl[cpu][i_d].addr = L2_START; |
94 | dcplb_tbl[cpu][i_d++].data = L2_DMEMORY | PAGE_SIZE_1MB; | 94 | dcplb_tbl[cpu][i_d++].data = L2_DMEMORY; |
95 | icplb_tbl[cpu][i_i].addr = L2_START; | 95 | icplb_tbl[cpu][i_i].addr = L2_START; |
96 | icplb_tbl[cpu][i_i++].data = L2_IMEMORY | PAGE_SIZE_1MB; | 96 | icplb_tbl[cpu][i_i++].data = L2_IMEMORY; |
97 | #endif | 97 | #endif |
98 | 98 | ||
99 | first_mask_dcplb = i_d; | 99 | first_mask_dcplb = i_d; |
diff --git a/arch/blackfin/kernel/cplb-mpu/cplbmgr.c b/arch/blackfin/kernel/cplb-mpu/cplbmgr.c index 784923e52a9a..bcdfe9b0b71f 100644 --- a/arch/blackfin/kernel/cplb-mpu/cplbmgr.c +++ b/arch/blackfin/kernel/cplb-mpu/cplbmgr.c | |||
@@ -150,15 +150,19 @@ static noinline int dcplb_miss(unsigned int cpu) | |||
150 | nr_dcplb_miss[cpu]++; | 150 | nr_dcplb_miss[cpu]++; |
151 | 151 | ||
152 | d_data = CPLB_SUPV_WR | CPLB_VALID | CPLB_DIRTY | PAGE_SIZE_4KB; | 152 | d_data = CPLB_SUPV_WR | CPLB_VALID | CPLB_DIRTY | PAGE_SIZE_4KB; |
153 | #ifdef CONFIG_BFIN_DCACHE | 153 | #ifdef CONFIG_BFIN_EXTMEM_DCACHEABLE |
154 | if (bfin_addr_dcacheable(addr)) { | 154 | if (bfin_addr_dcacheable(addr)) { |
155 | d_data |= CPLB_L1_CHBL | ANOMALY_05000158_WORKAROUND; | 155 | d_data |= CPLB_L1_CHBL | ANOMALY_05000158_WORKAROUND; |
156 | #ifdef CONFIG_BFIN_WT | 156 | # ifdef CONFIG_BFIN_EXTMEM_WRITETHROUGH |
157 | d_data |= CPLB_L1_AOW | CPLB_WT; | 157 | d_data |= CPLB_L1_AOW | CPLB_WT; |
158 | #endif | 158 | # endif |
159 | } | 159 | } |
160 | #endif | 160 | #endif |
161 | if (addr >= physical_mem_end) { | 161 | |
162 | if (L2_LENGTH && addr >= L2_START && addr < L2_START + L2_LENGTH) { | ||
163 | addr = L2_START; | ||
164 | d_data = L2_DMEMORY; | ||
165 | } else if (addr >= physical_mem_end) { | ||
162 | if (addr >= ASYNC_BANK0_BASE && addr < ASYNC_BANK3_BASE + ASYNC_BANK3_SIZE | 166 | if (addr >= ASYNC_BANK0_BASE && addr < ASYNC_BANK3_BASE + ASYNC_BANK3_SIZE |
163 | && (status & FAULT_USERSUPV)) { | 167 | && (status & FAULT_USERSUPV)) { |
164 | addr &= ~0x3fffff; | 168 | addr &= ~0x3fffff; |
@@ -235,7 +239,7 @@ static noinline int icplb_miss(unsigned int cpu) | |||
235 | 239 | ||
236 | i_data = CPLB_VALID | CPLB_PORTPRIO | PAGE_SIZE_4KB; | 240 | i_data = CPLB_VALID | CPLB_PORTPRIO | PAGE_SIZE_4KB; |
237 | 241 | ||
238 | #ifdef CONFIG_BFIN_ICACHE | 242 | #ifdef CONFIG_BFIN_EXTMEM_ICACHEABLE |
239 | /* | 243 | /* |
240 | * Normal RAM, and possibly the reserved memory area, are | 244 | * Normal RAM, and possibly the reserved memory area, are |
241 | * cacheable. | 245 | * cacheable. |
@@ -245,7 +249,10 @@ static noinline int icplb_miss(unsigned int cpu) | |||
245 | i_data |= CPLB_L1_CHBL | ANOMALY_05000158_WORKAROUND; | 249 | i_data |= CPLB_L1_CHBL | ANOMALY_05000158_WORKAROUND; |
246 | #endif | 250 | #endif |
247 | 251 | ||
248 | if (addr >= physical_mem_end) { | 252 | if (L2_LENGTH && addr >= L2_START && addr < L2_START + L2_LENGTH) { |
253 | addr = L2_START; | ||
254 | i_data = L2_IMEMORY; | ||
255 | } else if (addr >= physical_mem_end) { | ||
249 | if (addr >= BOOT_ROM_START && addr < BOOT_ROM_START + BOOT_ROM_LENGTH | 256 | if (addr >= BOOT_ROM_START && addr < BOOT_ROM_START + BOOT_ROM_LENGTH |
250 | && (status & FAULT_USERSUPV)) { | 257 | && (status & FAULT_USERSUPV)) { |
251 | addr &= ~(1 * 1024 * 1024 - 1); | 258 | addr &= ~(1 * 1024 * 1024 - 1); |
@@ -365,13 +372,18 @@ void set_mask_dcplbs(unsigned long *masks, unsigned int cpu) | |||
365 | local_irq_save_hw(flags); | 372 | local_irq_save_hw(flags); |
366 | current_rwx_mask[cpu] = masks; | 373 | current_rwx_mask[cpu] = masks; |
367 | 374 | ||
368 | d_data = CPLB_SUPV_WR | CPLB_VALID | CPLB_DIRTY | PAGE_SIZE_4KB; | 375 | if (L2_LENGTH && addr >= L2_START && addr < L2_START + L2_LENGTH) { |
369 | #ifdef CONFIG_BFIN_DCACHE | 376 | addr = L2_START; |
370 | d_data |= CPLB_L1_CHBL; | 377 | d_data = L2_DMEMORY; |
371 | #ifdef CONFIG_BFIN_WT | 378 | } else { |
372 | d_data |= CPLB_L1_AOW | CPLB_WT; | 379 | d_data = CPLB_SUPV_WR | CPLB_VALID | CPLB_DIRTY | PAGE_SIZE_4KB; |
373 | #endif | 380 | #ifdef CONFIG_BFIN_EXTMEM_DCACHEABLE |
381 | d_data |= CPLB_L1_CHBL; | ||
382 | # ifdef CONFIG_BFIN_EXTMEM_WRITETHROUGH | ||
383 | d_data |= CPLB_L1_AOW | CPLB_WT; | ||
384 | # endif | ||
374 | #endif | 385 | #endif |
386 | } | ||
375 | 387 | ||
376 | disable_dcplb(); | 388 | disable_dcplb(); |
377 | for (i = first_mask_dcplb; i < first_switched_dcplb; i++) { | 389 | for (i = first_mask_dcplb; i < first_switched_dcplb; i++) { |
diff --git a/arch/blackfin/kernel/ipipe.c b/arch/blackfin/kernel/ipipe.c index d8cde1fc5cb9..b8d22034b9a6 100644 --- a/arch/blackfin/kernel/ipipe.c +++ b/arch/blackfin/kernel/ipipe.c | |||
@@ -52,7 +52,7 @@ EXPORT_SYMBOL(__ipipe_freq_scale); | |||
52 | 52 | ||
53 | atomic_t __ipipe_irq_lvdepth[IVG15 + 1]; | 53 | atomic_t __ipipe_irq_lvdepth[IVG15 + 1]; |
54 | 54 | ||
55 | unsigned long __ipipe_irq_lvmask = __all_masked_irq_flags; | 55 | unsigned long __ipipe_irq_lvmask = bfin_no_irqs; |
56 | EXPORT_SYMBOL(__ipipe_irq_lvmask); | 56 | EXPORT_SYMBOL(__ipipe_irq_lvmask); |
57 | 57 | ||
58 | static void __ipipe_ack_irq(unsigned irq, struct irq_desc *desc) | 58 | static void __ipipe_ack_irq(unsigned irq, struct irq_desc *desc) |
@@ -342,8 +342,3 @@ void ___ipipe_sync_pipeline(unsigned long syncmask) | |||
342 | } | 342 | } |
343 | 343 | ||
344 | EXPORT_SYMBOL(show_stack); | 344 | EXPORT_SYMBOL(show_stack); |
345 | |||
346 | #ifdef CONFIG_IPIPE_TRACE_MCOUNT | ||
347 | void notrace _mcount(void); | ||
348 | EXPORT_SYMBOL(_mcount); | ||
349 | #endif /* CONFIG_IPIPE_TRACE_MCOUNT */ | ||
diff --git a/arch/blackfin/kernel/irqchip.c b/arch/blackfin/kernel/irqchip.c index 6e31e935bb31..4b5fd36187d9 100644 --- a/arch/blackfin/kernel/irqchip.c +++ b/arch/blackfin/kernel/irqchip.c | |||
@@ -38,38 +38,15 @@ | |||
38 | #include <asm/pda.h> | 38 | #include <asm/pda.h> |
39 | 39 | ||
40 | static atomic_t irq_err_count; | 40 | static atomic_t irq_err_count; |
41 | static spinlock_t irq_controller_lock; | ||
42 | |||
43 | /* | ||
44 | * Dummy mask/unmask handler | ||
45 | */ | ||
46 | void dummy_mask_unmask_irq(unsigned int irq) | ||
47 | { | ||
48 | } | ||
49 | |||
50 | void ack_bad_irq(unsigned int irq) | 41 | void ack_bad_irq(unsigned int irq) |
51 | { | 42 | { |
52 | atomic_inc(&irq_err_count); | 43 | atomic_inc(&irq_err_count); |
53 | printk(KERN_ERR "IRQ: spurious interrupt %d\n", irq); | 44 | printk(KERN_ERR "IRQ: spurious interrupt %d\n", irq); |
54 | } | 45 | } |
55 | 46 | ||
56 | static struct irq_chip bad_chip = { | ||
57 | .ack = dummy_mask_unmask_irq, | ||
58 | .mask = dummy_mask_unmask_irq, | ||
59 | .unmask = dummy_mask_unmask_irq, | ||
60 | }; | ||
61 | |||
62 | static int bad_stats; | ||
63 | static struct irq_desc bad_irq_desc = { | 47 | static struct irq_desc bad_irq_desc = { |
64 | .status = IRQ_DISABLED, | ||
65 | .chip = &bad_chip, | ||
66 | .handle_irq = handle_bad_irq, | 48 | .handle_irq = handle_bad_irq, |
67 | .depth = 1, | ||
68 | .lock = __SPIN_LOCK_UNLOCKED(irq_desc->lock), | 49 | .lock = __SPIN_LOCK_UNLOCKED(irq_desc->lock), |
69 | .kstat_irqs = &bad_stats, | ||
70 | #ifdef CONFIG_SMP | ||
71 | .affinity = CPU_MASK_ALL | ||
72 | #endif | ||
73 | }; | 50 | }; |
74 | 51 | ||
75 | #ifdef CONFIG_CPUMASK_OFFSTACK | 52 | #ifdef CONFIG_CPUMASK_OFFSTACK |
@@ -77,6 +54,7 @@ static struct irq_desc bad_irq_desc = { | |||
77 | #error "Blackfin architecture does not support CONFIG_CPUMASK_OFFSTACK." | 54 | #error "Blackfin architecture does not support CONFIG_CPUMASK_OFFSTACK." |
78 | #endif | 55 | #endif |
79 | 56 | ||
57 | #ifdef CONFIG_PROC_FS | ||
80 | int show_interrupts(struct seq_file *p, void *v) | 58 | int show_interrupts(struct seq_file *p, void *v) |
81 | { | 59 | { |
82 | int i = *(loff_t *) v, j; | 60 | int i = *(loff_t *) v, j; |
@@ -108,50 +86,29 @@ int show_interrupts(struct seq_file *p, void *v) | |||
108 | } | 86 | } |
109 | return 0; | 87 | return 0; |
110 | } | 88 | } |
111 | |||
112 | /* | ||
113 | * do_IRQ handles all hardware IRQs. Decoded IRQs should not | ||
114 | * come via this function. Instead, they should provide their | ||
115 | * own 'handler' | ||
116 | */ | ||
117 | #ifdef CONFIG_DO_IRQ_L1 | ||
118 | __attribute__((l1_text)) | ||
119 | #endif | ||
120 | asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | ||
121 | { | ||
122 | struct pt_regs *old_regs; | ||
123 | struct irq_desc *desc = irq_desc + irq; | ||
124 | #ifndef CONFIG_IPIPE | ||
125 | unsigned short pending, other_ints; | ||
126 | #endif | 89 | #endif |
127 | old_regs = set_irq_regs(regs); | ||
128 | 90 | ||
129 | /* | ||
130 | * Some hardware gives randomly wrong interrupts. Rather | ||
131 | * than crashing, do something sensible. | ||
132 | */ | ||
133 | if (irq >= NR_IRQS) | ||
134 | desc = &bad_irq_desc; | ||
135 | |||
136 | irq_enter(); | ||
137 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | 91 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
92 | static void check_stack_overflow(int irq) | ||
93 | { | ||
138 | /* Debugging check for stack overflow: is there less than STACK_WARN free? */ | 94 | /* Debugging check for stack overflow: is there less than STACK_WARN free? */ |
139 | { | 95 | long sp = __get_SP() & (THREAD_SIZE - 1); |
140 | long sp; | ||
141 | |||
142 | sp = __get_SP() & (THREAD_SIZE-1); | ||
143 | 96 | ||
144 | if (unlikely(sp < (sizeof(struct thread_info) + STACK_WARN))) { | 97 | if (unlikely(sp < (sizeof(struct thread_info) + STACK_WARN))) { |
145 | dump_stack(); | 98 | dump_stack(); |
146 | printk(KERN_EMERG "%s: possible stack overflow while handling irq %i " | 99 | pr_emerg("irq%i: possible stack overflow only %ld bytes free\n", |
147 | " only %ld bytes free\n", | 100 | irq, sp - sizeof(struct thread_info)); |
148 | __func__, irq, sp - sizeof(struct thread_info)); | ||
149 | } | ||
150 | } | 101 | } |
102 | } | ||
103 | #else | ||
104 | static inline void check_stack_overflow(int irq) { } | ||
151 | #endif | 105 | #endif |
152 | generic_handle_irq(irq); | ||
153 | 106 | ||
154 | #ifndef CONFIG_IPIPE | 107 | #ifndef CONFIG_IPIPE |
108 | static void maybe_lower_to_irq14(void) | ||
109 | { | ||
110 | unsigned short pending, other_ints; | ||
111 | |||
155 | /* | 112 | /* |
156 | * If we're the only interrupt running (ignoring IRQ15 which | 113 | * If we're the only interrupt running (ignoring IRQ15 which |
157 | * is for syscalls), lower our priority to IRQ14 so that | 114 | * is for syscalls), lower our priority to IRQ14 so that |
@@ -165,7 +122,38 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
165 | other_ints = pending & (pending - 1); | 122 | other_ints = pending & (pending - 1); |
166 | if (other_ints == 0) | 123 | if (other_ints == 0) |
167 | lower_to_irq14(); | 124 | lower_to_irq14(); |
168 | #endif /* !CONFIG_IPIPE */ | 125 | } |
126 | #else | ||
127 | static inline void maybe_lower_to_irq14(void) { } | ||
128 | #endif | ||
129 | |||
130 | /* | ||
131 | * do_IRQ handles all hardware IRQs. Decoded IRQs should not | ||
132 | * come via this function. Instead, they should provide their | ||
133 | * own 'handler' | ||
134 | */ | ||
135 | #ifdef CONFIG_DO_IRQ_L1 | ||
136 | __attribute__((l1_text)) | ||
137 | #endif | ||
138 | asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | ||
139 | { | ||
140 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
141 | |||
142 | irq_enter(); | ||
143 | |||
144 | check_stack_overflow(irq); | ||
145 | |||
146 | /* | ||
147 | * Some hardware gives randomly wrong interrupts. Rather | ||
148 | * than crashing, do something sensible. | ||
149 | */ | ||
150 | if (irq >= NR_IRQS) | ||
151 | handle_bad_irq(irq, &bad_irq_desc); | ||
152 | else | ||
153 | generic_handle_irq(irq); | ||
154 | |||
155 | maybe_lower_to_irq14(); | ||
156 | |||
169 | irq_exit(); | 157 | irq_exit(); |
170 | 158 | ||
171 | set_irq_regs(old_regs); | 159 | set_irq_regs(old_regs); |
@@ -173,14 +161,6 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
173 | 161 | ||
174 | void __init init_IRQ(void) | 162 | void __init init_IRQ(void) |
175 | { | 163 | { |
176 | struct irq_desc *desc; | ||
177 | int irq; | ||
178 | |||
179 | spin_lock_init(&irq_controller_lock); | ||
180 | for (irq = 0, desc = irq_desc; irq < NR_IRQS; irq++, desc++) { | ||
181 | *desc = bad_irq_desc; | ||
182 | } | ||
183 | |||
184 | init_arch_irq(); | 164 | init_arch_irq(); |
185 | 165 | ||
186 | #ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND | 166 | #ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND |
diff --git a/arch/blackfin/kernel/kgdb.c b/arch/blackfin/kernel/kgdb.c index da28f796ad78..cce79d05b90b 100644 --- a/arch/blackfin/kernel/kgdb.c +++ b/arch/blackfin/kernel/kgdb.c | |||
@@ -34,15 +34,6 @@ int gdb_bfin_vector = -1; | |||
34 | #error change the definition of slavecpulocks | 34 | #error change the definition of slavecpulocks |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | #define IN_MEM(addr, size, l1_addr, l1_size) \ | ||
38 | ({ \ | ||
39 | unsigned long __addr = (unsigned long)(addr); \ | ||
40 | (l1_size && __addr >= l1_addr && __addr + (size) <= l1_addr + l1_size); \ | ||
41 | }) | ||
42 | #define ASYNC_BANK_SIZE \ | ||
43 | (ASYNC_BANK0_SIZE + ASYNC_BANK1_SIZE + \ | ||
44 | ASYNC_BANK2_SIZE + ASYNC_BANK3_SIZE) | ||
45 | |||
46 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | 37 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) |
47 | { | 38 | { |
48 | gdb_regs[BFIN_R0] = regs->r0; | 39 | gdb_regs[BFIN_R0] = regs->r0; |
@@ -463,41 +454,88 @@ static int hex(char ch) | |||
463 | 454 | ||
464 | static int validate_memory_access_address(unsigned long addr, int size) | 455 | static int validate_memory_access_address(unsigned long addr, int size) |
465 | { | 456 | { |
466 | int cpu = raw_smp_processor_id(); | 457 | if (size < 0 || addr == 0) |
467 | |||
468 | if (size < 0) | ||
469 | return -EFAULT; | 458 | return -EFAULT; |
470 | if (addr >= 0x1000 && (addr + size) <= physical_mem_end) | 459 | return bfin_mem_access_type(addr, size); |
471 | return 0; | 460 | } |
472 | if (addr >= SYSMMR_BASE) | 461 | |
473 | return 0; | 462 | static int bfin_probe_kernel_read(char *dst, char *src, int size) |
474 | if (IN_MEM(addr, size, ASYNC_BANK0_BASE, ASYNC_BANK_SIZE)) | 463 | { |
475 | return 0; | 464 | unsigned long lsrc = (unsigned long)src; |
476 | if (cpu == 0) { | 465 | int mem_type; |
477 | if (IN_MEM(addr, size, L1_SCRATCH_START, L1_SCRATCH_LENGTH)) | 466 | |
478 | return 0; | 467 | mem_type = validate_memory_access_address(lsrc, size); |
479 | if (IN_MEM(addr, size, L1_CODE_START, L1_CODE_LENGTH)) | 468 | if (mem_type < 0) |
480 | return 0; | 469 | return mem_type; |
481 | if (IN_MEM(addr, size, L1_DATA_A_START, L1_DATA_A_LENGTH)) | 470 | |
482 | return 0; | 471 | if (lsrc >= SYSMMR_BASE) { |
483 | if (IN_MEM(addr, size, L1_DATA_B_START, L1_DATA_B_LENGTH)) | 472 | if (size == 2 && lsrc % 2 == 0) { |
484 | return 0; | 473 | u16 mmr = bfin_read16(src); |
485 | #ifdef CONFIG_SMP | 474 | memcpy(dst, &mmr, sizeof(mmr)); |
486 | } else if (cpu == 1) { | ||
487 | if (IN_MEM(addr, size, COREB_L1_SCRATCH_START, L1_SCRATCH_LENGTH)) | ||
488 | return 0; | 475 | return 0; |
489 | if (IN_MEM(addr, size, COREB_L1_CODE_START, L1_CODE_LENGTH)) | 476 | } else if (size == 4 && lsrc % 4 == 0) { |
477 | u32 mmr = bfin_read32(src); | ||
478 | memcpy(dst, &mmr, sizeof(mmr)); | ||
490 | return 0; | 479 | return 0; |
491 | if (IN_MEM(addr, size, COREB_L1_DATA_A_START, L1_DATA_A_LENGTH)) | 480 | } |
481 | } else { | ||
482 | switch (mem_type) { | ||
483 | case BFIN_MEM_ACCESS_CORE: | ||
484 | case BFIN_MEM_ACCESS_CORE_ONLY: | ||
485 | return probe_kernel_read(dst, src, size); | ||
486 | /* XXX: should support IDMA here with SMP */ | ||
487 | case BFIN_MEM_ACCESS_DMA: | ||
488 | if (dma_memcpy(dst, src, size)) | ||
489 | return 0; | ||
490 | break; | ||
491 | case BFIN_MEM_ACCESS_ITEST: | ||
492 | if (isram_memcpy(dst, src, size)) | ||
493 | return 0; | ||
494 | break; | ||
495 | } | ||
496 | } | ||
497 | |||
498 | return -EFAULT; | ||
499 | } | ||
500 | |||
501 | static int bfin_probe_kernel_write(char *dst, char *src, int size) | ||
502 | { | ||
503 | unsigned long ldst = (unsigned long)dst; | ||
504 | int mem_type; | ||
505 | |||
506 | mem_type = validate_memory_access_address(ldst, size); | ||
507 | if (mem_type < 0) | ||
508 | return mem_type; | ||
509 | |||
510 | if (ldst >= SYSMMR_BASE) { | ||
511 | if (size == 2 && ldst % 2 == 0) { | ||
512 | u16 mmr; | ||
513 | memcpy(&mmr, src, sizeof(mmr)); | ||
514 | bfin_write16(dst, mmr); | ||
492 | return 0; | 515 | return 0; |
493 | if (IN_MEM(addr, size, COREB_L1_DATA_B_START, L1_DATA_B_LENGTH)) | 516 | } else if (size == 4 && ldst % 4 == 0) { |
517 | u32 mmr; | ||
518 | memcpy(&mmr, src, sizeof(mmr)); | ||
519 | bfin_write32(dst, mmr); | ||
494 | return 0; | 520 | return 0; |
495 | #endif | 521 | } |
522 | } else { | ||
523 | switch (mem_type) { | ||
524 | case BFIN_MEM_ACCESS_CORE: | ||
525 | case BFIN_MEM_ACCESS_CORE_ONLY: | ||
526 | return probe_kernel_write(dst, src, size); | ||
527 | /* XXX: should support IDMA here with SMP */ | ||
528 | case BFIN_MEM_ACCESS_DMA: | ||
529 | if (dma_memcpy(dst, src, size)) | ||
530 | return 0; | ||
531 | break; | ||
532 | case BFIN_MEM_ACCESS_ITEST: | ||
533 | if (isram_memcpy(dst, src, size)) | ||
534 | return 0; | ||
535 | break; | ||
536 | } | ||
496 | } | 537 | } |
497 | 538 | ||
498 | if (IN_MEM(addr, size, L2_START, L2_LENGTH)) | ||
499 | return 0; | ||
500 | |||
501 | return -EFAULT; | 539 | return -EFAULT; |
502 | } | 540 | } |
503 | 541 | ||
@@ -509,14 +547,6 @@ int kgdb_mem2hex(char *mem, char *buf, int count) | |||
509 | { | 547 | { |
510 | char *tmp; | 548 | char *tmp; |
511 | int err; | 549 | int err; |
512 | unsigned char *pch; | ||
513 | unsigned short mmr16; | ||
514 | unsigned long mmr32; | ||
515 | int cpu = raw_smp_processor_id(); | ||
516 | |||
517 | err = validate_memory_access_address((unsigned long)mem, count); | ||
518 | if (err) | ||
519 | return err; | ||
520 | 550 | ||
521 | /* | 551 | /* |
522 | * We use the upper half of buf as an intermediate buffer for the | 552 | * We use the upper half of buf as an intermediate buffer for the |
@@ -524,44 +554,7 @@ int kgdb_mem2hex(char *mem, char *buf, int count) | |||
524 | */ | 554 | */ |
525 | tmp = buf + count; | 555 | tmp = buf + count; |
526 | 556 | ||
527 | if ((unsigned int)mem >= SYSMMR_BASE) { /*access MMR registers*/ | 557 | err = bfin_probe_kernel_read(tmp, mem, count); |
528 | switch (count) { | ||
529 | case 2: | ||
530 | if ((unsigned int)mem % 2 == 0) { | ||
531 | mmr16 = *(unsigned short *)mem; | ||
532 | pch = (unsigned char *)&mmr16; | ||
533 | *tmp++ = *pch++; | ||
534 | *tmp++ = *pch++; | ||
535 | tmp -= 2; | ||
536 | } else | ||
537 | err = -EFAULT; | ||
538 | break; | ||
539 | case 4: | ||
540 | if ((unsigned int)mem % 4 == 0) { | ||
541 | mmr32 = *(unsigned long *)mem; | ||
542 | pch = (unsigned char *)&mmr32; | ||
543 | *tmp++ = *pch++; | ||
544 | *tmp++ = *pch++; | ||
545 | *tmp++ = *pch++; | ||
546 | *tmp++ = *pch++; | ||
547 | tmp -= 4; | ||
548 | } else | ||
549 | err = -EFAULT; | ||
550 | break; | ||
551 | default: | ||
552 | err = -EFAULT; | ||
553 | } | ||
554 | } else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH)) | ||
555 | #ifdef CONFIG_SMP | ||
556 | || (cpu == 1 && IN_MEM(mem, count, COREB_L1_CODE_START, L1_CODE_LENGTH)) | ||
557 | #endif | ||
558 | ) { | ||
559 | /* access L1 instruction SRAM*/ | ||
560 | if (dma_memcpy(tmp, mem, count) == NULL) | ||
561 | err = -EFAULT; | ||
562 | } else | ||
563 | err = probe_kernel_read(tmp, mem, count); | ||
564 | |||
565 | if (!err) { | 558 | if (!err) { |
566 | while (count > 0) { | 559 | while (count > 0) { |
567 | buf = pack_hex_byte(buf, *tmp); | 560 | buf = pack_hex_byte(buf, *tmp); |
@@ -582,13 +575,8 @@ int kgdb_mem2hex(char *mem, char *buf, int count) | |||
582 | */ | 575 | */ |
583 | int kgdb_ebin2mem(char *buf, char *mem, int count) | 576 | int kgdb_ebin2mem(char *buf, char *mem, int count) |
584 | { | 577 | { |
585 | char *tmp_old; | 578 | char *tmp_old, *tmp_new; |
586 | char *tmp_new; | ||
587 | unsigned short *mmr16; | ||
588 | unsigned long *mmr32; | ||
589 | int err; | ||
590 | int size; | 579 | int size; |
591 | int cpu = raw_smp_processor_id(); | ||
592 | 580 | ||
593 | tmp_old = tmp_new = buf; | 581 | tmp_old = tmp_new = buf; |
594 | 582 | ||
@@ -601,41 +589,7 @@ int kgdb_ebin2mem(char *buf, char *mem, int count) | |||
601 | tmp_old++; | 589 | tmp_old++; |
602 | } | 590 | } |
603 | 591 | ||
604 | err = validate_memory_access_address((unsigned long)mem, size); | 592 | return bfin_probe_kernel_write(mem, buf, count); |
605 | if (err) | ||
606 | return err; | ||
607 | |||
608 | if ((unsigned int)mem >= SYSMMR_BASE) { /*access MMR registers*/ | ||
609 | switch (size) { | ||
610 | case 2: | ||
611 | if ((unsigned int)mem % 2 == 0) { | ||
612 | mmr16 = (unsigned short *)buf; | ||
613 | *(unsigned short *)mem = *mmr16; | ||
614 | } else | ||
615 | err = -EFAULT; | ||
616 | break; | ||
617 | case 4: | ||
618 | if ((unsigned int)mem % 4 == 0) { | ||
619 | mmr32 = (unsigned long *)buf; | ||
620 | *(unsigned long *)mem = *mmr32; | ||
621 | } else | ||
622 | err = -EFAULT; | ||
623 | break; | ||
624 | default: | ||
625 | err = -EFAULT; | ||
626 | } | ||
627 | } else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH)) | ||
628 | #ifdef CONFIG_SMP | ||
629 | || (cpu == 1 && IN_MEM(mem, count, COREB_L1_CODE_START, L1_CODE_LENGTH)) | ||
630 | #endif | ||
631 | ) { | ||
632 | /* access L1 instruction SRAM */ | ||
633 | if (dma_memcpy(mem, buf, size) == NULL) | ||
634 | err = -EFAULT; | ||
635 | } else | ||
636 | err = probe_kernel_write(mem, buf, size); | ||
637 | |||
638 | return err; | ||
639 | } | 593 | } |
640 | 594 | ||
641 | /* | 595 | /* |
@@ -645,16 +599,7 @@ int kgdb_ebin2mem(char *buf, char *mem, int count) | |||
645 | */ | 599 | */ |
646 | int kgdb_hex2mem(char *buf, char *mem, int count) | 600 | int kgdb_hex2mem(char *buf, char *mem, int count) |
647 | { | 601 | { |
648 | char *tmp_raw; | 602 | char *tmp_raw, *tmp_hex; |
649 | char *tmp_hex; | ||
650 | unsigned short *mmr16; | ||
651 | unsigned long *mmr32; | ||
652 | int err; | ||
653 | int cpu = raw_smp_processor_id(); | ||
654 | |||
655 | err = validate_memory_access_address((unsigned long)mem, count); | ||
656 | if (err) | ||
657 | return err; | ||
658 | 603 | ||
659 | /* | 604 | /* |
660 | * We use the upper half of buf as an intermediate buffer for the | 605 | * We use the upper half of buf as an intermediate buffer for the |
@@ -669,39 +614,18 @@ int kgdb_hex2mem(char *buf, char *mem, int count) | |||
669 | *tmp_raw |= hex(*tmp_hex--) << 4; | 614 | *tmp_raw |= hex(*tmp_hex--) << 4; |
670 | } | 615 | } |
671 | 616 | ||
672 | if ((unsigned int)mem >= SYSMMR_BASE) { /*access MMR registers*/ | 617 | return bfin_probe_kernel_write(mem, tmp_raw, count); |
673 | switch (count) { | ||
674 | case 2: | ||
675 | if ((unsigned int)mem % 2 == 0) { | ||
676 | mmr16 = (unsigned short *)tmp_raw; | ||
677 | *(unsigned short *)mem = *mmr16; | ||
678 | } else | ||
679 | err = -EFAULT; | ||
680 | break; | ||
681 | case 4: | ||
682 | if ((unsigned int)mem % 4 == 0) { | ||
683 | mmr32 = (unsigned long *)tmp_raw; | ||
684 | *(unsigned long *)mem = *mmr32; | ||
685 | } else | ||
686 | err = -EFAULT; | ||
687 | break; | ||
688 | default: | ||
689 | err = -EFAULT; | ||
690 | } | ||
691 | } else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH)) | ||
692 | #ifdef CONFIG_SMP | ||
693 | || (cpu == 1 && IN_MEM(mem, count, COREB_L1_CODE_START, L1_CODE_LENGTH)) | ||
694 | #endif | ||
695 | ) { | ||
696 | /* access L1 instruction SRAM */ | ||
697 | if (dma_memcpy(mem, tmp_raw, count) == NULL) | ||
698 | err = -EFAULT; | ||
699 | } else | ||
700 | err = probe_kernel_write(mem, tmp_raw, count); | ||
701 | |||
702 | return err; | ||
703 | } | 618 | } |
704 | 619 | ||
620 | #define IN_MEM(addr, size, l1_addr, l1_size) \ | ||
621 | ({ \ | ||
622 | unsigned long __addr = (unsigned long)(addr); \ | ||
623 | (l1_size && __addr >= l1_addr && __addr + (size) <= l1_addr + l1_size); \ | ||
624 | }) | ||
625 | #define ASYNC_BANK_SIZE \ | ||
626 | (ASYNC_BANK0_SIZE + ASYNC_BANK1_SIZE + \ | ||
627 | ASYNC_BANK2_SIZE + ASYNC_BANK3_SIZE) | ||
628 | |||
705 | int kgdb_validate_break_address(unsigned long addr) | 629 | int kgdb_validate_break_address(unsigned long addr) |
706 | { | 630 | { |
707 | int cpu = raw_smp_processor_id(); | 631 | int cpu = raw_smp_processor_id(); |
@@ -724,46 +648,17 @@ int kgdb_validate_break_address(unsigned long addr) | |||
724 | 648 | ||
725 | int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr) | 649 | int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr) |
726 | { | 650 | { |
727 | int err; | 651 | int err = bfin_probe_kernel_read(saved_instr, (char *)addr, |
728 | int cpu = raw_smp_processor_id(); | 652 | BREAK_INSTR_SIZE); |
729 | 653 | if (err) | |
730 | if ((cpu == 0 && IN_MEM(addr, BREAK_INSTR_SIZE, L1_CODE_START, L1_CODE_LENGTH)) | 654 | return err; |
731 | #ifdef CONFIG_SMP | 655 | return bfin_probe_kernel_write((char *)addr, arch_kgdb_ops.gdb_bpt_instr, |
732 | || (cpu == 1 && IN_MEM(addr, BREAK_INSTR_SIZE, COREB_L1_CODE_START, L1_CODE_LENGTH)) | 656 | BREAK_INSTR_SIZE); |
733 | #endif | ||
734 | ) { | ||
735 | /* access L1 instruction SRAM */ | ||
736 | if (dma_memcpy(saved_instr, (void *)addr, BREAK_INSTR_SIZE) | ||
737 | == NULL) | ||
738 | return -EFAULT; | ||
739 | |||
740 | if (dma_memcpy((void *)addr, arch_kgdb_ops.gdb_bpt_instr, | ||
741 | BREAK_INSTR_SIZE) == NULL) | ||
742 | return -EFAULT; | ||
743 | |||
744 | return 0; | ||
745 | } else { | ||
746 | err = probe_kernel_read(saved_instr, (char *)addr, | ||
747 | BREAK_INSTR_SIZE); | ||
748 | if (err) | ||
749 | return err; | ||
750 | |||
751 | return probe_kernel_write((char *)addr, | ||
752 | arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE); | ||
753 | } | ||
754 | } | 657 | } |
755 | 658 | ||
756 | int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle) | 659 | int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle) |
757 | { | 660 | { |
758 | if (IN_MEM(addr, BREAK_INSTR_SIZE, L1_CODE_START, L1_CODE_LENGTH)) { | 661 | return bfin_probe_kernel_write((char *)addr, bundle, BREAK_INSTR_SIZE); |
759 | /* access L1 instruction SRAM */ | ||
760 | if (dma_memcpy((void *)addr, bundle, BREAK_INSTR_SIZE) == NULL) | ||
761 | return -EFAULT; | ||
762 | |||
763 | return 0; | ||
764 | } else | ||
765 | return probe_kernel_write((char *)addr, | ||
766 | (char *)bundle, BREAK_INSTR_SIZE); | ||
767 | } | 662 | } |
768 | 663 | ||
769 | int kgdb_arch_init(void) | 664 | int kgdb_arch_init(void) |
diff --git a/arch/blackfin/kernel/mcount.S b/arch/blackfin/kernel/mcount.S deleted file mode 100644 index edcfb3865f46..000000000000 --- a/arch/blackfin/kernel/mcount.S +++ /dev/null | |||
@@ -1,70 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/blackfin/mcount.S | ||
3 | * | ||
4 | * Copyright (C) 2006 Analog Devices Inc. | ||
5 | * | ||
6 | * 2007/04/12 Save index, length, modify and base registers. --rpm | ||
7 | */ | ||
8 | |||
9 | #include <linux/linkage.h> | ||
10 | #include <asm/blackfin.h> | ||
11 | |||
12 | .text | ||
13 | |||
14 | .align 4 /* just in case */ | ||
15 | |||
16 | ENTRY(__mcount) | ||
17 | [--sp] = i0; | ||
18 | [--sp] = i1; | ||
19 | [--sp] = i2; | ||
20 | [--sp] = i3; | ||
21 | [--sp] = l0; | ||
22 | [--sp] = l1; | ||
23 | [--sp] = l2; | ||
24 | [--sp] = l3; | ||
25 | [--sp] = m0; | ||
26 | [--sp] = m1; | ||
27 | [--sp] = m2; | ||
28 | [--sp] = m3; | ||
29 | [--sp] = b0; | ||
30 | [--sp] = b1; | ||
31 | [--sp] = b2; | ||
32 | [--sp] = b3; | ||
33 | [--sp] = ( r7:0, p5:0 ); | ||
34 | [--sp] = ASTAT; | ||
35 | |||
36 | p1.L = _ipipe_trace_enable; | ||
37 | p1.H = _ipipe_trace_enable; | ||
38 | r7 = [p1]; | ||
39 | CC = r7 == 0; | ||
40 | if CC jump out; | ||
41 | link 0x10; | ||
42 | r0 = 0x0; | ||
43 | [sp + 0xc] = r0; /* v */ | ||
44 | r0 = 0x0; /* type: IPIPE_TRACE_FN */ | ||
45 | r1 = rets; | ||
46 | p0 = [fp]; /* p0: Prior FP */ | ||
47 | r2 = [p0 + 4]; /* r2: Prior RETS */ | ||
48 | call ___ipipe_trace; | ||
49 | unlink; | ||
50 | out: | ||
51 | ASTAT = [sp++]; | ||
52 | ( r7:0, p5:0 ) = [sp++]; | ||
53 | b3 = [sp++]; | ||
54 | b2 = [sp++]; | ||
55 | b1 = [sp++]; | ||
56 | b0 = [sp++]; | ||
57 | m3 = [sp++]; | ||
58 | m2 = [sp++]; | ||
59 | m1 = [sp++]; | ||
60 | m0 = [sp++]; | ||
61 | l3 = [sp++]; | ||
62 | l2 = [sp++]; | ||
63 | l1 = [sp++]; | ||
64 | l0 = [sp++]; | ||
65 | i3 = [sp++]; | ||
66 | i2 = [sp++]; | ||
67 | i1 = [sp++]; | ||
68 | i0 = [sp++]; | ||
69 | rts; | ||
70 | ENDPROC(__mcount) | ||
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c index 3e1d86e456f6..79cad0ac5892 100644 --- a/arch/blackfin/kernel/process.c +++ b/arch/blackfin/kernel/process.c | |||
@@ -344,6 +344,87 @@ void finish_atomic_sections (struct pt_regs *regs) | |||
344 | } | 344 | } |
345 | } | 345 | } |
346 | 346 | ||
347 | static inline | ||
348 | int in_mem(unsigned long addr, unsigned long size, | ||
349 | unsigned long start, unsigned long end) | ||
350 | { | ||
351 | return addr >= start && addr + size <= end; | ||
352 | } | ||
353 | static inline | ||
354 | int in_mem_const_off(unsigned long addr, unsigned long size, unsigned long off, | ||
355 | unsigned long const_addr, unsigned long const_size) | ||
356 | { | ||
357 | return const_size && | ||
358 | in_mem(addr, size, const_addr + off, const_addr + const_size); | ||
359 | } | ||
360 | static inline | ||
361 | int in_mem_const(unsigned long addr, unsigned long size, | ||
362 | unsigned long const_addr, unsigned long const_size) | ||
363 | { | ||
364 | return in_mem_const_off(addr, 0, size, const_addr, const_size); | ||
365 | } | ||
366 | #define IN_ASYNC(bnum, bctlnum) \ | ||
367 | ({ \ | ||
368 | (bfin_read_EBIU_AMGCTL() & 0xe) < ((bnum + 1) << 1) ? -EFAULT : \ | ||
369 | bfin_read_EBIU_AMBCTL##bctlnum() & B##bnum##RDYEN ? -EFAULT : \ | ||
370 | BFIN_MEM_ACCESS_CORE; \ | ||
371 | }) | ||
372 | |||
373 | int bfin_mem_access_type(unsigned long addr, unsigned long size) | ||
374 | { | ||
375 | int cpu = raw_smp_processor_id(); | ||
376 | |||
377 | /* Check that things do not wrap around */ | ||
378 | if (addr > ULONG_MAX - size) | ||
379 | return -EFAULT; | ||
380 | |||
381 | if (in_mem(addr, size, FIXED_CODE_START, physical_mem_end)) | ||
382 | return BFIN_MEM_ACCESS_CORE; | ||
383 | |||
384 | if (in_mem_const(addr, size, L1_CODE_START, L1_CODE_LENGTH)) | ||
385 | return cpu == 0 ? BFIN_MEM_ACCESS_ITEST : BFIN_MEM_ACCESS_IDMA; | ||
386 | if (in_mem_const(addr, size, L1_SCRATCH_START, L1_SCRATCH_LENGTH)) | ||
387 | return cpu == 0 ? BFIN_MEM_ACCESS_CORE_ONLY : -EFAULT; | ||
388 | if (in_mem_const(addr, size, L1_DATA_A_START, L1_DATA_A_LENGTH)) | ||
389 | return cpu == 0 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; | ||
390 | if (in_mem_const(addr, size, L1_DATA_B_START, L1_DATA_B_LENGTH)) | ||
391 | return cpu == 0 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; | ||
392 | #ifdef COREB_L1_CODE_START | ||
393 | if (in_mem_const(addr, size, COREB_L1_CODE_START, L1_CODE_LENGTH)) | ||
394 | return cpu == 1 ? BFIN_MEM_ACCESS_ITEST : BFIN_MEM_ACCESS_IDMA; | ||
395 | if (in_mem_const(addr, size, COREB_L1_SCRATCH_START, L1_SCRATCH_LENGTH)) | ||
396 | return cpu == 1 ? BFIN_MEM_ACCESS_CORE_ONLY : -EFAULT; | ||
397 | if (in_mem_const(addr, size, COREB_L1_DATA_A_START, L1_DATA_A_LENGTH)) | ||
398 | return cpu == 1 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; | ||
399 | if (in_mem_const(addr, size, COREB_L1_DATA_B_START, L1_DATA_B_LENGTH)) | ||
400 | return cpu == 1 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; | ||
401 | #endif | ||
402 | if (in_mem_const(addr, size, L2_START, L2_LENGTH)) | ||
403 | return BFIN_MEM_ACCESS_CORE; | ||
404 | |||
405 | if (addr >= SYSMMR_BASE) | ||
406 | return BFIN_MEM_ACCESS_CORE_ONLY; | ||
407 | |||
408 | /* We can't read EBIU banks that aren't enabled or we end up hanging | ||
409 | * on the access to the async space. | ||
410 | */ | ||
411 | if (in_mem_const(addr, size, ASYNC_BANK0_BASE, ASYNC_BANK0_SIZE)) | ||
412 | return IN_ASYNC(0, 0); | ||
413 | if (in_mem_const(addr, size, ASYNC_BANK1_BASE, ASYNC_BANK1_SIZE)) | ||
414 | return IN_ASYNC(1, 0); | ||
415 | if (in_mem_const(addr, size, ASYNC_BANK2_BASE, ASYNC_BANK2_SIZE)) | ||
416 | return IN_ASYNC(2, 1); | ||
417 | if (in_mem_const(addr, size, ASYNC_BANK3_BASE, ASYNC_BANK3_SIZE)) | ||
418 | return IN_ASYNC(3, 1); | ||
419 | |||
420 | if (in_mem_const(addr, size, BOOT_ROM_START, BOOT_ROM_LENGTH)) | ||
421 | return BFIN_MEM_ACCESS_CORE; | ||
422 | if (in_mem_const(addr, size, L1_ROM_START, L1_ROM_LENGTH)) | ||
423 | return BFIN_MEM_ACCESS_DMA; | ||
424 | |||
425 | return -EFAULT; | ||
426 | } | ||
427 | |||
347 | #if defined(CONFIG_ACCESS_CHECK) | 428 | #if defined(CONFIG_ACCESS_CHECK) |
348 | #ifdef CONFIG_ACCESS_OK_L1 | 429 | #ifdef CONFIG_ACCESS_OK_L1 |
349 | __attribute__((l1_text)) | 430 | __attribute__((l1_text)) |
@@ -353,51 +434,61 @@ int _access_ok(unsigned long addr, unsigned long size) | |||
353 | { | 434 | { |
354 | if (size == 0) | 435 | if (size == 0) |
355 | return 1; | 436 | return 1; |
356 | if (addr > (addr + size)) | 437 | /* Check that things do not wrap around */ |
438 | if (addr > ULONG_MAX - size) | ||
357 | return 0; | 439 | return 0; |
358 | if (segment_eq(get_fs(), KERNEL_DS)) | 440 | if (segment_eq(get_fs(), KERNEL_DS)) |
359 | return 1; | 441 | return 1; |
360 | #ifdef CONFIG_MTD_UCLINUX | 442 | #ifdef CONFIG_MTD_UCLINUX |
361 | if (addr >= memory_start && (addr + size) <= memory_end) | 443 | if (1) |
362 | return 1; | 444 | #else |
363 | if (addr >= memory_mtd_end && (addr + size) <= physical_mem_end) | 445 | if (0) |
446 | #endif | ||
447 | { | ||
448 | if (in_mem(addr, size, memory_start, memory_end)) | ||
449 | return 1; | ||
450 | if (in_mem(addr, size, memory_mtd_end, physical_mem_end)) | ||
451 | return 1; | ||
452 | # ifndef CONFIG_ROMFS_ON_MTD | ||
453 | if (0) | ||
454 | # endif | ||
455 | /* For XIP, allow user space to use pointers within the ROMFS. */ | ||
456 | if (in_mem(addr, size, memory_mtd_start, memory_mtd_end)) | ||
457 | return 1; | ||
458 | } else { | ||
459 | if (in_mem(addr, size, memory_start, physical_mem_end)) | ||
460 | return 1; | ||
461 | } | ||
462 | |||
463 | if (in_mem(addr, size, (unsigned long)__init_begin, (unsigned long)__init_end)) | ||
364 | return 1; | 464 | return 1; |
365 | 465 | ||
366 | #ifdef CONFIG_ROMFS_ON_MTD | 466 | if (in_mem_const(addr, size, L1_CODE_START, L1_CODE_LENGTH)) |
367 | /* For XIP, allow user space to use pointers within the ROMFS. */ | ||
368 | if (addr >= memory_mtd_start && (addr + size) <= memory_mtd_end) | ||
369 | return 1; | 467 | return 1; |
370 | #endif | 468 | if (in_mem_const_off(addr, size, _etext_l1 - _stext_l1, L1_CODE_START, L1_CODE_LENGTH)) |
371 | #else | ||
372 | if (addr >= memory_start && (addr + size) <= physical_mem_end) | ||
373 | return 1; | 469 | return 1; |
374 | #endif | 470 | if (in_mem_const_off(addr, size, _ebss_l1 - _sdata_l1, L1_DATA_A_START, L1_DATA_A_LENGTH)) |
375 | if (addr >= (unsigned long)__init_begin && | ||
376 | addr + size <= (unsigned long)__init_end) | ||
377 | return 1; | 471 | return 1; |
378 | if (addr >= get_l1_scratch_start() | 472 | if (in_mem_const_off(addr, size, _ebss_b_l1 - _sdata_b_l1, L1_DATA_B_START, L1_DATA_B_LENGTH)) |
379 | && addr + size <= get_l1_scratch_start() + L1_SCRATCH_LENGTH) | ||
380 | return 1; | 473 | return 1; |
381 | #if L1_CODE_LENGTH != 0 | 474 | #ifdef COREB_L1_CODE_START |
382 | if (addr >= get_l1_code_start() + (_etext_l1 - _stext_l1) | 475 | if (in_mem_const(addr, size, COREB_L1_CODE_START, L1_CODE_LENGTH)) |
383 | && addr + size <= get_l1_code_start() + L1_CODE_LENGTH) | ||
384 | return 1; | 476 | return 1; |
385 | #endif | 477 | if (in_mem_const(addr, size, COREB_L1_SCRATCH_START, L1_SCRATCH_LENGTH)) |
386 | #if L1_DATA_A_LENGTH != 0 | ||
387 | if (addr >= get_l1_data_a_start() + (_ebss_l1 - _sdata_l1) | ||
388 | && addr + size <= get_l1_data_a_start() + L1_DATA_A_LENGTH) | ||
389 | return 1; | 478 | return 1; |
390 | #endif | 479 | if (in_mem_const(addr, size, COREB_L1_DATA_A_START, L1_DATA_A_LENGTH)) |
391 | #if L1_DATA_B_LENGTH != 0 | ||
392 | if (addr >= get_l1_data_b_start() + (_ebss_b_l1 - _sdata_b_l1) | ||
393 | && addr + size <= get_l1_data_b_start() + L1_DATA_B_LENGTH) | ||
394 | return 1; | 480 | return 1; |
395 | #endif | 481 | if (in_mem_const(addr, size, COREB_L1_DATA_B_START, L1_DATA_B_LENGTH)) |
396 | #if L2_LENGTH != 0 | ||
397 | if (addr >= L2_START + (_ebss_l2 - _stext_l2) | ||
398 | && addr + size <= L2_START + L2_LENGTH) | ||
399 | return 1; | 482 | return 1; |
400 | #endif | 483 | #endif |
484 | if (in_mem_const_off(addr, size, _ebss_l2 - _stext_l2, L2_START, L2_LENGTH)) | ||
485 | return 1; | ||
486 | |||
487 | if (in_mem_const(addr, size, BOOT_ROM_START, BOOT_ROM_LENGTH)) | ||
488 | return 1; | ||
489 | if (in_mem_const(addr, size, L1_ROM_START, L1_ROM_LENGTH)) | ||
490 | return 1; | ||
491 | |||
401 | return 0; | 492 | return 0; |
402 | } | 493 | } |
403 | EXPORT_SYMBOL(_access_ok); | 494 | EXPORT_SYMBOL(_access_ok); |
diff --git a/arch/blackfin/kernel/ptrace.c b/arch/blackfin/kernel/ptrace.c index d76618db50df..6a387eec6b65 100644 --- a/arch/blackfin/kernel/ptrace.c +++ b/arch/blackfin/kernel/ptrace.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <linux/sched.h> | 31 | #include <linux/sched.h> |
32 | #include <linux/mm.h> | 32 | #include <linux/mm.h> |
33 | #include <linux/smp.h> | 33 | #include <linux/smp.h> |
34 | #include <linux/smp_lock.h> | ||
35 | #include <linux/errno.h> | 34 | #include <linux/errno.h> |
36 | #include <linux/ptrace.h> | 35 | #include <linux/ptrace.h> |
37 | #include <linux/user.h> | 36 | #include <linux/user.h> |
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c index 6454babdfaff..6136c33e919f 100644 --- a/arch/blackfin/kernel/setup.c +++ b/arch/blackfin/kernel/setup.c | |||
@@ -117,15 +117,49 @@ void __cpuinit bfin_setup_caches(unsigned int cpu) | |||
117 | */ | 117 | */ |
118 | #ifdef CONFIG_BFIN_ICACHE | 118 | #ifdef CONFIG_BFIN_ICACHE |
119 | printk(KERN_INFO "Instruction Cache Enabled for CPU%u\n", cpu); | 119 | printk(KERN_INFO "Instruction Cache Enabled for CPU%u\n", cpu); |
120 | printk(KERN_INFO " External memory:" | ||
121 | # ifdef CONFIG_BFIN_EXTMEM_ICACHEABLE | ||
122 | " cacheable" | ||
123 | # else | ||
124 | " uncacheable" | ||
125 | # endif | ||
126 | " in instruction cache\n"); | ||
127 | if (L2_LENGTH) | ||
128 | printk(KERN_INFO " L2 SRAM :" | ||
129 | # ifdef CONFIG_BFIN_L2_ICACHEABLE | ||
130 | " cacheable" | ||
131 | # else | ||
132 | " uncacheable" | ||
133 | # endif | ||
134 | " in instruction cache\n"); | ||
135 | |||
136 | #else | ||
137 | printk(KERN_INFO "Instruction Cache Disabled for CPU%u\n", cpu); | ||
120 | #endif | 138 | #endif |
139 | |||
121 | #ifdef CONFIG_BFIN_DCACHE | 140 | #ifdef CONFIG_BFIN_DCACHE |
122 | printk(KERN_INFO "Data Cache Enabled for CPU%u" | 141 | printk(KERN_INFO "Data Cache Enabled for CPU%u\n", cpu); |
123 | # if defined CONFIG_BFIN_WB | 142 | printk(KERN_INFO " External memory:" |
124 | " (write-back)" | 143 | # if defined CONFIG_BFIN_EXTMEM_WRITEBACK |
125 | # elif defined CONFIG_BFIN_WT | 144 | " cacheable (write-back)" |
126 | " (write-through)" | 145 | # elif defined CONFIG_BFIN_EXTMEM_WRITETHROUGH |
146 | " cacheable (write-through)" | ||
147 | # else | ||
148 | " uncacheable" | ||
127 | # endif | 149 | # endif |
128 | "\n", cpu); | 150 | " in data cache\n"); |
151 | if (L2_LENGTH) | ||
152 | printk(KERN_INFO " L2 SRAM :" | ||
153 | # if defined CONFIG_BFIN_L2_WRITEBACK | ||
154 | " cacheable (write-back)" | ||
155 | # elif defined CONFIG_BFIN_L2_WRITETHROUGH | ||
156 | " cacheable (write-through)" | ||
157 | # else | ||
158 | " uncacheable" | ||
159 | # endif | ||
160 | " in data cache\n"); | ||
161 | #else | ||
162 | printk(KERN_INFO "Data Cache Disabled for CPU%u\n", cpu); | ||
129 | #endif | 163 | #endif |
130 | } | 164 | } |
131 | 165 | ||
@@ -374,13 +408,14 @@ static void __init print_memory_map(char *who) | |||
374 | bfin_memmap.map[i].addr + bfin_memmap.map[i].size); | 408 | bfin_memmap.map[i].addr + bfin_memmap.map[i].size); |
375 | switch (bfin_memmap.map[i].type) { | 409 | switch (bfin_memmap.map[i].type) { |
376 | case BFIN_MEMMAP_RAM: | 410 | case BFIN_MEMMAP_RAM: |
377 | printk("(usable)\n"); | 411 | printk(KERN_CONT "(usable)\n"); |
378 | break; | 412 | break; |
379 | case BFIN_MEMMAP_RESERVED: | 413 | case BFIN_MEMMAP_RESERVED: |
380 | printk("(reserved)\n"); | 414 | printk(KERN_CONT "(reserved)\n"); |
381 | break; | 415 | break; |
382 | default: printk("type %lu\n", bfin_memmap.map[i].type); | 416 | default: |
383 | break; | 417 | printk(KERN_CONT "type %lu\n", bfin_memmap.map[i].type); |
418 | break; | ||
384 | } | 419 | } |
385 | } | 420 | } |
386 | } | 421 | } |
@@ -443,9 +478,11 @@ static __init void parse_cmdline_early(char *cmdline_p) | |||
443 | } else if (!memcmp(to, "clkin_hz=", 9)) { | 478 | } else if (!memcmp(to, "clkin_hz=", 9)) { |
444 | to += 9; | 479 | to += 9; |
445 | early_init_clkin_hz(to); | 480 | early_init_clkin_hz(to); |
481 | #ifdef CONFIG_EARLY_PRINTK | ||
446 | } else if (!memcmp(to, "earlyprintk=", 12)) { | 482 | } else if (!memcmp(to, "earlyprintk=", 12)) { |
447 | to += 12; | 483 | to += 12; |
448 | setup_early_printk(to); | 484 | setup_early_printk(to); |
485 | #endif | ||
449 | } else if (!memcmp(to, "memmap=", 7)) { | 486 | } else if (!memcmp(to, "memmap=", 7)) { |
450 | to += 7; | 487 | to += 7; |
451 | parse_memmap(to); | 488 | parse_memmap(to); |
@@ -516,7 +553,7 @@ static __init void memory_setup(void) | |||
516 | && ((unsigned long *)mtd_phys)[1] == ROMSB_WORD1) | 553 | && ((unsigned long *)mtd_phys)[1] == ROMSB_WORD1) |
517 | mtd_size = | 554 | mtd_size = |
518 | PAGE_ALIGN(be32_to_cpu(((unsigned long *)mtd_phys)[2])); | 555 | PAGE_ALIGN(be32_to_cpu(((unsigned long *)mtd_phys)[2])); |
519 | # if (defined(CONFIG_BFIN_ICACHE) && ANOMALY_05000263) | 556 | # if (defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) && ANOMALY_05000263) |
520 | /* Due to a Hardware Anomaly we need to limit the size of usable | 557 | /* Due to a Hardware Anomaly we need to limit the size of usable |
521 | * instruction memory to max 60MB, 56 if HUNT_FOR_ZERO is on | 558 | * instruction memory to max 60MB, 56 if HUNT_FOR_ZERO is on |
522 | * 05000263 - Hardware loop corrupted when taking an ICPLB exception | 559 | * 05000263 - Hardware loop corrupted when taking an ICPLB exception |
@@ -544,7 +581,7 @@ static __init void memory_setup(void) | |||
544 | dma_memcpy((void *)uclinux_ram_map.phys, _end, uclinux_ram_map.size); | 581 | dma_memcpy((void *)uclinux_ram_map.phys, _end, uclinux_ram_map.size); |
545 | #endif /* CONFIG_MTD_UCLINUX */ | 582 | #endif /* CONFIG_MTD_UCLINUX */ |
546 | 583 | ||
547 | #if (defined(CONFIG_BFIN_ICACHE) && ANOMALY_05000263) | 584 | #if (defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) && ANOMALY_05000263) |
548 | /* Due to a Hardware Anomaly we need to limit the size of usable | 585 | /* Due to a Hardware Anomaly we need to limit the size of usable |
549 | * instruction memory to max 60MB, 56 if HUNT_FOR_ZERO is on | 586 | * instruction memory to max 60MB, 56 if HUNT_FOR_ZERO is on |
550 | * 05000263 - Hardware loop corrupted when taking an ICPLB exception | 587 | * 05000263 - Hardware loop corrupted when taking an ICPLB exception |
@@ -578,19 +615,19 @@ static __init void memory_setup(void) | |||
578 | printk(KERN_INFO "Kernel Managed Memory: %ldMB\n", _ramend >> 20); | 615 | printk(KERN_INFO "Kernel Managed Memory: %ldMB\n", _ramend >> 20); |
579 | 616 | ||
580 | printk(KERN_INFO "Memory map:\n" | 617 | printk(KERN_INFO "Memory map:\n" |
581 | KERN_INFO " fixedcode = 0x%p-0x%p\n" | 618 | " fixedcode = 0x%p-0x%p\n" |
582 | KERN_INFO " text = 0x%p-0x%p\n" | 619 | " text = 0x%p-0x%p\n" |
583 | KERN_INFO " rodata = 0x%p-0x%p\n" | 620 | " rodata = 0x%p-0x%p\n" |
584 | KERN_INFO " bss = 0x%p-0x%p\n" | 621 | " bss = 0x%p-0x%p\n" |
585 | KERN_INFO " data = 0x%p-0x%p\n" | 622 | " data = 0x%p-0x%p\n" |
586 | KERN_INFO " stack = 0x%p-0x%p\n" | 623 | " stack = 0x%p-0x%p\n" |
587 | KERN_INFO " init = 0x%p-0x%p\n" | 624 | " init = 0x%p-0x%p\n" |
588 | KERN_INFO " available = 0x%p-0x%p\n" | 625 | " available = 0x%p-0x%p\n" |
589 | #ifdef CONFIG_MTD_UCLINUX | 626 | #ifdef CONFIG_MTD_UCLINUX |
590 | KERN_INFO " rootfs = 0x%p-0x%p\n" | 627 | " rootfs = 0x%p-0x%p\n" |
591 | #endif | 628 | #endif |
592 | #if DMA_UNCACHED_REGION > 0 | 629 | #if DMA_UNCACHED_REGION > 0 |
593 | KERN_INFO " DMA Zone = 0x%p-0x%p\n" | 630 | " DMA Zone = 0x%p-0x%p\n" |
594 | #endif | 631 | #endif |
595 | , (void *)FIXED_CODE_START, (void *)FIXED_CODE_END, | 632 | , (void *)FIXED_CODE_START, (void *)FIXED_CODE_END, |
596 | _stext, _etext, | 633 | _stext, _etext, |
@@ -764,6 +801,11 @@ void __init setup_arch(char **cmdline_p) | |||
764 | { | 801 | { |
765 | unsigned long sclk, cclk; | 802 | unsigned long sclk, cclk; |
766 | 803 | ||
804 | /* Check to make sure we are running on the right processor */ | ||
805 | if (unlikely(CPUID != bfin_cpuid())) | ||
806 | printk(KERN_ERR "ERROR: Not running on ADSP-%s: unknown CPUID 0x%04x Rev 0.%d\n", | ||
807 | CPU, bfin_cpuid(), bfin_revid()); | ||
808 | |||
767 | #ifdef CONFIG_DUMMY_CONSOLE | 809 | #ifdef CONFIG_DUMMY_CONSOLE |
768 | conswitchp = &dummy_con; | 810 | conswitchp = &dummy_con; |
769 | #endif | 811 | #endif |
@@ -778,14 +820,17 @@ void __init setup_arch(char **cmdline_p) | |||
778 | memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE); | 820 | memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE); |
779 | boot_command_line[COMMAND_LINE_SIZE - 1] = '\0'; | 821 | boot_command_line[COMMAND_LINE_SIZE - 1] = '\0'; |
780 | 822 | ||
781 | /* setup memory defaults from the user config */ | ||
782 | physical_mem_end = 0; | ||
783 | _ramend = get_mem_size() * 1024 * 1024; | ||
784 | |||
785 | memset(&bfin_memmap, 0, sizeof(bfin_memmap)); | 823 | memset(&bfin_memmap, 0, sizeof(bfin_memmap)); |
786 | 824 | ||
825 | /* If the user does not specify things on the command line, use | ||
826 | * what the bootloader set things up as | ||
827 | */ | ||
828 | physical_mem_end = 0; | ||
787 | parse_cmdline_early(&command_line[0]); | 829 | parse_cmdline_early(&command_line[0]); |
788 | 830 | ||
831 | if (_ramend == 0) | ||
832 | _ramend = get_mem_size() * 1024 * 1024; | ||
833 | |||
789 | if (physical_mem_end == 0) | 834 | if (physical_mem_end == 0) |
790 | physical_mem_end = _ramend; | 835 | physical_mem_end = _ramend; |
791 | 836 | ||
@@ -815,13 +860,13 @@ void __init setup_arch(char **cmdline_p) | |||
815 | #endif | 860 | #endif |
816 | printk(KERN_INFO "Hardware Trace "); | 861 | printk(KERN_INFO "Hardware Trace "); |
817 | if (bfin_read_TBUFCTL() & 0x1) | 862 | if (bfin_read_TBUFCTL() & 0x1) |
818 | printk("Active "); | 863 | printk(KERN_CONT "Active "); |
819 | else | 864 | else |
820 | printk("Off "); | 865 | printk(KERN_CONT "Off "); |
821 | if (bfin_read_TBUFCTL() & 0x2) | 866 | if (bfin_read_TBUFCTL() & 0x2) |
822 | printk("and Enabled\n"); | 867 | printk(KERN_CONT "and Enabled\n"); |
823 | else | 868 | else |
824 | printk("and Disabled\n"); | 869 | printk(KERN_CONT "and Disabled\n"); |
825 | 870 | ||
826 | #if defined(CONFIG_CHR_DEV_FLASH) || defined(CONFIG_BLK_DEV_FLASH) | 871 | #if defined(CONFIG_CHR_DEV_FLASH) || defined(CONFIG_BLK_DEV_FLASH) |
827 | /* we need to initialize the Flashrom device here since we might | 872 | /* we need to initialize the Flashrom device here since we might |
@@ -837,7 +882,8 @@ void __init setup_arch(char **cmdline_p) | |||
837 | defined(CONFIG_BF538) || defined(CONFIG_BF539) | 882 | defined(CONFIG_BF538) || defined(CONFIG_BF539) |
838 | _bfin_swrst = bfin_read_SWRST(); | 883 | _bfin_swrst = bfin_read_SWRST(); |
839 | #else | 884 | #else |
840 | _bfin_swrst = bfin_read_SYSCR(); | 885 | /* Clear boot mode field */ |
886 | _bfin_swrst = bfin_read_SYSCR() & ~0xf; | ||
841 | #endif | 887 | #endif |
842 | 888 | ||
843 | #ifdef CONFIG_DEBUG_DOUBLEFAULT_PRINT | 889 | #ifdef CONFIG_DEBUG_DOUBLEFAULT_PRINT |
@@ -875,10 +921,7 @@ void __init setup_arch(char **cmdline_p) | |||
875 | else | 921 | else |
876 | printk(KERN_INFO "Compiled for ADSP-%s Rev 0.%d\n", CPU, bfin_compiled_revid()); | 922 | printk(KERN_INFO "Compiled for ADSP-%s Rev 0.%d\n", CPU, bfin_compiled_revid()); |
877 | 923 | ||
878 | if (unlikely(CPUID != bfin_cpuid())) | 924 | if (likely(CPUID == bfin_cpuid())) { |
879 | printk(KERN_ERR "ERROR: Not running on ADSP-%s: unknown CPUID 0x%04x Rev 0.%d\n", | ||
880 | CPU, bfin_cpuid(), bfin_revid()); | ||
881 | else { | ||
882 | if (bfin_revid() != bfin_compiled_revid()) { | 925 | if (bfin_revid() != bfin_compiled_revid()) { |
883 | if (bfin_compiled_revid() == -1) | 926 | if (bfin_compiled_revid() == -1) |
884 | printk(KERN_ERR "Warning: Compiled for Rev none, but running on Rev %d\n", | 927 | printk(KERN_ERR "Warning: Compiled for Rev none, but running on Rev %d\n", |
@@ -1157,16 +1200,25 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
1157 | icache_size = 0; | 1200 | icache_size = 0; |
1158 | 1201 | ||
1159 | seq_printf(m, "cache size\t: %d KB(L1 icache) " | 1202 | seq_printf(m, "cache size\t: %d KB(L1 icache) " |
1160 | "%d KB(L1 dcache%s) %d KB(L2 cache)\n", | 1203 | "%d KB(L1 dcache) %d KB(L2 cache)\n", |
1161 | icache_size, dcache_size, | 1204 | icache_size, dcache_size, 0); |
1162 | #if defined CONFIG_BFIN_WB | ||
1163 | "-wb" | ||
1164 | #elif defined CONFIG_BFIN_WT | ||
1165 | "-wt" | ||
1166 | #endif | ||
1167 | "", 0); | ||
1168 | |||
1169 | seq_printf(m, "%s\n", cache); | 1205 | seq_printf(m, "%s\n", cache); |
1206 | seq_printf(m, "external memory\t: " | ||
1207 | #if defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) | ||
1208 | "cacheable" | ||
1209 | #else | ||
1210 | "uncacheable" | ||
1211 | #endif | ||
1212 | " in instruction cache\n"); | ||
1213 | seq_printf(m, "external memory\t: " | ||
1214 | #if defined(CONFIG_BFIN_EXTMEM_WRITEBACK) | ||
1215 | "cacheable (write-back)" | ||
1216 | #elif defined(CONFIG_BFIN_EXTMEM_WRITETHROUGH) | ||
1217 | "cacheable (write-through)" | ||
1218 | #else | ||
1219 | "uncacheable" | ||
1220 | #endif | ||
1221 | " in data cache\n"); | ||
1170 | 1222 | ||
1171 | if (icache_size) | 1223 | if (icache_size) |
1172 | seq_printf(m, "icache setup\t: %d Sub-banks/%d Ways, %d Lines/Way\n", | 1224 | seq_printf(m, "icache setup\t: %d Sub-banks/%d Ways, %d Lines/Way\n", |
@@ -1239,8 +1291,25 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
1239 | if (cpu_num != num_possible_cpus() - 1) | 1291 | if (cpu_num != num_possible_cpus() - 1) |
1240 | return 0; | 1292 | return 0; |
1241 | 1293 | ||
1242 | if (L2_LENGTH) | 1294 | if (L2_LENGTH) { |
1243 | seq_printf(m, "L2 SRAM\t\t: %dKB\n", L2_LENGTH/0x400); | 1295 | seq_printf(m, "L2 SRAM\t\t: %dKB\n", L2_LENGTH/0x400); |
1296 | seq_printf(m, "L2 SRAM\t\t: " | ||
1297 | #if defined(CONFIG_BFIN_L2_ICACHEABLE) | ||
1298 | "cacheable" | ||
1299 | #else | ||
1300 | "uncacheable" | ||
1301 | #endif | ||
1302 | " in instruction cache\n"); | ||
1303 | seq_printf(m, "L2 SRAM\t\t: " | ||
1304 | #if defined(CONFIG_BFIN_L2_WRITEBACK) | ||
1305 | "cacheable (write-back)" | ||
1306 | #elif defined(CONFIG_BFIN_L2_WRITETHROUGH) | ||
1307 | "cacheable (write-through)" | ||
1308 | #else | ||
1309 | "uncacheable" | ||
1310 | #endif | ||
1311 | " in data cache\n"); | ||
1312 | } | ||
1244 | seq_printf(m, "board name\t: %s\n", bfin_board_name); | 1313 | seq_printf(m, "board name\t: %s\n", bfin_board_name); |
1245 | seq_printf(m, "board memory\t: %ld kB (0x%p -> 0x%p)\n", | 1314 | seq_printf(m, "board memory\t: %ld kB (0x%p -> 0x%p)\n", |
1246 | physical_mem_end >> 10, (void *)0, (void *)physical_mem_end); | 1315 | physical_mem_end >> 10, (void *)0, (void *)physical_mem_end); |
diff --git a/arch/blackfin/kernel/sys_bfin.c b/arch/blackfin/kernel/sys_bfin.c index a8f1329c15a4..3da60fb13ce4 100644 --- a/arch/blackfin/kernel/sys_bfin.c +++ b/arch/blackfin/kernel/sys_bfin.c | |||
@@ -29,7 +29,6 @@ | |||
29 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 29 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
30 | */ | 30 | */ |
31 | 31 | ||
32 | #include <linux/smp_lock.h> | ||
33 | #include <linux/spinlock.h> | 32 | #include <linux/spinlock.h> |
34 | #include <linux/sem.h> | 33 | #include <linux/sem.h> |
35 | #include <linux/msg.h> | 34 | #include <linux/msg.h> |
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c index d279552fe9b0..8a1caf2bb5b9 100644 --- a/arch/blackfin/kernel/traps.c +++ b/arch/blackfin/kernel/traps.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <asm/traps.h> | 37 | #include <asm/traps.h> |
38 | #include <asm/cacheflush.h> | 38 | #include <asm/cacheflush.h> |
39 | #include <asm/cplb.h> | 39 | #include <asm/cplb.h> |
40 | #include <asm/dma.h> | ||
40 | #include <asm/blackfin.h> | 41 | #include <asm/blackfin.h> |
41 | #include <asm/irq_handler.h> | 42 | #include <asm/irq_handler.h> |
42 | #include <linux/irq.h> | 43 | #include <linux/irq.h> |
@@ -211,7 +212,7 @@ asmlinkage void double_fault_c(struct pt_regs *fp) | |||
211 | console_verbose(); | 212 | console_verbose(); |
212 | oops_in_progress = 1; | 213 | oops_in_progress = 1; |
213 | #ifdef CONFIG_DEBUG_VERBOSE | 214 | #ifdef CONFIG_DEBUG_VERBOSE |
214 | printk(KERN_EMERG "\n" KERN_EMERG "Double Fault\n"); | 215 | printk(KERN_EMERG "Double Fault\n"); |
215 | #ifdef CONFIG_DEBUG_DOUBLEFAULT_PRINT | 216 | #ifdef CONFIG_DEBUG_DOUBLEFAULT_PRINT |
216 | if (((long)fp->seqstat & SEQSTAT_EXCAUSE) == VEC_UNCOV) { | 217 | if (((long)fp->seqstat & SEQSTAT_EXCAUSE) == VEC_UNCOV) { |
217 | unsigned int cpu = smp_processor_id(); | 218 | unsigned int cpu = smp_processor_id(); |
@@ -582,15 +583,14 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
582 | #ifndef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE | 583 | #ifndef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE |
583 | if (trapnr == VEC_CPLB_I_M || trapnr == VEC_CPLB_M) | 584 | if (trapnr == VEC_CPLB_I_M || trapnr == VEC_CPLB_M) |
584 | verbose_printk(KERN_NOTICE "No trace since you do not have " | 585 | verbose_printk(KERN_NOTICE "No trace since you do not have " |
585 | "CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE enabled\n" | 586 | "CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE enabled\n\n"); |
586 | KERN_NOTICE "\n"); | ||
587 | else | 587 | else |
588 | #endif | 588 | #endif |
589 | dump_bfin_trace_buffer(); | 589 | dump_bfin_trace_buffer(); |
590 | 590 | ||
591 | if (oops_in_progress) { | 591 | if (oops_in_progress) { |
592 | /* Dump the current kernel stack */ | 592 | /* Dump the current kernel stack */ |
593 | verbose_printk(KERN_NOTICE "\n" KERN_NOTICE "Kernel Stack\n"); | 593 | verbose_printk(KERN_NOTICE "Kernel Stack\n"); |
594 | show_stack(current, NULL); | 594 | show_stack(current, NULL); |
595 | print_modules(); | 595 | print_modules(); |
596 | #ifndef CONFIG_ACCESS_CHECK | 596 | #ifndef CONFIG_ACCESS_CHECK |
@@ -636,57 +636,30 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
636 | */ | 636 | */ |
637 | static bool get_instruction(unsigned short *val, unsigned short *address) | 637 | static bool get_instruction(unsigned short *val, unsigned short *address) |
638 | { | 638 | { |
639 | 639 | unsigned long addr = (unsigned long)address; | |
640 | unsigned long addr; | ||
641 | |||
642 | addr = (unsigned long)address; | ||
643 | 640 | ||
644 | /* Check for odd addresses */ | 641 | /* Check for odd addresses */ |
645 | if (addr & 0x1) | 642 | if (addr & 0x1) |
646 | return false; | 643 | return false; |
647 | 644 | ||
648 | /* Check that things do not wrap around */ | 645 | /* MMR region will never have instructions */ |
649 | if (addr > (addr + 2)) | 646 | if (addr >= SYSMMR_BASE) |
650 | return false; | 647 | return false; |
651 | 648 | ||
652 | /* | 649 | switch (bfin_mem_access_type(addr, 2)) { |
653 | * Since we are in exception context, we need to do a little address checking | 650 | case BFIN_MEM_ACCESS_CORE: |
654 | * We need to make sure we are only accessing valid memory, and | 651 | case BFIN_MEM_ACCESS_CORE_ONLY: |
655 | * we don't read something in the async space that can hang forever | 652 | *val = *address; |
656 | */ | 653 | return true; |
657 | if ((addr >= FIXED_CODE_START && (addr + 2) <= physical_mem_end) || | 654 | case BFIN_MEM_ACCESS_DMA: |
658 | #if L2_LENGTH != 0 | 655 | dma_memcpy(val, address, 2); |
659 | (addr >= L2_START && (addr + 2) <= (L2_START + L2_LENGTH)) || | 656 | return true; |
660 | #endif | 657 | case BFIN_MEM_ACCESS_ITEST: |
661 | (addr >= BOOT_ROM_START && (addr + 2) <= (BOOT_ROM_START + BOOT_ROM_LENGTH)) || | 658 | isram_memcpy(val, address, 2); |
662 | #if L1_DATA_A_LENGTH != 0 | 659 | return true; |
663 | (addr >= L1_DATA_A_START && (addr + 2) <= (L1_DATA_A_START + L1_DATA_A_LENGTH)) || | 660 | default: /* invalid access */ |
664 | #endif | 661 | return false; |
665 | #if L1_DATA_B_LENGTH != 0 | ||
666 | (addr >= L1_DATA_B_START && (addr + 2) <= (L1_DATA_B_START + L1_DATA_B_LENGTH)) || | ||
667 | #endif | ||
668 | (addr >= L1_SCRATCH_START && (addr + 2) <= (L1_SCRATCH_START + L1_SCRATCH_LENGTH)) || | ||
669 | (!(bfin_read_EBIU_AMBCTL0() & B0RDYEN) && | ||
670 | addr >= ASYNC_BANK0_BASE && (addr + 2) <= (ASYNC_BANK0_BASE + ASYNC_BANK0_SIZE)) || | ||
671 | (!(bfin_read_EBIU_AMBCTL0() & B1RDYEN) && | ||
672 | addr >= ASYNC_BANK1_BASE && (addr + 2) <= (ASYNC_BANK1_BASE + ASYNC_BANK1_SIZE)) || | ||
673 | (!(bfin_read_EBIU_AMBCTL1() & B2RDYEN) && | ||
674 | addr >= ASYNC_BANK2_BASE && (addr + 2) <= (ASYNC_BANK2_BASE + ASYNC_BANK1_SIZE)) || | ||
675 | (!(bfin_read_EBIU_AMBCTL1() & B3RDYEN) && | ||
676 | addr >= ASYNC_BANK3_BASE && (addr + 2) <= (ASYNC_BANK3_BASE + ASYNC_BANK1_SIZE))) { | ||
677 | *val = *address; | ||
678 | return true; | ||
679 | } | 662 | } |
680 | |||
681 | #if L1_CODE_LENGTH != 0 | ||
682 | if (addr >= L1_CODE_START && (addr + 2) <= (L1_CODE_START + L1_CODE_LENGTH)) { | ||
683 | isram_memcpy(val, address, 2); | ||
684 | return true; | ||
685 | } | ||
686 | #endif | ||
687 | |||
688 | |||
689 | return false; | ||
690 | } | 663 | } |
691 | 664 | ||
692 | /* | 665 | /* |
@@ -932,7 +905,7 @@ void show_stack(struct task_struct *task, unsigned long *stack) | |||
932 | 905 | ||
933 | ret_addr = 0; | 906 | ret_addr = 0; |
934 | if (!j && i % 8 == 0) | 907 | if (!j && i % 8 == 0) |
935 | printk("\n" KERN_NOTICE "%p:",addr); | 908 | printk(KERN_NOTICE "%p:",addr); |
936 | 909 | ||
937 | /* if it is an odd address, or zero, just skip it */ | 910 | /* if it is an odd address, or zero, just skip it */ |
938 | if (*addr & 0x1 || !*addr) | 911 | if (*addr & 0x1 || !*addr) |
@@ -1022,9 +995,9 @@ void dump_bfin_process(struct pt_regs *fp) | |||
1022 | 995 | ||
1023 | printk(KERN_NOTICE "CPU = %d\n", current_thread_info()->cpu); | 996 | printk(KERN_NOTICE "CPU = %d\n", current_thread_info()->cpu); |
1024 | if (!((unsigned long)current->mm & 0x3) && (unsigned long)current->mm >= FIXED_CODE_START) | 997 | if (!((unsigned long)current->mm & 0x3) && (unsigned long)current->mm >= FIXED_CODE_START) |
1025 | verbose_printk(KERN_NOTICE "TEXT = 0x%p-0x%p DATA = 0x%p-0x%p\n" | 998 | verbose_printk(KERN_NOTICE |
1026 | KERN_NOTICE " BSS = 0x%p-0x%p USER-STACK = 0x%p\n" | 999 | "TEXT = 0x%p-0x%p DATA = 0x%p-0x%p\n" |
1027 | KERN_NOTICE "\n", | 1000 | " BSS = 0x%p-0x%p USER-STACK = 0x%p\n\n", |
1028 | (void *)current->mm->start_code, | 1001 | (void *)current->mm->start_code, |
1029 | (void *)current->mm->end_code, | 1002 | (void *)current->mm->end_code, |
1030 | (void *)current->mm->start_data, | 1003 | (void *)current->mm->start_data, |
@@ -1035,8 +1008,8 @@ void dump_bfin_process(struct pt_regs *fp) | |||
1035 | else | 1008 | else |
1036 | verbose_printk(KERN_NOTICE "invalid mm\n"); | 1009 | verbose_printk(KERN_NOTICE "invalid mm\n"); |
1037 | } else | 1010 | } else |
1038 | verbose_printk(KERN_NOTICE "\n" KERN_NOTICE | 1011 | verbose_printk(KERN_NOTICE |
1039 | "No Valid process in current context\n"); | 1012 | "No Valid process in current context\n"); |
1040 | #endif | 1013 | #endif |
1041 | } | 1014 | } |
1042 | 1015 | ||
@@ -1054,7 +1027,7 @@ void dump_bfin_mem(struct pt_regs *fp) | |||
1054 | addr < (unsigned short *)((unsigned long)erraddr & ~0xF) + 0x10; | 1027 | addr < (unsigned short *)((unsigned long)erraddr & ~0xF) + 0x10; |
1055 | addr++) { | 1028 | addr++) { |
1056 | if (!((unsigned long)addr & 0xF)) | 1029 | if (!((unsigned long)addr & 0xF)) |
1057 | verbose_printk("\n" KERN_NOTICE "0x%p: ", addr); | 1030 | verbose_printk(KERN_NOTICE "0x%p: ", addr); |
1058 | 1031 | ||
1059 | if (!get_instruction(&val, addr)) { | 1032 | if (!get_instruction(&val, addr)) { |
1060 | val = 0; | 1033 | val = 0; |
@@ -1082,9 +1055,9 @@ void dump_bfin_mem(struct pt_regs *fp) | |||
1082 | oops_in_progress)){ | 1055 | oops_in_progress)){ |
1083 | verbose_printk(KERN_NOTICE "Looks like this was a deferred error - sorry\n"); | 1056 | verbose_printk(KERN_NOTICE "Looks like this was a deferred error - sorry\n"); |
1084 | #ifndef CONFIG_DEBUG_HWERR | 1057 | #ifndef CONFIG_DEBUG_HWERR |
1085 | verbose_printk(KERN_NOTICE "The remaining message may be meaningless\n" | 1058 | verbose_printk(KERN_NOTICE |
1086 | KERN_NOTICE "You should enable CONFIG_DEBUG_HWERR to get a" | 1059 | "The remaining message may be meaningless\n" |
1087 | " better idea where it came from\n"); | 1060 | "You should enable CONFIG_DEBUG_HWERR to get a better idea where it came from\n"); |
1088 | #else | 1061 | #else |
1089 | /* If we are handling only one peripheral interrupt | 1062 | /* If we are handling only one peripheral interrupt |
1090 | * and current mm and pid are valid, and the last error | 1063 | * and current mm and pid are valid, and the last error |
@@ -1140,9 +1113,10 @@ void show_regs(struct pt_regs *fp) | |||
1140 | 1113 | ||
1141 | verbose_printk(KERN_NOTICE "%s", linux_banner); | 1114 | verbose_printk(KERN_NOTICE "%s", linux_banner); |
1142 | 1115 | ||
1143 | verbose_printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\t\t%s\n", print_tainted()); | 1116 | verbose_printk(KERN_NOTICE "\nSEQUENCER STATUS:\t\t%s\n", |
1117 | print_tainted()); | ||
1144 | verbose_printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n", | 1118 | verbose_printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n", |
1145 | (long)fp->seqstat, fp->ipend, fp->syscfg); | 1119 | (long)fp->seqstat, fp->ipend, fp->syscfg); |
1146 | if ((fp->seqstat & SEQSTAT_EXCAUSE) == VEC_HWERR) { | 1120 | if ((fp->seqstat & SEQSTAT_EXCAUSE) == VEC_HWERR) { |
1147 | verbose_printk(KERN_NOTICE " HWERRCAUSE: 0x%lx\n", | 1121 | verbose_printk(KERN_NOTICE " HWERRCAUSE: 0x%lx\n", |
1148 | (fp->seqstat & SEQSTAT_HWERRCAUSE) >> 14); | 1122 | (fp->seqstat & SEQSTAT_HWERRCAUSE) >> 14); |
@@ -1210,7 +1184,7 @@ unlock: | |||
1210 | verbose_printk(KERN_NOTICE "ICPLB_FAULT_ADDR: %s\n", buf); | 1184 | verbose_printk(KERN_NOTICE "ICPLB_FAULT_ADDR: %s\n", buf); |
1211 | } | 1185 | } |
1212 | 1186 | ||
1213 | verbose_printk(KERN_NOTICE "\n" KERN_NOTICE "PROCESSOR STATE:\n"); | 1187 | verbose_printk(KERN_NOTICE "PROCESSOR STATE:\n"); |
1214 | verbose_printk(KERN_NOTICE " R0 : %08lx R1 : %08lx R2 : %08lx R3 : %08lx\n", | 1188 | verbose_printk(KERN_NOTICE " R0 : %08lx R1 : %08lx R2 : %08lx R3 : %08lx\n", |
1215 | fp->r0, fp->r1, fp->r2, fp->r3); | 1189 | fp->r0, fp->r1, fp->r2, fp->r3); |
1216 | verbose_printk(KERN_NOTICE " R4 : %08lx R5 : %08lx R6 : %08lx R7 : %08lx\n", | 1190 | verbose_printk(KERN_NOTICE " R4 : %08lx R5 : %08lx R6 : %08lx R7 : %08lx\n", |
diff --git a/arch/blackfin/mach-bf518/boards/ezbrd.c b/arch/blackfin/mach-bf518/boards/ezbrd.c index 1382f0382359..d9791106be9f 100644 --- a/arch/blackfin/mach-bf518/boards/ezbrd.c +++ b/arch/blackfin/mach-bf518/boards/ezbrd.c | |||
@@ -119,13 +119,19 @@ static struct platform_device bfin_mac_device = { | |||
119 | }; | 119 | }; |
120 | 120 | ||
121 | #if defined(CONFIG_NET_DSA_KSZ8893M) || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) | 121 | #if defined(CONFIG_NET_DSA_KSZ8893M) || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) |
122 | static struct dsa_platform_data ksz8893m_switch_data = { | 122 | static struct dsa_chip_data ksz8893m_switch_chip_data = { |
123 | .mii_bus = &bfin_mii_bus.dev, | 123 | .mii_bus = &bfin_mii_bus.dev, |
124 | .port_names = { | ||
125 | NULL, | ||
126 | "eth%d", | ||
127 | "eth%d", | ||
128 | "cpu", | ||
129 | }, | ||
130 | }; | ||
131 | static struct dsa_platform_data ksz8893m_switch_data = { | ||
132 | .nr_chips = 1, | ||
124 | .netdev = &bfin_mac_device.dev, | 133 | .netdev = &bfin_mac_device.dev, |
125 | .port_names[0] = NULL, | 134 | .chip = &ksz8893m_switch_chip_data, |
126 | .port_names[1] = "eth%d", | ||
127 | .port_names[2] = "eth%d", | ||
128 | .port_names[3] = "cpu", | ||
129 | }; | 135 | }; |
130 | 136 | ||
131 | static struct platform_device ksz8893m_switch_device = { | 137 | static struct platform_device ksz8893m_switch_device = { |
diff --git a/arch/blackfin/mach-bf518/include/mach/anomaly.h b/arch/blackfin/mach-bf518/include/mach/anomaly.h index b69bd9af38dd..426e064062a0 100644 --- a/arch/blackfin/mach-bf518/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf518/include/mach/anomaly.h | |||
@@ -7,7 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* This file should be up to date with: | 9 | /* This file should be up to date with: |
10 | * - Revision B, 02/03/2009; ADSP-BF512/BF514/BF516/BF518 Blackfin Processor Anomaly List | 10 | * - Revision C, 06/12/2009; ADSP-BF512/BF514/BF516/BF518 Blackfin Processor Anomaly List |
11 | */ | 11 | */ |
12 | 12 | ||
13 | /* We plan on not supporting 0.0 silicon, but 0.1 isn't out yet - sorry */ | 13 | /* We plan on not supporting 0.0 silicon, but 0.1 isn't out yet - sorry */ |
@@ -18,7 +18,7 @@ | |||
18 | #ifndef _MACH_ANOMALY_H_ | 18 | #ifndef _MACH_ANOMALY_H_ |
19 | #define _MACH_ANOMALY_H_ | 19 | #define _MACH_ANOMALY_H_ |
20 | 20 | ||
21 | /* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */ | 21 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
22 | #define ANOMALY_05000074 (1) | 22 | #define ANOMALY_05000074 (1) |
23 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ | 23 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ |
24 | #define ANOMALY_05000122 (1) | 24 | #define ANOMALY_05000122 (1) |
@@ -45,29 +45,31 @@ | |||
45 | /* Speculative Fetches of Indirect-Pointer Instructions Can Cause False Hardware Errors */ | 45 | /* Speculative Fetches of Indirect-Pointer Instructions Can Cause False Hardware Errors */ |
46 | #define ANOMALY_05000426 (1) | 46 | #define ANOMALY_05000426 (1) |
47 | /* Software System Reset Corrupts PLL_LOCKCNT Register */ | 47 | /* Software System Reset Corrupts PLL_LOCKCNT Register */ |
48 | #define ANOMALY_05000430 (1) | 48 | #define ANOMALY_05000430 (__SILICON_REVISION__ < 1) |
49 | /* Incorrect Use of Stack in Lockbox Firmware During Authentication */ | 49 | /* Incorrect Use of Stack in Lockbox Firmware During Authentication */ |
50 | #define ANOMALY_05000431 (1) | 50 | #define ANOMALY_05000431 (1) |
51 | /* Certain SIC Registers are not Reset After Soft or Core Double Fault Reset */ | 51 | /* Certain SIC Registers are not Reset After Soft or Core Double Fault Reset */ |
52 | #define ANOMALY_05000435 (1) | 52 | #define ANOMALY_05000435 (__SILICON_REVISION__ < 1) |
53 | /* PORTx_DRIVE and PORTx_HYSTERESIS Registers Read Back Incorrect Values */ | 53 | /* PORTx_DRIVE and PORTx_HYSTERESIS Registers Read Back Incorrect Values */ |
54 | #define ANOMALY_05000438 (1) | 54 | #define ANOMALY_05000438 (__SILICON_REVISION__ < 1) |
55 | /* Preboot Cannot be Used to Alter the PLL_DIV Register */ | 55 | /* Preboot Cannot be Used to Alter the PLL_DIV Register */ |
56 | #define ANOMALY_05000439 (1) | 56 | #define ANOMALY_05000439 (__SILICON_REVISION__ < 1) |
57 | /* bfrom_SysControl() Cannot be Used to Write the PLL_DIV Register */ | 57 | /* bfrom_SysControl() Cannot be Used to Write the PLL_DIV Register */ |
58 | #define ANOMALY_05000440 (1) | 58 | #define ANOMALY_05000440 (__SILICON_REVISION__ < 1) |
59 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ | 59 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ |
60 | #define ANOMALY_05000443 (1) | 60 | #define ANOMALY_05000443 (1) |
61 | /* Incorrect L1 Instruction Bank B Memory Map Location */ | 61 | /* Incorrect L1 Instruction Bank B Memory Map Location */ |
62 | #define ANOMALY_05000444 (1) | 62 | #define ANOMALY_05000444 (__SILICON_REVISION__ < 1) |
63 | /* Incorrect Default Hysteresis Setting for RESET, NMI, and BMODE Signals */ | 63 | /* Incorrect Default Hysteresis Setting for RESET, NMI, and BMODE Signals */ |
64 | #define ANOMALY_05000452 (1) | 64 | #define ANOMALY_05000452 (__SILICON_REVISION__ < 1) |
65 | /* PWM_TRIPB Signal Not Available on PG10 */ | 65 | /* PWM_TRIPB Signal Not Available on PG10 */ |
66 | #define ANOMALY_05000453 (1) | 66 | #define ANOMALY_05000453 (__SILICON_REVISION__ < 1) |
67 | /* PPI_FS3 is Driven One Half Cycle Later Than PPI Data */ | 67 | /* PPI_FS3 is Driven One Half Cycle Later Than PPI Data */ |
68 | #define ANOMALY_05000455 (1) | 68 | #define ANOMALY_05000455 (__SILICON_REVISION__ < 1) |
69 | /* False Hardware Error when RETI points to invalid memory */ | 69 | /* False Hardware Error when RETI Points to Invalid Memory */ |
70 | #define ANOMALY_05000461 (1) | 70 | #define ANOMALY_05000461 (1) |
71 | /* Synchronization Problem at Startup May Cause SPORT Transmit Channels to Misalign */ | ||
72 | #define ANOMALY_05000462 (1) | ||
71 | 73 | ||
72 | /* Anomalies that don't exist on this proc */ | 74 | /* Anomalies that don't exist on this proc */ |
73 | #define ANOMALY_05000099 (0) | 75 | #define ANOMALY_05000099 (0) |
@@ -78,24 +80,30 @@ | |||
78 | #define ANOMALY_05000158 (0) | 80 | #define ANOMALY_05000158 (0) |
79 | #define ANOMALY_05000171 (0) | 81 | #define ANOMALY_05000171 (0) |
80 | #define ANOMALY_05000179 (0) | 82 | #define ANOMALY_05000179 (0) |
83 | #define ANOMALY_05000182 (0) | ||
81 | #define ANOMALY_05000183 (0) | 84 | #define ANOMALY_05000183 (0) |
82 | #define ANOMALY_05000198 (0) | 85 | #define ANOMALY_05000198 (0) |
86 | #define ANOMALY_05000202 (0) | ||
83 | #define ANOMALY_05000215 (0) | 87 | #define ANOMALY_05000215 (0) |
84 | #define ANOMALY_05000220 (0) | 88 | #define ANOMALY_05000220 (0) |
85 | #define ANOMALY_05000227 (0) | 89 | #define ANOMALY_05000227 (0) |
86 | #define ANOMALY_05000230 (0) | 90 | #define ANOMALY_05000230 (0) |
87 | #define ANOMALY_05000231 (0) | 91 | #define ANOMALY_05000231 (0) |
88 | #define ANOMALY_05000233 (0) | 92 | #define ANOMALY_05000233 (0) |
93 | #define ANOMALY_05000234 (0) | ||
89 | #define ANOMALY_05000242 (0) | 94 | #define ANOMALY_05000242 (0) |
90 | #define ANOMALY_05000244 (0) | 95 | #define ANOMALY_05000244 (0) |
91 | #define ANOMALY_05000248 (0) | 96 | #define ANOMALY_05000248 (0) |
92 | #define ANOMALY_05000250 (0) | 97 | #define ANOMALY_05000250 (0) |
98 | #define ANOMALY_05000257 (0) | ||
93 | #define ANOMALY_05000261 (0) | 99 | #define ANOMALY_05000261 (0) |
94 | #define ANOMALY_05000263 (0) | 100 | #define ANOMALY_05000263 (0) |
95 | #define ANOMALY_05000266 (0) | 101 | #define ANOMALY_05000266 (0) |
96 | #define ANOMALY_05000273 (0) | 102 | #define ANOMALY_05000273 (0) |
97 | #define ANOMALY_05000274 (0) | 103 | #define ANOMALY_05000274 (0) |
98 | #define ANOMALY_05000278 (0) | 104 | #define ANOMALY_05000278 (0) |
105 | #define ANOMALY_05000281 (0) | ||
106 | #define ANOMALY_05000283 (0) | ||
99 | #define ANOMALY_05000285 (0) | 107 | #define ANOMALY_05000285 (0) |
100 | #define ANOMALY_05000287 (0) | 108 | #define ANOMALY_05000287 (0) |
101 | #define ANOMALY_05000301 (0) | 109 | #define ANOMALY_05000301 (0) |
@@ -103,10 +111,13 @@ | |||
103 | #define ANOMALY_05000307 (0) | 111 | #define ANOMALY_05000307 (0) |
104 | #define ANOMALY_05000311 (0) | 112 | #define ANOMALY_05000311 (0) |
105 | #define ANOMALY_05000312 (0) | 113 | #define ANOMALY_05000312 (0) |
114 | #define ANOMALY_05000315 (0) | ||
106 | #define ANOMALY_05000323 (0) | 115 | #define ANOMALY_05000323 (0) |
107 | #define ANOMALY_05000353 (0) | 116 | #define ANOMALY_05000353 (0) |
117 | #define ANOMALY_05000357 (0) | ||
108 | #define ANOMALY_05000362 (1) | 118 | #define ANOMALY_05000362 (1) |
109 | #define ANOMALY_05000363 (0) | 119 | #define ANOMALY_05000363 (0) |
120 | #define ANOMALY_05000371 (0) | ||
110 | #define ANOMALY_05000380 (0) | 121 | #define ANOMALY_05000380 (0) |
111 | #define ANOMALY_05000386 (0) | 122 | #define ANOMALY_05000386 (0) |
112 | #define ANOMALY_05000389 (0) | 123 | #define ANOMALY_05000389 (0) |
@@ -117,5 +128,7 @@ | |||
117 | #define ANOMALY_05000448 (0) | 128 | #define ANOMALY_05000448 (0) |
118 | #define ANOMALY_05000456 (0) | 129 | #define ANOMALY_05000456 (0) |
119 | #define ANOMALY_05000450 (0) | 130 | #define ANOMALY_05000450 (0) |
131 | #define ANOMALY_05000465 (0) | ||
132 | #define ANOMALY_05000467 (0) | ||
120 | 133 | ||
121 | #endif | 134 | #endif |
diff --git a/arch/blackfin/mach-bf518/include/mach/blackfin.h b/arch/blackfin/mach-bf518/include/mach/blackfin.h index 267bb7c8bfb5..e8e14c2769ed 100644 --- a/arch/blackfin/mach-bf518/include/mach/blackfin.h +++ b/arch/blackfin/mach-bf518/include/mach/blackfin.h | |||
@@ -33,7 +33,6 @@ | |||
33 | #define _MACH_BLACKFIN_H_ | 33 | #define _MACH_BLACKFIN_H_ |
34 | 34 | ||
35 | #include "bf518.h" | 35 | #include "bf518.h" |
36 | #include "mem_map.h" | ||
37 | #include "defBF512.h" | 36 | #include "defBF512.h" |
38 | #include "anomaly.h" | 37 | #include "anomaly.h" |
39 | 38 | ||
diff --git a/arch/blackfin/mach-bf518/include/mach/mem_map.h b/arch/blackfin/mach-bf518/include/mach/mem_map.h index 62bcc781bfaa..3c6777cb3532 100644 --- a/arch/blackfin/mach-bf518/include/mach/mem_map.h +++ b/arch/blackfin/mach-bf518/include/mach/mem_map.h | |||
@@ -1,38 +1,16 @@ | |||
1 | /* | 1 | /* |
2 | * file: include/asm-blackfin/mach-bf518/mem_map.h | 2 | * BF51x memory map |
3 | * based on: include/asm-blackfin/mach-bf527/mem_map.h | ||
4 | * author: Bryan Wu <cooloney@kernel.org> | ||
5 | * | 3 | * |
6 | * created: | 4 | * Copyright 2004-2009 Analog Devices Inc. |
7 | * description: | 5 | * Licensed under the GPL-2 or later. |
8 | * Memory MAP Common header file for blackfin BF518/6/4/2 of processors. | ||
9 | * rev: | ||
10 | * | ||
11 | * modified: | ||
12 | * | ||
13 | * bugs: enter bugs at http://blackfin.uclinux.org/ | ||
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 as published by | ||
17 | * the free software foundation; either version 2, or (at your option) | ||
18 | * any later version. | ||
19 | * | ||
20 | * this program is distributed in the hope that it will be useful, | ||
21 | * but without any warranty; without even the implied warranty of | ||
22 | * merchantability or fitness for a particular purpose. see the | ||
23 | * gnu general public license for more details. | ||
24 | * | ||
25 | * you should have received a copy of the gnu general public license | ||
26 | * along with this program; see the file copying. | ||
27 | * if not, write to the free software foundation, | ||
28 | * 59 temple place - suite 330, boston, ma 02111-1307, usa. | ||
29 | */ | 6 | */ |
30 | 7 | ||
31 | #ifndef _MEM_MAP_518_H_ | 8 | #ifndef __BFIN_MACH_MEM_MAP_H__ |
32 | #define _MEM_MAP_518_H_ | 9 | #define __BFIN_MACH_MEM_MAP_H__ |
33 | 10 | ||
34 | #define COREMMR_BASE 0xFFE00000 /* Core MMRs */ | 11 | #ifndef __BFIN_MEM_MAP_H__ |
35 | #define SYSMMR_BASE 0xFFC00000 /* System MMRs */ | 12 | # error "do not include mach/mem_map.h directly -- use asm/mem_map.h" |
13 | #endif | ||
36 | 14 | ||
37 | /* Async Memory Banks */ | 15 | /* Async Memory Banks */ |
38 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ | 16 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ |
@@ -89,20 +67,4 @@ | |||
89 | #define BFIN_DSUPBANKS 0 | 67 | #define BFIN_DSUPBANKS 0 |
90 | #endif /*CONFIG_BFIN_DCACHE */ | 68 | #endif /*CONFIG_BFIN_DCACHE */ |
91 | 69 | ||
92 | /* Level 2 Memory - none */ | 70 | #endif |
93 | |||
94 | #define L2_START 0 | ||
95 | #define L2_LENGTH 0 | ||
96 | |||
97 | /* Scratch Pad Memory */ | ||
98 | |||
99 | #define L1_SCRATCH_START 0xFFB00000 | ||
100 | #define L1_SCRATCH_LENGTH 0x1000 | ||
101 | |||
102 | #define GET_PDA_SAFE(preg) \ | ||
103 | preg.l = _cpu_pda; \ | ||
104 | preg.h = _cpu_pda; | ||
105 | |||
106 | #define GET_PDA(preg, dreg) GET_PDA_SAFE(preg) | ||
107 | |||
108 | #endif /* _MEM_MAP_518_H_ */ | ||
diff --git a/arch/blackfin/mach-bf527/boards/cm_bf527.c b/arch/blackfin/mach-bf527/boards/cm_bf527.c index 1eaf27ff722e..f4867ce0c618 100644 --- a/arch/blackfin/mach-bf527/boards/cm_bf527.c +++ b/arch/blackfin/mach-bf527/boards/cm_bf527.c | |||
@@ -78,7 +78,6 @@ static struct resource bfin_isp1760_resources[] = { | |||
78 | 78 | ||
79 | static struct isp1760_platform_data isp1760_priv = { | 79 | static struct isp1760_platform_data isp1760_priv = { |
80 | .is_isp1761 = 0, | 80 | .is_isp1761 = 0, |
81 | .port1_disable = 0, | ||
82 | .bus_width_16 = 1, | 81 | .bus_width_16 = 1, |
83 | .port1_otg = 0, | 82 | .port1_otg = 0, |
84 | .analog_oc = 0, | 83 | .analog_oc = 0, |
diff --git a/arch/blackfin/mach-bf527/boards/ezbrd.c b/arch/blackfin/mach-bf527/boards/ezbrd.c index 9f9c0005dcf1..b2f30f06b73e 100644 --- a/arch/blackfin/mach-bf527/boards/ezbrd.c +++ b/arch/blackfin/mach-bf527/boards/ezbrd.c | |||
@@ -237,10 +237,10 @@ static struct flash_platform_data bfin_spi_flash_data = { | |||
237 | .name = "m25p80", | 237 | .name = "m25p80", |
238 | .parts = bfin_spi_flash_partitions, | 238 | .parts = bfin_spi_flash_partitions, |
239 | .nr_parts = ARRAY_SIZE(bfin_spi_flash_partitions), | 239 | .nr_parts = ARRAY_SIZE(bfin_spi_flash_partitions), |
240 | .type = "m25p16", | 240 | .type = "sst25wf040", |
241 | }; | 241 | }; |
242 | 242 | ||
243 | /* SPI flash chip (m25p64) */ | 243 | /* SPI flash chip (sst25wf040) */ |
244 | static struct bfin5xx_spi_chip spi_flash_chip_info = { | 244 | static struct bfin5xx_spi_chip spi_flash_chip_info = { |
245 | .enable_dma = 0, /* use dma transfer with this chip*/ | 245 | .enable_dma = 0, /* use dma transfer with this chip*/ |
246 | .bits_per_word = 8, | 246 | .bits_per_word = 8, |
diff --git a/arch/blackfin/mach-bf527/boards/ezkit.c b/arch/blackfin/mach-bf527/boards/ezkit.c index 3e5b7db6b065..799a1d1fa890 100644 --- a/arch/blackfin/mach-bf527/boards/ezkit.c +++ b/arch/blackfin/mach-bf527/boards/ezkit.c | |||
@@ -77,7 +77,6 @@ static struct resource bfin_isp1760_resources[] = { | |||
77 | 77 | ||
78 | static struct isp1760_platform_data isp1760_priv = { | 78 | static struct isp1760_platform_data isp1760_priv = { |
79 | .is_isp1761 = 0, | 79 | .is_isp1761 = 0, |
80 | .port1_disable = 0, | ||
81 | .bus_width_16 = 1, | 80 | .bus_width_16 = 1, |
82 | .port1_otg = 0, | 81 | .port1_otg = 0, |
83 | .analog_oc = 0, | 82 | .analog_oc = 0, |
diff --git a/arch/blackfin/mach-bf527/include/mach/anomaly.h b/arch/blackfin/mach-bf527/include/mach/anomaly.h index c84ddea95749..0d63f7406168 100644 --- a/arch/blackfin/mach-bf527/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf527/include/mach/anomaly.h | |||
@@ -34,7 +34,7 @@ | |||
34 | #define _ANOMALY_BF527(rev527) (ANOMALY_BF527 && __SILICON_REVISION__ rev527) | 34 | #define _ANOMALY_BF527(rev527) (ANOMALY_BF527 && __SILICON_REVISION__ rev527) |
35 | #define _ANOMALY_BF526_BF527(rev526, rev527) (_ANOMALY_BF526(rev526) || _ANOMALY_BF527(rev527)) | 35 | #define _ANOMALY_BF526_BF527(rev526, rev527) (_ANOMALY_BF526(rev526) || _ANOMALY_BF527(rev527)) |
36 | 36 | ||
37 | /* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */ | 37 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
38 | #define ANOMALY_05000074 (1) | 38 | #define ANOMALY_05000074 (1) |
39 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ | 39 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ |
40 | #define ANOMALY_05000119 (1) /* note: brokenness is noted in documentation, not anomaly sheet */ | 40 | #define ANOMALY_05000119 (1) /* note: brokenness is noted in documentation, not anomaly sheet */ |
@@ -184,8 +184,12 @@ | |||
184 | #define ANOMALY_05000456 (1) | 184 | #define ANOMALY_05000456 (1) |
185 | /* Host DMA Port Responds to Certain Bus Activity Without HOST_CE Assertion */ | 185 | /* Host DMA Port Responds to Certain Bus Activity Without HOST_CE Assertion */ |
186 | #define ANOMALY_05000457 (1) | 186 | #define ANOMALY_05000457 (1) |
187 | /* False Hardware Error when RETI points to invalid memory */ | 187 | /* False Hardware Error when RETI Points to Invalid Memory */ |
188 | #define ANOMALY_05000461 (1) | 188 | #define ANOMALY_05000461 (1) |
189 | /* USB Rx DMA hang */ | ||
190 | #define ANOMALY_05000465 (1) | ||
191 | /* Possible RX data corruption when control & data EP FIFOs are accessed via the core */ | ||
192 | #define ANOMALY_05000467 (1) | ||
189 | 193 | ||
190 | /* Anomalies that don't exist on this proc */ | 194 | /* Anomalies that don't exist on this proc */ |
191 | #define ANOMALY_05000099 (0) | 195 | #define ANOMALY_05000099 (0) |
@@ -195,24 +199,30 @@ | |||
195 | #define ANOMALY_05000158 (0) | 199 | #define ANOMALY_05000158 (0) |
196 | #define ANOMALY_05000171 (0) | 200 | #define ANOMALY_05000171 (0) |
197 | #define ANOMALY_05000179 (0) | 201 | #define ANOMALY_05000179 (0) |
202 | #define ANOMALY_05000182 (0) | ||
198 | #define ANOMALY_05000183 (0) | 203 | #define ANOMALY_05000183 (0) |
199 | #define ANOMALY_05000198 (0) | 204 | #define ANOMALY_05000198 (0) |
205 | #define ANOMALY_05000202 (0) | ||
200 | #define ANOMALY_05000215 (0) | 206 | #define ANOMALY_05000215 (0) |
201 | #define ANOMALY_05000220 (0) | 207 | #define ANOMALY_05000220 (0) |
202 | #define ANOMALY_05000227 (0) | 208 | #define ANOMALY_05000227 (0) |
203 | #define ANOMALY_05000230 (0) | 209 | #define ANOMALY_05000230 (0) |
204 | #define ANOMALY_05000231 (0) | 210 | #define ANOMALY_05000231 (0) |
205 | #define ANOMALY_05000233 (0) | 211 | #define ANOMALY_05000233 (0) |
212 | #define ANOMALY_05000234 (0) | ||
206 | #define ANOMALY_05000242 (0) | 213 | #define ANOMALY_05000242 (0) |
207 | #define ANOMALY_05000244 (0) | 214 | #define ANOMALY_05000244 (0) |
208 | #define ANOMALY_05000248 (0) | 215 | #define ANOMALY_05000248 (0) |
209 | #define ANOMALY_05000250 (0) | 216 | #define ANOMALY_05000250 (0) |
217 | #define ANOMALY_05000257 (0) | ||
210 | #define ANOMALY_05000261 (0) | 218 | #define ANOMALY_05000261 (0) |
211 | #define ANOMALY_05000263 (0) | 219 | #define ANOMALY_05000263 (0) |
212 | #define ANOMALY_05000266 (0) | 220 | #define ANOMALY_05000266 (0) |
213 | #define ANOMALY_05000273 (0) | 221 | #define ANOMALY_05000273 (0) |
214 | #define ANOMALY_05000274 (0) | 222 | #define ANOMALY_05000274 (0) |
215 | #define ANOMALY_05000278 (0) | 223 | #define ANOMALY_05000278 (0) |
224 | #define ANOMALY_05000281 (0) | ||
225 | #define ANOMALY_05000283 (0) | ||
216 | #define ANOMALY_05000285 (0) | 226 | #define ANOMALY_05000285 (0) |
217 | #define ANOMALY_05000287 (0) | 227 | #define ANOMALY_05000287 (0) |
218 | #define ANOMALY_05000301 (0) | 228 | #define ANOMALY_05000301 (0) |
@@ -220,6 +230,7 @@ | |||
220 | #define ANOMALY_05000307 (0) | 230 | #define ANOMALY_05000307 (0) |
221 | #define ANOMALY_05000311 (0) | 231 | #define ANOMALY_05000311 (0) |
222 | #define ANOMALY_05000312 (0) | 232 | #define ANOMALY_05000312 (0) |
233 | #define ANOMALY_05000315 (0) | ||
223 | #define ANOMALY_05000323 (0) | 234 | #define ANOMALY_05000323 (0) |
224 | #define ANOMALY_05000362 (1) | 235 | #define ANOMALY_05000362 (1) |
225 | #define ANOMALY_05000363 (0) | 236 | #define ANOMALY_05000363 (0) |
diff --git a/arch/blackfin/mach-bf527/include/mach/blackfin.h b/arch/blackfin/mach-bf527/include/mach/blackfin.h index 417abcd61f4d..03665a8e16be 100644 --- a/arch/blackfin/mach-bf527/include/mach/blackfin.h +++ b/arch/blackfin/mach-bf527/include/mach/blackfin.h | |||
@@ -33,7 +33,6 @@ | |||
33 | #define _MACH_BLACKFIN_H_ | 33 | #define _MACH_BLACKFIN_H_ |
34 | 34 | ||
35 | #include "bf527.h" | 35 | #include "bf527.h" |
36 | #include "mem_map.h" | ||
37 | #include "defBF522.h" | 36 | #include "defBF522.h" |
38 | #include "anomaly.h" | 37 | #include "anomaly.h" |
39 | 38 | ||
diff --git a/arch/blackfin/mach-bf527/include/mach/mem_map.h b/arch/blackfin/mach-bf527/include/mach/mem_map.h index 019e0017ad81..d96e894afd2c 100644 --- a/arch/blackfin/mach-bf527/include/mach/mem_map.h +++ b/arch/blackfin/mach-bf527/include/mach/mem_map.h | |||
@@ -1,38 +1,16 @@ | |||
1 | /* | 1 | /* |
2 | * file: include/asm-blackfin/mach-bf527/mem_map.h | 2 | * BF52x memory map |
3 | * based on: include/asm-blackfin/mach-bf537/mem_map.h | ||
4 | * author: Michael Hennerich (michael.hennerich@analog.com) | ||
5 | * | 3 | * |
6 | * created: | 4 | * Copyright 2004-2009 Analog Devices Inc. |
7 | * description: | 5 | * Licensed under the GPL-2 or later. |
8 | * Memory MAP Common header file for blackfin BF527/5/2 of processors. | ||
9 | * rev: | ||
10 | * | ||
11 | * modified: | ||
12 | * | ||
13 | * bugs: enter bugs at http://blackfin.uclinux.org/ | ||
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 as published by | ||
17 | * the free software foundation; either version 2, or (at your option) | ||
18 | * any later version. | ||
19 | * | ||
20 | * this program is distributed in the hope that it will be useful, | ||
21 | * but without any warranty; without even the implied warranty of | ||
22 | * merchantability or fitness for a particular purpose. see the | ||
23 | * gnu general public license for more details. | ||
24 | * | ||
25 | * you should have received a copy of the gnu general public license | ||
26 | * along with this program; see the file copying. | ||
27 | * if not, write to the free software foundation, | ||
28 | * 59 temple place - suite 330, boston, ma 02111-1307, usa. | ||
29 | */ | 6 | */ |
30 | 7 | ||
31 | #ifndef _MEM_MAP_527_H_ | 8 | #ifndef __BFIN_MACH_MEM_MAP_H__ |
32 | #define _MEM_MAP_527_H_ | 9 | #define __BFIN_MACH_MEM_MAP_H__ |
33 | 10 | ||
34 | #define COREMMR_BASE 0xFFE00000 /* Core MMRs */ | 11 | #ifndef __BFIN_MEM_MAP_H__ |
35 | #define SYSMMR_BASE 0xFFC00000 /* System MMRs */ | 12 | # error "do not include mach/mem_map.h directly -- use asm/mem_map.h" |
13 | #endif | ||
36 | 14 | ||
37 | /* Async Memory Banks */ | 15 | /* Async Memory Banks */ |
38 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ | 16 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ |
@@ -89,20 +67,4 @@ | |||
89 | #define BFIN_DSUPBANKS 0 | 67 | #define BFIN_DSUPBANKS 0 |
90 | #endif /*CONFIG_BFIN_DCACHE */ | 68 | #endif /*CONFIG_BFIN_DCACHE */ |
91 | 69 | ||
92 | /* Level 2 Memory - none */ | 70 | #endif |
93 | |||
94 | #define L2_START 0 | ||
95 | #define L2_LENGTH 0 | ||
96 | |||
97 | /* Scratch Pad Memory */ | ||
98 | |||
99 | #define L1_SCRATCH_START 0xFFB00000 | ||
100 | #define L1_SCRATCH_LENGTH 0x1000 | ||
101 | |||
102 | #define GET_PDA_SAFE(preg) \ | ||
103 | preg.l = _cpu_pda; \ | ||
104 | preg.h = _cpu_pda; | ||
105 | |||
106 | #define GET_PDA(preg, dreg) GET_PDA_SAFE(preg) | ||
107 | |||
108 | #endif /* _MEM_MAP_527_H_ */ | ||
diff --git a/arch/blackfin/mach-bf533/boards/ezkit.c b/arch/blackfin/mach-bf533/boards/ezkit.c index 89a5ec4ca048..4e3e511bf146 100644 --- a/arch/blackfin/mach-bf533/boards/ezkit.c +++ b/arch/blackfin/mach-bf533/boards/ezkit.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/platform_device.h> | 32 | #include <linux/platform_device.h> |
33 | #include <linux/mtd/mtd.h> | 33 | #include <linux/mtd/mtd.h> |
34 | #include <linux/mtd/partitions.h> | 34 | #include <linux/mtd/partitions.h> |
35 | #include <linux/mtd/plat-ram.h> | ||
35 | #include <linux/spi/spi.h> | 36 | #include <linux/spi/spi.h> |
36 | #include <linux/spi/flash.h> | 37 | #include <linux/spi/flash.h> |
37 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) | 38 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) |
@@ -86,6 +87,101 @@ static struct platform_device smc91x_device = { | |||
86 | }; | 87 | }; |
87 | #endif | 88 | #endif |
88 | 89 | ||
90 | #if defined(CONFIG_MTD_PSD4256G) || defined(CONFIG_MTD_PSD4256G_MODULE) | ||
91 | static const char *map_probes[] = { | ||
92 | "stm_flash", | ||
93 | NULL, | ||
94 | }; | ||
95 | |||
96 | static struct platdata_mtd_ram stm_pri_data_a = { | ||
97 | .mapname = "Flash A Primary", | ||
98 | .map_probes = map_probes, | ||
99 | .bankwidth = 2, | ||
100 | }; | ||
101 | |||
102 | static struct resource stm_pri_resource_a = { | ||
103 | .start = 0x20000000, | ||
104 | .end = 0x200fffff, | ||
105 | .flags = IORESOURCE_MEM, | ||
106 | }; | ||
107 | |||
108 | static struct platform_device stm_pri_device_a = { | ||
109 | .name = "mtd-ram", | ||
110 | .id = 0, | ||
111 | .dev = { | ||
112 | .platform_data = &stm_pri_data_a, | ||
113 | }, | ||
114 | .num_resources = 1, | ||
115 | .resource = &stm_pri_resource_a, | ||
116 | }; | ||
117 | |||
118 | static struct platdata_mtd_ram stm_pri_data_b = { | ||
119 | .mapname = "Flash B Primary", | ||
120 | .map_probes = map_probes, | ||
121 | .bankwidth = 2, | ||
122 | }; | ||
123 | |||
124 | static struct resource stm_pri_resource_b = { | ||
125 | .start = 0x20100000, | ||
126 | .end = 0x201fffff, | ||
127 | .flags = IORESOURCE_MEM, | ||
128 | }; | ||
129 | |||
130 | static struct platform_device stm_pri_device_b = { | ||
131 | .name = "mtd-ram", | ||
132 | .id = 4, | ||
133 | .dev = { | ||
134 | .platform_data = &stm_pri_data_b, | ||
135 | }, | ||
136 | .num_resources = 1, | ||
137 | .resource = &stm_pri_resource_b, | ||
138 | }; | ||
139 | #endif | ||
140 | |||
141 | #if defined(CONFIG_MTD_PLATRAM) || defined(CONFIG_MTD_PLATRAM_MODULE) | ||
142 | static struct platdata_mtd_ram sram_data_a = { | ||
143 | .mapname = "Flash A SRAM", | ||
144 | .bankwidth = 2, | ||
145 | }; | ||
146 | |||
147 | static struct resource sram_resource_a = { | ||
148 | .start = 0x20240000, | ||
149 | .end = 0x2024ffff, | ||
150 | .flags = IORESOURCE_MEM, | ||
151 | }; | ||
152 | |||
153 | static struct platform_device sram_device_a = { | ||
154 | .name = "mtd-ram", | ||
155 | .id = 8, | ||
156 | .dev = { | ||
157 | .platform_data = &sram_data_a, | ||
158 | }, | ||
159 | .num_resources = 1, | ||
160 | .resource = &sram_resource_a, | ||
161 | }; | ||
162 | |||
163 | static struct platdata_mtd_ram sram_data_b = { | ||
164 | .mapname = "Flash B SRAM", | ||
165 | .bankwidth = 2, | ||
166 | }; | ||
167 | |||
168 | static struct resource sram_resource_b = { | ||
169 | .start = 0x202c0000, | ||
170 | .end = 0x202cffff, | ||
171 | .flags = IORESOURCE_MEM, | ||
172 | }; | ||
173 | |||
174 | static struct platform_device sram_device_b = { | ||
175 | .name = "mtd-ram", | ||
176 | .id = 9, | ||
177 | .dev = { | ||
178 | .platform_data = &sram_data_b, | ||
179 | }, | ||
180 | .num_resources = 1, | ||
181 | .resource = &sram_resource_b, | ||
182 | }; | ||
183 | #endif | ||
184 | |||
89 | #if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE) | 185 | #if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE) |
90 | static struct mtd_partition bfin_spi_flash_partitions[] = { | 186 | static struct mtd_partition bfin_spi_flash_partitions[] = { |
91 | { | 187 | { |
@@ -357,6 +453,16 @@ static struct platform_device *ezkit_devices[] __initdata = { | |||
357 | 453 | ||
358 | &bfin_dpmc, | 454 | &bfin_dpmc, |
359 | 455 | ||
456 | #if defined(CONFIG_MTD_PSD4256G) || defined(CONFIG_MTD_PSD4256G_MODULE) | ||
457 | &stm_pri_device_a, | ||
458 | &stm_pri_device_b, | ||
459 | #endif | ||
460 | |||
461 | #if defined(CONFIG_MTD_PLATRAM) || defined(CONFIG_MTD_PLATRAM_MODULE) | ||
462 | &sram_device_a, | ||
463 | &sram_device_b, | ||
464 | #endif | ||
465 | |||
360 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | 466 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) |
361 | &smc91x_device, | 467 | &smc91x_device, |
362 | #endif | 468 | #endif |
diff --git a/arch/blackfin/mach-bf533/include/mach/anomaly.h b/arch/blackfin/mach-bf533/include/mach/anomaly.h index 31145b509e20..70a0ad69c610 100644 --- a/arch/blackfin/mach-bf533/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf533/include/mach/anomaly.h | |||
@@ -34,7 +34,7 @@ | |||
34 | # define ANOMALY_BF533 0 | 34 | # define ANOMALY_BF533 0 |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | /* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */ | 37 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
38 | #define ANOMALY_05000074 (1) | 38 | #define ANOMALY_05000074 (1) |
39 | /* UART Line Status Register (UART_LSR) Bits Are Not Updated at the Same Time */ | 39 | /* UART Line Status Register (UART_LSR) Bits Are Not Updated at the Same Time */ |
40 | #define ANOMALY_05000099 (__SILICON_REVISION__ < 5) | 40 | #define ANOMALY_05000099 (__SILICON_REVISION__ < 5) |
@@ -46,7 +46,7 @@ | |||
46 | #define ANOMALY_05000122 (1) | 46 | #define ANOMALY_05000122 (1) |
47 | /* Instruction DMA Can Cause Data Cache Fills to Fail (Boot Implications) */ | 47 | /* Instruction DMA Can Cause Data Cache Fills to Fail (Boot Implications) */ |
48 | #define ANOMALY_05000158 (__SILICON_REVISION__ < 5) | 48 | #define ANOMALY_05000158 (__SILICON_REVISION__ < 5) |
49 | /* PPI Data Lengths Between 8 and 16 Do Not Zero Out Upper Bits */ | 49 | /* PPI Data Lengths between 8 and 16 Do Not Zero Out Upper Bits */ |
50 | #define ANOMALY_05000166 (1) | 50 | #define ANOMALY_05000166 (1) |
51 | /* Turning SPORTs on while External Frame Sync Is Active May Corrupt Data */ | 51 | /* Turning SPORTs on while External Frame Sync Is Active May Corrupt Data */ |
52 | #define ANOMALY_05000167 (1) | 52 | #define ANOMALY_05000167 (1) |
@@ -56,13 +56,13 @@ | |||
56 | #define ANOMALY_05000180 (1) | 56 | #define ANOMALY_05000180 (1) |
57 | /* Timer Pin Limitations for PPI TX Modes with External Frame Syncs */ | 57 | /* Timer Pin Limitations for PPI TX Modes with External Frame Syncs */ |
58 | #define ANOMALY_05000183 (__SILICON_REVISION__ < 4) | 58 | #define ANOMALY_05000183 (__SILICON_REVISION__ < 4) |
59 | /* False Protection Exceptions */ | 59 | /* False Protection Exceptions when Speculative Fetch Is Cancelled */ |
60 | #define ANOMALY_05000189 (__SILICON_REVISION__ < 4) | 60 | #define ANOMALY_05000189 (__SILICON_REVISION__ < 4) |
61 | /* False I/O Pin Interrupts on Edge-Sensitive Inputs When Polarity Setting Is Changed */ | 61 | /* False I/O Pin Interrupts on Edge-Sensitive Inputs When Polarity Setting Is Changed */ |
62 | #define ANOMALY_05000193 (__SILICON_REVISION__ < 4) | 62 | #define ANOMALY_05000193 (__SILICON_REVISION__ < 4) |
63 | /* Restarting SPORT in Specific Modes May Cause Data Corruption */ | 63 | /* Restarting SPORT in Specific Modes May Cause Data Corruption */ |
64 | #define ANOMALY_05000194 (__SILICON_REVISION__ < 4) | 64 | #define ANOMALY_05000194 (__SILICON_REVISION__ < 4) |
65 | /* Failing MMR Accesses When Stalled by Preceding Memory Read */ | 65 | /* Failing MMR Accesses when Preceding Memory Read Stalls */ |
66 | #define ANOMALY_05000198 (__SILICON_REVISION__ < 5) | 66 | #define ANOMALY_05000198 (__SILICON_REVISION__ < 5) |
67 | /* Current DMA Address Shows Wrong Value During Carry Fix */ | 67 | /* Current DMA Address Shows Wrong Value During Carry Fix */ |
68 | #define ANOMALY_05000199 (__SILICON_REVISION__ < 4) | 68 | #define ANOMALY_05000199 (__SILICON_REVISION__ < 4) |
@@ -74,7 +74,7 @@ | |||
74 | #define ANOMALY_05000202 (__SILICON_REVISION__ < 5) | 74 | #define ANOMALY_05000202 (__SILICON_REVISION__ < 5) |
75 | /* Specific Sequence That Can Cause DMA Error or DMA Stopping */ | 75 | /* Specific Sequence That Can Cause DMA Error or DMA Stopping */ |
76 | #define ANOMALY_05000203 (__SILICON_REVISION__ < 4) | 76 | #define ANOMALY_05000203 (__SILICON_REVISION__ < 4) |
77 | /* Incorrect data read with write-through cache and allocate cache lines on reads only mode */ | 77 | /* Incorrect Data Read with Writethrough "Allocate Cache Lines on Reads Only" Cache Mode */ |
78 | #define ANOMALY_05000204 (__SILICON_REVISION__ < 4 && ANOMALY_BF533) | 78 | #define ANOMALY_05000204 (__SILICON_REVISION__ < 4 && ANOMALY_BF533) |
79 | /* Recovery from "Brown-Out" Condition */ | 79 | /* Recovery from "Brown-Out" Condition */ |
80 | #define ANOMALY_05000207 (__SILICON_REVISION__ < 4) | 80 | #define ANOMALY_05000207 (__SILICON_REVISION__ < 4) |
@@ -106,7 +106,7 @@ | |||
106 | #define ANOMALY_05000244 (__SILICON_REVISION__ < 5) | 106 | #define ANOMALY_05000244 (__SILICON_REVISION__ < 5) |
107 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ | 107 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ |
108 | #define ANOMALY_05000245 (1) | 108 | #define ANOMALY_05000245 (1) |
109 | /* Data CPLBs Should Prevent Spurious Hardware Errors */ | 109 | /* Data CPLBs Should Prevent False Hardware Errors */ |
110 | #define ANOMALY_05000246 (__SILICON_REVISION__ < 5) | 110 | #define ANOMALY_05000246 (__SILICON_REVISION__ < 5) |
111 | /* Incorrect Bit Shift of Data Word in Multichannel (TDM) Mode in Certain Conditions */ | 111 | /* Incorrect Bit Shift of Data Word in Multichannel (TDM) Mode in Certain Conditions */ |
112 | #define ANOMALY_05000250 (__SILICON_REVISION__ == 4) | 112 | #define ANOMALY_05000250 (__SILICON_REVISION__ == 4) |
@@ -148,21 +148,21 @@ | |||
148 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 6) | 148 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 6) |
149 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ | 149 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ |
150 | #define ANOMALY_05000278 (__SILICON_REVISION__ < 6) | 150 | #define ANOMALY_05000278 (__SILICON_REVISION__ < 6) |
151 | /* False Hardware Error Exception When ISR Context Is Not Restored */ | 151 | /* False Hardware Error Exception when ISR Context Is Not Restored */ |
152 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 6) | 152 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 6) |
153 | /* Memory DMA Corruption with 32-Bit Data and Traffic Control */ | 153 | /* Memory DMA Corruption with 32-Bit Data and Traffic Control */ |
154 | #define ANOMALY_05000282 (__SILICON_REVISION__ < 6) | 154 | #define ANOMALY_05000282 (__SILICON_REVISION__ < 6) |
155 | /* System MMR Write Is Stalled Indefinitely When Killed in a Particular Stage */ | 155 | /* System MMR Write Is Stalled Indefinitely when Killed in a Particular Stage */ |
156 | #define ANOMALY_05000283 (__SILICON_REVISION__ < 6) | 156 | #define ANOMALY_05000283 (__SILICON_REVISION__ < 6) |
157 | /* SPORTs May Receive Bad Data If FIFOs Fill Up */ | 157 | /* SPORTs May Receive Bad Data If FIFOs Fill Up */ |
158 | #define ANOMALY_05000288 (__SILICON_REVISION__ < 6) | 158 | #define ANOMALY_05000288 (__SILICON_REVISION__ < 6) |
159 | /* Memory-To-Memory DMA Source/Destination Descriptors Must Be in Same Memory Space */ | 159 | /* Memory-To-Memory DMA Source/Destination Descriptors Must Be in Same Memory Space */ |
160 | #define ANOMALY_05000301 (__SILICON_REVISION__ < 6) | 160 | #define ANOMALY_05000301 (__SILICON_REVISION__ < 6) |
161 | /* SSYNCs After Writes To DMA MMR Registers May Not Be Handled Correctly */ | 161 | /* SSYNCs after Writes to DMA MMR Registers May Not Be Handled Correctly */ |
162 | #define ANOMALY_05000302 (__SILICON_REVISION__ < 5) | 162 | #define ANOMALY_05000302 (__SILICON_REVISION__ < 5) |
163 | /* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */ | 163 | /* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */ |
164 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 5) | 164 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 5) |
165 | /* New Feature: Additional PPI Frame Sync Sampling Options (Not Available On Older Silicon) */ | 165 | /* ALT_TIMING Bit in PPI_CONTROL Register Is Not Functional */ |
166 | #define ANOMALY_05000306 (__SILICON_REVISION__ < 5) | 166 | #define ANOMALY_05000306 (__SILICON_REVISION__ < 5) |
167 | /* SCKELOW Bit Does Not Maintain State Through Hibernate */ | 167 | /* SCKELOW Bit Does Not Maintain State Through Hibernate */ |
168 | #define ANOMALY_05000307 (1) /* note: brokenness is noted in documentation, not anomaly sheet */ | 168 | #define ANOMALY_05000307 (1) /* note: brokenness is noted in documentation, not anomaly sheet */ |
@@ -170,11 +170,11 @@ | |||
170 | #define ANOMALY_05000310 (1) | 170 | #define ANOMALY_05000310 (1) |
171 | /* Erroneous Flag (GPIO) Pin Operations under Specific Sequences */ | 171 | /* Erroneous Flag (GPIO) Pin Operations under Specific Sequences */ |
172 | #define ANOMALY_05000311 (__SILICON_REVISION__ < 6) | 172 | #define ANOMALY_05000311 (__SILICON_REVISION__ < 6) |
173 | /* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ | 173 | /* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ |
174 | #define ANOMALY_05000312 (__SILICON_REVISION__ < 6) | 174 | #define ANOMALY_05000312 (__SILICON_REVISION__ < 6) |
175 | /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */ | 175 | /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */ |
176 | #define ANOMALY_05000313 (__SILICON_REVISION__ < 6) | 176 | #define ANOMALY_05000313 (__SILICON_REVISION__ < 6) |
177 | /* Killed System MMR Write Completes Erroneously On Next System MMR Access */ | 177 | /* Killed System MMR Write Completes Erroneously on Next System MMR Access */ |
178 | #define ANOMALY_05000315 (__SILICON_REVISION__ < 6) | 178 | #define ANOMALY_05000315 (__SILICON_REVISION__ < 6) |
179 | /* Internal Voltage Regulator Values of 1.05V, 1.10V and 1.15V Not Allowed for LQFP Packages */ | 179 | /* Internal Voltage Regulator Values of 1.05V, 1.10V and 1.15V Not Allowed for LQFP Packages */ |
180 | #define ANOMALY_05000319 ((ANOMALY_BF531 || ANOMALY_BF532) && __SILICON_REVISION__ < 6) | 180 | #define ANOMALY_05000319 ((ANOMALY_BF531 || ANOMALY_BF532) && __SILICON_REVISION__ < 6) |
@@ -200,7 +200,7 @@ | |||
200 | #define ANOMALY_05000426 (1) | 200 | #define ANOMALY_05000426 (1) |
201 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ | 201 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ |
202 | #define ANOMALY_05000443 (1) | 202 | #define ANOMALY_05000443 (1) |
203 | /* False Hardware Error when RETI points to invalid memory */ | 203 | /* False Hardware Error when RETI Points to Invalid Memory */ |
204 | #define ANOMALY_05000461 (1) | 204 | #define ANOMALY_05000461 (1) |
205 | 205 | ||
206 | /* These anomalies have been "phased" out of analog.com anomaly sheets and are | 206 | /* These anomalies have been "phased" out of analog.com anomaly sheets and are |
@@ -215,17 +215,17 @@ | |||
215 | #define ANOMALY_05000070 (__SILICON_REVISION__ < 2) | 215 | #define ANOMALY_05000070 (__SILICON_REVISION__ < 2) |
216 | /* Writing FIO_DIR can corrupt a programmable flag's data */ | 216 | /* Writing FIO_DIR can corrupt a programmable flag's data */ |
217 | #define ANOMALY_05000079 (__SILICON_REVISION__ < 2) | 217 | #define ANOMALY_05000079 (__SILICON_REVISION__ < 2) |
218 | /* Timer Auto-Baud Mode requires the UART clock to be enabled */ | 218 | /* Timer Auto-Baud Mode requires the UART clock to be enabled. */ |
219 | #define ANOMALY_05000086 (__SILICON_REVISION__ < 2) | 219 | #define ANOMALY_05000086 (__SILICON_REVISION__ < 2) |
220 | /* Internal Clocking Modes on SPORT0 not supported */ | 220 | /* Internal Clocking Modes on SPORT0 not supported */ |
221 | #define ANOMALY_05000088 (__SILICON_REVISION__ < 2) | 221 | #define ANOMALY_05000088 (__SILICON_REVISION__ < 2) |
222 | /* Internal voltage regulator does not wake up from an RTC wakeup */ | 222 | /* Internal voltage regulator does not wake up from an RTC wakeup */ |
223 | #define ANOMALY_05000092 (__SILICON_REVISION__ < 2) | 223 | #define ANOMALY_05000092 (__SILICON_REVISION__ < 2) |
224 | /* The IFLUSH instruction must be preceded by a CSYNC instruction */ | 224 | /* The IFLUSH Instruction Must Be Preceded by a CSYNC Instruction */ |
225 | #define ANOMALY_05000093 (__SILICON_REVISION__ < 2) | 225 | #define ANOMALY_05000093 (__SILICON_REVISION__ < 2) |
226 | /* Vectoring to an instruction that is presently being filled into the instruction cache may cause erroneous behavior */ | 226 | /* Vectoring to instruction that is being filled into the i-cache may cause erroneous behavior */ |
227 | #define ANOMALY_05000095 (__SILICON_REVISION__ < 2) | 227 | #define ANOMALY_05000095 (__SILICON_REVISION__ < 2) |
228 | /* PREFETCH, FLUSH, and FLUSHINV must be followed by a CSYNC */ | 228 | /* PREFETCH, FLUSH, and FLUSHINV Instructions Must Be Followed by a CSYNC Instruction */ |
229 | #define ANOMALY_05000096 (__SILICON_REVISION__ < 2) | 229 | #define ANOMALY_05000096 (__SILICON_REVISION__ < 2) |
230 | /* Performance Monitor 0 and 1 are swapped when monitoring memory events */ | 230 | /* Performance Monitor 0 and 1 are swapped when monitoring memory events */ |
231 | #define ANOMALY_05000097 (__SILICON_REVISION__ < 2) | 231 | #define ANOMALY_05000097 (__SILICON_REVISION__ < 2) |
@@ -235,45 +235,45 @@ | |||
235 | #define ANOMALY_05000100 (__SILICON_REVISION__ < 2) | 235 | #define ANOMALY_05000100 (__SILICON_REVISION__ < 2) |
236 | /* Reading X_MODIFY or Y_MODIFY while DMA channel is active */ | 236 | /* Reading X_MODIFY or Y_MODIFY while DMA channel is active */ |
237 | #define ANOMALY_05000101 (__SILICON_REVISION__ < 2) | 237 | #define ANOMALY_05000101 (__SILICON_REVISION__ < 2) |
238 | /* Descriptor-based MemDMA may lock up with 32-bit transfers or if transfers span 64KB buffers */ | 238 | /* Descriptor MemDMA may lock up with 32-bit transfers or if transfers span 64KB buffers */ |
239 | #define ANOMALY_05000102 (__SILICON_REVISION__ < 2) | 239 | #define ANOMALY_05000102 (__SILICON_REVISION__ < 2) |
240 | /* Incorrect value written to the cycle counters */ | 240 | /* Incorrect Value Written to the Cycle Counters */ |
241 | #define ANOMALY_05000103 (__SILICON_REVISION__ < 2) | 241 | #define ANOMALY_05000103 (__SILICON_REVISION__ < 2) |
242 | /* Stores to L1 Data memory incorrect when a specific sequence is followed */ | 242 | /* Stores to L1 Data Memory Incorrect when a Specific Sequence Is Followed */ |
243 | #define ANOMALY_05000104 (__SILICON_REVISION__ < 2) | 243 | #define ANOMALY_05000104 (__SILICON_REVISION__ < 2) |
244 | /* Programmable Flag (PF3) functionality not supported in all PPI modes */ | 244 | /* Programmable Flag (PF3) functionality not supported in all PPI modes */ |
245 | #define ANOMALY_05000106 (__SILICON_REVISION__ < 2) | 245 | #define ANOMALY_05000106 (__SILICON_REVISION__ < 2) |
246 | /* Data store can be lost when targeting a cache line fill */ | 246 | /* Data store can be lost when targeting a cache line fill */ |
247 | #define ANOMALY_05000107 (__SILICON_REVISION__ < 2) | 247 | #define ANOMALY_05000107 (__SILICON_REVISION__ < 2) |
248 | /* Reserved bits in SYSCFG register not set at power on */ | 248 | /* Reserved Bits in SYSCFG Register Not Set at Power-On */ |
249 | #define ANOMALY_05000109 (__SILICON_REVISION__ < 3) | 249 | #define ANOMALY_05000109 (__SILICON_REVISION__ < 3) |
250 | /* Infinite Core Stall */ | 250 | /* Infinite Core Stall */ |
251 | #define ANOMALY_05000114 (__SILICON_REVISION__ < 2) | 251 | #define ANOMALY_05000114 (__SILICON_REVISION__ < 2) |
252 | /* PPI_FSx may glitch when generated by the on chip Timers */ | 252 | /* PPI_FSx may glitch when generated by the on chip Timers. */ |
253 | #define ANOMALY_05000115 (__SILICON_REVISION__ < 2) | 253 | #define ANOMALY_05000115 (__SILICON_REVISION__ < 2) |
254 | /* Trace Buffers may record discontinuities into emulation mode and/or exception, NMI, reset handlers */ | 254 | /* Trace Buffers May Contain Errors in Emulation Mode and/or Exception, NMI, Reset Handlers */ |
255 | #define ANOMALY_05000116 (__SILICON_REVISION__ < 3) | 255 | #define ANOMALY_05000116 (__SILICON_REVISION__ < 3) |
256 | /* DTEST registers allow access to Data Cache when DTEST_COMMAND< 14 >= 0 */ | 256 | /* DTEST registers allow access to Data Cache when DTEST_COMMAND< 14 >= 0 */ |
257 | #define ANOMALY_05000117 (__SILICON_REVISION__ < 2) | 257 | #define ANOMALY_05000117 (__SILICON_REVISION__ < 2) |
258 | /* Booting from an 8-bit or 24-bit Addressable SPI device is not supported */ | 258 | /* Booting from an 8-bit or 24-bit Addressable SPI device is not supported */ |
259 | #define ANOMALY_05000118 (__SILICON_REVISION__ < 2) | 259 | #define ANOMALY_05000118 (__SILICON_REVISION__ < 2) |
260 | /* DTEST_COMMAND initiated memory access may be incorrect if data cache or DMA is active */ | 260 | /* DTEST_COMMAND Initiated Memory Access May Be Incorrect If Data Cache or DMA Is Active */ |
261 | #define ANOMALY_05000123 (__SILICON_REVISION__ < 3) | 261 | #define ANOMALY_05000123 (__SILICON_REVISION__ < 3) |
262 | /* DMA Lock-up at CCLK to SCLK ratios of 4:1, 2:1, or 1:1 */ | 262 | /* DMA Lock-up at CCLK to SCLK ratios of 4:1, 2:1, or 1:1 */ |
263 | #define ANOMALY_05000124 (__SILICON_REVISION__ < 3) | 263 | #define ANOMALY_05000124 (__SILICON_REVISION__ < 3) |
264 | /* Erroneous exception when enabling cache */ | 264 | /* Erroneous Exception when Enabling Cache */ |
265 | #define ANOMALY_05000125 (__SILICON_REVISION__ < 3) | 265 | #define ANOMALY_05000125 (__SILICON_REVISION__ < 3) |
266 | /* SPI clock polarity and phase bits incorrect during booting */ | 266 | /* SPI clock polarity and phase bits incorrect during booting */ |
267 | #define ANOMALY_05000126 (__SILICON_REVISION__ < 3) | 267 | #define ANOMALY_05000126 (__SILICON_REVISION__ < 3) |
268 | /* DMEM_CONTROL is not set on Reset */ | 268 | /* DMEM_CONTROL<12> Is Not Set on Reset */ |
269 | #define ANOMALY_05000137 (__SILICON_REVISION__ < 3) | 269 | #define ANOMALY_05000137 (__SILICON_REVISION__ < 3) |
270 | /* SPI boot will not complete if there is a zero fill block in the loader file */ | 270 | /* SPI boot will not complete if there is a zero fill block in the loader file */ |
271 | #define ANOMALY_05000138 (__SILICON_REVISION__ == 2) | 271 | #define ANOMALY_05000138 (__SILICON_REVISION__ == 2) |
272 | /* Timerx_Config must be set for using the PPI in GP output mode with internal Frame Syncs */ | 272 | /* TIMERx_CONFIG[5] must be set for PPI in GP output mode with internal Frame Syncs */ |
273 | #define ANOMALY_05000139 (__SILICON_REVISION__ < 2) | 273 | #define ANOMALY_05000139 (__SILICON_REVISION__ < 2) |
274 | /* Allowing the SPORT RX FIFO to fill will cause an overflow */ | 274 | /* Allowing the SPORT RX FIFO to fill will cause an overflow */ |
275 | #define ANOMALY_05000140 (__SILICON_REVISION__ < 3) | 275 | #define ANOMALY_05000140 (__SILICON_REVISION__ < 3) |
276 | /* An Infinite Stall occurs with a particular sequence of consecutive dual dag events */ | 276 | /* Infinite Stall may occur with a particular sequence of consecutive dual dag events */ |
277 | #define ANOMALY_05000141 (__SILICON_REVISION__ < 3) | 277 | #define ANOMALY_05000141 (__SILICON_REVISION__ < 3) |
278 | /* Interrupts may be lost when a programmable input flag is configured to be edge sensitive */ | 278 | /* Interrupts may be lost when a programmable input flag is configured to be edge sensitive */ |
279 | #define ANOMALY_05000142 (__SILICON_REVISION__ < 3) | 279 | #define ANOMALY_05000142 (__SILICON_REVISION__ < 3) |
@@ -287,7 +287,7 @@ | |||
287 | #define ANOMALY_05000146 (__SILICON_REVISION__ < 3) | 287 | #define ANOMALY_05000146 (__SILICON_REVISION__ < 3) |
288 | /* Source MDMA descriptor may stop with a DMA Error near beginning of descriptor fetch */ | 288 | /* Source MDMA descriptor may stop with a DMA Error near beginning of descriptor fetch */ |
289 | #define ANOMALY_05000147 (__SILICON_REVISION__ < 3) | 289 | #define ANOMALY_05000147 (__SILICON_REVISION__ < 3) |
290 | /* When booting from a 16-bit asynchronous memory device, the upper 8-bits of each word must be 0x00 */ | 290 | /* When booting from 16-bit asynchronous memory, the upper 8 bits of each word must be 0x00 */ |
291 | #define ANOMALY_05000148 (__SILICON_REVISION__ < 3) | 291 | #define ANOMALY_05000148 (__SILICON_REVISION__ < 3) |
292 | /* Frame Delay in SPORT Multichannel Mode */ | 292 | /* Frame Delay in SPORT Multichannel Mode */ |
293 | #define ANOMALY_05000153 (__SILICON_REVISION__ < 3) | 293 | #define ANOMALY_05000153 (__SILICON_REVISION__ < 3) |
@@ -295,13 +295,13 @@ | |||
295 | #define ANOMALY_05000154 (__SILICON_REVISION__ < 3) | 295 | #define ANOMALY_05000154 (__SILICON_REVISION__ < 3) |
296 | /* Timer1 can not be used for PWMOUT mode when a certain PPI mode is in use */ | 296 | /* Timer1 can not be used for PWMOUT mode when a certain PPI mode is in use */ |
297 | #define ANOMALY_05000155 (__SILICON_REVISION__ < 3) | 297 | #define ANOMALY_05000155 (__SILICON_REVISION__ < 3) |
298 | /* Killed 32-bit MMR write leads to next system MMR access thinking it should be 32-bit */ | 298 | /* Killed 32-Bit MMR Write Leads to Next System MMR Access Thinking It Should Be 32-Bit */ |
299 | #define ANOMALY_05000157 (__SILICON_REVISION__ < 3) | 299 | #define ANOMALY_05000157 (__SILICON_REVISION__ < 3) |
300 | /* SPORT transmit data is not gated by external frame sync in certain conditions */ | 300 | /* SPORT Transmit Data Is Not Gated by External Frame Sync in Certain Conditions */ |
301 | #define ANOMALY_05000163 (__SILICON_REVISION__ < 3) | 301 | #define ANOMALY_05000163 (__SILICON_REVISION__ < 3) |
302 | /* SDRAM auto-refresh and subsequent Power Ups */ | 302 | /* Undefined Behavior when Power-Up Sequence Is Issued to SDRAM during Auto-Refresh */ |
303 | #define ANOMALY_05000168 (__SILICON_REVISION__ < 3) | 303 | #define ANOMALY_05000168 (__SILICON_REVISION__ < 3) |
304 | /* DATA CPLB page miss can result in lost write-through cache data writes */ | 304 | /* DATA CPLB Page Miss Can Result in Lost Write-Through Data Cache Writes */ |
305 | #define ANOMALY_05000169 (__SILICON_REVISION__ < 3) | 305 | #define ANOMALY_05000169 (__SILICON_REVISION__ < 3) |
306 | /* DMA vs Core accesses to external memory */ | 306 | /* DMA vs Core accesses to external memory */ |
307 | #define ANOMALY_05000173 (__SILICON_REVISION__ < 3) | 307 | #define ANOMALY_05000173 (__SILICON_REVISION__ < 3) |
@@ -309,15 +309,15 @@ | |||
309 | #define ANOMALY_05000174 (__SILICON_REVISION__ < 3) | 309 | #define ANOMALY_05000174 (__SILICON_REVISION__ < 3) |
310 | /* Overlapping Sequencer and Memory Stalls */ | 310 | /* Overlapping Sequencer and Memory Stalls */ |
311 | #define ANOMALY_05000175 (__SILICON_REVISION__ < 3) | 311 | #define ANOMALY_05000175 (__SILICON_REVISION__ < 3) |
312 | /* Multiplication of (-1) by (-1) followed by an accumulator saturation */ | 312 | /* Overflow Bit Asserted when Multiplication of -1 by -1 Followed by Accumulator Saturation */ |
313 | #define ANOMALY_05000176 (__SILICON_REVISION__ < 3) | 313 | #define ANOMALY_05000176 (__SILICON_REVISION__ < 3) |
314 | /* Disabling the PPI resets the PPI configuration registers */ | 314 | /* Disabling the PPI Resets the PPI Configuration Registers */ |
315 | #define ANOMALY_05000181 (__SILICON_REVISION__ < 3) | 315 | #define ANOMALY_05000181 (__SILICON_REVISION__ < 3) |
316 | /* PPI TX Mode with 2 External Frame Syncs */ | 316 | /* Early PPI Transmit when FS1 Asserts before FS2 in TX Mode with 2 External Frame Syncs */ |
317 | #define ANOMALY_05000185 (__SILICON_REVISION__ < 3) | 317 | #define ANOMALY_05000185 (__SILICON_REVISION__ < 3) |
318 | /* PPI does not invert the Driving PPICLK edge in Transmit Modes */ | 318 | /* PPI does not invert the Driving PPICLK edge in Transmit Modes */ |
319 | #define ANOMALY_05000191 (__SILICON_REVISION__ < 3) | 319 | #define ANOMALY_05000191 (__SILICON_REVISION__ < 3) |
320 | /* In PPI Transmit Modes with External Frame Syncs POLC */ | 320 | /* In PPI Transmit Modes with External Frame Syncs POLC bit must be set to 1 */ |
321 | #define ANOMALY_05000192 (__SILICON_REVISION__ < 3) | 321 | #define ANOMALY_05000192 (__SILICON_REVISION__ < 3) |
322 | /* Internal Voltage Regulator may not start up */ | 322 | /* Internal Voltage Regulator may not start up */ |
323 | #define ANOMALY_05000206 (__SILICON_REVISION__ < 3) | 323 | #define ANOMALY_05000206 (__SILICON_REVISION__ < 3) |
@@ -326,6 +326,7 @@ | |||
326 | #define ANOMALY_05000120 (0) | 326 | #define ANOMALY_05000120 (0) |
327 | #define ANOMALY_05000149 (0) | 327 | #define ANOMALY_05000149 (0) |
328 | #define ANOMALY_05000171 (0) | 328 | #define ANOMALY_05000171 (0) |
329 | #define ANOMALY_05000182 (0) | ||
329 | #define ANOMALY_05000220 (0) | 330 | #define ANOMALY_05000220 (0) |
330 | #define ANOMALY_05000248 (0) | 331 | #define ANOMALY_05000248 (0) |
331 | #define ANOMALY_05000266 (0) | 332 | #define ANOMALY_05000266 (0) |
@@ -345,5 +346,7 @@ | |||
345 | #define ANOMALY_05000448 (0) | 346 | #define ANOMALY_05000448 (0) |
346 | #define ANOMALY_05000456 (0) | 347 | #define ANOMALY_05000456 (0) |
347 | #define ANOMALY_05000450 (0) | 348 | #define ANOMALY_05000450 (0) |
349 | #define ANOMALY_05000465 (0) | ||
350 | #define ANOMALY_05000467 (0) | ||
348 | 351 | ||
349 | #endif | 352 | #endif |
diff --git a/arch/blackfin/mach-bf533/include/mach/blackfin.h b/arch/blackfin/mach-bf533/include/mach/blackfin.h index 045184f81a29..39aa175f19f5 100644 --- a/arch/blackfin/mach-bf533/include/mach/blackfin.h +++ b/arch/blackfin/mach-bf533/include/mach/blackfin.h | |||
@@ -34,7 +34,6 @@ | |||
34 | #define BF533_FAMILY | 34 | #define BF533_FAMILY |
35 | 35 | ||
36 | #include "bf533.h" | 36 | #include "bf533.h" |
37 | #include "mem_map.h" | ||
38 | #include "defBF532.h" | 37 | #include "defBF532.h" |
39 | #include "anomaly.h" | 38 | #include "anomaly.h" |
40 | 39 | ||
diff --git a/arch/blackfin/mach-bf533/include/mach/mem_map.h b/arch/blackfin/mach-bf533/include/mach/mem_map.h index fc33b7cb9937..197af1a398ac 100644 --- a/arch/blackfin/mach-bf533/include/mach/mem_map.h +++ b/arch/blackfin/mach-bf533/include/mach/mem_map.h | |||
@@ -1,38 +1,16 @@ | |||
1 | /* | 1 | /* |
2 | * File: include/asm-blackfin/mach-bf533/mem_map.h | 2 | * BF533 memory map |
3 | * Based on: | ||
4 | * Author: | ||
5 | * | 3 | * |
6 | * Created: | 4 | * Copyright 2004-2009 Analog Devices Inc. |
7 | * Description: | 5 | * Licensed under the GPL-2 or later. |
8 | * | ||
9 | * Rev: | ||
10 | * | ||
11 | * Modified: | ||
12 | * | ||
13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
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 as published by | ||
17 | * the Free Software Foundation; either version 2, or (at your option) | ||
18 | * any later version. | ||
19 | * | ||
20 | * This program is distributed in the hope that it will be useful, | ||
21 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
23 | * GNU General Public License for more details. | ||
24 | * | ||
25 | * You should have received a copy of the GNU General Public License | ||
26 | * along with this program; see the file COPYING. | ||
27 | * If not, write to the Free Software Foundation, | ||
28 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
29 | */ | 6 | */ |
30 | 7 | ||
31 | #ifndef _MEM_MAP_533_H_ | 8 | #ifndef __BFIN_MACH_MEM_MAP_H__ |
32 | #define _MEM_MAP_533_H_ | 9 | #define __BFIN_MACH_MEM_MAP_H__ |
33 | 10 | ||
34 | #define COREMMR_BASE 0xFFE00000 /* Core MMRs */ | 11 | #ifndef __BFIN_MEM_MAP_H__ |
35 | #define SYSMMR_BASE 0xFFC00000 /* System MMRs */ | 12 | # error "do not include mach/mem_map.h directly -- use asm/mem_map.h" |
13 | #endif | ||
36 | 14 | ||
37 | /* Async Memory Banks */ | 15 | /* Async Memory Banks */ |
38 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ | 16 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ |
@@ -158,20 +136,4 @@ | |||
158 | 136 | ||
159 | #endif | 137 | #endif |
160 | 138 | ||
161 | /* Level 2 Memory - none */ | 139 | #endif |
162 | |||
163 | #define L2_START 0 | ||
164 | #define L2_LENGTH 0 | ||
165 | |||
166 | /* Scratch Pad Memory */ | ||
167 | |||
168 | #define L1_SCRATCH_START 0xFFB00000 | ||
169 | #define L1_SCRATCH_LENGTH 0x1000 | ||
170 | |||
171 | #define GET_PDA_SAFE(preg) \ | ||
172 | preg.l = _cpu_pda; \ | ||
173 | preg.h = _cpu_pda; | ||
174 | |||
175 | #define GET_PDA(preg, dreg) GET_PDA_SAFE(preg) | ||
176 | |||
177 | #endif /* _MEM_MAP_533_H_ */ | ||
diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c index ff7228caa7da..c1f76dd2c4ed 100644 --- a/arch/blackfin/mach-bf537/boards/stamp.c +++ b/arch/blackfin/mach-bf537/boards/stamp.c | |||
@@ -79,7 +79,6 @@ static struct resource bfin_isp1760_resources[] = { | |||
79 | 79 | ||
80 | static struct isp1760_platform_data isp1760_priv = { | 80 | static struct isp1760_platform_data isp1760_priv = { |
81 | .is_isp1761 = 0, | 81 | .is_isp1761 = 0, |
82 | .port1_disable = 0, | ||
83 | .bus_width_16 = 1, | 82 | .bus_width_16 = 1, |
84 | .port1_otg = 0, | 83 | .port1_otg = 0, |
85 | .analog_oc = 0, | 84 | .analog_oc = 0, |
diff --git a/arch/blackfin/mach-bf537/include/mach/anomaly.h b/arch/blackfin/mach-bf537/include/mach/anomaly.h index fc9663425465..57c128cc3b64 100644 --- a/arch/blackfin/mach-bf537/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf537/include/mach/anomaly.h | |||
@@ -34,13 +34,13 @@ | |||
34 | # define ANOMALY_BF537 0 | 34 | # define ANOMALY_BF537 0 |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | /* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */ | 37 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
38 | #define ANOMALY_05000074 (1) | 38 | #define ANOMALY_05000074 (1) |
39 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ | 39 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ |
40 | #define ANOMALY_05000119 (1) | 40 | #define ANOMALY_05000119 (1) |
41 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ | 41 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ |
42 | #define ANOMALY_05000122 (1) | 42 | #define ANOMALY_05000122 (1) |
43 | /* Killed 32-bit MMR write leads to next system MMR access thinking it should be 32-bit */ | 43 | /* Killed 32-Bit MMR Write Leads to Next System MMR Access Thinking It Should Be 32-Bit */ |
44 | #define ANOMALY_05000157 (__SILICON_REVISION__ < 2) | 44 | #define ANOMALY_05000157 (__SILICON_REVISION__ < 2) |
45 | /* PPI_DELAY Not Functional in PPI Modes with 0 Frame Syncs */ | 45 | /* PPI_DELAY Not Functional in PPI Modes with 0 Frame Syncs */ |
46 | #define ANOMALY_05000180 (1) | 46 | #define ANOMALY_05000180 (1) |
@@ -50,11 +50,11 @@ | |||
50 | #define ANOMALY_05000244 (__SILICON_REVISION__ < 3) | 50 | #define ANOMALY_05000244 (__SILICON_REVISION__ < 3) |
51 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ | 51 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ |
52 | #define ANOMALY_05000245 (1) | 52 | #define ANOMALY_05000245 (1) |
53 | /* CLKIN Buffer Output Enable Reset Behavior Is Changed */ | 53 | /* Buffered CLKIN Output Is Disabled by Default */ |
54 | #define ANOMALY_05000247 (1) | 54 | #define ANOMALY_05000247 (1) |
55 | /* Incorrect Bit Shift of Data Word in Multichannel (TDM) Mode in Certain Conditions */ | 55 | /* Incorrect Bit Shift of Data Word in Multichannel (TDM) Mode in Certain Conditions */ |
56 | #define ANOMALY_05000250 (__SILICON_REVISION__ < 3) | 56 | #define ANOMALY_05000250 (__SILICON_REVISION__ < 3) |
57 | /* EMAC Tx DMA error after an early frame abort */ | 57 | /* EMAC TX DMA Error After an Early Frame Abort */ |
58 | #define ANOMALY_05000252 (__SILICON_REVISION__ < 3) | 58 | #define ANOMALY_05000252 (__SILICON_REVISION__ < 3) |
59 | /* Maximum External Clock Speed for Timers */ | 59 | /* Maximum External Clock Speed for Timers */ |
60 | #define ANOMALY_05000253 (__SILICON_REVISION__ < 3) | 60 | #define ANOMALY_05000253 (__SILICON_REVISION__ < 3) |
@@ -62,7 +62,7 @@ | |||
62 | #define ANOMALY_05000254 (__SILICON_REVISION__ > 2) | 62 | #define ANOMALY_05000254 (__SILICON_REVISION__ > 2) |
63 | /* Entering Hibernate State with RTC Seconds Interrupt Not Functional */ | 63 | /* Entering Hibernate State with RTC Seconds Interrupt Not Functional */ |
64 | #define ANOMALY_05000255 (__SILICON_REVISION__ < 3) | 64 | #define ANOMALY_05000255 (__SILICON_REVISION__ < 3) |
65 | /* EMAC MDIO input latched on wrong MDC edge */ | 65 | /* EMAC MDIO Input Latched on Wrong MDC Edge */ |
66 | #define ANOMALY_05000256 (__SILICON_REVISION__ < 3) | 66 | #define ANOMALY_05000256 (__SILICON_REVISION__ < 3) |
67 | /* Interrupt/Exception During Short Hardware Loop May Cause Bad Instruction Fetches */ | 67 | /* Interrupt/Exception During Short Hardware Loop May Cause Bad Instruction Fetches */ |
68 | #define ANOMALY_05000257 (__SILICON_REVISION__ < 3) | 68 | #define ANOMALY_05000257 (__SILICON_REVISION__ < 3) |
@@ -80,7 +80,7 @@ | |||
80 | #define ANOMALY_05000264 (__SILICON_REVISION__ < 3) | 80 | #define ANOMALY_05000264 (__SILICON_REVISION__ < 3) |
81 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ | 81 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ |
82 | #define ANOMALY_05000265 (1) | 82 | #define ANOMALY_05000265 (1) |
83 | /* Memory DMA error when peripheral DMA is running with non-zero DEB_TRAFFIC_PERIOD */ | 83 | /* Memory DMA Error when Peripheral DMA Is Running with Non-Zero DEB_TRAFFIC_PERIOD */ |
84 | #define ANOMALY_05000268 (__SILICON_REVISION__ < 3) | 84 | #define ANOMALY_05000268 (__SILICON_REVISION__ < 3) |
85 | /* High I/O Activity Causes Output Voltage of Internal Voltage Regulator (Vddint) to Decrease */ | 85 | /* High I/O Activity Causes Output Voltage of Internal Voltage Regulator (Vddint) to Decrease */ |
86 | #define ANOMALY_05000270 (__SILICON_REVISION__ < 3) | 86 | #define ANOMALY_05000270 (__SILICON_REVISION__ < 3) |
@@ -92,15 +92,15 @@ | |||
92 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 3) | 92 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 3) |
93 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ | 93 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ |
94 | #define ANOMALY_05000278 (((ANOMALY_BF536 || ANOMALY_BF537) && __SILICON_REVISION__ < 3) || (ANOMALY_BF534 && __SILICON_REVISION__ < 2)) | 94 | #define ANOMALY_05000278 (((ANOMALY_BF536 || ANOMALY_BF537) && __SILICON_REVISION__ < 3) || (ANOMALY_BF534 && __SILICON_REVISION__ < 2)) |
95 | /* SPI Master boot mode does not work well with Atmel Data flash devices */ | 95 | /* SPI Master Boot Mode Does Not Work Well with Atmel Data Flash Devices */ |
96 | #define ANOMALY_05000280 (1) | 96 | #define ANOMALY_05000280 (1) |
97 | /* False Hardware Error Exception When ISR Context Is Not Restored */ | 97 | /* False Hardware Error Exception when ISR Context Is Not Restored */ |
98 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 3) | 98 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 3) |
99 | /* Memory DMA Corruption with 32-Bit Data and Traffic Control */ | 99 | /* Memory DMA Corruption with 32-Bit Data and Traffic Control */ |
100 | #define ANOMALY_05000282 (__SILICON_REVISION__ < 3) | 100 | #define ANOMALY_05000282 (__SILICON_REVISION__ < 3) |
101 | /* System MMR Write Is Stalled Indefinitely When Killed in a Particular Stage */ | 101 | /* System MMR Write Is Stalled Indefinitely when Killed in a Particular Stage */ |
102 | #define ANOMALY_05000283 (__SILICON_REVISION__ < 3) | 102 | #define ANOMALY_05000283 (__SILICON_REVISION__ < 3) |
103 | /* New Feature: EMAC TX DMA Word Alignment (Not Available On Older Silicon) */ | 103 | /* TXDWA Bit in EMAC_SYSCTL Register Is Not Functional */ |
104 | #define ANOMALY_05000285 (__SILICON_REVISION__ < 3) | 104 | #define ANOMALY_05000285 (__SILICON_REVISION__ < 3) |
105 | /* SPORTs May Receive Bad Data If FIFOs Fill Up */ | 105 | /* SPORTs May Receive Bad Data If FIFOs Fill Up */ |
106 | #define ANOMALY_05000288 (__SILICON_REVISION__ < 3) | 106 | #define ANOMALY_05000288 (__SILICON_REVISION__ < 3) |
@@ -112,25 +112,25 @@ | |||
112 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 3) | 112 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 3) |
113 | /* SCKELOW Bit Does Not Maintain State Through Hibernate */ | 113 | /* SCKELOW Bit Does Not Maintain State Through Hibernate */ |
114 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 3) | 114 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 3) |
115 | /* Writing UART_THR while UART clock is disabled sends erroneous start bit */ | 115 | /* Writing UART_THR While UART Clock Is Disabled Sends Erroneous Start Bit */ |
116 | #define ANOMALY_05000309 (__SILICON_REVISION__ < 3) | 116 | #define ANOMALY_05000309 (__SILICON_REVISION__ < 3) |
117 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ | 117 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ |
118 | #define ANOMALY_05000310 (1) | 118 | #define ANOMALY_05000310 (1) |
119 | /* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ | 119 | /* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ |
120 | #define ANOMALY_05000312 (1) | 120 | #define ANOMALY_05000312 (1) |
121 | /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */ | 121 | /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */ |
122 | #define ANOMALY_05000313 (1) | 122 | #define ANOMALY_05000313 (1) |
123 | /* Killed System MMR Write Completes Erroneously On Next System MMR Access */ | 123 | /* Killed System MMR Write Completes Erroneously on Next System MMR Access */ |
124 | #define ANOMALY_05000315 (__SILICON_REVISION__ < 3) | 124 | #define ANOMALY_05000315 (__SILICON_REVISION__ < 3) |
125 | /* EMAC RMII mode: collisions occur in Full Duplex mode */ | 125 | /* EMAC RMII Mode: Collisions Occur in Full Duplex Mode */ |
126 | #define ANOMALY_05000316 (__SILICON_REVISION__ < 3) | 126 | #define ANOMALY_05000316 (__SILICON_REVISION__ < 3) |
127 | /* EMAC RMII mode: TX frames in half duplex fail with status No Carrier */ | 127 | /* EMAC RMII Mode: TX Frames in Half Duplex Fail with Status "No Carrier" */ |
128 | #define ANOMALY_05000321 (__SILICON_REVISION__ < 3) | 128 | #define ANOMALY_05000321 (__SILICON_REVISION__ < 3) |
129 | /* EMAC RMII mode at 10-Base-T speed: RX frames not received properly */ | 129 | /* EMAC RMII Mode at 10-Base-T Speed: RX Frames Not Received Properly */ |
130 | #define ANOMALY_05000322 (1) | 130 | #define ANOMALY_05000322 (1) |
131 | /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */ | 131 | /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */ |
132 | #define ANOMALY_05000341 (__SILICON_REVISION__ >= 3) | 132 | #define ANOMALY_05000341 (__SILICON_REVISION__ >= 3) |
133 | /* New Feature: UART Remains Enabled after UART Boot */ | 133 | /* UART Gets Disabled after UART Boot */ |
134 | #define ANOMALY_05000350 (__SILICON_REVISION__ >= 3) | 134 | #define ANOMALY_05000350 (__SILICON_REVISION__ >= 3) |
135 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ | 135 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ |
136 | #define ANOMALY_05000355 (1) | 136 | #define ANOMALY_05000355 (1) |
@@ -154,7 +154,7 @@ | |||
154 | #define ANOMALY_05000426 (1) | 154 | #define ANOMALY_05000426 (1) |
155 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ | 155 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ |
156 | #define ANOMALY_05000443 (1) | 156 | #define ANOMALY_05000443 (1) |
157 | /* False Hardware Error when RETI points to invalid memory */ | 157 | /* False Hardware Error when RETI Points to Invalid Memory */ |
158 | #define ANOMALY_05000461 (1) | 158 | #define ANOMALY_05000461 (1) |
159 | 159 | ||
160 | /* Anomalies that don't exist on this proc */ | 160 | /* Anomalies that don't exist on this proc */ |
@@ -165,14 +165,17 @@ | |||
165 | #define ANOMALY_05000158 (0) | 165 | #define ANOMALY_05000158 (0) |
166 | #define ANOMALY_05000171 (0) | 166 | #define ANOMALY_05000171 (0) |
167 | #define ANOMALY_05000179 (0) | 167 | #define ANOMALY_05000179 (0) |
168 | #define ANOMALY_05000182 (0) | ||
168 | #define ANOMALY_05000183 (0) | 169 | #define ANOMALY_05000183 (0) |
169 | #define ANOMALY_05000198 (0) | 170 | #define ANOMALY_05000198 (0) |
171 | #define ANOMALY_05000202 (0) | ||
170 | #define ANOMALY_05000215 (0) | 172 | #define ANOMALY_05000215 (0) |
171 | #define ANOMALY_05000220 (0) | 173 | #define ANOMALY_05000220 (0) |
172 | #define ANOMALY_05000227 (0) | 174 | #define ANOMALY_05000227 (0) |
173 | #define ANOMALY_05000230 (0) | 175 | #define ANOMALY_05000230 (0) |
174 | #define ANOMALY_05000231 (0) | 176 | #define ANOMALY_05000231 (0) |
175 | #define ANOMALY_05000233 (0) | 177 | #define ANOMALY_05000233 (0) |
178 | #define ANOMALY_05000234 (0) | ||
176 | #define ANOMALY_05000242 (0) | 179 | #define ANOMALY_05000242 (0) |
177 | #define ANOMALY_05000248 (0) | 180 | #define ANOMALY_05000248 (0) |
178 | #define ANOMALY_05000266 (0) | 181 | #define ANOMALY_05000266 (0) |
@@ -195,5 +198,7 @@ | |||
195 | #define ANOMALY_05000448 (0) | 198 | #define ANOMALY_05000448 (0) |
196 | #define ANOMALY_05000456 (0) | 199 | #define ANOMALY_05000456 (0) |
197 | #define ANOMALY_05000450 (0) | 200 | #define ANOMALY_05000450 (0) |
201 | #define ANOMALY_05000465 (0) | ||
202 | #define ANOMALY_05000467 (0) | ||
198 | 203 | ||
199 | #endif | 204 | #endif |
diff --git a/arch/blackfin/mach-bf537/include/mach/blackfin.h b/arch/blackfin/mach-bf537/include/mach/blackfin.h index 7d6069c886f1..f5e5015ad831 100644 --- a/arch/blackfin/mach-bf537/include/mach/blackfin.h +++ b/arch/blackfin/mach-bf537/include/mach/blackfin.h | |||
@@ -35,7 +35,6 @@ | |||
35 | #define BF537_FAMILY | 35 | #define BF537_FAMILY |
36 | 36 | ||
37 | #include "bf537.h" | 37 | #include "bf537.h" |
38 | #include "mem_map.h" | ||
39 | #include "defBF534.h" | 38 | #include "defBF534.h" |
40 | #include "anomaly.h" | 39 | #include "anomaly.h" |
41 | 40 | ||
diff --git a/arch/blackfin/mach-bf537/include/mach/mem_map.h b/arch/blackfin/mach-bf537/include/mach/mem_map.h index f9010c4b4bf3..942f08de306b 100644 --- a/arch/blackfin/mach-bf537/include/mach/mem_map.h +++ b/arch/blackfin/mach-bf537/include/mach/mem_map.h | |||
@@ -1,38 +1,16 @@ | |||
1 | /* | 1 | /* |
2 | * file: include/asm-blackfin/mach-bf537/mem_map.h | 2 | * BF537 memory map |
3 | * based on: | ||
4 | * author: | ||
5 | * | 3 | * |
6 | * created: | 4 | * Copyright 2004-2009 Analog Devices Inc. |
7 | * description: | 5 | * Licensed under the GPL-2 or later. |
8 | * Memory MAP Common header file for blackfin BF537/6/4 of processors. | ||
9 | * rev: | ||
10 | * | ||
11 | * modified: | ||
12 | * | ||
13 | * bugs: enter bugs at http://blackfin.uclinux.org/ | ||
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 as published by | ||
17 | * the free software foundation; either version 2, or (at your option) | ||
18 | * any later version. | ||
19 | * | ||
20 | * this program is distributed in the hope that it will be useful, | ||
21 | * but without any warranty; without even the implied warranty of | ||
22 | * merchantability or fitness for a particular purpose. see the | ||
23 | * gnu general public license for more details. | ||
24 | * | ||
25 | * you should have received a copy of the gnu general public license | ||
26 | * along with this program; see the file copying. | ||
27 | * if not, write to the free software foundation, | ||
28 | * 59 temple place - suite 330, boston, ma 02111-1307, usa. | ||
29 | */ | 6 | */ |
30 | 7 | ||
31 | #ifndef _MEM_MAP_537_H_ | 8 | #ifndef __BFIN_MACH_MEM_MAP_H__ |
32 | #define _MEM_MAP_537_H_ | 9 | #define __BFIN_MACH_MEM_MAP_H__ |
33 | 10 | ||
34 | #define COREMMR_BASE 0xFFE00000 /* Core MMRs */ | 11 | #ifndef __BFIN_MEM_MAP_H__ |
35 | #define SYSMMR_BASE 0xFFC00000 /* System MMRs */ | 12 | # error "do not include mach/mem_map.h directly -- use asm/mem_map.h" |
13 | #endif | ||
36 | 14 | ||
37 | /* Async Memory Banks */ | 15 | /* Async Memory Banks */ |
38 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ | 16 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ |
@@ -166,20 +144,4 @@ | |||
166 | 144 | ||
167 | #endif | 145 | #endif |
168 | 146 | ||
169 | /* Level 2 Memory - none */ | 147 | #endif |
170 | |||
171 | #define L2_START 0 | ||
172 | #define L2_LENGTH 0 | ||
173 | |||
174 | /* Scratch Pad Memory */ | ||
175 | |||
176 | #define L1_SCRATCH_START 0xFFB00000 | ||
177 | #define L1_SCRATCH_LENGTH 0x1000 | ||
178 | |||
179 | #define GET_PDA_SAFE(preg) \ | ||
180 | preg.l = _cpu_pda; \ | ||
181 | preg.h = _cpu_pda; | ||
182 | |||
183 | #define GET_PDA(preg, dreg) GET_PDA_SAFE(preg) | ||
184 | |||
185 | #endif /* _MEM_MAP_537_H_ */ | ||
diff --git a/arch/blackfin/mach-bf538/include/mach/anomaly.h b/arch/blackfin/mach-bf538/include/mach/anomaly.h index 175ca9ef7232..c97acdf85cd3 100644 --- a/arch/blackfin/mach-bf538/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf538/include/mach/anomaly.h | |||
@@ -30,13 +30,13 @@ | |||
30 | # define ANOMALY_BF539 0 | 30 | # define ANOMALY_BF539 0 |
31 | #endif | 31 | #endif |
32 | 32 | ||
33 | /* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */ | 33 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
34 | #define ANOMALY_05000074 (1) | 34 | #define ANOMALY_05000074 (1) |
35 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ | 35 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ |
36 | #define ANOMALY_05000119 (1) | 36 | #define ANOMALY_05000119 (1) |
37 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ | 37 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ |
38 | #define ANOMALY_05000122 (1) | 38 | #define ANOMALY_05000122 (1) |
39 | /* PPI Data Lengths Between 8 and 16 Do Not Zero Out Upper Bits */ | 39 | /* PPI Data Lengths between 8 and 16 Do Not Zero Out Upper Bits */ |
40 | #define ANOMALY_05000166 (1) | 40 | #define ANOMALY_05000166 (1) |
41 | /* PPI_COUNT Cannot Be Programmed to 0 in General Purpose TX or RX Modes */ | 41 | /* PPI_COUNT Cannot Be Programmed to 0 in General Purpose TX or RX Modes */ |
42 | #define ANOMALY_05000179 (1) | 42 | #define ANOMALY_05000179 (1) |
@@ -70,11 +70,11 @@ | |||
70 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 4) | 70 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 4) |
71 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ | 71 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ |
72 | #define ANOMALY_05000278 (__SILICON_REVISION__ < 4) | 72 | #define ANOMALY_05000278 (__SILICON_REVISION__ < 4) |
73 | /* False Hardware Error Exception When ISR Context Is Not Restored */ | 73 | /* False Hardware Error Exception when ISR Context Is Not Restored */ |
74 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 4) | 74 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 4) |
75 | /* Memory DMA Corruption with 32-Bit Data and Traffic Control */ | 75 | /* Memory DMA Corruption with 32-Bit Data and Traffic Control */ |
76 | #define ANOMALY_05000282 (__SILICON_REVISION__ < 4) | 76 | #define ANOMALY_05000282 (__SILICON_REVISION__ < 4) |
77 | /* System MMR Write Is Stalled Indefinitely When Killed in a Particular Stage */ | 77 | /* System MMR Write Is Stalled Indefinitely when Killed in a Particular Stage */ |
78 | #define ANOMALY_05000283 (__SILICON_REVISION__ < 4) | 78 | #define ANOMALY_05000283 (__SILICON_REVISION__ < 4) |
79 | /* SPORTs May Receive Bad Data If FIFOs Fill Up */ | 79 | /* SPORTs May Receive Bad Data If FIFOs Fill Up */ |
80 | #define ANOMALY_05000288 (__SILICON_REVISION__ < 4) | 80 | #define ANOMALY_05000288 (__SILICON_REVISION__ < 4) |
@@ -92,11 +92,11 @@ | |||
92 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 4) | 92 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 4) |
93 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ | 93 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ |
94 | #define ANOMALY_05000310 (1) | 94 | #define ANOMALY_05000310 (1) |
95 | /* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ | 95 | /* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ |
96 | #define ANOMALY_05000312 (__SILICON_REVISION__ < 5) | 96 | #define ANOMALY_05000312 (__SILICON_REVISION__ < 5) |
97 | /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */ | 97 | /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */ |
98 | #define ANOMALY_05000313 (__SILICON_REVISION__ < 4) | 98 | #define ANOMALY_05000313 (__SILICON_REVISION__ < 4) |
99 | /* Killed System MMR Write Completes Erroneously On Next System MMR Access */ | 99 | /* Killed System MMR Write Completes Erroneously on Next System MMR Access */ |
100 | #define ANOMALY_05000315 (__SILICON_REVISION__ < 4) | 100 | #define ANOMALY_05000315 (__SILICON_REVISION__ < 4) |
101 | /* PFx Glitch on Write to FIO_FLAG_D or FIO_FLAG_T */ | 101 | /* PFx Glitch on Write to FIO_FLAG_D or FIO_FLAG_T */ |
102 | #define ANOMALY_05000318 (ANOMALY_BF539 && __SILICON_REVISION__ < 4) | 102 | #define ANOMALY_05000318 (ANOMALY_BF539 && __SILICON_REVISION__ < 4) |
@@ -110,7 +110,7 @@ | |||
110 | #define ANOMALY_05000371 (__SILICON_REVISION__ < 5) | 110 | #define ANOMALY_05000371 (__SILICON_REVISION__ < 5) |
111 | /* Entering Hibernate State with Peripheral Wakeups Enabled Draws Excess Current */ | 111 | /* Entering Hibernate State with Peripheral Wakeups Enabled Draws Excess Current */ |
112 | #define ANOMALY_05000374 (__SILICON_REVISION__ == 4) | 112 | #define ANOMALY_05000374 (__SILICON_REVISION__ == 4) |
113 | /* New Feature: Open-Drain GPIO Outputs on PC1 and PC4 (Not Available on Older Silicon) */ | 113 | /* GPIO Pins PC1 and PC4 Can Function as Normal Outputs */ |
114 | #define ANOMALY_05000375 (__SILICON_REVISION__ < 4) | 114 | #define ANOMALY_05000375 (__SILICON_REVISION__ < 4) |
115 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ | 115 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ |
116 | #define ANOMALY_05000402 (__SILICON_REVISION__ < 4) | 116 | #define ANOMALY_05000402 (__SILICON_REVISION__ < 4) |
@@ -126,26 +126,32 @@ | |||
126 | #define ANOMALY_05000436 (__SILICON_REVISION__ > 3) | 126 | #define ANOMALY_05000436 (__SILICON_REVISION__ > 3) |
127 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ | 127 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ |
128 | #define ANOMALY_05000443 (1) | 128 | #define ANOMALY_05000443 (1) |
129 | /* False Hardware Error when RETI points to invalid memory */ | 129 | /* False Hardware Error when RETI Points to Invalid Memory */ |
130 | #define ANOMALY_05000461 (1) | 130 | #define ANOMALY_05000461 (1) |
131 | 131 | ||
132 | /* Anomalies that don't exist on this proc */ | 132 | /* Anomalies that don't exist on this proc */ |
133 | #define ANOMALY_05000099 (0) | 133 | #define ANOMALY_05000099 (0) |
134 | #define ANOMALY_05000120 (0) | 134 | #define ANOMALY_05000120 (0) |
135 | #define ANOMALY_05000125 (0) | ||
135 | #define ANOMALY_05000149 (0) | 136 | #define ANOMALY_05000149 (0) |
136 | #define ANOMALY_05000158 (0) | 137 | #define ANOMALY_05000158 (0) |
137 | #define ANOMALY_05000171 (0) | 138 | #define ANOMALY_05000171 (0) |
139 | #define ANOMALY_05000182 (0) | ||
138 | #define ANOMALY_05000198 (0) | 140 | #define ANOMALY_05000198 (0) |
141 | #define ANOMALY_05000202 (0) | ||
139 | #define ANOMALY_05000215 (0) | 142 | #define ANOMALY_05000215 (0) |
140 | #define ANOMALY_05000220 (0) | 143 | #define ANOMALY_05000220 (0) |
141 | #define ANOMALY_05000227 (0) | 144 | #define ANOMALY_05000227 (0) |
142 | #define ANOMALY_05000230 (0) | 145 | #define ANOMALY_05000230 (0) |
143 | #define ANOMALY_05000231 (0) | 146 | #define ANOMALY_05000231 (0) |
147 | #define ANOMALY_05000234 (0) | ||
144 | #define ANOMALY_05000242 (0) | 148 | #define ANOMALY_05000242 (0) |
145 | #define ANOMALY_05000248 (0) | 149 | #define ANOMALY_05000248 (0) |
146 | #define ANOMALY_05000250 (0) | 150 | #define ANOMALY_05000250 (0) |
147 | #define ANOMALY_05000254 (0) | 151 | #define ANOMALY_05000254 (0) |
152 | #define ANOMALY_05000257 (0) | ||
148 | #define ANOMALY_05000263 (0) | 153 | #define ANOMALY_05000263 (0) |
154 | #define ANOMALY_05000266 (0) | ||
149 | #define ANOMALY_05000274 (0) | 155 | #define ANOMALY_05000274 (0) |
150 | #define ANOMALY_05000287 (0) | 156 | #define ANOMALY_05000287 (0) |
151 | #define ANOMALY_05000305 (0) | 157 | #define ANOMALY_05000305 (0) |
@@ -166,5 +172,7 @@ | |||
166 | #define ANOMALY_05000448 (0) | 172 | #define ANOMALY_05000448 (0) |
167 | #define ANOMALY_05000456 (0) | 173 | #define ANOMALY_05000456 (0) |
168 | #define ANOMALY_05000450 (0) | 174 | #define ANOMALY_05000450 (0) |
175 | #define ANOMALY_05000465 (0) | ||
176 | #define ANOMALY_05000467 (0) | ||
169 | 177 | ||
170 | #endif | 178 | #endif |
diff --git a/arch/blackfin/mach-bf538/include/mach/blackfin.h b/arch/blackfin/mach-bf538/include/mach/blackfin.h index 6f628353dde3..9496196ac164 100644 --- a/arch/blackfin/mach-bf538/include/mach/blackfin.h +++ b/arch/blackfin/mach-bf538/include/mach/blackfin.h | |||
@@ -35,7 +35,6 @@ | |||
35 | #define BF538_FAMILY | 35 | #define BF538_FAMILY |
36 | 36 | ||
37 | #include "bf538.h" | 37 | #include "bf538.h" |
38 | #include "mem_map.h" | ||
39 | #include "defBF539.h" | 38 | #include "defBF539.h" |
40 | #include "anomaly.h" | 39 | #include "anomaly.h" |
41 | 40 | ||
diff --git a/arch/blackfin/mach-bf538/include/mach/mem_map.h b/arch/blackfin/mach-bf538/include/mach/mem_map.h index 76811966690e..aff00f453e9e 100644 --- a/arch/blackfin/mach-bf538/include/mach/mem_map.h +++ b/arch/blackfin/mach-bf538/include/mach/mem_map.h | |||
@@ -1,38 +1,16 @@ | |||
1 | /* | 1 | /* |
2 | * File: include/asm-blackfin/mach-bf538/mem_map.h | 2 | * BF538 memory map |
3 | * Based on: | ||
4 | * Author: | ||
5 | * | 3 | * |
6 | * Created: | 4 | * Copyright 2004-2009 Analog Devices Inc. |
7 | * Description: | 5 | * Licensed under the GPL-2 or later. |
8 | * | ||
9 | * Rev: | ||
10 | * | ||
11 | * Modified: | ||
12 | * | ||
13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
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 as published by | ||
17 | * the Free Software Foundation; either version 2, or (at your option) | ||
18 | * any later version. | ||
19 | * | ||
20 | * This program is distributed in the hope that it will be useful, | ||
21 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
23 | * GNU General Public License for more details. | ||
24 | * | ||
25 | * You should have received a copy of the GNU General Public License | ||
26 | * along with this program; see the file COPYING. | ||
27 | * If not, write to the Free Software Foundation, | ||
28 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
29 | */ | 6 | */ |
30 | 7 | ||
31 | #ifndef _MEM_MAP_538_H_ | 8 | #ifndef __BFIN_MACH_MEM_MAP_H__ |
32 | #define _MEM_MAP_538_H_ | 9 | #define __BFIN_MACH_MEM_MAP_H__ |
33 | 10 | ||
34 | #define COREMMR_BASE 0xFFE00000 /* Core MMRs */ | 11 | #ifndef __BFIN_MEM_MAP_H__ |
35 | #define SYSMMR_BASE 0xFFC00000 /* System MMRs */ | 12 | # error "do not include mach/mem_map.h directly -- use asm/mem_map.h" |
13 | #endif | ||
36 | 14 | ||
37 | /* Async Memory Banks */ | 15 | /* Async Memory Banks */ |
38 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ | 16 | #define ASYNC_BANK3_BASE 0x20300000 /* Async Bank 3 */ |
@@ -93,21 +71,4 @@ | |||
93 | #define BFIN_DSUPBANKS 0 | 71 | #define BFIN_DSUPBANKS 0 |
94 | #endif /*CONFIG_BFIN_DCACHE*/ | 72 | #endif /*CONFIG_BFIN_DCACHE*/ |
95 | 73 | ||
96 | 74 | #endif | |
97 | /* Level 2 Memory - none */ | ||
98 | |||
99 | #define L2_START 0 | ||
100 | #define L2_LENGTH 0 | ||
101 | |||
102 | /* Scratch Pad Memory */ | ||
103 | |||
104 | #define L1_SCRATCH_START 0xFFB00000 | ||
105 | #define L1_SCRATCH_LENGTH 0x1000 | ||
106 | |||
107 | #define GET_PDA_SAFE(preg) \ | ||
108 | preg.l = _cpu_pda; \ | ||
109 | preg.h = _cpu_pda; | ||
110 | |||
111 | #define GET_PDA(preg, dreg) GET_PDA_SAFE(preg) | ||
112 | |||
113 | #endif /* _MEM_MAP_538_H_ */ | ||
diff --git a/arch/blackfin/mach-bf548/boards/ezkit.c b/arch/blackfin/mach-bf548/boards/ezkit.c index 805a57b5e650..81f5b95cc361 100644 --- a/arch/blackfin/mach-bf548/boards/ezkit.c +++ b/arch/blackfin/mach-bf548/boards/ezkit.c | |||
@@ -76,7 +76,6 @@ static struct resource bfin_isp1760_resources[] = { | |||
76 | 76 | ||
77 | static struct isp1760_platform_data isp1760_priv = { | 77 | static struct isp1760_platform_data isp1760_priv = { |
78 | .is_isp1761 = 0, | 78 | .is_isp1761 = 0, |
79 | .port1_disable = 0, | ||
80 | .bus_width_16 = 1, | 79 | .bus_width_16 = 1, |
81 | .port1_otg = 0, | 80 | .port1_otg = 0, |
82 | .analog_oc = 0, | 81 | .analog_oc = 0, |
diff --git a/arch/blackfin/mach-bf548/include/mach/anomaly.h b/arch/blackfin/mach-bf548/include/mach/anomaly.h index c510ae688e28..18a4cd24f673 100644 --- a/arch/blackfin/mach-bf548/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf548/include/mach/anomaly.h | |||
@@ -18,7 +18,7 @@ | |||
18 | # error will not work on BF548 silicon version 0.0, or 0.1 | 18 | # error will not work on BF548 silicon version 0.0, or 0.1 |
19 | #endif | 19 | #endif |
20 | 20 | ||
21 | /* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */ | 21 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
22 | #define ANOMALY_05000074 (1) | 22 | #define ANOMALY_05000074 (1) |
23 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ | 23 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ |
24 | #define ANOMALY_05000119 (1) | 24 | #define ANOMALY_05000119 (1) |
@@ -30,17 +30,17 @@ | |||
30 | #define ANOMALY_05000265 (1) | 30 | #define ANOMALY_05000265 (1) |
31 | /* Certain Data Cache Writethrough Modes Fail for Vddint <= 0.9V */ | 31 | /* Certain Data Cache Writethrough Modes Fail for Vddint <= 0.9V */ |
32 | #define ANOMALY_05000272 (1) | 32 | #define ANOMALY_05000272 (1) |
33 | /* False Hardware Error Exception When ISR Context Is Not Restored */ | 33 | /* False Hardware Error Exception when ISR Context Is Not Restored */ |
34 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 1) | 34 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 1) |
35 | /* SSYNCs After Writes To CAN/DMA MMR Registers Are Not Always Handled Correctly */ | 35 | /* SSYNCs After Writes To CAN/DMA MMR Registers Are Not Always Handled Correctly */ |
36 | #define ANOMALY_05000304 (__SILICON_REVISION__ < 1) | 36 | #define ANOMALY_05000304 (__SILICON_REVISION__ < 1) |
37 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ | 37 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ |
38 | #define ANOMALY_05000310 (1) | 38 | #define ANOMALY_05000310 (1) |
39 | /* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ | 39 | /* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ |
40 | #define ANOMALY_05000312 (__SILICON_REVISION__ < 1) | 40 | #define ANOMALY_05000312 (__SILICON_REVISION__ < 1) |
41 | /* TWI Slave Boot Mode Is Not Functional */ | 41 | /* TWI Slave Boot Mode Is Not Functional */ |
42 | #define ANOMALY_05000324 (__SILICON_REVISION__ < 1) | 42 | #define ANOMALY_05000324 (__SILICON_REVISION__ < 1) |
43 | /* External FIFO Boot Mode Is Not Functional */ | 43 | /* FIFO Boot Mode Not Functional */ |
44 | #define ANOMALY_05000325 (__SILICON_REVISION__ < 2) | 44 | #define ANOMALY_05000325 (__SILICON_REVISION__ < 2) |
45 | /* Data Lost When Core and DMA Accesses Are Made to the USB FIFO Simultaneously */ | 45 | /* Data Lost When Core and DMA Accesses Are Made to the USB FIFO Simultaneously */ |
46 | #define ANOMALY_05000327 (__SILICON_REVISION__ < 1) | 46 | #define ANOMALY_05000327 (__SILICON_REVISION__ < 1) |
@@ -178,8 +178,12 @@ | |||
178 | #define ANOMALY_05000450 (1) | 178 | #define ANOMALY_05000450 (1) |
179 | /* USB Receive Interrupt Is Not Generated in DMA Mode 1 */ | 179 | /* USB Receive Interrupt Is Not Generated in DMA Mode 1 */ |
180 | #define ANOMALY_05000456 (__SILICON_REVISION__ < 3) | 180 | #define ANOMALY_05000456 (__SILICON_REVISION__ < 3) |
181 | /* False Hardware Error when RETI points to invalid memory */ | 181 | /* False Hardware Error when RETI Points to Invalid Memory */ |
182 | #define ANOMALY_05000461 (1) | 182 | #define ANOMALY_05000461 (1) |
183 | /* USB Rx DMA hang */ | ||
184 | #define ANOMALY_05000465 (1) | ||
185 | /* Possible RX data corruption when control & data EP FIFOs are accessed via the core */ | ||
186 | #define ANOMALY_05000467 (1) | ||
183 | 187 | ||
184 | /* Anomalies that don't exist on this proc */ | 188 | /* Anomalies that don't exist on this proc */ |
185 | #define ANOMALY_05000099 (0) | 189 | #define ANOMALY_05000099 (0) |
@@ -189,30 +193,36 @@ | |||
189 | #define ANOMALY_05000158 (0) | 193 | #define ANOMALY_05000158 (0) |
190 | #define ANOMALY_05000171 (0) | 194 | #define ANOMALY_05000171 (0) |
191 | #define ANOMALY_05000179 (0) | 195 | #define ANOMALY_05000179 (0) |
196 | #define ANOMALY_05000182 (0) | ||
192 | #define ANOMALY_05000183 (0) | 197 | #define ANOMALY_05000183 (0) |
193 | #define ANOMALY_05000198 (0) | 198 | #define ANOMALY_05000198 (0) |
199 | #define ANOMALY_05000202 (0) | ||
194 | #define ANOMALY_05000215 (0) | 200 | #define ANOMALY_05000215 (0) |
195 | #define ANOMALY_05000220 (0) | 201 | #define ANOMALY_05000220 (0) |
196 | #define ANOMALY_05000227 (0) | 202 | #define ANOMALY_05000227 (0) |
197 | #define ANOMALY_05000230 (0) | 203 | #define ANOMALY_05000230 (0) |
198 | #define ANOMALY_05000231 (0) | 204 | #define ANOMALY_05000231 (0) |
199 | #define ANOMALY_05000233 (0) | 205 | #define ANOMALY_05000233 (0) |
206 | #define ANOMALY_05000234 (0) | ||
200 | #define ANOMALY_05000242 (0) | 207 | #define ANOMALY_05000242 (0) |
201 | #define ANOMALY_05000244 (0) | 208 | #define ANOMALY_05000244 (0) |
202 | #define ANOMALY_05000248 (0) | 209 | #define ANOMALY_05000248 (0) |
203 | #define ANOMALY_05000250 (0) | 210 | #define ANOMALY_05000250 (0) |
204 | #define ANOMALY_05000254 (0) | 211 | #define ANOMALY_05000254 (0) |
212 | #define ANOMALY_05000257 (0) | ||
205 | #define ANOMALY_05000261 (0) | 213 | #define ANOMALY_05000261 (0) |
206 | #define ANOMALY_05000263 (0) | 214 | #define ANOMALY_05000263 (0) |
207 | #define ANOMALY_05000266 (0) | 215 | #define ANOMALY_05000266 (0) |
208 | #define ANOMALY_05000273 (0) | 216 | #define ANOMALY_05000273 (0) |
209 | #define ANOMALY_05000274 (0) | 217 | #define ANOMALY_05000274 (0) |
210 | #define ANOMALY_05000278 (0) | 218 | #define ANOMALY_05000278 (0) |
219 | #define ANOMALY_05000283 (0) | ||
211 | #define ANOMALY_05000287 (0) | 220 | #define ANOMALY_05000287 (0) |
212 | #define ANOMALY_05000301 (0) | 221 | #define ANOMALY_05000301 (0) |
213 | #define ANOMALY_05000305 (0) | 222 | #define ANOMALY_05000305 (0) |
214 | #define ANOMALY_05000307 (0) | 223 | #define ANOMALY_05000307 (0) |
215 | #define ANOMALY_05000311 (0) | 224 | #define ANOMALY_05000311 (0) |
225 | #define ANOMALY_05000315 (0) | ||
216 | #define ANOMALY_05000323 (0) | 226 | #define ANOMALY_05000323 (0) |
217 | #define ANOMALY_05000362 (1) | 227 | #define ANOMALY_05000362 (1) |
218 | #define ANOMALY_05000363 (0) | 228 | #define ANOMALY_05000363 (0) |
diff --git a/arch/blackfin/mach-bf548/include/mach/blackfin.h b/arch/blackfin/mach-bf548/include/mach/blackfin.h index cf6c1500222a..6b97396d817f 100644 --- a/arch/blackfin/mach-bf548/include/mach/blackfin.h +++ b/arch/blackfin/mach-bf548/include/mach/blackfin.h | |||
@@ -33,7 +33,6 @@ | |||
33 | #define _MACH_BLACKFIN_H_ | 33 | #define _MACH_BLACKFIN_H_ |
34 | 34 | ||
35 | #include "bf548.h" | 35 | #include "bf548.h" |
36 | #include "mem_map.h" | ||
37 | #include "anomaly.h" | 36 | #include "anomaly.h" |
38 | 37 | ||
39 | #ifdef CONFIG_BF542 | 38 | #ifdef CONFIG_BF542 |
diff --git a/arch/blackfin/mach-bf548/include/mach/mem_map.h b/arch/blackfin/mach-bf548/include/mach/mem_map.h index 70b9c1194024..caac2dfb41eb 100644 --- a/arch/blackfin/mach-bf548/include/mach/mem_map.h +++ b/arch/blackfin/mach-bf548/include/mach/mem_map.h | |||
@@ -1,38 +1,16 @@ | |||
1 | /* | 1 | /* |
2 | * file: include/asm-blackfin/mach-bf548/mem_map.h | 2 | * BF548 memory map |
3 | * based on: | ||
4 | * author: | ||
5 | * | 3 | * |
6 | * created: | 4 | * Copyright 2004-2009 Analog Devices Inc. |
7 | * description: | 5 | * Licensed under the GPL-2 or later. |
8 | * Memory MAP Common header file for blackfin BF537/6/4 of processors. | ||
9 | * rev: | ||
10 | * | ||
11 | * modified: | ||
12 | * | ||
13 | * bugs: enter bugs at http://blackfin.uclinux.org/ | ||
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 as published by | ||
17 | * the free software foundation; either version 2, or (at your option) | ||
18 | * any later version. | ||
19 | * | ||
20 | * this program is distributed in the hope that it will be useful, | ||
21 | * but without any warranty; without even the implied warranty of | ||
22 | * merchantability or fitness for a particular purpose. see the | ||
23 | * gnu general public license for more details. | ||
24 | * | ||
25 | * you should have received a copy of the gnu general public license | ||
26 | * along with this program; see the file copying. | ||
27 | * if not, write to the free software foundation, | ||
28 | * 59 temple place - suite 330, boston, ma 02111-1307, usa. | ||
29 | */ | 6 | */ |
30 | 7 | ||
31 | #ifndef _MEM_MAP_548_H_ | 8 | #ifndef __BFIN_MACH_MEM_MAP_H__ |
32 | #define _MEM_MAP_548_H_ | 9 | #define __BFIN_MACH_MEM_MAP_H__ |
33 | 10 | ||
34 | #define COREMMR_BASE 0xFFE00000 /* Core MMRs */ | 11 | #ifndef __BFIN_MEM_MAP_H__ |
35 | #define SYSMMR_BASE 0xFFC00000 /* System MMRs */ | 12 | # error "do not include mach/mem_map.h directly -- use asm/mem_map.h" |
13 | #endif | ||
36 | 14 | ||
37 | /* Async Memory Banks */ | 15 | /* Async Memory Banks */ |
38 | #define ASYNC_BANK3_BASE 0x2C000000 /* Async Bank 3 */ | 16 | #define ASYNC_BANK3_BASE 0x2C000000 /* Async Bank 3 */ |
@@ -103,15 +81,4 @@ | |||
103 | # define L2_LENGTH 0x20000 | 81 | # define L2_LENGTH 0x20000 |
104 | #endif | 82 | #endif |
105 | 83 | ||
106 | /* Scratch Pad Memory */ | 84 | #endif |
107 | |||
108 | #define L1_SCRATCH_START 0xFFB00000 | ||
109 | #define L1_SCRATCH_LENGTH 0x1000 | ||
110 | |||
111 | #define GET_PDA_SAFE(preg) \ | ||
112 | preg.l = _cpu_pda; \ | ||
113 | preg.h = _cpu_pda; | ||
114 | |||
115 | #define GET_PDA(preg, dreg) GET_PDA_SAFE(preg) | ||
116 | |||
117 | #endif/* _MEM_MAP_548_H_ */ | ||
diff --git a/arch/blackfin/mach-bf561/boards/ezkit.c b/arch/blackfin/mach-bf561/boards/ezkit.c index b5ef7ff7b7bd..4df904f9e90a 100644 --- a/arch/blackfin/mach-bf561/boards/ezkit.c +++ b/arch/blackfin/mach-bf561/boards/ezkit.c | |||
@@ -62,7 +62,6 @@ static struct resource bfin_isp1760_resources[] = { | |||
62 | 62 | ||
63 | static struct isp1760_platform_data isp1760_priv = { | 63 | static struct isp1760_platform_data isp1760_priv = { |
64 | .is_isp1761 = 0, | 64 | .is_isp1761 = 0, |
65 | .port1_disable = 0, | ||
66 | .bus_width_16 = 1, | 65 | .bus_width_16 = 1, |
67 | .port1_otg = 0, | 66 | .port1_otg = 0, |
68 | .analog_oc = 0, | 67 | .analog_oc = 0, |
diff --git a/arch/blackfin/mach-bf561/include/mach/anomaly.h b/arch/blackfin/mach-bf561/include/mach/anomaly.h index dccd396cd931..94b8e277f09d 100644 --- a/arch/blackfin/mach-bf561/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf561/include/mach/anomaly.h | |||
@@ -18,19 +18,19 @@ | |||
18 | # error will not work on BF561 silicon version 0.0, 0.1, 0.2, or 0.4 | 18 | # error will not work on BF561 silicon version 0.0, 0.1, 0.2, or 0.4 |
19 | #endif | 19 | #endif |
20 | 20 | ||
21 | /* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */ | 21 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
22 | #define ANOMALY_05000074 (1) | 22 | #define ANOMALY_05000074 (1) |
23 | /* UART Line Status Register (UART_LSR) Bits Are Not Updated at the Same Time */ | 23 | /* UART Line Status Register (UART_LSR) Bits Are Not Updated at the Same Time */ |
24 | #define ANOMALY_05000099 (__SILICON_REVISION__ < 5) | 24 | #define ANOMALY_05000099 (__SILICON_REVISION__ < 5) |
25 | /* Trace Buffers may record discontinuities into emulation mode and/or exception, NMI, reset handlers */ | 25 | /* Trace Buffers May Contain Errors in Emulation Mode and/or Exception, NMI, Reset Handlers */ |
26 | #define ANOMALY_05000116 (__SILICON_REVISION__ < 3) | 26 | #define ANOMALY_05000116 (__SILICON_REVISION__ < 3) |
27 | /* Testset instructions restricted to 32-bit aligned memory locations */ | 27 | /* TESTSET Instructions Restricted to 32-Bit Aligned Memory Locations */ |
28 | #define ANOMALY_05000120 (1) | 28 | #define ANOMALY_05000120 (1) |
29 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ | 29 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ |
30 | #define ANOMALY_05000122 (1) | 30 | #define ANOMALY_05000122 (1) |
31 | /* Erroneous exception when enabling cache */ | 31 | /* Erroneous Exception when Enabling Cache */ |
32 | #define ANOMALY_05000125 (__SILICON_REVISION__ < 3) | 32 | #define ANOMALY_05000125 (__SILICON_REVISION__ < 3) |
33 | /* Signbits instruction not functional under certain conditions */ | 33 | /* SIGNBITS Instruction Not Functional under Certain Conditions */ |
34 | #define ANOMALY_05000127 (1) | 34 | #define ANOMALY_05000127 (1) |
35 | /* Two bits in the Watchpoint Status Register (WPSTAT) are swapped */ | 35 | /* Two bits in the Watchpoint Status Register (WPSTAT) are swapped */ |
36 | #define ANOMALY_05000134 (__SILICON_REVISION__ < 3) | 36 | #define ANOMALY_05000134 (__SILICON_REVISION__ < 3) |
@@ -40,7 +40,7 @@ | |||
40 | #define ANOMALY_05000136 (__SILICON_REVISION__ < 3) | 40 | #define ANOMALY_05000136 (__SILICON_REVISION__ < 3) |
41 | /* Allowing the SPORT RX FIFO to fill will cause an overflow */ | 41 | /* Allowing the SPORT RX FIFO to fill will cause an overflow */ |
42 | #define ANOMALY_05000140 (__SILICON_REVISION__ < 3) | 42 | #define ANOMALY_05000140 (__SILICON_REVISION__ < 3) |
43 | /* An Infinite Stall occurs with a particular sequence of consecutive dual dag events */ | 43 | /* Infinite Stall may occur with a particular sequence of consecutive dual dag events */ |
44 | #define ANOMALY_05000141 (__SILICON_REVISION__ < 3) | 44 | #define ANOMALY_05000141 (__SILICON_REVISION__ < 3) |
45 | /* Interrupts may be lost when a programmable input flag is configured to be edge sensitive */ | 45 | /* Interrupts may be lost when a programmable input flag is configured to be edge sensitive */ |
46 | #define ANOMALY_05000142 (__SILICON_REVISION__ < 3) | 46 | #define ANOMALY_05000142 (__SILICON_REVISION__ < 3) |
@@ -52,7 +52,7 @@ | |||
52 | #define ANOMALY_05000146 (__SILICON_REVISION__ < 3) | 52 | #define ANOMALY_05000146 (__SILICON_REVISION__ < 3) |
53 | /* Source MDMA descriptor may stop with a DMA Error near beginning of descriptor fetch */ | 53 | /* Source MDMA descriptor may stop with a DMA Error near beginning of descriptor fetch */ |
54 | #define ANOMALY_05000147 (__SILICON_REVISION__ < 3) | 54 | #define ANOMALY_05000147 (__SILICON_REVISION__ < 3) |
55 | /* IMDMA S1/D1 channel may stall */ | 55 | /* IMDMA S1/D1 Channel May Stall */ |
56 | #define ANOMALY_05000149 (1) | 56 | #define ANOMALY_05000149 (1) |
57 | /* DMA engine may lose data due to incorrect handshaking */ | 57 | /* DMA engine may lose data due to incorrect handshaking */ |
58 | #define ANOMALY_05000150 (__SILICON_REVISION__ < 3) | 58 | #define ANOMALY_05000150 (__SILICON_REVISION__ < 3) |
@@ -66,7 +66,7 @@ | |||
66 | #define ANOMALY_05000154 (__SILICON_REVISION__ < 3) | 66 | #define ANOMALY_05000154 (__SILICON_REVISION__ < 3) |
67 | /* Timers in PWM-Out Mode with PPI GP Receive (Input) Mode with 0 Frame Syncs */ | 67 | /* Timers in PWM-Out Mode with PPI GP Receive (Input) Mode with 0 Frame Syncs */ |
68 | #define ANOMALY_05000156 (__SILICON_REVISION__ < 4) | 68 | #define ANOMALY_05000156 (__SILICON_REVISION__ < 4) |
69 | /* Killed 32-bit MMR write leads to next system MMR access thinking it should be 32-bit */ | 69 | /* Killed 32-Bit MMR Write Leads to Next System MMR Access Thinking It Should Be 32-Bit */ |
70 | #define ANOMALY_05000157 (__SILICON_REVISION__ < 3) | 70 | #define ANOMALY_05000157 (__SILICON_REVISION__ < 3) |
71 | /* DMA Lock-up at CCLK to SCLK ratios of 4:1, 2:1, or 1:1 */ | 71 | /* DMA Lock-up at CCLK to SCLK ratios of 4:1, 2:1, or 1:1 */ |
72 | #define ANOMALY_05000159 (__SILICON_REVISION__ < 3) | 72 | #define ANOMALY_05000159 (__SILICON_REVISION__ < 3) |
@@ -76,17 +76,17 @@ | |||
76 | #define ANOMALY_05000161 (__SILICON_REVISION__ < 3) | 76 | #define ANOMALY_05000161 (__SILICON_REVISION__ < 3) |
77 | /* DMEM_CONTROL<12> is not set on Reset */ | 77 | /* DMEM_CONTROL<12> is not set on Reset */ |
78 | #define ANOMALY_05000162 (__SILICON_REVISION__ < 3) | 78 | #define ANOMALY_05000162 (__SILICON_REVISION__ < 3) |
79 | /* SPORT transmit data is not gated by external frame sync in certain conditions */ | 79 | /* SPORT Transmit Data Is Not Gated by External Frame Sync in Certain Conditions */ |
80 | #define ANOMALY_05000163 (__SILICON_REVISION__ < 3) | 80 | #define ANOMALY_05000163 (__SILICON_REVISION__ < 3) |
81 | /* PPI Data Lengths Between 8 and 16 Do Not Zero Out Upper Bits */ | 81 | /* PPI Data Lengths between 8 and 16 Do Not Zero Out Upper Bits */ |
82 | #define ANOMALY_05000166 (1) | 82 | #define ANOMALY_05000166 (1) |
83 | /* Turning SPORTs on while External Frame Sync Is Active May Corrupt Data */ | 83 | /* Turning SPORTs on while External Frame Sync Is Active May Corrupt Data */ |
84 | #define ANOMALY_05000167 (1) | 84 | #define ANOMALY_05000167 (1) |
85 | /* SDRAM auto-refresh and subsequent Power Ups */ | 85 | /* Undefined Behavior when Power-Up Sequence Is Issued to SDRAM during Auto-Refresh */ |
86 | #define ANOMALY_05000168 (__SILICON_REVISION__ < 5) | 86 | #define ANOMALY_05000168 (__SILICON_REVISION__ < 5) |
87 | /* DATA CPLB page miss can result in lost write-through cache data writes */ | 87 | /* DATA CPLB Page Miss Can Result in Lost Write-Through Data Cache Writes */ |
88 | #define ANOMALY_05000169 (__SILICON_REVISION__ < 5) | 88 | #define ANOMALY_05000169 (__SILICON_REVISION__ < 5) |
89 | /* Boot-ROM code modifies SICA_IWRx wakeup registers */ | 89 | /* Boot-ROM Modifies SICA_IWRx Wakeup Registers */ |
90 | #define ANOMALY_05000171 (__SILICON_REVISION__ < 5) | 90 | #define ANOMALY_05000171 (__SILICON_REVISION__ < 5) |
91 | /* DSPID register values incorrect */ | 91 | /* DSPID register values incorrect */ |
92 | #define ANOMALY_05000172 (__SILICON_REVISION__ < 3) | 92 | #define ANOMALY_05000172 (__SILICON_REVISION__ < 3) |
@@ -96,29 +96,29 @@ | |||
96 | #define ANOMALY_05000174 (__SILICON_REVISION__ < 5) | 96 | #define ANOMALY_05000174 (__SILICON_REVISION__ < 5) |
97 | /* Overlapping Sequencer and Memory Stalls */ | 97 | /* Overlapping Sequencer and Memory Stalls */ |
98 | #define ANOMALY_05000175 (__SILICON_REVISION__ < 5) | 98 | #define ANOMALY_05000175 (__SILICON_REVISION__ < 5) |
99 | /* Multiplication of (-1) by (-1) followed by an accumulator saturation */ | 99 | /* Overflow Bit Asserted when Multiplication of -1 by -1 Followed by Accumulator Saturation */ |
100 | #define ANOMALY_05000176 (__SILICON_REVISION__ < 5) | 100 | #define ANOMALY_05000176 (__SILICON_REVISION__ < 5) |
101 | /* PPI_COUNT Cannot Be Programmed to 0 in General Purpose TX or RX Modes */ | 101 | /* PPI_COUNT Cannot Be Programmed to 0 in General Purpose TX or RX Modes */ |
102 | #define ANOMALY_05000179 (__SILICON_REVISION__ < 5) | 102 | #define ANOMALY_05000179 (__SILICON_REVISION__ < 5) |
103 | /* PPI_DELAY Not Functional in PPI Modes with 0 Frame Syncs */ | 103 | /* PPI_DELAY Not Functional in PPI Modes with 0 Frame Syncs */ |
104 | #define ANOMALY_05000180 (1) | 104 | #define ANOMALY_05000180 (1) |
105 | /* Disabling the PPI resets the PPI configuration registers */ | 105 | /* Disabling the PPI Resets the PPI Configuration Registers */ |
106 | #define ANOMALY_05000181 (__SILICON_REVISION__ < 5) | 106 | #define ANOMALY_05000181 (__SILICON_REVISION__ < 5) |
107 | /* IMDMA does not operate to full speed for 600MHz and higher devices */ | 107 | /* Internal Memory DMA Does Not Operate at Full Speed */ |
108 | #define ANOMALY_05000182 (1) | 108 | #define ANOMALY_05000182 (1) |
109 | /* Timer Pin limitations for PPI TX Modes with External Frame Syncs */ | 109 | /* Timer Pin Limitations for PPI TX Modes with External Frame Syncs */ |
110 | #define ANOMALY_05000184 (__SILICON_REVISION__ < 5) | 110 | #define ANOMALY_05000184 (__SILICON_REVISION__ < 5) |
111 | /* PPI TX Mode with 2 External Frame Syncs */ | 111 | /* Early PPI Transmit when FS1 Asserts before FS2 in TX Mode with 2 External Frame Syncs */ |
112 | #define ANOMALY_05000185 (__SILICON_REVISION__ < 5) | 112 | #define ANOMALY_05000185 (__SILICON_REVISION__ < 5) |
113 | /* PPI packing with Data Length greater than 8 bits (not a meaningful mode) */ | 113 | /* Upper PPI Pins Driven when PPI Packing Enabled and Data Length >8 Bits */ |
114 | #define ANOMALY_05000186 (__SILICON_REVISION__ < 5) | 114 | #define ANOMALY_05000186 (__SILICON_REVISION__ < 5) |
115 | /* IMDMA Corrupted Data after a Halt */ | 115 | /* IMDMA Corrupted Data after a Halt */ |
116 | #define ANOMALY_05000187 (1) | 116 | #define ANOMALY_05000187 (1) |
117 | /* IMDMA Restrictions on Descriptor and Buffer Placement in Memory */ | 117 | /* IMDMA Restrictions on Descriptor and Buffer Placement in Memory */ |
118 | #define ANOMALY_05000188 (__SILICON_REVISION__ < 5) | 118 | #define ANOMALY_05000188 (__SILICON_REVISION__ < 5) |
119 | /* False Protection Exceptions */ | 119 | /* False Protection Exceptions when Speculative Fetch Is Cancelled */ |
120 | #define ANOMALY_05000189 (__SILICON_REVISION__ < 5) | 120 | #define ANOMALY_05000189 (__SILICON_REVISION__ < 5) |
121 | /* PPI not functional at core voltage < 1Volt */ | 121 | /* PPI Not Functional at Core Voltage < 1Volt */ |
122 | #define ANOMALY_05000190 (1) | 122 | #define ANOMALY_05000190 (1) |
123 | /* PPI does not invert the Driving PPICLK edge in Transmit Modes */ | 123 | /* PPI does not invert the Driving PPICLK edge in Transmit Modes */ |
124 | #define ANOMALY_05000191 (__SILICON_REVISION__ < 3) | 124 | #define ANOMALY_05000191 (__SILICON_REVISION__ < 3) |
@@ -126,7 +126,7 @@ | |||
126 | #define ANOMALY_05000193 (__SILICON_REVISION__ < 5) | 126 | #define ANOMALY_05000193 (__SILICON_REVISION__ < 5) |
127 | /* Restarting SPORT in Specific Modes May Cause Data Corruption */ | 127 | /* Restarting SPORT in Specific Modes May Cause Data Corruption */ |
128 | #define ANOMALY_05000194 (__SILICON_REVISION__ < 5) | 128 | #define ANOMALY_05000194 (__SILICON_REVISION__ < 5) |
129 | /* Failing MMR Accesses When Stalled by Preceding Memory Read */ | 129 | /* Failing MMR Accesses when Preceding Memory Read Stalls */ |
130 | #define ANOMALY_05000198 (__SILICON_REVISION__ < 5) | 130 | #define ANOMALY_05000198 (__SILICON_REVISION__ < 5) |
131 | /* Current DMA Address Shows Wrong Value During Carry Fix */ | 131 | /* Current DMA Address Shows Wrong Value During Carry Fix */ |
132 | #define ANOMALY_05000199 (__SILICON_REVISION__ < 5) | 132 | #define ANOMALY_05000199 (__SILICON_REVISION__ < 5) |
@@ -134,9 +134,9 @@ | |||
134 | #define ANOMALY_05000200 (__SILICON_REVISION__ < 5) | 134 | #define ANOMALY_05000200 (__SILICON_REVISION__ < 5) |
135 | /* Possible Infinite Stall with Specific Dual-DAG Situation */ | 135 | /* Possible Infinite Stall with Specific Dual-DAG Situation */ |
136 | #define ANOMALY_05000202 (__SILICON_REVISION__ < 5) | 136 | #define ANOMALY_05000202 (__SILICON_REVISION__ < 5) |
137 | /* Incorrect data read with write-through cache and allocate cache lines on reads only mode */ | 137 | /* Incorrect Data Read with Writethrough "Allocate Cache Lines on Reads Only" Cache Mode */ |
138 | #define ANOMALY_05000204 (__SILICON_REVISION__ < 5) | 138 | #define ANOMALY_05000204 (__SILICON_REVISION__ < 5) |
139 | /* Specific sequence that can cause DMA error or DMA stopping */ | 139 | /* Specific Sequence that Can Cause DMA Error or DMA Stopping */ |
140 | #define ANOMALY_05000205 (__SILICON_REVISION__ < 5) | 140 | #define ANOMALY_05000205 (__SILICON_REVISION__ < 5) |
141 | /* Recovery from "Brown-Out" Condition */ | 141 | /* Recovery from "Brown-Out" Condition */ |
142 | #define ANOMALY_05000207 (__SILICON_REVISION__ < 5) | 142 | #define ANOMALY_05000207 (__SILICON_REVISION__ < 5) |
@@ -158,7 +158,7 @@ | |||
158 | #define ANOMALY_05000230 (__SILICON_REVISION__ < 5) | 158 | #define ANOMALY_05000230 (__SILICON_REVISION__ < 5) |
159 | /* UART STB Bit Incorrectly Affects Receiver Setting */ | 159 | /* UART STB Bit Incorrectly Affects Receiver Setting */ |
160 | #define ANOMALY_05000231 (__SILICON_REVISION__ < 5) | 160 | #define ANOMALY_05000231 (__SILICON_REVISION__ < 5) |
161 | /* SPORT data transmit lines are incorrectly driven in multichannel mode */ | 161 | /* SPORT Data Transmit Lines Are Incorrectly Driven in Multichannel Mode */ |
162 | #define ANOMALY_05000232 (__SILICON_REVISION__ < 5) | 162 | #define ANOMALY_05000232 (__SILICON_REVISION__ < 5) |
163 | /* DF Bit in PLL_CTL Register Does Not Respond to Hardware Reset */ | 163 | /* DF Bit in PLL_CTL Register Does Not Respond to Hardware Reset */ |
164 | #define ANOMALY_05000242 (__SILICON_REVISION__ < 5) | 164 | #define ANOMALY_05000242 (__SILICON_REVISION__ < 5) |
@@ -166,7 +166,7 @@ | |||
166 | #define ANOMALY_05000244 (__SILICON_REVISION__ < 5) | 166 | #define ANOMALY_05000244 (__SILICON_REVISION__ < 5) |
167 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ | 167 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ |
168 | #define ANOMALY_05000245 (__SILICON_REVISION__ < 5) | 168 | #define ANOMALY_05000245 (__SILICON_REVISION__ < 5) |
169 | /* TESTSET operation forces stall on the other core */ | 169 | /* TESTSET Operation Forces Stall on the Other Core */ |
170 | #define ANOMALY_05000248 (__SILICON_REVISION__ < 5) | 170 | #define ANOMALY_05000248 (__SILICON_REVISION__ < 5) |
171 | /* Incorrect Bit Shift of Data Word in Multichannel (TDM) Mode in Certain Conditions */ | 171 | /* Incorrect Bit Shift of Data Word in Multichannel (TDM) Mode in Certain Conditions */ |
172 | #define ANOMALY_05000250 (__SILICON_REVISION__ > 2 && __SILICON_REVISION__ < 5) | 172 | #define ANOMALY_05000250 (__SILICON_REVISION__ > 2 && __SILICON_REVISION__ < 5) |
@@ -192,9 +192,9 @@ | |||
192 | #define ANOMALY_05000264 (__SILICON_REVISION__ < 5) | 192 | #define ANOMALY_05000264 (__SILICON_REVISION__ < 5) |
193 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ | 193 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ |
194 | #define ANOMALY_05000265 (__SILICON_REVISION__ < 5) | 194 | #define ANOMALY_05000265 (__SILICON_REVISION__ < 5) |
195 | /* IMDMA destination IRQ status must be read prior to using IMDMA */ | 195 | /* IMDMA Destination IRQ Status Must Be Read Prior to Using IMDMA */ |
196 | #define ANOMALY_05000266 (__SILICON_REVISION__ > 3) | 196 | #define ANOMALY_05000266 (__SILICON_REVISION__ > 3) |
197 | /* IMDMA may corrupt data under certain conditions */ | 197 | /* IMDMA May Corrupt Data under Certain Conditions */ |
198 | #define ANOMALY_05000267 (1) | 198 | #define ANOMALY_05000267 (1) |
199 | /* High I/O Activity Causes Output Voltage of Internal Voltage Regulator (Vddint) to Increase */ | 199 | /* High I/O Activity Causes Output Voltage of Internal Voltage Regulator (Vddint) to Increase */ |
200 | #define ANOMALY_05000269 (1) | 200 | #define ANOMALY_05000269 (1) |
@@ -202,7 +202,7 @@ | |||
202 | #define ANOMALY_05000270 (1) | 202 | #define ANOMALY_05000270 (1) |
203 | /* Certain Data Cache Writethrough Modes Fail for Vddint <= 0.9V */ | 203 | /* Certain Data Cache Writethrough Modes Fail for Vddint <= 0.9V */ |
204 | #define ANOMALY_05000272 (1) | 204 | #define ANOMALY_05000272 (1) |
205 | /* Data cache write back to external synchronous memory may be lost */ | 205 | /* Data Cache Write Back to External Synchronous Memory May Be Lost */ |
206 | #define ANOMALY_05000274 (1) | 206 | #define ANOMALY_05000274 (1) |
207 | /* PPI Timing and Sampling Information Updates */ | 207 | /* PPI Timing and Sampling Information Updates */ |
208 | #define ANOMALY_05000275 (__SILICON_REVISION__ > 2) | 208 | #define ANOMALY_05000275 (__SILICON_REVISION__ > 2) |
@@ -212,17 +212,17 @@ | |||
212 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 3) | 212 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 3) |
213 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ | 213 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ |
214 | #define ANOMALY_05000278 (__SILICON_REVISION__ < 5) | 214 | #define ANOMALY_05000278 (__SILICON_REVISION__ < 5) |
215 | /* False Hardware Error Exception When ISR Context Is Not Restored */ | 215 | /* False Hardware Error Exception when ISR Context Is Not Restored */ |
216 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 5) | 216 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 5) |
217 | /* System MMR Write Is Stalled Indefinitely When Killed in a Particular Stage */ | 217 | /* System MMR Write Is Stalled Indefinitely when Killed in a Particular Stage */ |
218 | #define ANOMALY_05000283 (1) | 218 | #define ANOMALY_05000283 (1) |
219 | /* A read will receive incorrect data under certain conditions */ | 219 | /* Reads Will Receive Incorrect Data under Certain Conditions */ |
220 | #define ANOMALY_05000287 (__SILICON_REVISION__ < 5) | 220 | #define ANOMALY_05000287 (__SILICON_REVISION__ < 5) |
221 | /* SPORTs May Receive Bad Data If FIFOs Fill Up */ | 221 | /* SPORTs May Receive Bad Data If FIFOs Fill Up */ |
222 | #define ANOMALY_05000288 (__SILICON_REVISION__ < 5) | 222 | #define ANOMALY_05000288 (__SILICON_REVISION__ < 5) |
223 | /* Memory-To-Memory DMA Source/Destination Descriptors Must Be in Same Memory Space */ | 223 | /* Memory-To-Memory DMA Source/Destination Descriptors Must Be in Same Memory Space */ |
224 | #define ANOMALY_05000301 (1) | 224 | #define ANOMALY_05000301 (1) |
225 | /* SSYNCs After Writes To DMA MMR Registers May Not Be Handled Correctly */ | 225 | /* SSYNCs after Writes to DMA MMR Registers May Not Be Handled Correctly */ |
226 | #define ANOMALY_05000302 (1) | 226 | #define ANOMALY_05000302 (1) |
227 | /* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */ | 227 | /* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */ |
228 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 5) | 228 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 5) |
@@ -230,25 +230,25 @@ | |||
230 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 5) | 230 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 5) |
231 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ | 231 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ |
232 | #define ANOMALY_05000310 (1) | 232 | #define ANOMALY_05000310 (1) |
233 | /* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ | 233 | /* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ |
234 | #define ANOMALY_05000312 (1) | 234 | #define ANOMALY_05000312 (1) |
235 | /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */ | 235 | /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */ |
236 | #define ANOMALY_05000313 (1) | 236 | #define ANOMALY_05000313 (1) |
237 | /* Killed System MMR Write Completes Erroneously On Next System MMR Access */ | 237 | /* Killed System MMR Write Completes Erroneously on Next System MMR Access */ |
238 | #define ANOMALY_05000315 (1) | 238 | #define ANOMALY_05000315 (1) |
239 | /* PF2 Output Remains Asserted After SPI Master Boot */ | 239 | /* PF2 Output Remains Asserted after SPI Master Boot */ |
240 | #define ANOMALY_05000320 (__SILICON_REVISION__ > 3) | 240 | #define ANOMALY_05000320 (__SILICON_REVISION__ > 3) |
241 | /* Erroneous GPIO Flag Pin Operations Under Specific Sequences */ | 241 | /* Erroneous GPIO Flag Pin Operations under Specific Sequences */ |
242 | #define ANOMALY_05000323 (1) | 242 | #define ANOMALY_05000323 (1) |
243 | /* SPORT Secondary Receive Channel Not Functional When Word Length Exceeds 16 Bits */ | 243 | /* SPORT Secondary Receive Channel Not Functional when Word Length >16 Bits */ |
244 | #define ANOMALY_05000326 (__SILICON_REVISION__ > 3) | 244 | #define ANOMALY_05000326 (__SILICON_REVISION__ > 3) |
245 | /* New Feature: 24-Bit SPI Boot Mode Support (Not Available On Older Silicon) */ | 245 | /* 24-Bit SPI Boot Mode Is Not Functional */ |
246 | #define ANOMALY_05000331 (__SILICON_REVISION__ < 5) | 246 | #define ANOMALY_05000331 (__SILICON_REVISION__ < 5) |
247 | /* New Feature: Slave SPI Boot Mode Supported (Not Available On Older Silicon) */ | 247 | /* Slave SPI Boot Mode Is Not Functional */ |
248 | #define ANOMALY_05000332 (__SILICON_REVISION__ < 5) | 248 | #define ANOMALY_05000332 (__SILICON_REVISION__ < 5) |
249 | /* Flag Data Register Writes One SCLK Cycle After Edge Is Detected May Clear Interrupt Status */ | 249 | /* Flag Data Register Writes One SCLK Cycle after Edge Is Detected May Clear Interrupt Status */ |
250 | #define ANOMALY_05000333 (__SILICON_REVISION__ < 5) | 250 | #define ANOMALY_05000333 (__SILICON_REVISION__ < 5) |
251 | /* New Feature: Additional PPI Frame Sync Sampling Options (Not Available on Older Silicon) */ | 251 | /* ALT_TIMING Bit in PLL_CTL Register Is Not Functional */ |
252 | #define ANOMALY_05000339 (__SILICON_REVISION__ < 5) | 252 | #define ANOMALY_05000339 (__SILICON_REVISION__ < 5) |
253 | /* Memory DMA FIFO Causes Throughput Degradation on Writes to External Memory */ | 253 | /* Memory DMA FIFO Causes Throughput Degradation on Writes to External Memory */ |
254 | #define ANOMALY_05000343 (__SILICON_REVISION__ < 5) | 254 | #define ANOMALY_05000343 (__SILICON_REVISION__ < 5) |
@@ -276,7 +276,7 @@ | |||
276 | #define ANOMALY_05000428 (__SILICON_REVISION__ > 3) | 276 | #define ANOMALY_05000428 (__SILICON_REVISION__ > 3) |
277 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ | 277 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ |
278 | #define ANOMALY_05000443 (1) | 278 | #define ANOMALY_05000443 (1) |
279 | /* False Hardware Error when RETI points to invalid memory */ | 279 | /* False Hardware Error when RETI Points to Invalid Memory */ |
280 | #define ANOMALY_05000461 (1) | 280 | #define ANOMALY_05000461 (1) |
281 | 281 | ||
282 | /* Anomalies that don't exist on this proc */ | 282 | /* Anomalies that don't exist on this proc */ |
@@ -284,6 +284,7 @@ | |||
284 | #define ANOMALY_05000158 (0) | 284 | #define ANOMALY_05000158 (0) |
285 | #define ANOMALY_05000183 (0) | 285 | #define ANOMALY_05000183 (0) |
286 | #define ANOMALY_05000233 (0) | 286 | #define ANOMALY_05000233 (0) |
287 | #define ANOMALY_05000234 (0) | ||
287 | #define ANOMALY_05000273 (0) | 288 | #define ANOMALY_05000273 (0) |
288 | #define ANOMALY_05000311 (0) | 289 | #define ANOMALY_05000311 (0) |
289 | #define ANOMALY_05000353 (1) | 290 | #define ANOMALY_05000353 (1) |
@@ -298,5 +299,7 @@ | |||
298 | #define ANOMALY_05000448 (0) | 299 | #define ANOMALY_05000448 (0) |
299 | #define ANOMALY_05000456 (0) | 300 | #define ANOMALY_05000456 (0) |
300 | #define ANOMALY_05000450 (0) | 301 | #define ANOMALY_05000450 (0) |
302 | #define ANOMALY_05000465 (0) | ||
303 | #define ANOMALY_05000467 (0) | ||
301 | 304 | ||
302 | #endif | 305 | #endif |
diff --git a/arch/blackfin/mach-bf561/include/mach/blackfin.h b/arch/blackfin/mach-bf561/include/mach/blackfin.h index f79f6626b7ec..8be31358ef88 100644 --- a/arch/blackfin/mach-bf561/include/mach/blackfin.h +++ b/arch/blackfin/mach-bf561/include/mach/blackfin.h | |||
@@ -34,7 +34,6 @@ | |||
34 | #define BF561_FAMILY | 34 | #define BF561_FAMILY |
35 | 35 | ||
36 | #include "bf561.h" | 36 | #include "bf561.h" |
37 | #include "mem_map.h" | ||
38 | #include "defBF561.h" | 37 | #include "defBF561.h" |
39 | #include "anomaly.h" | 38 | #include "anomaly.h" |
40 | 39 | ||
diff --git a/arch/blackfin/mach-bf561/include/mach/mem_map.h b/arch/blackfin/mach-bf561/include/mach/mem_map.h index 419dffdc96eb..a63e15c86d90 100644 --- a/arch/blackfin/mach-bf561/include/mach/mem_map.h +++ b/arch/blackfin/mach-bf561/include/mach/mem_map.h | |||
@@ -1,13 +1,16 @@ | |||
1 | /* | 1 | /* |
2 | * Memory MAP | 2 | * BF561 memory map |
3 | * Common header file for blackfin BF561 of processors. | 3 | * |
4 | * Copyright 2004-2009 Analog Devices Inc. | ||
5 | * Licensed under the GPL-2 or later. | ||
4 | */ | 6 | */ |
5 | 7 | ||
6 | #ifndef _MEM_MAP_561_H_ | 8 | #ifndef __BFIN_MACH_MEM_MAP_H__ |
7 | #define _MEM_MAP_561_H_ | 9 | #define __BFIN_MACH_MEM_MAP_H__ |
8 | 10 | ||
9 | #define COREMMR_BASE 0xFFE00000 /* Core MMRs */ | 11 | #ifndef __BFIN_MEM_MAP_H__ |
10 | #define SYSMMR_BASE 0xFFC00000 /* System MMRs */ | 12 | # error "do not include mach/mem_map.h directly -- use asm/mem_map.h" |
13 | #endif | ||
11 | 14 | ||
12 | /* Async Memory Banks */ | 15 | /* Async Memory Banks */ |
13 | #define ASYNC_BANK3_BASE 0x2C000000 /* Async Bank 3 */ | 16 | #define ASYNC_BANK3_BASE 0x2C000000 /* Async Bank 3 */ |
@@ -82,9 +85,6 @@ | |||
82 | #define COREA_L1_SCRATCH_START 0xFFB00000 | 85 | #define COREA_L1_SCRATCH_START 0xFFB00000 |
83 | #define COREB_L1_SCRATCH_START 0xFF700000 | 86 | #define COREB_L1_SCRATCH_START 0xFF700000 |
84 | 87 | ||
85 | #define L1_SCRATCH_START COREA_L1_SCRATCH_START | ||
86 | #define L1_SCRATCH_LENGTH 0x1000 | ||
87 | |||
88 | #ifdef __ASSEMBLY__ | 88 | #ifdef __ASSEMBLY__ |
89 | 89 | ||
90 | /* | 90 | /* |
@@ -155,14 +155,42 @@ | |||
155 | dreg = ROT dreg BY -1; \ | 155 | dreg = ROT dreg BY -1; \ |
156 | dreg = CC; | 156 | dreg = CC; |
157 | 157 | ||
158 | #else | 158 | static inline unsigned long get_l1_scratch_start_cpu(int cpu) |
159 | #define GET_PDA_SAFE(preg) \ | 159 | { |
160 | preg.l = _cpu_pda; \ | 160 | return cpu ? COREB_L1_SCRATCH_START : COREA_L1_SCRATCH_START; |
161 | preg.h = _cpu_pda; | 161 | } |
162 | static inline unsigned long get_l1_code_start_cpu(int cpu) | ||
163 | { | ||
164 | return cpu ? COREB_L1_CODE_START : COREA_L1_CODE_START; | ||
165 | } | ||
166 | static inline unsigned long get_l1_data_a_start_cpu(int cpu) | ||
167 | { | ||
168 | return cpu ? COREB_L1_DATA_A_START : COREA_L1_DATA_A_START; | ||
169 | } | ||
170 | static inline unsigned long get_l1_data_b_start_cpu(int cpu) | ||
171 | { | ||
172 | return cpu ? COREB_L1_DATA_B_START : COREA_L1_DATA_B_START; | ||
173 | } | ||
174 | |||
175 | static inline unsigned long get_l1_scratch_start(void) | ||
176 | { | ||
177 | return get_l1_scratch_start_cpu(blackfin_core_id()); | ||
178 | } | ||
179 | static inline unsigned long get_l1_code_start(void) | ||
180 | { | ||
181 | return get_l1_code_start_cpu(blackfin_core_id()); | ||
182 | } | ||
183 | static inline unsigned long get_l1_data_a_start(void) | ||
184 | { | ||
185 | return get_l1_data_a_start_cpu(blackfin_core_id()); | ||
186 | } | ||
187 | static inline unsigned long get_l1_data_b_start(void) | ||
188 | { | ||
189 | return get_l1_data_b_start_cpu(blackfin_core_id()); | ||
190 | } | ||
162 | 191 | ||
163 | #define GET_PDA(preg, dreg) GET_PDA_SAFE(preg) | ||
164 | #endif /* CONFIG_SMP */ | 192 | #endif /* CONFIG_SMP */ |
165 | 193 | ||
166 | #endif /* __ASSEMBLY__ */ | 194 | #endif /* __ASSEMBLY__ */ |
167 | 195 | ||
168 | #endif /* _MEM_MAP_533_H_ */ | 196 | #endif |
diff --git a/arch/blackfin/mach-common/arch_checks.c b/arch/blackfin/mach-common/arch_checks.c index da93d9207165..5998d8632a73 100644 --- a/arch/blackfin/mach-common/arch_checks.c +++ b/arch/blackfin/mach-common/arch_checks.c | |||
@@ -74,7 +74,7 @@ | |||
74 | 74 | ||
75 | /* if 220 exists, can not set External Memory WB and L2 not_cached, either External Memory not_cached and L2 WB */ | 75 | /* if 220 exists, can not set External Memory WB and L2 not_cached, either External Memory not_cached and L2 WB */ |
76 | #if ANOMALY_05000220 && \ | 76 | #if ANOMALY_05000220 && \ |
77 | ((defined(CONFIG_BFIN_WB) && defined(CONFIG_BFIN_L2_NOT_CACHED)) || \ | 77 | ((defined(CONFIG_BFIN_EXTMEM_WRITEBACK) && !defined(CONFIG_BFIN_L2_DCACHEABLE)) || \ |
78 | (!defined(CONFIG_BFIN_DCACHE) && defined(CONFIG_BFIN_L2_WB))) | 78 | (!defined(CONFIG_BFIN_EXTMEM_DCACHEABLE) && defined(CONFIG_BFIN_L2_WRITEBACK))) |
79 | # error You are exposing Anomaly 220 in this config, either config L2 as Write Through, or make External Memory WB. | 79 | # error You are exposing Anomaly 220 in this config, either config L2 as Write Through, or make External Memory WB. |
80 | #endif | 80 | #endif |
diff --git a/arch/blackfin/mach-common/cpufreq.c b/arch/blackfin/mach-common/cpufreq.c index 70e3411f558c..85c658083279 100644 --- a/arch/blackfin/mach-common/cpufreq.c +++ b/arch/blackfin/mach-common/cpufreq.c | |||
@@ -141,7 +141,7 @@ static int __init __bfin_cpu_init(struct cpufreq_policy *policy) | |||
141 | sclk = get_sclk() / 1000; | 141 | sclk = get_sclk() / 1000; |
142 | 142 | ||
143 | #if ANOMALY_05000273 || ANOMALY_05000274 || \ | 143 | #if ANOMALY_05000273 || ANOMALY_05000274 || \ |
144 | (!defined(CONFIG_BF54x) && defined(CONFIG_BFIN_DCACHE)) | 144 | (!defined(CONFIG_BF54x) && defined(CONFIG_BFIN_EXTMEM_DCACHEABLE)) |
145 | min_cclk = sclk * 2; | 145 | min_cclk = sclk * 2; |
146 | #else | 146 | #else |
147 | min_cclk = sclk; | 147 | min_cclk = sclk; |
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S index 31fa313e81cf..5a4e7c7fd92c 100644 --- a/arch/blackfin/mach-common/entry.S +++ b/arch/blackfin/mach-common/entry.S | |||
@@ -1609,6 +1609,7 @@ ENTRY(_sys_call_table) | |||
1609 | .long _sys_preadv | 1609 | .long _sys_preadv |
1610 | .long _sys_pwritev | 1610 | .long _sys_pwritev |
1611 | .long _sys_rt_tgsigqueueinfo | 1611 | .long _sys_rt_tgsigqueueinfo |
1612 | .long _sys_perf_counter_open | ||
1612 | 1613 | ||
1613 | .rept NR_syscalls-(.-_sys_call_table)/4 | 1614 | .rept NR_syscalls-(.-_sys_call_table)/4 |
1614 | .long _sys_ni_syscall | 1615 | .long _sys_ni_syscall |
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c index af70f09acd55..b42150190d0e 100644 --- a/arch/blackfin/mach-common/ints-priority.c +++ b/arch/blackfin/mach-common/ints-priority.c | |||
@@ -1052,35 +1052,34 @@ int __init init_arch_irq(void) | |||
1052 | set_irq_chained_handler(irq, bfin_demux_error_irq); | 1052 | set_irq_chained_handler(irq, bfin_demux_error_irq); |
1053 | break; | 1053 | break; |
1054 | #endif | 1054 | #endif |
1055 | #if defined(CONFIG_TICKSOURCE_GPTMR0) | ||
1056 | case IRQ_TIMER0: | ||
1057 | set_irq_handler(irq, handle_percpu_irq); | ||
1058 | break; | ||
1059 | #endif | ||
1060 | #ifdef CONFIG_SMP | 1055 | #ifdef CONFIG_SMP |
1061 | case IRQ_SUPPLE_0: | 1056 | case IRQ_SUPPLE_0: |
1062 | case IRQ_SUPPLE_1: | 1057 | case IRQ_SUPPLE_1: |
1063 | set_irq_handler(irq, handle_percpu_irq); | 1058 | set_irq_handler(irq, handle_percpu_irq); |
1064 | break; | 1059 | break; |
1065 | #endif | 1060 | #endif |
1066 | default: | ||
1067 | #ifdef CONFIG_IPIPE | 1061 | #ifdef CONFIG_IPIPE |
1068 | /* | 1062 | #ifndef CONFIG_TICKSOURCE_CORETMR |
1069 | * We want internal interrupt sources to be | 1063 | case IRQ_TIMER0: |
1070 | * masked, because ISRs may trigger interrupts | 1064 | set_irq_handler(irq, handle_simple_irq); |
1071 | * recursively (e.g. DMA), but interrupts are | 1065 | break; |
1072 | * _not_ masked at CPU level. So let's handle | 1066 | #endif /* !CONFIG_TICKSOURCE_CORETMR */ |
1073 | * most of them as level interrupts, except | 1067 | case IRQ_CORETMR: |
1074 | * the timer interrupt which is special. | 1068 | set_irq_handler(irq, handle_simple_irq); |
1075 | */ | 1069 | break; |
1076 | if (irq == IRQ_SYSTMR || irq == IRQ_CORETMR) | 1070 | default: |
1077 | set_irq_handler(irq, handle_simple_irq); | 1071 | set_irq_handler(irq, handle_level_irq); |
1078 | else | 1072 | break; |
1079 | set_irq_handler(irq, handle_level_irq); | ||
1080 | #else /* !CONFIG_IPIPE */ | 1073 | #else /* !CONFIG_IPIPE */ |
1074 | #ifdef CONFIG_TICKSOURCE_GPTMR0 | ||
1075 | case IRQ_TIMER0: | ||
1076 | set_irq_handler(irq, handle_percpu_irq); | ||
1077 | break; | ||
1078 | #endif /* CONFIG_TICKSOURCE_GPTMR0 */ | ||
1079 | default: | ||
1081 | set_irq_handler(irq, handle_simple_irq); | 1080 | set_irq_handler(irq, handle_simple_irq); |
1082 | #endif /* !CONFIG_IPIPE */ | ||
1083 | break; | 1081 | break; |
1082 | #endif /* !CONFIG_IPIPE */ | ||
1084 | } | 1083 | } |
1085 | } | 1084 | } |
1086 | 1085 | ||
@@ -1224,15 +1223,14 @@ __attribute__((l1_text)) | |||
1224 | asmlinkage int __ipipe_grab_irq(int vec, struct pt_regs *regs) | 1223 | asmlinkage int __ipipe_grab_irq(int vec, struct pt_regs *regs) |
1225 | { | 1224 | { |
1226 | struct ipipe_percpu_domain_data *p = ipipe_root_cpudom_ptr(); | 1225 | struct ipipe_percpu_domain_data *p = ipipe_root_cpudom_ptr(); |
1227 | struct ipipe_domain *this_domain = ipipe_current_domain; | 1226 | struct ipipe_domain *this_domain = __ipipe_current_domain; |
1228 | struct ivgx *ivg_stop = ivg7_13[vec-IVG7].istop; | 1227 | struct ivgx *ivg_stop = ivg7_13[vec-IVG7].istop; |
1229 | struct ivgx *ivg = ivg7_13[vec-IVG7].ifirst; | 1228 | struct ivgx *ivg = ivg7_13[vec-IVG7].ifirst; |
1230 | int irq, s; | 1229 | int irq, s; |
1231 | 1230 | ||
1232 | if (likely(vec == EVT_IVTMR_P)) { | 1231 | if (likely(vec == EVT_IVTMR_P)) |
1233 | irq = IRQ_CORETMR; | 1232 | irq = IRQ_CORETMR; |
1234 | 1233 | else { | |
1235 | } else { | ||
1236 | #if defined(SIC_ISR0) || defined(SICA_ISR0) | 1234 | #if defined(SIC_ISR0) || defined(SICA_ISR0) |
1237 | unsigned long sic_status[3]; | 1235 | unsigned long sic_status[3]; |
1238 | 1236 | ||
@@ -1262,12 +1260,11 @@ asmlinkage int __ipipe_grab_irq(int vec, struct pt_regs *regs) | |||
1262 | break; | 1260 | break; |
1263 | } | 1261 | } |
1264 | #endif | 1262 | #endif |
1265 | |||
1266 | irq = ivg->irqno; | 1263 | irq = ivg->irqno; |
1267 | } | 1264 | } |
1268 | 1265 | ||
1269 | if (irq == IRQ_SYSTMR) { | 1266 | if (irq == IRQ_SYSTMR) { |
1270 | #ifndef CONFIG_GENERIC_CLOCKEVENTS | 1267 | #if !defined(CONFIG_GENERIC_CLOCKEVENTS) || defined(CONFIG_TICKSOURCE_GPTMR0) |
1271 | bfin_write_TIMER_STATUS(1); /* Latch TIMIL0 */ | 1268 | bfin_write_TIMER_STATUS(1); /* Latch TIMIL0 */ |
1272 | #endif | 1269 | #endif |
1273 | /* This is basically what we need from the register frame. */ | 1270 | /* This is basically what we need from the register frame. */ |
diff --git a/arch/blackfin/mach-common/pm.c b/arch/blackfin/mach-common/pm.c index bce5a84be49f..9e7e27b7fc8d 100644 --- a/arch/blackfin/mach-common/pm.c +++ b/arch/blackfin/mach-common/pm.c | |||
@@ -132,7 +132,7 @@ int bf53x_resume_l1_mem(unsigned char *memptr) | |||
132 | return 0; | 132 | return 0; |
133 | } | 133 | } |
134 | 134 | ||
135 | #ifdef CONFIG_BFIN_WB | 135 | #if defined(CONFIG_BFIN_EXTMEM_WRITEBACK) || defined(CONFIG_BFIN_L2_WRITEBACK) |
136 | static void flushinv_all_dcache(void) | 136 | static void flushinv_all_dcache(void) |
137 | { | 137 | { |
138 | u32 way, bank, subbank, set; | 138 | u32 way, bank, subbank, set; |
@@ -175,7 +175,7 @@ static inline void dcache_disable(void) | |||
175 | #ifdef CONFIG_BFIN_DCACHE | 175 | #ifdef CONFIG_BFIN_DCACHE |
176 | unsigned long ctrl; | 176 | unsigned long ctrl; |
177 | 177 | ||
178 | #ifdef CONFIG_BFIN_WB | 178 | #if defined(CONFIG_BFIN_EXTMEM_WRITEBACK) || defined(CONFIG_BFIN_L2_WRITEBACK) |
179 | flushinv_all_dcache(); | 179 | flushinv_all_dcache(); |
180 | #endif | 180 | #endif |
181 | SSYNC(); | 181 | SSYNC(); |
diff --git a/arch/blackfin/mm/init.c b/arch/blackfin/mm/init.c index 014a55abd09a..68bd0bd680cd 100644 --- a/arch/blackfin/mm/init.c +++ b/arch/blackfin/mm/init.c | |||
@@ -160,7 +160,7 @@ void __init mem_init(void) | |||
160 | 160 | ||
161 | /* do not count in kernel image between _rambase and _ramstart */ | 161 | /* do not count in kernel image between _rambase and _ramstart */ |
162 | reservedpages -= (_ramstart - _rambase) >> PAGE_SHIFT; | 162 | reservedpages -= (_ramstart - _rambase) >> PAGE_SHIFT; |
163 | #if (defined(CONFIG_BFIN_ICACHE) && ANOMALY_05000263) | 163 | #if (defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) && ANOMALY_05000263) |
164 | reservedpages += (_ramend - memory_end - DMA_UNCACHED_REGION) >> PAGE_SHIFT; | 164 | reservedpages += (_ramend - memory_end - DMA_UNCACHED_REGION) >> PAGE_SHIFT; |
165 | #endif | 165 | #endif |
166 | 166 | ||
diff --git a/arch/cris/arch-v10/kernel/dma.c b/arch/cris/arch-v10/kernel/dma.c index 929e68666299..d31504b4a19e 100644 --- a/arch/cris/arch-v10/kernel/dma.c +++ b/arch/cris/arch-v10/kernel/dma.c | |||
@@ -24,7 +24,7 @@ int cris_request_dma(unsigned int dmanr, const char * device_id, | |||
24 | unsigned long int gens; | 24 | unsigned long int gens; |
25 | int fail = -EINVAL; | 25 | int fail = -EINVAL; |
26 | 26 | ||
27 | if ((dmanr < 0) || (dmanr >= MAX_DMA_CHANNELS)) { | 27 | if (dmanr >= MAX_DMA_CHANNELS) { |
28 | printk(KERN_CRIT "cris_request_dma: invalid DMA channel %u\n", dmanr); | 28 | printk(KERN_CRIT "cris_request_dma: invalid DMA channel %u\n", dmanr); |
29 | return -EINVAL; | 29 | return -EINVAL; |
30 | } | 30 | } |
@@ -213,7 +213,7 @@ int cris_request_dma(unsigned int dmanr, const char * device_id, | |||
213 | void cris_free_dma(unsigned int dmanr, const char * device_id) | 213 | void cris_free_dma(unsigned int dmanr, const char * device_id) |
214 | { | 214 | { |
215 | unsigned long flags; | 215 | unsigned long flags; |
216 | if ((dmanr < 0) || (dmanr >= MAX_DMA_CHANNELS)) { | 216 | if (dmanr >= MAX_DMA_CHANNELS) { |
217 | printk(KERN_CRIT "cris_free_dma: invalid DMA channel %u\n", dmanr); | 217 | printk(KERN_CRIT "cris_free_dma: invalid DMA channel %u\n", dmanr); |
218 | return; | 218 | return; |
219 | } | 219 | } |
diff --git a/arch/cris/arch-v32/drivers/cryptocop.c b/arch/cris/arch-v32/drivers/cryptocop.c index 67c61ea86813..fd529a0ec758 100644 --- a/arch/cris/arch-v32/drivers/cryptocop.c +++ b/arch/cris/arch-v32/drivers/cryptocop.c | |||
@@ -1395,7 +1395,7 @@ static int create_md5_pad(int alloc_flag, unsigned long long hashed_length, char | |||
1395 | if (padlen < MD5_MIN_PAD_LENGTH) padlen += MD5_BLOCK_LENGTH; | 1395 | if (padlen < MD5_MIN_PAD_LENGTH) padlen += MD5_BLOCK_LENGTH; |
1396 | 1396 | ||
1397 | p = kmalloc(padlen, alloc_flag); | 1397 | p = kmalloc(padlen, alloc_flag); |
1398 | if (!pad) return -ENOMEM; | 1398 | if (!p) return -ENOMEM; |
1399 | 1399 | ||
1400 | *p = 0x80; | 1400 | *p = 0x80; |
1401 | memset(p+1, 0, padlen - 1); | 1401 | memset(p+1, 0, padlen - 1); |
@@ -1427,7 +1427,7 @@ static int create_sha1_pad(int alloc_flag, unsigned long long hashed_length, cha | |||
1427 | if (padlen < SHA1_MIN_PAD_LENGTH) padlen += SHA1_BLOCK_LENGTH; | 1427 | if (padlen < SHA1_MIN_PAD_LENGTH) padlen += SHA1_BLOCK_LENGTH; |
1428 | 1428 | ||
1429 | p = kmalloc(padlen, alloc_flag); | 1429 | p = kmalloc(padlen, alloc_flag); |
1430 | if (!pad) return -ENOMEM; | 1430 | if (!p) return -ENOMEM; |
1431 | 1431 | ||
1432 | *p = 0x80; | 1432 | *p = 0x80; |
1433 | memset(p+1, 0, padlen - 1); | 1433 | memset(p+1, 0, padlen - 1); |
diff --git a/arch/cris/arch-v32/kernel/irq.c b/arch/cris/arch-v32/kernel/irq.c index d70b445f4a8f..57668db25031 100644 --- a/arch/cris/arch-v32/kernel/irq.c +++ b/arch/cris/arch-v32/kernel/irq.c | |||
@@ -430,8 +430,8 @@ crisv32_do_multiple(struct pt_regs* regs) | |||
430 | masked[i] &= ~TIMER_MASK; | 430 | masked[i] &= ~TIMER_MASK; |
431 | do_IRQ(TIMER0_INTR_VECT, regs); | 431 | do_IRQ(TIMER0_INTR_VECT, regs); |
432 | } | 432 | } |
433 | } | ||
434 | #endif | 433 | #endif |
434 | } | ||
435 | 435 | ||
436 | #ifdef IGNORE_MASK | 436 | #ifdef IGNORE_MASK |
437 | /* Remove IRQs that can't be handled as multiple. */ | 437 | /* Remove IRQs that can't be handled as multiple. */ |
diff --git a/arch/cris/arch-v32/lib/Makefile b/arch/cris/arch-v32/lib/Makefile index eb4aad1f1158..dd296b9db034 100644 --- a/arch/cris/arch-v32/lib/Makefile +++ b/arch/cris/arch-v32/lib/Makefile | |||
@@ -3,5 +3,5 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | lib-y = checksum.o checksumcopy.o string.o usercopy.o memset.o \ | 5 | lib-y = checksum.o checksumcopy.o string.o usercopy.o memset.o \ |
6 | csumcpfruser.o spinlock.o delay.o | 6 | csumcpfruser.o spinlock.o delay.o strcmp.o |
7 | 7 | ||
diff --git a/arch/cris/arch-v32/lib/strcmp.S b/arch/cris/arch-v32/lib/strcmp.S new file mode 100644 index 000000000000..8f7a1ee62591 --- /dev/null +++ b/arch/cris/arch-v32/lib/strcmp.S | |||
@@ -0,0 +1,21 @@ | |||
1 | ; strcmp.S -- CRISv32 version. | ||
2 | ; Copyright (C) 2008 AXIS Communications AB | ||
3 | ; Written by Edgar E. Iglesias | ||
4 | ; | ||
5 | ; This source code is licensed under the GNU General Public License, | ||
6 | ; Version 2. See the file COPYING for more details. | ||
7 | |||
8 | .global strcmp | ||
9 | .type strcmp,@function | ||
10 | strcmp: | ||
11 | 1: | ||
12 | move.b [$r10+], $r12 | ||
13 | seq $r13 | ||
14 | sub.b [$r11+], $r12 | ||
15 | or.b $r12, $r13 | ||
16 | beq 1b | ||
17 | nop | ||
18 | |||
19 | ret | ||
20 | movs.b $r12, $r10 | ||
21 | .size strcmp, . - strcmp | ||
diff --git a/arch/cris/include/arch-v32/arch/spinlock.h b/arch/cris/include/arch-v32/arch/spinlock.h index 129756b96661..367a53ea10c5 100644 --- a/arch/cris/include/arch-v32/arch/spinlock.h +++ b/arch/cris/include/arch-v32/arch/spinlock.h | |||
@@ -78,7 +78,7 @@ static inline void __raw_write_lock(raw_rwlock_t *rw) | |||
78 | { | 78 | { |
79 | __raw_spin_lock(&rw->slock); | 79 | __raw_spin_lock(&rw->slock); |
80 | while (rw->lock != RW_LOCK_BIAS); | 80 | while (rw->lock != RW_LOCK_BIAS); |
81 | rw->lock == 0; | 81 | rw->lock = 0; |
82 | __raw_spin_unlock(&rw->slock); | 82 | __raw_spin_unlock(&rw->slock); |
83 | } | 83 | } |
84 | 84 | ||
@@ -93,7 +93,7 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw) | |||
93 | { | 93 | { |
94 | __raw_spin_lock(&rw->slock); | 94 | __raw_spin_lock(&rw->slock); |
95 | while (rw->lock != RW_LOCK_BIAS); | 95 | while (rw->lock != RW_LOCK_BIAS); |
96 | rw->lock == RW_LOCK_BIAS; | 96 | rw->lock = RW_LOCK_BIAS; |
97 | __raw_spin_unlock(&rw->slock); | 97 | __raw_spin_unlock(&rw->slock); |
98 | } | 98 | } |
99 | 99 | ||
@@ -114,7 +114,7 @@ static inline int __raw_write_trylock(raw_rwlock_t *rw) | |||
114 | int ret = 0; | 114 | int ret = 0; |
115 | __raw_spin_lock(&rw->slock); | 115 | __raw_spin_lock(&rw->slock); |
116 | if (rw->lock == RW_LOCK_BIAS) { | 116 | if (rw->lock == RW_LOCK_BIAS) { |
117 | rw->lock == 0; | 117 | rw->lock = 0; |
118 | ret = 1; | 118 | ret = 1; |
119 | } | 119 | } |
120 | __raw_spin_unlock(&rw->slock); | 120 | __raw_spin_unlock(&rw->slock); |
diff --git a/arch/cris/include/asm/string.h b/arch/cris/include/asm/string.h index 691190e99a27..d5db39f9eea1 100644 --- a/arch/cris/include/asm/string.h +++ b/arch/cris/include/asm/string.h | |||
@@ -11,4 +11,10 @@ extern void *memcpy(void *, const void *, size_t); | |||
11 | #define __HAVE_ARCH_MEMSET | 11 | #define __HAVE_ARCH_MEMSET |
12 | extern void *memset(void *, int, size_t); | 12 | extern void *memset(void *, int, size_t); |
13 | 13 | ||
14 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
15 | /* For v32 we provide strcmp. */ | ||
16 | #define __HAVE_ARCH_STRCMP | ||
17 | extern int strcmp(const char *s1, const char *s2); | ||
18 | #endif | ||
19 | |||
14 | #endif | 20 | #endif |
diff --git a/arch/cris/include/asm/thread_info.h b/arch/cris/include/asm/thread_info.h index bc5b2935ca53..c3aade36c330 100644 --- a/arch/cris/include/asm/thread_info.h +++ b/arch/cris/include/asm/thread_info.h | |||
@@ -50,8 +50,6 @@ struct thread_info { | |||
50 | 50 | ||
51 | /* | 51 | /* |
52 | * macros/functions for gaining access to the thread information structure | 52 | * macros/functions for gaining access to the thread information structure |
53 | * | ||
54 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
55 | */ | 53 | */ |
56 | #ifndef __ASSEMBLY__ | 54 | #ifndef __ASSEMBLY__ |
57 | #define INIT_THREAD_INFO(tsk) \ | 55 | #define INIT_THREAD_INFO(tsk) \ |
@@ -60,7 +58,7 @@ struct thread_info { | |||
60 | .exec_domain = &default_exec_domain, \ | 58 | .exec_domain = &default_exec_domain, \ |
61 | .flags = 0, \ | 59 | .flags = 0, \ |
62 | .cpu = 0, \ | 60 | .cpu = 0, \ |
63 | .preempt_count = 1, \ | 61 | .preempt_count = INIT_PREEMPT_COUNT, \ |
64 | .addr_limit = KERNEL_DS, \ | 62 | .addr_limit = KERNEL_DS, \ |
65 | .restart_block = { \ | 63 | .restart_block = { \ |
66 | .fn = do_no_restart_syscall, \ | 64 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/cris/kernel/sys_cris.c b/arch/cris/kernel/sys_cris.c index a79fbd87021b..2ad962c7e88e 100644 --- a/arch/cris/kernel/sys_cris.c +++ b/arch/cris/kernel/sys_cris.c | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
16 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
17 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
18 | #include <linux/smp_lock.h> | ||
19 | #include <linux/sem.h> | 18 | #include <linux/sem.h> |
20 | #include <linux/msg.h> | 19 | #include <linux/msg.h> |
21 | #include <linux/shm.h> | 20 | #include <linux/shm.h> |
diff --git a/arch/cris/mm/fault.c b/arch/cris/mm/fault.c index c4c76db90f9c..f925115e3250 100644 --- a/arch/cris/mm/fault.c +++ b/arch/cris/mm/fault.c | |||
@@ -163,7 +163,7 @@ do_page_fault(unsigned long address, struct pt_regs *regs, | |||
163 | * the fault. | 163 | * the fault. |
164 | */ | 164 | */ |
165 | 165 | ||
166 | fault = handle_mm_fault(mm, vma, address, writeaccess & 1); | 166 | fault = handle_mm_fault(mm, vma, address, (writeaccess & 1) ? FAULT_FLAG_WRITE : 0); |
167 | if (unlikely(fault & VM_FAULT_ERROR)) { | 167 | if (unlikely(fault & VM_FAULT_ERROR)) { |
168 | if (fault & VM_FAULT_OOM) | 168 | if (fault & VM_FAULT_OOM) |
169 | goto out_of_memory; | 169 | goto out_of_memory; |
diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig index 8a5bd7a9c6f5..b86e19c9b5b0 100644 --- a/arch/frv/Kconfig +++ b/arch/frv/Kconfig | |||
@@ -7,6 +7,7 @@ config FRV | |||
7 | default y | 7 | default y |
8 | select HAVE_IDE | 8 | select HAVE_IDE |
9 | select HAVE_ARCH_TRACEHOOK | 9 | select HAVE_ARCH_TRACEHOOK |
10 | select HAVE_PERF_COUNTERS | ||
10 | 11 | ||
11 | config ZONE_DMA | 12 | config ZONE_DMA |
12 | bool | 13 | bool |
diff --git a/arch/frv/include/asm/atomic.h b/arch/frv/include/asm/atomic.h index 0409d981fd39..00a57af79afc 100644 --- a/arch/frv/include/asm/atomic.h +++ b/arch/frv/include/asm/atomic.h | |||
@@ -121,10 +121,72 @@ static inline void atomic_dec(atomic_t *v) | |||
121 | #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0) | 121 | #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0) |
122 | #define atomic_inc_and_test(v) (atomic_add_return(1, (v)) == 0) | 122 | #define atomic_inc_and_test(v) (atomic_add_return(1, (v)) == 0) |
123 | 123 | ||
124 | /* | ||
125 | * 64-bit atomic ops | ||
126 | */ | ||
127 | typedef struct { | ||
128 | volatile long long counter; | ||
129 | } atomic64_t; | ||
130 | |||
131 | #define ATOMIC64_INIT(i) { (i) } | ||
132 | |||
133 | static inline long long atomic64_read(atomic64_t *v) | ||
134 | { | ||
135 | long long counter; | ||
136 | |||
137 | asm("ldd%I1 %M1,%0" | ||
138 | : "=e"(counter) | ||
139 | : "m"(v->counter)); | ||
140 | return counter; | ||
141 | } | ||
142 | |||
143 | static inline void atomic64_set(atomic64_t *v, long long i) | ||
144 | { | ||
145 | asm volatile("std%I0 %1,%M0" | ||
146 | : "=m"(v->counter) | ||
147 | : "e"(i)); | ||
148 | } | ||
149 | |||
150 | extern long long atomic64_inc_return(atomic64_t *v); | ||
151 | extern long long atomic64_dec_return(atomic64_t *v); | ||
152 | extern long long atomic64_add_return(long long i, atomic64_t *v); | ||
153 | extern long long atomic64_sub_return(long long i, atomic64_t *v); | ||
154 | |||
155 | static inline long long atomic64_add_negative(long long i, atomic64_t *v) | ||
156 | { | ||
157 | return atomic64_add_return(i, v) < 0; | ||
158 | } | ||
159 | |||
160 | static inline void atomic64_add(long long i, atomic64_t *v) | ||
161 | { | ||
162 | atomic64_add_return(i, v); | ||
163 | } | ||
164 | |||
165 | static inline void atomic64_sub(long long i, atomic64_t *v) | ||
166 | { | ||
167 | atomic64_sub_return(i, v); | ||
168 | } | ||
169 | |||
170 | static inline void atomic64_inc(atomic64_t *v) | ||
171 | { | ||
172 | atomic64_inc_return(v); | ||
173 | } | ||
174 | |||
175 | static inline void atomic64_dec(atomic64_t *v) | ||
176 | { | ||
177 | atomic64_dec_return(v); | ||
178 | } | ||
179 | |||
180 | #define atomic64_sub_and_test(i,v) (atomic64_sub_return((i), (v)) == 0) | ||
181 | #define atomic64_dec_and_test(v) (atomic64_dec_return((v)) == 0) | ||
182 | #define atomic64_inc_and_test(v) (atomic64_inc_return((v)) == 0) | ||
183 | |||
124 | /*****************************************************************************/ | 184 | /*****************************************************************************/ |
125 | /* | 185 | /* |
126 | * exchange value with memory | 186 | * exchange value with memory |
127 | */ | 187 | */ |
188 | extern uint64_t __xchg_64(uint64_t i, volatile void *v); | ||
189 | |||
128 | #ifndef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS | 190 | #ifndef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS |
129 | 191 | ||
130 | #define xchg(ptr, x) \ | 192 | #define xchg(ptr, x) \ |
@@ -174,8 +236,10 @@ extern uint32_t __xchg_32(uint32_t i, volatile void *v); | |||
174 | 236 | ||
175 | #define tas(ptr) (xchg((ptr), 1)) | 237 | #define tas(ptr) (xchg((ptr), 1)) |
176 | 238 | ||
177 | #define atomic_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), old, new)) | 239 | #define atomic_cmpxchg(v, old, new) (cmpxchg(&(v)->counter, old, new)) |
178 | #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) | 240 | #define atomic_xchg(v, new) (xchg(&(v)->counter, new)) |
241 | #define atomic64_cmpxchg(v, old, new) (__cmpxchg_64(old, new, &(v)->counter)) | ||
242 | #define atomic64_xchg(v, new) (__xchg_64(new, &(v)->counter)) | ||
179 | 243 | ||
180 | static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) | 244 | static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) |
181 | { | 245 | { |
diff --git a/arch/frv/include/asm/perf_counter.h b/arch/frv/include/asm/perf_counter.h new file mode 100644 index 000000000000..ccf726e61b2e --- /dev/null +++ b/arch/frv/include/asm/perf_counter.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* FRV performance counter support | ||
2 | * | ||
3 | * Copyright (C) 2009 Red Hat, Inc. All Rights Reserved. | ||
4 | * Written by David Howells (dhowells@redhat.com) | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public Licence | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the Licence, or (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #ifndef _ASM_PERF_COUNTER_H | ||
13 | #define _ASM_PERF_COUNTER_H | ||
14 | |||
15 | #define PERF_COUNTER_INDEX_OFFSET 0 | ||
16 | |||
17 | #endif /* _ASM_PERF_COUNTER_H */ | ||
diff --git a/arch/frv/include/asm/system.h b/arch/frv/include/asm/system.h index 7742ec000cc4..efd22d9077ac 100644 --- a/arch/frv/include/asm/system.h +++ b/arch/frv/include/asm/system.h | |||
@@ -208,6 +208,8 @@ extern void free_initmem(void); | |||
208 | * - if (*ptr == test) then orig = *ptr; *ptr = test; | 208 | * - if (*ptr == test) then orig = *ptr; *ptr = test; |
209 | * - if (*ptr != test) then orig = *ptr; | 209 | * - if (*ptr != test) then orig = *ptr; |
210 | */ | 210 | */ |
211 | extern uint64_t __cmpxchg_64(uint64_t test, uint64_t new, volatile uint64_t *v); | ||
212 | |||
211 | #ifndef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS | 213 | #ifndef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS |
212 | 214 | ||
213 | #define cmpxchg(ptr, test, new) \ | 215 | #define cmpxchg(ptr, test, new) \ |
diff --git a/arch/frv/include/asm/thread_info.h b/arch/frv/include/asm/thread_info.h index e8a5ed7be021..e608e056bb53 100644 --- a/arch/frv/include/asm/thread_info.h +++ b/arch/frv/include/asm/thread_info.h | |||
@@ -56,8 +56,6 @@ struct thread_info { | |||
56 | 56 | ||
57 | /* | 57 | /* |
58 | * macros/functions for gaining access to the thread information structure | 58 | * macros/functions for gaining access to the thread information structure |
59 | * | ||
60 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
61 | */ | 59 | */ |
62 | #ifndef __ASSEMBLY__ | 60 | #ifndef __ASSEMBLY__ |
63 | 61 | ||
@@ -67,7 +65,7 @@ struct thread_info { | |||
67 | .exec_domain = &default_exec_domain, \ | 65 | .exec_domain = &default_exec_domain, \ |
68 | .flags = 0, \ | 66 | .flags = 0, \ |
69 | .cpu = 0, \ | 67 | .cpu = 0, \ |
70 | .preempt_count = 1, \ | 68 | .preempt_count = INIT_PREEMPT_COUNT, \ |
71 | .addr_limit = KERNEL_DS, \ | 69 | .addr_limit = KERNEL_DS, \ |
72 | .restart_block = { \ | 70 | .restart_block = { \ |
73 | .fn = do_no_restart_syscall, \ | 71 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/frv/include/asm/unistd.h b/arch/frv/include/asm/unistd.h index 96d78d5d2c41..4a8fb427ce0a 100644 --- a/arch/frv/include/asm/unistd.h +++ b/arch/frv/include/asm/unistd.h | |||
@@ -341,10 +341,12 @@ | |||
341 | #define __NR_inotify_init1 332 | 341 | #define __NR_inotify_init1 332 |
342 | #define __NR_preadv 333 | 342 | #define __NR_preadv 333 |
343 | #define __NR_pwritev 334 | 343 | #define __NR_pwritev 334 |
344 | #define __NR_rt_tgsigqueueinfo 335 | ||
345 | #define __NR_perf_counter_open 336 | ||
344 | 346 | ||
345 | #ifdef __KERNEL__ | 347 | #ifdef __KERNEL__ |
346 | 348 | ||
347 | #define NR_syscalls 335 | 349 | #define NR_syscalls 337 |
348 | 350 | ||
349 | #define __ARCH_WANT_IPC_PARSE_VERSION | 351 | #define __ARCH_WANT_IPC_PARSE_VERSION |
350 | /* #define __ARCH_WANT_OLD_READDIR */ | 352 | /* #define __ARCH_WANT_OLD_READDIR */ |
diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S index 356e0e327a89..fde1e446b440 100644 --- a/arch/frv/kernel/entry.S +++ b/arch/frv/kernel/entry.S | |||
@@ -1524,5 +1524,7 @@ sys_call_table: | |||
1524 | .long sys_inotify_init1 | 1524 | .long sys_inotify_init1 |
1525 | .long sys_preadv | 1525 | .long sys_preadv |
1526 | .long sys_pwritev | 1526 | .long sys_pwritev |
1527 | .long sys_rt_tgsigqueueinfo /* 335 */ | ||
1528 | .long sys_perf_counter_open | ||
1527 | 1529 | ||
1528 | syscall_table_size = (. - sys_call_table) | 1530 | syscall_table_size = (. - sys_call_table) |
diff --git a/arch/frv/kernel/frv_ksyms.c b/arch/frv/kernel/frv_ksyms.c index 0316b3c50eff..a89803b58b9a 100644 --- a/arch/frv/kernel/frv_ksyms.c +++ b/arch/frv/kernel/frv_ksyms.c | |||
@@ -67,6 +67,10 @@ EXPORT_SYMBOL(atomic_sub_return); | |||
67 | EXPORT_SYMBOL(__xchg_32); | 67 | EXPORT_SYMBOL(__xchg_32); |
68 | EXPORT_SYMBOL(__cmpxchg_32); | 68 | EXPORT_SYMBOL(__cmpxchg_32); |
69 | #endif | 69 | #endif |
70 | EXPORT_SYMBOL(atomic64_add_return); | ||
71 | EXPORT_SYMBOL(atomic64_sub_return); | ||
72 | EXPORT_SYMBOL(__xchg_64); | ||
73 | EXPORT_SYMBOL(__cmpxchg_64); | ||
70 | 74 | ||
71 | EXPORT_SYMBOL(__debug_bug_printk); | 75 | EXPORT_SYMBOL(__debug_bug_printk); |
72 | EXPORT_SYMBOL(__delay_loops_MHz); | 76 | EXPORT_SYMBOL(__delay_loops_MHz); |
diff --git a/arch/frv/lib/Makefile b/arch/frv/lib/Makefile index 08be305c9f44..0a377210c89b 100644 --- a/arch/frv/lib/Makefile +++ b/arch/frv/lib/Makefile | |||
@@ -4,5 +4,5 @@ | |||
4 | 4 | ||
5 | lib-y := \ | 5 | lib-y := \ |
6 | __ashldi3.o __lshrdi3.o __muldi3.o __ashrdi3.o __negdi2.o __ucmpdi2.o \ | 6 | __ashldi3.o __lshrdi3.o __muldi3.o __ashrdi3.o __negdi2.o __ucmpdi2.o \ |
7 | checksum.o memcpy.o memset.o atomic-ops.o \ | 7 | checksum.o memcpy.o memset.o atomic-ops.o atomic64-ops.o \ |
8 | outsl_ns.o outsl_sw.o insl_ns.o insl_sw.o cache.o | 8 | outsl_ns.o outsl_sw.o insl_ns.o insl_sw.o cache.o perf_counter.o |
diff --git a/arch/frv/lib/atomic-ops.S b/arch/frv/lib/atomic-ops.S index ee0ac905fb08..5e9e6ab5dd0e 100644 --- a/arch/frv/lib/atomic-ops.S +++ b/arch/frv/lib/atomic-ops.S | |||
@@ -163,11 +163,10 @@ __cmpxchg_32: | |||
163 | ld.p @(gr11,gr0),gr8 | 163 | ld.p @(gr11,gr0),gr8 |
164 | orcr cc7,cc7,cc3 | 164 | orcr cc7,cc7,cc3 |
165 | subcc gr8,gr9,gr7,icc0 | 165 | subcc gr8,gr9,gr7,icc0 |
166 | bne icc0,#0,1f | 166 | bnelr icc0,#0 |
167 | cst.p gr10,@(gr11,gr0) ,cc3,#1 | 167 | cst.p gr10,@(gr11,gr0) ,cc3,#1 |
168 | corcc gr29,gr29,gr0 ,cc3,#1 | 168 | corcc gr29,gr29,gr0 ,cc3,#1 |
169 | beq icc3,#0,0b | 169 | beq icc3,#0,0b |
170 | 1: | ||
171 | bralr | 170 | bralr |
172 | 171 | ||
173 | .size __cmpxchg_32, .-__cmpxchg_32 | 172 | .size __cmpxchg_32, .-__cmpxchg_32 |
diff --git a/arch/frv/lib/atomic64-ops.S b/arch/frv/lib/atomic64-ops.S new file mode 100644 index 000000000000..b6194eeac127 --- /dev/null +++ b/arch/frv/lib/atomic64-ops.S | |||
@@ -0,0 +1,162 @@ | |||
1 | /* kernel atomic64 operations | ||
2 | * | ||
3 | * For an explanation of how atomic ops work in this arch, see: | ||
4 | * Documentation/frv/atomic-ops.txt | ||
5 | * | ||
6 | * Copyright (C) 2009 Red Hat, Inc. All Rights Reserved. | ||
7 | * Written by David Howells (dhowells@redhat.com) | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * as published by the Free Software Foundation; either version | ||
12 | * 2 of the License, or (at your option) any later version. | ||
13 | */ | ||
14 | |||
15 | #include <asm/spr-regs.h> | ||
16 | |||
17 | .text | ||
18 | .balign 4 | ||
19 | |||
20 | |||
21 | ############################################################################### | ||
22 | # | ||
23 | # long long atomic64_inc_return(atomic64_t *v) | ||
24 | # | ||
25 | ############################################################################### | ||
26 | .globl atomic64_inc_return | ||
27 | .type atomic64_inc_return,@function | ||
28 | atomic64_inc_return: | ||
29 | or.p gr8,gr8,gr10 | ||
30 | 0: | ||
31 | orcc gr0,gr0,gr0,icc3 /* set ICC3.Z */ | ||
32 | ckeq icc3,cc7 | ||
33 | ldd.p @(gr10,gr0),gr8 /* LDD.P/ORCR must be atomic */ | ||
34 | orcr cc7,cc7,cc3 /* set CC3 to true */ | ||
35 | addicc gr9,#1,gr9,icc0 | ||
36 | addxi gr8,#0,gr8,icc0 | ||
37 | cstd.p gr8,@(gr10,gr0) ,cc3,#1 | ||
38 | corcc gr29,gr29,gr0 ,cc3,#1 /* clear ICC3.Z if store happens */ | ||
39 | beq icc3,#0,0b | ||
40 | bralr | ||
41 | |||
42 | .size atomic64_inc_return, .-atomic64_inc_return | ||
43 | |||
44 | ############################################################################### | ||
45 | # | ||
46 | # long long atomic64_dec_return(atomic64_t *v) | ||
47 | # | ||
48 | ############################################################################### | ||
49 | .globl atomic64_dec_return | ||
50 | .type atomic64_dec_return,@function | ||
51 | atomic64_dec_return: | ||
52 | or.p gr8,gr8,gr10 | ||
53 | 0: | ||
54 | orcc gr0,gr0,gr0,icc3 /* set ICC3.Z */ | ||
55 | ckeq icc3,cc7 | ||
56 | ldd.p @(gr10,gr0),gr8 /* LDD.P/ORCR must be atomic */ | ||
57 | orcr cc7,cc7,cc3 /* set CC3 to true */ | ||
58 | subicc gr9,#1,gr9,icc0 | ||
59 | subxi gr8,#0,gr8,icc0 | ||
60 | cstd.p gr8,@(gr10,gr0) ,cc3,#1 | ||
61 | corcc gr29,gr29,gr0 ,cc3,#1 /* clear ICC3.Z if store happens */ | ||
62 | beq icc3,#0,0b | ||
63 | bralr | ||
64 | |||
65 | .size atomic64_dec_return, .-atomic64_dec_return | ||
66 | |||
67 | ############################################################################### | ||
68 | # | ||
69 | # long long atomic64_add_return(long long i, atomic64_t *v) | ||
70 | # | ||
71 | ############################################################################### | ||
72 | .globl atomic64_add_return | ||
73 | .type atomic64_add_return,@function | ||
74 | atomic64_add_return: | ||
75 | or.p gr8,gr8,gr4 | ||
76 | or gr9,gr9,gr5 | ||
77 | 0: | ||
78 | orcc gr0,gr0,gr0,icc3 /* set ICC3.Z */ | ||
79 | ckeq icc3,cc7 | ||
80 | ldd.p @(gr10,gr0),gr8 /* LDD.P/ORCR must be atomic */ | ||
81 | orcr cc7,cc7,cc3 /* set CC3 to true */ | ||
82 | addcc gr9,gr5,gr9,icc0 | ||
83 | addx gr8,gr4,gr8,icc0 | ||
84 | cstd.p gr8,@(gr10,gr0) ,cc3,#1 | ||
85 | corcc gr29,gr29,gr0 ,cc3,#1 /* clear ICC3.Z if store happens */ | ||
86 | beq icc3,#0,0b | ||
87 | bralr | ||
88 | |||
89 | .size atomic64_add_return, .-atomic64_add_return | ||
90 | |||
91 | ############################################################################### | ||
92 | # | ||
93 | # long long atomic64_sub_return(long long i, atomic64_t *v) | ||
94 | # | ||
95 | ############################################################################### | ||
96 | .globl atomic64_sub_return | ||
97 | .type atomic64_sub_return,@function | ||
98 | atomic64_sub_return: | ||
99 | or.p gr8,gr8,gr4 | ||
100 | or gr9,gr9,gr5 | ||
101 | 0: | ||
102 | orcc gr0,gr0,gr0,icc3 /* set ICC3.Z */ | ||
103 | ckeq icc3,cc7 | ||
104 | ldd.p @(gr10,gr0),gr8 /* LDD.P/ORCR must be atomic */ | ||
105 | orcr cc7,cc7,cc3 /* set CC3 to true */ | ||
106 | subcc gr9,gr5,gr9,icc0 | ||
107 | subx gr8,gr4,gr8,icc0 | ||
108 | cstd.p gr8,@(gr10,gr0) ,cc3,#1 | ||
109 | corcc gr29,gr29,gr0 ,cc3,#1 /* clear ICC3.Z if store happens */ | ||
110 | beq icc3,#0,0b | ||
111 | bralr | ||
112 | |||
113 | .size atomic64_sub_return, .-atomic64_sub_return | ||
114 | |||
115 | ############################################################################### | ||
116 | # | ||
117 | # uint64_t __xchg_64(uint64_t i, uint64_t *v) | ||
118 | # | ||
119 | ############################################################################### | ||
120 | .globl __xchg_64 | ||
121 | .type __xchg_64,@function | ||
122 | __xchg_64: | ||
123 | or.p gr8,gr8,gr4 | ||
124 | or gr9,gr9,gr5 | ||
125 | 0: | ||
126 | orcc gr0,gr0,gr0,icc3 /* set ICC3.Z */ | ||
127 | ckeq icc3,cc7 | ||
128 | ldd.p @(gr10,gr0),gr8 /* LDD.P/ORCR must be atomic */ | ||
129 | orcr cc7,cc7,cc3 /* set CC3 to true */ | ||
130 | cstd.p gr4,@(gr10,gr0) ,cc3,#1 | ||
131 | corcc gr29,gr29,gr0 ,cc3,#1 /* clear ICC3.Z if store happens */ | ||
132 | beq icc3,#0,0b | ||
133 | bralr | ||
134 | |||
135 | .size __xchg_64, .-__xchg_64 | ||
136 | |||
137 | ############################################################################### | ||
138 | # | ||
139 | # uint64_t __cmpxchg_64(uint64_t test, uint64_t new, uint64_t *v) | ||
140 | # | ||
141 | ############################################################################### | ||
142 | .globl __cmpxchg_64 | ||
143 | .type __cmpxchg_64,@function | ||
144 | __cmpxchg_64: | ||
145 | or.p gr8,gr8,gr4 | ||
146 | or gr9,gr9,gr5 | ||
147 | 0: | ||
148 | orcc gr0,gr0,gr0,icc3 /* set ICC3.Z */ | ||
149 | ckeq icc3,cc7 | ||
150 | ldd.p @(gr12,gr0),gr8 /* LDD.P/ORCR must be atomic */ | ||
151 | orcr cc7,cc7,cc3 | ||
152 | subcc gr8,gr4,gr0,icc0 | ||
153 | subcc.p gr9,gr5,gr0,icc1 | ||
154 | bnelr icc0,#0 | ||
155 | bnelr icc1,#0 | ||
156 | cstd.p gr10,@(gr12,gr0) ,cc3,#1 | ||
157 | corcc gr29,gr29,gr0 ,cc3,#1 /* clear ICC3.Z if store happens */ | ||
158 | beq icc3,#0,0b | ||
159 | bralr | ||
160 | |||
161 | .size __cmpxchg_64, .-__cmpxchg_64 | ||
162 | |||
diff --git a/arch/frv/lib/perf_counter.c b/arch/frv/lib/perf_counter.c new file mode 100644 index 000000000000..2000feecd571 --- /dev/null +++ b/arch/frv/lib/perf_counter.c | |||
@@ -0,0 +1,19 @@ | |||
1 | /* Performance counter handling | ||
2 | * | ||
3 | * Copyright (C) 2009 Red Hat, Inc. All Rights Reserved. | ||
4 | * Written by David Howells (dhowells@redhat.com) | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public Licence | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the Licence, or (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #include <linux/perf_counter.h> | ||
13 | |||
14 | /* | ||
15 | * mark the performance counter as pending | ||
16 | */ | ||
17 | void set_perf_counter_pending(void) | ||
18 | { | ||
19 | } | ||
diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c index 05093d41d98e..30f5d100a81c 100644 --- a/arch/frv/mm/fault.c +++ b/arch/frv/mm/fault.c | |||
@@ -163,7 +163,7 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear | |||
163 | * make sure we exit gracefully rather than endlessly redo | 163 | * make sure we exit gracefully rather than endlessly redo |
164 | * the fault. | 164 | * the fault. |
165 | */ | 165 | */ |
166 | fault = handle_mm_fault(mm, vma, ear0, write); | 166 | fault = handle_mm_fault(mm, vma, ear0, write ? FAULT_FLAG_WRITE : 0); |
167 | if (unlikely(fault & VM_FAULT_ERROR)) { | 167 | if (unlikely(fault & VM_FAULT_ERROR)) { |
168 | if (fault & VM_FAULT_OOM) | 168 | if (fault & VM_FAULT_OOM) |
169 | goto out_of_memory; | 169 | goto out_of_memory; |
diff --git a/arch/h8300/Kconfig.cpu b/arch/h8300/Kconfig.cpu index b65dcfe51d9c..6e2ecff199c5 100644 --- a/arch/h8300/Kconfig.cpu +++ b/arch/h8300/Kconfig.cpu | |||
@@ -13,7 +13,7 @@ config H8300H_GENERIC | |||
13 | 13 | ||
14 | config H8300H_AKI3068NET | 14 | config H8300H_AKI3068NET |
15 | bool "AE-3068/69" | 15 | bool "AE-3068/69" |
16 | select CONFIG_H83068 | 16 | select H83068 |
17 | help | 17 | help |
18 | AKI-H8/3068F / AKI-H8/3069F Flashmicom LAN Board Support | 18 | AKI-H8/3068F / AKI-H8/3069F Flashmicom LAN Board Support |
19 | More Information. (Japanese Only) | 19 | More Information. (Japanese Only) |
@@ -24,7 +24,7 @@ config H8300H_AKI3068NET | |||
24 | 24 | ||
25 | config H8300H_H8MAX | 25 | config H8300H_H8MAX |
26 | bool "H8MAX" | 26 | bool "H8MAX" |
27 | select CONFIG_H83068 | 27 | select H83068 |
28 | help | 28 | help |
29 | H8MAX Evaluation Board Support | 29 | H8MAX Evaluation Board Support |
30 | More Information. (Japanese Only) | 30 | More Information. (Japanese Only) |
@@ -32,7 +32,7 @@ config H8300H_H8MAX | |||
32 | 32 | ||
33 | config H8300H_SIM | 33 | config H8300H_SIM |
34 | bool "H8/300H Simulator" | 34 | bool "H8/300H Simulator" |
35 | select CONFIG_H83007 | 35 | select H83007 |
36 | help | 36 | help |
37 | GDB Simulator Support | 37 | GDB Simulator Support |
38 | More Information. | 38 | More Information. |
@@ -45,7 +45,7 @@ config H8S_GENERIC | |||
45 | 45 | ||
46 | config H8S_EDOSK2674 | 46 | config H8S_EDOSK2674 |
47 | bool "EDOSK-2674" | 47 | bool "EDOSK-2674" |
48 | select CONFIG_H8S2768 | 48 | select H8S2678 |
49 | help | 49 | help |
50 | Renesas EDOSK-2674 Evaluation Board Support | 50 | Renesas EDOSK-2674 Evaluation Board Support |
51 | More Information. | 51 | More Information. |
diff --git a/arch/h8300/include/asm/thread_info.h b/arch/h8300/include/asm/thread_info.h index 700014d2155f..8bbc8b0ee45d 100644 --- a/arch/h8300/include/asm/thread_info.h +++ b/arch/h8300/include/asm/thread_info.h | |||
@@ -36,7 +36,7 @@ struct thread_info { | |||
36 | .exec_domain = &default_exec_domain, \ | 36 | .exec_domain = &default_exec_domain, \ |
37 | .flags = 0, \ | 37 | .flags = 0, \ |
38 | .cpu = 0, \ | 38 | .cpu = 0, \ |
39 | .preempt_count = 1, \ | 39 | .preempt_count = INIT_PREEMPT_COUNT, \ |
40 | .restart_block = { \ | 40 | .restart_block = { \ |
41 | .fn = do_no_restart_syscall, \ | 41 | .fn = do_no_restart_syscall, \ |
42 | }, \ | 42 | }, \ |
diff --git a/arch/ia64/include/asm/iommu.h b/arch/ia64/include/asm/iommu.h index 0490794fe4aa..745e095fe82e 100644 --- a/arch/ia64/include/asm/iommu.h +++ b/arch/ia64/include/asm/iommu.h | |||
@@ -9,6 +9,11 @@ extern void pci_iommu_shutdown(void); | |||
9 | extern void no_iommu_init(void); | 9 | extern void no_iommu_init(void); |
10 | extern int force_iommu, no_iommu; | 10 | extern int force_iommu, no_iommu; |
11 | extern int iommu_detected; | 11 | extern int iommu_detected; |
12 | #ifdef CONFIG_DMAR | ||
13 | extern int iommu_pass_through; | ||
14 | #else | ||
15 | #define iommu_pass_through (0) | ||
16 | #endif | ||
12 | extern void iommu_dma_init(void); | 17 | extern void iommu_dma_init(void); |
13 | extern void machvec_init(const char *name); | 18 | extern void machvec_init(const char *name); |
14 | 19 | ||
diff --git a/arch/ia64/include/asm/thread_info.h b/arch/ia64/include/asm/thread_info.h index ae6922626bf4..8ce2e388e37c 100644 --- a/arch/ia64/include/asm/thread_info.h +++ b/arch/ia64/include/asm/thread_info.h | |||
@@ -48,7 +48,7 @@ struct thread_info { | |||
48 | .flags = 0, \ | 48 | .flags = 0, \ |
49 | .cpu = 0, \ | 49 | .cpu = 0, \ |
50 | .addr_limit = KERNEL_DS, \ | 50 | .addr_limit = KERNEL_DS, \ |
51 | .preempt_count = 0, \ | 51 | .preempt_count = INIT_PREEMPT_COUNT, \ |
52 | .restart_block = { \ | 52 | .restart_block = { \ |
53 | .fn = do_no_restart_syscall, \ | 53 | .fn = do_no_restart_syscall, \ |
54 | }, \ | 54 | }, \ |
diff --git a/arch/ia64/kernel/acpi-processor.c b/arch/ia64/kernel/acpi-processor.c index cbe6cee5a550..dbda7bde6112 100644 --- a/arch/ia64/kernel/acpi-processor.c +++ b/arch/ia64/kernel/acpi-processor.c | |||
@@ -71,3 +71,15 @@ void arch_acpi_processor_init_pdc(struct acpi_processor *pr) | |||
71 | } | 71 | } |
72 | 72 | ||
73 | EXPORT_SYMBOL(arch_acpi_processor_init_pdc); | 73 | EXPORT_SYMBOL(arch_acpi_processor_init_pdc); |
74 | |||
75 | void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr) | ||
76 | { | ||
77 | if (pr->pdc) { | ||
78 | kfree(pr->pdc->pointer->buffer.pointer); | ||
79 | kfree(pr->pdc->pointer); | ||
80 | kfree(pr->pdc); | ||
81 | pr->pdc = NULL; | ||
82 | } | ||
83 | } | ||
84 | |||
85 | EXPORT_SYMBOL(arch_acpi_processor_cleanup_pdc); | ||
diff --git a/arch/ia64/kernel/esi.c b/arch/ia64/kernel/esi.c index ebf4e988e78c..d5764a3d74af 100644 --- a/arch/ia64/kernel/esi.c +++ b/arch/ia64/kernel/esi.c | |||
@@ -65,7 +65,7 @@ static int __init esi_init (void) | |||
65 | } | 65 | } |
66 | 66 | ||
67 | if (!esi) | 67 | if (!esi) |
68 | return -ENODEV;; | 68 | return -ENODEV; |
69 | 69 | ||
70 | systab = __va(esi); | 70 | systab = __va(esi); |
71 | 71 | ||
diff --git a/arch/ia64/kernel/pci-dma.c b/arch/ia64/kernel/pci-dma.c index 1376da45fd08..05695962fe44 100644 --- a/arch/ia64/kernel/pci-dma.c +++ b/arch/ia64/kernel/pci-dma.c | |||
@@ -32,6 +32,8 @@ int force_iommu __read_mostly = 1; | |||
32 | int force_iommu __read_mostly; | 32 | int force_iommu __read_mostly; |
33 | #endif | 33 | #endif |
34 | 34 | ||
35 | int iommu_pass_through; | ||
36 | |||
35 | /* Dummy device used for NULL arguments (normally ISA). Better would | 37 | /* Dummy device used for NULL arguments (normally ISA). Better would |
36 | be probably a smaller DMA mask, but this is bug-to-bug compatible | 38 | be probably a smaller DMA mask, but this is bug-to-bug compatible |
37 | to i386. */ | 39 | to i386. */ |
diff --git a/arch/ia64/kernel/pci-swiotlb.c b/arch/ia64/kernel/pci-swiotlb.c index 285aae8431c6..223abb134105 100644 --- a/arch/ia64/kernel/pci-swiotlb.c +++ b/arch/ia64/kernel/pci-swiotlb.c | |||
@@ -46,7 +46,7 @@ void __init swiotlb_dma_init(void) | |||
46 | 46 | ||
47 | void __init pci_swiotlb_init(void) | 47 | void __init pci_swiotlb_init(void) |
48 | { | 48 | { |
49 | if (!iommu_detected) { | 49 | if (!iommu_detected || iommu_pass_through) { |
50 | #ifdef CONFIG_IA64_GENERIC | 50 | #ifdef CONFIG_IA64_GENERIC |
51 | swiotlb = 1; | 51 | swiotlb = 1; |
52 | printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n"); | 52 | printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n"); |
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index abce2468a40b..f1782705b1f7 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -5603,7 +5603,7 @@ pfm_interrupt_handler(int irq, void *arg) | |||
5603 | * /proc/perfmon interface, for debug only | 5603 | * /proc/perfmon interface, for debug only |
5604 | */ | 5604 | */ |
5605 | 5605 | ||
5606 | #define PFM_PROC_SHOW_HEADER ((void *)nr_cpu_ids+1) | 5606 | #define PFM_PROC_SHOW_HEADER ((void *)(long)nr_cpu_ids+1) |
5607 | 5607 | ||
5608 | static void * | 5608 | static void * |
5609 | pfm_proc_start(struct seq_file *m, loff_t *pos) | 5609 | pfm_proc_start(struct seq_file *m, loff_t *pos) |
diff --git a/arch/ia64/kernel/ptrace.c b/arch/ia64/kernel/ptrace.c index 92c9689b7d97..9daa87fdb018 100644 --- a/arch/ia64/kernel/ptrace.c +++ b/arch/ia64/kernel/ptrace.c | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
16 | #include <linux/errno.h> | 16 | #include <linux/errno.h> |
17 | #include <linux/ptrace.h> | 17 | #include <linux/ptrace.h> |
18 | #include <linux/smp_lock.h> | ||
19 | #include <linux/user.h> | 18 | #include <linux/user.h> |
20 | #include <linux/security.h> | 19 | #include <linux/security.h> |
21 | #include <linux/audit.h> | 20 | #include <linux/audit.h> |
diff --git a/arch/ia64/kernel/salinfo.c b/arch/ia64/kernel/salinfo.c index 7053c55b7649..e6676fca4828 100644 --- a/arch/ia64/kernel/salinfo.c +++ b/arch/ia64/kernel/salinfo.c | |||
@@ -192,7 +192,7 @@ struct salinfo_platform_oemdata_parms { | |||
192 | static void | 192 | static void |
193 | salinfo_work_to_do(struct salinfo_data *data) | 193 | salinfo_work_to_do(struct salinfo_data *data) |
194 | { | 194 | { |
195 | down_trylock(&data->mutex); | 195 | (void)(down_trylock(&data->mutex) ?: 0); |
196 | up(&data->mutex); | 196 | up(&data->mutex); |
197 | } | 197 | } |
198 | 198 | ||
diff --git a/arch/ia64/kvm/kvm_lib.c b/arch/ia64/kvm/kvm_lib.c index a85cb611ecd7..f1268b8e6f9e 100644 --- a/arch/ia64/kvm/kvm_lib.c +++ b/arch/ia64/kvm/kvm_lib.c | |||
@@ -11,5 +11,11 @@ | |||
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | #undef CONFIG_MODULES | 13 | #undef CONFIG_MODULES |
14 | #include <linux/module.h> | ||
15 | #undef CONFIG_KALLSYMS | ||
16 | #undef EXPORT_SYMBOL | ||
17 | #undef EXPORT_SYMBOL_GPL | ||
18 | #define EXPORT_SYMBOL(sym) | ||
19 | #define EXPORT_SYMBOL_GPL(sym) | ||
14 | #include "../../../lib/vsprintf.c" | 20 | #include "../../../lib/vsprintf.c" |
15 | #include "../../../lib/ctype.c" | 21 | #include "../../../lib/ctype.c" |
diff --git a/arch/ia64/kvm/process.c b/arch/ia64/kvm/process.c index a8f84da04b49..bb862fb224f2 100644 --- a/arch/ia64/kvm/process.c +++ b/arch/ia64/kvm/process.c | |||
@@ -130,7 +130,7 @@ static void collect_interruption(struct kvm_vcpu *vcpu) | |||
130 | if (vdcr & IA64_DCR_PP) { | 130 | if (vdcr & IA64_DCR_PP) { |
131 | vpsr |= IA64_PSR_PP; | 131 | vpsr |= IA64_PSR_PP; |
132 | } else { | 132 | } else { |
133 | vpsr &= ~IA64_PSR_PP;; | 133 | vpsr &= ~IA64_PSR_PP; |
134 | } | 134 | } |
135 | 135 | ||
136 | vcpu_set_psr(vcpu, vpsr); | 136 | vcpu_set_psr(vcpu, vpsr); |
@@ -594,11 +594,11 @@ static void set_pal_call_data(struct kvm_vcpu *vcpu) | |||
594 | p->u.pal_data.gr30 = vcpu_get_gr(vcpu, 30); | 594 | p->u.pal_data.gr30 = vcpu_get_gr(vcpu, 30); |
595 | break; | 595 | break; |
596 | case PAL_BRAND_INFO: | 596 | case PAL_BRAND_INFO: |
597 | p->u.pal_data.gr29 = gr29;; | 597 | p->u.pal_data.gr29 = gr29; |
598 | p->u.pal_data.gr30 = kvm_trans_pal_call_args(vcpu, gr30); | 598 | p->u.pal_data.gr30 = kvm_trans_pal_call_args(vcpu, gr30); |
599 | break; | 599 | break; |
600 | default: | 600 | default: |
601 | p->u.pal_data.gr29 = gr29;; | 601 | p->u.pal_data.gr29 = gr29; |
602 | p->u.pal_data.gr30 = vcpu_get_gr(vcpu, 30); | 602 | p->u.pal_data.gr30 = vcpu_get_gr(vcpu, 30); |
603 | } | 603 | } |
604 | p->u.pal_data.gr28 = gr28; | 604 | p->u.pal_data.gr28 = gr28; |
diff --git a/arch/ia64/kvm/vcpu.c b/arch/ia64/kvm/vcpu.c index a2c6c15e4761..46b02cbcc874 100644 --- a/arch/ia64/kvm/vcpu.c +++ b/arch/ia64/kvm/vcpu.c | |||
@@ -406,7 +406,7 @@ void getreg(unsigned long regnum, unsigned long *val, | |||
406 | * Now look at registers in [0-31] range and init correct UNAT | 406 | * Now look at registers in [0-31] range and init correct UNAT |
407 | */ | 407 | */ |
408 | addr = (unsigned long)regs; | 408 | addr = (unsigned long)regs; |
409 | unat = ®s->eml_unat;; | 409 | unat = ®s->eml_unat; |
410 | 410 | ||
411 | addr += gr_info[regnum]; | 411 | addr += gr_info[regnum]; |
412 | 412 | ||
diff --git a/arch/ia64/kvm/vtlb.c b/arch/ia64/kvm/vtlb.c index 4290a429bf7c..20b3852f7a6e 100644 --- a/arch/ia64/kvm/vtlb.c +++ b/arch/ia64/kvm/vtlb.c | |||
@@ -135,7 +135,7 @@ struct thash_data *__vtr_lookup(struct kvm_vcpu *vcpu, u64 va, int type) | |||
135 | u64 rid; | 135 | u64 rid; |
136 | 136 | ||
137 | rid = vcpu_get_rr(vcpu, va); | 137 | rid = vcpu_get_rr(vcpu, va); |
138 | rid = rid & RR_RID_MASK;; | 138 | rid = rid & RR_RID_MASK; |
139 | if (type == D_TLB) { | 139 | if (type == D_TLB) { |
140 | if (vcpu_quick_region_check(vcpu->arch.dtr_regions, va)) { | 140 | if (vcpu_quick_region_check(vcpu->arch.dtr_regions, va)) { |
141 | for (trp = (struct thash_data *)&vcpu->arch.dtrs, i = 0; | 141 | for (trp = (struct thash_data *)&vcpu->arch.dtrs, i = 0; |
@@ -518,7 +518,7 @@ struct thash_data *vtlb_lookup(struct kvm_vcpu *v, u64 va, int is_data) | |||
518 | 518 | ||
519 | struct thash_cb *hcb = &v->arch.vtlb; | 519 | struct thash_cb *hcb = &v->arch.vtlb; |
520 | 520 | ||
521 | cch = __vtr_lookup(v, va, is_data);; | 521 | cch = __vtr_lookup(v, va, is_data); |
522 | if (cch) | 522 | if (cch) |
523 | return cch; | 523 | return cch; |
524 | 524 | ||
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c index 23088bed111e..19261a99e623 100644 --- a/arch/ia64/mm/fault.c +++ b/arch/ia64/mm/fault.c | |||
@@ -154,7 +154,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re | |||
154 | * sure we exit gracefully rather than endlessly redo the | 154 | * sure we exit gracefully rather than endlessly redo the |
155 | * fault. | 155 | * fault. |
156 | */ | 156 | */ |
157 | fault = handle_mm_fault(mm, vma, address, (mask & VM_WRITE) != 0); | 157 | fault = handle_mm_fault(mm, vma, address, (mask & VM_WRITE) ? FAULT_FLAG_WRITE : 0); |
158 | if (unlikely(fault & VM_FAULT_ERROR)) { | 158 | if (unlikely(fault & VM_FAULT_ERROR)) { |
159 | /* | 159 | /* |
160 | * We ran out of memory, or some other thing happened | 160 | * We ran out of memory, or some other thing happened |
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c index 729298f4b234..7de76dd352fe 100644 --- a/arch/ia64/pci/pci.c +++ b/arch/ia64/pci/pci.c | |||
@@ -537,7 +537,7 @@ pcibios_align_resource (void *data, struct resource *res, | |||
537 | /* | 537 | /* |
538 | * PCI BIOS setup, always defaults to SAL interface | 538 | * PCI BIOS setup, always defaults to SAL interface |
539 | */ | 539 | */ |
540 | char * __devinit | 540 | char * __init |
541 | pcibios_setup (char *str) | 541 | pcibios_setup (char *str) |
542 | { | 542 | { |
543 | return str; | 543 | return str; |
diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index 76645cf6ac5d..25831c47c579 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c | |||
@@ -435,7 +435,8 @@ void sn_generate_path(struct pci_bus *pci_bus, char *address) | |||
435 | bricktype = MODULE_GET_BTYPE(moduleid); | 435 | bricktype = MODULE_GET_BTYPE(moduleid); |
436 | if ((bricktype == L1_BRICKTYPE_191010) || | 436 | if ((bricktype == L1_BRICKTYPE_191010) || |
437 | (bricktype == L1_BRICKTYPE_1932)) | 437 | (bricktype == L1_BRICKTYPE_1932)) |
438 | sprintf(address, "%s^%d", address, geo_slot(geoid)); | 438 | sprintf(address + strlen(address), "^%d", |
439 | geo_slot(geoid)); | ||
439 | } | 440 | } |
440 | 441 | ||
441 | void __devinit | 442 | void __devinit |
diff --git a/arch/m32r/include/asm/thread_info.h b/arch/m32r/include/asm/thread_info.h index 8589d462df27..07bb5bd00e2a 100644 --- a/arch/m32r/include/asm/thread_info.h +++ b/arch/m32r/include/asm/thread_info.h | |||
@@ -57,8 +57,6 @@ struct thread_info { | |||
57 | 57 | ||
58 | /* | 58 | /* |
59 | * macros/functions for gaining access to the thread information structure | 59 | * macros/functions for gaining access to the thread information structure |
60 | * | ||
61 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
62 | */ | 60 | */ |
63 | #ifndef __ASSEMBLY__ | 61 | #ifndef __ASSEMBLY__ |
64 | 62 | ||
@@ -68,7 +66,7 @@ struct thread_info { | |||
68 | .exec_domain = &default_exec_domain, \ | 66 | .exec_domain = &default_exec_domain, \ |
69 | .flags = 0, \ | 67 | .flags = 0, \ |
70 | .cpu = 0, \ | 68 | .cpu = 0, \ |
71 | .preempt_count = 1, \ | 69 | .preempt_count = INIT_PREEMPT_COUNT, \ |
72 | .addr_limit = KERNEL_DS, \ | 70 | .addr_limit = KERNEL_DS, \ |
73 | .restart_block = { \ | 71 | .restart_block = { \ |
74 | .fn = do_no_restart_syscall, \ | 72 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/m32r/kernel/ptrace.c b/arch/m32r/kernel/ptrace.c index bf0abe9e1f73..98b8feb12ed8 100644 --- a/arch/m32r/kernel/ptrace.c +++ b/arch/m32r/kernel/ptrace.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
20 | #include <linux/err.h> | 20 | #include <linux/err.h> |
21 | #include <linux/smp.h> | 21 | #include <linux/smp.h> |
22 | #include <linux/smp_lock.h> | ||
23 | #include <linux/errno.h> | 22 | #include <linux/errno.h> |
24 | #include <linux/ptrace.h> | 23 | #include <linux/ptrace.h> |
25 | #include <linux/user.h> | 24 | #include <linux/user.h> |
diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c index 4a71df4c1b30..7274b47f4c22 100644 --- a/arch/m32r/mm/fault.c +++ b/arch/m32r/mm/fault.c | |||
@@ -196,7 +196,7 @@ survive: | |||
196 | */ | 196 | */ |
197 | addr = (address & PAGE_MASK); | 197 | addr = (address & PAGE_MASK); |
198 | set_thread_fault_code(error_code); | 198 | set_thread_fault_code(error_code); |
199 | fault = handle_mm_fault(mm, vma, addr, write); | 199 | fault = handle_mm_fault(mm, vma, addr, write ? FAULT_FLAG_WRITE : 0); |
200 | if (unlikely(fault & VM_FAULT_ERROR)) { | 200 | if (unlikely(fault & VM_FAULT_ERROR)) { |
201 | if (fault & VM_FAULT_OOM) | 201 | if (fault & VM_FAULT_OOM) |
202 | goto out_of_memory; | 202 | goto out_of_memory; |
diff --git a/arch/m68k/include/asm/thread_info_mm.h b/arch/m68k/include/asm/thread_info_mm.h index af0fda46e94b..6ea5c33b3c56 100644 --- a/arch/m68k/include/asm/thread_info_mm.h +++ b/arch/m68k/include/asm/thread_info_mm.h | |||
@@ -19,6 +19,7 @@ struct thread_info { | |||
19 | { \ | 19 | { \ |
20 | .task = &tsk, \ | 20 | .task = &tsk, \ |
21 | .exec_domain = &default_exec_domain, \ | 21 | .exec_domain = &default_exec_domain, \ |
22 | .preempt_count = INIT_PREEMPT_COUNT, \ | ||
22 | .restart_block = { \ | 23 | .restart_block = { \ |
23 | .fn = do_no_restart_syscall, \ | 24 | .fn = do_no_restart_syscall, \ |
24 | }, \ | 25 | }, \ |
diff --git a/arch/m68k/include/asm/thread_info_no.h b/arch/m68k/include/asm/thread_info_no.h index 82529f424ea3..c2bde5e24b0b 100644 --- a/arch/m68k/include/asm/thread_info_no.h +++ b/arch/m68k/include/asm/thread_info_no.h | |||
@@ -49,6 +49,7 @@ struct thread_info { | |||
49 | .exec_domain = &default_exec_domain, \ | 49 | .exec_domain = &default_exec_domain, \ |
50 | .flags = 0, \ | 50 | .flags = 0, \ |
51 | .cpu = 0, \ | 51 | .cpu = 0, \ |
52 | .preempt_count = INIT_PREEMPT_COUNT, \ | ||
52 | .restart_block = { \ | 53 | .restart_block = { \ |
53 | .fn = do_no_restart_syscall, \ | 54 | .fn = do_no_restart_syscall, \ |
54 | }, \ | 55 | }, \ |
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c index f493f03231d5..d0e35cf99fc6 100644 --- a/arch/m68k/mm/fault.c +++ b/arch/m68k/mm/fault.c | |||
@@ -155,7 +155,7 @@ good_area: | |||
155 | */ | 155 | */ |
156 | 156 | ||
157 | survive: | 157 | survive: |
158 | fault = handle_mm_fault(mm, vma, address, write); | 158 | fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); |
159 | #ifdef DEBUG | 159 | #ifdef DEBUG |
160 | printk("handle_mm_fault returns %d\n",fault); | 160 | printk("handle_mm_fault returns %d\n",fault); |
161 | #endif | 161 | #endif |
diff --git a/arch/m68knommu/kernel/process.c b/arch/m68knommu/kernel/process.c index 1e96c6eb6312..8f8f4abab2ff 100644 --- a/arch/m68knommu/kernel/process.c +++ b/arch/m68knommu/kernel/process.c | |||
@@ -290,7 +290,7 @@ void dump(struct pt_regs *fp) | |||
290 | unsigned char *tp; | 290 | unsigned char *tp; |
291 | int i; | 291 | int i; |
292 | 292 | ||
293 | printk(KERN_EMERG "\n" KERN_EMERG "CURRENT PROCESS:\n" KERN_EMERG "\n"); | 293 | printk(KERN_EMERG "\nCURRENT PROCESS:\n\n"); |
294 | printk(KERN_EMERG "COMM=%s PID=%d\n", current->comm, current->pid); | 294 | printk(KERN_EMERG "COMM=%s PID=%d\n", current->comm, current->pid); |
295 | 295 | ||
296 | if (current->mm) { | 296 | if (current->mm) { |
@@ -301,8 +301,7 @@ void dump(struct pt_regs *fp) | |||
301 | (int) current->mm->end_data, | 301 | (int) current->mm->end_data, |
302 | (int) current->mm->end_data, | 302 | (int) current->mm->end_data, |
303 | (int) current->mm->brk); | 303 | (int) current->mm->brk); |
304 | printk(KERN_EMERG "USER-STACK=%08x KERNEL-STACK=%08x\n" | 304 | printk(KERN_EMERG "USER-STACK=%08x KERNEL-STACK=%08x\n\n", |
305 | KERN_EMERG "\n", | ||
306 | (int) current->mm->start_stack, | 305 | (int) current->mm->start_stack, |
307 | (int)(((unsigned long) current) + THREAD_SIZE)); | 306 | (int)(((unsigned long) current) + THREAD_SIZE)); |
308 | } | 307 | } |
@@ -313,35 +312,35 @@ void dump(struct pt_regs *fp) | |||
313 | fp->d0, fp->d1, fp->d2, fp->d3); | 312 | fp->d0, fp->d1, fp->d2, fp->d3); |
314 | printk(KERN_EMERG "d4: %08lx d5: %08lx a0: %08lx a1: %08lx\n", | 313 | printk(KERN_EMERG "d4: %08lx d5: %08lx a0: %08lx a1: %08lx\n", |
315 | fp->d4, fp->d5, fp->a0, fp->a1); | 314 | fp->d4, fp->d5, fp->a0, fp->a1); |
316 | printk(KERN_EMERG "\n" KERN_EMERG "USP: %08x TRAPFRAME: %08x\n", | 315 | printk(KERN_EMERG "\nUSP: %08x TRAPFRAME: %08x\n", |
317 | (unsigned int) rdusp(), (unsigned int) fp); | 316 | (unsigned int) rdusp(), (unsigned int) fp); |
318 | 317 | ||
319 | printk(KERN_EMERG "\n" KERN_EMERG "CODE:"); | 318 | printk(KERN_EMERG "\nCODE:"); |
320 | tp = ((unsigned char *) fp->pc) - 0x20; | 319 | tp = ((unsigned char *) fp->pc) - 0x20; |
321 | for (sp = (unsigned long *) tp, i = 0; (i < 0x40); i += 4) { | 320 | for (sp = (unsigned long *) tp, i = 0; (i < 0x40); i += 4) { |
322 | if ((i % 0x10) == 0) | 321 | if ((i % 0x10) == 0) |
323 | printk("\n" KERN_EMERG "%08x: ", (int) (tp + i)); | 322 | printk(KERN_EMERG "%08x: ", (int) (tp + i)); |
324 | printk("%08x ", (int) *sp++); | 323 | printk("%08x ", (int) *sp++); |
325 | } | 324 | } |
326 | printk("\n" KERN_EMERG "\n"); | 325 | printk(KERN_EMERG "\n"); |
327 | 326 | ||
328 | printk(KERN_EMERG "KERNEL STACK:"); | 327 | printk(KERN_EMERG "KERNEL STACK:"); |
329 | tp = ((unsigned char *) fp) - 0x40; | 328 | tp = ((unsigned char *) fp) - 0x40; |
330 | for (sp = (unsigned long *) tp, i = 0; (i < 0xc0); i += 4) { | 329 | for (sp = (unsigned long *) tp, i = 0; (i < 0xc0); i += 4) { |
331 | if ((i % 0x10) == 0) | 330 | if ((i % 0x10) == 0) |
332 | printk("\n" KERN_EMERG "%08x: ", (int) (tp + i)); | 331 | printk(KERN_EMERG "%08x: ", (int) (tp + i)); |
333 | printk("%08x ", (int) *sp++); | 332 | printk("%08x ", (int) *sp++); |
334 | } | 333 | } |
335 | printk("\n" KERN_EMERG "\n"); | 334 | printk(KERN_EMERG "\n"); |
336 | 335 | ||
337 | printk(KERN_EMERG "USER STACK:"); | 336 | printk(KERN_EMERG "USER STACK:"); |
338 | tp = (unsigned char *) (rdusp() - 0x10); | 337 | tp = (unsigned char *) (rdusp() - 0x10); |
339 | for (sp = (unsigned long *) tp, i = 0; (i < 0x80); i += 4) { | 338 | for (sp = (unsigned long *) tp, i = 0; (i < 0x80); i += 4) { |
340 | if ((i % 0x10) == 0) | 339 | if ((i % 0x10) == 0) |
341 | printk("\n" KERN_EMERG "%08x: ", (int) (tp + i)); | 340 | printk(KERN_EMERG "%08x: ", (int) (tp + i)); |
342 | printk("%08x ", (int) *sp++); | 341 | printk("%08x ", (int) *sp++); |
343 | } | 342 | } |
344 | printk("\n" KERN_EMERG "\n"); | 343 | printk(KERN_EMERG "\n"); |
345 | } | 344 | } |
346 | 345 | ||
347 | /* | 346 | /* |
diff --git a/arch/m68knommu/kernel/traps.c b/arch/m68knommu/kernel/traps.c index 51d325343ab5..3739c8f657d7 100644 --- a/arch/m68knommu/kernel/traps.c +++ b/arch/m68knommu/kernel/traps.c | |||
@@ -111,7 +111,7 @@ static void print_this_address(unsigned long addr, int i) | |||
111 | if (i % 5) | 111 | if (i % 5) |
112 | printk(KERN_CONT " [%08lx] ", addr); | 112 | printk(KERN_CONT " [%08lx] ", addr); |
113 | else | 113 | else |
114 | printk(KERN_CONT "\n" KERN_EMERG " [%08lx] ", addr); | 114 | printk(KERN_EMERG " [%08lx] ", addr); |
115 | i++; | 115 | i++; |
116 | #endif | 116 | #endif |
117 | } | 117 | } |
@@ -137,8 +137,8 @@ static void __show_stack(struct task_struct *task, unsigned long *stack) | |||
137 | if (stack + 1 + i > endstack) | 137 | if (stack + 1 + i > endstack) |
138 | break; | 138 | break; |
139 | if (i % 8 == 0) | 139 | if (i % 8 == 0) |
140 | printk("\n" KERN_EMERG " "); | 140 | printk(KERN_EMERG " "); |
141 | printk(" %08lx", *(stack + i)); | 141 | printk(KERN_CONT " %08lx", *(stack + i)); |
142 | } | 142 | } |
143 | printk("\n"); | 143 | printk("\n"); |
144 | i = 0; | 144 | i = 0; |
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index b50b845fdd50..2db722d80d4d 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig | |||
@@ -53,6 +53,9 @@ config GENERIC_HARDIRQS_NO__DO_IRQ | |||
53 | config GENERIC_GPIO | 53 | config GENERIC_GPIO |
54 | def_bool y | 54 | def_bool y |
55 | 55 | ||
56 | config GENERIC_CSUM | ||
57 | def_bool y | ||
58 | |||
56 | config PCI | 59 | config PCI |
57 | def_bool n | 60 | def_bool n |
58 | 61 | ||
diff --git a/arch/microblaze/include/asm/atomic.h b/arch/microblaze/include/asm/atomic.h index 0de612ad7cb2..6d2e1d418be7 100644 --- a/arch/microblaze/include/asm/atomic.h +++ b/arch/microblaze/include/asm/atomic.h | |||
@@ -1,95 +1,7 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_ATOMIC_H | 1 | #ifndef _ASM_MICROBLAZE_ATOMIC_H |
10 | #define _ASM_MICROBLAZE_ATOMIC_H | 2 | #define _ASM_MICROBLAZE_ATOMIC_H |
11 | 3 | ||
12 | #include <linux/types.h> | 4 | #include <asm-generic/atomic.h> |
13 | #include <linux/compiler.h> /* likely */ | ||
14 | #include <asm/system.h> /* local_irq_XXX and friends */ | ||
15 | |||
16 | #define ATOMIC_INIT(i) { (i) } | ||
17 | #define atomic_read(v) ((v)->counter) | ||
18 | #define atomic_set(v, i) (((v)->counter) = (i)) | ||
19 | |||
20 | #define atomic_inc(v) (atomic_add_return(1, (v))) | ||
21 | #define atomic_dec(v) (atomic_sub_return(1, (v))) | ||
22 | |||
23 | #define atomic_add(i, v) (atomic_add_return(i, (v))) | ||
24 | #define atomic_sub(i, v) (atomic_sub_return(i, (v))) | ||
25 | |||
26 | #define atomic_inc_return(v) (atomic_add_return(1, (v))) | ||
27 | #define atomic_dec_return(v) (atomic_sub_return(1, (v))) | ||
28 | |||
29 | #define atomic_inc_and_test(v) (atomic_add_return(1, (v)) == 0) | ||
30 | #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0) | ||
31 | |||
32 | #define atomic_inc_not_zero(v) (atomic_add_unless((v), 1, 0)) | ||
33 | |||
34 | #define atomic_sub_and_test(i, v) (atomic_sub_return((i), (v)) == 0) | ||
35 | |||
36 | static inline int atomic_cmpxchg(atomic_t *v, int old, int new) | ||
37 | { | ||
38 | int ret; | ||
39 | unsigned long flags; | ||
40 | |||
41 | local_irq_save(flags); | ||
42 | ret = v->counter; | ||
43 | if (likely(ret == old)) | ||
44 | v->counter = new; | ||
45 | local_irq_restore(flags); | ||
46 | |||
47 | return ret; | ||
48 | } | ||
49 | |||
50 | static inline int atomic_add_unless(atomic_t *v, int a, int u) | ||
51 | { | ||
52 | int c, old; | ||
53 | |||
54 | c = atomic_read(v); | ||
55 | while (c != u && (old = atomic_cmpxchg((v), c, c + a)) != c) | ||
56 | c = old; | ||
57 | return c != u; | ||
58 | } | ||
59 | |||
60 | static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) | ||
61 | { | ||
62 | unsigned long flags; | ||
63 | |||
64 | local_irq_save(flags); | ||
65 | *addr &= ~mask; | ||
66 | local_irq_restore(flags); | ||
67 | } | ||
68 | |||
69 | /** | ||
70 | * atomic_add_return - add and return | ||
71 | * @i: integer value to add | ||
72 | * @v: pointer of type atomic_t | ||
73 | * | ||
74 | * Atomically adds @i to @v and returns @i + @v | ||
75 | */ | ||
76 | static inline int atomic_add_return(int i, atomic_t *v) | ||
77 | { | ||
78 | unsigned long flags; | ||
79 | int val; | ||
80 | |||
81 | local_irq_save(flags); | ||
82 | val = v->counter; | ||
83 | v->counter = val += i; | ||
84 | local_irq_restore(flags); | ||
85 | |||
86 | return val; | ||
87 | } | ||
88 | |||
89 | static inline int atomic_sub_return(int i, atomic_t *v) | ||
90 | { | ||
91 | return atomic_add_return(-i, v); | ||
92 | } | ||
93 | 5 | ||
94 | /* | 6 | /* |
95 | * Atomically test *v and decrement if it is greater than 0. | 7 | * Atomically test *v and decrement if it is greater than 0. |
@@ -109,15 +21,4 @@ static inline int atomic_dec_if_positive(atomic_t *v) | |||
109 | return res; | 21 | return res; |
110 | } | 22 | } |
111 | 23 | ||
112 | #define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) | ||
113 | #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) | ||
114 | |||
115 | /* Atomic operations are already serializing */ | ||
116 | #define smp_mb__before_atomic_dec() barrier() | ||
117 | #define smp_mb__after_atomic_dec() barrier() | ||
118 | #define smp_mb__before_atomic_inc() barrier() | ||
119 | #define smp_mb__after_atomic_inc() barrier() | ||
120 | |||
121 | #include <asm-generic/atomic-long.h> | ||
122 | |||
123 | #endif /* _ASM_MICROBLAZE_ATOMIC_H */ | 24 | #endif /* _ASM_MICROBLAZE_ATOMIC_H */ |
diff --git a/arch/microblaze/include/asm/bitops.h b/arch/microblaze/include/asm/bitops.h index d6df1fd4e1e8..a72468f15c8b 100644 --- a/arch/microblaze/include/asm/bitops.h +++ b/arch/microblaze/include/asm/bitops.h | |||
@@ -1,27 +1 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_BITOPS_H | ||
10 | #define _ASM_MICROBLAZE_BITOPS_H | ||
11 | |||
12 | /* | ||
13 | * Copyright 1992, Linus Torvalds. | ||
14 | */ | ||
15 | |||
16 | #include <asm/byteorder.h> /* swab32 */ | ||
17 | #include <asm/system.h> /* save_flags */ | ||
18 | |||
19 | /* | ||
20 | * clear_bit() doesn't provide any barrier for the compiler. | ||
21 | */ | ||
22 | #define smp_mb__before_clear_bit() barrier() | ||
23 | #define smp_mb__after_clear_bit() barrier() | ||
24 | #include <asm-generic/bitops.h> | #include <asm-generic/bitops.h> | |
25 | #include <asm-generic/bitops/__fls.h> | ||
26 | |||
27 | #endif /* _ASM_MICROBLAZE_BITOPS_H */ | ||
diff --git a/arch/microblaze/include/asm/bug.h b/arch/microblaze/include/asm/bug.h index 8eb2cdde11d7..b12fd89e42e9 100644 --- a/arch/microblaze/include/asm/bug.h +++ b/arch/microblaze/include/asm/bug.h | |||
@@ -1,15 +1 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_BUG_H | ||
10 | #define _ASM_MICROBLAZE_BUG_H | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | #include <asm-generic/bug.h> | #include <asm-generic/bug.h> | |
14 | |||
15 | #endif /* _ASM_MICROBLAZE_BUG_H */ | ||
diff --git a/arch/microblaze/include/asm/bugs.h b/arch/microblaze/include/asm/bugs.h index f2c6593653fb..61791e1ad9f5 100644 --- a/arch/microblaze/include/asm/bugs.h +++ b/arch/microblaze/include/asm/bugs.h | |||
@@ -1,17 +1 @@ | |||
1 | /* | #include <asm-generic/bugs.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_BUGS_H | ||
10 | #define _ASM_MICROBLAZE_BUGS_H | ||
11 | |||
12 | static inline void check_bugs(void) | ||
13 | { | ||
14 | /* nothing to do */ | ||
15 | } | ||
16 | |||
17 | #endif /* _ASM_MICROBLAZE_BUGS_H */ | ||
diff --git a/arch/microblaze/include/asm/checksum.h b/arch/microblaze/include/asm/checksum.h index 97ea46b5cf80..128bf03b54b7 100644 --- a/arch/microblaze/include/asm/checksum.h +++ b/arch/microblaze/include/asm/checksum.h | |||
@@ -10,12 +10,11 @@ | |||
10 | #ifndef _ASM_MICROBLAZE_CHECKSUM_H | 10 | #ifndef _ASM_MICROBLAZE_CHECKSUM_H |
11 | #define _ASM_MICROBLAZE_CHECKSUM_H | 11 | #define _ASM_MICROBLAZE_CHECKSUM_H |
12 | 12 | ||
13 | #include <linux/in6.h> | ||
14 | |||
15 | /* | 13 | /* |
16 | * computes the checksum of the TCP/UDP pseudo-header | 14 | * computes the checksum of the TCP/UDP pseudo-header |
17 | * returns a 16-bit checksum, already complemented | 15 | * returns a 16-bit checksum, already complemented |
18 | */ | 16 | */ |
17 | #define csum_tcpudp_nofold csum_tcpudp_nofold | ||
19 | static inline __wsum | 18 | static inline __wsum |
20 | csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, | 19 | csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, |
21 | unsigned short proto, __wsum sum) | 20 | unsigned short proto, __wsum sum) |
@@ -30,71 +29,6 @@ csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, | |||
30 | return sum; | 29 | return sum; |
31 | } | 30 | } |
32 | 31 | ||
33 | /* | 32 | #include <asm-generic/checksum.h> |
34 | * computes the checksum of a memory block at buff, length len, | ||
35 | * and adds in "sum" (32-bit) | ||
36 | * | ||
37 | * returns a 32-bit number suitable for feeding into itself | ||
38 | * or csum_tcpudp_magic | ||
39 | * | ||
40 | * this function must be called with even lengths, except | ||
41 | * for the last fragment, which may be odd | ||
42 | * | ||
43 | * it's best to have buff aligned on a 32-bit boundary | ||
44 | */ | ||
45 | extern __wsum csum_partial(const void *buff, int len, __wsum sum); | ||
46 | |||
47 | /* | ||
48 | * the same as csum_partial, but copies from src while it | ||
49 | * checksums | ||
50 | * | ||
51 | * here even more important to align src and dst on a 32-bit (or even | ||
52 | * better 64-bit) boundary | ||
53 | */ | ||
54 | extern __wsum csum_partial_copy(const void *src, void *dst, int len, | ||
55 | __wsum sum); | ||
56 | |||
57 | /* | ||
58 | * the same as csum_partial_copy, but copies from user space. | ||
59 | * | ||
60 | * here even more important to align src and dst on a 32-bit (or even | ||
61 | * better 64-bit) boundary | ||
62 | */ | ||
63 | extern __wsum csum_partial_copy_from_user(const void __user *src, void *dst, | ||
64 | int len, __wsum sum, int *csum_err); | ||
65 | |||
66 | #define csum_partial_copy_nocheck(src, dst, len, sum) \ | ||
67 | csum_partial_copy((src), (dst), (len), (sum)) | ||
68 | |||
69 | /* | ||
70 | * This is a version of ip_compute_csum() optimized for IP headers, | ||
71 | * which always checksum on 4 octet boundaries. | ||
72 | * | ||
73 | */ | ||
74 | extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl); | ||
75 | |||
76 | /* | ||
77 | * Fold a partial checksum | ||
78 | */ | ||
79 | static inline __sum16 csum_fold(__wsum csum) | ||
80 | { | ||
81 | u32 sum = (__force u32)csum; | ||
82 | sum = (sum & 0xffff) + (sum >> 16); | ||
83 | sum = (sum & 0xffff) + (sum >> 16); | ||
84 | return (__force __sum16)~sum; | ||
85 | } | ||
86 | |||
87 | static inline __sum16 | ||
88 | csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len, | ||
89 | unsigned short proto, __wsum sum) | ||
90 | { | ||
91 | return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum)); | ||
92 | } | ||
93 | |||
94 | /* | ||
95 | * this routine is used for miscellaneous IP-like checksums, mainly | ||
96 | * in icmp.c | ||
97 | */ | ||
98 | extern __sum16 ip_compute_csum(const void *buff, int len); | ||
99 | 33 | ||
100 | #endif /* _ASM_MICROBLAZE_CHECKSUM_H */ | 34 | #endif /* _ASM_MICROBLAZE_CHECKSUM_H */ |
diff --git a/arch/microblaze/include/asm/fb.h b/arch/microblaze/include/asm/fb.h new file mode 100644 index 000000000000..3a4988e8df45 --- /dev/null +++ b/arch/microblaze/include/asm/fb.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/fb.h> | |||
diff --git a/arch/microblaze/include/asm/hardirq.h b/arch/microblaze/include/asm/hardirq.h index 0f2d6b013e11..41e1e1aa36ac 100644 --- a/arch/microblaze/include/asm/hardirq.h +++ b/arch/microblaze/include/asm/hardirq.h | |||
@@ -9,21 +9,11 @@ | |||
9 | #ifndef _ASM_MICROBLAZE_HARDIRQ_H | 9 | #ifndef _ASM_MICROBLAZE_HARDIRQ_H |
10 | #define _ASM_MICROBLAZE_HARDIRQ_H | 10 | #define _ASM_MICROBLAZE_HARDIRQ_H |
11 | 11 | ||
12 | #include <linux/cache.h> | ||
13 | #include <linux/irq.h> | ||
14 | #include <asm/irq.h> | ||
15 | #include <asm/current.h> | ||
16 | #include <linux/ptrace.h> | ||
17 | |||
18 | /* should be defined in each interrupt controller driver */ | 12 | /* should be defined in each interrupt controller driver */ |
19 | extern unsigned int get_irq(struct pt_regs *regs); | 13 | extern unsigned int get_irq(struct pt_regs *regs); |
20 | 14 | ||
21 | typedef struct { | 15 | #define ack_bad_irq ack_bad_irq |
22 | unsigned int __softirq_pending; | ||
23 | } ____cacheline_aligned irq_cpustat_t; | ||
24 | |||
25 | void ack_bad_irq(unsigned int irq); | 16 | void ack_bad_irq(unsigned int irq); |
26 | 17 | #include <asm-generic/hardirq.h> | |
27 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ | ||
28 | 18 | ||
29 | #endif /* _ASM_MICROBLAZE_HARDIRQ_H */ | 19 | #endif /* _ASM_MICROBLAZE_HARDIRQ_H */ |
diff --git a/arch/microblaze/include/asm/ioctls.h b/arch/microblaze/include/asm/ioctls.h index 03582b249204..ec34c760665e 100644 --- a/arch/microblaze/include/asm/ioctls.h +++ b/arch/microblaze/include/asm/ioctls.h | |||
@@ -1,91 +1 @@ | |||
1 | /* | #include <asm-generic/ioctls.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_IOCTLS_H | ||
10 | #define _ASM_MICROBLAZE_IOCTLS_H | ||
11 | |||
12 | #include <linux/ioctl.h> | ||
13 | |||
14 | /* 0x54 is just a magic number to make these relatively unique ('T') */ | ||
15 | |||
16 | #define TCGETS 0x5401 | ||
17 | #define TCSETS 0x5402 | ||
18 | #define TCSETSW 0x5403 | ||
19 | #define TCSETSF 0x5404 | ||
20 | #define TCGETA 0x5405 | ||
21 | #define TCSETA 0x5406 | ||
22 | #define TCSETAW 0x5407 | ||
23 | #define TCSETAF 0x5408 | ||
24 | #define TCSBRK 0x5409 | ||
25 | #define TCXONC 0x540A | ||
26 | #define TCFLSH 0x540B | ||
27 | #define TIOCEXCL 0x540C | ||
28 | #define TIOCNXCL 0x540D | ||
29 | #define TIOCSCTTY 0x540E | ||
30 | #define TIOCGPGRP 0x540F | ||
31 | #define TIOCSPGRP 0x5410 | ||
32 | #define TIOCOUTQ 0x5411 | ||
33 | #define TIOCSTI 0x5412 | ||
34 | #define TIOCGWINSZ 0x5413 | ||
35 | #define TIOCSWINSZ 0x5414 | ||
36 | #define TIOCMGET 0x5415 | ||
37 | #define TIOCMBIS 0x5416 | ||
38 | #define TIOCMBIC 0x5417 | ||
39 | #define TIOCMSET 0x5418 | ||
40 | #define TIOCGSOFTCAR 0x5419 | ||
41 | #define TIOCSSOFTCAR 0x541A | ||
42 | #define FIONREAD 0x541B | ||
43 | #define TIOCINQ FIONREAD | ||
44 | #define TIOCLINUX 0x541C | ||
45 | #define TIOCCONS 0x541D | ||
46 | #define TIOCGSERIAL 0x541E | ||
47 | #define TIOCSSERIAL 0x541F | ||
48 | #define TIOCPKT 0x5420 | ||
49 | #define FIONBIO 0x5421 | ||
50 | #define TIOCNOTTY 0x5422 | ||
51 | #define TIOCSETD 0x5423 | ||
52 | #define TIOCGETD 0x5424 | ||
53 | #define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ | ||
54 | #define TIOCTTYGSTRUCT 0x5426 /* For debugging only */ | ||
55 | #define TIOCSBRK 0x5427 /* BSD compatibility */ | ||
56 | #define TIOCCBRK 0x5428 /* BSD compatibility */ | ||
57 | #define TIOCGSID 0x5429 /* Return the session ID of FD */ | ||
58 | /* Get Pty Number (of pty-mux device) */ | ||
59 | #define TIOCGPTN _IOR('T', 0x30, unsigned int) | ||
60 | #define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ | ||
61 | |||
62 | #define FIONCLEX 0x5450 /* these numbers need to be adjusted. */ | ||
63 | #define FIOCLEX 0x5451 | ||
64 | #define FIOASYNC 0x5452 | ||
65 | #define TIOCSERCONFIG 0x5453 | ||
66 | #define TIOCSERGWILD 0x5454 | ||
67 | #define TIOCSERSWILD 0x5455 | ||
68 | #define TIOCGLCKTRMIOS 0x5456 | ||
69 | #define TIOCSLCKTRMIOS 0x5457 | ||
70 | #define TIOCSERGSTRUCT 0x5458 /* For debugging only */ | ||
71 | #define TIOCSERGETLSR 0x5459 /* Get line status register */ | ||
72 | #define TIOCSERGETMULTI 0x545A /* Get multiport config */ | ||
73 | #define TIOCSERSETMULTI 0x545B /* Set multiport config */ | ||
74 | |||
75 | #define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ | ||
76 | #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ | ||
77 | |||
78 | #define FIOQSIZE 0x545E | ||
79 | |||
80 | /* Used for packet mode */ | ||
81 | #define TIOCPKT_DATA 0 | ||
82 | #define TIOCPKT_FLUSHREAD 1 | ||
83 | #define TIOCPKT_FLUSHWRITE 2 | ||
84 | #define TIOCPKT_STOP 4 | ||
85 | #define TIOCPKT_START 8 | ||
86 | #define TIOCPKT_NOSTOP 16 | ||
87 | #define TIOCPKT_DOSTOP 32 | ||
88 | |||
89 | #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ | ||
90 | |||
91 | #endif /* _ASM_MICROBLAZE_IOCTLS_H */ | ||
diff --git a/arch/microblaze/include/asm/ipcbuf.h b/arch/microblaze/include/asm/ipcbuf.h index b056fa420654..84c7e51cb6d0 100644 --- a/arch/microblaze/include/asm/ipcbuf.h +++ b/arch/microblaze/include/asm/ipcbuf.h | |||
@@ -1,36 +1 @@ | |||
1 | /* | #include <asm-generic/ipcbuf.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_IPCBUF_H | ||
10 | #define _ASM_MICROBLAZE_IPCBUF_H | ||
11 | |||
12 | /* | ||
13 | * The user_ipc_perm structure for microblaze architecture. | ||
14 | * Note extra padding because this structure is passed back and forth | ||
15 | * between kernel and user space. | ||
16 | * | ||
17 | * Pad space is left for: | ||
18 | * - 32-bit mode_t and seq | ||
19 | * - 2 miscellaneous 32-bit values | ||
20 | */ | ||
21 | |||
22 | struct ipc64_perm { | ||
23 | __kernel_key_t key; | ||
24 | __kernel_uid32_t uid; | ||
25 | __kernel_gid32_t gid; | ||
26 | __kernel_uid32_t cuid; | ||
27 | __kernel_gid32_t cgid; | ||
28 | __kernel_mode_t mode; | ||
29 | unsigned short __pad1; | ||
30 | unsigned short seq; | ||
31 | unsigned short __pad2; | ||
32 | unsigned long __unused1; | ||
33 | unsigned long __unused2; | ||
34 | }; | ||
35 | |||
36 | #endif /* _ASM_MICROBLAZE_IPCBUF_H */ | ||
diff --git a/arch/microblaze/include/asm/irq.h b/arch/microblaze/include/asm/irq.h index db515deaa720..90f050535ebe 100644 --- a/arch/microblaze/include/asm/irq.h +++ b/arch/microblaze/include/asm/irq.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #define _ASM_MICROBLAZE_IRQ_H | 10 | #define _ASM_MICROBLAZE_IRQ_H |
11 | 11 | ||
12 | #define NR_IRQS 32 | 12 | #define NR_IRQS 32 |
13 | #include <asm-generic/irq.h> | ||
13 | 14 | ||
14 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
15 | 16 | ||
@@ -17,11 +18,6 @@ extern unsigned int nr_irq; | |||
17 | 18 | ||
18 | #define NO_IRQ (-1) | 19 | #define NO_IRQ (-1) |
19 | 20 | ||
20 | static inline int irq_canonicalize(int irq) | ||
21 | { | ||
22 | return irq; | ||
23 | } | ||
24 | |||
25 | struct pt_regs; | 21 | struct pt_regs; |
26 | extern void do_IRQ(struct pt_regs *regs); | 22 | extern void do_IRQ(struct pt_regs *regs); |
27 | 23 | ||
diff --git a/arch/microblaze/include/asm/mman.h b/arch/microblaze/include/asm/mman.h index 4914b1329445..8eebf89f5ab1 100644 --- a/arch/microblaze/include/asm/mman.h +++ b/arch/microblaze/include/asm/mman.h | |||
@@ -1,25 +1 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_MMAN_H | ||
10 | #define _ASM_MICROBLAZE_MMAN_H | ||
11 | |||
12 | #include <asm-generic/mman.h> | #include <asm-generic/mman.h> | |
13 | |||
14 | #define MAP_GROWSDOWN 0x0100 /* stack-like segment */ | ||
15 | #define MAP_DENYWRITE 0x0800 /* ETXTBSY */ | ||
16 | #define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ | ||
17 | #define MAP_LOCKED 0x2000 /* pages are locked */ | ||
18 | #define MAP_NORESERVE 0x4000 /* don't check for reservations */ | ||
19 | #define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ | ||
20 | #define MAP_NONBLOCK 0x10000 /* do not block on IO */ | ||
21 | |||
22 | #define MCL_CURRENT 1 /* lock all current mappings */ | ||
23 | #define MCL_FUTURE 2 /* lock all future mappings */ | ||
24 | |||
25 | #endif /* _ASM_MICROBLAZE_MMAN_H */ | ||
diff --git a/arch/microblaze/include/asm/mmu.h b/arch/microblaze/include/asm/mmu.h index 66cad6a99d77..8d6a654ceffb 100644 --- a/arch/microblaze/include/asm/mmu.h +++ b/arch/microblaze/include/asm/mmu.h | |||
@@ -12,12 +12,7 @@ | |||
12 | #define _ASM_MICROBLAZE_MMU_H | 12 | #define _ASM_MICROBLAZE_MMU_H |
13 | 13 | ||
14 | # ifndef CONFIG_MMU | 14 | # ifndef CONFIG_MMU |
15 | # ifndef __ASSEMBLY__ | 15 | # include <asm-generic/mmu.h> |
16 | typedef struct { | ||
17 | struct vm_list_struct *vmlist; | ||
18 | unsigned long end_brk; | ||
19 | } mm_context_t; | ||
20 | # endif /* __ASSEMBLY__ */ | ||
21 | # else /* CONFIG_MMU */ | 16 | # else /* CONFIG_MMU */ |
22 | # ifdef __KERNEL__ | 17 | # ifdef __KERNEL__ |
23 | # ifndef __ASSEMBLY__ | 18 | # ifndef __ASSEMBLY__ |
diff --git a/arch/microblaze/include/asm/mmu_context.h b/arch/microblaze/include/asm/mmu_context.h index 385fed16bbfb..24eab1674d3e 100644 --- a/arch/microblaze/include/asm/mmu_context.h +++ b/arch/microblaze/include/asm/mmu_context.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifdef CONFIG_MMU | 1 | #ifdef CONFIG_MMU |
2 | # include "mmu_context_mm.h" | 2 | # include "mmu_context_mm.h" |
3 | #else | 3 | #else |
4 | # include "mmu_context_no.h" | 4 | # include <asm-generic/mmu_context.h> |
5 | #endif | 5 | #endif |
diff --git a/arch/microblaze/include/asm/mmu_context_no.h b/arch/microblaze/include/asm/mmu_context_no.h deleted file mode 100644 index ba5567190154..000000000000 --- a/arch/microblaze/include/asm/mmu_context_no.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> | ||
3 | * Copyright (C) 2008-2009 PetaLogix | ||
4 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | |||
11 | #ifndef _ASM_MICROBLAZE_MMU_CONTEXT_H | ||
12 | #define _ASM_MICROBLAZE_MMU_CONTEXT_H | ||
13 | |||
14 | # define init_new_context(tsk, mm) ({ 0; }) | ||
15 | |||
16 | # define enter_lazy_tlb(mm, tsk) do {} while (0) | ||
17 | # define change_mm_context(old, ctx, _pml4) do {} while (0) | ||
18 | # define destroy_context(mm) do {} while (0) | ||
19 | # define deactivate_mm(tsk, mm) do {} while (0) | ||
20 | # define switch_mm(prev, next, tsk) do {} while (0) | ||
21 | # define activate_mm(prev, next) do {} while (0) | ||
22 | |||
23 | #endif /* _ASM_MICROBLAZE_MMU_CONTEXT_H */ | ||
diff --git a/arch/microblaze/include/asm/module.h b/arch/microblaze/include/asm/module.h index 914565a90315..7be1347fce42 100644 --- a/arch/microblaze/include/asm/module.h +++ b/arch/microblaze/include/asm/module.h | |||
@@ -9,6 +9,8 @@ | |||
9 | #ifndef _ASM_MICROBLAZE_MODULE_H | 9 | #ifndef _ASM_MICROBLAZE_MODULE_H |
10 | #define _ASM_MICROBLAZE_MODULE_H | 10 | #define _ASM_MICROBLAZE_MODULE_H |
11 | 11 | ||
12 | #include <asm-generic/module.h> | ||
13 | |||
12 | /* Microblaze Relocations */ | 14 | /* Microblaze Relocations */ |
13 | #define R_MICROBLAZE_NONE 0 | 15 | #define R_MICROBLAZE_NONE 0 |
14 | #define R_MICROBLAZE_32 1 | 16 | #define R_MICROBLAZE_32 1 |
@@ -24,14 +26,6 @@ | |||
24 | /* Keep this the last entry. */ | 26 | /* Keep this the last entry. */ |
25 | #define R_MICROBLAZE_NUM 11 | 27 | #define R_MICROBLAZE_NUM 11 |
26 | 28 | ||
27 | struct mod_arch_specific { | ||
28 | int foo; | ||
29 | }; | ||
30 | |||
31 | #define Elf_Shdr Elf32_Shdr | ||
32 | #define Elf_Sym Elf32_Sym | ||
33 | #define Elf_Ehdr Elf32_Ehdr | ||
34 | |||
35 | typedef struct { volatile int counter; } module_t; | 29 | typedef struct { volatile int counter; } module_t; |
36 | 30 | ||
37 | #endif /* _ASM_MICROBLAZE_MODULE_H */ | 31 | #endif /* _ASM_MICROBLAZE_MODULE_H */ |
diff --git a/arch/microblaze/include/asm/msgbuf.h b/arch/microblaze/include/asm/msgbuf.h index 09dd97097211..809134c644a6 100644 --- a/arch/microblaze/include/asm/msgbuf.h +++ b/arch/microblaze/include/asm/msgbuf.h | |||
@@ -1,31 +1 @@ | |||
1 | #ifndef _ASM_MICROBLAZE_MSGBUF_H | #include <asm-generic/msgbuf.h> | |
2 | #define _ASM_MICROBLAZE_MSGBUF_H | ||
3 | |||
4 | /* | ||
5 | * The msqid64_ds structure for microblaze architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 64-bit time_t to solve y2038 problem | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct msqid64_ds { | ||
15 | struct ipc64_perm msg_perm; | ||
16 | __kernel_time_t msg_stime; /* last msgsnd time */ | ||
17 | unsigned long __unused1; | ||
18 | __kernel_time_t msg_rtime; /* last msgrcv time */ | ||
19 | unsigned long __unused2; | ||
20 | __kernel_time_t msg_ctime; /* last change time */ | ||
21 | unsigned long __unused3; | ||
22 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
23 | unsigned long msg_qnum; /* number of messages in queue */ | ||
24 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
25 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
26 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
27 | unsigned long __unused4; | ||
28 | unsigned long __unused5; | ||
29 | }; | ||
30 | |||
31 | #endif /* _ASM_MICROBLAZE_MSGBUF_H */ | ||
diff --git a/arch/microblaze/include/asm/param.h b/arch/microblaze/include/asm/param.h index 8c538a49616d..965d45427975 100644 --- a/arch/microblaze/include/asm/param.h +++ b/arch/microblaze/include/asm/param.h | |||
@@ -1,30 +1 @@ | |||
1 | /* | #include <asm-generic/param.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_PARAM_H | ||
10 | #define _ASM_MICROBLAZE_PARAM_H | ||
11 | |||
12 | #ifdef __KERNEL__ | ||
13 | #define HZ CONFIG_HZ /* internal kernel timer frequency */ | ||
14 | #define USER_HZ 100 /* for user interfaces in "ticks" */ | ||
15 | #define CLOCKS_PER_SEC (USER_HZ) /* frequency at which times() counts */ | ||
16 | #endif /* __KERNEL__ */ | ||
17 | |||
18 | #ifndef HZ | ||
19 | #define HZ 100 | ||
20 | #endif | ||
21 | |||
22 | #define EXEC_PAGESIZE 4096 | ||
23 | |||
24 | #ifndef NOGROUP | ||
25 | #define NOGROUP (-1) | ||
26 | #endif | ||
27 | |||
28 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ | ||
29 | |||
30 | #endif /* _ASM_MICROBLAZE_PARAM_H */ | ||
diff --git a/arch/microblaze/include/asm/parport.h b/arch/microblaze/include/asm/parport.h new file mode 100644 index 000000000000..cf252af64590 --- /dev/null +++ b/arch/microblaze/include/asm/parport.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/parport.h> | |||
diff --git a/arch/microblaze/include/asm/pci.h b/arch/microblaze/include/asm/pci.h index ca03794cf3f0..9f0df5faf2c8 100644 --- a/arch/microblaze/include/asm/pci.h +++ b/arch/microblaze/include/asm/pci.h | |||
@@ -1 +1 @@ | |||
#include <linux/io.h> | #include <asm-generic/pci.h> | ||
diff --git a/arch/microblaze/include/asm/posix_types.h b/arch/microblaze/include/asm/posix_types.h index 8c758b231f37..0e15039673e3 100644 --- a/arch/microblaze/include/asm/posix_types.h +++ b/arch/microblaze/include/asm/posix_types.h | |||
@@ -1,73 +1,9 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_POSIX_TYPES_H | 1 | #ifndef _ASM_MICROBLAZE_POSIX_TYPES_H |
10 | #define _ASM_MICROBLAZE_POSIX_TYPES_H | 2 | #define _ASM_MICROBLAZE_POSIX_TYPES_H |
11 | 3 | ||
12 | /* | ||
13 | * This file is generally used by user-level software, so you need to | ||
14 | * be a little careful about namespace pollution etc. Also, we cannot | ||
15 | * assume GCC is being used. | ||
16 | */ | ||
17 | |||
18 | typedef unsigned long __kernel_ino_t; | ||
19 | typedef unsigned short __kernel_mode_t; | 4 | typedef unsigned short __kernel_mode_t; |
20 | typedef unsigned int __kernel_nlink_t; | 5 | #define __kernel_mode_t __kernel_mode_t |
21 | typedef long __kernel_off_t; | ||
22 | typedef int __kernel_pid_t; | ||
23 | typedef unsigned int __kernel_ipc_pid_t; | ||
24 | typedef unsigned int __kernel_uid_t; | ||
25 | typedef unsigned int __kernel_gid_t; | ||
26 | typedef unsigned long __kernel_size_t; | ||
27 | typedef long __kernel_ssize_t; | ||
28 | typedef int __kernel_ptrdiff_t; | ||
29 | typedef long __kernel_time_t; | ||
30 | typedef long __kernel_suseconds_t; | ||
31 | typedef long __kernel_clock_t; | ||
32 | typedef int __kernel_timer_t; | ||
33 | typedef int __kernel_clockid_t; | ||
34 | typedef int __kernel_daddr_t; | ||
35 | typedef char *__kernel_caddr_t; | ||
36 | typedef unsigned short __kernel_uid16_t; | ||
37 | typedef unsigned short __kernel_gid16_t; | ||
38 | typedef unsigned int __kernel_uid32_t; | ||
39 | typedef unsigned int __kernel_gid32_t; | ||
40 | |||
41 | typedef unsigned int __kernel_old_uid_t; | ||
42 | typedef unsigned int __kernel_old_gid_t; | ||
43 | typedef unsigned int __kernel_old_dev_t; | ||
44 | |||
45 | #ifdef __GNUC__ | ||
46 | typedef long long __kernel_loff_t; | ||
47 | #endif | ||
48 | |||
49 | typedef struct { | ||
50 | #if defined(__KERNEL__) || defined(__USE_ALL) | ||
51 | int val[2]; | ||
52 | #else /* !defined(__KERNEL__) && !defined(__USE_ALL) */ | ||
53 | int __val[2]; | ||
54 | #endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */ | ||
55 | } __kernel_fsid_t; | ||
56 | |||
57 | #if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) | ||
58 | |||
59 | #undef __FD_SET | ||
60 | #define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) | ||
61 | |||
62 | #undef __FD_CLR | ||
63 | #define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) | ||
64 | |||
65 | #undef __FD_ISSET | ||
66 | #define __FD_ISSET(d, set) (!!((set)->fds_bits[__FDELT(d)] & __FDMASK(d))) | ||
67 | |||
68 | #undef __FD_ZERO | ||
69 | #define __FD_ZERO(fdsetp) (memset(fdsetp, 0, sizeof(*(fd_set *)fdsetp))) | ||
70 | 6 | ||
71 | #endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */ | 7 | #include <asm-generic/posix_types.h> |
72 | 8 | ||
73 | #endif /* _ASM_MICROBLAZE_POSIX_TYPES_H */ | 9 | #endif /* _ASM_MICROBLAZE_POSIX_TYPES_H */ |
diff --git a/arch/microblaze/include/asm/scatterlist.h b/arch/microblaze/include/asm/scatterlist.h index 08ff1d049b42..35d786fe93ae 100644 --- a/arch/microblaze/include/asm/scatterlist.h +++ b/arch/microblaze/include/asm/scatterlist.h | |||
@@ -1,28 +1 @@ | |||
1 | /* | #include <asm-generic/scatterlist.h> | |
2 | * Copyright (C) 2008 Michal Simek <monstr@monstr.eu> | ||
3 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
4 | * | ||
5 | * This file is subject to the terms and conditions of the GNU General Public | ||
6 | * License. See the file "COPYING" in the main directory of this archive | ||
7 | * for more details. | ||
8 | */ | ||
9 | |||
10 | #ifndef _ASM_MICROBLAZE_SCATTERLIST_H | ||
11 | #define _ASM_MICROBLAZE_SCATTERLIST_H | ||
12 | |||
13 | struct scatterlist { | ||
14 | #ifdef CONFIG_DEBUG_SG | ||
15 | unsigned long sg_magic; | ||
16 | #endif | ||
17 | unsigned long page_link; | ||
18 | dma_addr_t dma_address; | ||
19 | unsigned int offset; | ||
20 | unsigned int length; | ||
21 | }; | ||
22 | |||
23 | #define sg_dma_address(sg) ((sg)->dma_address) | ||
24 | #define sg_dma_len(sg) ((sg)->length) | ||
25 | |||
26 | #define ISA_DMA_THRESHOLD (~0UL) | ||
27 | |||
28 | #endif /* _ASM_MICROBLAZE_SCATTERLIST_H */ | ||
diff --git a/arch/microblaze/include/asm/sembuf.h b/arch/microblaze/include/asm/sembuf.h index b804ed71a57e..7673b83cfef7 100644 --- a/arch/microblaze/include/asm/sembuf.h +++ b/arch/microblaze/include/asm/sembuf.h | |||
@@ -1,34 +1 @@ | |||
1 | /* | #include <asm-generic/sembuf.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_SEMBUF_H | ||
10 | #define _ASM_MICROBLAZE_SEMBUF_H | ||
11 | |||
12 | /* | ||
13 | * The semid64_ds structure for microblaze architecture. | ||
14 | * Note extra padding because this structure is passed back and forth | ||
15 | * between kernel and user space. | ||
16 | * | ||
17 | * Pad space is left for: | ||
18 | * - 64-bit time_t to solve y2038 problem | ||
19 | * - 2 miscellaneous 32-bit values | ||
20 | */ | ||
21 | |||
22 | struct semid64_ds { | ||
23 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | ||
24 | __kernel_time_t sem_otime; /* last semop time */ | ||
25 | unsigned long __unused1; | ||
26 | __kernel_time_t sem_ctime; /* last change time */ | ||
27 | unsigned long __unused2; | ||
28 | unsigned long sem_nsems; /* no. of semaphores in array */ | ||
29 | unsigned long __unused3; | ||
30 | unsigned long __unused4; | ||
31 | }; | ||
32 | |||
33 | |||
34 | #endif /* _ASM_MICROBLAZE_SEMBUF_H */ | ||
diff --git a/arch/microblaze/include/asm/serial.h b/arch/microblaze/include/asm/serial.h index 39bfc8ce6af5..a0cb0caff152 100644 --- a/arch/microblaze/include/asm/serial.h +++ b/arch/microblaze/include/asm/serial.h | |||
@@ -1,14 +1 @@ | |||
1 | /* | #include <asm-generic/serial.h> | |
2 | * Copyright (C) 2009 Michal Simek <monstr@monstr.eu> | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_SERIAL_H | ||
10 | #define _ASM_MICROBLAZE_SERIAL_H | ||
11 | |||
12 | # define BASE_BAUD (1843200 / 16) | ||
13 | |||
14 | #endif /* _ASM_MICROBLAZE_SERIAL_H */ | ||
diff --git a/arch/microblaze/include/asm/shmbuf.h b/arch/microblaze/include/asm/shmbuf.h index f829c5843618..83c05fc2de38 100644 --- a/arch/microblaze/include/asm/shmbuf.h +++ b/arch/microblaze/include/asm/shmbuf.h | |||
@@ -1,42 +1 @@ | |||
1 | #ifndef _ASM_MICROBLAZE_SHMBUF_H | #include <asm-generic/shmbuf.h> | |
2 | #define _ASM_MICROBLAZE_SHMBUF_H | ||
3 | |||
4 | /* | ||
5 | * The shmid64_ds structure for microblaze architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 64-bit time_t to solve y2038 problem | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct shmid64_ds { | ||
15 | struct ipc64_perm shm_perm; /* operation perms */ | ||
16 | size_t shm_segsz; /* size of segment (bytes) */ | ||
17 | __kernel_time_t shm_atime; /* last attach time */ | ||
18 | unsigned long __unused1; | ||
19 | __kernel_time_t shm_dtime; /* last detach time */ | ||
20 | unsigned long __unused2; | ||
21 | __kernel_time_t shm_ctime; /* last change time */ | ||
22 | unsigned long __unused3; | ||
23 | __kernel_pid_t shm_cpid; /* pid of creator */ | ||
24 | __kernel_pid_t shm_lpid; /* pid of last operator */ | ||
25 | unsigned long shm_nattch; /* no. of current attaches */ | ||
26 | unsigned long __unused4; | ||
27 | unsigned long __unused5; | ||
28 | }; | ||
29 | |||
30 | struct shminfo64 { | ||
31 | unsigned long shmmax; | ||
32 | unsigned long shmmin; | ||
33 | unsigned long shmmni; | ||
34 | unsigned long shmseg; | ||
35 | unsigned long shmall; | ||
36 | unsigned long __unused1; | ||
37 | unsigned long __unused2; | ||
38 | unsigned long __unused3; | ||
39 | unsigned long __unused4; | ||
40 | }; | ||
41 | |||
42 | #endif /* _ASM_MICROBLAZE_SHMBUF_H */ | ||
diff --git a/arch/microblaze/include/asm/shmparam.h b/arch/microblaze/include/asm/shmparam.h index 9f5fc2b3b6a3..93f30deb95d0 100644 --- a/arch/microblaze/include/asm/shmparam.h +++ b/arch/microblaze/include/asm/shmparam.h | |||
@@ -1,6 +1 @@ | |||
1 | #ifndef _ASM_MICROBLAZE_SHMPARAM_H | #include <asm-generic/shmparam.h> | |
2 | #define _ASM_MICROBLAZE_SHMPARAM_H | ||
3 | |||
4 | #define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ | ||
5 | |||
6 | #endif /* _ASM_MICROBLAZE_SHMPARAM_H */ | ||
diff --git a/arch/microblaze/include/asm/siginfo.h b/arch/microblaze/include/asm/siginfo.h index f162911a8f50..0815d29d82e5 100644 --- a/arch/microblaze/include/asm/siginfo.h +++ b/arch/microblaze/include/asm/siginfo.h | |||
@@ -1,15 +1 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_SIGINFO_H | ||
10 | #define _ASM_MICROBLAZE_SIGINFO_H | ||
11 | |||
12 | #include <linux/types.h> | ||
13 | #include <asm-generic/siginfo.h> | #include <asm-generic/siginfo.h> | |
14 | |||
15 | #endif /* _ASM_MICROBLAZE_SIGINFO_H */ | ||
diff --git a/arch/microblaze/include/asm/signal.h b/arch/microblaze/include/asm/signal.h index 46bc2267d949..7b1573ce19de 100644 --- a/arch/microblaze/include/asm/signal.h +++ b/arch/microblaze/include/asm/signal.h | |||
@@ -1,165 +1 @@ | |||
1 | /* | #include <asm-generic/signal.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * Yasushi SHOJI <yashi@atmark-techno.com> | ||
4 | * Tetsuya OHKAWA <tetsuya@atmark-techno.com> | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | |||
11 | #ifndef _ASM_MICROBLAZE_SIGNAL_H | ||
12 | #define _ASM_MICROBLAZE_SIGNAL_H | ||
13 | |||
14 | #define SIGHUP 1 | ||
15 | #define SIGINT 2 | ||
16 | #define SIGQUIT 3 | ||
17 | #define SIGILL 4 | ||
18 | #define SIGTRAP 5 | ||
19 | #define SIGABRT 6 | ||
20 | #define SIGIOT 6 | ||
21 | #define SIGBUS 7 | ||
22 | #define SIGFPE 8 | ||
23 | #define SIGKILL 9 | ||
24 | #define SIGUSR1 10 | ||
25 | #define SIGSEGV 11 | ||
26 | #define SIGUSR2 12 | ||
27 | #define SIGPIPE 13 | ||
28 | #define SIGALRM 14 | ||
29 | #define SIGTERM 15 | ||
30 | #define SIGSTKFLT 16 | ||
31 | #define SIGCHLD 17 | ||
32 | #define SIGCONT 18 | ||
33 | #define SIGSTOP 19 | ||
34 | #define SIGTSTP 20 | ||
35 | #define SIGTTIN 21 | ||
36 | #define SIGTTOU 22 | ||
37 | #define SIGURG 23 | ||
38 | #define SIGXCPU 24 | ||
39 | #define SIGXFSZ 25 | ||
40 | #define SIGVTALRM 26 | ||
41 | #define SIGPROF 27 | ||
42 | #define SIGWINCH 28 | ||
43 | #define SIGIO 29 | ||
44 | #define SIGPOLL SIGIO | ||
45 | /* | ||
46 | #define SIGLOST 29 | ||
47 | */ | ||
48 | #define SIGPWR 30 | ||
49 | #define SIGSYS 31 | ||
50 | #define SIGUNUSED 31 | ||
51 | |||
52 | /* These should not be considered constants from userland. */ | ||
53 | #define SIGRTMIN 32 | ||
54 | #define SIGRTMAX _NSIG | ||
55 | |||
56 | /* | ||
57 | * SA_FLAGS values: | ||
58 | * | ||
59 | * SA_ONSTACK indicates that a registered stack_t will be used. | ||
60 | * SA_RESTART flag to get restarting signals (which were the default long ago) | ||
61 | * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. | ||
62 | * SA_RESETHAND clears the handler when the signal is delivered. | ||
63 | * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. | ||
64 | * SA_NODEFER prevents the current signal from being masked in the handler. | ||
65 | * | ||
66 | * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single | ||
67 | * Unix names RESETHAND and NODEFER respectively. | ||
68 | */ | ||
69 | #define SA_NOCLDSTOP 0x00000001 | ||
70 | #define SA_NOCLDWAIT 0x00000002 | ||
71 | #define SA_SIGINFO 0x00000004 | ||
72 | #define SA_ONSTACK 0x08000000 | ||
73 | #define SA_RESTART 0x10000000 | ||
74 | #define SA_NODEFER 0x40000000 | ||
75 | #define SA_RESETHAND 0x80000000 | ||
76 | |||
77 | #define SA_NOMASK SA_NODEFER | ||
78 | #define SA_ONESHOT SA_RESETHAND | ||
79 | |||
80 | #define SA_RESTORER 0x04000000 | ||
81 | |||
82 | /* | ||
83 | * sigaltstack controls | ||
84 | */ | ||
85 | #define SS_ONSTACK 1 | ||
86 | #define SS_DISABLE 2 | ||
87 | |||
88 | #define MINSIGSTKSZ 2048 | ||
89 | #define SIGSTKSZ 8192 | ||
90 | |||
91 | # ifndef __ASSEMBLY__ | ||
92 | # include <linux/types.h> | ||
93 | # include <asm-generic/signal-defs.h> | ||
94 | |||
95 | /* Avoid too many header ordering problems. */ | ||
96 | struct siginfo; | ||
97 | |||
98 | # ifdef __KERNEL__ | ||
99 | /* | ||
100 | * Most things should be clean enough to redefine this at will, if care | ||
101 | * is taken to make libc match. | ||
102 | */ | ||
103 | # define _NSIG 64 | ||
104 | # define _NSIG_BPW 32 | ||
105 | # define _NSIG_WORDS (_NSIG / _NSIG_BPW) | ||
106 | |||
107 | typedef unsigned long old_sigset_t; /* at least 32 bits */ | ||
108 | |||
109 | typedef struct { | ||
110 | unsigned long sig[_NSIG_WORDS]; | ||
111 | } sigset_t; | ||
112 | |||
113 | struct old_sigaction { | ||
114 | __sighandler_t sa_handler; | ||
115 | old_sigset_t sa_mask; | ||
116 | unsigned long sa_flags; | ||
117 | void (*sa_restorer)(void); | ||
118 | }; | ||
119 | |||
120 | struct sigaction { | ||
121 | __sighandler_t sa_handler; | ||
122 | unsigned long sa_flags; | ||
123 | void (*sa_restorer)(void); | ||
124 | sigset_t sa_mask; /* mask last for extensibility */ | ||
125 | }; | ||
126 | |||
127 | struct k_sigaction { | ||
128 | struct sigaction sa; | ||
129 | }; | ||
130 | |||
131 | # include <asm/sigcontext.h> | ||
132 | # undef __HAVE_ARCH_SIG_BITOPS | ||
133 | |||
134 | # define ptrace_signal_deliver(regs, cookie) do { } while (0) | ||
135 | |||
136 | # else /* !__KERNEL__ */ | ||
137 | |||
138 | /* Here we must cater to libcs that poke about in kernel headers. */ | ||
139 | |||
140 | # define NSIG 32 | ||
141 | typedef unsigned long sigset_t; | ||
142 | |||
143 | struct sigaction { | ||
144 | union { | ||
145 | __sighandler_t _sa_handler; | ||
146 | void (*_sa_sigaction)(int, struct siginfo *, void *); | ||
147 | } _u; | ||
148 | sigset_t sa_mask; | ||
149 | unsigned long sa_flags; | ||
150 | void (*sa_restorer)(void); | ||
151 | }; | ||
152 | |||
153 | # define sa_handler _u._sa_handler | ||
154 | # define sa_sigaction _u._sa_sigaction | ||
155 | |||
156 | # endif /* __KERNEL__ */ | ||
157 | |||
158 | typedef struct sigaltstack { | ||
159 | void *ss_sp; | ||
160 | int ss_flags; | ||
161 | size_t ss_size; | ||
162 | } stack_t; | ||
163 | |||
164 | # endif /* __ASSEMBLY__ */ | ||
165 | #endif /* _ASM_MICROBLAZE_SIGNAL_H */ | ||
diff --git a/arch/microblaze/include/asm/socket.h b/arch/microblaze/include/asm/socket.h index 825936860314..6b71384b9d8b 100644 --- a/arch/microblaze/include/asm/socket.h +++ b/arch/microblaze/include/asm/socket.h | |||
@@ -1,69 +1 @@ | |||
1 | /* | #include <asm-generic/socket.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_SOCKET_H | ||
10 | #define _ASM_MICROBLAZE_SOCKET_H | ||
11 | |||
12 | #include <asm/sockios.h> | ||
13 | |||
14 | /* For setsockoptions(2) */ | ||
15 | #define SOL_SOCKET 1 | ||
16 | |||
17 | #define SO_DEBUG 1 | ||
18 | #define SO_REUSEADDR 2 | ||
19 | #define SO_TYPE 3 | ||
20 | #define SO_ERROR 4 | ||
21 | #define SO_DONTROUTE 5 | ||
22 | #define SO_BROADCAST 6 | ||
23 | #define SO_SNDBUF 7 | ||
24 | #define SO_RCVBUF 8 | ||
25 | #define SO_SNDBUFFORCE 32 | ||
26 | #define SO_RCVBUFFORCE 33 | ||
27 | #define SO_KEEPALIVE 9 | ||
28 | #define SO_OOBINLINE 10 | ||
29 | #define SO_NO_CHECK 11 | ||
30 | #define SO_PRIORITY 12 | ||
31 | #define SO_LINGER 13 | ||
32 | #define SO_BSDCOMPAT 14 | ||
33 | /* To add :#define SO_REUSEPORT 15 */ | ||
34 | #define SO_PASSCRED 16 | ||
35 | #define SO_PEERCRED 17 | ||
36 | #define SO_RCVLOWAT 18 | ||
37 | #define SO_SNDLOWAT 19 | ||
38 | #define SO_RCVTIMEO 20 | ||
39 | #define SO_SNDTIMEO 21 | ||
40 | |||
41 | /* Security levels - as per NRL IPv6 - don't actually do anything */ | ||
42 | #define SO_SECURITY_AUTHENTICATION 22 | ||
43 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 23 | ||
44 | #define SO_SECURITY_ENCRYPTION_NETWORK 24 | ||
45 | |||
46 | #define SO_BINDTODEVICE 25 | ||
47 | |||
48 | /* Socket filtering */ | ||
49 | #define SO_ATTACH_FILTER 26 | ||
50 | #define SO_DETACH_FILTER 27 | ||
51 | |||
52 | #define SO_PEERNAME 28 | ||
53 | #define SO_TIMESTAMP 29 | ||
54 | #define SCM_TIMESTAMP SO_TIMESTAMP | ||
55 | |||
56 | #define SO_ACCEPTCONN 30 | ||
57 | |||
58 | #define SO_PEERSEC 31 | ||
59 | #define SO_PASSSEC 34 | ||
60 | |||
61 | #define SO_TIMESTAMPNS 35 | ||
62 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | ||
63 | |||
64 | #define SO_MARK 36 | ||
65 | |||
66 | #define SO_TIMESTAMPING 37 | ||
67 | #define SCM_TIMESTAMPING SO_TIMESTAMPING | ||
68 | |||
69 | #endif /* _ASM_MICROBLAZE_SOCKET_H */ | ||
diff --git a/arch/microblaze/include/asm/sockios.h b/arch/microblaze/include/asm/sockios.h index 9fff57a701e1..def6d4746ee7 100644 --- a/arch/microblaze/include/asm/sockios.h +++ b/arch/microblaze/include/asm/sockios.h | |||
@@ -1,23 +1 @@ | |||
1 | /* | #include <asm-generic/sockios.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_SOCKIOS_H | ||
10 | #define _ASM_MICROBLAZE_SOCKIOS_H | ||
11 | |||
12 | #include <linux/ioctl.h> | ||
13 | |||
14 | /* Socket-level I/O control calls. */ | ||
15 | #define FIOSETOWN 0x8901 | ||
16 | #define SIOCSPGRP 0x8902 | ||
17 | #define FIOGETOWN 0x8903 | ||
18 | #define SIOCGPGRP 0x8904 | ||
19 | #define SIOCATMARK 0x8905 | ||
20 | #define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ | ||
21 | #define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ | ||
22 | |||
23 | #endif /* _ASM_MICROBLAZE_SOCKIOS_H */ | ||
diff --git a/arch/microblaze/include/asm/stat.h b/arch/microblaze/include/asm/stat.h index a15f77520bfd..3dc90fa92c70 100644 --- a/arch/microblaze/include/asm/stat.h +++ b/arch/microblaze/include/asm/stat.h | |||
@@ -1,68 +1 @@ | |||
1 | /* | #include <asm-generic/stat.h> | |
2 | * Microblaze stat structure | ||
3 | * | ||
4 | * Copyright (C) 2001,02,03 NEC Electronics Corporation | ||
5 | * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org> | ||
6 | * | ||
7 | * This file is subject to the terms and conditions of the GNU General | ||
8 | * Public License. See the file COPYING in the main directory of this | ||
9 | * archive for more details. | ||
10 | * | ||
11 | * Written by Miles Bader <miles@gnu.org> | ||
12 | */ | ||
13 | |||
14 | #ifndef _ASM_MICROBLAZE_STAT_H | ||
15 | #define _ASM_MICROBLAZE_STAT_H | ||
16 | |||
17 | #include <linux/posix_types.h> | ||
18 | |||
19 | #define STAT_HAVE_NSEC 1 | ||
20 | |||
21 | struct stat { | ||
22 | unsigned long st_dev; | ||
23 | unsigned long st_ino; | ||
24 | unsigned int st_mode; | ||
25 | unsigned int st_nlink; | ||
26 | unsigned int st_uid; | ||
27 | unsigned int st_gid; | ||
28 | unsigned long st_rdev; | ||
29 | unsigned long __pad1; | ||
30 | long st_size; | ||
31 | int st_blksize; | ||
32 | int __pad2; | ||
33 | long st_blocks; | ||
34 | int st_atime; | ||
35 | unsigned int st_atime_nsec; | ||
36 | int st_mtime; | ||
37 | unsigned int st_mtime_nsec; | ||
38 | int st_ctime; | ||
39 | unsigned int st_ctime_nsec; | ||
40 | unsigned long __unused4; | ||
41 | unsigned long __unused5; | ||
42 | }; | ||
43 | |||
44 | struct stat64 { | ||
45 | unsigned long long st_dev; /* Device. */ | ||
46 | unsigned long long st_ino; /* File serial number. */ | ||
47 | unsigned int st_mode; /* File mode. */ | ||
48 | unsigned int st_nlink; /* Link count. */ | ||
49 | unsigned int st_uid; /* User ID of the file's owner. */ | ||
50 | unsigned int st_gid; /* Group ID of the file's group. */ | ||
51 | unsigned long long st_rdev; /* Device number, if device. */ | ||
52 | unsigned long long __pad1; | ||
53 | long long st_size; /* Size of file, in bytes. */ | ||
54 | int st_blksize; /* Optimal block size for I/O. */ | ||
55 | int __pad2; | ||
56 | long long st_blocks; /* Number 512-byte blocks allocated. */ | ||
57 | int st_atime; /* Time of last access. */ | ||
58 | unsigned int st_atime_nsec; | ||
59 | int st_mtime; /* Time of last modification. */ | ||
60 | unsigned int st_mtime_nsec; | ||
61 | int st_ctime; /* Time of last status change. */ | ||
62 | unsigned int st_ctime_nsec; | ||
63 | unsigned int __unused4; | ||
64 | unsigned int __unused5; | ||
65 | }; | ||
66 | |||
67 | #endif /* _ASM_MICROBLAZE_STAT_H */ | ||
68 | |||
diff --git a/arch/microblaze/include/asm/swab.h b/arch/microblaze/include/asm/swab.h index b375d7b65ad7..7847e563ab66 100644 --- a/arch/microblaze/include/asm/swab.h +++ b/arch/microblaze/include/asm/swab.h | |||
@@ -1,8 +1 @@ | |||
1 | #ifndef _ASM_MICROBLAZE_SWAB_H | #include <asm-generic/swab.h> | |
2 | #define _ASM_MICROBLAZE_SWAB_H | ||
3 | |||
4 | #if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__) | ||
5 | #define __SWAB_64_THRU_32__ | ||
6 | #endif | ||
7 | |||
8 | #endif /* _ASM_MICROBLAZE_SWAB_H */ | ||
diff --git a/arch/microblaze/include/asm/syscalls.h b/arch/microblaze/include/asm/syscalls.h index ddea9eb31f8d..720761cc741f 100644 --- a/arch/microblaze/include/asm/syscalls.h +++ b/arch/microblaze/include/asm/syscalls.h | |||
@@ -1,48 +1,8 @@ | |||
1 | #ifndef __ASM_MICROBLAZE_SYSCALLS_H | 1 | #ifndef __ASM_MICROBLAZE_SYSCALLS_H |
2 | #define __ASM_MICROBLAZE_SYSCALLS_H | ||
3 | #ifdef __KERNEL__ | ||
4 | 2 | ||
5 | #include <linux/compiler.h> | 3 | asmlinkage long sys_clone(int flags, unsigned long stack, struct pt_regs *regs); |
6 | #include <linux/linkage.h> | 4 | #define sys_clone sys_clone |
7 | #include <linux/types.h> | ||
8 | #include <linux/signal.h> | ||
9 | 5 | ||
10 | /* FIXME will be removed */ | 6 | #include <asm-generic/syscalls.h> |
11 | asmlinkage int sys_ipc(uint call, int first, int second, | ||
12 | int third, void *ptr, long fifth); | ||
13 | 7 | ||
14 | struct pt_regs; | ||
15 | asmlinkage int sys_vfork(struct pt_regs *regs); | ||
16 | asmlinkage int sys_clone(int flags, unsigned long stack, struct pt_regs *regs); | ||
17 | asmlinkage int sys_execve(char __user *filenamei, char __user *__user *argv, | ||
18 | char __user *__user *envp, struct pt_regs *regs); | ||
19 | |||
20 | asmlinkage unsigned long sys_mmap2(unsigned long addr, size_t len, | ||
21 | unsigned long prot, unsigned long flags, | ||
22 | unsigned long fd, unsigned long pgoff); | ||
23 | |||
24 | asmlinkage unsigned long sys_mmap(unsigned long addr, size_t len, | ||
25 | unsigned long prot, unsigned long flags, | ||
26 | unsigned long fd, off_t offset); | ||
27 | |||
28 | /* from signal.c */ | ||
29 | asmlinkage int sys_sigsuspend(old_sigset_t mask, struct pt_regs *regs); | ||
30 | |||
31 | asmlinkage int sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, | ||
32 | struct pt_regs *regs); | ||
33 | |||
34 | asmlinkage int sys_sigaction(int sig, const struct old_sigaction *act, | ||
35 | struct old_sigaction *oact); | ||
36 | |||
37 | asmlinkage long sys_rt_sigaction(int sig, const struct sigaction __user *act, | ||
38 | struct sigaction __user *oact, size_t sigsetsize); | ||
39 | |||
40 | asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | ||
41 | struct pt_regs *regs); | ||
42 | |||
43 | asmlinkage int sys_sigreturn(struct pt_regs *regs); | ||
44 | |||
45 | asmlinkage int sys_rt_sigreturn(struct pt_regs *regs); | ||
46 | |||
47 | #endif /* __KERNEL__ */ | ||
48 | #endif /* __ASM_MICROBLAZE_SYSCALLS_H */ | 8 | #endif /* __ASM_MICROBLAZE_SYSCALLS_H */ |
diff --git a/arch/microblaze/include/asm/system.h b/arch/microblaze/include/asm/system.h index c4e308850b5d..b1ed61590660 100644 --- a/arch/microblaze/include/asm/system.h +++ b/arch/microblaze/include/asm/system.h | |||
@@ -13,6 +13,9 @@ | |||
13 | #include <asm/setup.h> | 13 | #include <asm/setup.h> |
14 | #include <asm/irqflags.h> | 14 | #include <asm/irqflags.h> |
15 | 15 | ||
16 | #include <asm-generic/cmpxchg.h> | ||
17 | #include <asm-generic/cmpxchg-local.h> | ||
18 | |||
16 | struct task_struct; | 19 | struct task_struct; |
17 | struct thread_info; | 20 | struct thread_info; |
18 | 21 | ||
diff --git a/arch/microblaze/include/asm/termbits.h b/arch/microblaze/include/asm/termbits.h index a1b64bc4724a..3935b106de79 100644 --- a/arch/microblaze/include/asm/termbits.h +++ b/arch/microblaze/include/asm/termbits.h | |||
@@ -1,203 +1 @@ | |||
1 | /* | #include <asm-generic/termbits.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_TERMBITS_H | ||
10 | #define _ASM_MICROBLAZE_TERMBITS_H | ||
11 | |||
12 | #include <linux/posix_types.h> | ||
13 | |||
14 | typedef unsigned char cc_t; | ||
15 | typedef unsigned int speed_t; | ||
16 | typedef unsigned int tcflag_t; | ||
17 | |||
18 | #define NCCS 19 | ||
19 | struct termios { | ||
20 | tcflag_t c_iflag; /* input mode flags */ | ||
21 | tcflag_t c_oflag; /* output mode flags */ | ||
22 | tcflag_t c_cflag; /* control mode flags */ | ||
23 | tcflag_t c_lflag; /* local mode flags */ | ||
24 | cc_t c_line; /* line discipline */ | ||
25 | cc_t c_cc[NCCS]; /* control characters */ | ||
26 | }; | ||
27 | |||
28 | struct ktermios { | ||
29 | tcflag_t c_iflag; /* input mode flags */ | ||
30 | tcflag_t c_oflag; /* output mode flags */ | ||
31 | tcflag_t c_cflag; /* control mode flags */ | ||
32 | tcflag_t c_lflag; /* local mode flags */ | ||
33 | cc_t c_line; /* line discipline */ | ||
34 | cc_t c_cc[NCCS]; /* control characters */ | ||
35 | speed_t c_ispeed; /* input speed */ | ||
36 | speed_t c_ospeed; /* output speed */ | ||
37 | }; | ||
38 | |||
39 | /* c_cc characters */ | ||
40 | |||
41 | #define VINTR 0 | ||
42 | #define VQUIT 1 | ||
43 | #define VERASE 2 | ||
44 | #define VKILL 3 | ||
45 | #define VEOF 4 | ||
46 | #define VTIME 5 | ||
47 | #define VMIN 6 | ||
48 | #define VSWTC 7 | ||
49 | #define VSTART 8 | ||
50 | #define VSTOP 9 | ||
51 | #define VSUSP 10 | ||
52 | #define VEOL 11 | ||
53 | #define VREPRINT 12 | ||
54 | #define VDISCARD 13 | ||
55 | #define VWERASE 14 | ||
56 | #define VLNEXT 15 | ||
57 | #define VEOL2 16 | ||
58 | |||
59 | /* c_iflag bits */ | ||
60 | |||
61 | #define IGNBRK 0000001 | ||
62 | #define BRKINT 0000002 | ||
63 | #define IGNPAR 0000004 | ||
64 | #define PARMRK 0000010 | ||
65 | #define INPCK 0000020 | ||
66 | #define ISTRIP 0000040 | ||
67 | #define INLCR 0000100 | ||
68 | #define IGNCR 0000200 | ||
69 | #define ICRNL 0000400 | ||
70 | #define IUCLC 0001000 | ||
71 | #define IXON 0002000 | ||
72 | #define IXANY 0004000 | ||
73 | #define IXOFF 0010000 | ||
74 | #define IMAXBEL 0020000 | ||
75 | #define IUTF8 0040000 | ||
76 | |||
77 | /* c_oflag bits */ | ||
78 | |||
79 | #define OPOST 0000001 | ||
80 | #define OLCUC 0000002 | ||
81 | #define ONLCR 0000004 | ||
82 | #define OCRNL 0000010 | ||
83 | #define ONOCR 0000020 | ||
84 | #define ONLRET 0000040 | ||
85 | #define OFILL 0000100 | ||
86 | #define OFDEL 0000200 | ||
87 | #define NLDLY 0000400 | ||
88 | #define NL0 0000000 | ||
89 | #define NL1 0000400 | ||
90 | #define CRDLY 0003000 | ||
91 | #define CR0 0000000 | ||
92 | #define CR1 0001000 | ||
93 | #define CR2 0002000 | ||
94 | #define CR3 0003000 | ||
95 | #define TABDLY 0014000 | ||
96 | #define TAB0 0000000 | ||
97 | #define TAB1 0004000 | ||
98 | #define TAB2 0010000 | ||
99 | #define TAB3 0014000 | ||
100 | #define XTABS 0014000 | ||
101 | #define BSDLY 0020000 | ||
102 | #define BS0 0000000 | ||
103 | #define BS1 0020000 | ||
104 | #define VTDLY 0040000 | ||
105 | #define VT0 0000000 | ||
106 | #define VT1 0040000 | ||
107 | #define FFDLY 0100000 | ||
108 | #define FF0 0000000 | ||
109 | #define FF1 0100000 | ||
110 | |||
111 | /* c_cflag bit meaning */ | ||
112 | |||
113 | #define CBAUD 0010017 | ||
114 | #define B0 0000000 /* hang up */ | ||
115 | #define B50 0000001 | ||
116 | #define B75 0000002 | ||
117 | #define B110 0000003 | ||
118 | #define B134 0000004 | ||
119 | #define B150 0000005 | ||
120 | #define B200 0000006 | ||
121 | #define B300 0000007 | ||
122 | #define B600 0000010 | ||
123 | #define B1200 0000011 | ||
124 | #define B1800 0000012 | ||
125 | #define B2400 0000013 | ||
126 | #define B4800 0000014 | ||
127 | #define B9600 0000015 | ||
128 | #define B19200 0000016 | ||
129 | #define B38400 0000017 | ||
130 | #define EXTA B19200 | ||
131 | #define EXTB B38400 | ||
132 | #define CSIZE 0000060 | ||
133 | #define CS5 0000000 | ||
134 | #define CS6 0000020 | ||
135 | #define CS7 0000040 | ||
136 | #define CS8 0000060 | ||
137 | #define CSTOPB 0000100 | ||
138 | #define CREAD 0000200 | ||
139 | #define PARENB 0000400 | ||
140 | #define PARODD 0001000 | ||
141 | #define HUPCL 0002000 | ||
142 | #define CLOCAL 0004000 | ||
143 | #define CBAUDEX 0010000 | ||
144 | #define B57600 0010001 | ||
145 | #define B115200 0010002 | ||
146 | #define B230400 0010003 | ||
147 | #define B460800 0010004 | ||
148 | #define B500000 0010005 | ||
149 | #define B576000 0010006 | ||
150 | #define B921600 0010007 | ||
151 | #define BOTHER 0010000 | ||
152 | #define B1000000 0010010 | ||
153 | #define B1152000 0010011 | ||
154 | #define B1500000 0010012 | ||
155 | #define B2000000 0010013 | ||
156 | #define B2500000 0010014 | ||
157 | #define B3000000 0010015 | ||
158 | #define B3500000 0010016 | ||
159 | #define B4000000 0010017 | ||
160 | #define CIBAUD 002003600000 /* input baud rate (not used) */ | ||
161 | #define CMSPAR 010000000000 /* mark or space (stick) parity */ | ||
162 | #define CRTSCTS 020000000000 /* flow control */ | ||
163 | |||
164 | #define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */ | ||
165 | |||
166 | /* c_lflag bits */ | ||
167 | |||
168 | #define ISIG 0000001 | ||
169 | #define ICANON 0000002 | ||
170 | #define XCASE 0000004 | ||
171 | #define ECHO 0000010 | ||
172 | #define ECHOE 0000020 | ||
173 | #define ECHOK 0000040 | ||
174 | #define ECHONL 0000100 | ||
175 | #define NOFLSH 0000200 | ||
176 | #define TOSTOP 0000400 | ||
177 | #define ECHOCTL 0001000 | ||
178 | #define ECHOPRT 0002000 | ||
179 | #define ECHOKE 0004000 | ||
180 | #define FLUSHO 0010000 | ||
181 | #define PENDIN 0040000 | ||
182 | #define IEXTEN 0100000 | ||
183 | |||
184 | /* tcflow() and TCXONC use these */ | ||
185 | |||
186 | #define TCOOFF 0 | ||
187 | #define TCOON 1 | ||
188 | #define TCIOFF 2 | ||
189 | #define TCION 3 | ||
190 | |||
191 | /* tcflush() and TCFLSH use these */ | ||
192 | |||
193 | #define TCIFLUSH 0 | ||
194 | #define TCOFLUSH 1 | ||
195 | #define TCIOFLUSH 2 | ||
196 | |||
197 | /* tcsetattr uses these */ | ||
198 | |||
199 | #define TCSANOW 0 | ||
200 | #define TCSADRAIN 1 | ||
201 | #define TCSAFLUSH 2 | ||
202 | |||
203 | #endif /* _ASM_MICROBLAZE_TERMBITS_H */ | ||
diff --git a/arch/microblaze/include/asm/termios.h b/arch/microblaze/include/asm/termios.h index 47a46d1fbe26..280d78a9d966 100644 --- a/arch/microblaze/include/asm/termios.h +++ b/arch/microblaze/include/asm/termios.h | |||
@@ -1,88 +1 @@ | |||
1 | /* | #include <asm-generic/termios.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_TERMIOS_H | ||
10 | #define _ASM_MICROBLAZE_TERMIOS_H | ||
11 | |||
12 | #include <linux/string.h> | ||
13 | #include <asm/termbits.h> | ||
14 | #include <asm/ioctls.h> | ||
15 | |||
16 | struct winsize { | ||
17 | unsigned short ws_row; | ||
18 | unsigned short ws_col; | ||
19 | unsigned short ws_xpixel; | ||
20 | unsigned short ws_ypixel; | ||
21 | }; | ||
22 | |||
23 | #define NCC 8 | ||
24 | struct termio { | ||
25 | unsigned short c_iflag; /* input mode flags */ | ||
26 | unsigned short c_oflag; /* output mode flags */ | ||
27 | unsigned short c_cflag; /* control mode flags */ | ||
28 | unsigned short c_lflag; /* local mode flags */ | ||
29 | unsigned char c_line; /* line discipline */ | ||
30 | unsigned char c_cc[NCC]; /* control characters */ | ||
31 | }; | ||
32 | |||
33 | #ifdef __KERNEL__ | ||
34 | /* intr=^C quit=^| erase=del kill=^U | ||
35 | eof=^D vtime=\0 vmin=\1 sxtc=\0 | ||
36 | start=^Q stop=^S susp=^Z eol=\0 | ||
37 | reprint=^R discard=^U werase=^W lnext=^V | ||
38 | eol2=\0 | ||
39 | */ | ||
40 | #define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" | ||
41 | #endif | ||
42 | |||
43 | /* Modem lines */ | ||
44 | |||
45 | #define TIOCM_LE 0x001 | ||
46 | #define TIOCM_DTR 0x002 | ||
47 | #define TIOCM_RTS 0x004 | ||
48 | #define TIOCM_ST 0x008 | ||
49 | #define TIOCM_SR 0x010 | ||
50 | #define TIOCM_CTS 0x020 | ||
51 | #define TIOCM_CAR 0x040 | ||
52 | #define TIOCM_RNG 0x080 | ||
53 | #define TIOCM_DSR 0x100 | ||
54 | #define TIOCM_CD TIOCM_CAR | ||
55 | #define TIOCM_RI TIOCM_RNG | ||
56 | #define TIOCM_OUT1 0x2000 | ||
57 | #define TIOCM_OUT2 0x4000 | ||
58 | #define TIOCM_LOOP 0x8000 | ||
59 | |||
60 | /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ | ||
61 | |||
62 | /* Line disciplines */ | ||
63 | |||
64 | #define N_TTY 0 | ||
65 | #define N_SLIP 1 | ||
66 | #define N_MOUSE 2 | ||
67 | #define N_PPP 3 | ||
68 | #define N_STRIP 4 | ||
69 | #define N_AX25 5 | ||
70 | #define N_X25 6 /* X.25 async */ | ||
71 | #define N_6PACK 7 | ||
72 | #define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ | ||
73 | #define N_R3964 9 /* Reserved for Simatic R3964 module */ | ||
74 | #define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ | ||
75 | #define N_IRDA 11 /* Linux IR - http://irda.sourceforge.net/ */ | ||
76 | #define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards | ||
77 | about SMS messages */ | ||
78 | #define N_HDLC 13 /* synchronous HDLC */ | ||
79 | #define N_SYNC_PPP 14 | ||
80 | #define N_HCI 15 /* Bluetooth HCI UART */ | ||
81 | |||
82 | #ifdef __KERNEL__ | ||
83 | |||
84 | #include <asm-generic/termios-base.h> | ||
85 | |||
86 | #endif /* __KERNEL__ */ | ||
87 | |||
88 | #endif /* _ASM_MICROBLAZE_TERMIOS_H */ | ||
diff --git a/arch/microblaze/include/asm/thread_info.h b/arch/microblaze/include/asm/thread_info.h index 7fac44498445..6e92885d381a 100644 --- a/arch/microblaze/include/asm/thread_info.h +++ b/arch/microblaze/include/asm/thread_info.h | |||
@@ -75,8 +75,6 @@ struct thread_info { | |||
75 | 75 | ||
76 | /* | 76 | /* |
77 | * macros/functions for gaining access to the thread information structure | 77 | * macros/functions for gaining access to the thread information structure |
78 | * | ||
79 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
80 | */ | 78 | */ |
81 | #define INIT_THREAD_INFO(tsk) \ | 79 | #define INIT_THREAD_INFO(tsk) \ |
82 | { \ | 80 | { \ |
@@ -84,7 +82,7 @@ struct thread_info { | |||
84 | .exec_domain = &default_exec_domain, \ | 82 | .exec_domain = &default_exec_domain, \ |
85 | .flags = 0, \ | 83 | .flags = 0, \ |
86 | .cpu = 0, \ | 84 | .cpu = 0, \ |
87 | .preempt_count = 1, \ | 85 | .preempt_count = INIT_PREEMPT_COUNT, \ |
88 | .addr_limit = KERNEL_DS, \ | 86 | .addr_limit = KERNEL_DS, \ |
89 | .restart_block = { \ | 87 | .restart_block = { \ |
90 | .fn = do_no_restart_syscall, \ | 88 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/microblaze/include/asm/timex.h b/arch/microblaze/include/asm/timex.h index 678525dc6d0b..befcf3de5532 100644 --- a/arch/microblaze/include/asm/timex.h +++ b/arch/microblaze/include/asm/timex.h | |||
@@ -9,10 +9,8 @@ | |||
9 | #ifndef _ASM_MICROBLAZE_TIMEX_H | 9 | #ifndef _ASM_MICROBLAZE_TIMEX_H |
10 | #define _ASM_MICROBLAZE_TIMEX_H | 10 | #define _ASM_MICROBLAZE_TIMEX_H |
11 | 11 | ||
12 | #define CLOCK_TICK_RATE 1000 /* Timer input freq. */ | 12 | #include <asm-generic/timex.h> |
13 | |||
14 | typedef unsigned long cycles_t; | ||
15 | 13 | ||
16 | #define get_cycles() (0) | 14 | #define CLOCK_TICK_RATE 1000 /* Timer input freq. */ |
17 | 15 | ||
18 | #endif /* _ASM_TIMEX_H */ | 16 | #endif /* _ASM_TIMEX_H */ |
diff --git a/arch/microblaze/include/asm/types.h b/arch/microblaze/include/asm/types.h index bebc018318f5..b9e79bc580dd 100644 --- a/arch/microblaze/include/asm/types.h +++ b/arch/microblaze/include/asm/types.h | |||
@@ -1,38 +1 @@ | |||
1 | /* | #include <asm-generic/types.h> | |
2 | * Copyright (C) Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_TYPES_H | ||
10 | #define _ASM_MICROBLAZE_TYPES_H | ||
11 | |||
12 | /* | ||
13 | * This file is never included by application software unless | ||
14 | * explicitly requested (e.g., via linux/types.h) in which case the | ||
15 | * application is Linux specific so (user-) name space pollution is | ||
16 | * not a major issue. However, for interoperability, libraries still | ||
17 | * need to be careful to avoid a name clashes. | ||
18 | */ | ||
19 | |||
20 | #include <asm-generic/int-ll64.h> | ||
21 | |||
22 | # ifndef __ASSEMBLY__ | ||
23 | |||
24 | typedef unsigned short umode_t; | ||
25 | |||
26 | /* | ||
27 | * These aren't exported outside the kernel to avoid name space clashes | ||
28 | */ | ||
29 | # ifdef __KERNEL__ | ||
30 | # define BITS_PER_LONG 32 | ||
31 | |||
32 | /* Dma addresses are 32-bits wide. */ | ||
33 | |||
34 | typedef u32 dma_addr_t; | ||
35 | |||
36 | # endif/* __KERNEL__ */ | ||
37 | # endif /* __ASSEMBLY__ */ | ||
38 | #endif /* _ASM_MICROBLAZE_TYPES_H */ | ||
diff --git a/arch/microblaze/include/asm/ucontext.h b/arch/microblaze/include/asm/ucontext.h index 11f6bb3ae3a4..9bc07b9f30fb 100644 --- a/arch/microblaze/include/asm/ucontext.h +++ b/arch/microblaze/include/asm/ucontext.h | |||
@@ -1,22 +1 @@ | |||
1 | /* | #include <asm-generic/ucontext.h> | |
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_UCONTEXT_H | ||
10 | #define _ASM_MICROBLAZE_UCONTEXT_H | ||
11 | |||
12 | #include <asm/sigcontext.h> | ||
13 | |||
14 | struct ucontext { | ||
15 | unsigned long uc_flags; | ||
16 | struct ucontext *uc_link; | ||
17 | stack_t uc_stack; | ||
18 | struct sigcontext uc_mcontext; | ||
19 | sigset_t uc_sigmask; /* mask last for extensibility */ | ||
20 | }; | ||
21 | |||
22 | #endif /* _ASM_MICROBLAZE_UCONTEXT_H */ | ||
diff --git a/arch/microblaze/include/asm/unistd.h b/arch/microblaze/include/asm/unistd.h index b5e2f5fa5c53..0b852327c0e7 100644 --- a/arch/microblaze/include/asm/unistd.h +++ b/arch/microblaze/include/asm/unistd.h | |||
@@ -380,8 +380,10 @@ | |||
380 | #define __NR_accept04 362 /* new */ | 380 | #define __NR_accept04 362 /* new */ |
381 | #define __NR_preadv 363 /* new */ | 381 | #define __NR_preadv 363 /* new */ |
382 | #define __NR_pwritev 364 /* new */ | 382 | #define __NR_pwritev 364 /* new */ |
383 | #define __NR_rt_tgsigqueueinfo 365 /* new */ | ||
384 | #define __NR_perf_counter_open 366 /* new */ | ||
383 | 385 | ||
384 | #define __NR_syscalls 365 | 386 | #define __NR_syscalls 367 |
385 | 387 | ||
386 | #ifdef __KERNEL__ | 388 | #ifdef __KERNEL__ |
387 | #ifndef __ASSEMBLY__ | 389 | #ifndef __ASSEMBLY__ |
@@ -408,7 +410,7 @@ | |||
408 | #define __ARCH_WANT_SYS_SIGPENDING | 410 | #define __ARCH_WANT_SYS_SIGPENDING |
409 | #define __ARCH_WANT_SYS_SIGPROCMASK | 411 | #define __ARCH_WANT_SYS_SIGPROCMASK |
410 | #define __ARCH_WANT_SYS_RT_SIGACTION | 412 | #define __ARCH_WANT_SYS_RT_SIGACTION |
411 | /* #define __ARCH_WANT_SYS_RT_SIGSUSPEND */ | 413 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
412 | 414 | ||
413 | /* | 415 | /* |
414 | * "Conditional" syscalls | 416 | * "Conditional" syscalls |
diff --git a/arch/microblaze/include/asm/vga.h b/arch/microblaze/include/asm/vga.h index 8b137891791f..89d82fd8fcf1 100644 --- a/arch/microblaze/include/asm/vga.h +++ b/arch/microblaze/include/asm/vga.h | |||
@@ -1 +1 @@ | |||
#include <asm-generic/vga.h> | |||
diff --git a/arch/microblaze/kernel/entry-nommu.S b/arch/microblaze/kernel/entry-nommu.S index 1fce6b803f54..9083d85376a4 100644 --- a/arch/microblaze/kernel/entry-nommu.S +++ b/arch/microblaze/kernel/entry-nommu.S | |||
@@ -551,30 +551,22 @@ no_work_pending: | |||
551 | rtid r14, 0 | 551 | rtid r14, 0 |
552 | nop | 552 | nop |
553 | 553 | ||
554 | sys_vfork_wrapper: | 554 | sys_vfork: |
555 | brid sys_vfork | 555 | brid microblaze_vfork |
556 | addk r5, r1, r0 | 556 | addk r5, r1, r0 |
557 | 557 | ||
558 | sys_clone_wrapper: | 558 | sys_clone: |
559 | brid sys_clone | 559 | brid microblaze_clone |
560 | addk r7, r1, r0 | 560 | addk r7, r1, r0 |
561 | 561 | ||
562 | sys_execve_wrapper: | 562 | sys_execve: |
563 | brid sys_execve | 563 | brid microblaze_execve |
564 | addk r8, r1, r0 | 564 | addk r8, r1, r0 |
565 | 565 | ||
566 | sys_sigreturn_wrapper: | ||
567 | brid sys_sigreturn | ||
568 | addk r5, r1, r0 | ||
569 | |||
570 | sys_rt_sigreturn_wrapper: | 566 | sys_rt_sigreturn_wrapper: |
571 | brid sys_rt_sigreturn | 567 | brid sys_rt_sigreturn |
572 | addk r5, r1, r0 | 568 | addk r5, r1, r0 |
573 | 569 | ||
574 | sys_sigsuspend_wrapper: | ||
575 | brid sys_rt_sigsuspend | ||
576 | addk r6, r1, r0 | ||
577 | |||
578 | sys_rt_sigsuspend_wrapper: | 570 | sys_rt_sigsuspend_wrapper: |
579 | brid sys_rt_sigsuspend | 571 | brid sys_rt_sigsuspend |
580 | addk r7, r1, r0 | 572 | addk r7, r1, r0 |
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S index 91a0e7b185dd..c7353e79f4a2 100644 --- a/arch/microblaze/kernel/entry.S +++ b/arch/microblaze/kernel/entry.S | |||
@@ -429,12 +429,11 @@ C_ENTRY(ret_from_fork): | |||
429 | brid ret_from_trap; /* Do normal trap return */ | 429 | brid ret_from_trap; /* Do normal trap return */ |
430 | nop; | 430 | nop; |
431 | 431 | ||
432 | C_ENTRY(sys_vfork_wrapper): | 432 | C_ENTRY(sys_vfork): |
433 | brid microblaze_vfork /* Do real work (tail-call) */ | ||
433 | la r5, r1, PTO | 434 | la r5, r1, PTO |
434 | brid sys_vfork /* Do real work (tail-call) */ | ||
435 | nop | ||
436 | 435 | ||
437 | C_ENTRY(sys_clone_wrapper): | 436 | C_ENTRY(sys_clone): |
438 | bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */ | 437 | bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */ |
439 | lwi r6, r1, PTO+PT_R1; /* If so, use paret's stack ptr */ | 438 | lwi r6, r1, PTO+PT_R1; /* If so, use paret's stack ptr */ |
440 | 1: la r7, r1, PTO; /* Arg 2: parent context */ | 439 | 1: la r7, r1, PTO; /* Arg 2: parent context */ |
@@ -444,20 +443,9 @@ C_ENTRY(sys_clone_wrapper): | |||
444 | brid do_fork /* Do real work (tail-call) */ | 443 | brid do_fork /* Do real work (tail-call) */ |
445 | nop; | 444 | nop; |
446 | 445 | ||
447 | C_ENTRY(sys_execve_wrapper): | 446 | C_ENTRY(sys_execve): |
448 | la r8, r1, PTO; /* add user context as 4th arg */ | 447 | la r8, r1, PTO; /* add user context as 4th arg */ |
449 | brid sys_execve; /* Do real work (tail-call).*/ | 448 | brid microblaze_execve; /* Do real work (tail-call).*/ |
450 | nop; | ||
451 | |||
452 | C_ENTRY(sys_sigsuspend_wrapper): | ||
453 | swi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | ||
454 | swi r4, r1, PTO+PT_R4; | ||
455 | la r6, r1, PTO; /* add user context as 2nd arg */ | ||
456 | bralid r15, sys_sigsuspend; /* Do real work.*/ | ||
457 | nop; | ||
458 | lwi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | ||
459 | lwi r4, r1, PTO+PT_R4; | ||
460 | bri ret_from_trap /* fall through will not work here due to align */ | ||
461 | nop; | 449 | nop; |
462 | 450 | ||
463 | C_ENTRY(sys_rt_sigsuspend_wrapper): | 451 | C_ENTRY(sys_rt_sigsuspend_wrapper): |
@@ -471,18 +459,6 @@ C_ENTRY(sys_rt_sigsuspend_wrapper): | |||
471 | bri ret_from_trap /* fall through will not work here due to align */ | 459 | bri ret_from_trap /* fall through will not work here due to align */ |
472 | nop; | 460 | nop; |
473 | 461 | ||
474 | |||
475 | C_ENTRY(sys_sigreturn_wrapper): | ||
476 | swi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | ||
477 | swi r4, r1, PTO+PT_R4; | ||
478 | la r5, r1, PTO; /* add user context as 1st arg */ | ||
479 | brlid r15, sys_sigreturn; /* Do real work.*/ | ||
480 | nop; | ||
481 | lwi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | ||
482 | lwi r4, r1, PTO+PT_R4; | ||
483 | bri ret_from_trap /* fall through will not work here due to align */ | ||
484 | nop; | ||
485 | |||
486 | C_ENTRY(sys_rt_sigreturn_wrapper): | 462 | C_ENTRY(sys_rt_sigreturn_wrapper): |
487 | swi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | 463 | swi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ |
488 | swi r4, r1, PTO+PT_R4; | 464 | swi r4, r1, PTO+PT_R4; |
diff --git a/arch/microblaze/kernel/ptrace.c b/arch/microblaze/kernel/ptrace.c index b86aa623e36d..53ff39af6a5c 100644 --- a/arch/microblaze/kernel/ptrace.c +++ b/arch/microblaze/kernel/ptrace.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/kernel.h> | 27 | #include <linux/kernel.h> |
28 | #include <linux/mm.h> | 28 | #include <linux/mm.h> |
29 | #include <linux/sched.h> | 29 | #include <linux/sched.h> |
30 | #include <linux/smp_lock.h> | ||
31 | #include <linux/ptrace.h> | 30 | #include <linux/ptrace.h> |
32 | #include <linux/signal.h> | 31 | #include <linux/signal.h> |
33 | 32 | ||
diff --git a/arch/microblaze/kernel/signal.c b/arch/microblaze/kernel/signal.c index 4c0e6521b114..1c80e4fc40ce 100644 --- a/arch/microblaze/kernel/signal.c +++ b/arch/microblaze/kernel/signal.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
22 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
23 | #include <linux/smp.h> | 23 | #include <linux/smp.h> |
24 | #include <linux/smp_lock.h> | ||
25 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
26 | #include <linux/signal.h> | 25 | #include <linux/signal.h> |
27 | #include <linux/errno.h> | 26 | #include <linux/errno.h> |
@@ -45,91 +44,8 @@ | |||
45 | 44 | ||
46 | asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_sycall); | 45 | asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_sycall); |
47 | 46 | ||
48 | /* | ||
49 | * Atomically swap in the new signal mask, and wait for a signal. | ||
50 | */ | ||
51 | asmlinkage int | ||
52 | sys_sigsuspend(old_sigset_t mask, struct pt_regs *regs) | ||
53 | { | ||
54 | sigset_t saveset; | ||
55 | |||
56 | mask &= _BLOCKABLE; | ||
57 | spin_lock_irq(¤t->sighand->siglock); | ||
58 | saveset = current->blocked; | ||
59 | siginitset(¤t->blocked, mask); | ||
60 | recalc_sigpending(); | ||
61 | spin_unlock_irq(¤t->sighand->siglock); | ||
62 | |||
63 | regs->r3 = -EINTR; | ||
64 | while (1) { | ||
65 | current->state = TASK_INTERRUPTIBLE; | ||
66 | schedule(); | ||
67 | if (do_signal(regs, &saveset, 1)) | ||
68 | return -EINTR; | ||
69 | } | ||
70 | } | ||
71 | |||
72 | asmlinkage int | ||
73 | sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, | ||
74 | struct pt_regs *regs) | ||
75 | { | ||
76 | sigset_t saveset, newset; | ||
77 | |||
78 | /* XXX: Don't preclude handling different sized sigset_t's. */ | ||
79 | if (sigsetsize != sizeof(sigset_t)) | ||
80 | return -EINVAL; | ||
81 | |||
82 | if (copy_from_user(&newset, unewset, sizeof(newset))) | ||
83 | return -EFAULT; | ||
84 | sigdelsetmask(&newset, ~_BLOCKABLE); | ||
85 | spin_lock_irq(¤t->sighand->siglock); | ||
86 | saveset = current->blocked; | ||
87 | current->blocked = newset; | ||
88 | recalc_sigpending(); | ||
89 | spin_unlock_irq(¤t->sighand->siglock); | ||
90 | |||
91 | regs->r3 = -EINTR; | ||
92 | while (1) { | ||
93 | current->state = TASK_INTERRUPTIBLE; | ||
94 | schedule(); | ||
95 | if (do_signal(regs, &saveset, 1)) | ||
96 | return -EINTR; | ||
97 | } | ||
98 | } | ||
99 | |||
100 | asmlinkage int | ||
101 | sys_sigaction(int sig, const struct old_sigaction *act, | ||
102 | struct old_sigaction *oact) | ||
103 | { | ||
104 | struct k_sigaction new_ka, old_ka; | ||
105 | int ret; | ||
106 | |||
107 | if (act) { | ||
108 | old_sigset_t mask; | ||
109 | if (!access_ok(VERIFY_READ, act, sizeof(*act)) || | ||
110 | __get_user(new_ka.sa.sa_handler, &act->sa_handler) || | ||
111 | __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) | ||
112 | return -EFAULT; | ||
113 | __get_user(new_ka.sa.sa_flags, &act->sa_flags); | ||
114 | __get_user(mask, &act->sa_mask); | ||
115 | siginitset(&new_ka.sa.sa_mask, mask); | ||
116 | } | ||
117 | 47 | ||
118 | ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); | 48 | asmlinkage long |
119 | |||
120 | if (!ret && oact) { | ||
121 | if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || | ||
122 | __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || | ||
123 | __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) | ||
124 | return -EFAULT; | ||
125 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags); | ||
126 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); | ||
127 | } | ||
128 | |||
129 | return ret; | ||
130 | } | ||
131 | |||
132 | asmlinkage int | ||
133 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | 49 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, |
134 | struct pt_regs *regs) | 50 | struct pt_regs *regs) |
135 | { | 51 | { |
@@ -139,7 +55,6 @@ sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | |||
139 | /* | 55 | /* |
140 | * Do a signal return; undo the signal stack. | 56 | * Do a signal return; undo the signal stack. |
141 | */ | 57 | */ |
142 | |||
143 | struct sigframe { | 58 | struct sigframe { |
144 | struct sigcontext sc; | 59 | struct sigcontext sc; |
145 | unsigned long extramask[_NSIG_WORDS-1]; | 60 | unsigned long extramask[_NSIG_WORDS-1]; |
@@ -176,40 +91,7 @@ static int restore_sigcontext(struct pt_regs *regs, | |||
176 | return err; | 91 | return err; |
177 | } | 92 | } |
178 | 93 | ||
179 | asmlinkage int sys_sigreturn(struct pt_regs *regs) | 94 | asmlinkage long sys_rt_sigreturn(struct pt_regs *regs) |
180 | { | ||
181 | struct sigframe *frame = | ||
182 | (struct sigframe *)(regs->r1 + STATE_SAVE_ARG_SPACE); | ||
183 | |||
184 | sigset_t set; | ||
185 | int rval; | ||
186 | |||
187 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) | ||
188 | goto badframe; | ||
189 | |||
190 | if (__get_user(set.sig[0], &frame->sc.oldmask) | ||
191 | || (_NSIG_WORDS > 1 | ||
192 | && __copy_from_user(&set.sig[1], &frame->extramask, | ||
193 | sizeof(frame->extramask)))) | ||
194 | goto badframe; | ||
195 | |||
196 | sigdelsetmask(&set, ~_BLOCKABLE); | ||
197 | |||
198 | spin_lock_irq(¤t->sighand->siglock); | ||
199 | current->blocked = set; | ||
200 | recalc_sigpending(); | ||
201 | spin_unlock_irq(¤t->sighand->siglock); | ||
202 | |||
203 | if (restore_sigcontext(regs, &frame->sc, &rval)) | ||
204 | goto badframe; | ||
205 | return rval; | ||
206 | |||
207 | badframe: | ||
208 | force_sig(SIGSEGV, current); | ||
209 | return 0; | ||
210 | } | ||
211 | |||
212 | asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) | ||
213 | { | 95 | { |
214 | struct rt_sigframe __user *frame = | 96 | struct rt_sigframe __user *frame = |
215 | (struct rt_sigframe __user *)(regs->r1 + STATE_SAVE_ARG_SPACE); | 97 | (struct rt_sigframe __user *)(regs->r1 + STATE_SAVE_ARG_SPACE); |
@@ -324,21 +206,17 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
324 | /* Set up to return from userspace. If provided, use a stub | 206 | /* Set up to return from userspace. If provided, use a stub |
325 | already in userspace. */ | 207 | already in userspace. */ |
326 | /* minus 8 is offset to cater for "rtsd r15,8" */ | 208 | /* minus 8 is offset to cater for "rtsd r15,8" */ |
327 | if (ka->sa.sa_flags & SA_RESTORER) { | 209 | /* addi r12, r0, __NR_sigreturn */ |
328 | regs->r15 = ((unsigned long)ka->sa.sa_restorer)-8; | 210 | err |= __put_user(0x31800000 | __NR_rt_sigreturn , |
329 | } else { | 211 | frame->tramp + 0); |
330 | /* addi r12, r0, __NR_sigreturn */ | 212 | /* brki r14, 0x8 */ |
331 | err |= __put_user(0x31800000 | __NR_rt_sigreturn , | 213 | err |= __put_user(0xb9cc0008, frame->tramp + 1); |
332 | frame->tramp + 0); | 214 | |
333 | /* brki r14, 0x8 */ | 215 | /* Return from sighandler will jump to the tramp. |
334 | err |= __put_user(0xb9cc0008, frame->tramp + 1); | 216 | Negative 8 offset because return is rtsd r15, 8 */ |
335 | 217 | regs->r15 = ((unsigned long)frame->tramp)-8; | |
336 | /* Return from sighandler will jump to the tramp. | 218 | |
337 | Negative 8 offset because return is rtsd r15, 8 */ | 219 | __invalidate_cache_sigtramp((unsigned long)frame->tramp); |
338 | regs->r15 = ((unsigned long)frame->tramp)-8; | ||
339 | |||
340 | __invalidate_cache_sigtramp((unsigned long)frame->tramp); | ||
341 | } | ||
342 | 220 | ||
343 | if (err) | 221 | if (err) |
344 | goto give_sigsegv; | 222 | goto give_sigsegv; |
@@ -405,7 +283,7 @@ do_restart: | |||
405 | * OK, we're invoking a handler | 283 | * OK, we're invoking a handler |
406 | */ | 284 | */ |
407 | 285 | ||
408 | static void | 286 | static int |
409 | handle_signal(unsigned long sig, struct k_sigaction *ka, | 287 | handle_signal(unsigned long sig, struct k_sigaction *ka, |
410 | siginfo_t *info, sigset_t *oldset, struct pt_regs *regs) | 288 | siginfo_t *info, sigset_t *oldset, struct pt_regs *regs) |
411 | { | 289 | { |
@@ -426,6 +304,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, | |||
426 | recalc_sigpending(); | 304 | recalc_sigpending(); |
427 | spin_unlock_irq(¤t->sighand->siglock); | 305 | spin_unlock_irq(¤t->sighand->siglock); |
428 | } | 306 | } |
307 | return 1; | ||
429 | } | 308 | } |
430 | 309 | ||
431 | /* | 310 | /* |
@@ -456,7 +335,9 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_syscall) | |||
456 | if (kernel_mode(regs)) | 335 | if (kernel_mode(regs)) |
457 | return 1; | 336 | return 1; |
458 | 337 | ||
459 | if (!oldset) | 338 | if (current_thread_info()->status & TS_RESTORE_SIGMASK) |
339 | oldset = ¤t->saved_sigmask; | ||
340 | else | ||
460 | oldset = ¤t->blocked; | 341 | oldset = ¤t->blocked; |
461 | 342 | ||
462 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); | 343 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
@@ -464,13 +345,31 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_syscall) | |||
464 | /* Whee! Actually deliver the signal. */ | 345 | /* Whee! Actually deliver the signal. */ |
465 | if (in_syscall) | 346 | if (in_syscall) |
466 | handle_restart(regs, &ka, 1); | 347 | handle_restart(regs, &ka, 1); |
467 | handle_signal(signr, &ka, &info, oldset, regs); | 348 | if (handle_signal(signr, &ka, &info, oldset, regs)) { |
349 | /* | ||
350 | * A signal was successfully delivered; the saved | ||
351 | * sigmask will have been stored in the signal frame, | ||
352 | * and will be restored by sigreturn, so we can simply | ||
353 | * clear the TS_RESTORE_SIGMASK flag. | ||
354 | */ | ||
355 | current_thread_info()->status &= | ||
356 | ~TS_RESTORE_SIGMASK; | ||
357 | } | ||
468 | return 1; | 358 | return 1; |
469 | } | 359 | } |
470 | 360 | ||
471 | if (in_syscall) | 361 | if (in_syscall) |
472 | handle_restart(regs, NULL, 0); | 362 | handle_restart(regs, NULL, 0); |
473 | 363 | ||
364 | /* | ||
365 | * If there's no signal to deliver, we just put the saved sigmask | ||
366 | * back. | ||
367 | */ | ||
368 | if (current_thread_info()->status & TS_RESTORE_SIGMASK) { | ||
369 | current_thread_info()->status &= ~TS_RESTORE_SIGMASK; | ||
370 | sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); | ||
371 | } | ||
372 | |||
474 | /* Did we come from a system call? */ | 373 | /* Did we come from a system call? */ |
475 | return 0; | 374 | return 0; |
476 | } | 375 | } |
diff --git a/arch/microblaze/kernel/sys_microblaze.c b/arch/microblaze/kernel/sys_microblaze.c index 31905ff590b7..e000bce09b2b 100644 --- a/arch/microblaze/kernel/sys_microblaze.c +++ b/arch/microblaze/kernel/sys_microblaze.c | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <linux/errno.h> | 15 | #include <linux/errno.h> |
16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
17 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
18 | #include <linux/smp_lock.h> | ||
19 | #include <linux/syscalls.h> | 18 | #include <linux/syscalls.h> |
20 | #include <linux/sem.h> | 19 | #include <linux/sem.h> |
21 | #include <linux/msg.h> | 20 | #include <linux/msg.h> |
@@ -39,7 +38,7 @@ | |||
39 | * | 38 | * |
40 | * This is really horribly ugly. This will be remove with new toolchain. | 39 | * This is really horribly ugly. This will be remove with new toolchain. |
41 | */ | 40 | */ |
42 | asmlinkage int | 41 | asmlinkage long |
43 | sys_ipc(uint call, int first, int second, int third, void *ptr, long fifth) | 42 | sys_ipc(uint call, int first, int second, int third, void *ptr, long fifth) |
44 | { | 43 | { |
45 | int version, ret; | 44 | int version, ret; |
@@ -134,20 +133,20 @@ sys_ipc(uint call, int first, int second, int third, void *ptr, long fifth) | |||
134 | return ret; | 133 | return ret; |
135 | } | 134 | } |
136 | 135 | ||
137 | asmlinkage int sys_vfork(struct pt_regs *regs) | 136 | asmlinkage long microblaze_vfork(struct pt_regs *regs) |
138 | { | 137 | { |
139 | return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->r1, | 138 | return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->r1, |
140 | regs, 0, NULL, NULL); | 139 | regs, 0, NULL, NULL); |
141 | } | 140 | } |
142 | 141 | ||
143 | asmlinkage int sys_clone(int flags, unsigned long stack, struct pt_regs *regs) | 142 | asmlinkage long microblaze_clone(int flags, unsigned long stack, struct pt_regs *regs) |
144 | { | 143 | { |
145 | if (!stack) | 144 | if (!stack) |
146 | stack = regs->r1; | 145 | stack = regs->r1; |
147 | return do_fork(flags, stack, regs, 0, NULL, NULL); | 146 | return do_fork(flags, stack, regs, 0, NULL, NULL); |
148 | } | 147 | } |
149 | 148 | ||
150 | asmlinkage int sys_execve(char __user *filenamei, char __user *__user *argv, | 149 | asmlinkage long microblaze_execve(char __user *filenamei, char __user *__user *argv, |
151 | char __user *__user *envp, struct pt_regs *regs) | 150 | char __user *__user *envp, struct pt_regs *regs) |
152 | { | 151 | { |
153 | int error; | 152 | int error; |
@@ -163,8 +162,8 @@ out: | |||
163 | return error; | 162 | return error; |
164 | } | 163 | } |
165 | 164 | ||
166 | asmlinkage unsigned long | 165 | asmlinkage long |
167 | sys_mmap2(unsigned long addr, size_t len, | 166 | sys_mmap2(unsigned long addr, unsigned long len, |
168 | unsigned long prot, unsigned long flags, | 167 | unsigned long prot, unsigned long flags, |
169 | unsigned long fd, unsigned long pgoff) | 168 | unsigned long fd, unsigned long pgoff) |
170 | { | 169 | { |
@@ -189,18 +188,18 @@ out: | |||
189 | return ret; | 188 | return ret; |
190 | } | 189 | } |
191 | 190 | ||
192 | asmlinkage unsigned long sys_mmap(unsigned long addr, size_t len, | 191 | asmlinkage long sys_mmap(unsigned long addr, unsigned long len, |
193 | unsigned long prot, unsigned long flags, | 192 | unsigned long prot, unsigned long flags, |
194 | unsigned long fd, off_t offset) | 193 | unsigned long fd, off_t pgoff) |
195 | { | 194 | { |
196 | int err = -EINVAL; | 195 | int err = -EINVAL; |
197 | 196 | ||
198 | if (offset & ~PAGE_MASK) { | 197 | if (pgoff & ~PAGE_MASK) { |
199 | printk(KERN_INFO "no pagemask in mmap\r\n"); | 198 | printk(KERN_INFO "no pagemask in mmap\r\n"); |
200 | goto out; | 199 | goto out; |
201 | } | 200 | } |
202 | 201 | ||
203 | err = sys_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); | 202 | err = sys_mmap2(addr, len, prot, flags, fd, pgoff >> PAGE_SHIFT); |
204 | out: | 203 | out: |
205 | return err; | 204 | return err; |
206 | } | 205 | } |
diff --git a/arch/microblaze/kernel/syscall_table.S b/arch/microblaze/kernel/syscall_table.S index 376d1789f7c0..31b32a6c5f4e 100644 --- a/arch/microblaze/kernel/syscall_table.S +++ b/arch/microblaze/kernel/syscall_table.S | |||
@@ -15,7 +15,7 @@ ENTRY(sys_call_table) | |||
15 | .long sys_creat | 15 | .long sys_creat |
16 | .long sys_link | 16 | .long sys_link |
17 | .long sys_unlink /* 10 */ | 17 | .long sys_unlink /* 10 */ |
18 | .long sys_execve_wrapper | 18 | .long sys_execve |
19 | .long sys_chdir | 19 | .long sys_chdir |
20 | .long sys_time | 20 | .long sys_time |
21 | .long sys_mknod | 21 | .long sys_mknod |
@@ -71,12 +71,12 @@ ENTRY(sys_call_table) | |||
71 | .long sys_getppid | 71 | .long sys_getppid |
72 | .long sys_getpgrp /* 65 */ | 72 | .long sys_getpgrp /* 65 */ |
73 | .long sys_setsid | 73 | .long sys_setsid |
74 | .long sys_sigaction | 74 | .long sys_ni_syscall /* sys_sigaction */ |
75 | .long sys_sgetmask | 75 | .long sys_sgetmask |
76 | .long sys_ssetmask | 76 | .long sys_ssetmask |
77 | .long sys_setreuid /* 70 */ | 77 | .long sys_setreuid /* 70 */ |
78 | .long sys_setregid | 78 | .long sys_setregid |
79 | .long sys_sigsuspend_wrapper | 79 | .long sys_ni_syscall /* sys_sigsuspend_wrapper */ |
80 | .long sys_sigpending | 80 | .long sys_sigpending |
81 | .long sys_sethostname | 81 | .long sys_sethostname |
82 | .long sys_setrlimit /* 75 */ | 82 | .long sys_setrlimit /* 75 */ |
@@ -123,8 +123,8 @@ ENTRY(sys_call_table) | |||
123 | .long sys_sysinfo | 123 | .long sys_sysinfo |
124 | .long sys_ipc | 124 | .long sys_ipc |
125 | .long sys_fsync | 125 | .long sys_fsync |
126 | .long sys_sigreturn_wrapper | 126 | .long sys_ni_syscall /* sys_sigreturn_wrapper */ |
127 | .long sys_clone_wrapper /* 120 */ | 127 | .long sys_clone /* 120 */ |
128 | .long sys_setdomainname | 128 | .long sys_setdomainname |
129 | .long sys_newuname | 129 | .long sys_newuname |
130 | .long sys_ni_syscall /* modify_ldt */ | 130 | .long sys_ni_syscall /* modify_ldt */ |
@@ -194,7 +194,7 @@ ENTRY(sys_call_table) | |||
194 | .long sys_sendfile | 194 | .long sys_sendfile |
195 | .long sys_ni_syscall /* reserved for streams1 */ | 195 | .long sys_ni_syscall /* reserved for streams1 */ |
196 | .long sys_ni_syscall /* reserved for streams2 */ | 196 | .long sys_ni_syscall /* reserved for streams2 */ |
197 | .long sys_vfork_wrapper /* 190 */ | 197 | .long sys_vfork /* 190 */ |
198 | .long sys_getrlimit | 198 | .long sys_getrlimit |
199 | .long sys_mmap2 /* mmap2 */ | 199 | .long sys_mmap2 /* mmap2 */ |
200 | .long sys_truncate64 | 200 | .long sys_truncate64 |
@@ -369,3 +369,5 @@ ENTRY(sys_call_table) | |||
369 | .long sys_ni_syscall | 369 | .long sys_ni_syscall |
370 | .long sys_ni_syscall | 370 | .long sys_ni_syscall |
371 | .long sys_ni_syscall | 371 | .long sys_ni_syscall |
372 | .long sys_rt_tgsigqueueinfo /* 365 */ | ||
373 | .long sys_perf_counter_open | ||
diff --git a/arch/microblaze/lib/Makefile b/arch/microblaze/lib/Makefile index 71c8cb6c9e43..b579db068c06 100644 --- a/arch/microblaze/lib/Makefile +++ b/arch/microblaze/lib/Makefile | |||
@@ -2,7 +2,7 @@ | |||
2 | # Makefile | 2 | # Makefile |
3 | # | 3 | # |
4 | 4 | ||
5 | lib-y := memset.o checksum.o | 5 | lib-y := memset.o |
6 | 6 | ||
7 | ifeq ($(CONFIG_OPT_LIB_ASM),y) | 7 | ifeq ($(CONFIG_OPT_LIB_ASM),y) |
8 | lib-y += fastcopy.o | 8 | lib-y += fastcopy.o |
diff --git a/arch/microblaze/lib/checksum.c b/arch/microblaze/lib/checksum.c deleted file mode 100644 index f08e74591418..000000000000 --- a/arch/microblaze/lib/checksum.c +++ /dev/null | |||
@@ -1,172 +0,0 @@ | |||
1 | /* | ||
2 | * | ||
3 | * INET An implementation of the TCP/IP protocol suite for the LINUX | ||
4 | * operating system. INET is implemented using the BSD Socket | ||
5 | * interface as the means of communication with the user level. | ||
6 | * | ||
7 | * IP/TCP/UDP checksumming routines | ||
8 | * | ||
9 | * Authors: Jorge Cwik, <jorge@laser.satlink.net> | ||
10 | * Arnt Gulbrandsen, <agulbra@nvg.unit.no> | ||
11 | * Tom May, <ftom@netcom.com> | ||
12 | * Andreas Schwab, <schwab@issan.informatik.uni-dortmund.de> | ||
13 | * Lots of code moved from tcp.c and ip.c; see those files | ||
14 | * for more names. | ||
15 | * | ||
16 | * 03/02/96 Jes Sorensen, Andreas Schwab, Roman Hodek: | ||
17 | * Fixed some nasty bugs, causing some horrible crashes. | ||
18 | * A: At some points, the sum (%0) was used as | ||
19 | * length-counter instead of the length counter | ||
20 | * (%1). Thanks to Roman Hodek for pointing this out. | ||
21 | * B: GCC seems to mess up if one uses too many | ||
22 | * data-registers to hold input values and one tries to | ||
23 | * specify d0 and d1 as scratch registers. Letting gcc | ||
24 | * choose these registers itself solves the problem. | ||
25 | * | ||
26 | * This program is free software; you can redistribute it and/or | ||
27 | * modify it under the terms of the GNU General Public License | ||
28 | * as published by the Free Software Foundation; either version | ||
29 | * 2 of the License, or (at your option) any later version. | ||
30 | */ | ||
31 | |||
32 | /* Revised by Kenneth Albanowski for m68knommu. Basic problem: unaligned access | ||
33 | kills, so most of the assembly has to go. */ | ||
34 | |||
35 | #include <linux/module.h> | ||
36 | #include <net/checksum.h> | ||
37 | |||
38 | #include <asm/byteorder.h> | ||
39 | |||
40 | static inline unsigned short from32to16(unsigned long x) | ||
41 | { | ||
42 | /* add up 16-bit and 16-bit for 16+c bit */ | ||
43 | x = (x & 0xffff) + (x >> 16); | ||
44 | /* add up carry.. */ | ||
45 | x = (x & 0xffff) + (x >> 16); | ||
46 | return x; | ||
47 | } | ||
48 | |||
49 | static unsigned int do_csum(const unsigned char *buff, int len) | ||
50 | { | ||
51 | int odd, count; | ||
52 | unsigned long result = 0; | ||
53 | |||
54 | if (len <= 0) | ||
55 | goto out; | ||
56 | odd = 1 & (unsigned long) buff; | ||
57 | if (odd) { | ||
58 | result = *buff; | ||
59 | len--; | ||
60 | buff++; | ||
61 | } | ||
62 | count = len >> 1; /* nr of 16-bit words.. */ | ||
63 | if (count) { | ||
64 | if (2 & (unsigned long) buff) { | ||
65 | result += *(unsigned short *) buff; | ||
66 | count--; | ||
67 | len -= 2; | ||
68 | buff += 2; | ||
69 | } | ||
70 | count >>= 1; /* nr of 32-bit words.. */ | ||
71 | if (count) { | ||
72 | unsigned long carry = 0; | ||
73 | do { | ||
74 | unsigned long w = *(unsigned long *) buff; | ||
75 | count--; | ||
76 | buff += 4; | ||
77 | result += carry; | ||
78 | result += w; | ||
79 | carry = (w > result); | ||
80 | } while (count); | ||
81 | result += carry; | ||
82 | result = (result & 0xffff) + (result >> 16); | ||
83 | } | ||
84 | if (len & 2) { | ||
85 | result += *(unsigned short *) buff; | ||
86 | buff += 2; | ||
87 | } | ||
88 | } | ||
89 | if (len & 1) | ||
90 | result += (*buff << 8); | ||
91 | result = from32to16(result); | ||
92 | if (odd) | ||
93 | result = ((result >> 8) & 0xff) | ((result & 0xff) << 8); | ||
94 | out: | ||
95 | return result; | ||
96 | } | ||
97 | |||
98 | /* | ||
99 | * This is a version of ip_compute_csum() optimized for IP headers, | ||
100 | * which always checksum on 4 octet boundaries. | ||
101 | */ | ||
102 | __sum16 ip_fast_csum(const void *iph, unsigned int ihl) | ||
103 | { | ||
104 | return (__force __sum16)~do_csum(iph, ihl*4); | ||
105 | } | ||
106 | EXPORT_SYMBOL(ip_fast_csum); | ||
107 | |||
108 | /* | ||
109 | * computes the checksum of a memory block at buff, length len, | ||
110 | * and adds in "sum" (32-bit) | ||
111 | * | ||
112 | * returns a 32-bit number suitable for feeding into itself | ||
113 | * or csum_tcpudp_magic | ||
114 | * | ||
115 | * this function must be called with even lengths, except | ||
116 | * for the last fragment, which may be odd | ||
117 | * | ||
118 | * it's best to have buff aligned on a 32-bit boundary | ||
119 | */ | ||
120 | __wsum csum_partial(const void *buff, int len, __wsum wsum) | ||
121 | { | ||
122 | unsigned int sum = (__force unsigned int)wsum; | ||
123 | unsigned int result = do_csum(buff, len); | ||
124 | |||
125 | /* add in old sum, and carry.. */ | ||
126 | result += sum; | ||
127 | if (sum > result) | ||
128 | result += 1; | ||
129 | return (__force __wsum)result; | ||
130 | } | ||
131 | EXPORT_SYMBOL(csum_partial); | ||
132 | |||
133 | /* | ||
134 | * this routine is used for miscellaneous IP-like checksums, mainly | ||
135 | * in icmp.c | ||
136 | */ | ||
137 | __sum16 ip_compute_csum(const void *buff, int len) | ||
138 | { | ||
139 | return (__force __sum16)~do_csum(buff, len); | ||
140 | } | ||
141 | EXPORT_SYMBOL(ip_compute_csum); | ||
142 | |||
143 | /* | ||
144 | * copy from fs while checksumming, otherwise like csum_partial | ||
145 | */ | ||
146 | __wsum | ||
147 | csum_partial_copy_from_user(const void __user *src, void *dst, int len, | ||
148 | __wsum sum, int *csum_err) | ||
149 | { | ||
150 | int missing; | ||
151 | |||
152 | missing = __copy_from_user(dst, src, len); | ||
153 | if (missing) { | ||
154 | memset(dst + len - missing, 0, missing); | ||
155 | *csum_err = -EFAULT; | ||
156 | } else | ||
157 | *csum_err = 0; | ||
158 | |||
159 | return csum_partial(dst, len, sum); | ||
160 | } | ||
161 | EXPORT_SYMBOL(csum_partial_copy_from_user); | ||
162 | |||
163 | /* | ||
164 | * copy from ds while checksumming, otherwise like csum_partial | ||
165 | */ | ||
166 | __wsum | ||
167 | csum_partial_copy(const void *src, void *dst, int len, __wsum sum) | ||
168 | { | ||
169 | memcpy(dst, src, len); | ||
170 | return csum_partial(dst, len, sum); | ||
171 | } | ||
172 | EXPORT_SYMBOL(csum_partial_copy); | ||
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c index 5e67cd1fab40..956607a63f4c 100644 --- a/arch/microblaze/mm/fault.c +++ b/arch/microblaze/mm/fault.c | |||
@@ -232,7 +232,7 @@ good_area: | |||
232 | * the fault. | 232 | * the fault. |
233 | */ | 233 | */ |
234 | survive: | 234 | survive: |
235 | fault = handle_mm_fault(mm, vma, address, is_write); | 235 | fault = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0); |
236 | if (unlikely(fault & VM_FAULT_ERROR)) { | 236 | if (unlikely(fault & VM_FAULT_ERROR)) { |
237 | if (fault & VM_FAULT_OOM) | 237 | if (fault & VM_FAULT_OOM) |
238 | goto out_of_memory; | 238 | goto out_of_memory; |
diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c index b5a701cd71e0..8d92c4efe9a4 100644 --- a/arch/microblaze/mm/init.c +++ b/arch/microblaze/mm/init.c | |||
@@ -80,15 +80,15 @@ void __init setup_memory(void) | |||
80 | memory_size = memory_end - memory_start; | 80 | memory_size = memory_end - memory_start; |
81 | PAGE_OFFSET = memory_start; | 81 | PAGE_OFFSET = memory_start; |
82 | printk(KERN_INFO "%s: Main mem: 0x%x-0x%x, " | 82 | printk(KERN_INFO "%s: Main mem: 0x%x-0x%x, " |
83 | "size 0x%08x\n", __func__, memory_start, | 83 | "size 0x%08x\n", __func__, (u32) memory_start, |
84 | memory_end, memory_size); | 84 | (u32) memory_end, (u32) memory_size); |
85 | break; | 85 | break; |
86 | } | 86 | } |
87 | } | 87 | } |
88 | 88 | ||
89 | if (!memory_start || !memory_end) { | 89 | if (!memory_start || !memory_end) { |
90 | panic("%s: Missing memory setting 0x%08x-0x%08x\n", | 90 | panic("%s: Missing memory setting 0x%08x-0x%08x\n", |
91 | __func__, memory_start, memory_end); | 91 | __func__, (u32) memory_start, (u32) memory_end); |
92 | } | 92 | } |
93 | 93 | ||
94 | /* reservation of region where is the kernel */ | 94 | /* reservation of region where is the kernel */ |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index b29f0280d712..3ca0fe1a9123 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -22,6 +22,26 @@ choice | |||
22 | config MACH_ALCHEMY | 22 | config MACH_ALCHEMY |
23 | bool "Alchemy processor based machines" | 23 | bool "Alchemy processor based machines" |
24 | 24 | ||
25 | config AR7 | ||
26 | bool "Texas Instruments AR7" | ||
27 | select BOOT_ELF32 | ||
28 | select DMA_NONCOHERENT | ||
29 | select CEVT_R4K | ||
30 | select CSRC_R4K | ||
31 | select IRQ_CPU | ||
32 | select NO_EXCEPT_FILL | ||
33 | select SWAP_IO_SPACE | ||
34 | select SYS_HAS_CPU_MIPS32_R1 | ||
35 | select SYS_HAS_EARLY_PRINTK | ||
36 | select SYS_SUPPORTS_32BIT_KERNEL | ||
37 | select SYS_SUPPORTS_LITTLE_ENDIAN | ||
38 | select GENERIC_GPIO | ||
39 | select GCD | ||
40 | select VLYNQ | ||
41 | help | ||
42 | Support for the Texas Instruments AR7 System-on-a-Chip | ||
43 | family: TNETD7100, 7200 and 7300. | ||
44 | |||
25 | config BASLER_EXCITE | 45 | config BASLER_EXCITE |
26 | bool "Basler eXcite smart camera" | 46 | bool "Basler eXcite smart camera" |
27 | select CEVT_R4K | 47 | select CEVT_R4K |
@@ -209,7 +229,7 @@ config MIPS_MALTA | |||
209 | select SYS_SUPPORTS_64BIT_KERNEL | 229 | select SYS_SUPPORTS_64BIT_KERNEL |
210 | select SYS_SUPPORTS_BIG_ENDIAN | 230 | select SYS_SUPPORTS_BIG_ENDIAN |
211 | select SYS_SUPPORTS_LITTLE_ENDIAN | 231 | select SYS_SUPPORTS_LITTLE_ENDIAN |
212 | select SYS_SUPPORTS_MIPS_CMP if BROKEN # because SYNC_R4K is broken | 232 | select SYS_SUPPORTS_MIPS_CMP |
213 | select SYS_SUPPORTS_MULTITHREADING | 233 | select SYS_SUPPORTS_MULTITHREADING |
214 | select SYS_SUPPORTS_SMARTMIPS | 234 | select SYS_SUPPORTS_SMARTMIPS |
215 | help | 235 | help |
@@ -247,6 +267,7 @@ config MACH_VR41XX | |||
247 | select CEVT_R4K | 267 | select CEVT_R4K |
248 | select CSRC_R4K | 268 | select CSRC_R4K |
249 | select SYS_HAS_CPU_VR41XX | 269 | select SYS_HAS_CPU_VR41XX |
270 | select ARCH_REQUIRE_GPIOLIB | ||
250 | 271 | ||
251 | config NXP_STB220 | 272 | config NXP_STB220 |
252 | bool "NXP STB220 board" | 273 | bool "NXP STB220 board" |
@@ -601,6 +622,7 @@ config CAVIUM_OCTEON_SIMULATOR | |||
601 | select SYS_SUPPORTS_64BIT_KERNEL | 622 | select SYS_SUPPORTS_64BIT_KERNEL |
602 | select SYS_SUPPORTS_BIG_ENDIAN | 623 | select SYS_SUPPORTS_BIG_ENDIAN |
603 | select SYS_SUPPORTS_HIGHMEM | 624 | select SYS_SUPPORTS_HIGHMEM |
625 | select SYS_SUPPORTS_HOTPLUG_CPU | ||
604 | select SYS_HAS_CPU_CAVIUM_OCTEON | 626 | select SYS_HAS_CPU_CAVIUM_OCTEON |
605 | help | 627 | help |
606 | The Octeon simulator is software performance model of the Cavium | 628 | The Octeon simulator is software performance model of the Cavium |
@@ -615,6 +637,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD | |||
615 | select SYS_SUPPORTS_64BIT_KERNEL | 637 | select SYS_SUPPORTS_64BIT_KERNEL |
616 | select SYS_SUPPORTS_BIG_ENDIAN | 638 | select SYS_SUPPORTS_BIG_ENDIAN |
617 | select SYS_SUPPORTS_HIGHMEM | 639 | select SYS_SUPPORTS_HIGHMEM |
640 | select SYS_SUPPORTS_HOTPLUG_CPU | ||
618 | select SYS_HAS_EARLY_PRINTK | 641 | select SYS_HAS_EARLY_PRINTK |
619 | select SYS_HAS_CPU_CAVIUM_OCTEON | 642 | select SYS_HAS_CPU_CAVIUM_OCTEON |
620 | select SWAP_IO_SPACE | 643 | select SWAP_IO_SPACE |
@@ -784,8 +807,17 @@ config SYS_HAS_EARLY_PRINTK | |||
784 | bool | 807 | bool |
785 | 808 | ||
786 | config HOTPLUG_CPU | 809 | config HOTPLUG_CPU |
810 | bool "Support for hot-pluggable CPUs" | ||
811 | depends on SMP && HOTPLUG && SYS_SUPPORTS_HOTPLUG_CPU | ||
812 | help | ||
813 | Say Y here to allow turning CPUs off and on. CPUs can be | ||
814 | controlled through /sys/devices/system/cpu. | ||
815 | (Note: power management support will enable this option | ||
816 | automatically on SMP systems. ) | ||
817 | Say N if you want to disable CPU hotplug. | ||
818 | |||
819 | config SYS_SUPPORTS_HOTPLUG_CPU | ||
787 | bool | 820 | bool |
788 | default n | ||
789 | 821 | ||
790 | config I8259 | 822 | config I8259 |
791 | bool | 823 | bool |
@@ -1624,7 +1656,7 @@ config MIPS_APSP_KSPD | |||
1624 | config MIPS_CMP | 1656 | config MIPS_CMP |
1625 | bool "MIPS CMP framework support" | 1657 | bool "MIPS CMP framework support" |
1626 | depends on SYS_SUPPORTS_MIPS_CMP | 1658 | depends on SYS_SUPPORTS_MIPS_CMP |
1627 | select SYNC_R4K if BROKEN | 1659 | select SYNC_R4K |
1628 | select SYS_SUPPORTS_SMP | 1660 | select SYS_SUPPORTS_SMP |
1629 | select SYS_SUPPORTS_SCHED_SMT if SMP | 1661 | select SYS_SUPPORTS_SCHED_SMT if SMP |
1630 | select WEAK_ORDERING | 1662 | select WEAK_ORDERING |
@@ -2136,11 +2168,11 @@ menu "Power management options" | |||
2136 | 2168 | ||
2137 | config ARCH_HIBERNATION_POSSIBLE | 2169 | config ARCH_HIBERNATION_POSSIBLE |
2138 | def_bool y | 2170 | def_bool y |
2139 | depends on !SMP | 2171 | depends on SYS_SUPPORTS_HOTPLUG_CPU || !SMP |
2140 | 2172 | ||
2141 | config ARCH_SUSPEND_POSSIBLE | 2173 | config ARCH_SUSPEND_POSSIBLE |
2142 | def_bool y | 2174 | def_bool y |
2143 | depends on !SMP | 2175 | depends on SYS_SUPPORTS_HOTPLUG_CPU || !SMP |
2144 | 2176 | ||
2145 | source "kernel/power/Kconfig" | 2177 | source "kernel/power/Kconfig" |
2146 | 2178 | ||
diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 807572a6a4d2..861da514a468 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile | |||
@@ -173,6 +173,13 @@ libs-y += arch/mips/fw/lib/ | |||
173 | # | 173 | # |
174 | 174 | ||
175 | # | 175 | # |
176 | # Texas Instruments AR7 | ||
177 | # | ||
178 | core-$(CONFIG_AR7) += arch/mips/ar7/ | ||
179 | cflags-$(CONFIG_AR7) += -I$(srctree)/arch/mips/include/asm/mach-ar7 | ||
180 | load-$(CONFIG_AR7) += 0xffffffff94100000 | ||
181 | |||
182 | # | ||
176 | # Acer PICA 61, Mips Magnum 4000 and Olivetti M700. | 183 | # Acer PICA 61, Mips Magnum 4000 and Olivetti M700. |
177 | # | 184 | # |
178 | core-$(CONFIG_MACH_JAZZ) += arch/mips/jazz/ | 185 | core-$(CONFIG_MACH_JAZZ) += arch/mips/jazz/ |
diff --git a/arch/mips/ar7/Makefile b/arch/mips/ar7/Makefile new file mode 100644 index 000000000000..7435e44b3964 --- /dev/null +++ b/arch/mips/ar7/Makefile | |||
@@ -0,0 +1,10 @@ | |||
1 | |||
2 | obj-y := \ | ||
3 | prom.o \ | ||
4 | setup.o \ | ||
5 | memory.o \ | ||
6 | irq.o \ | ||
7 | time.o \ | ||
8 | platform.o \ | ||
9 | gpio.o \ | ||
10 | clock.o | ||
diff --git a/arch/mips/ar7/clock.c b/arch/mips/ar7/clock.c new file mode 100644 index 000000000000..27dc6663f2fa --- /dev/null +++ b/arch/mips/ar7/clock.c | |||
@@ -0,0 +1,440 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org> | ||
3 | * Copyright (C) 2007 Eugene Konev <ejka@openwrt.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | */ | ||
19 | |||
20 | #include <linux/kernel.h> | ||
21 | #include <linux/init.h> | ||
22 | #include <linux/types.h> | ||
23 | #include <linux/module.h> | ||
24 | #include <linux/delay.h> | ||
25 | #include <linux/gcd.h> | ||
26 | #include <linux/io.h> | ||
27 | |||
28 | #include <asm/addrspace.h> | ||
29 | #include <asm/mach-ar7/ar7.h> | ||
30 | |||
31 | #define BOOT_PLL_SOURCE_MASK 0x3 | ||
32 | #define CPU_PLL_SOURCE_SHIFT 16 | ||
33 | #define BUS_PLL_SOURCE_SHIFT 14 | ||
34 | #define USB_PLL_SOURCE_SHIFT 18 | ||
35 | #define DSP_PLL_SOURCE_SHIFT 22 | ||
36 | #define BOOT_PLL_SOURCE_AFE 0 | ||
37 | #define BOOT_PLL_SOURCE_BUS 0 | ||
38 | #define BOOT_PLL_SOURCE_REF 1 | ||
39 | #define BOOT_PLL_SOURCE_XTAL 2 | ||
40 | #define BOOT_PLL_SOURCE_CPU 3 | ||
41 | #define BOOT_PLL_BYPASS 0x00000020 | ||
42 | #define BOOT_PLL_ASYNC_MODE 0x02000000 | ||
43 | #define BOOT_PLL_2TO1_MODE 0x00008000 | ||
44 | |||
45 | #define TNETD7200_CLOCK_ID_CPU 0 | ||
46 | #define TNETD7200_CLOCK_ID_DSP 1 | ||
47 | #define TNETD7200_CLOCK_ID_USB 2 | ||
48 | |||
49 | #define TNETD7200_DEF_CPU_CLK 211000000 | ||
50 | #define TNETD7200_DEF_DSP_CLK 125000000 | ||
51 | #define TNETD7200_DEF_USB_CLK 48000000 | ||
52 | |||
53 | struct tnetd7300_clock { | ||
54 | u32 ctrl; | ||
55 | #define PREDIV_MASK 0x001f0000 | ||
56 | #define PREDIV_SHIFT 16 | ||
57 | #define POSTDIV_MASK 0x0000001f | ||
58 | u32 unused1[3]; | ||
59 | u32 pll; | ||
60 | #define MUL_MASK 0x0000f000 | ||
61 | #define MUL_SHIFT 12 | ||
62 | #define PLL_MODE_MASK 0x00000001 | ||
63 | #define PLL_NDIV 0x00000800 | ||
64 | #define PLL_DIV 0x00000002 | ||
65 | #define PLL_STATUS 0x00000001 | ||
66 | u32 unused2[3]; | ||
67 | }; | ||
68 | |||
69 | struct tnetd7300_clocks { | ||
70 | struct tnetd7300_clock bus; | ||
71 | struct tnetd7300_clock cpu; | ||
72 | struct tnetd7300_clock usb; | ||
73 | struct tnetd7300_clock dsp; | ||
74 | }; | ||
75 | |||
76 | struct tnetd7200_clock { | ||
77 | u32 ctrl; | ||
78 | u32 unused1[3]; | ||
79 | #define DIVISOR_ENABLE_MASK 0x00008000 | ||
80 | u32 mul; | ||
81 | u32 prediv; | ||
82 | u32 postdiv; | ||
83 | u32 postdiv2; | ||
84 | u32 unused2[6]; | ||
85 | u32 cmd; | ||
86 | u32 status; | ||
87 | u32 cmden; | ||
88 | u32 padding[15]; | ||
89 | }; | ||
90 | |||
91 | struct tnetd7200_clocks { | ||
92 | struct tnetd7200_clock cpu; | ||
93 | struct tnetd7200_clock dsp; | ||
94 | struct tnetd7200_clock usb; | ||
95 | }; | ||
96 | |||
97 | int ar7_cpu_clock = 150000000; | ||
98 | EXPORT_SYMBOL(ar7_cpu_clock); | ||
99 | int ar7_bus_clock = 125000000; | ||
100 | EXPORT_SYMBOL(ar7_bus_clock); | ||
101 | int ar7_dsp_clock; | ||
102 | EXPORT_SYMBOL(ar7_dsp_clock); | ||
103 | |||
104 | static void approximate(int base, int target, int *prediv, | ||
105 | int *postdiv, int *mul) | ||
106 | { | ||
107 | int i, j, k, freq, res = target; | ||
108 | for (i = 1; i <= 16; i++) | ||
109 | for (j = 1; j <= 32; j++) | ||
110 | for (k = 1; k <= 32; k++) { | ||
111 | freq = abs(base / j * i / k - target); | ||
112 | if (freq < res) { | ||
113 | res = freq; | ||
114 | *mul = i; | ||
115 | *prediv = j; | ||
116 | *postdiv = k; | ||
117 | } | ||
118 | } | ||
119 | } | ||
120 | |||
121 | static void calculate(int base, int target, int *prediv, int *postdiv, | ||
122 | int *mul) | ||
123 | { | ||
124 | int tmp_gcd, tmp_base, tmp_freq; | ||
125 | |||
126 | for (*prediv = 1; *prediv <= 32; (*prediv)++) { | ||
127 | tmp_base = base / *prediv; | ||
128 | tmp_gcd = gcd(target, tmp_base); | ||
129 | *mul = target / tmp_gcd; | ||
130 | *postdiv = tmp_base / tmp_gcd; | ||
131 | if ((*mul < 1) || (*mul >= 16)) | ||
132 | continue; | ||
133 | if ((*postdiv > 0) & (*postdiv <= 32)) | ||
134 | break; | ||
135 | } | ||
136 | |||
137 | if (base / *prediv * *mul / *postdiv != target) { | ||
138 | approximate(base, target, prediv, postdiv, mul); | ||
139 | tmp_freq = base / *prediv * *mul / *postdiv; | ||
140 | printk(KERN_WARNING | ||
141 | "Adjusted requested frequency %d to %d\n", | ||
142 | target, tmp_freq); | ||
143 | } | ||
144 | |||
145 | printk(KERN_DEBUG "Clocks: prediv: %d, postdiv: %d, mul: %d\n", | ||
146 | *prediv, *postdiv, *mul); | ||
147 | } | ||
148 | |||
149 | static int tnetd7300_dsp_clock(void) | ||
150 | { | ||
151 | u32 didr1, didr2; | ||
152 | u8 rev = ar7_chip_rev(); | ||
153 | didr1 = readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x18)); | ||
154 | didr2 = readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x1c)); | ||
155 | if (didr2 & (1 << 23)) | ||
156 | return 0; | ||
157 | if ((rev >= 0x23) && (rev != 0x57)) | ||
158 | return 250000000; | ||
159 | if ((((didr2 & 0x1fff) << 10) | ((didr1 & 0xffc00000) >> 22)) | ||
160 | > 4208000) | ||
161 | return 250000000; | ||
162 | return 0; | ||
163 | } | ||
164 | |||
165 | static int tnetd7300_get_clock(u32 shift, struct tnetd7300_clock *clock, | ||
166 | u32 *bootcr, u32 bus_clock) | ||
167 | { | ||
168 | int product; | ||
169 | int base_clock = AR7_REF_CLOCK; | ||
170 | u32 ctrl = readl(&clock->ctrl); | ||
171 | u32 pll = readl(&clock->pll); | ||
172 | int prediv = ((ctrl & PREDIV_MASK) >> PREDIV_SHIFT) + 1; | ||
173 | int postdiv = (ctrl & POSTDIV_MASK) + 1; | ||
174 | int divisor = prediv * postdiv; | ||
175 | int mul = ((pll & MUL_MASK) >> MUL_SHIFT) + 1; | ||
176 | |||
177 | switch ((*bootcr & (BOOT_PLL_SOURCE_MASK << shift)) >> shift) { | ||
178 | case BOOT_PLL_SOURCE_BUS: | ||
179 | base_clock = bus_clock; | ||
180 | break; | ||
181 | case BOOT_PLL_SOURCE_REF: | ||
182 | base_clock = AR7_REF_CLOCK; | ||
183 | break; | ||
184 | case BOOT_PLL_SOURCE_XTAL: | ||
185 | base_clock = AR7_XTAL_CLOCK; | ||
186 | break; | ||
187 | case BOOT_PLL_SOURCE_CPU: | ||
188 | base_clock = ar7_cpu_clock; | ||
189 | break; | ||
190 | } | ||
191 | |||
192 | if (*bootcr & BOOT_PLL_BYPASS) | ||
193 | return base_clock / divisor; | ||
194 | |||
195 | if ((pll & PLL_MODE_MASK) == 0) | ||
196 | return (base_clock >> (mul / 16 + 1)) / divisor; | ||
197 | |||
198 | if ((pll & (PLL_NDIV | PLL_DIV)) == (PLL_NDIV | PLL_DIV)) { | ||
199 | product = (mul & 1) ? | ||
200 | (base_clock * mul) >> 1 : | ||
201 | (base_clock * (mul - 1)) >> 2; | ||
202 | return product / divisor; | ||
203 | } | ||
204 | |||
205 | if (mul == 16) | ||
206 | return base_clock / divisor; | ||
207 | |||
208 | return base_clock * mul / divisor; | ||
209 | } | ||
210 | |||
211 | static void tnetd7300_set_clock(u32 shift, struct tnetd7300_clock *clock, | ||
212 | u32 *bootcr, u32 frequency) | ||
213 | { | ||
214 | int prediv, postdiv, mul; | ||
215 | int base_clock = ar7_bus_clock; | ||
216 | |||
217 | switch ((*bootcr & (BOOT_PLL_SOURCE_MASK << shift)) >> shift) { | ||
218 | case BOOT_PLL_SOURCE_BUS: | ||
219 | base_clock = ar7_bus_clock; | ||
220 | break; | ||
221 | case BOOT_PLL_SOURCE_REF: | ||
222 | base_clock = AR7_REF_CLOCK; | ||
223 | break; | ||
224 | case BOOT_PLL_SOURCE_XTAL: | ||
225 | base_clock = AR7_XTAL_CLOCK; | ||
226 | break; | ||
227 | case BOOT_PLL_SOURCE_CPU: | ||
228 | base_clock = ar7_cpu_clock; | ||
229 | break; | ||
230 | } | ||
231 | |||
232 | calculate(base_clock, frequency, &prediv, &postdiv, &mul); | ||
233 | |||
234 | writel(((prediv - 1) << PREDIV_SHIFT) | (postdiv - 1), &clock->ctrl); | ||
235 | msleep(1); | ||
236 | writel(4, &clock->pll); | ||
237 | while (readl(&clock->pll) & PLL_STATUS) | ||
238 | ; | ||
239 | writel(((mul - 1) << MUL_SHIFT) | (0xff << 3) | 0x0e, &clock->pll); | ||
240 | msleep(75); | ||
241 | } | ||
242 | |||
243 | static void __init tnetd7300_init_clocks(void) | ||
244 | { | ||
245 | u32 *bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4); | ||
246 | struct tnetd7300_clocks *clocks = | ||
247 | ioremap_nocache(UR8_REGS_CLOCKS, | ||
248 | sizeof(struct tnetd7300_clocks)); | ||
249 | |||
250 | ar7_bus_clock = tnetd7300_get_clock(BUS_PLL_SOURCE_SHIFT, | ||
251 | &clocks->bus, bootcr, AR7_AFE_CLOCK); | ||
252 | |||
253 | if (*bootcr & BOOT_PLL_ASYNC_MODE) | ||
254 | ar7_cpu_clock = tnetd7300_get_clock(CPU_PLL_SOURCE_SHIFT, | ||
255 | &clocks->cpu, bootcr, AR7_AFE_CLOCK); | ||
256 | else | ||
257 | ar7_cpu_clock = ar7_bus_clock; | ||
258 | |||
259 | if (ar7_dsp_clock == 250000000) | ||
260 | tnetd7300_set_clock(DSP_PLL_SOURCE_SHIFT, &clocks->dsp, | ||
261 | bootcr, ar7_dsp_clock); | ||
262 | |||
263 | iounmap(clocks); | ||
264 | iounmap(bootcr); | ||
265 | } | ||
266 | |||
267 | static int tnetd7200_get_clock(int base, struct tnetd7200_clock *clock, | ||
268 | u32 *bootcr, u32 bus_clock) | ||
269 | { | ||
270 | int divisor = ((readl(&clock->prediv) & 0x1f) + 1) * | ||
271 | ((readl(&clock->postdiv) & 0x1f) + 1); | ||
272 | |||
273 | if (*bootcr & BOOT_PLL_BYPASS) | ||
274 | return base / divisor; | ||
275 | |||
276 | return base * ((readl(&clock->mul) & 0xf) + 1) / divisor; | ||
277 | } | ||
278 | |||
279 | |||
280 | static void tnetd7200_set_clock(int base, struct tnetd7200_clock *clock, | ||
281 | int prediv, int postdiv, int postdiv2, int mul, u32 frequency) | ||
282 | { | ||
283 | printk(KERN_INFO | ||
284 | "Clocks: base = %d, frequency = %u, prediv = %d, " | ||
285 | "postdiv = %d, postdiv2 = %d, mul = %d\n", | ||
286 | base, frequency, prediv, postdiv, postdiv2, mul); | ||
287 | |||
288 | writel(0, &clock->ctrl); | ||
289 | writel(DIVISOR_ENABLE_MASK | ((prediv - 1) & 0x1F), &clock->prediv); | ||
290 | writel((mul - 1) & 0xF, &clock->mul); | ||
291 | |||
292 | while (readl(&clock->status) & 0x1) | ||
293 | ; /* nop */ | ||
294 | |||
295 | writel(DIVISOR_ENABLE_MASK | ((postdiv - 1) & 0x1F), &clock->postdiv); | ||
296 | |||
297 | writel(readl(&clock->cmden) | 1, &clock->cmden); | ||
298 | writel(readl(&clock->cmd) | 1, &clock->cmd); | ||
299 | |||
300 | while (readl(&clock->status) & 0x1) | ||
301 | ; /* nop */ | ||
302 | |||
303 | writel(DIVISOR_ENABLE_MASK | ((postdiv2 - 1) & 0x1F), &clock->postdiv2); | ||
304 | |||
305 | writel(readl(&clock->cmden) | 1, &clock->cmden); | ||
306 | writel(readl(&clock->cmd) | 1, &clock->cmd); | ||
307 | |||
308 | while (readl(&clock->status) & 0x1) | ||
309 | ; /* nop */ | ||
310 | |||
311 | writel(readl(&clock->ctrl) | 1, &clock->ctrl); | ||
312 | } | ||
313 | |||
314 | static int tnetd7200_get_clock_base(int clock_id, u32 *bootcr) | ||
315 | { | ||
316 | if (*bootcr & BOOT_PLL_ASYNC_MODE) | ||
317 | /* Async */ | ||
318 | switch (clock_id) { | ||
319 | case TNETD7200_CLOCK_ID_DSP: | ||
320 | return AR7_REF_CLOCK; | ||
321 | default: | ||
322 | return AR7_AFE_CLOCK; | ||
323 | } | ||
324 | else | ||
325 | /* Sync */ | ||
326 | if (*bootcr & BOOT_PLL_2TO1_MODE) | ||
327 | /* 2:1 */ | ||
328 | switch (clock_id) { | ||
329 | case TNETD7200_CLOCK_ID_DSP: | ||
330 | return AR7_REF_CLOCK; | ||
331 | default: | ||
332 | return AR7_AFE_CLOCK; | ||
333 | } | ||
334 | else | ||
335 | /* 1:1 */ | ||
336 | return AR7_REF_CLOCK; | ||
337 | } | ||
338 | |||
339 | |||
340 | static void __init tnetd7200_init_clocks(void) | ||
341 | { | ||
342 | u32 *bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4); | ||
343 | struct tnetd7200_clocks *clocks = | ||
344 | ioremap_nocache(AR7_REGS_CLOCKS, | ||
345 | sizeof(struct tnetd7200_clocks)); | ||
346 | int cpu_base, cpu_mul, cpu_prediv, cpu_postdiv; | ||
347 | int dsp_base, dsp_mul, dsp_prediv, dsp_postdiv; | ||
348 | int usb_base, usb_mul, usb_prediv, usb_postdiv; | ||
349 | |||
350 | cpu_base = tnetd7200_get_clock_base(TNETD7200_CLOCK_ID_CPU, bootcr); | ||
351 | dsp_base = tnetd7200_get_clock_base(TNETD7200_CLOCK_ID_DSP, bootcr); | ||
352 | |||
353 | if (*bootcr & BOOT_PLL_ASYNC_MODE) { | ||
354 | printk(KERN_INFO "Clocks: Async mode\n"); | ||
355 | |||
356 | printk(KERN_INFO "Clocks: Setting DSP clock\n"); | ||
357 | calculate(dsp_base, TNETD7200_DEF_DSP_CLK, | ||
358 | &dsp_prediv, &dsp_postdiv, &dsp_mul); | ||
359 | ar7_bus_clock = | ||
360 | ((dsp_base / dsp_prediv) * dsp_mul) / dsp_postdiv; | ||
361 | tnetd7200_set_clock(dsp_base, &clocks->dsp, | ||
362 | dsp_prediv, dsp_postdiv * 2, dsp_postdiv, dsp_mul * 2, | ||
363 | ar7_bus_clock); | ||
364 | |||
365 | printk(KERN_INFO "Clocks: Setting CPU clock\n"); | ||
366 | calculate(cpu_base, TNETD7200_DEF_CPU_CLK, &cpu_prediv, | ||
367 | &cpu_postdiv, &cpu_mul); | ||
368 | ar7_cpu_clock = | ||
369 | ((cpu_base / cpu_prediv) * cpu_mul) / cpu_postdiv; | ||
370 | tnetd7200_set_clock(cpu_base, &clocks->cpu, | ||
371 | cpu_prediv, cpu_postdiv, -1, cpu_mul, | ||
372 | ar7_cpu_clock); | ||
373 | |||
374 | } else | ||
375 | if (*bootcr & BOOT_PLL_2TO1_MODE) { | ||
376 | printk(KERN_INFO "Clocks: Sync 2:1 mode\n"); | ||
377 | |||
378 | printk(KERN_INFO "Clocks: Setting CPU clock\n"); | ||
379 | calculate(cpu_base, TNETD7200_DEF_CPU_CLK, &cpu_prediv, | ||
380 | &cpu_postdiv, &cpu_mul); | ||
381 | ar7_cpu_clock = ((cpu_base / cpu_prediv) * cpu_mul) | ||
382 | / cpu_postdiv; | ||
383 | tnetd7200_set_clock(cpu_base, &clocks->cpu, | ||
384 | cpu_prediv, cpu_postdiv, -1, cpu_mul, | ||
385 | ar7_cpu_clock); | ||
386 | |||
387 | printk(KERN_INFO "Clocks: Setting DSP clock\n"); | ||
388 | calculate(dsp_base, TNETD7200_DEF_DSP_CLK, &dsp_prediv, | ||
389 | &dsp_postdiv, &dsp_mul); | ||
390 | ar7_bus_clock = ar7_cpu_clock / 2; | ||
391 | tnetd7200_set_clock(dsp_base, &clocks->dsp, | ||
392 | dsp_prediv, dsp_postdiv * 2, dsp_postdiv, | ||
393 | dsp_mul * 2, ar7_bus_clock); | ||
394 | } else { | ||
395 | printk(KERN_INFO "Clocks: Sync 1:1 mode\n"); | ||
396 | |||
397 | printk(KERN_INFO "Clocks: Setting DSP clock\n"); | ||
398 | calculate(dsp_base, TNETD7200_DEF_DSP_CLK, &dsp_prediv, | ||
399 | &dsp_postdiv, &dsp_mul); | ||
400 | ar7_bus_clock = ((dsp_base / dsp_prediv) * dsp_mul) | ||
401 | / dsp_postdiv; | ||
402 | tnetd7200_set_clock(dsp_base, &clocks->dsp, | ||
403 | dsp_prediv, dsp_postdiv * 2, dsp_postdiv, | ||
404 | dsp_mul * 2, ar7_bus_clock); | ||
405 | |||
406 | ar7_cpu_clock = ar7_bus_clock; | ||
407 | } | ||
408 | |||
409 | printk(KERN_INFO "Clocks: Setting USB clock\n"); | ||
410 | usb_base = ar7_bus_clock; | ||
411 | calculate(usb_base, TNETD7200_DEF_USB_CLK, &usb_prediv, | ||
412 | &usb_postdiv, &usb_mul); | ||
413 | tnetd7200_set_clock(usb_base, &clocks->usb, | ||
414 | usb_prediv, usb_postdiv, -1, usb_mul, | ||
415 | TNETD7200_DEF_USB_CLK); | ||
416 | |||
417 | ar7_dsp_clock = ar7_cpu_clock; | ||
418 | |||
419 | iounmap(clocks); | ||
420 | iounmap(bootcr); | ||
421 | } | ||
422 | |||
423 | int __init ar7_init_clocks(void) | ||
424 | { | ||
425 | switch (ar7_chip_id()) { | ||
426 | case AR7_CHIP_7100: | ||
427 | case AR7_CHIP_7200: | ||
428 | tnetd7200_init_clocks(); | ||
429 | break; | ||
430 | case AR7_CHIP_7300: | ||
431 | ar7_dsp_clock = tnetd7300_dsp_clock(); | ||
432 | tnetd7300_init_clocks(); | ||
433 | break; | ||
434 | default: | ||
435 | break; | ||
436 | } | ||
437 | |||
438 | return 0; | ||
439 | } | ||
440 | arch_initcall(ar7_init_clocks); | ||
diff --git a/arch/mips/ar7/gpio.c b/arch/mips/ar7/gpio.c new file mode 100644 index 000000000000..74e14a3dbf4a --- /dev/null +++ b/arch/mips/ar7/gpio.c | |||
@@ -0,0 +1,48 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org> | ||
3 | * Copyright (C) 2007 Eugene Konev <ejka@openwrt.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | */ | ||
19 | |||
20 | #include <linux/module.h> | ||
21 | |||
22 | #include <asm/mach-ar7/gpio.h> | ||
23 | |||
24 | static const char *ar7_gpio_list[AR7_GPIO_MAX]; | ||
25 | |||
26 | int gpio_request(unsigned gpio, const char *label) | ||
27 | { | ||
28 | if (gpio >= AR7_GPIO_MAX) | ||
29 | return -EINVAL; | ||
30 | |||
31 | if (ar7_gpio_list[gpio]) | ||
32 | return -EBUSY; | ||
33 | |||
34 | if (label) | ||
35 | ar7_gpio_list[gpio] = label; | ||
36 | else | ||
37 | ar7_gpio_list[gpio] = "busy"; | ||
38 | |||
39 | return 0; | ||
40 | } | ||
41 | EXPORT_SYMBOL(gpio_request); | ||
42 | |||
43 | void gpio_free(unsigned gpio) | ||
44 | { | ||
45 | BUG_ON(!ar7_gpio_list[gpio]); | ||
46 | ar7_gpio_list[gpio] = NULL; | ||
47 | } | ||
48 | EXPORT_SYMBOL(gpio_free); | ||
diff --git a/arch/mips/ar7/irq.c b/arch/mips/ar7/irq.c new file mode 100644 index 000000000000..c781556c44e4 --- /dev/null +++ b/arch/mips/ar7/irq.c | |||
@@ -0,0 +1,176 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org> | ||
3 | * Copyright (C) 2006,2007 Eugene Konev <ejka@openwrt.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | */ | ||
19 | |||
20 | #include <linux/interrupt.h> | ||
21 | #include <linux/io.h> | ||
22 | |||
23 | #include <asm/irq_cpu.h> | ||
24 | #include <asm/mipsregs.h> | ||
25 | #include <asm/mach-ar7/ar7.h> | ||
26 | |||
27 | #define EXCEPT_OFFSET 0x80 | ||
28 | #define PACE_OFFSET 0xA0 | ||
29 | #define CHNLS_OFFSET 0x200 | ||
30 | |||
31 | #define REG_OFFSET(irq, reg) ((irq) / 32 * 0x4 + reg * 0x10) | ||
32 | #define SEC_REG_OFFSET(reg) (EXCEPT_OFFSET + reg * 0x8) | ||
33 | #define SEC_SR_OFFSET (SEC_REG_OFFSET(0)) /* 0x80 */ | ||
34 | #define CR_OFFSET(irq) (REG_OFFSET(irq, 1)) /* 0x10 */ | ||
35 | #define SEC_CR_OFFSET (SEC_REG_OFFSET(1)) /* 0x88 */ | ||
36 | #define ESR_OFFSET(irq) (REG_OFFSET(irq, 2)) /* 0x20 */ | ||
37 | #define SEC_ESR_OFFSET (SEC_REG_OFFSET(2)) /* 0x90 */ | ||
38 | #define ECR_OFFSET(irq) (REG_OFFSET(irq, 3)) /* 0x30 */ | ||
39 | #define SEC_ECR_OFFSET (SEC_REG_OFFSET(3)) /* 0x98 */ | ||
40 | #define PIR_OFFSET (0x40) | ||
41 | #define MSR_OFFSET (0x44) | ||
42 | #define PM_OFFSET(irq) (REG_OFFSET(irq, 5)) /* 0x50 */ | ||
43 | #define TM_OFFSET(irq) (REG_OFFSET(irq, 6)) /* 0x60 */ | ||
44 | |||
45 | #define REG(addr) ((u32 *)(KSEG1ADDR(AR7_REGS_IRQ) + addr)) | ||
46 | |||
47 | #define CHNL_OFFSET(chnl) (CHNLS_OFFSET + (chnl * 4)) | ||
48 | |||
49 | static int ar7_irq_base; | ||
50 | |||
51 | static void ar7_unmask_irq(unsigned int irq) | ||
52 | { | ||
53 | writel(1 << ((irq - ar7_irq_base) % 32), | ||
54 | REG(ESR_OFFSET(irq - ar7_irq_base))); | ||
55 | } | ||
56 | |||
57 | static void ar7_mask_irq(unsigned int irq) | ||
58 | { | ||
59 | writel(1 << ((irq - ar7_irq_base) % 32), | ||
60 | REG(ECR_OFFSET(irq - ar7_irq_base))); | ||
61 | } | ||
62 | |||
63 | static void ar7_ack_irq(unsigned int irq) | ||
64 | { | ||
65 | writel(1 << ((irq - ar7_irq_base) % 32), | ||
66 | REG(CR_OFFSET(irq - ar7_irq_base))); | ||
67 | } | ||
68 | |||
69 | static void ar7_unmask_sec_irq(unsigned int irq) | ||
70 | { | ||
71 | writel(1 << (irq - ar7_irq_base - 40), REG(SEC_ESR_OFFSET)); | ||
72 | } | ||
73 | |||
74 | static void ar7_mask_sec_irq(unsigned int irq) | ||
75 | { | ||
76 | writel(1 << (irq - ar7_irq_base - 40), REG(SEC_ECR_OFFSET)); | ||
77 | } | ||
78 | |||
79 | static void ar7_ack_sec_irq(unsigned int irq) | ||
80 | { | ||
81 | writel(1 << (irq - ar7_irq_base - 40), REG(SEC_CR_OFFSET)); | ||
82 | } | ||
83 | |||
84 | static struct irq_chip ar7_irq_type = { | ||
85 | .name = "AR7", | ||
86 | .unmask = ar7_unmask_irq, | ||
87 | .mask = ar7_mask_irq, | ||
88 | .ack = ar7_ack_irq | ||
89 | }; | ||
90 | |||
91 | static struct irq_chip ar7_sec_irq_type = { | ||
92 | .name = "AR7", | ||
93 | .unmask = ar7_unmask_sec_irq, | ||
94 | .mask = ar7_mask_sec_irq, | ||
95 | .ack = ar7_ack_sec_irq, | ||
96 | }; | ||
97 | |||
98 | static struct irqaction ar7_cascade_action = { | ||
99 | .handler = no_action, | ||
100 | .name = "AR7 cascade interrupt" | ||
101 | }; | ||
102 | |||
103 | static void __init ar7_irq_init(int base) | ||
104 | { | ||
105 | int i; | ||
106 | /* | ||
107 | * Disable interrupts and clear pending | ||
108 | */ | ||
109 | writel(0xffffffff, REG(ECR_OFFSET(0))); | ||
110 | writel(0xff, REG(ECR_OFFSET(32))); | ||
111 | writel(0xffffffff, REG(SEC_ECR_OFFSET)); | ||
112 | writel(0xffffffff, REG(CR_OFFSET(0))); | ||
113 | writel(0xff, REG(CR_OFFSET(32))); | ||
114 | writel(0xffffffff, REG(SEC_CR_OFFSET)); | ||
115 | |||
116 | ar7_irq_base = base; | ||
117 | |||
118 | for (i = 0; i < 40; i++) { | ||
119 | writel(i, REG(CHNL_OFFSET(i))); | ||
120 | /* Primary IRQ's */ | ||
121 | set_irq_chip_and_handler(base + i, &ar7_irq_type, | ||
122 | handle_level_irq); | ||
123 | /* Secondary IRQ's */ | ||
124 | if (i < 32) | ||
125 | set_irq_chip_and_handler(base + i + 40, | ||
126 | &ar7_sec_irq_type, | ||
127 | handle_level_irq); | ||
128 | } | ||
129 | |||
130 | setup_irq(2, &ar7_cascade_action); | ||
131 | setup_irq(ar7_irq_base, &ar7_cascade_action); | ||
132 | set_c0_status(IE_IRQ0); | ||
133 | } | ||
134 | |||
135 | void __init arch_init_irq(void) | ||
136 | { | ||
137 | mips_cpu_irq_init(); | ||
138 | ar7_irq_init(8); | ||
139 | } | ||
140 | |||
141 | static void ar7_cascade(void) | ||
142 | { | ||
143 | u32 status; | ||
144 | int i, irq; | ||
145 | |||
146 | /* Primary IRQ's */ | ||
147 | irq = readl(REG(PIR_OFFSET)) & 0x3f; | ||
148 | if (irq) { | ||
149 | do_IRQ(ar7_irq_base + irq); | ||
150 | return; | ||
151 | } | ||
152 | |||
153 | /* Secondary IRQ's are cascaded through primary '0' */ | ||
154 | writel(1, REG(CR_OFFSET(irq))); | ||
155 | status = readl(REG(SEC_SR_OFFSET)); | ||
156 | for (i = 0; i < 32; i++) { | ||
157 | if (status & 1) { | ||
158 | do_IRQ(ar7_irq_base + i + 40); | ||
159 | return; | ||
160 | } | ||
161 | status >>= 1; | ||
162 | } | ||
163 | |||
164 | spurious_interrupt(); | ||
165 | } | ||
166 | |||
167 | asmlinkage void plat_irq_dispatch(void) | ||
168 | { | ||
169 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; | ||
170 | if (pending & STATUSF_IP7) /* cpu timer */ | ||
171 | do_IRQ(7); | ||
172 | else if (pending & STATUSF_IP2) /* int0 hardware line */ | ||
173 | ar7_cascade(); | ||
174 | else | ||
175 | spurious_interrupt(); | ||
176 | } | ||
diff --git a/arch/mips/ar7/memory.c b/arch/mips/ar7/memory.c new file mode 100644 index 000000000000..46fed44825a6 --- /dev/null +++ b/arch/mips/ar7/memory.c | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org> | ||
3 | * Copyright (C) 2007 Eugene Konev <ejka@openwrt.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | */ | ||
19 | #include <linux/bootmem.h> | ||
20 | #include <linux/init.h> | ||
21 | #include <linux/mm.h> | ||
22 | #include <linux/module.h> | ||
23 | #include <linux/pfn.h> | ||
24 | #include <linux/proc_fs.h> | ||
25 | #include <linux/string.h> | ||
26 | #include <linux/swap.h> | ||
27 | |||
28 | #include <asm/bootinfo.h> | ||
29 | #include <asm/page.h> | ||
30 | #include <asm/sections.h> | ||
31 | |||
32 | #include <asm/mach-ar7/ar7.h> | ||
33 | #include <asm/mips-boards/prom.h> | ||
34 | |||
35 | static int __init memsize(void) | ||
36 | { | ||
37 | u32 size = (64 << 20); | ||
38 | u32 *addr = (u32 *)KSEG1ADDR(AR7_SDRAM_BASE + size - 4); | ||
39 | u32 *kernel_end = (u32 *)KSEG1ADDR(CPHYSADDR((u32)&_end)); | ||
40 | u32 *tmpaddr = addr; | ||
41 | |||
42 | while (tmpaddr > kernel_end) { | ||
43 | *tmpaddr = (u32)tmpaddr; | ||
44 | size >>= 1; | ||
45 | tmpaddr -= size >> 2; | ||
46 | } | ||
47 | |||
48 | do { | ||
49 | tmpaddr += size >> 2; | ||
50 | if (*tmpaddr != (u32)tmpaddr) | ||
51 | break; | ||
52 | size <<= 1; | ||
53 | } while (size < (64 << 20)); | ||
54 | |||
55 | writel(tmpaddr, &addr); | ||
56 | |||
57 | return size; | ||
58 | } | ||
59 | |||
60 | void __init prom_meminit(void) | ||
61 | { | ||
62 | unsigned long pages; | ||
63 | |||
64 | pages = memsize() >> PAGE_SHIFT; | ||
65 | add_memory_region(PHYS_OFFSET, pages << PAGE_SHIFT, | ||
66 | BOOT_MEM_RAM); | ||
67 | } | ||
68 | |||
69 | void __init prom_free_prom_memory(void) | ||
70 | { | ||
71 | /* Nothing to free */ | ||
72 | } | ||
diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c new file mode 100644 index 000000000000..542244961780 --- /dev/null +++ b/arch/mips/ar7/platform.c | |||
@@ -0,0 +1,555 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org> | ||
3 | * Copyright (C) 2006,2007 Eugene Konev <ejka@openwrt.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | */ | ||
19 | |||
20 | #include <linux/init.h> | ||
21 | #include <linux/types.h> | ||
22 | #include <linux/module.h> | ||
23 | #include <linux/delay.h> | ||
24 | #include <linux/dma-mapping.h> | ||
25 | #include <linux/platform_device.h> | ||
26 | #include <linux/mtd/physmap.h> | ||
27 | #include <linux/serial.h> | ||
28 | #include <linux/serial_8250.h> | ||
29 | #include <linux/ioport.h> | ||
30 | #include <linux/io.h> | ||
31 | #include <linux/version.h> | ||
32 | #include <linux/vlynq.h> | ||
33 | #include <linux/leds.h> | ||
34 | #include <linux/string.h> | ||
35 | #include <linux/etherdevice.h> | ||
36 | |||
37 | #include <asm/addrspace.h> | ||
38 | #include <asm/mach-ar7/ar7.h> | ||
39 | #include <asm/mach-ar7/gpio.h> | ||
40 | #include <asm/mach-ar7/prom.h> | ||
41 | |||
42 | struct plat_vlynq_data { | ||
43 | struct plat_vlynq_ops ops; | ||
44 | int gpio_bit; | ||
45 | int reset_bit; | ||
46 | }; | ||
47 | |||
48 | |||
49 | static int vlynq_on(struct vlynq_device *dev) | ||
50 | { | ||
51 | int result; | ||
52 | struct plat_vlynq_data *pdata = dev->dev.platform_data; | ||
53 | |||
54 | result = gpio_request(pdata->gpio_bit, "vlynq"); | ||
55 | if (result) | ||
56 | goto out; | ||
57 | |||
58 | ar7_device_reset(pdata->reset_bit); | ||
59 | |||
60 | result = ar7_gpio_disable(pdata->gpio_bit); | ||
61 | if (result) | ||
62 | goto out_enabled; | ||
63 | |||
64 | result = ar7_gpio_enable(pdata->gpio_bit); | ||
65 | if (result) | ||
66 | goto out_enabled; | ||
67 | |||
68 | result = gpio_direction_output(pdata->gpio_bit, 0); | ||
69 | if (result) | ||
70 | goto out_gpio_enabled; | ||
71 | |||
72 | msleep(50); | ||
73 | |||
74 | gpio_set_value(pdata->gpio_bit, 1); | ||
75 | msleep(50); | ||
76 | |||
77 | return 0; | ||
78 | |||
79 | out_gpio_enabled: | ||
80 | ar7_gpio_disable(pdata->gpio_bit); | ||
81 | out_enabled: | ||
82 | ar7_device_disable(pdata->reset_bit); | ||
83 | gpio_free(pdata->gpio_bit); | ||
84 | out: | ||
85 | return result; | ||
86 | } | ||
87 | |||
88 | static void vlynq_off(struct vlynq_device *dev) | ||
89 | { | ||
90 | struct plat_vlynq_data *pdata = dev->dev.platform_data; | ||
91 | ar7_gpio_disable(pdata->gpio_bit); | ||
92 | gpio_free(pdata->gpio_bit); | ||
93 | ar7_device_disable(pdata->reset_bit); | ||
94 | } | ||
95 | |||
96 | static struct resource physmap_flash_resource = { | ||
97 | .name = "mem", | ||
98 | .flags = IORESOURCE_MEM, | ||
99 | .start = 0x10000000, | ||
100 | .end = 0x107fffff, | ||
101 | }; | ||
102 | |||
103 | static struct resource cpmac_low_res[] = { | ||
104 | { | ||
105 | .name = "regs", | ||
106 | .flags = IORESOURCE_MEM, | ||
107 | .start = AR7_REGS_MAC0, | ||
108 | .end = AR7_REGS_MAC0 + 0x7ff, | ||
109 | }, | ||
110 | { | ||
111 | .name = "irq", | ||
112 | .flags = IORESOURCE_IRQ, | ||
113 | .start = 27, | ||
114 | .end = 27, | ||
115 | }, | ||
116 | }; | ||
117 | |||
118 | static struct resource cpmac_high_res[] = { | ||
119 | { | ||
120 | .name = "regs", | ||
121 | .flags = IORESOURCE_MEM, | ||
122 | .start = AR7_REGS_MAC1, | ||
123 | .end = AR7_REGS_MAC1 + 0x7ff, | ||
124 | }, | ||
125 | { | ||
126 | .name = "irq", | ||
127 | .flags = IORESOURCE_IRQ, | ||
128 | .start = 41, | ||
129 | .end = 41, | ||
130 | }, | ||
131 | }; | ||
132 | |||
133 | static struct resource vlynq_low_res[] = { | ||
134 | { | ||
135 | .name = "regs", | ||
136 | .flags = IORESOURCE_MEM, | ||
137 | .start = AR7_REGS_VLYNQ0, | ||
138 | .end = AR7_REGS_VLYNQ0 + 0xff, | ||
139 | }, | ||
140 | { | ||
141 | .name = "irq", | ||
142 | .flags = IORESOURCE_IRQ, | ||
143 | .start = 29, | ||
144 | .end = 29, | ||
145 | }, | ||
146 | { | ||
147 | .name = "mem", | ||
148 | .flags = IORESOURCE_MEM, | ||
149 | .start = 0x04000000, | ||
150 | .end = 0x04ffffff, | ||
151 | }, | ||
152 | { | ||
153 | .name = "devirq", | ||
154 | .flags = IORESOURCE_IRQ, | ||
155 | .start = 80, | ||
156 | .end = 111, | ||
157 | }, | ||
158 | }; | ||
159 | |||
160 | static struct resource vlynq_high_res[] = { | ||
161 | { | ||
162 | .name = "regs", | ||
163 | .flags = IORESOURCE_MEM, | ||
164 | .start = AR7_REGS_VLYNQ1, | ||
165 | .end = AR7_REGS_VLYNQ1 + 0xff, | ||
166 | }, | ||
167 | { | ||
168 | .name = "irq", | ||
169 | .flags = IORESOURCE_IRQ, | ||
170 | .start = 33, | ||
171 | .end = 33, | ||
172 | }, | ||
173 | { | ||
174 | .name = "mem", | ||
175 | .flags = IORESOURCE_MEM, | ||
176 | .start = 0x0c000000, | ||
177 | .end = 0x0cffffff, | ||
178 | }, | ||
179 | { | ||
180 | .name = "devirq", | ||
181 | .flags = IORESOURCE_IRQ, | ||
182 | .start = 112, | ||
183 | .end = 143, | ||
184 | }, | ||
185 | }; | ||
186 | |||
187 | static struct resource usb_res[] = { | ||
188 | { | ||
189 | .name = "regs", | ||
190 | .flags = IORESOURCE_MEM, | ||
191 | .start = AR7_REGS_USB, | ||
192 | .end = AR7_REGS_USB + 0xff, | ||
193 | }, | ||
194 | { | ||
195 | .name = "irq", | ||
196 | .flags = IORESOURCE_IRQ, | ||
197 | .start = 32, | ||
198 | .end = 32, | ||
199 | }, | ||
200 | { | ||
201 | .name = "mem", | ||
202 | .flags = IORESOURCE_MEM, | ||
203 | .start = 0x03400000, | ||
204 | .end = 0x034001fff, | ||
205 | }, | ||
206 | }; | ||
207 | |||
208 | static struct physmap_flash_data physmap_flash_data = { | ||
209 | .width = 2, | ||
210 | }; | ||
211 | |||
212 | static struct plat_cpmac_data cpmac_low_data = { | ||
213 | .reset_bit = 17, | ||
214 | .power_bit = 20, | ||
215 | .phy_mask = 0x80000000, | ||
216 | }; | ||
217 | |||
218 | static struct plat_cpmac_data cpmac_high_data = { | ||
219 | .reset_bit = 21, | ||
220 | .power_bit = 22, | ||
221 | .phy_mask = 0x7fffffff, | ||
222 | }; | ||
223 | |||
224 | static struct plat_vlynq_data vlynq_low_data = { | ||
225 | .ops.on = vlynq_on, | ||
226 | .ops.off = vlynq_off, | ||
227 | .reset_bit = 20, | ||
228 | .gpio_bit = 18, | ||
229 | }; | ||
230 | |||
231 | static struct plat_vlynq_data vlynq_high_data = { | ||
232 | .ops.on = vlynq_on, | ||
233 | .ops.off = vlynq_off, | ||
234 | .reset_bit = 16, | ||
235 | .gpio_bit = 19, | ||
236 | }; | ||
237 | |||
238 | static struct platform_device physmap_flash = { | ||
239 | .id = 0, | ||
240 | .name = "physmap-flash", | ||
241 | .dev.platform_data = &physmap_flash_data, | ||
242 | .resource = &physmap_flash_resource, | ||
243 | .num_resources = 1, | ||
244 | }; | ||
245 | |||
246 | static u64 cpmac_dma_mask = DMA_32BIT_MASK; | ||
247 | static struct platform_device cpmac_low = { | ||
248 | .id = 0, | ||
249 | .name = "cpmac", | ||
250 | .dev = { | ||
251 | .dma_mask = &cpmac_dma_mask, | ||
252 | .coherent_dma_mask = DMA_32BIT_MASK, | ||
253 | .platform_data = &cpmac_low_data, | ||
254 | }, | ||
255 | .resource = cpmac_low_res, | ||
256 | .num_resources = ARRAY_SIZE(cpmac_low_res), | ||
257 | }; | ||
258 | |||
259 | static struct platform_device cpmac_high = { | ||
260 | .id = 1, | ||
261 | .name = "cpmac", | ||
262 | .dev = { | ||
263 | .dma_mask = &cpmac_dma_mask, | ||
264 | .coherent_dma_mask = DMA_32BIT_MASK, | ||
265 | .platform_data = &cpmac_high_data, | ||
266 | }, | ||
267 | .resource = cpmac_high_res, | ||
268 | .num_resources = ARRAY_SIZE(cpmac_high_res), | ||
269 | }; | ||
270 | |||
271 | static struct platform_device vlynq_low = { | ||
272 | .id = 0, | ||
273 | .name = "vlynq", | ||
274 | .dev.platform_data = &vlynq_low_data, | ||
275 | .resource = vlynq_low_res, | ||
276 | .num_resources = ARRAY_SIZE(vlynq_low_res), | ||
277 | }; | ||
278 | |||
279 | static struct platform_device vlynq_high = { | ||
280 | .id = 1, | ||
281 | .name = "vlynq", | ||
282 | .dev.platform_data = &vlynq_high_data, | ||
283 | .resource = vlynq_high_res, | ||
284 | .num_resources = ARRAY_SIZE(vlynq_high_res), | ||
285 | }; | ||
286 | |||
287 | |||
288 | static struct gpio_led default_leds[] = { | ||
289 | { | ||
290 | .name = "status", | ||
291 | .gpio = 8, | ||
292 | .active_low = 1, | ||
293 | }, | ||
294 | }; | ||
295 | |||
296 | static struct gpio_led dsl502t_leds[] = { | ||
297 | { | ||
298 | .name = "status", | ||
299 | .gpio = 9, | ||
300 | .active_low = 1, | ||
301 | }, | ||
302 | { | ||
303 | .name = "ethernet", | ||
304 | .gpio = 7, | ||
305 | .active_low = 1, | ||
306 | }, | ||
307 | { | ||
308 | .name = "usb", | ||
309 | .gpio = 12, | ||
310 | .active_low = 1, | ||
311 | }, | ||
312 | }; | ||
313 | |||
314 | static struct gpio_led dg834g_leds[] = { | ||
315 | { | ||
316 | .name = "ppp", | ||
317 | .gpio = 6, | ||
318 | .active_low = 1, | ||
319 | }, | ||
320 | { | ||
321 | .name = "status", | ||
322 | .gpio = 7, | ||
323 | .active_low = 1, | ||
324 | }, | ||
325 | { | ||
326 | .name = "adsl", | ||
327 | .gpio = 8, | ||
328 | .active_low = 1, | ||
329 | }, | ||
330 | { | ||
331 | .name = "wifi", | ||
332 | .gpio = 12, | ||
333 | .active_low = 1, | ||
334 | }, | ||
335 | { | ||
336 | .name = "power", | ||
337 | .gpio = 14, | ||
338 | .active_low = 1, | ||
339 | .default_trigger = "default-on", | ||
340 | }, | ||
341 | }; | ||
342 | |||
343 | static struct gpio_led fb_sl_leds[] = { | ||
344 | { | ||
345 | .name = "1", | ||
346 | .gpio = 7, | ||
347 | }, | ||
348 | { | ||
349 | .name = "2", | ||
350 | .gpio = 13, | ||
351 | .active_low = 1, | ||
352 | }, | ||
353 | { | ||
354 | .name = "3", | ||
355 | .gpio = 10, | ||
356 | .active_low = 1, | ||
357 | }, | ||
358 | { | ||
359 | .name = "4", | ||
360 | .gpio = 12, | ||
361 | .active_low = 1, | ||
362 | }, | ||
363 | { | ||
364 | .name = "5", | ||
365 | .gpio = 9, | ||
366 | .active_low = 1, | ||
367 | }, | ||
368 | }; | ||
369 | |||
370 | static struct gpio_led fb_fon_leds[] = { | ||
371 | { | ||
372 | .name = "1", | ||
373 | .gpio = 8, | ||
374 | }, | ||
375 | { | ||
376 | .name = "2", | ||
377 | .gpio = 3, | ||
378 | .active_low = 1, | ||
379 | }, | ||
380 | { | ||
381 | .name = "3", | ||
382 | .gpio = 5, | ||
383 | }, | ||
384 | { | ||
385 | .name = "4", | ||
386 | .gpio = 4, | ||
387 | .active_low = 1, | ||
388 | }, | ||
389 | { | ||
390 | .name = "5", | ||
391 | .gpio = 11, | ||
392 | .active_low = 1, | ||
393 | }, | ||
394 | }; | ||
395 | |||
396 | static struct gpio_led_platform_data ar7_led_data; | ||
397 | |||
398 | static struct platform_device ar7_gpio_leds = { | ||
399 | .name = "leds-gpio", | ||
400 | .id = -1, | ||
401 | .dev = { | ||
402 | .platform_data = &ar7_led_data, | ||
403 | } | ||
404 | }; | ||
405 | |||
406 | static struct platform_device ar7_udc = { | ||
407 | .id = -1, | ||
408 | .name = "ar7_udc", | ||
409 | .resource = usb_res, | ||
410 | .num_resources = ARRAY_SIZE(usb_res), | ||
411 | }; | ||
412 | |||
413 | static inline unsigned char char2hex(char h) | ||
414 | { | ||
415 | switch (h) { | ||
416 | case '0': case '1': case '2': case '3': case '4': | ||
417 | case '5': case '6': case '7': case '8': case '9': | ||
418 | return h - '0'; | ||
419 | case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': | ||
420 | return h - 'A' + 10; | ||
421 | case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': | ||
422 | return h - 'a' + 10; | ||
423 | default: | ||
424 | return 0; | ||
425 | } | ||
426 | } | ||
427 | |||
428 | static void cpmac_get_mac(int instance, unsigned char *dev_addr) | ||
429 | { | ||
430 | int i; | ||
431 | char name[5], default_mac[ETH_ALEN], *mac; | ||
432 | |||
433 | mac = NULL; | ||
434 | sprintf(name, "mac%c", 'a' + instance); | ||
435 | mac = prom_getenv(name); | ||
436 | if (!mac) { | ||
437 | sprintf(name, "mac%c", 'a'); | ||
438 | mac = prom_getenv(name); | ||
439 | } | ||
440 | if (!mac) { | ||
441 | random_ether_addr(default_mac); | ||
442 | mac = default_mac; | ||
443 | } | ||
444 | for (i = 0; i < 6; i++) | ||
445 | dev_addr[i] = (char2hex(mac[i * 3]) << 4) + | ||
446 | char2hex(mac[i * 3 + 1]); | ||
447 | } | ||
448 | |||
449 | static void __init detect_leds(void) | ||
450 | { | ||
451 | char *prid, *usb_prod; | ||
452 | |||
453 | /* Default LEDs */ | ||
454 | ar7_led_data.num_leds = ARRAY_SIZE(default_leds); | ||
455 | ar7_led_data.leds = default_leds; | ||
456 | |||
457 | /* FIXME: the whole thing is unreliable */ | ||
458 | prid = prom_getenv("ProductID"); | ||
459 | usb_prod = prom_getenv("usb_prod"); | ||
460 | |||
461 | /* If we can't get the product id from PROM, use the default LEDs */ | ||
462 | if (!prid) | ||
463 | return; | ||
464 | |||
465 | if (strstr(prid, "Fritz_Box_FON")) { | ||
466 | ar7_led_data.num_leds = ARRAY_SIZE(fb_fon_leds); | ||
467 | ar7_led_data.leds = fb_fon_leds; | ||
468 | } else if (strstr(prid, "Fritz_Box_")) { | ||
469 | ar7_led_data.num_leds = ARRAY_SIZE(fb_sl_leds); | ||
470 | ar7_led_data.leds = fb_sl_leds; | ||
471 | } else if ((!strcmp(prid, "AR7RD") || !strcmp(prid, "AR7DB")) | ||
472 | && usb_prod != NULL && strstr(usb_prod, "DSL-502T")) { | ||
473 | ar7_led_data.num_leds = ARRAY_SIZE(dsl502t_leds); | ||
474 | ar7_led_data.leds = dsl502t_leds; | ||
475 | } else if (strstr(prid, "DG834")) { | ||
476 | ar7_led_data.num_leds = ARRAY_SIZE(dg834g_leds); | ||
477 | ar7_led_data.leds = dg834g_leds; | ||
478 | } | ||
479 | } | ||
480 | |||
481 | static int __init ar7_register_devices(void) | ||
482 | { | ||
483 | int res; | ||
484 | static struct uart_port uart_port[2]; | ||
485 | |||
486 | memset(uart_port, 0, sizeof(struct uart_port) * 2); | ||
487 | |||
488 | uart_port[0].type = PORT_16550A; | ||
489 | uart_port[0].line = 0; | ||
490 | uart_port[0].irq = AR7_IRQ_UART0; | ||
491 | uart_port[0].uartclk = ar7_bus_freq() / 2; | ||
492 | uart_port[0].iotype = UPIO_MEM32; | ||
493 | uart_port[0].mapbase = AR7_REGS_UART0; | ||
494 | uart_port[0].membase = ioremap(uart_port[0].mapbase, 256); | ||
495 | uart_port[0].regshift = 2; | ||
496 | res = early_serial_setup(&uart_port[0]); | ||
497 | if (res) | ||
498 | return res; | ||
499 | |||
500 | |||
501 | /* Only TNETD73xx have a second serial port */ | ||
502 | if (ar7_has_second_uart()) { | ||
503 | uart_port[1].type = PORT_16550A; | ||
504 | uart_port[1].line = 1; | ||
505 | uart_port[1].irq = AR7_IRQ_UART1; | ||
506 | uart_port[1].uartclk = ar7_bus_freq() / 2; | ||
507 | uart_port[1].iotype = UPIO_MEM32; | ||
508 | uart_port[1].mapbase = UR8_REGS_UART1; | ||
509 | uart_port[1].membase = ioremap(uart_port[1].mapbase, 256); | ||
510 | uart_port[1].regshift = 2; | ||
511 | res = early_serial_setup(&uart_port[1]); | ||
512 | if (res) | ||
513 | return res; | ||
514 | } | ||
515 | |||
516 | res = platform_device_register(&physmap_flash); | ||
517 | if (res) | ||
518 | return res; | ||
519 | |||
520 | ar7_device_disable(vlynq_low_data.reset_bit); | ||
521 | res = platform_device_register(&vlynq_low); | ||
522 | if (res) | ||
523 | return res; | ||
524 | |||
525 | if (ar7_has_high_vlynq()) { | ||
526 | ar7_device_disable(vlynq_high_data.reset_bit); | ||
527 | res = platform_device_register(&vlynq_high); | ||
528 | if (res) | ||
529 | return res; | ||
530 | } | ||
531 | |||
532 | if (ar7_has_high_cpmac()) { | ||
533 | cpmac_get_mac(1, cpmac_high_data.dev_addr); | ||
534 | res = platform_device_register(&cpmac_high); | ||
535 | if (res) | ||
536 | return res; | ||
537 | } else { | ||
538 | cpmac_low_data.phy_mask = 0xffffffff; | ||
539 | } | ||
540 | |||
541 | cpmac_get_mac(0, cpmac_low_data.dev_addr); | ||
542 | res = platform_device_register(&cpmac_low); | ||
543 | if (res) | ||
544 | return res; | ||
545 | |||
546 | detect_leds(); | ||
547 | res = platform_device_register(&ar7_gpio_leds); | ||
548 | if (res) | ||
549 | return res; | ||
550 | |||
551 | res = platform_device_register(&ar7_udc); | ||
552 | |||
553 | return res; | ||
554 | } | ||
555 | arch_initcall(ar7_register_devices); | ||
diff --git a/arch/mips/ar7/prom.c b/arch/mips/ar7/prom.c new file mode 100644 index 000000000000..a320bceb2f9d --- /dev/null +++ b/arch/mips/ar7/prom.c | |||
@@ -0,0 +1,297 @@ | |||
1 | /* | ||
2 | * Carsten Langgaard, carstenl@mips.com | ||
3 | * Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved. | ||
4 | * | ||
5 | * This program is free software; you can distribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License (Version 2) as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
12 | * for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along | ||
15 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
17 | * | ||
18 | * Putting things on the screen/serial line using YAMONs facilities. | ||
19 | */ | ||
20 | #include <linux/init.h> | ||
21 | #include <linux/kernel.h> | ||
22 | #include <linux/serial_reg.h> | ||
23 | #include <linux/spinlock.h> | ||
24 | #include <linux/module.h> | ||
25 | #include <linux/string.h> | ||
26 | #include <linux/io.h> | ||
27 | #include <asm/bootinfo.h> | ||
28 | |||
29 | #include <asm/mach-ar7/ar7.h> | ||
30 | #include <asm/mach-ar7/prom.h> | ||
31 | |||
32 | #define MAX_ENTRY 80 | ||
33 | |||
34 | struct env_var { | ||
35 | char *name; | ||
36 | char *value; | ||
37 | }; | ||
38 | |||
39 | static struct env_var adam2_env[MAX_ENTRY]; | ||
40 | |||
41 | char *prom_getenv(const char *name) | ||
42 | { | ||
43 | int i; | ||
44 | for (i = 0; (i < MAX_ENTRY) && adam2_env[i].name; i++) | ||
45 | if (!strcmp(name, adam2_env[i].name)) | ||
46 | return adam2_env[i].value; | ||
47 | |||
48 | return NULL; | ||
49 | } | ||
50 | EXPORT_SYMBOL(prom_getenv); | ||
51 | |||
52 | char * __init prom_getcmdline(void) | ||
53 | { | ||
54 | return &(arcs_cmdline[0]); | ||
55 | } | ||
56 | |||
57 | static void __init ar7_init_cmdline(int argc, char *argv[]) | ||
58 | { | ||
59 | char *cp; | ||
60 | int actr; | ||
61 | |||
62 | actr = 1; /* Always ignore argv[0] */ | ||
63 | |||
64 | cp = &(arcs_cmdline[0]); | ||
65 | while (actr < argc) { | ||
66 | strcpy(cp, argv[actr]); | ||
67 | cp += strlen(argv[actr]); | ||
68 | *cp++ = ' '; | ||
69 | actr++; | ||
70 | } | ||
71 | if (cp != &(arcs_cmdline[0])) { | ||
72 | /* get rid of trailing space */ | ||
73 | --cp; | ||
74 | *cp = '\0'; | ||
75 | } | ||
76 | } | ||
77 | |||
78 | struct psbl_rec { | ||
79 | u32 psbl_size; | ||
80 | u32 env_base; | ||
81 | u32 env_size; | ||
82 | u32 ffs_base; | ||
83 | u32 ffs_size; | ||
84 | }; | ||
85 | |||
86 | static __initdata char psp_env_version[] = "TIENV0.8"; | ||
87 | |||
88 | struct psp_env_chunk { | ||
89 | u8 num; | ||
90 | u8 ctrl; | ||
91 | u16 csum; | ||
92 | u8 len; | ||
93 | char data[11]; | ||
94 | } __attribute__ ((packed)); | ||
95 | |||
96 | struct psp_var_map_entry { | ||
97 | u8 num; | ||
98 | char *value; | ||
99 | }; | ||
100 | |||
101 | static struct psp_var_map_entry psp_var_map[] = { | ||
102 | { 1, "cpufrequency" }, | ||
103 | { 2, "memsize" }, | ||
104 | { 3, "flashsize" }, | ||
105 | { 4, "modetty0" }, | ||
106 | { 5, "modetty1" }, | ||
107 | { 8, "maca" }, | ||
108 | { 9, "macb" }, | ||
109 | { 28, "sysfrequency" }, | ||
110 | { 38, "mipsfrequency" }, | ||
111 | }; | ||
112 | |||
113 | /* | ||
114 | |||
115 | Well-known variable (num is looked up in table above for matching variable name) | ||
116 | Example: cpufrequency=211968000 | ||
117 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+--- | ||
118 | | 01 |CTRL|CHECKSUM | 01 | _2 | _1 | _1 | _9 | _6 | _8 | _0 | _0 | _0 | \0 | FF | ||
119 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+--- | ||
120 | |||
121 | Name=Value pair in a single chunk | ||
122 | Example: NAME=VALUE | ||
123 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+--- | ||
124 | | 00 |CTRL|CHECKSUM | 01 | _N | _A | _M | _E | _0 | _V | _A | _L | _U | _E | \0 | ||
125 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+--- | ||
126 | |||
127 | Name=Value pair in 2 chunks (len is the number of chunks) | ||
128 | Example: bootloaderVersion=1.3.7.15 | ||
129 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+--- | ||
130 | | 00 |CTRL|CHECKSUM | 02 | _b | _o | _o | _t | _l | _o | _a | _d | _e | _r | _V | ||
131 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+--- | ||
132 | | _e | _r | _s | _i | _o | _n | \0 | _1 | _. | _3 | _. | _7 | _. | _1 | _5 | \0 | ||
133 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+--- | ||
134 | |||
135 | Data is padded with 0xFF | ||
136 | |||
137 | */ | ||
138 | |||
139 | #define PSP_ENV_SIZE 4096 | ||
140 | |||
141 | static char psp_env_data[PSP_ENV_SIZE] = { 0, }; | ||
142 | |||
143 | static char * __init lookup_psp_var_map(u8 num) | ||
144 | { | ||
145 | int i; | ||
146 | |||
147 | for (i = 0; i < sizeof(psp_var_map); i++) | ||
148 | if (psp_var_map[i].num == num) | ||
149 | return psp_var_map[i].value; | ||
150 | |||
151 | return NULL; | ||
152 | } | ||
153 | |||
154 | static void __init add_adam2_var(char *name, char *value) | ||
155 | { | ||
156 | int i; | ||
157 | for (i = 0; i < MAX_ENTRY; i++) { | ||
158 | if (!adam2_env[i].name) { | ||
159 | adam2_env[i].name = name; | ||
160 | adam2_env[i].value = value; | ||
161 | return; | ||
162 | } else if (!strcmp(adam2_env[i].name, name)) { | ||
163 | adam2_env[i].value = value; | ||
164 | return; | ||
165 | } | ||
166 | } | ||
167 | } | ||
168 | |||
169 | static int __init parse_psp_env(void *psp_env_base) | ||
170 | { | ||
171 | int i, n; | ||
172 | char *name, *value; | ||
173 | struct psp_env_chunk *chunks = (struct psp_env_chunk *)psp_env_data; | ||
174 | |||
175 | memcpy_fromio(chunks, psp_env_base, PSP_ENV_SIZE); | ||
176 | |||
177 | i = 1; | ||
178 | n = PSP_ENV_SIZE / sizeof(struct psp_env_chunk); | ||
179 | while (i < n) { | ||
180 | if ((chunks[i].num == 0xff) || ((i + chunks[i].len) > n)) | ||
181 | break; | ||
182 | value = chunks[i].data; | ||
183 | if (chunks[i].num) { | ||
184 | name = lookup_psp_var_map(chunks[i].num); | ||
185 | } else { | ||
186 | name = value; | ||
187 | value += strlen(name) + 1; | ||
188 | } | ||
189 | if (name) | ||
190 | add_adam2_var(name, value); | ||
191 | i += chunks[i].len; | ||
192 | } | ||
193 | return 0; | ||
194 | } | ||
195 | |||
196 | static void __init ar7_init_env(struct env_var *env) | ||
197 | { | ||
198 | int i; | ||
199 | struct psbl_rec *psbl = (struct psbl_rec *)(KSEG1ADDR(0x14000300)); | ||
200 | void *psp_env = (void *)KSEG1ADDR(psbl->env_base); | ||
201 | |||
202 | if (strcmp(psp_env, psp_env_version) == 0) { | ||
203 | parse_psp_env(psp_env); | ||
204 | } else { | ||
205 | for (i = 0; i < MAX_ENTRY; i++, env++) | ||
206 | if (env->name) | ||
207 | add_adam2_var(env->name, env->value); | ||
208 | } | ||
209 | } | ||
210 | |||
211 | static void __init console_config(void) | ||
212 | { | ||
213 | #ifdef CONFIG_SERIAL_8250_CONSOLE | ||
214 | char console_string[40]; | ||
215 | int baud = 0; | ||
216 | char parity = '\0', bits = '\0', flow = '\0'; | ||
217 | char *s, *p; | ||
218 | |||
219 | if (strstr(prom_getcmdline(), "console=")) | ||
220 | return; | ||
221 | |||
222 | #ifdef CONFIG_KGDB | ||
223 | if (!strstr(prom_getcmdline(), "nokgdb")) { | ||
224 | strcat(prom_getcmdline(), " console=kgdb"); | ||
225 | kgdb_enabled = 1; | ||
226 | return; | ||
227 | } | ||
228 | #endif | ||
229 | |||
230 | s = prom_getenv("modetty0"); | ||
231 | if (s) { | ||
232 | baud = simple_strtoul(s, &p, 10); | ||
233 | s = p; | ||
234 | if (*s == ',') | ||
235 | s++; | ||
236 | if (*s) | ||
237 | parity = *s++; | ||
238 | if (*s == ',') | ||
239 | s++; | ||
240 | if (*s) | ||
241 | bits = *s++; | ||
242 | if (*s == ',') | ||
243 | s++; | ||
244 | if (*s == 'h') | ||
245 | flow = 'r'; | ||
246 | } | ||
247 | |||
248 | if (baud == 0) | ||
249 | baud = 38400; | ||
250 | if (parity != 'n' && parity != 'o' && parity != 'e') | ||
251 | parity = 'n'; | ||
252 | if (bits != '7' && bits != '8') | ||
253 | bits = '8'; | ||
254 | |||
255 | if (flow == 'r') | ||
256 | sprintf(console_string, " console=ttyS0,%d%c%c%c", baud, | ||
257 | parity, bits, flow); | ||
258 | else | ||
259 | sprintf(console_string, " console=ttyS0,%d%c%c", baud, parity, | ||
260 | bits); | ||
261 | strcat(prom_getcmdline(), console_string); | ||
262 | #endif | ||
263 | } | ||
264 | |||
265 | void __init prom_init(void) | ||
266 | { | ||
267 | ar7_init_cmdline(fw_arg0, (char **)fw_arg1); | ||
268 | ar7_init_env((struct env_var *)fw_arg2); | ||
269 | console_config(); | ||
270 | } | ||
271 | |||
272 | #define PORT(offset) (KSEG1ADDR(AR7_REGS_UART0 + (offset * 4))) | ||
273 | static inline unsigned int serial_in(int offset) | ||
274 | { | ||
275 | return readl((void *)PORT(offset)); | ||
276 | } | ||
277 | |||
278 | static inline void serial_out(int offset, int value) | ||
279 | { | ||
280 | writel(value, (void *)PORT(offset)); | ||
281 | } | ||
282 | |||
283 | char prom_getchar(void) | ||
284 | { | ||
285 | while (!(serial_in(UART_LSR) & UART_LSR_DR)) | ||
286 | ; | ||
287 | return serial_in(UART_RX); | ||
288 | } | ||
289 | |||
290 | int prom_putchar(char c) | ||
291 | { | ||
292 | while ((serial_in(UART_LSR) & UART_LSR_TEMT) == 0) | ||
293 | ; | ||
294 | serial_out(UART_TX, c); | ||
295 | return 1; | ||
296 | } | ||
297 | |||
diff --git a/arch/mips/ar7/setup.c b/arch/mips/ar7/setup.c new file mode 100644 index 000000000000..6ebb5f16d967 --- /dev/null +++ b/arch/mips/ar7/setup.c | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * Carsten Langgaard, carstenl@mips.com | ||
3 | * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. | ||
4 | * | ||
5 | * This program is free software; you can distribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License (Version 2) as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
12 | * for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along | ||
15 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
17 | */ | ||
18 | #include <linux/version.h> | ||
19 | #include <linux/init.h> | ||
20 | #include <linux/ioport.h> | ||
21 | #include <linux/pm.h> | ||
22 | #include <linux/time.h> | ||
23 | |||
24 | #include <asm/reboot.h> | ||
25 | #include <asm/mach-ar7/ar7.h> | ||
26 | #include <asm/mach-ar7/prom.h> | ||
27 | |||
28 | static void ar7_machine_restart(char *command) | ||
29 | { | ||
30 | u32 *softres_reg = ioremap(AR7_REGS_RESET + | ||
31 | AR7_RESET_SOFTWARE, 1); | ||
32 | writel(1, softres_reg); | ||
33 | } | ||
34 | |||
35 | static void ar7_machine_halt(void) | ||
36 | { | ||
37 | while (1) | ||
38 | ; | ||
39 | } | ||
40 | |||
41 | static void ar7_machine_power_off(void) | ||
42 | { | ||
43 | u32 *power_reg = (u32 *)ioremap(AR7_REGS_POWER, 1); | ||
44 | u32 power_state = readl(power_reg) | (3 << 30); | ||
45 | writel(power_state, power_reg); | ||
46 | ar7_machine_halt(); | ||
47 | } | ||
48 | |||
49 | const char *get_system_type(void) | ||
50 | { | ||
51 | u16 chip_id = ar7_chip_id(); | ||
52 | switch (chip_id) { | ||
53 | case AR7_CHIP_7300: | ||
54 | return "TI AR7 (TNETD7300)"; | ||
55 | case AR7_CHIP_7100: | ||
56 | return "TI AR7 (TNETD7100)"; | ||
57 | case AR7_CHIP_7200: | ||
58 | return "TI AR7 (TNETD7200)"; | ||
59 | default: | ||
60 | return "TI AR7 (Unknown)"; | ||
61 | } | ||
62 | } | ||
63 | |||
64 | static int __init ar7_init_console(void) | ||
65 | { | ||
66 | return 0; | ||
67 | } | ||
68 | console_initcall(ar7_init_console); | ||
69 | |||
70 | /* | ||
71 | * Initializes basic routines and structures pointers, memory size (as | ||
72 | * given by the bios and saves the command line. | ||
73 | */ | ||
74 | |||
75 | void __init plat_mem_setup(void) | ||
76 | { | ||
77 | unsigned long io_base; | ||
78 | |||
79 | _machine_restart = ar7_machine_restart; | ||
80 | _machine_halt = ar7_machine_halt; | ||
81 | pm_power_off = ar7_machine_power_off; | ||
82 | panic_timeout = 3; | ||
83 | |||
84 | io_base = (unsigned long)ioremap(AR7_REGS_BASE, 0x10000); | ||
85 | if (!io_base) | ||
86 | panic("Can't remap IO base!\n"); | ||
87 | set_io_port_base(io_base); | ||
88 | |||
89 | prom_meminit(); | ||
90 | |||
91 | printk(KERN_INFO "%s, ID: 0x%04x, Revision: 0x%02x\n", | ||
92 | get_system_type(), | ||
93 | ar7_chip_id(), ar7_chip_rev()); | ||
94 | } | ||
diff --git a/arch/mips/ar7/time.c b/arch/mips/ar7/time.c new file mode 100644 index 000000000000..a1fba894daa2 --- /dev/null +++ b/arch/mips/ar7/time.c | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * Carsten Langgaard, carstenl@mips.com | ||
3 | * Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved. | ||
4 | * | ||
5 | * This program is free software; you can distribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License (Version 2) as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
12 | * for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along | ||
15 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
17 | * | ||
18 | * Setting up the clock on the MIPS boards. | ||
19 | */ | ||
20 | |||
21 | #include <linux/init.h> | ||
22 | #include <linux/time.h> | ||
23 | |||
24 | #include <asm/time.h> | ||
25 | #include <asm/mach-ar7/ar7.h> | ||
26 | |||
27 | void __init plat_time_init(void) | ||
28 | { | ||
29 | mips_hpt_frequency = ar7_cpu_freq() / 2; | ||
30 | } | ||
diff --git a/arch/mips/cavium-octeon/Makefile b/arch/mips/cavium-octeon/Makefile index 7c0528b0e34c..d6903c3f3d51 100644 --- a/arch/mips/cavium-octeon/Makefile +++ b/arch/mips/cavium-octeon/Makefile | |||
@@ -14,9 +14,5 @@ obj-y += dma-octeon.o flash_setup.o | |||
14 | obj-y += octeon-memcpy.o | 14 | obj-y += octeon-memcpy.o |
15 | 15 | ||
16 | obj-$(CONFIG_SMP) += smp.o | 16 | obj-$(CONFIG_SMP) += smp.o |
17 | obj-$(CONFIG_PCI) += pci-common.o | ||
18 | obj-$(CONFIG_PCI) += pci.o | ||
19 | obj-$(CONFIG_PCI) += pcie.o | ||
20 | obj-$(CONFIG_PCI_MSI) += msi.o | ||
21 | 17 | ||
22 | EXTRA_CFLAGS += -Werror | 18 | EXTRA_CFLAGS += -Werror |
diff --git a/arch/mips/cavium-octeon/dma-octeon.c b/arch/mips/cavium-octeon/dma-octeon.c index 627c162a6159..4b92bfc662db 100644 --- a/arch/mips/cavium-octeon/dma-octeon.c +++ b/arch/mips/cavium-octeon/dma-octeon.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include <dma-coherence.h> | 29 | #include <dma-coherence.h> |
30 | 30 | ||
31 | #ifdef CONFIG_PCI | 31 | #ifdef CONFIG_PCI |
32 | #include "pci-common.h" | 32 | #include <asm/octeon/pci-octeon.h> |
33 | #endif | 33 | #endif |
34 | 34 | ||
35 | #define BAR2_PCI_ADDRESS 0x8000000000ul | 35 | #define BAR2_PCI_ADDRESS 0x8000000000ul |
diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c index 8dfa009e0070..384f1842bfb1 100644 --- a/arch/mips/cavium-octeon/octeon-irq.c +++ b/arch/mips/cavium-octeon/octeon-irq.c | |||
@@ -7,7 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | #include <linux/irq.h> | 8 | #include <linux/irq.h> |
9 | #include <linux/interrupt.h> | 9 | #include <linux/interrupt.h> |
10 | #include <linux/hardirq.h> | 10 | #include <linux/smp.h> |
11 | 11 | ||
12 | #include <asm/octeon/octeon.h> | 12 | #include <asm/octeon/octeon.h> |
13 | #include <asm/octeon/cvmx-pexp-defs.h> | 13 | #include <asm/octeon/cvmx-pexp-defs.h> |
@@ -501,3 +501,62 @@ asmlinkage void plat_irq_dispatch(void) | |||
501 | } | 501 | } |
502 | } | 502 | } |
503 | } | 503 | } |
504 | |||
505 | #ifdef CONFIG_HOTPLUG_CPU | ||
506 | static int is_irq_enabled_on_cpu(unsigned int irq, unsigned int cpu) | ||
507 | { | ||
508 | unsigned int isset; | ||
509 | #ifdef CONFIG_SMP | ||
510 | int coreid = cpu_logical_map(cpu); | ||
511 | #else | ||
512 | int coreid = cvmx_get_core_num(); | ||
513 | #endif | ||
514 | int bit = (irq < OCTEON_IRQ_WDOG0) ? | ||
515 | irq - OCTEON_IRQ_WORKQ0 : irq - OCTEON_IRQ_WDOG0; | ||
516 | if (irq < 64) { | ||
517 | isset = (cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)) & | ||
518 | (1ull << bit)) >> bit; | ||
519 | } else { | ||
520 | isset = (cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)) & | ||
521 | (1ull << bit)) >> bit; | ||
522 | } | ||
523 | return isset; | ||
524 | } | ||
525 | |||
526 | void fixup_irqs(void) | ||
527 | { | ||
528 | int irq; | ||
529 | |||
530 | for (irq = OCTEON_IRQ_SW0; irq <= OCTEON_IRQ_TIMER; irq++) | ||
531 | octeon_irq_core_disable_local(irq); | ||
532 | |||
533 | for (irq = OCTEON_IRQ_WORKQ0; irq <= OCTEON_IRQ_GPIO15; irq++) { | ||
534 | if (is_irq_enabled_on_cpu(irq, smp_processor_id())) { | ||
535 | /* ciu irq migrates to next cpu */ | ||
536 | octeon_irq_chip_ciu0.disable(irq); | ||
537 | octeon_irq_ciu0_set_affinity(irq, &cpu_online_map); | ||
538 | } | ||
539 | } | ||
540 | |||
541 | #if 0 | ||
542 | for (irq = OCTEON_IRQ_MBOX0; irq <= OCTEON_IRQ_MBOX1; irq++) | ||
543 | octeon_irq_mailbox_mask(irq); | ||
544 | #endif | ||
545 | for (irq = OCTEON_IRQ_UART0; irq <= OCTEON_IRQ_BOOTDMA; irq++) { | ||
546 | if (is_irq_enabled_on_cpu(irq, smp_processor_id())) { | ||
547 | /* ciu irq migrates to next cpu */ | ||
548 | octeon_irq_chip_ciu0.disable(irq); | ||
549 | octeon_irq_ciu0_set_affinity(irq, &cpu_online_map); | ||
550 | } | ||
551 | } | ||
552 | |||
553 | for (irq = OCTEON_IRQ_UART2; irq <= OCTEON_IRQ_RESERVED135; irq++) { | ||
554 | if (is_irq_enabled_on_cpu(irq, smp_processor_id())) { | ||
555 | /* ciu irq migrates to next cpu */ | ||
556 | octeon_irq_chip_ciu1.disable(irq); | ||
557 | octeon_irq_ciu1_set_affinity(irq, &cpu_online_map); | ||
558 | } | ||
559 | } | ||
560 | } | ||
561 | |||
562 | #endif /* CONFIG_HOTPLUG_CPU */ | ||
diff --git a/arch/mips/cavium-octeon/octeon_boot.h b/arch/mips/cavium-octeon/octeon_boot.h new file mode 100644 index 000000000000..0f7f84accf9a --- /dev/null +++ b/arch/mips/cavium-octeon/octeon_boot.h | |||
@@ -0,0 +1,70 @@ | |||
1 | /* | ||
2 | * (C) Copyright 2004, 2005 Cavium Networks | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License as | ||
6 | * published by the Free Software Foundation; either version 2 of | ||
7 | * the License, or (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
17 | * MA 02111-1307 USA | ||
18 | */ | ||
19 | |||
20 | #ifndef __OCTEON_BOOT_H__ | ||
21 | #define __OCTEON_BOOT_H__ | ||
22 | |||
23 | #include <linux/types.h> | ||
24 | |||
25 | struct boot_init_vector { | ||
26 | uint32_t stack_addr; | ||
27 | uint32_t code_addr; | ||
28 | uint32_t app_start_func_addr; | ||
29 | uint32_t k0_val; | ||
30 | uint32_t flags; | ||
31 | uint32_t boot_info_addr; | ||
32 | uint32_t pad; | ||
33 | uint32_t pad2; | ||
34 | }; | ||
35 | |||
36 | /* similar to bootloader's linux_app_boot_info but without global data */ | ||
37 | struct linux_app_boot_info { | ||
38 | uint32_t labi_signature; | ||
39 | uint32_t start_core0_addr; | ||
40 | uint32_t avail_coremask; | ||
41 | uint32_t pci_console_active; | ||
42 | uint32_t icache_prefetch_disable; | ||
43 | uint32_t InitTLBStart_addr; | ||
44 | uint32_t start_app_addr; | ||
45 | uint32_t cur_exception_base; | ||
46 | uint32_t no_mark_private_data; | ||
47 | uint32_t compact_flash_common_base_addr; | ||
48 | uint32_t compact_flash_attribute_base_addr; | ||
49 | uint32_t led_display_base_addr; | ||
50 | }; | ||
51 | |||
52 | /* If not to copy a lot of bootloader's structures | ||
53 | here is only offset of requested member */ | ||
54 | #define AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK 0x765c | ||
55 | |||
56 | /* hardcoded in bootloader */ | ||
57 | #define LABI_ADDR_IN_BOOTLOADER 0x700 | ||
58 | |||
59 | #define LINUX_APP_BOOT_BLOCK_NAME "linux-app-boot" | ||
60 | |||
61 | #define LABI_SIGNATURE 0xAABBCCDD | ||
62 | |||
63 | /* from uboot-headers/octeon_mem_map.h */ | ||
64 | #define EXCEPTION_BASE_INCR (4 * 1024) | ||
65 | /* Increment size for exception base addresses (4k minimum) */ | ||
66 | #define EXCEPTION_BASE_BASE 0 | ||
67 | #define BOOTLOADER_PRIV_DATA_BASE (EXCEPTION_BASE_BASE + 0x800) | ||
68 | #define BOOTLOADER_BOOT_VECTOR (BOOTLOADER_PRIV_DATA_BASE) | ||
69 | |||
70 | #endif /* __OCTEON_BOOT_H__ */ | ||
diff --git a/arch/mips/cavium-octeon/pci-common.c b/arch/mips/cavium-octeon/pci-common.c deleted file mode 100644 index cd029f88da7f..000000000000 --- a/arch/mips/cavium-octeon/pci-common.c +++ /dev/null | |||
@@ -1,137 +0,0 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 2005-2007 Cavium Networks | ||
7 | */ | ||
8 | #include <linux/kernel.h> | ||
9 | #include <linux/init.h> | ||
10 | #include <linux/pci.h> | ||
11 | #include <linux/interrupt.h> | ||
12 | #include <linux/time.h> | ||
13 | #include <linux/delay.h> | ||
14 | #include "pci-common.h" | ||
15 | |||
16 | typeof(pcibios_map_irq) *octeon_pcibios_map_irq; | ||
17 | enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID; | ||
18 | |||
19 | /** | ||
20 | * Map a PCI device to the appropriate interrupt line | ||
21 | * | ||
22 | * @param dev The Linux PCI device structure for the device to map | ||
23 | * @param slot The slot number for this device on __BUS 0__. Linux | ||
24 | * enumerates through all the bridges and figures out the | ||
25 | * slot on Bus 0 where this device eventually hooks to. | ||
26 | * @param pin The PCI interrupt pin read from the device, then swizzled | ||
27 | * as it goes through each bridge. | ||
28 | * @return Interrupt number for the device | ||
29 | */ | ||
30 | int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | ||
31 | { | ||
32 | if (octeon_pcibios_map_irq) | ||
33 | return octeon_pcibios_map_irq(dev, slot, pin); | ||
34 | else | ||
35 | panic("octeon_pcibios_map_irq doesn't point to a " | ||
36 | "pcibios_map_irq() function"); | ||
37 | } | ||
38 | |||
39 | |||
40 | /** | ||
41 | * Called to perform platform specific PCI setup | ||
42 | * | ||
43 | * @param dev | ||
44 | * @return | ||
45 | */ | ||
46 | int pcibios_plat_dev_init(struct pci_dev *dev) | ||
47 | { | ||
48 | uint16_t config; | ||
49 | uint32_t dconfig; | ||
50 | int pos; | ||
51 | /* | ||
52 | * Force the Cache line setting to 64 bytes. The standard | ||
53 | * Linux bus scan doesn't seem to set it. Octeon really has | ||
54 | * 128 byte lines, but Intel bridges get really upset if you | ||
55 | * try and set values above 64 bytes. Value is specified in | ||
56 | * 32bit words. | ||
57 | */ | ||
58 | pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 64 / 4); | ||
59 | /* Set latency timers for all devices */ | ||
60 | pci_write_config_byte(dev, PCI_LATENCY_TIMER, 48); | ||
61 | |||
62 | /* Enable reporting System errors and parity errors on all devices */ | ||
63 | /* Enable parity checking and error reporting */ | ||
64 | pci_read_config_word(dev, PCI_COMMAND, &config); | ||
65 | config |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; | ||
66 | pci_write_config_word(dev, PCI_COMMAND, config); | ||
67 | |||
68 | if (dev->subordinate) { | ||
69 | /* Set latency timers on sub bridges */ | ||
70 | pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER, 48); | ||
71 | /* More bridge error detection */ | ||
72 | pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &config); | ||
73 | config |= PCI_BRIDGE_CTL_PARITY | PCI_BRIDGE_CTL_SERR; | ||
74 | pci_write_config_word(dev, PCI_BRIDGE_CONTROL, config); | ||
75 | } | ||
76 | |||
77 | /* Enable the PCIe normal error reporting */ | ||
78 | pos = pci_find_capability(dev, PCI_CAP_ID_EXP); | ||
79 | if (pos) { | ||
80 | /* Update Device Control */ | ||
81 | pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &config); | ||
82 | /* Correctable Error Reporting */ | ||
83 | config |= PCI_EXP_DEVCTL_CERE; | ||
84 | /* Non-Fatal Error Reporting */ | ||
85 | config |= PCI_EXP_DEVCTL_NFERE; | ||
86 | /* Fatal Error Reporting */ | ||
87 | config |= PCI_EXP_DEVCTL_FERE; | ||
88 | /* Unsupported Request */ | ||
89 | config |= PCI_EXP_DEVCTL_URRE; | ||
90 | pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, config); | ||
91 | } | ||
92 | |||
93 | /* Find the Advanced Error Reporting capability */ | ||
94 | pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR); | ||
95 | if (pos) { | ||
96 | /* Clear Uncorrectable Error Status */ | ||
97 | pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS, | ||
98 | &dconfig); | ||
99 | pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS, | ||
100 | dconfig); | ||
101 | /* Enable reporting of all uncorrectable errors */ | ||
102 | /* Uncorrectable Error Mask - turned on bits disable errors */ | ||
103 | pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, 0); | ||
104 | /* | ||
105 | * Leave severity at HW default. This only controls if | ||
106 | * errors are reported as uncorrectable or | ||
107 | * correctable, not if the error is reported. | ||
108 | */ | ||
109 | /* PCI_ERR_UNCOR_SEVER - Uncorrectable Error Severity */ | ||
110 | /* Clear Correctable Error Status */ | ||
111 | pci_read_config_dword(dev, pos + PCI_ERR_COR_STATUS, &dconfig); | ||
112 | pci_write_config_dword(dev, pos + PCI_ERR_COR_STATUS, dconfig); | ||
113 | /* Enable reporting of all correctable errors */ | ||
114 | /* Correctable Error Mask - turned on bits disable errors */ | ||
115 | pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, 0); | ||
116 | /* Advanced Error Capabilities */ | ||
117 | pci_read_config_dword(dev, pos + PCI_ERR_CAP, &dconfig); | ||
118 | /* ECRC Generation Enable */ | ||
119 | if (config & PCI_ERR_CAP_ECRC_GENC) | ||
120 | config |= PCI_ERR_CAP_ECRC_GENE; | ||
121 | /* ECRC Check Enable */ | ||
122 | if (config & PCI_ERR_CAP_ECRC_CHKC) | ||
123 | config |= PCI_ERR_CAP_ECRC_CHKE; | ||
124 | pci_write_config_dword(dev, pos + PCI_ERR_CAP, dconfig); | ||
125 | /* PCI_ERR_HEADER_LOG - Header Log Register (16 bytes) */ | ||
126 | /* Report all errors to the root complex */ | ||
127 | pci_write_config_dword(dev, pos + PCI_ERR_ROOT_COMMAND, | ||
128 | PCI_ERR_ROOT_CMD_COR_EN | | ||
129 | PCI_ERR_ROOT_CMD_NONFATAL_EN | | ||
130 | PCI_ERR_ROOT_CMD_FATAL_EN); | ||
131 | /* Clear the Root status register */ | ||
132 | pci_read_config_dword(dev, pos + PCI_ERR_ROOT_STATUS, &dconfig); | ||
133 | pci_write_config_dword(dev, pos + PCI_ERR_ROOT_STATUS, dconfig); | ||
134 | } | ||
135 | |||
136 | return 0; | ||
137 | } | ||
diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c index 5f4e49ba4713..da559249cc2f 100644 --- a/arch/mips/cavium-octeon/setup.c +++ b/arch/mips/cavium-octeon/setup.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/io.h> | 13 | #include <linux/io.h> |
14 | #include <linux/irq.h> | 14 | #include <linux/irq.h> |
15 | #include <linux/serial.h> | 15 | #include <linux/serial.h> |
16 | #include <linux/smp.h> | ||
16 | #include <linux/types.h> | 17 | #include <linux/types.h> |
17 | #include <linux/string.h> /* for memset */ | 18 | #include <linux/string.h> /* for memset */ |
18 | #include <linux/tty.h> | 19 | #include <linux/tty.h> |
diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c index 24e0ad63980a..0b891a9c6253 100644 --- a/arch/mips/cavium-octeon/smp.c +++ b/arch/mips/cavium-octeon/smp.c | |||
@@ -5,6 +5,7 @@ | |||
5 | * | 5 | * |
6 | * Copyright (C) 2004-2008 Cavium Networks | 6 | * Copyright (C) 2004-2008 Cavium Networks |
7 | */ | 7 | */ |
8 | #include <linux/cpu.h> | ||
8 | #include <linux/init.h> | 9 | #include <linux/init.h> |
9 | #include <linux/delay.h> | 10 | #include <linux/delay.h> |
10 | #include <linux/smp.h> | 11 | #include <linux/smp.h> |
@@ -19,10 +20,16 @@ | |||
19 | 20 | ||
20 | #include <asm/octeon/octeon.h> | 21 | #include <asm/octeon/octeon.h> |
21 | 22 | ||
23 | #include "octeon_boot.h" | ||
24 | |||
22 | volatile unsigned long octeon_processor_boot = 0xff; | 25 | volatile unsigned long octeon_processor_boot = 0xff; |
23 | volatile unsigned long octeon_processor_sp; | 26 | volatile unsigned long octeon_processor_sp; |
24 | volatile unsigned long octeon_processor_gp; | 27 | volatile unsigned long octeon_processor_gp; |
25 | 28 | ||
29 | #ifdef CONFIG_HOTPLUG_CPU | ||
30 | static unsigned int InitTLBStart_addr; | ||
31 | #endif | ||
32 | |||
26 | static irqreturn_t mailbox_interrupt(int irq, void *dev_id) | 33 | static irqreturn_t mailbox_interrupt(int irq, void *dev_id) |
27 | { | 34 | { |
28 | const int coreid = cvmx_get_core_num(); | 35 | const int coreid = cvmx_get_core_num(); |
@@ -67,8 +74,28 @@ static inline void octeon_send_ipi_mask(cpumask_t mask, unsigned int action) | |||
67 | } | 74 | } |
68 | 75 | ||
69 | /** | 76 | /** |
70 | * Detect available CPUs, populate phys_cpu_present_map | 77 | * Detect available CPUs, populate cpu_possible_map |
71 | */ | 78 | */ |
79 | static void octeon_smp_hotplug_setup(void) | ||
80 | { | ||
81 | #ifdef CONFIG_HOTPLUG_CPU | ||
82 | uint32_t labi_signature; | ||
83 | |||
84 | labi_signature = | ||
85 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
86 | LABI_ADDR_IN_BOOTLOADER + | ||
87 | offsetof(struct linux_app_boot_info, | ||
88 | labi_signature))); | ||
89 | if (labi_signature != LABI_SIGNATURE) | ||
90 | pr_err("The bootloader version on this board is incorrect\n"); | ||
91 | InitTLBStart_addr = | ||
92 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
93 | LABI_ADDR_IN_BOOTLOADER + | ||
94 | offsetof(struct linux_app_boot_info, | ||
95 | InitTLBStart_addr))); | ||
96 | #endif | ||
97 | } | ||
98 | |||
72 | static void octeon_smp_setup(void) | 99 | static void octeon_smp_setup(void) |
73 | { | 100 | { |
74 | const int coreid = cvmx_get_core_num(); | 101 | const int coreid = cvmx_get_core_num(); |
@@ -91,6 +118,9 @@ static void octeon_smp_setup(void) | |||
91 | cpus++; | 118 | cpus++; |
92 | } | 119 | } |
93 | } | 120 | } |
121 | cpu_present_map = cpu_possible_map; | ||
122 | |||
123 | octeon_smp_hotplug_setup(); | ||
94 | } | 124 | } |
95 | 125 | ||
96 | /** | 126 | /** |
@@ -128,6 +158,17 @@ static void octeon_init_secondary(void) | |||
128 | const int coreid = cvmx_get_core_num(); | 158 | const int coreid = cvmx_get_core_num(); |
129 | union cvmx_ciu_intx_sum0 interrupt_enable; | 159 | union cvmx_ciu_intx_sum0 interrupt_enable; |
130 | 160 | ||
161 | #ifdef CONFIG_HOTPLUG_CPU | ||
162 | unsigned int cur_exception_base; | ||
163 | |||
164 | cur_exception_base = cvmx_read64_uint32( | ||
165 | CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
166 | LABI_ADDR_IN_BOOTLOADER + | ||
167 | offsetof(struct linux_app_boot_info, | ||
168 | cur_exception_base))); | ||
169 | /* cur_exception_base is incremented in bootloader after setting */ | ||
170 | write_c0_ebase((unsigned int)(cur_exception_base - EXCEPTION_BASE_INCR)); | ||
171 | #endif | ||
131 | octeon_check_cpu_bist(); | 172 | octeon_check_cpu_bist(); |
132 | octeon_init_cvmcount(); | 173 | octeon_init_cvmcount(); |
133 | /* | 174 | /* |
@@ -199,6 +240,193 @@ static void octeon_cpus_done(void) | |||
199 | #endif | 240 | #endif |
200 | } | 241 | } |
201 | 242 | ||
243 | #ifdef CONFIG_HOTPLUG_CPU | ||
244 | |||
245 | /* State of each CPU. */ | ||
246 | DEFINE_PER_CPU(int, cpu_state); | ||
247 | |||
248 | extern void fixup_irqs(void); | ||
249 | |||
250 | static DEFINE_SPINLOCK(smp_reserve_lock); | ||
251 | |||
252 | static int octeon_cpu_disable(void) | ||
253 | { | ||
254 | unsigned int cpu = smp_processor_id(); | ||
255 | |||
256 | if (cpu == 0) | ||
257 | return -EBUSY; | ||
258 | |||
259 | spin_lock(&smp_reserve_lock); | ||
260 | |||
261 | cpu_clear(cpu, cpu_online_map); | ||
262 | cpu_clear(cpu, cpu_callin_map); | ||
263 | local_irq_disable(); | ||
264 | fixup_irqs(); | ||
265 | local_irq_enable(); | ||
266 | |||
267 | flush_cache_all(); | ||
268 | local_flush_tlb_all(); | ||
269 | |||
270 | spin_unlock(&smp_reserve_lock); | ||
271 | |||
272 | return 0; | ||
273 | } | ||
274 | |||
275 | static void octeon_cpu_die(unsigned int cpu) | ||
276 | { | ||
277 | int coreid = cpu_logical_map(cpu); | ||
278 | uint32_t avail_coremask; | ||
279 | struct cvmx_bootmem_named_block_desc *block_desc; | ||
280 | |||
281 | #ifdef CONFIG_CAVIUM_OCTEON_WATCHDOG | ||
282 | /* Disable the watchdog */ | ||
283 | cvmx_ciu_wdogx_t ciu_wdog; | ||
284 | ciu_wdog.u64 = cvmx_read_csr(CVMX_CIU_WDOGX(cpu)); | ||
285 | ciu_wdog.s.mode = 0; | ||
286 | cvmx_write_csr(CVMX_CIU_WDOGX(cpu), ciu_wdog.u64); | ||
287 | #endif | ||
288 | |||
289 | while (per_cpu(cpu_state, cpu) != CPU_DEAD) | ||
290 | cpu_relax(); | ||
291 | |||
292 | /* | ||
293 | * This is a bit complicated strategics of getting/settig available | ||
294 | * cores mask, copied from bootloader | ||
295 | */ | ||
296 | /* LINUX_APP_BOOT_BLOCK is initialized in bootoct binary */ | ||
297 | block_desc = cvmx_bootmem_find_named_block(LINUX_APP_BOOT_BLOCK_NAME); | ||
298 | |||
299 | if (!block_desc) { | ||
300 | avail_coremask = | ||
301 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
302 | LABI_ADDR_IN_BOOTLOADER + | ||
303 | offsetof | ||
304 | (struct linux_app_boot_info, | ||
305 | avail_coremask))); | ||
306 | } else { /* alternative, already initialized */ | ||
307 | avail_coremask = | ||
308 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
309 | block_desc->base_addr + | ||
310 | AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK)); | ||
311 | } | ||
312 | |||
313 | avail_coremask |= 1 << coreid; | ||
314 | |||
315 | /* Setting avail_coremask for bootoct binary */ | ||
316 | if (!block_desc) { | ||
317 | cvmx_write64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
318 | LABI_ADDR_IN_BOOTLOADER + | ||
319 | offsetof(struct linux_app_boot_info, | ||
320 | avail_coremask)), | ||
321 | avail_coremask); | ||
322 | } else { | ||
323 | cvmx_write64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
324 | block_desc->base_addr + | ||
325 | AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK), | ||
326 | avail_coremask); | ||
327 | } | ||
328 | |||
329 | pr_info("Reset core %d. Available Coremask = %x \n", coreid, | ||
330 | avail_coremask); | ||
331 | cvmx_write_csr(CVMX_CIU_PP_RST, 1 << coreid); | ||
332 | cvmx_write_csr(CVMX_CIU_PP_RST, 0); | ||
333 | } | ||
334 | |||
335 | void play_dead(void) | ||
336 | { | ||
337 | int coreid = cvmx_get_core_num(); | ||
338 | |||
339 | idle_task_exit(); | ||
340 | octeon_processor_boot = 0xff; | ||
341 | per_cpu(cpu_state, coreid) = CPU_DEAD; | ||
342 | |||
343 | while (1) /* core will be reset here */ | ||
344 | ; | ||
345 | } | ||
346 | |||
347 | extern void kernel_entry(unsigned long arg1, ...); | ||
348 | |||
349 | static void start_after_reset(void) | ||
350 | { | ||
351 | kernel_entry(0, 0, 0); /* set a2 = 0 for secondary core */ | ||
352 | } | ||
353 | |||
354 | int octeon_update_boot_vector(unsigned int cpu) | ||
355 | { | ||
356 | |||
357 | int coreid = cpu_logical_map(cpu); | ||
358 | unsigned int avail_coremask; | ||
359 | struct cvmx_bootmem_named_block_desc *block_desc; | ||
360 | struct boot_init_vector *boot_vect = | ||
361 | (struct boot_init_vector *) cvmx_phys_to_ptr(0x0 + | ||
362 | BOOTLOADER_BOOT_VECTOR); | ||
363 | |||
364 | block_desc = cvmx_bootmem_find_named_block(LINUX_APP_BOOT_BLOCK_NAME); | ||
365 | |||
366 | if (!block_desc) { | ||
367 | avail_coremask = | ||
368 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
369 | LABI_ADDR_IN_BOOTLOADER + | ||
370 | offsetof(struct linux_app_boot_info, | ||
371 | avail_coremask))); | ||
372 | } else { /* alternative, already initialized */ | ||
373 | avail_coremask = | ||
374 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
375 | block_desc->base_addr + | ||
376 | AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK)); | ||
377 | } | ||
378 | |||
379 | if (!(avail_coremask & (1 << coreid))) { | ||
380 | /* core not available, assume, that catched by simple-executive */ | ||
381 | cvmx_write_csr(CVMX_CIU_PP_RST, 1 << coreid); | ||
382 | cvmx_write_csr(CVMX_CIU_PP_RST, 0); | ||
383 | } | ||
384 | |||
385 | boot_vect[coreid].app_start_func_addr = | ||
386 | (uint32_t) (unsigned long) start_after_reset; | ||
387 | boot_vect[coreid].code_addr = InitTLBStart_addr; | ||
388 | |||
389 | CVMX_SYNC; | ||
390 | |||
391 | cvmx_write_csr(CVMX_CIU_NMI, (1 << coreid) & avail_coremask); | ||
392 | |||
393 | return 0; | ||
394 | } | ||
395 | |||
396 | static int __cpuinit octeon_cpu_callback(struct notifier_block *nfb, | ||
397 | unsigned long action, void *hcpu) | ||
398 | { | ||
399 | unsigned int cpu = (unsigned long)hcpu; | ||
400 | |||
401 | switch (action) { | ||
402 | case CPU_UP_PREPARE: | ||
403 | octeon_update_boot_vector(cpu); | ||
404 | break; | ||
405 | case CPU_ONLINE: | ||
406 | pr_info("Cpu %d online\n", cpu); | ||
407 | break; | ||
408 | case CPU_DEAD: | ||
409 | break; | ||
410 | } | ||
411 | |||
412 | return NOTIFY_OK; | ||
413 | } | ||
414 | |||
415 | static struct notifier_block __cpuinitdata octeon_cpu_notifier = { | ||
416 | .notifier_call = octeon_cpu_callback, | ||
417 | }; | ||
418 | |||
419 | static int __cpuinit register_cavium_notifier(void) | ||
420 | { | ||
421 | register_hotcpu_notifier(&octeon_cpu_notifier); | ||
422 | |||
423 | return 0; | ||
424 | } | ||
425 | |||
426 | late_initcall(register_cavium_notifier); | ||
427 | |||
428 | #endif /* CONFIG_HOTPLUG_CPU */ | ||
429 | |||
202 | struct plat_smp_ops octeon_smp_ops = { | 430 | struct plat_smp_ops octeon_smp_ops = { |
203 | .send_ipi_single = octeon_send_ipi_single, | 431 | .send_ipi_single = octeon_send_ipi_single, |
204 | .send_ipi_mask = octeon_send_ipi_mask, | 432 | .send_ipi_mask = octeon_send_ipi_mask, |
@@ -208,4 +436,8 @@ struct plat_smp_ops octeon_smp_ops = { | |||
208 | .boot_secondary = octeon_boot_secondary, | 436 | .boot_secondary = octeon_boot_secondary, |
209 | .smp_setup = octeon_smp_setup, | 437 | .smp_setup = octeon_smp_setup, |
210 | .prepare_cpus = octeon_prepare_cpus, | 438 | .prepare_cpus = octeon_prepare_cpus, |
439 | #ifdef CONFIG_HOTPLUG_CPU | ||
440 | .cpu_disable = octeon_cpu_disable, | ||
441 | .cpu_die = octeon_cpu_die, | ||
442 | #endif | ||
211 | }; | 443 | }; |
diff --git a/arch/mips/cobalt/buttons.c b/arch/mips/cobalt/buttons.c index 9e143989c7b8..4eaec8b46e0c 100644 --- a/arch/mips/cobalt/buttons.c +++ b/arch/mips/cobalt/buttons.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Cobalt buttons platform device. | 2 | * Cobalt buttons platform device. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/cobalt/lcd.c b/arch/mips/cobalt/lcd.c index 0720e4fae311..0f1cd90f37ed 100644 --- a/arch/mips/cobalt/lcd.c +++ b/arch/mips/cobalt/lcd.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Registration of Cobalt LCD platform device. | 2 | * Registration of Cobalt LCD platform device. |
3 | * | 3 | * |
4 | * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/cobalt/led.c b/arch/mips/cobalt/led.c index 1c6ebd468b07..d3ce6fa1dc74 100644 --- a/arch/mips/cobalt/led.c +++ b/arch/mips/cobalt/led.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Registration of Cobalt LED platform device. | 2 | * Registration of Cobalt LED platform device. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/cobalt/mtd.c b/arch/mips/cobalt/mtd.c index 2b088ef3839a..691d620b6766 100644 --- a/arch/mips/cobalt/mtd.c +++ b/arch/mips/cobalt/mtd.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Registration of Cobalt MTD device. | 2 | * Registration of Cobalt MTD device. |
3 | * | 3 | * |
4 | * Copyright (C) 2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2006 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/cobalt/rtc.c b/arch/mips/cobalt/rtc.c index e70794b8bcba..3ab39898b4e4 100644 --- a/arch/mips/cobalt/rtc.c +++ b/arch/mips/cobalt/rtc.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Registration of Cobalt RTC platform device. | 2 | * Registration of Cobalt RTC platform device. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/cobalt/serial.c b/arch/mips/cobalt/serial.c index 53b8d0d6da90..7cb51f57275e 100644 --- a/arch/mips/cobalt/serial.c +++ b/arch/mips/cobalt/serial.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Registration of Cobalt UART platform device. | 2 | * Registration of Cobalt UART platform device. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/cobalt/time.c b/arch/mips/cobalt/time.c index 4a570e7145fe..0162f9edc693 100644 --- a/arch/mips/cobalt/time.c +++ b/arch/mips/cobalt/time.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Cobalt time initialization. | 2 | * Cobalt time initialization. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/configs/ar7_defconfig b/arch/mips/configs/ar7_defconfig new file mode 100644 index 000000000000..dad5b6769d74 --- /dev/null +++ b/arch/mips/configs/ar7_defconfig | |||
@@ -0,0 +1,1182 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.30 | ||
4 | # Wed Jun 24 14:08:59 2009 | ||
5 | # | ||
6 | CONFIG_MIPS=y | ||
7 | |||
8 | # | ||
9 | # Machine selection | ||
10 | # | ||
11 | # CONFIG_MACH_ALCHEMY is not set | ||
12 | CONFIG_AR7=y | ||
13 | # CONFIG_BASLER_EXCITE is not set | ||
14 | # CONFIG_BCM47XX is not set | ||
15 | # CONFIG_MIPS_COBALT is not set | ||
16 | # CONFIG_MACH_DECSTATION is not set | ||
17 | # CONFIG_MACH_JAZZ is not set | ||
18 | # CONFIG_LASAT is not set | ||
19 | # CONFIG_LEMOTE_FULONG is not set | ||
20 | # CONFIG_MIPS_MALTA is not set | ||
21 | # CONFIG_MIPS_SIM is not set | ||
22 | # CONFIG_NEC_MARKEINS is not set | ||
23 | # CONFIG_MACH_VR41XX is not set | ||
24 | # CONFIG_NXP_STB220 is not set | ||
25 | # CONFIG_NXP_STB225 is not set | ||
26 | # CONFIG_PNX8550_JBS is not set | ||
27 | # CONFIG_PNX8550_STB810 is not set | ||
28 | # CONFIG_PMC_MSP is not set | ||
29 | # CONFIG_PMC_YOSEMITE is not set | ||
30 | # CONFIG_SGI_IP22 is not set | ||
31 | # CONFIG_SGI_IP27 is not set | ||
32 | # CONFIG_SGI_IP28 is not set | ||
33 | # CONFIG_SGI_IP32 is not set | ||
34 | # CONFIG_SIBYTE_CRHINE is not set | ||
35 | # CONFIG_SIBYTE_CARMEL is not set | ||
36 | # CONFIG_SIBYTE_CRHONE is not set | ||
37 | # CONFIG_SIBYTE_RHONE is not set | ||
38 | # CONFIG_SIBYTE_SWARM is not set | ||
39 | # CONFIG_SIBYTE_LITTLESUR is not set | ||
40 | # CONFIG_SIBYTE_SENTOSA is not set | ||
41 | # CONFIG_SIBYTE_BIGSUR is not set | ||
42 | # CONFIG_SNI_RM is not set | ||
43 | # CONFIG_MACH_TX39XX is not set | ||
44 | # CONFIG_MACH_TX49XX is not set | ||
45 | # CONFIG_MIKROTIK_RB532 is not set | ||
46 | # CONFIG_WR_PPMC is not set | ||
47 | # CONFIG_CAVIUM_OCTEON_SIMULATOR is not set | ||
48 | # CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set | ||
49 | # CONFIG_ALCHEMY_GPIO_INDIRECT is not set | ||
50 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
51 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
52 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
53 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
54 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
55 | CONFIG_GENERIC_HWEIGHT=y | ||
56 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
57 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
58 | CONFIG_GENERIC_TIME=y | ||
59 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
60 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
61 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
62 | CONFIG_CEVT_R4K_LIB=y | ||
63 | CONFIG_CEVT_R4K=y | ||
64 | CONFIG_CSRC_R4K_LIB=y | ||
65 | CONFIG_CSRC_R4K=y | ||
66 | CONFIG_DMA_NONCOHERENT=y | ||
67 | CONFIG_DMA_NEED_PCI_MAP_STATE=y | ||
68 | CONFIG_EARLY_PRINTK=y | ||
69 | CONFIG_SYS_HAS_EARLY_PRINTK=y | ||
70 | # CONFIG_HOTPLUG_CPU is not set | ||
71 | # CONFIG_NO_IOPORT is not set | ||
72 | CONFIG_GENERIC_GPIO=y | ||
73 | # CONFIG_CPU_BIG_ENDIAN is not set | ||
74 | CONFIG_CPU_LITTLE_ENDIAN=y | ||
75 | CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y | ||
76 | CONFIG_IRQ_CPU=y | ||
77 | CONFIG_NO_EXCEPT_FILL=y | ||
78 | CONFIG_SWAP_IO_SPACE=y | ||
79 | CONFIG_BOOT_ELF32=y | ||
80 | CONFIG_MIPS_L1_CACHE_SHIFT=5 | ||
81 | |||
82 | # | ||
83 | # CPU selection | ||
84 | # | ||
85 | # CONFIG_CPU_LOONGSON2 is not set | ||
86 | CONFIG_CPU_MIPS32_R1=y | ||
87 | # CONFIG_CPU_MIPS32_R2 is not set | ||
88 | # CONFIG_CPU_MIPS64_R1 is not set | ||
89 | # CONFIG_CPU_MIPS64_R2 is not set | ||
90 | # CONFIG_CPU_R3000 is not set | ||
91 | # CONFIG_CPU_TX39XX is not set | ||
92 | # CONFIG_CPU_VR41XX is not set | ||
93 | # CONFIG_CPU_R4300 is not set | ||
94 | # CONFIG_CPU_R4X00 is not set | ||
95 | # CONFIG_CPU_TX49XX is not set | ||
96 | # CONFIG_CPU_R5000 is not set | ||
97 | # CONFIG_CPU_R5432 is not set | ||
98 | # CONFIG_CPU_R5500 is not set | ||
99 | # CONFIG_CPU_R6000 is not set | ||
100 | # CONFIG_CPU_NEVADA is not set | ||
101 | # CONFIG_CPU_R8000 is not set | ||
102 | # CONFIG_CPU_R10000 is not set | ||
103 | # CONFIG_CPU_RM7000 is not set | ||
104 | # CONFIG_CPU_RM9000 is not set | ||
105 | # CONFIG_CPU_SB1 is not set | ||
106 | # CONFIG_CPU_CAVIUM_OCTEON is not set | ||
107 | CONFIG_SYS_HAS_CPU_MIPS32_R1=y | ||
108 | CONFIG_CPU_MIPS32=y | ||
109 | CONFIG_CPU_MIPSR1=y | ||
110 | CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y | ||
111 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y | ||
112 | CONFIG_HARDWARE_WATCHPOINTS=y | ||
113 | |||
114 | # | ||
115 | # Kernel type | ||
116 | # | ||
117 | CONFIG_32BIT=y | ||
118 | # CONFIG_64BIT is not set | ||
119 | CONFIG_PAGE_SIZE_4KB=y | ||
120 | # CONFIG_PAGE_SIZE_8KB is not set | ||
121 | # CONFIG_PAGE_SIZE_16KB is not set | ||
122 | # CONFIG_PAGE_SIZE_32KB is not set | ||
123 | # CONFIG_PAGE_SIZE_64KB is not set | ||
124 | CONFIG_CPU_HAS_PREFETCH=y | ||
125 | CONFIG_MIPS_MT_DISABLED=y | ||
126 | # CONFIG_MIPS_MT_SMP is not set | ||
127 | # CONFIG_MIPS_MT_SMTC is not set | ||
128 | CONFIG_CPU_HAS_LLSC=y | ||
129 | CONFIG_CPU_HAS_SYNC=y | ||
130 | CONFIG_GENERIC_HARDIRQS=y | ||
131 | CONFIG_GENERIC_IRQ_PROBE=y | ||
132 | CONFIG_CPU_SUPPORTS_HIGHMEM=y | ||
133 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
134 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
135 | CONFIG_SELECT_MEMORY_MODEL=y | ||
136 | CONFIG_FLATMEM_MANUAL=y | ||
137 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
138 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
139 | CONFIG_FLATMEM=y | ||
140 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
141 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
142 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
143 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
144 | CONFIG_ZONE_DMA_FLAG=0 | ||
145 | CONFIG_VIRT_TO_BUS=y | ||
146 | CONFIG_HAVE_MLOCK=y | ||
147 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
148 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
149 | CONFIG_TICK_ONESHOT=y | ||
150 | # CONFIG_NO_HZ is not set | ||
151 | CONFIG_HIGH_RES_TIMERS=y | ||
152 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
153 | # CONFIG_HZ_48 is not set | ||
154 | CONFIG_HZ_100=y | ||
155 | # CONFIG_HZ_128 is not set | ||
156 | # CONFIG_HZ_250 is not set | ||
157 | # CONFIG_HZ_256 is not set | ||
158 | # CONFIG_HZ_1000 is not set | ||
159 | # CONFIG_HZ_1024 is not set | ||
160 | CONFIG_SYS_SUPPORTS_ARBIT_HZ=y | ||
161 | CONFIG_HZ=100 | ||
162 | CONFIG_PREEMPT_NONE=y | ||
163 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
164 | # CONFIG_PREEMPT is not set | ||
165 | CONFIG_KEXEC=y | ||
166 | # CONFIG_SECCOMP is not set | ||
167 | CONFIG_LOCKDEP_SUPPORT=y | ||
168 | CONFIG_STACKTRACE_SUPPORT=y | ||
169 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
170 | |||
171 | # | ||
172 | # General setup | ||
173 | # | ||
174 | CONFIG_EXPERIMENTAL=y | ||
175 | CONFIG_BROKEN_ON_SMP=y | ||
176 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
177 | CONFIG_LOCALVERSION="" | ||
178 | # CONFIG_LOCALVERSION_AUTO is not set | ||
179 | CONFIG_SWAP=y | ||
180 | CONFIG_SYSVIPC=y | ||
181 | CONFIG_SYSVIPC_SYSCTL=y | ||
182 | # CONFIG_POSIX_MQUEUE is not set | ||
183 | CONFIG_BSD_PROCESS_ACCT=y | ||
184 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
185 | # CONFIG_TASKSTATS is not set | ||
186 | # CONFIG_AUDIT is not set | ||
187 | |||
188 | # | ||
189 | # RCU Subsystem | ||
190 | # | ||
191 | CONFIG_CLASSIC_RCU=y | ||
192 | # CONFIG_TREE_RCU is not set | ||
193 | # CONFIG_PREEMPT_RCU is not set | ||
194 | # CONFIG_TREE_RCU_TRACE is not set | ||
195 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
196 | # CONFIG_IKCONFIG is not set | ||
197 | CONFIG_LOG_BUF_SHIFT=14 | ||
198 | # CONFIG_GROUP_SCHED is not set | ||
199 | # CONFIG_CGROUPS is not set | ||
200 | CONFIG_SYSFS_DEPRECATED=y | ||
201 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
202 | CONFIG_RELAY=y | ||
203 | # CONFIG_NAMESPACES is not set | ||
204 | CONFIG_BLK_DEV_INITRD=y | ||
205 | CONFIG_INITRAMFS_SOURCE="" | ||
206 | CONFIG_RD_GZIP=y | ||
207 | # CONFIG_RD_BZIP2 is not set | ||
208 | CONFIG_RD_LZMA=y | ||
209 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
210 | CONFIG_SYSCTL=y | ||
211 | CONFIG_ANON_INODES=y | ||
212 | CONFIG_EMBEDDED=y | ||
213 | CONFIG_SYSCTL_SYSCALL=y | ||
214 | # CONFIG_KALLSYMS is not set | ||
215 | CONFIG_HOTPLUG=y | ||
216 | CONFIG_PRINTK=y | ||
217 | CONFIG_BUG=y | ||
218 | # CONFIG_ELF_CORE is not set | ||
219 | # CONFIG_PCSPKR_PLATFORM is not set | ||
220 | CONFIG_BASE_FULL=y | ||
221 | CONFIG_FUTEX=y | ||
222 | CONFIG_EPOLL=y | ||
223 | CONFIG_SIGNALFD=y | ||
224 | CONFIG_TIMERFD=y | ||
225 | CONFIG_EVENTFD=y | ||
226 | CONFIG_SHMEM=y | ||
227 | CONFIG_AIO=y | ||
228 | |||
229 | # | ||
230 | # Performance Counters | ||
231 | # | ||
232 | # CONFIG_VM_EVENT_COUNTERS is not set | ||
233 | CONFIG_STRIP_ASM_SYMS=y | ||
234 | # CONFIG_COMPAT_BRK is not set | ||
235 | CONFIG_SLAB=y | ||
236 | # CONFIG_SLUB is not set | ||
237 | # CONFIG_SLOB is not set | ||
238 | # CONFIG_PROFILING is not set | ||
239 | # CONFIG_MARKERS is not set | ||
240 | CONFIG_HAVE_OPROFILE=y | ||
241 | # CONFIG_SLOW_WORK is not set | ||
242 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
243 | CONFIG_SLABINFO=y | ||
244 | CONFIG_RT_MUTEXES=y | ||
245 | CONFIG_BASE_SMALL=0 | ||
246 | CONFIG_MODULES=y | ||
247 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
248 | CONFIG_MODULE_UNLOAD=y | ||
249 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
250 | # CONFIG_MODVERSIONS is not set | ||
251 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
252 | CONFIG_BLOCK=y | ||
253 | # CONFIG_LBD is not set | ||
254 | # CONFIG_BLK_DEV_BSG is not set | ||
255 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
256 | |||
257 | # | ||
258 | # IO Schedulers | ||
259 | # | ||
260 | CONFIG_IOSCHED_NOOP=y | ||
261 | # CONFIG_IOSCHED_AS is not set | ||
262 | CONFIG_IOSCHED_DEADLINE=y | ||
263 | # CONFIG_IOSCHED_CFQ is not set | ||
264 | # CONFIG_DEFAULT_AS is not set | ||
265 | CONFIG_DEFAULT_DEADLINE=y | ||
266 | # CONFIG_DEFAULT_CFQ is not set | ||
267 | # CONFIG_DEFAULT_NOOP is not set | ||
268 | CONFIG_DEFAULT_IOSCHED="deadline" | ||
269 | CONFIG_PROBE_INITRD_HEADER=y | ||
270 | # CONFIG_FREEZER is not set | ||
271 | |||
272 | # | ||
273 | # Bus options (PCI, PCMCIA, EISA, ISA, TC) | ||
274 | # | ||
275 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
276 | CONFIG_MMU=y | ||
277 | # CONFIG_PCCARD is not set | ||
278 | |||
279 | # | ||
280 | # Executable file formats | ||
281 | # | ||
282 | CONFIG_BINFMT_ELF=y | ||
283 | # CONFIG_HAVE_AOUT is not set | ||
284 | # CONFIG_BINFMT_MISC is not set | ||
285 | CONFIG_TRAD_SIGNALS=y | ||
286 | |||
287 | # | ||
288 | # Power management options | ||
289 | # | ||
290 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||
291 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
292 | # CONFIG_PM is not set | ||
293 | CONFIG_NET=y | ||
294 | |||
295 | # | ||
296 | # Networking options | ||
297 | # | ||
298 | CONFIG_PACKET=y | ||
299 | CONFIG_PACKET_MMAP=y | ||
300 | CONFIG_UNIX=y | ||
301 | # CONFIG_NET_KEY is not set | ||
302 | CONFIG_INET=y | ||
303 | CONFIG_IP_MULTICAST=y | ||
304 | CONFIG_IP_ADVANCED_ROUTER=y | ||
305 | CONFIG_ASK_IP_FIB_HASH=y | ||
306 | # CONFIG_IP_FIB_TRIE is not set | ||
307 | CONFIG_IP_FIB_HASH=y | ||
308 | CONFIG_IP_MULTIPLE_TABLES=y | ||
309 | CONFIG_IP_ROUTE_MULTIPATH=y | ||
310 | CONFIG_IP_ROUTE_VERBOSE=y | ||
311 | # CONFIG_IP_PNP is not set | ||
312 | # CONFIG_NET_IPIP is not set | ||
313 | # CONFIG_NET_IPGRE is not set | ||
314 | CONFIG_IP_MROUTE=y | ||
315 | # CONFIG_IP_PIMSM_V1 is not set | ||
316 | # CONFIG_IP_PIMSM_V2 is not set | ||
317 | CONFIG_ARPD=y | ||
318 | CONFIG_SYN_COOKIES=y | ||
319 | # CONFIG_INET_AH is not set | ||
320 | # CONFIG_INET_ESP is not set | ||
321 | # CONFIG_INET_IPCOMP is not set | ||
322 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
323 | # CONFIG_INET_TUNNEL is not set | ||
324 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
325 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
326 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
327 | # CONFIG_INET_LRO is not set | ||
328 | # CONFIG_INET_DIAG is not set | ||
329 | CONFIG_TCP_CONG_ADVANCED=y | ||
330 | # CONFIG_TCP_CONG_BIC is not set | ||
331 | # CONFIG_TCP_CONG_CUBIC is not set | ||
332 | CONFIG_TCP_CONG_WESTWOOD=y | ||
333 | # CONFIG_TCP_CONG_HTCP is not set | ||
334 | # CONFIG_TCP_CONG_HSTCP is not set | ||
335 | # CONFIG_TCP_CONG_HYBLA is not set | ||
336 | # CONFIG_TCP_CONG_VEGAS is not set | ||
337 | # CONFIG_TCP_CONG_SCALABLE is not set | ||
338 | # CONFIG_TCP_CONG_LP is not set | ||
339 | # CONFIG_TCP_CONG_VENO is not set | ||
340 | # CONFIG_TCP_CONG_YEAH is not set | ||
341 | # CONFIG_TCP_CONG_ILLINOIS is not set | ||
342 | # CONFIG_DEFAULT_BIC is not set | ||
343 | # CONFIG_DEFAULT_CUBIC is not set | ||
344 | # CONFIG_DEFAULT_HTCP is not set | ||
345 | # CONFIG_DEFAULT_VEGAS is not set | ||
346 | CONFIG_DEFAULT_WESTWOOD=y | ||
347 | # CONFIG_DEFAULT_RENO is not set | ||
348 | CONFIG_DEFAULT_TCP_CONG="westwood" | ||
349 | # CONFIG_TCP_MD5SIG is not set | ||
350 | # CONFIG_IPV6 is not set | ||
351 | # CONFIG_NETWORK_SECMARK is not set | ||
352 | CONFIG_NETFILTER=y | ||
353 | # CONFIG_NETFILTER_DEBUG is not set | ||
354 | CONFIG_NETFILTER_ADVANCED=y | ||
355 | # CONFIG_BRIDGE_NETFILTER is not set | ||
356 | |||
357 | # | ||
358 | # Core Netfilter Configuration | ||
359 | # | ||
360 | # CONFIG_NETFILTER_NETLINK_QUEUE is not set | ||
361 | # CONFIG_NETFILTER_NETLINK_LOG is not set | ||
362 | CONFIG_NF_CONNTRACK=m | ||
363 | # CONFIG_NF_CT_ACCT is not set | ||
364 | CONFIG_NF_CONNTRACK_MARK=y | ||
365 | # CONFIG_NF_CONNTRACK_EVENTS is not set | ||
366 | # CONFIG_NF_CT_PROTO_DCCP is not set | ||
367 | # CONFIG_NF_CT_PROTO_SCTP is not set | ||
368 | # CONFIG_NF_CT_PROTO_UDPLITE is not set | ||
369 | # CONFIG_NF_CONNTRACK_AMANDA is not set | ||
370 | CONFIG_NF_CONNTRACK_FTP=m | ||
371 | # CONFIG_NF_CONNTRACK_H323 is not set | ||
372 | CONFIG_NF_CONNTRACK_IRC=m | ||
373 | # CONFIG_NF_CONNTRACK_NETBIOS_NS is not set | ||
374 | # CONFIG_NF_CONNTRACK_PPTP is not set | ||
375 | # CONFIG_NF_CONNTRACK_SANE is not set | ||
376 | # CONFIG_NF_CONNTRACK_SIP is not set | ||
377 | CONFIG_NF_CONNTRACK_TFTP=m | ||
378 | # CONFIG_NF_CT_NETLINK is not set | ||
379 | # CONFIG_NETFILTER_TPROXY is not set | ||
380 | CONFIG_NETFILTER_XTABLES=m | ||
381 | # CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set | ||
382 | # CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set | ||
383 | # CONFIG_NETFILTER_XT_TARGET_DSCP is not set | ||
384 | # CONFIG_NETFILTER_XT_TARGET_HL is not set | ||
385 | # CONFIG_NETFILTER_XT_TARGET_LED is not set | ||
386 | # CONFIG_NETFILTER_XT_TARGET_MARK is not set | ||
387 | # CONFIG_NETFILTER_XT_TARGET_NFLOG is not set | ||
388 | # CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set | ||
389 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
390 | # CONFIG_NETFILTER_XT_TARGET_RATEEST is not set | ||
391 | # CONFIG_NETFILTER_XT_TARGET_TRACE is not set | ||
392 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | ||
393 | # CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set | ||
394 | # CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set | ||
395 | # CONFIG_NETFILTER_XT_MATCH_COMMENT is not set | ||
396 | # CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set | ||
397 | # CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set | ||
398 | # CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set | ||
399 | # CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set | ||
400 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set | ||
401 | # CONFIG_NETFILTER_XT_MATCH_DSCP is not set | ||
402 | # CONFIG_NETFILTER_XT_MATCH_ESP is not set | ||
403 | # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set | ||
404 | # CONFIG_NETFILTER_XT_MATCH_HELPER is not set | ||
405 | # CONFIG_NETFILTER_XT_MATCH_HL is not set | ||
406 | # CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set | ||
407 | # CONFIG_NETFILTER_XT_MATCH_LENGTH is not set | ||
408 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
409 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
410 | # CONFIG_NETFILTER_XT_MATCH_MARK is not set | ||
411 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
412 | # CONFIG_NETFILTER_XT_MATCH_OWNER is not set | ||
413 | # CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set | ||
414 | # CONFIG_NETFILTER_XT_MATCH_QUOTA is not set | ||
415 | # CONFIG_NETFILTER_XT_MATCH_RATEEST is not set | ||
416 | # CONFIG_NETFILTER_XT_MATCH_REALM is not set | ||
417 | # CONFIG_NETFILTER_XT_MATCH_RECENT is not set | ||
418 | # CONFIG_NETFILTER_XT_MATCH_SCTP is not set | ||
419 | CONFIG_NETFILTER_XT_MATCH_STATE=m | ||
420 | # CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set | ||
421 | # CONFIG_NETFILTER_XT_MATCH_STRING is not set | ||
422 | # CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set | ||
423 | # CONFIG_NETFILTER_XT_MATCH_TIME is not set | ||
424 | # CONFIG_NETFILTER_XT_MATCH_U32 is not set | ||
425 | # CONFIG_IP_VS is not set | ||
426 | |||
427 | # | ||
428 | # IP: Netfilter Configuration | ||
429 | # | ||
430 | CONFIG_NF_DEFRAG_IPV4=m | ||
431 | CONFIG_NF_CONNTRACK_IPV4=m | ||
432 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | ||
433 | # CONFIG_IP_NF_QUEUE is not set | ||
434 | CONFIG_IP_NF_IPTABLES=m | ||
435 | # CONFIG_IP_NF_MATCH_ADDRTYPE is not set | ||
436 | # CONFIG_IP_NF_MATCH_AH is not set | ||
437 | # CONFIG_IP_NF_MATCH_ECN is not set | ||
438 | # CONFIG_IP_NF_MATCH_TTL is not set | ||
439 | CONFIG_IP_NF_FILTER=m | ||
440 | CONFIG_IP_NF_TARGET_REJECT=m | ||
441 | CONFIG_IP_NF_TARGET_LOG=m | ||
442 | # CONFIG_IP_NF_TARGET_ULOG is not set | ||
443 | CONFIG_NF_NAT=m | ||
444 | CONFIG_NF_NAT_NEEDED=y | ||
445 | CONFIG_IP_NF_TARGET_MASQUERADE=m | ||
446 | # CONFIG_IP_NF_TARGET_NETMAP is not set | ||
447 | # CONFIG_IP_NF_TARGET_REDIRECT is not set | ||
448 | # CONFIG_NF_NAT_SNMP_BASIC is not set | ||
449 | CONFIG_NF_NAT_FTP=m | ||
450 | CONFIG_NF_NAT_IRC=m | ||
451 | CONFIG_NF_NAT_TFTP=m | ||
452 | # CONFIG_NF_NAT_AMANDA is not set | ||
453 | # CONFIG_NF_NAT_PPTP is not set | ||
454 | # CONFIG_NF_NAT_H323 is not set | ||
455 | # CONFIG_NF_NAT_SIP is not set | ||
456 | CONFIG_IP_NF_MANGLE=m | ||
457 | # CONFIG_IP_NF_TARGET_CLUSTERIP is not set | ||
458 | # CONFIG_IP_NF_TARGET_ECN is not set | ||
459 | # CONFIG_IP_NF_TARGET_TTL is not set | ||
460 | CONFIG_IP_NF_RAW=m | ||
461 | # CONFIG_IP_NF_ARPTABLES is not set | ||
462 | # CONFIG_IP_DCCP is not set | ||
463 | # CONFIG_IP_SCTP is not set | ||
464 | # CONFIG_TIPC is not set | ||
465 | CONFIG_ATM=m | ||
466 | # CONFIG_ATM_CLIP is not set | ||
467 | # CONFIG_ATM_LANE is not set | ||
468 | CONFIG_ATM_BR2684=m | ||
469 | CONFIG_ATM_BR2684_IPFILTER=y | ||
470 | CONFIG_STP=y | ||
471 | CONFIG_BRIDGE=y | ||
472 | # CONFIG_NET_DSA is not set | ||
473 | CONFIG_VLAN_8021Q=y | ||
474 | # CONFIG_VLAN_8021Q_GVRP is not set | ||
475 | # CONFIG_DECNET is not set | ||
476 | CONFIG_LLC=y | ||
477 | # CONFIG_LLC2 is not set | ||
478 | # CONFIG_IPX is not set | ||
479 | # CONFIG_ATALK is not set | ||
480 | # CONFIG_X25 is not set | ||
481 | # CONFIG_LAPB is not set | ||
482 | # CONFIG_ECONET is not set | ||
483 | # CONFIG_WAN_ROUTER is not set | ||
484 | # CONFIG_PHONET is not set | ||
485 | # CONFIG_IEEE802154 is not set | ||
486 | CONFIG_NET_SCHED=y | ||
487 | |||
488 | # | ||
489 | # Queueing/Scheduling | ||
490 | # | ||
491 | # CONFIG_NET_SCH_CBQ is not set | ||
492 | # CONFIG_NET_SCH_HTB is not set | ||
493 | # CONFIG_NET_SCH_HFSC is not set | ||
494 | # CONFIG_NET_SCH_ATM is not set | ||
495 | # CONFIG_NET_SCH_PRIO is not set | ||
496 | # CONFIG_NET_SCH_MULTIQ is not set | ||
497 | # CONFIG_NET_SCH_RED is not set | ||
498 | # CONFIG_NET_SCH_SFQ is not set | ||
499 | # CONFIG_NET_SCH_TEQL is not set | ||
500 | # CONFIG_NET_SCH_TBF is not set | ||
501 | # CONFIG_NET_SCH_GRED is not set | ||
502 | # CONFIG_NET_SCH_DSMARK is not set | ||
503 | # CONFIG_NET_SCH_NETEM is not set | ||
504 | # CONFIG_NET_SCH_DRR is not set | ||
505 | # CONFIG_NET_SCH_INGRESS is not set | ||
506 | |||
507 | # | ||
508 | # Classification | ||
509 | # | ||
510 | # CONFIG_NET_CLS_BASIC is not set | ||
511 | # CONFIG_NET_CLS_TCINDEX is not set | ||
512 | # CONFIG_NET_CLS_ROUTE4 is not set | ||
513 | # CONFIG_NET_CLS_FW is not set | ||
514 | # CONFIG_NET_CLS_U32 is not set | ||
515 | # CONFIG_NET_CLS_RSVP is not set | ||
516 | # CONFIG_NET_CLS_RSVP6 is not set | ||
517 | # CONFIG_NET_CLS_FLOW is not set | ||
518 | # CONFIG_NET_EMATCH is not set | ||
519 | CONFIG_NET_CLS_ACT=y | ||
520 | CONFIG_NET_ACT_POLICE=y | ||
521 | # CONFIG_NET_ACT_GACT is not set | ||
522 | # CONFIG_NET_ACT_MIRRED is not set | ||
523 | # CONFIG_NET_ACT_IPT is not set | ||
524 | # CONFIG_NET_ACT_NAT is not set | ||
525 | # CONFIG_NET_ACT_PEDIT is not set | ||
526 | # CONFIG_NET_ACT_SIMP is not set | ||
527 | # CONFIG_NET_ACT_SKBEDIT is not set | ||
528 | CONFIG_NET_SCH_FIFO=y | ||
529 | # CONFIG_DCB is not set | ||
530 | |||
531 | # | ||
532 | # Network testing | ||
533 | # | ||
534 | # CONFIG_NET_PKTGEN is not set | ||
535 | CONFIG_HAMRADIO=y | ||
536 | |||
537 | # | ||
538 | # Packet Radio protocols | ||
539 | # | ||
540 | # CONFIG_AX25 is not set | ||
541 | # CONFIG_CAN is not set | ||
542 | # CONFIG_IRDA is not set | ||
543 | # CONFIG_BT is not set | ||
544 | # CONFIG_AF_RXRPC is not set | ||
545 | CONFIG_FIB_RULES=y | ||
546 | CONFIG_WIRELESS=y | ||
547 | CONFIG_CFG80211=m | ||
548 | # CONFIG_CFG80211_REG_DEBUG is not set | ||
549 | # CONFIG_CFG80211_DEBUGFS is not set | ||
550 | # CONFIG_WIRELESS_OLD_REGULATORY is not set | ||
551 | CONFIG_WIRELESS_EXT=y | ||
552 | CONFIG_WIRELESS_EXT_SYSFS=y | ||
553 | # CONFIG_LIB80211 is not set | ||
554 | CONFIG_MAC80211=m | ||
555 | CONFIG_MAC80211_DEFAULT_PS=y | ||
556 | CONFIG_MAC80211_DEFAULT_PS_VALUE=1 | ||
557 | |||
558 | # | ||
559 | # Rate control algorithm selection | ||
560 | # | ||
561 | CONFIG_MAC80211_RC_PID=y | ||
562 | CONFIG_MAC80211_RC_MINSTREL=y | ||
563 | CONFIG_MAC80211_RC_DEFAULT_PID=y | ||
564 | # CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set | ||
565 | CONFIG_MAC80211_RC_DEFAULT="pid" | ||
566 | # CONFIG_MAC80211_MESH is not set | ||
567 | # CONFIG_MAC80211_LEDS is not set | ||
568 | # CONFIG_MAC80211_DEBUGFS is not set | ||
569 | # CONFIG_MAC80211_DEBUG_MENU is not set | ||
570 | # CONFIG_WIMAX is not set | ||
571 | # CONFIG_RFKILL is not set | ||
572 | # CONFIG_NET_9P is not set | ||
573 | |||
574 | # | ||
575 | # Device Drivers | ||
576 | # | ||
577 | |||
578 | # | ||
579 | # Generic Driver Options | ||
580 | # | ||
581 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
582 | CONFIG_STANDALONE=y | ||
583 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
584 | CONFIG_FW_LOADER=y | ||
585 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
586 | CONFIG_EXTRA_FIRMWARE="" | ||
587 | # CONFIG_SYS_HYPERVISOR is not set | ||
588 | # CONFIG_CONNECTOR is not set | ||
589 | CONFIG_MTD=y | ||
590 | # CONFIG_MTD_DEBUG is not set | ||
591 | # CONFIG_MTD_CONCAT is not set | ||
592 | CONFIG_MTD_PARTITIONS=y | ||
593 | # CONFIG_MTD_TESTS is not set | ||
594 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
595 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
596 | # CONFIG_MTD_AR7_PARTS is not set | ||
597 | |||
598 | # | ||
599 | # User Modules And Translation Layers | ||
600 | # | ||
601 | CONFIG_MTD_CHAR=y | ||
602 | CONFIG_MTD_BLKDEVS=y | ||
603 | CONFIG_MTD_BLOCK=y | ||
604 | # CONFIG_FTL is not set | ||
605 | # CONFIG_NFTL is not set | ||
606 | # CONFIG_INFTL is not set | ||
607 | # CONFIG_RFD_FTL is not set | ||
608 | # CONFIG_SSFDC is not set | ||
609 | # CONFIG_MTD_OOPS is not set | ||
610 | |||
611 | # | ||
612 | # RAM/ROM/Flash chip drivers | ||
613 | # | ||
614 | CONFIG_MTD_CFI=y | ||
615 | # CONFIG_MTD_JEDECPROBE is not set | ||
616 | CONFIG_MTD_GEN_PROBE=y | ||
617 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
618 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
619 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
620 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
621 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
622 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
623 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
624 | CONFIG_MTD_CFI_I1=y | ||
625 | CONFIG_MTD_CFI_I2=y | ||
626 | # CONFIG_MTD_CFI_I4 is not set | ||
627 | # CONFIG_MTD_CFI_I8 is not set | ||
628 | CONFIG_MTD_CFI_INTELEXT=y | ||
629 | CONFIG_MTD_CFI_AMDSTD=y | ||
630 | CONFIG_MTD_CFI_STAA=y | ||
631 | CONFIG_MTD_CFI_UTIL=y | ||
632 | # CONFIG_MTD_RAM is not set | ||
633 | # CONFIG_MTD_ROM is not set | ||
634 | # CONFIG_MTD_ABSENT is not set | ||
635 | |||
636 | # | ||
637 | # Mapping drivers for chip access | ||
638 | # | ||
639 | CONFIG_MTD_COMPLEX_MAPPINGS=y | ||
640 | CONFIG_MTD_PHYSMAP=y | ||
641 | # CONFIG_MTD_PHYSMAP_COMPAT is not set | ||
642 | # CONFIG_MTD_PLATRAM is not set | ||
643 | |||
644 | # | ||
645 | # Self-contained MTD device drivers | ||
646 | # | ||
647 | # CONFIG_MTD_SLRAM is not set | ||
648 | # CONFIG_MTD_PHRAM is not set | ||
649 | # CONFIG_MTD_MTDRAM is not set | ||
650 | # CONFIG_MTD_BLOCK2MTD is not set | ||
651 | |||
652 | # | ||
653 | # Disk-On-Chip Device Drivers | ||
654 | # | ||
655 | # CONFIG_MTD_DOC2000 is not set | ||
656 | # CONFIG_MTD_DOC2001 is not set | ||
657 | # CONFIG_MTD_DOC2001PLUS is not set | ||
658 | # CONFIG_MTD_NAND is not set | ||
659 | # CONFIG_MTD_ONENAND is not set | ||
660 | |||
661 | # | ||
662 | # LPDDR flash memory drivers | ||
663 | # | ||
664 | # CONFIG_MTD_LPDDR is not set | ||
665 | |||
666 | # | ||
667 | # UBI - Unsorted block images | ||
668 | # | ||
669 | # CONFIG_MTD_UBI is not set | ||
670 | # CONFIG_PARPORT is not set | ||
671 | CONFIG_BLK_DEV=y | ||
672 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
673 | # CONFIG_BLK_DEV_LOOP is not set | ||
674 | # CONFIG_BLK_DEV_NBD is not set | ||
675 | # CONFIG_BLK_DEV_RAM is not set | ||
676 | # CONFIG_CDROM_PKTCDVD is not set | ||
677 | # CONFIG_ATA_OVER_ETH is not set | ||
678 | # CONFIG_BLK_DEV_HD is not set | ||
679 | CONFIG_MISC_DEVICES=y | ||
680 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
681 | # CONFIG_C2PORT is not set | ||
682 | |||
683 | # | ||
684 | # EEPROM support | ||
685 | # | ||
686 | # CONFIG_EEPROM_93CX6 is not set | ||
687 | CONFIG_HAVE_IDE=y | ||
688 | # CONFIG_IDE is not set | ||
689 | |||
690 | # | ||
691 | # SCSI device support | ||
692 | # | ||
693 | # CONFIG_RAID_ATTRS is not set | ||
694 | # CONFIG_SCSI is not set | ||
695 | # CONFIG_SCSI_DMA is not set | ||
696 | # CONFIG_SCSI_NETLINK is not set | ||
697 | # CONFIG_ATA is not set | ||
698 | # CONFIG_MD is not set | ||
699 | CONFIG_NETDEVICES=y | ||
700 | # CONFIG_IFB is not set | ||
701 | # CONFIG_DUMMY is not set | ||
702 | # CONFIG_BONDING is not set | ||
703 | # CONFIG_MACVLAN is not set | ||
704 | # CONFIG_EQUALIZER is not set | ||
705 | # CONFIG_TUN is not set | ||
706 | # CONFIG_VETH is not set | ||
707 | CONFIG_PHYLIB=y | ||
708 | |||
709 | # | ||
710 | # MII PHY device drivers | ||
711 | # | ||
712 | # CONFIG_MARVELL_PHY is not set | ||
713 | # CONFIG_DAVICOM_PHY is not set | ||
714 | # CONFIG_QSEMI_PHY is not set | ||
715 | # CONFIG_LXT_PHY is not set | ||
716 | # CONFIG_CICADA_PHY is not set | ||
717 | # CONFIG_VITESSE_PHY is not set | ||
718 | # CONFIG_SMSC_PHY is not set | ||
719 | # CONFIG_BROADCOM_PHY is not set | ||
720 | # CONFIG_ICPLUS_PHY is not set | ||
721 | # CONFIG_REALTEK_PHY is not set | ||
722 | # CONFIG_NATIONAL_PHY is not set | ||
723 | # CONFIG_STE10XP is not set | ||
724 | # CONFIG_LSI_ET1011C_PHY is not set | ||
725 | CONFIG_FIXED_PHY=y | ||
726 | # CONFIG_MDIO_BITBANG is not set | ||
727 | CONFIG_NET_ETHERNET=y | ||
728 | CONFIG_MII=y | ||
729 | # CONFIG_AX88796 is not set | ||
730 | # CONFIG_SMC91X is not set | ||
731 | # CONFIG_DM9000 is not set | ||
732 | # CONFIG_ETHOC is not set | ||
733 | # CONFIG_DNET is not set | ||
734 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
735 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
736 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
737 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
738 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
739 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
740 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
741 | # CONFIG_B44 is not set | ||
742 | # CONFIG_KS8842 is not set | ||
743 | CONFIG_CPMAC=y | ||
744 | # CONFIG_NETDEV_1000 is not set | ||
745 | # CONFIG_NETDEV_10000 is not set | ||
746 | |||
747 | # | ||
748 | # Wireless LAN | ||
749 | # | ||
750 | # CONFIG_WLAN_PRE80211 is not set | ||
751 | CONFIG_WLAN_80211=y | ||
752 | # CONFIG_LIBERTAS is not set | ||
753 | # CONFIG_LIBERTAS_THINFIRM is not set | ||
754 | # CONFIG_MAC80211_HWSIM is not set | ||
755 | # CONFIG_P54_COMMON is not set | ||
756 | # CONFIG_HOSTAP is not set | ||
757 | # CONFIG_B43 is not set | ||
758 | # CONFIG_B43LEGACY is not set | ||
759 | # CONFIG_RT2X00 is not set | ||
760 | |||
761 | # | ||
762 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
763 | # | ||
764 | # CONFIG_WAN is not set | ||
765 | CONFIG_ATM_DRIVERS=y | ||
766 | # CONFIG_ATM_DUMMY is not set | ||
767 | # CONFIG_ATM_TCP is not set | ||
768 | CONFIG_PPP=m | ||
769 | CONFIG_PPP_MULTILINK=y | ||
770 | CONFIG_PPP_FILTER=y | ||
771 | CONFIG_PPP_ASYNC=m | ||
772 | # CONFIG_PPP_SYNC_TTY is not set | ||
773 | # CONFIG_PPP_DEFLATE is not set | ||
774 | # CONFIG_PPP_BSDCOMP is not set | ||
775 | # CONFIG_PPP_MPPE is not set | ||
776 | CONFIG_PPPOE=m | ||
777 | CONFIG_PPPOATM=m | ||
778 | # CONFIG_PPPOL2TP is not set | ||
779 | # CONFIG_SLIP is not set | ||
780 | CONFIG_SLHC=m | ||
781 | # CONFIG_NETCONSOLE is not set | ||
782 | # CONFIG_NETPOLL is not set | ||
783 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
784 | # CONFIG_ISDN is not set | ||
785 | # CONFIG_PHONE is not set | ||
786 | |||
787 | # | ||
788 | # Input device support | ||
789 | # | ||
790 | # CONFIG_INPUT is not set | ||
791 | |||
792 | # | ||
793 | # Hardware I/O ports | ||
794 | # | ||
795 | # CONFIG_SERIO is not set | ||
796 | # CONFIG_GAMEPORT is not set | ||
797 | |||
798 | # | ||
799 | # Character devices | ||
800 | # | ||
801 | # CONFIG_VT is not set | ||
802 | # CONFIG_DEVKMEM is not set | ||
803 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
804 | |||
805 | # | ||
806 | # Serial drivers | ||
807 | # | ||
808 | CONFIG_SERIAL_8250=y | ||
809 | CONFIG_SERIAL_8250_CONSOLE=y | ||
810 | CONFIG_SERIAL_8250_NR_UARTS=2 | ||
811 | CONFIG_SERIAL_8250_RUNTIME_UARTS=2 | ||
812 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
813 | |||
814 | # | ||
815 | # Non-8250 serial port support | ||
816 | # | ||
817 | CONFIG_SERIAL_CORE=y | ||
818 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
819 | CONFIG_UNIX98_PTYS=y | ||
820 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
821 | # CONFIG_LEGACY_PTYS is not set | ||
822 | # CONFIG_IPMI_HANDLER is not set | ||
823 | CONFIG_HW_RANDOM=y | ||
824 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
825 | # CONFIG_R3964 is not set | ||
826 | # CONFIG_RAW_DRIVER is not set | ||
827 | # CONFIG_TCG_TPM is not set | ||
828 | # CONFIG_I2C is not set | ||
829 | # CONFIG_SPI is not set | ||
830 | # CONFIG_W1 is not set | ||
831 | # CONFIG_POWER_SUPPLY is not set | ||
832 | # CONFIG_HWMON is not set | ||
833 | # CONFIG_THERMAL is not set | ||
834 | # CONFIG_THERMAL_HWMON is not set | ||
835 | CONFIG_WATCHDOG=y | ||
836 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
837 | |||
838 | # | ||
839 | # Watchdog Device Drivers | ||
840 | # | ||
841 | # CONFIG_SOFT_WATCHDOG is not set | ||
842 | CONFIG_AR7_WDT=y | ||
843 | CONFIG_SSB_POSSIBLE=y | ||
844 | |||
845 | # | ||
846 | # Sonics Silicon Backplane | ||
847 | # | ||
848 | CONFIG_SSB=y | ||
849 | # CONFIG_SSB_SILENT is not set | ||
850 | # CONFIG_SSB_DEBUG is not set | ||
851 | CONFIG_SSB_SERIAL=y | ||
852 | CONFIG_SSB_DRIVER_MIPS=y | ||
853 | CONFIG_SSB_EMBEDDED=y | ||
854 | CONFIG_SSB_DRIVER_EXTIF=y | ||
855 | |||
856 | # | ||
857 | # Multifunction device drivers | ||
858 | # | ||
859 | # CONFIG_MFD_CORE is not set | ||
860 | # CONFIG_MFD_SM501 is not set | ||
861 | # CONFIG_HTC_PASIC3 is not set | ||
862 | # CONFIG_MFD_TMIO is not set | ||
863 | # CONFIG_REGULATOR is not set | ||
864 | # CONFIG_MEDIA_SUPPORT is not set | ||
865 | |||
866 | # | ||
867 | # Graphics support | ||
868 | # | ||
869 | # CONFIG_VGASTATE is not set | ||
870 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
871 | # CONFIG_FB is not set | ||
872 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
873 | |||
874 | # | ||
875 | # Display device support | ||
876 | # | ||
877 | # CONFIG_DISPLAY_SUPPORT is not set | ||
878 | # CONFIG_SOUND is not set | ||
879 | # CONFIG_USB_SUPPORT is not set | ||
880 | # CONFIG_MMC is not set | ||
881 | # CONFIG_MEMSTICK is not set | ||
882 | CONFIG_NEW_LEDS=y | ||
883 | CONFIG_LEDS_CLASS=y | ||
884 | |||
885 | # | ||
886 | # LED drivers | ||
887 | # | ||
888 | # CONFIG_LEDS_GPIO is not set | ||
889 | |||
890 | # | ||
891 | # LED Triggers | ||
892 | # | ||
893 | CONFIG_LEDS_TRIGGERS=y | ||
894 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
895 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
896 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | ||
897 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
898 | |||
899 | # | ||
900 | # iptables trigger is under Netfilter config (LED target) | ||
901 | # | ||
902 | # CONFIG_ACCESSIBILITY is not set | ||
903 | CONFIG_RTC_LIB=y | ||
904 | # CONFIG_RTC_CLASS is not set | ||
905 | # CONFIG_DMADEVICES is not set | ||
906 | # CONFIG_AUXDISPLAY is not set | ||
907 | # CONFIG_UIO is not set | ||
908 | |||
909 | # | ||
910 | # TI VLYNQ | ||
911 | # | ||
912 | CONFIG_VLYNQ=y | ||
913 | # CONFIG_STAGING is not set | ||
914 | |||
915 | # | ||
916 | # File systems | ||
917 | # | ||
918 | # CONFIG_EXT2_FS is not set | ||
919 | # CONFIG_EXT3_FS is not set | ||
920 | # CONFIG_EXT4_FS is not set | ||
921 | # CONFIG_REISERFS_FS is not set | ||
922 | # CONFIG_JFS_FS is not set | ||
923 | # CONFIG_FS_POSIX_ACL is not set | ||
924 | # CONFIG_XFS_FS is not set | ||
925 | # CONFIG_OCFS2_FS is not set | ||
926 | # CONFIG_BTRFS_FS is not set | ||
927 | CONFIG_FILE_LOCKING=y | ||
928 | CONFIG_FSNOTIFY=y | ||
929 | # CONFIG_DNOTIFY is not set | ||
930 | # CONFIG_INOTIFY is not set | ||
931 | CONFIG_INOTIFY_USER=y | ||
932 | # CONFIG_QUOTA is not set | ||
933 | # CONFIG_AUTOFS_FS is not set | ||
934 | # CONFIG_AUTOFS4_FS is not set | ||
935 | # CONFIG_FUSE_FS is not set | ||
936 | |||
937 | # | ||
938 | # Caches | ||
939 | # | ||
940 | # CONFIG_FSCACHE is not set | ||
941 | |||
942 | # | ||
943 | # CD-ROM/DVD Filesystems | ||
944 | # | ||
945 | # CONFIG_ISO9660_FS is not set | ||
946 | # CONFIG_UDF_FS is not set | ||
947 | |||
948 | # | ||
949 | # DOS/FAT/NT Filesystems | ||
950 | # | ||
951 | # CONFIG_MSDOS_FS is not set | ||
952 | # CONFIG_VFAT_FS is not set | ||
953 | # CONFIG_NTFS_FS is not set | ||
954 | |||
955 | # | ||
956 | # Pseudo filesystems | ||
957 | # | ||
958 | CONFIG_PROC_FS=y | ||
959 | CONFIG_PROC_KCORE=y | ||
960 | CONFIG_PROC_SYSCTL=y | ||
961 | # CONFIG_PROC_PAGE_MONITOR is not set | ||
962 | CONFIG_SYSFS=y | ||
963 | CONFIG_TMPFS=y | ||
964 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
965 | # CONFIG_HUGETLB_PAGE is not set | ||
966 | # CONFIG_CONFIGFS_FS is not set | ||
967 | CONFIG_MISC_FILESYSTEMS=y | ||
968 | # CONFIG_ADFS_FS is not set | ||
969 | # CONFIG_AFFS_FS is not set | ||
970 | # CONFIG_HFS_FS is not set | ||
971 | # CONFIG_HFSPLUS_FS is not set | ||
972 | # CONFIG_BEFS_FS is not set | ||
973 | # CONFIG_BFS_FS is not set | ||
974 | # CONFIG_EFS_FS is not set | ||
975 | CONFIG_JFFS2_FS=y | ||
976 | CONFIG_JFFS2_FS_DEBUG=0 | ||
977 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
978 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
979 | CONFIG_JFFS2_SUMMARY=y | ||
980 | # CONFIG_JFFS2_FS_XATTR is not set | ||
981 | CONFIG_JFFS2_COMPRESSION_OPTIONS=y | ||
982 | CONFIG_JFFS2_ZLIB=y | ||
983 | # CONFIG_JFFS2_LZO is not set | ||
984 | CONFIG_JFFS2_RTIME=y | ||
985 | # CONFIG_JFFS2_RUBIN is not set | ||
986 | # CONFIG_JFFS2_CMODE_NONE is not set | ||
987 | CONFIG_JFFS2_CMODE_PRIORITY=y | ||
988 | # CONFIG_JFFS2_CMODE_SIZE is not set | ||
989 | # CONFIG_JFFS2_CMODE_FAVOURLZO is not set | ||
990 | # CONFIG_CRAMFS is not set | ||
991 | CONFIG_SQUASHFS=y | ||
992 | # CONFIG_SQUASHFS_EMBEDDED is not set | ||
993 | CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 | ||
994 | # CONFIG_VXFS_FS is not set | ||
995 | # CONFIG_MINIX_FS is not set | ||
996 | # CONFIG_OMFS_FS is not set | ||
997 | # CONFIG_HPFS_FS is not set | ||
998 | # CONFIG_QNX4FS_FS is not set | ||
999 | # CONFIG_ROMFS_FS is not set | ||
1000 | # CONFIG_SYSV_FS is not set | ||
1001 | # CONFIG_UFS_FS is not set | ||
1002 | # CONFIG_NILFS2_FS is not set | ||
1003 | CONFIG_NETWORK_FILESYSTEMS=y | ||
1004 | # CONFIG_NFS_FS is not set | ||
1005 | # CONFIG_NFSD is not set | ||
1006 | # CONFIG_SMB_FS is not set | ||
1007 | # CONFIG_CIFS is not set | ||
1008 | # CONFIG_NCP_FS is not set | ||
1009 | # CONFIG_CODA_FS is not set | ||
1010 | # CONFIG_AFS_FS is not set | ||
1011 | |||
1012 | # | ||
1013 | # Partition Types | ||
1014 | # | ||
1015 | CONFIG_PARTITION_ADVANCED=y | ||
1016 | # CONFIG_ACORN_PARTITION is not set | ||
1017 | # CONFIG_OSF_PARTITION is not set | ||
1018 | # CONFIG_AMIGA_PARTITION is not set | ||
1019 | # CONFIG_ATARI_PARTITION is not set | ||
1020 | # CONFIG_MAC_PARTITION is not set | ||
1021 | CONFIG_MSDOS_PARTITION=y | ||
1022 | CONFIG_BSD_DISKLABEL=y | ||
1023 | # CONFIG_MINIX_SUBPARTITION is not set | ||
1024 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
1025 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
1026 | # CONFIG_LDM_PARTITION is not set | ||
1027 | # CONFIG_SGI_PARTITION is not set | ||
1028 | # CONFIG_ULTRIX_PARTITION is not set | ||
1029 | # CONFIG_SUN_PARTITION is not set | ||
1030 | # CONFIG_KARMA_PARTITION is not set | ||
1031 | # CONFIG_EFI_PARTITION is not set | ||
1032 | # CONFIG_SYSV68_PARTITION is not set | ||
1033 | # CONFIG_NLS is not set | ||
1034 | # CONFIG_DLM is not set | ||
1035 | |||
1036 | # | ||
1037 | # Kernel hacking | ||
1038 | # | ||
1039 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
1040 | # CONFIG_PRINTK_TIME is not set | ||
1041 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1042 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
1043 | CONFIG_FRAME_WARN=1024 | ||
1044 | # CONFIG_MAGIC_SYSRQ is not set | ||
1045 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1046 | CONFIG_DEBUG_FS=y | ||
1047 | # CONFIG_HEADERS_CHECK is not set | ||
1048 | # CONFIG_DEBUG_KERNEL is not set | ||
1049 | # CONFIG_DEBUG_MEMORY_INIT is not set | ||
1050 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
1051 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
1052 | CONFIG_TRACING_SUPPORT=y | ||
1053 | # CONFIG_FTRACE is not set | ||
1054 | # CONFIG_DYNAMIC_DEBUG is not set | ||
1055 | # CONFIG_SAMPLES is not set | ||
1056 | CONFIG_HAVE_ARCH_KGDB=y | ||
1057 | CONFIG_CMDLINE="rootfstype=squashfs,jffs2" | ||
1058 | |||
1059 | # | ||
1060 | # Security options | ||
1061 | # | ||
1062 | # CONFIG_KEYS is not set | ||
1063 | # CONFIG_SECURITY is not set | ||
1064 | # CONFIG_SECURITYFS is not set | ||
1065 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1066 | CONFIG_CRYPTO=y | ||
1067 | |||
1068 | # | ||
1069 | # Crypto core or helper | ||
1070 | # | ||
1071 | # CONFIG_CRYPTO_FIPS is not set | ||
1072 | CONFIG_CRYPTO_ALGAPI=m | ||
1073 | CONFIG_CRYPTO_ALGAPI2=m | ||
1074 | CONFIG_CRYPTO_AEAD2=m | ||
1075 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1076 | CONFIG_CRYPTO_BLKCIPHER2=m | ||
1077 | CONFIG_CRYPTO_HASH2=m | ||
1078 | CONFIG_CRYPTO_RNG2=m | ||
1079 | CONFIG_CRYPTO_PCOMP=m | ||
1080 | CONFIG_CRYPTO_MANAGER=m | ||
1081 | CONFIG_CRYPTO_MANAGER2=m | ||
1082 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1083 | # CONFIG_CRYPTO_NULL is not set | ||
1084 | CONFIG_CRYPTO_WORKQUEUE=m | ||
1085 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1086 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1087 | # CONFIG_CRYPTO_TEST is not set | ||
1088 | |||
1089 | # | ||
1090 | # Authenticated Encryption with Associated Data | ||
1091 | # | ||
1092 | # CONFIG_CRYPTO_CCM is not set | ||
1093 | # CONFIG_CRYPTO_GCM is not set | ||
1094 | # CONFIG_CRYPTO_SEQIV is not set | ||
1095 | |||
1096 | # | ||
1097 | # Block modes | ||
1098 | # | ||
1099 | # CONFIG_CRYPTO_CBC is not set | ||
1100 | # CONFIG_CRYPTO_CTR is not set | ||
1101 | # CONFIG_CRYPTO_CTS is not set | ||
1102 | CONFIG_CRYPTO_ECB=m | ||
1103 | # CONFIG_CRYPTO_LRW is not set | ||
1104 | # CONFIG_CRYPTO_PCBC is not set | ||
1105 | # CONFIG_CRYPTO_XTS is not set | ||
1106 | |||
1107 | # | ||
1108 | # Hash modes | ||
1109 | # | ||
1110 | # CONFIG_CRYPTO_HMAC is not set | ||
1111 | # CONFIG_CRYPTO_XCBC is not set | ||
1112 | |||
1113 | # | ||
1114 | # Digest | ||
1115 | # | ||
1116 | # CONFIG_CRYPTO_CRC32C is not set | ||
1117 | # CONFIG_CRYPTO_MD4 is not set | ||
1118 | # CONFIG_CRYPTO_MD5 is not set | ||
1119 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1120 | # CONFIG_CRYPTO_RMD128 is not set | ||
1121 | # CONFIG_CRYPTO_RMD160 is not set | ||
1122 | # CONFIG_CRYPTO_RMD256 is not set | ||
1123 | # CONFIG_CRYPTO_RMD320 is not set | ||
1124 | # CONFIG_CRYPTO_SHA1 is not set | ||
1125 | # CONFIG_CRYPTO_SHA256 is not set | ||
1126 | # CONFIG_CRYPTO_SHA512 is not set | ||
1127 | # CONFIG_CRYPTO_TGR192 is not set | ||
1128 | # CONFIG_CRYPTO_WP512 is not set | ||
1129 | |||
1130 | # | ||
1131 | # Ciphers | ||
1132 | # | ||
1133 | CONFIG_CRYPTO_AES=m | ||
1134 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1135 | CONFIG_CRYPTO_ARC4=m | ||
1136 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1137 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1138 | # CONFIG_CRYPTO_CAST5 is not set | ||
1139 | # CONFIG_CRYPTO_CAST6 is not set | ||
1140 | # CONFIG_CRYPTO_DES is not set | ||
1141 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1142 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1143 | # CONFIG_CRYPTO_SALSA20 is not set | ||
1144 | # CONFIG_CRYPTO_SEED is not set | ||
1145 | # CONFIG_CRYPTO_SERPENT is not set | ||
1146 | # CONFIG_CRYPTO_TEA is not set | ||
1147 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1148 | |||
1149 | # | ||
1150 | # Compression | ||
1151 | # | ||
1152 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1153 | # CONFIG_CRYPTO_ZLIB is not set | ||
1154 | # CONFIG_CRYPTO_LZO is not set | ||
1155 | |||
1156 | # | ||
1157 | # Random Number Generation | ||
1158 | # | ||
1159 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1160 | # CONFIG_CRYPTO_HW is not set | ||
1161 | # CONFIG_BINARY_PRINTF is not set | ||
1162 | |||
1163 | # | ||
1164 | # Library routines | ||
1165 | # | ||
1166 | CONFIG_BITREVERSE=y | ||
1167 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
1168 | CONFIG_CRC_CCITT=m | ||
1169 | # CONFIG_CRC16 is not set | ||
1170 | # CONFIG_CRC_T10DIF is not set | ||
1171 | # CONFIG_CRC_ITU_T is not set | ||
1172 | CONFIG_CRC32=y | ||
1173 | # CONFIG_CRC7 is not set | ||
1174 | # CONFIG_LIBCRC32C is not set | ||
1175 | CONFIG_ZLIB_INFLATE=y | ||
1176 | CONFIG_ZLIB_DEFLATE=y | ||
1177 | CONFIG_DECOMPRESS_GZIP=y | ||
1178 | CONFIG_DECOMPRESS_LZMA=y | ||
1179 | CONFIG_HAS_IOMEM=y | ||
1180 | CONFIG_HAS_IOPORT=y | ||
1181 | CONFIG_HAS_DMA=y | ||
1182 | CONFIG_NLATTR=y | ||
diff --git a/arch/mips/gt64120/wrppmc/serial.c b/arch/mips/gt64120/wrppmc/serial.c index 5ec1c2ffd3a5..6f9d0858f596 100644 --- a/arch/mips/gt64120/wrppmc/serial.c +++ b/arch/mips/gt64120/wrppmc/serial.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Registration of WRPPMC UART platform device. | 2 | * Registration of WRPPMC UART platform device. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/include/asm/amon.h b/arch/mips/include/asm/amon.h new file mode 100644 index 000000000000..c3dc1a68dd8d --- /dev/null +++ b/arch/mips/include/asm/amon.h | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | * Amon support | ||
3 | */ | ||
4 | |||
5 | int amon_cpu_avail(int); | ||
6 | void amon_cpu_start(int, unsigned long, unsigned long, | ||
7 | unsigned long, unsigned long); | ||
diff --git a/arch/mips/include/asm/bug.h b/arch/mips/include/asm/bug.h index 08ea46863fe5..6cf29c26e873 100644 --- a/arch/mips/include/asm/bug.h +++ b/arch/mips/include/asm/bug.h | |||
@@ -1,6 +1,7 @@ | |||
1 | #ifndef __ASM_BUG_H | 1 | #ifndef __ASM_BUG_H |
2 | #define __ASM_BUG_H | 2 | #define __ASM_BUG_H |
3 | 3 | ||
4 | #include <linux/compiler.h> | ||
4 | #include <asm/sgidefs.h> | 5 | #include <asm/sgidefs.h> |
5 | 6 | ||
6 | #ifdef CONFIG_BUG | 7 | #ifdef CONFIG_BUG |
diff --git a/arch/mips/include/asm/bugs.h b/arch/mips/include/asm/bugs.h index 9dc10df32078..b160a706795d 100644 --- a/arch/mips/include/asm/bugs.h +++ b/arch/mips/include/asm/bugs.h | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | #include <linux/bug.h> | 12 | #include <linux/bug.h> |
13 | #include <linux/delay.h> | 13 | #include <linux/delay.h> |
14 | #include <linux/smp.h> | ||
14 | 15 | ||
15 | #include <asm/cpu.h> | 16 | #include <asm/cpu.h> |
16 | #include <asm/cpu-info.h> | 17 | #include <asm/cpu-info.h> |
diff --git a/arch/mips/include/asm/ds1287.h b/arch/mips/include/asm/ds1287.h index ba1702e86931..3af0b8fb3b8c 100644 --- a/arch/mips/include/asm/ds1287.h +++ b/arch/mips/include/asm/ds1287.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * DS1287 timer functions. | 2 | * DS1287 timer functions. |
3 | * | 3 | * |
4 | * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/include/asm/elf.h b/arch/mips/include/asm/elf.h index d58f128aa747..7990694cda22 100644 --- a/arch/mips/include/asm/elf.h +++ b/arch/mips/include/asm/elf.h | |||
@@ -316,9 +316,13 @@ extern void elf_dump_regs(elf_greg_t *, struct pt_regs *regs); | |||
316 | extern int dump_task_regs(struct task_struct *, elf_gregset_t *); | 316 | extern int dump_task_regs(struct task_struct *, elf_gregset_t *); |
317 | extern int dump_task_fpu(struct task_struct *, elf_fpregset_t *); | 317 | extern int dump_task_fpu(struct task_struct *, elf_fpregset_t *); |
318 | 318 | ||
319 | #ifndef ELF_CORE_COPY_REGS | ||
319 | #define ELF_CORE_COPY_REGS(elf_regs, regs) \ | 320 | #define ELF_CORE_COPY_REGS(elf_regs, regs) \ |
320 | elf_dump_regs((elf_greg_t *)&(elf_regs), regs); | 321 | elf_dump_regs((elf_greg_t *)&(elf_regs), regs); |
322 | #endif | ||
323 | #ifndef ELF_CORE_COPY_TASK_REGS | ||
321 | #define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs) | 324 | #define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs) |
325 | #endif | ||
322 | #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) \ | 326 | #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) \ |
323 | dump_task_fpu(tsk, elf_fpregs) | 327 | dump_task_fpu(tsk, elf_fpregs) |
324 | 328 | ||
diff --git a/arch/mips/include/asm/gcmpregs.h b/arch/mips/include/asm/gcmpregs.h index d74a8a4ca861..36fd969d64d6 100644 --- a/arch/mips/include/asm/gcmpregs.h +++ b/arch/mips/include/asm/gcmpregs.h | |||
@@ -114,4 +114,6 @@ | |||
114 | #define GCMP_CCB_DINTGROUP_OFS 0x0030 /* DINT Group Participate */ | 114 | #define GCMP_CCB_DINTGROUP_OFS 0x0030 /* DINT Group Participate */ |
115 | #define GCMP_CCB_DBGGROUP_OFS 0x0100 /* DebugBreak Group */ | 115 | #define GCMP_CCB_DBGGROUP_OFS 0x0100 /* DebugBreak Group */ |
116 | 116 | ||
117 | extern int __init gcmp_probe(unsigned long, unsigned long); | ||
118 | |||
117 | #endif /* _ASM_GCMPREGS_H */ | 119 | #endif /* _ASM_GCMPREGS_H */ |
diff --git a/arch/mips/include/asm/gic.h b/arch/mips/include/asm/gic.h index 954807d9d66a..10292e37c1f7 100644 --- a/arch/mips/include/asm/gic.h +++ b/arch/mips/include/asm/gic.h | |||
@@ -20,7 +20,11 @@ | |||
20 | #define GIC_TRIG_EDGE 1 | 20 | #define GIC_TRIG_EDGE 1 |
21 | #define GIC_TRIG_LEVEL 0 | 21 | #define GIC_TRIG_LEVEL 0 |
22 | 22 | ||
23 | #if CONFIG_SMP | ||
24 | #define GIC_NUM_INTRS (24 + NR_CPUS * 2) | ||
25 | #else | ||
23 | #define GIC_NUM_INTRS 32 | 26 | #define GIC_NUM_INTRS 32 |
27 | #endif | ||
24 | 28 | ||
25 | #define MSK(n) ((1 << (n)) - 1) | 29 | #define MSK(n) ((1 << (n)) - 1) |
26 | #define REG32(addr) (*(volatile unsigned int *) (addr)) | 30 | #define REG32(addr) (*(volatile unsigned int *) (addr)) |
@@ -483,5 +487,7 @@ extern void gic_init(unsigned long gic_base_addr, | |||
483 | 487 | ||
484 | extern unsigned int gic_get_int(void); | 488 | extern unsigned int gic_get_int(void); |
485 | extern void gic_send_ipi(unsigned int intr); | 489 | extern void gic_send_ipi(unsigned int intr); |
490 | extern unsigned int plat_ipi_call_int_xlate(unsigned int); | ||
491 | extern unsigned int plat_ipi_resched_int_xlate(unsigned int); | ||
486 | 492 | ||
487 | #endif /* _ASM_GICREGS_H */ | 493 | #endif /* _ASM_GICREGS_H */ |
diff --git a/arch/mips/include/asm/irq.h b/arch/mips/include/asm/irq.h index 4f1eed107b08..09b08d05ff72 100644 --- a/arch/mips/include/asm/irq.h +++ b/arch/mips/include/asm/irq.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #define _ASM_IRQ_H | 10 | #define _ASM_IRQ_H |
11 | 11 | ||
12 | #include <linux/linkage.h> | 12 | #include <linux/linkage.h> |
13 | #include <linux/smp.h> | ||
13 | 14 | ||
14 | #include <asm/mipsmtregs.h> | 15 | #include <asm/mipsmtregs.h> |
15 | 16 | ||
diff --git a/arch/mips/include/asm/irq_gt641xx.h b/arch/mips/include/asm/irq_gt641xx.h index f9a7c3ac2e66..250a2407b599 100644 --- a/arch/mips/include/asm/irq_gt641xx.h +++ b/arch/mips/include/asm/irq_gt641xx.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Galileo/Marvell GT641xx IRQ definitions. | 2 | * Galileo/Marvell GT641xx IRQ definitions. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/include/asm/mach-ar7/ar7.h b/arch/mips/include/asm/mach-ar7/ar7.h new file mode 100644 index 000000000000..de71694614de --- /dev/null +++ b/arch/mips/include/asm/mach-ar7/ar7.h | |||
@@ -0,0 +1,178 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org> | ||
3 | * Copyright (C) 2006,2007 Eugene Konev <ejka@openwrt.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | */ | ||
19 | |||
20 | #ifndef __AR7_H__ | ||
21 | #define __AR7_H__ | ||
22 | |||
23 | #include <linux/delay.h> | ||
24 | #include <linux/io.h> | ||
25 | #include <linux/errno.h> | ||
26 | |||
27 | #include <asm/addrspace.h> | ||
28 | |||
29 | #define AR7_SDRAM_BASE 0x14000000 | ||
30 | |||
31 | #define AR7_REGS_BASE 0x08610000 | ||
32 | |||
33 | #define AR7_REGS_MAC0 (AR7_REGS_BASE + 0x0000) | ||
34 | #define AR7_REGS_GPIO (AR7_REGS_BASE + 0x0900) | ||
35 | /* 0x08610A00 - 0x08610BFF (512 bytes, 128 bytes / clock) */ | ||
36 | #define AR7_REGS_POWER (AR7_REGS_BASE + 0x0a00) | ||
37 | #define AR7_REGS_CLOCKS (AR7_REGS_POWER + 0x80) | ||
38 | #define UR8_REGS_CLOCKS (AR7_REGS_POWER + 0x20) | ||
39 | #define AR7_REGS_UART0 (AR7_REGS_BASE + 0x0e00) | ||
40 | #define AR7_REGS_USB (AR7_REGS_BASE + 0x1200) | ||
41 | #define AR7_REGS_RESET (AR7_REGS_BASE + 0x1600) | ||
42 | #define AR7_REGS_VLYNQ0 (AR7_REGS_BASE + 0x1800) | ||
43 | #define AR7_REGS_DCL (AR7_REGS_BASE + 0x1a00) | ||
44 | #define AR7_REGS_VLYNQ1 (AR7_REGS_BASE + 0x1c00) | ||
45 | #define AR7_REGS_MDIO (AR7_REGS_BASE + 0x1e00) | ||
46 | #define AR7_REGS_IRQ (AR7_REGS_BASE + 0x2400) | ||
47 | #define AR7_REGS_MAC1 (AR7_REGS_BASE + 0x2800) | ||
48 | |||
49 | #define AR7_REGS_WDT (AR7_REGS_BASE + 0x1f00) | ||
50 | #define UR8_REGS_WDT (AR7_REGS_BASE + 0x0b00) | ||
51 | #define UR8_REGS_UART1 (AR7_REGS_BASE + 0x0f00) | ||
52 | |||
53 | #define AR7_RESET_PEREPHERIAL 0x0 | ||
54 | #define AR7_RESET_SOFTWARE 0x4 | ||
55 | #define AR7_RESET_STATUS 0x8 | ||
56 | |||
57 | #define AR7_RESET_BIT_CPMAC_LO 17 | ||
58 | #define AR7_RESET_BIT_CPMAC_HI 21 | ||
59 | #define AR7_RESET_BIT_MDIO 22 | ||
60 | #define AR7_RESET_BIT_EPHY 26 | ||
61 | |||
62 | /* GPIO control registers */ | ||
63 | #define AR7_GPIO_INPUT 0x0 | ||
64 | #define AR7_GPIO_OUTPUT 0x4 | ||
65 | #define AR7_GPIO_DIR 0x8 | ||
66 | #define AR7_GPIO_ENABLE 0xc | ||
67 | |||
68 | #define AR7_CHIP_7100 0x18 | ||
69 | #define AR7_CHIP_7200 0x2b | ||
70 | #define AR7_CHIP_7300 0x05 | ||
71 | |||
72 | /* Interrupts */ | ||
73 | #define AR7_IRQ_UART0 15 | ||
74 | #define AR7_IRQ_UART1 16 | ||
75 | |||
76 | /* Clocks */ | ||
77 | #define AR7_AFE_CLOCK 35328000 | ||
78 | #define AR7_REF_CLOCK 25000000 | ||
79 | #define AR7_XTAL_CLOCK 24000000 | ||
80 | |||
81 | struct plat_cpmac_data { | ||
82 | int reset_bit; | ||
83 | int power_bit; | ||
84 | u32 phy_mask; | ||
85 | char dev_addr[6]; | ||
86 | }; | ||
87 | |||
88 | struct plat_dsl_data { | ||
89 | int reset_bit_dsl; | ||
90 | int reset_bit_sar; | ||
91 | }; | ||
92 | |||
93 | extern int ar7_cpu_clock, ar7_bus_clock, ar7_dsp_clock; | ||
94 | |||
95 | static inline u16 ar7_chip_id(void) | ||
96 | { | ||
97 | return readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x14)) & 0xffff; | ||
98 | } | ||
99 | |||
100 | static inline u8 ar7_chip_rev(void) | ||
101 | { | ||
102 | return (readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x14)) >> 16) & 0xff; | ||
103 | } | ||
104 | |||
105 | static inline int ar7_cpu_freq(void) | ||
106 | { | ||
107 | return ar7_cpu_clock; | ||
108 | } | ||
109 | |||
110 | static inline int ar7_bus_freq(void) | ||
111 | { | ||
112 | return ar7_bus_clock; | ||
113 | } | ||
114 | |||
115 | static inline int ar7_vbus_freq(void) | ||
116 | { | ||
117 | return ar7_bus_clock / 2; | ||
118 | } | ||
119 | #define ar7_cpmac_freq ar7_vbus_freq | ||
120 | |||
121 | static inline int ar7_dsp_freq(void) | ||
122 | { | ||
123 | return ar7_dsp_clock; | ||
124 | } | ||
125 | |||
126 | static inline int ar7_has_high_cpmac(void) | ||
127 | { | ||
128 | u16 chip_id = ar7_chip_id(); | ||
129 | switch (chip_id) { | ||
130 | case AR7_CHIP_7100: | ||
131 | case AR7_CHIP_7200: | ||
132 | return 0; | ||
133 | case AR7_CHIP_7300: | ||
134 | return 1; | ||
135 | default: | ||
136 | return -ENXIO; | ||
137 | } | ||
138 | } | ||
139 | #define ar7_has_high_vlynq ar7_has_high_cpmac | ||
140 | #define ar7_has_second_uart ar7_has_high_cpmac | ||
141 | |||
142 | static inline void ar7_device_enable(u32 bit) | ||
143 | { | ||
144 | void *reset_reg = | ||
145 | (void *)KSEG1ADDR(AR7_REGS_RESET + AR7_RESET_PEREPHERIAL); | ||
146 | writel(readl(reset_reg) | (1 << bit), reset_reg); | ||
147 | msleep(20); | ||
148 | } | ||
149 | |||
150 | static inline void ar7_device_disable(u32 bit) | ||
151 | { | ||
152 | void *reset_reg = | ||
153 | (void *)KSEG1ADDR(AR7_REGS_RESET + AR7_RESET_PEREPHERIAL); | ||
154 | writel(readl(reset_reg) & ~(1 << bit), reset_reg); | ||
155 | msleep(20); | ||
156 | } | ||
157 | |||
158 | static inline void ar7_device_reset(u32 bit) | ||
159 | { | ||
160 | ar7_device_disable(bit); | ||
161 | ar7_device_enable(bit); | ||
162 | } | ||
163 | |||
164 | static inline void ar7_device_on(u32 bit) | ||
165 | { | ||
166 | void *power_reg = (void *)KSEG1ADDR(AR7_REGS_POWER); | ||
167 | writel(readl(power_reg) | (1 << bit), power_reg); | ||
168 | msleep(20); | ||
169 | } | ||
170 | |||
171 | static inline void ar7_device_off(u32 bit) | ||
172 | { | ||
173 | void *power_reg = (void *)KSEG1ADDR(AR7_REGS_POWER); | ||
174 | writel(readl(power_reg) & ~(1 << bit), power_reg); | ||
175 | msleep(20); | ||
176 | } | ||
177 | |||
178 | #endif /* __AR7_H__ */ | ||
diff --git a/arch/mips/include/asm/mach-ar7/gpio.h b/arch/mips/include/asm/mach-ar7/gpio.h new file mode 100644 index 000000000000..cbe9c4f126df --- /dev/null +++ b/arch/mips/include/asm/mach-ar7/gpio.h | |||
@@ -0,0 +1,110 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007 Florian Fainelli <florian@openwrt.org> | ||
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 as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
17 | */ | ||
18 | |||
19 | #ifndef __AR7_GPIO_H__ | ||
20 | #define __AR7_GPIO_H__ | ||
21 | |||
22 | #include <asm/mach-ar7/ar7.h> | ||
23 | |||
24 | #define AR7_GPIO_MAX 32 | ||
25 | |||
26 | extern int gpio_request(unsigned gpio, const char *label); | ||
27 | extern void gpio_free(unsigned gpio); | ||
28 | |||
29 | /* Common GPIO layer */ | ||
30 | static inline int gpio_get_value(unsigned gpio) | ||
31 | { | ||
32 | void __iomem *gpio_in = | ||
33 | (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_INPUT); | ||
34 | |||
35 | return readl(gpio_in) & (1 << gpio); | ||
36 | } | ||
37 | |||
38 | static inline void gpio_set_value(unsigned gpio, int value) | ||
39 | { | ||
40 | void __iomem *gpio_out = | ||
41 | (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_OUTPUT); | ||
42 | unsigned tmp; | ||
43 | |||
44 | tmp = readl(gpio_out) & ~(1 << gpio); | ||
45 | if (value) | ||
46 | tmp |= 1 << gpio; | ||
47 | writel(tmp, gpio_out); | ||
48 | } | ||
49 | |||
50 | static inline int gpio_direction_input(unsigned gpio) | ||
51 | { | ||
52 | void __iomem *gpio_dir = | ||
53 | (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_DIR); | ||
54 | |||
55 | if (gpio >= AR7_GPIO_MAX) | ||
56 | return -EINVAL; | ||
57 | |||
58 | writel(readl(gpio_dir) | (1 << gpio), gpio_dir); | ||
59 | |||
60 | return 0; | ||
61 | } | ||
62 | |||
63 | static inline int gpio_direction_output(unsigned gpio, int value) | ||
64 | { | ||
65 | void __iomem *gpio_dir = | ||
66 | (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_DIR); | ||
67 | |||
68 | if (gpio >= AR7_GPIO_MAX) | ||
69 | return -EINVAL; | ||
70 | |||
71 | gpio_set_value(gpio, value); | ||
72 | writel(readl(gpio_dir) & ~(1 << gpio), gpio_dir); | ||
73 | |||
74 | return 0; | ||
75 | } | ||
76 | |||
77 | static inline int gpio_to_irq(unsigned gpio) | ||
78 | { | ||
79 | return -EINVAL; | ||
80 | } | ||
81 | |||
82 | static inline int irq_to_gpio(unsigned irq) | ||
83 | { | ||
84 | return -EINVAL; | ||
85 | } | ||
86 | |||
87 | /* Board specific GPIO functions */ | ||
88 | static inline int ar7_gpio_enable(unsigned gpio) | ||
89 | { | ||
90 | void __iomem *gpio_en = | ||
91 | (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_ENABLE); | ||
92 | |||
93 | writel(readl(gpio_en) | (1 << gpio), gpio_en); | ||
94 | |||
95 | return 0; | ||
96 | } | ||
97 | |||
98 | static inline int ar7_gpio_disable(unsigned gpio) | ||
99 | { | ||
100 | void __iomem *gpio_en = | ||
101 | (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_ENABLE); | ||
102 | |||
103 | writel(readl(gpio_en) & ~(1 << gpio), gpio_en); | ||
104 | |||
105 | return 0; | ||
106 | } | ||
107 | |||
108 | #include <asm-generic/gpio.h> | ||
109 | |||
110 | #endif | ||
diff --git a/arch/mips/include/asm/mach-ar7/irq.h b/arch/mips/include/asm/mach-ar7/irq.h new file mode 100644 index 000000000000..39e9757e3d93 --- /dev/null +++ b/arch/mips/include/asm/mach-ar7/irq.h | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Shamelessly copied from asm-mips/mach-emma2rh/ | ||
7 | * Copyright (C) 2003 by Ralf Baechle | ||
8 | */ | ||
9 | #ifndef __ASM_AR7_IRQ_H | ||
10 | #define __ASM_AR7_IRQ_H | ||
11 | |||
12 | #define NR_IRQS 256 | ||
13 | |||
14 | #include_next <irq.h> | ||
15 | |||
16 | #endif /* __ASM_AR7_IRQ_H */ | ||
diff --git a/arch/mips/include/asm/mach-ar7/prom.h b/arch/mips/include/asm/mach-ar7/prom.h new file mode 100644 index 000000000000..088f61fe85ea --- /dev/null +++ b/arch/mips/include/asm/mach-ar7/prom.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006, 2007 Florian Fainelli <florian@openwrt.org> | ||
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 as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
17 | */ | ||
18 | |||
19 | #ifndef __PROM_H__ | ||
20 | #define __PROM_H__ | ||
21 | |||
22 | extern char *prom_getenv(const char *name); | ||
23 | extern void prom_meminit(void); | ||
24 | |||
25 | #endif /* __PROM_H__ */ | ||
diff --git a/arch/mips/include/asm/mach-ar7/spaces.h b/arch/mips/include/asm/mach-ar7/spaces.h new file mode 100644 index 000000000000..ac28f273449c --- /dev/null +++ b/arch/mips/include/asm/mach-ar7/spaces.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 1994 - 1999, 2000, 03, 04 Ralf Baechle | ||
7 | * Copyright (C) 2000, 2002 Maciej W. Rozycki | ||
8 | * Copyright (C) 1990, 1999, 2000 Silicon Graphics, Inc. | ||
9 | */ | ||
10 | #ifndef _ASM_AR7_SPACES_H | ||
11 | #define _ASM_AR7_SPACES_H | ||
12 | |||
13 | /* | ||
14 | * This handles the memory map. | ||
15 | * We handle pages at KSEG0 for kernels with 32 bit address space. | ||
16 | */ | ||
17 | #define PAGE_OFFSET 0x94000000UL | ||
18 | #define PHYS_OFFSET 0x14000000UL | ||
19 | |||
20 | #include <asm/mach-generic/spaces.h> | ||
21 | |||
22 | #endif /* __ASM_AR7_SPACES_H */ | ||
diff --git a/arch/mips/include/asm/mach-ar7/war.h b/arch/mips/include/asm/mach-ar7/war.h new file mode 100644 index 000000000000..f4862b563080 --- /dev/null +++ b/arch/mips/include/asm/mach-ar7/war.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org> | ||
7 | */ | ||
8 | #ifndef __ASM_MIPS_MACH_AR7_WAR_H | ||
9 | #define __ASM_MIPS_MACH_AR7_WAR_H | ||
10 | |||
11 | #define R4600_V1_INDEX_ICACHEOP_WAR 0 | ||
12 | #define R4600_V1_HIT_CACHEOP_WAR 0 | ||
13 | #define R4600_V2_HIT_CACHEOP_WAR 0 | ||
14 | #define R5432_CP0_INTERRUPT_WAR 0 | ||
15 | #define BCM1250_M3_WAR 0 | ||
16 | #define SIBYTE_1956_WAR 0 | ||
17 | #define MIPS4K_ICACHE_REFILL_WAR 0 | ||
18 | #define MIPS_CACHE_SYNC_WAR 0 | ||
19 | #define TX49XX_ICACHE_INDEX_INV_WAR 0 | ||
20 | #define RM9000_CDEX_SMP_WAR 0 | ||
21 | #define ICACHE_REFILLS_WORKAROUND_WAR 0 | ||
22 | #define R10000_LLSC_WAR 0 | ||
23 | #define MIPS34K_MISSED_ITLB_WAR 0 | ||
24 | |||
25 | #endif /* __ASM_MIPS_MACH_AR7_WAR_H */ | ||
diff --git a/arch/mips/include/asm/mach-cobalt/irq.h b/arch/mips/include/asm/mach-cobalt/irq.h index 57c8c9ac5851..9da9acf5dcba 100644 --- a/arch/mips/include/asm/mach-cobalt/irq.h +++ b/arch/mips/include/asm/mach-cobalt/irq.h | |||
@@ -8,7 +8,7 @@ | |||
8 | * Copyright (C) 1997 Cobalt Microserver | 8 | * Copyright (C) 1997 Cobalt Microserver |
9 | * Copyright (C) 1997, 2003 Ralf Baechle | 9 | * Copyright (C) 1997, 2003 Ralf Baechle |
10 | * Copyright (C) 2001-2003 Liam Davies (ldavies@agile.tv) | 10 | * Copyright (C) 2001-2003 Liam Davies (ldavies@agile.tv) |
11 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 11 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
12 | */ | 12 | */ |
13 | #ifndef _ASM_COBALT_IRQ_H | 13 | #ifndef _ASM_COBALT_IRQ_H |
14 | #define _ASM_COBALT_IRQ_H | 14 | #define _ASM_COBALT_IRQ_H |
diff --git a/arch/mips/include/asm/mach-cobalt/mach-gt64120.h b/arch/mips/include/asm/mach-cobalt/mach-gt64120.h index ae9c5523c7ef..f8afec3f2943 100644 --- a/arch/mips/include/asm/mach-cobalt/mach-gt64120.h +++ b/arch/mips/include/asm/mach-cobalt/mach-gt64120.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 2 | * Copyright (C) 2006 Yoichi Yuasa <yuasa@linux-mips.org> |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify | 4 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU General Public License as published by | 5 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/include/asm/mmu_context.h b/arch/mips/include/asm/mmu_context.h index d7f3eb03ad12..d3bea88d8744 100644 --- a/arch/mips/include/asm/mmu_context.h +++ b/arch/mips/include/asm/mmu_context.h | |||
@@ -13,6 +13,7 @@ | |||
13 | 13 | ||
14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
16 | #include <linux/smp.h> | ||
16 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
17 | #include <asm/cacheflush.h> | 18 | #include <asm/cacheflush.h> |
18 | #include <asm/tlbflush.h> | 19 | #include <asm/tlbflush.h> |
diff --git a/arch/mips/cavium-octeon/pci-common.h b/arch/mips/include/asm/octeon/pci-octeon.h index 74ae79991e45..6ac5d3e3398e 100644 --- a/arch/mips/cavium-octeon/pci-common.h +++ b/arch/mips/include/asm/octeon/pci-octeon.h | |||
@@ -3,23 +3,29 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2005-2007 Cavium Networks | 6 | * Copyright (C) 2005-2009 Cavium Networks |
7 | */ | 7 | */ |
8 | #ifndef __OCTEON_PCI_COMMON_H__ | 8 | |
9 | #define __OCTEON_PCI_COMMON_H__ | 9 | #ifndef __PCI_OCTEON_H__ |
10 | #define __PCI_OCTEON_H__ | ||
10 | 11 | ||
11 | #include <linux/pci.h> | 12 | #include <linux/pci.h> |
12 | 13 | ||
13 | /* Some PCI cards require delays when accessing config space. */ | 14 | /* Some PCI cards require delays when accessing config space. */ |
14 | #define PCI_CONFIG_SPACE_DELAY 10000 | 15 | #define PCI_CONFIG_SPACE_DELAY 10000 |
15 | 16 | ||
16 | /* pcibios_map_irq() is defined inside pci-common.c. All it does is call the | 17 | /* |
17 | Octeon specific version pointed to by this variable. This function needs to | 18 | * pcibios_map_irq() is defined inside pci-octeon.c. All it does is |
18 | change for PCI or PCIe based hosts */ | 19 | * call the Octeon specific version pointed to by this variable. This |
19 | extern typeof(pcibios_map_irq) *octeon_pcibios_map_irq; | 20 | * function needs to change for PCI or PCIe based hosts. |
21 | */ | ||
22 | extern int (*octeon_pcibios_map_irq)(const struct pci_dev *dev, | ||
23 | u8 slot, u8 pin); | ||
20 | 24 | ||
21 | /* The following defines are only used when octeon_dma_bar_type = | 25 | /* |
22 | OCTEON_DMA_BAR_TYPE_BIG */ | 26 | * The following defines are used when octeon_dma_bar_type = |
27 | * OCTEON_DMA_BAR_TYPE_BIG | ||
28 | */ | ||
23 | #define OCTEON_PCI_BAR1_HOLE_BITS 5 | 29 | #define OCTEON_PCI_BAR1_HOLE_BITS 5 |
24 | #define OCTEON_PCI_BAR1_HOLE_SIZE (1ul<<(OCTEON_PCI_BAR1_HOLE_BITS+3)) | 30 | #define OCTEON_PCI_BAR1_HOLE_SIZE (1ul<<(OCTEON_PCI_BAR1_HOLE_BITS+3)) |
25 | 31 | ||
@@ -30,9 +36,9 @@ enum octeon_dma_bar_type { | |||
30 | OCTEON_DMA_BAR_TYPE_PCIE | 36 | OCTEON_DMA_BAR_TYPE_PCIE |
31 | }; | 37 | }; |
32 | 38 | ||
33 | /** | 39 | /* |
34 | * This is a variable to tell the DMA mapping system in dma-octeon.c | 40 | * This tells the DMA mapping system in dma-octeon.c how to map PCI |
35 | * how to map PCI DMA addresses. | 41 | * DMA addresses. |
36 | */ | 42 | */ |
37 | extern enum octeon_dma_bar_type octeon_dma_bar_type; | 43 | extern enum octeon_dma_bar_type octeon_dma_bar_type; |
38 | 44 | ||
diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h index dc0eaa731281..96a14a426a7c 100644 --- a/arch/mips/include/asm/page.h +++ b/arch/mips/include/asm/page.h | |||
@@ -165,7 +165,14 @@ typedef struct { unsigned long pgprot; } pgprot_t; | |||
165 | 165 | ||
166 | #ifdef CONFIG_FLATMEM | 166 | #ifdef CONFIG_FLATMEM |
167 | 167 | ||
168 | #define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < max_mapnr) | 168 | #define pfn_valid(pfn) \ |
169 | ({ \ | ||
170 | unsigned long __pfn = (pfn); \ | ||
171 | /* avoid <linux/bootmem.h> include hell */ \ | ||
172 | extern unsigned long min_low_pfn; \ | ||
173 | \ | ||
174 | __pfn >= min_low_pfn && __pfn < max_mapnr; \ | ||
175 | }) | ||
169 | 176 | ||
170 | #elif defined(CONFIG_SPARSEMEM) | 177 | #elif defined(CONFIG_SPARSEMEM) |
171 | 178 | ||
diff --git a/arch/mips/include/asm/reg.h b/arch/mips/include/asm/reg.h index 634b55d7e7f6..910e71a12466 100644 --- a/arch/mips/include/asm/reg.h +++ b/arch/mips/include/asm/reg.h | |||
@@ -69,7 +69,7 @@ | |||
69 | 69 | ||
70 | #endif | 70 | #endif |
71 | 71 | ||
72 | #ifdef CONFIG_64BIT | 72 | #if defined(CONFIG_64BIT) && !defined(WANT_COMPAT_REG_H) |
73 | 73 | ||
74 | #define EF_R0 0 | 74 | #define EF_R0 0 |
75 | #define EF_R1 1 | 75 | #define EF_R1 1 |
diff --git a/arch/mips/include/asm/smp-ops.h b/arch/mips/include/asm/smp-ops.h index 64ffc0290b84..fd545547b8aa 100644 --- a/arch/mips/include/asm/smp-ops.h +++ b/arch/mips/include/asm/smp-ops.h | |||
@@ -26,6 +26,10 @@ struct plat_smp_ops { | |||
26 | void (*boot_secondary)(int cpu, struct task_struct *idle); | 26 | void (*boot_secondary)(int cpu, struct task_struct *idle); |
27 | void (*smp_setup)(void); | 27 | void (*smp_setup)(void); |
28 | void (*prepare_cpus)(unsigned int max_cpus); | 28 | void (*prepare_cpus)(unsigned int max_cpus); |
29 | #ifdef CONFIG_HOTPLUG_CPU | ||
30 | int (*cpu_disable)(void); | ||
31 | void (*cpu_die)(unsigned int cpu); | ||
32 | #endif | ||
29 | }; | 33 | }; |
30 | 34 | ||
31 | extern void register_smp_ops(struct plat_smp_ops *ops); | 35 | extern void register_smp_ops(struct plat_smp_ops *ops); |
diff --git a/arch/mips/include/asm/smp.h b/arch/mips/include/asm/smp.h index 40e5ef1d4d26..aaa2d4ab26dc 100644 --- a/arch/mips/include/asm/smp.h +++ b/arch/mips/include/asm/smp.h | |||
@@ -13,6 +13,7 @@ | |||
13 | 13 | ||
14 | #include <linux/bitops.h> | 14 | #include <linux/bitops.h> |
15 | #include <linux/linkage.h> | 15 | #include <linux/linkage.h> |
16 | #include <linux/smp.h> | ||
16 | #include <linux/threads.h> | 17 | #include <linux/threads.h> |
17 | #include <linux/cpumask.h> | 18 | #include <linux/cpumask.h> |
18 | 19 | ||
@@ -40,6 +41,7 @@ extern int __cpu_logical_map[NR_CPUS]; | |||
40 | /* Octeon - Tell another core to flush its icache */ | 41 | /* Octeon - Tell another core to flush its icache */ |
41 | #define SMP_ICACHE_FLUSH 0x4 | 42 | #define SMP_ICACHE_FLUSH 0x4 |
42 | 43 | ||
44 | extern volatile cpumask_t cpu_callin_map; | ||
43 | 45 | ||
44 | extern void asmlinkage smp_bootstrap(void); | 46 | extern void asmlinkage smp_bootstrap(void); |
45 | 47 | ||
@@ -55,6 +57,24 @@ static inline void smp_send_reschedule(int cpu) | |||
55 | mp_ops->send_ipi_single(cpu, SMP_RESCHEDULE_YOURSELF); | 57 | mp_ops->send_ipi_single(cpu, SMP_RESCHEDULE_YOURSELF); |
56 | } | 58 | } |
57 | 59 | ||
60 | #ifdef CONFIG_HOTPLUG_CPU | ||
61 | static inline int __cpu_disable(void) | ||
62 | { | ||
63 | extern struct plat_smp_ops *mp_ops; /* private */ | ||
64 | |||
65 | return mp_ops->cpu_disable(); | ||
66 | } | ||
67 | |||
68 | static inline void __cpu_die(unsigned int cpu) | ||
69 | { | ||
70 | extern struct plat_smp_ops *mp_ops; /* private */ | ||
71 | |||
72 | mp_ops->cpu_die(cpu); | ||
73 | } | ||
74 | |||
75 | extern void play_dead(void); | ||
76 | #endif | ||
77 | |||
58 | extern asmlinkage void smp_call_function_interrupt(void); | 78 | extern asmlinkage void smp_call_function_interrupt(void); |
59 | 79 | ||
60 | extern void arch_send_call_function_single_ipi(int cpu); | 80 | extern void arch_send_call_function_single_ipi(int cpu); |
diff --git a/arch/mips/include/asm/sn/addrs.h b/arch/mips/include/asm/sn/addrs.h index 3a56d90abfa6..2367b56dcdef 100644 --- a/arch/mips/include/asm/sn/addrs.h +++ b/arch/mips/include/asm/sn/addrs.h | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | 12 | ||
13 | #ifndef __ASSEMBLY__ | 13 | #ifndef __ASSEMBLY__ |
14 | #include <linux/smp.h> | ||
14 | #include <linux/types.h> | 15 | #include <linux/types.h> |
15 | #endif /* !__ASSEMBLY__ */ | 16 | #endif /* !__ASSEMBLY__ */ |
16 | 17 | ||
diff --git a/arch/mips/include/asm/swab.h b/arch/mips/include/asm/swab.h index 99993c0d6c12..97c2f81b4b43 100644 --- a/arch/mips/include/asm/swab.h +++ b/arch/mips/include/asm/swab.h | |||
@@ -38,7 +38,11 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x) | |||
38 | } | 38 | } |
39 | #define __arch_swab32 __arch_swab32 | 39 | #define __arch_swab32 __arch_swab32 |
40 | 40 | ||
41 | #ifdef CONFIG_CPU_MIPS64_R2 | 41 | /* |
42 | * Having already checked for CONFIG_CPU_MIPSR2, enable the | ||
43 | * optimized version for 64-bit kernel on r2 CPUs. | ||
44 | */ | ||
45 | #ifdef CONFIG_64BIT | ||
42 | static inline __attribute_const__ __u64 __arch_swab64(__u64 x) | 46 | static inline __attribute_const__ __u64 __arch_swab64(__u64 x) |
43 | { | 47 | { |
44 | __asm__( | 48 | __asm__( |
@@ -50,6 +54,6 @@ static inline __attribute_const__ __u64 __arch_swab64(__u64 x) | |||
50 | return x; | 54 | return x; |
51 | } | 55 | } |
52 | #define __arch_swab64 __arch_swab64 | 56 | #define __arch_swab64 __arch_swab64 |
53 | #endif /* CONFIG_CPU_MIPS64_R2 */ | 57 | #endif /* CONFIG_64BIT */ |
54 | #endif /* CONFIG_CPU_MIPSR2 */ | 58 | #endif /* CONFIG_CPU_MIPSR2 */ |
55 | #endif /* _ASM_SWAB_H */ | 59 | #endif /* _ASM_SWAB_H */ |
diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h index 143a48136a4b..f9df720d2e40 100644 --- a/arch/mips/include/asm/thread_info.h +++ b/arch/mips/include/asm/thread_info.h | |||
@@ -39,8 +39,6 @@ struct thread_info { | |||
39 | 39 | ||
40 | /* | 40 | /* |
41 | * macros/functions for gaining access to the thread information structure | 41 | * macros/functions for gaining access to the thread information structure |
42 | * | ||
43 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
44 | */ | 42 | */ |
45 | #define INIT_THREAD_INFO(tsk) \ | 43 | #define INIT_THREAD_INFO(tsk) \ |
46 | { \ | 44 | { \ |
@@ -48,7 +46,7 @@ struct thread_info { | |||
48 | .exec_domain = &default_exec_domain, \ | 46 | .exec_domain = &default_exec_domain, \ |
49 | .flags = _TIF_FIXADE, \ | 47 | .flags = _TIF_FIXADE, \ |
50 | .cpu = 0, \ | 48 | .cpu = 0, \ |
51 | .preempt_count = 1, \ | 49 | .preempt_count = INIT_PREEMPT_COUNT, \ |
52 | .addr_limit = KERNEL_DS, \ | 50 | .addr_limit = KERNEL_DS, \ |
53 | .restart_block = { \ | 51 | .restart_block = { \ |
54 | .fn = do_no_restart_syscall, \ | 52 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/mips/include/asm/unistd.h b/arch/mips/include/asm/unistd.h index 40005010827c..b70c49fdda26 100644 --- a/arch/mips/include/asm/unistd.h +++ b/arch/mips/include/asm/unistd.h | |||
@@ -352,16 +352,18 @@ | |||
352 | #define __NR_inotify_init1 (__NR_Linux + 329) | 352 | #define __NR_inotify_init1 (__NR_Linux + 329) |
353 | #define __NR_preadv (__NR_Linux + 330) | 353 | #define __NR_preadv (__NR_Linux + 330) |
354 | #define __NR_pwritev (__NR_Linux + 331) | 354 | #define __NR_pwritev (__NR_Linux + 331) |
355 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 332) | ||
356 | #define __NR_perf_counter_open (__NR_Linux + 333) | ||
355 | 357 | ||
356 | /* | 358 | /* |
357 | * Offset of the last Linux o32 flavoured syscall | 359 | * Offset of the last Linux o32 flavoured syscall |
358 | */ | 360 | */ |
359 | #define __NR_Linux_syscalls 331 | 361 | #define __NR_Linux_syscalls 333 |
360 | 362 | ||
361 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ | 363 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ |
362 | 364 | ||
363 | #define __NR_O32_Linux 4000 | 365 | #define __NR_O32_Linux 4000 |
364 | #define __NR_O32_Linux_syscalls 331 | 366 | #define __NR_O32_Linux_syscalls 333 |
365 | 367 | ||
366 | #if _MIPS_SIM == _MIPS_SIM_ABI64 | 368 | #if _MIPS_SIM == _MIPS_SIM_ABI64 |
367 | 369 | ||
@@ -660,16 +662,18 @@ | |||
660 | #define __NR_inotify_init1 (__NR_Linux + 288) | 662 | #define __NR_inotify_init1 (__NR_Linux + 288) |
661 | #define __NR_preadv (__NR_Linux + 289) | 663 | #define __NR_preadv (__NR_Linux + 289) |
662 | #define __NR_pwritev (__NR_Linux + 290) | 664 | #define __NR_pwritev (__NR_Linux + 290) |
665 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 291) | ||
666 | #define __NR_perf_counter_open (__NR_Linux + 292) | ||
663 | 667 | ||
664 | /* | 668 | /* |
665 | * Offset of the last Linux 64-bit flavoured syscall | 669 | * Offset of the last Linux 64-bit flavoured syscall |
666 | */ | 670 | */ |
667 | #define __NR_Linux_syscalls 290 | 671 | #define __NR_Linux_syscalls 292 |
668 | 672 | ||
669 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ | 673 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ |
670 | 674 | ||
671 | #define __NR_64_Linux 5000 | 675 | #define __NR_64_Linux 5000 |
672 | #define __NR_64_Linux_syscalls 290 | 676 | #define __NR_64_Linux_syscalls 292 |
673 | 677 | ||
674 | #if _MIPS_SIM == _MIPS_SIM_NABI32 | 678 | #if _MIPS_SIM == _MIPS_SIM_NABI32 |
675 | 679 | ||
@@ -972,16 +976,18 @@ | |||
972 | #define __NR_inotify_init1 (__NR_Linux + 292) | 976 | #define __NR_inotify_init1 (__NR_Linux + 292) |
973 | #define __NR_preadv (__NR_Linux + 293) | 977 | #define __NR_preadv (__NR_Linux + 293) |
974 | #define __NR_pwritev (__NR_Linux + 294) | 978 | #define __NR_pwritev (__NR_Linux + 294) |
979 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 295) | ||
980 | #define __NR_perf_counter_open (__NR_Linux + 296) | ||
975 | 981 | ||
976 | /* | 982 | /* |
977 | * Offset of the last N32 flavoured syscall | 983 | * Offset of the last N32 flavoured syscall |
978 | */ | 984 | */ |
979 | #define __NR_Linux_syscalls 294 | 985 | #define __NR_Linux_syscalls 296 |
980 | 986 | ||
981 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ | 987 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ |
982 | 988 | ||
983 | #define __NR_N32_Linux 6000 | 989 | #define __NR_N32_Linux 6000 |
984 | #define __NR_N32_Linux_syscalls 294 | 990 | #define __NR_N32_Linux_syscalls 296 |
985 | 991 | ||
986 | #ifdef __KERNEL__ | 992 | #ifdef __KERNEL__ |
987 | 993 | ||
diff --git a/arch/mips/include/asm/vr41xx/capcella.h b/arch/mips/include/asm/vr41xx/capcella.h index e0ee05a3dfcc..fcc6569414fa 100644 --- a/arch/mips/include/asm/vr41xx/capcella.h +++ b/arch/mips/include/asm/vr41xx/capcella.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * capcella.h, Include file for ZAO Networks Capcella. | 2 | * capcella.h, Include file for ZAO Networks Capcella. |
3 | * | 3 | * |
4 | * Copyright (C) 2002-2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2002-2004 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/include/asm/vr41xx/giu.h b/arch/mips/include/asm/vr41xx/giu.h index 0bcdd3a5c256..6a90bc1d916b 100644 --- a/arch/mips/include/asm/vr41xx/giu.h +++ b/arch/mips/include/asm/vr41xx/giu.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Include file for NEC VR4100 series General-purpose I/O Unit. | 2 | * Include file for NEC VR4100 series General-purpose I/O Unit. |
3 | * | 3 | * |
4 | * Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2005-2009 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
@@ -41,7 +41,8 @@ typedef enum { | |||
41 | IRQ_SIGNAL_HOLD, | 41 | IRQ_SIGNAL_HOLD, |
42 | } irq_signal_t; | 42 | } irq_signal_t; |
43 | 43 | ||
44 | extern void vr41xx_set_irq_trigger(unsigned int pin, irq_trigger_t trigger, irq_signal_t signal); | 44 | extern void vr41xx_set_irq_trigger(unsigned int pin, irq_trigger_t trigger, |
45 | irq_signal_t signal); | ||
45 | 46 | ||
46 | typedef enum { | 47 | typedef enum { |
47 | IRQ_LEVEL_LOW, | 48 | IRQ_LEVEL_LOW, |
@@ -51,23 +52,6 @@ typedef enum { | |||
51 | extern void vr41xx_set_irq_level(unsigned int pin, irq_level_t level); | 52 | extern void vr41xx_set_irq_level(unsigned int pin, irq_level_t level); |
52 | 53 | ||
53 | typedef enum { | 54 | typedef enum { |
54 | GPIO_DATA_LOW, | ||
55 | GPIO_DATA_HIGH, | ||
56 | GPIO_DATA_INVAL, | ||
57 | } gpio_data_t; | ||
58 | |||
59 | extern gpio_data_t vr41xx_gpio_get_pin(unsigned int pin); | ||
60 | extern int vr41xx_gpio_set_pin(unsigned int pin, gpio_data_t data); | ||
61 | |||
62 | typedef enum { | ||
63 | GPIO_INPUT, | ||
64 | GPIO_OUTPUT, | ||
65 | GPIO_OUTPUT_DISABLE, | ||
66 | } gpio_direction_t; | ||
67 | |||
68 | extern int vr41xx_gpio_set_direction(unsigned int pin, gpio_direction_t dir); | ||
69 | |||
70 | typedef enum { | ||
71 | GPIO_PULL_DOWN, | 55 | GPIO_PULL_DOWN, |
72 | GPIO_PULL_UP, | 56 | GPIO_PULL_UP, |
73 | GPIO_PULL_DISABLE, | 57 | GPIO_PULL_DISABLE, |
diff --git a/arch/mips/include/asm/vr41xx/irq.h b/arch/mips/include/asm/vr41xx/irq.h index d315dfbc08f2..b07f7321751d 100644 --- a/arch/mips/include/asm/vr41xx/irq.h +++ b/arch/mips/include/asm/vr41xx/irq.h | |||
@@ -7,7 +7,7 @@ | |||
7 | * Copyright (C) 2001, 2002 Paul Mundt | 7 | * Copyright (C) 2001, 2002 Paul Mundt |
8 | * Copyright (C) 2002 MontaVista Software, Inc. | 8 | * Copyright (C) 2002 MontaVista Software, Inc. |
9 | * Copyright (C) 2002 TimeSys Corp. | 9 | * Copyright (C) 2002 TimeSys Corp. |
10 | * Copyright (C) 2003-2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 10 | * Copyright (C) 2003-2006 Yoichi Yuasa <yuasa@linux-mips.org> |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or modify it | 12 | * This program is free software; you can redistribute it and/or modify it |
13 | * under the terms of the GNU General Public License as published by the | 13 | * under the terms of the GNU General Public License as published by the |
diff --git a/arch/mips/include/asm/vr41xx/mpc30x.h b/arch/mips/include/asm/vr41xx/mpc30x.h index 1d67df843dc3..130d09d8c8cb 100644 --- a/arch/mips/include/asm/vr41xx/mpc30x.h +++ b/arch/mips/include/asm/vr41xx/mpc30x.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * mpc30x.h, Include file for Victor MP-C303/304. | 2 | * mpc30x.h, Include file for Victor MP-C303/304. |
3 | * | 3 | * |
4 | * Copyright (C) 2002-2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2002-2004 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/include/asm/vr41xx/pci.h b/arch/mips/include/asm/vr41xx/pci.h index 6fc01ce19777..c231a3d6cfd8 100644 --- a/arch/mips/include/asm/vr41xx/pci.h +++ b/arch/mips/include/asm/vr41xx/pci.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Include file for NEC VR4100 series PCI Control Unit. | 2 | * Include file for NEC VR4100 series PCI Control Unit. |
3 | * | 3 | * |
4 | * Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/include/asm/vr41xx/siu.h b/arch/mips/include/asm/vr41xx/siu.h index da9f6e373409..ca806bc4ddc8 100644 --- a/arch/mips/include/asm/vr41xx/siu.h +++ b/arch/mips/include/asm/vr41xx/siu.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Include file for NEC VR4100 series Serial Interface Unit. | 2 | * Include file for NEC VR4100 series Serial Interface Unit. |
3 | * | 3 | * |
4 | * Copyright (C) 2005-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2005-2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/include/asm/vr41xx/tb0219.h b/arch/mips/include/asm/vr41xx/tb0219.h index dc981b4be0a4..c78e8243b447 100644 --- a/arch/mips/include/asm/vr41xx/tb0219.h +++ b/arch/mips/include/asm/vr41xx/tb0219.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * tb0219.h, Include file for TANBAC TB0219. | 2 | * tb0219.h, Include file for TANBAC TB0219. |
3 | * | 3 | * |
4 | * Copyright (C) 2002-2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2002-2004 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * Modified for TANBAC TB0219: | 6 | * Modified for TANBAC TB0219: |
7 | * Copyright (C) 2003 Megasolution Inc. <matsu@megasolution.jp> | 7 | * Copyright (C) 2003 Megasolution Inc. <matsu@megasolution.jp> |
diff --git a/arch/mips/include/asm/vr41xx/tb0226.h b/arch/mips/include/asm/vr41xx/tb0226.h index de527dcfa5f3..36f5f798e416 100644 --- a/arch/mips/include/asm/vr41xx/tb0226.h +++ b/arch/mips/include/asm/vr41xx/tb0226.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * tb0226.h, Include file for TANBAC TB0226. | 2 | * tb0226.h, Include file for TANBAC TB0226. |
3 | * | 3 | * |
4 | * Copyright (C) 2002-2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2002-2004 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/include/asm/vr41xx/vr41xx.h b/arch/mips/include/asm/vr41xx/vr41xx.h index 22be64971cc6..7b96a43b72ba 100644 --- a/arch/mips/include/asm/vr41xx/vr41xx.h +++ b/arch/mips/include/asm/vr41xx/vr41xx.h | |||
@@ -7,7 +7,7 @@ | |||
7 | * Copyright (C) 2001, 2002 Paul Mundt | 7 | * Copyright (C) 2001, 2002 Paul Mundt |
8 | * Copyright (C) 2002 MontaVista Software, Inc. | 8 | * Copyright (C) 2002 MontaVista Software, Inc. |
9 | * Copyright (C) 2002 TimeSys Corp. | 9 | * Copyright (C) 2002 TimeSys Corp. |
10 | * Copyright (C) 2003-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 10 | * Copyright (C) 2003-2008 Yoichi Yuasa <yuasa@linux-mips.org> |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or modify it | 12 | * This program is free software; you can redistribute it and/or modify it |
13 | * under the terms of the GNU General Public License as published by the | 13 | * under the terms of the GNU General Public License as published by the |
diff --git a/arch/mips/jazz/irq.c b/arch/mips/jazz/irq.c index d9b6a5b5399d..7fd170d007e7 100644 --- a/arch/mips/jazz/irq.c +++ b/arch/mips/jazz/irq.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | #include <linux/interrupt.h> | 11 | #include <linux/interrupt.h> |
12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
13 | #include <linux/smp.h> | ||
13 | #include <linux/spinlock.h> | 14 | #include <linux/spinlock.h> |
14 | 15 | ||
15 | #include <asm/irq_cpu.h> | 16 | #include <asm/irq_cpu.h> |
diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c index e1333d7319e2..ff448233dab5 100644 --- a/arch/mips/kernel/binfmt_elfo32.c +++ b/arch/mips/kernel/binfmt_elfo32.c | |||
@@ -53,6 +53,23 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | |||
53 | #define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2) | 53 | #define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2) |
54 | 54 | ||
55 | #include <asm/processor.h> | 55 | #include <asm/processor.h> |
56 | |||
57 | /* | ||
58 | * When this file is selected, we are definitely running a 64bit kernel. | ||
59 | * So using the right regs define in asm/reg.h | ||
60 | */ | ||
61 | #define WANT_COMPAT_REG_H | ||
62 | |||
63 | /* These MUST be defined before elf.h gets included */ | ||
64 | extern void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs); | ||
65 | #define ELF_CORE_COPY_REGS(_dest, _regs) elf32_core_copy_regs(_dest, _regs); | ||
66 | #define ELF_CORE_COPY_TASK_REGS(_tsk, _dest) \ | ||
67 | ({ \ | ||
68 | int __res = 1; \ | ||
69 | elf32_core_copy_regs(*(_dest), task_pt_regs(_tsk)); \ | ||
70 | __res; \ | ||
71 | }) | ||
72 | |||
56 | #include <linux/module.h> | 73 | #include <linux/module.h> |
57 | #include <linux/elfcore.h> | 74 | #include <linux/elfcore.h> |
58 | #include <linux/compat.h> | 75 | #include <linux/compat.h> |
@@ -110,9 +127,6 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value) | |||
110 | value->tv_usec = rem / NSEC_PER_USEC; | 127 | value->tv_usec = rem / NSEC_PER_USEC; |
111 | } | 128 | } |
112 | 129 | ||
113 | #undef ELF_CORE_COPY_REGS | ||
114 | #define ELF_CORE_COPY_REGS(_dest, _regs) elf32_core_copy_regs(_dest, _regs); | ||
115 | |||
116 | void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs) | 130 | void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs) |
117 | { | 131 | { |
118 | int i; | 132 | int i; |
diff --git a/arch/mips/kernel/cevt-bcm1480.c b/arch/mips/kernel/cevt-bcm1480.c index a5182a207696..e02f79b1eb51 100644 --- a/arch/mips/kernel/cevt-bcm1480.c +++ b/arch/mips/kernel/cevt-bcm1480.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/clockchips.h> | 18 | #include <linux/clockchips.h> |
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/percpu.h> | 20 | #include <linux/percpu.h> |
21 | #include <linux/smp.h> | ||
21 | 22 | ||
22 | #include <asm/addrspace.h> | 23 | #include <asm/addrspace.h> |
23 | #include <asm/io.h> | 24 | #include <asm/io.h> |
diff --git a/arch/mips/kernel/cevt-ds1287.c b/arch/mips/kernel/cevt-ds1287.c index 1ada45ea0700..6996da4d74a2 100644 --- a/arch/mips/kernel/cevt-ds1287.c +++ b/arch/mips/kernel/cevt-ds1287.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * DS1287 clockevent driver | 2 | * DS1287 clockevent driver |
3 | * | 3 | * |
4 | * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/kernel/cevt-gt641xx.c b/arch/mips/kernel/cevt-gt641xx.c index e9b787feedcb..92351e00ae0e 100644 --- a/arch/mips/kernel/cevt-gt641xx.c +++ b/arch/mips/kernel/cevt-gt641xx.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * GT641xx clockevent routines. | 2 | * GT641xx clockevent routines. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c index 0015e442572b..2652362ce047 100644 --- a/arch/mips/kernel/cevt-r4k.c +++ b/arch/mips/kernel/cevt-r4k.c | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <linux/clockchips.h> | 9 | #include <linux/clockchips.h> |
10 | #include <linux/interrupt.h> | 10 | #include <linux/interrupt.h> |
11 | #include <linux/percpu.h> | 11 | #include <linux/percpu.h> |
12 | #include <linux/smp.h> | ||
12 | 13 | ||
13 | #include <asm/smtc_ipi.h> | 14 | #include <asm/smtc_ipi.h> |
14 | #include <asm/time.h> | 15 | #include <asm/time.h> |
diff --git a/arch/mips/kernel/cevt-sb1250.c b/arch/mips/kernel/cevt-sb1250.c index 340f53e5c6b1..ac5903d1b20e 100644 --- a/arch/mips/kernel/cevt-sb1250.c +++ b/arch/mips/kernel/cevt-sb1250.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/clockchips.h> | 18 | #include <linux/clockchips.h> |
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/percpu.h> | 20 | #include <linux/percpu.h> |
21 | #include <linux/smp.h> | ||
21 | 22 | ||
22 | #include <asm/addrspace.h> | 23 | #include <asm/addrspace.h> |
23 | #include <asm/io.h> | 24 | #include <asm/io.h> |
diff --git a/arch/mips/kernel/cevt-smtc.c b/arch/mips/kernel/cevt-smtc.c index df6f5bc60572..98bd7de75778 100644 --- a/arch/mips/kernel/cevt-smtc.c +++ b/arch/mips/kernel/cevt-smtc.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/clockchips.h> | 10 | #include <linux/clockchips.h> |
11 | #include <linux/interrupt.h> | 11 | #include <linux/interrupt.h> |
12 | #include <linux/percpu.h> | 12 | #include <linux/percpu.h> |
13 | #include <linux/smp.h> | ||
13 | 14 | ||
14 | #include <asm/smtc_ipi.h> | 15 | #include <asm/smtc_ipi.h> |
15 | #include <asm/time.h> | 16 | #include <asm/time.h> |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index b13b8eb30596..1abe9905c9c1 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/ptrace.h> | 16 | #include <linux/ptrace.h> |
17 | #include <linux/smp.h> | ||
17 | #include <linux/stddef.h> | 18 | #include <linux/stddef.h> |
18 | 19 | ||
19 | #include <asm/bugs.h> | 20 | #include <asm/bugs.h> |
diff --git a/arch/mips/kernel/csrc-ioasic.c b/arch/mips/kernel/csrc-ioasic.c index b551f48d3a07..23da108506b0 100644 --- a/arch/mips/kernel/csrc-ioasic.c +++ b/arch/mips/kernel/csrc-ioasic.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * DEC I/O ASIC's counter clocksource | 2 | * DEC I/O ASIC's counter clocksource |
3 | * | 3 | * |
4 | * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/kernel/i8253.c b/arch/mips/kernel/i8253.c index ed20e7fe65e3..f7d8d5d0ddbf 100644 --- a/arch/mips/kernel/i8253.c +++ b/arch/mips/kernel/i8253.c | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/interrupt.h> | 7 | #include <linux/interrupt.h> |
8 | #include <linux/jiffies.h> | 8 | #include <linux/jiffies.h> |
9 | #include <linux/module.h> | 9 | #include <linux/module.h> |
10 | #include <linux/smp.h> | ||
10 | #include <linux/spinlock.h> | 11 | #include <linux/spinlock.h> |
11 | 12 | ||
12 | #include <asm/delay.h> | 13 | #include <asm/delay.h> |
diff --git a/arch/mips/kernel/irq-gic.c b/arch/mips/kernel/irq-gic.c index 3f43c2e3aa5a..d2072cd38592 100644 --- a/arch/mips/kernel/irq-gic.c +++ b/arch/mips/kernel/irq-gic.c | |||
@@ -2,6 +2,7 @@ | |||
2 | 2 | ||
3 | #include <linux/bitmap.h> | 3 | #include <linux/bitmap.h> |
4 | #include <linux/init.h> | 4 | #include <linux/init.h> |
5 | #include <linux/smp.h> | ||
5 | 6 | ||
6 | #include <asm/io.h> | 7 | #include <asm/io.h> |
7 | #include <asm/gic.h> | 8 | #include <asm/gic.h> |
@@ -106,9 +107,7 @@ static unsigned int gic_irq_startup(unsigned int irq) | |||
106 | { | 107 | { |
107 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | 108 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
108 | irq -= _irqbase; | 109 | irq -= _irqbase; |
109 | /* FIXME: this is wrong for !GICISWORDLITTLEENDIAN */ | 110 | GIC_SET_INTR_MASK(irq, 1); |
110 | GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_SMASK_31_0_OFS + (irq / 32))), | ||
111 | 1 << (irq % 32)); | ||
112 | return 0; | 111 | return 0; |
113 | } | 112 | } |
114 | 113 | ||
@@ -119,8 +118,7 @@ static void gic_irq_ack(unsigned int irq) | |||
119 | #endif | 118 | #endif |
120 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | 119 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
121 | irq -= _irqbase; | 120 | irq -= _irqbase; |
122 | GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_RMASK_31_0_OFS + (irq / 32))), | 121 | GIC_CLR_INTR_MASK(irq, 1); |
123 | 1 << (irq % 32)); | ||
124 | 122 | ||
125 | if (_intrmap[irq].trigtype == GIC_TRIG_EDGE) { | 123 | if (_intrmap[irq].trigtype == GIC_TRIG_EDGE) { |
126 | if (!gic_wedgeb2bok) | 124 | if (!gic_wedgeb2bok) |
@@ -137,18 +135,14 @@ static void gic_mask_irq(unsigned int irq) | |||
137 | { | 135 | { |
138 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | 136 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
139 | irq -= _irqbase; | 137 | irq -= _irqbase; |
140 | /* FIXME: this is wrong for !GICISWORDLITTLEENDIAN */ | 138 | GIC_CLR_INTR_MASK(irq, 1); |
141 | GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_RMASK_31_0_OFS + (irq / 32))), | ||
142 | 1 << (irq % 32)); | ||
143 | } | 139 | } |
144 | 140 | ||
145 | static void gic_unmask_irq(unsigned int irq) | 141 | static void gic_unmask_irq(unsigned int irq) |
146 | { | 142 | { |
147 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | 143 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
148 | irq -= _irqbase; | 144 | irq -= _irqbase; |
149 | /* FIXME: this is wrong for !GICISWORDLITTLEENDIAN */ | 145 | GIC_SET_INTR_MASK(irq, 1); |
150 | GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_SMASK_31_0_OFS + (irq / 32))), | ||
151 | 1 << (irq % 32)); | ||
152 | } | 146 | } |
153 | 147 | ||
154 | #ifdef CONFIG_SMP | 148 | #ifdef CONFIG_SMP |
@@ -253,6 +247,10 @@ static void __init gic_basic_init(void) | |||
253 | if (cpu == X) | 247 | if (cpu == X) |
254 | continue; | 248 | continue; |
255 | 249 | ||
250 | if (cpu == 0 && i != 0 && _intrmap[i].intrnum == 0 && | ||
251 | _intrmap[i].ipiflag == 0) | ||
252 | continue; | ||
253 | |||
256 | setup_intr(_intrmap[i].intrnum, | 254 | setup_intr(_intrmap[i].intrnum, |
257 | _intrmap[i].cpunum, | 255 | _intrmap[i].cpunum, |
258 | _intrmap[i].pin, | 256 | _intrmap[i].pin, |
diff --git a/arch/mips/kernel/irq-gt641xx.c b/arch/mips/kernel/irq-gt641xx.c index 1b81b131f43c..ebcc5f7ad9c2 100644 --- a/arch/mips/kernel/irq-gt641xx.c +++ b/arch/mips/kernel/irq-gt641xx.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * GT641xx IRQ routines. | 2 | * GT641xx IRQ routines. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/kernel/kgdb.c b/arch/mips/kernel/kgdb.c index 6e152c80cd4a..50c9bb880667 100644 --- a/arch/mips/kernel/kgdb.c +++ b/arch/mips/kernel/kgdb.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/kgdb.h> | 26 | #include <linux/kgdb.h> |
27 | #include <linux/kdebug.h> | 27 | #include <linux/kdebug.h> |
28 | #include <linux/sched.h> | 28 | #include <linux/sched.h> |
29 | #include <linux/smp.h> | ||
29 | #include <asm/inst.h> | 30 | #include <asm/inst.h> |
30 | #include <asm/fpu.h> | 31 | #include <asm/fpu.h> |
31 | #include <asm/cacheflush.h> | 32 | #include <asm/cacheflush.h> |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index 1eaaa450e20c..c09d681b7181 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -50,10 +50,15 @@ | |||
50 | */ | 50 | */ |
51 | void __noreturn cpu_idle(void) | 51 | void __noreturn cpu_idle(void) |
52 | { | 52 | { |
53 | int cpu; | ||
54 | |||
55 | /* CPU is going idle. */ | ||
56 | cpu = smp_processor_id(); | ||
57 | |||
53 | /* endless idle loop with no priority at all */ | 58 | /* endless idle loop with no priority at all */ |
54 | while (1) { | 59 | while (1) { |
55 | tick_nohz_stop_sched_tick(1); | 60 | tick_nohz_stop_sched_tick(1); |
56 | while (!need_resched()) { | 61 | while (!need_resched() && cpu_online(cpu)) { |
57 | #ifdef CONFIG_MIPS_MT_SMTC | 62 | #ifdef CONFIG_MIPS_MT_SMTC |
58 | extern void smtc_idle_loop_hook(void); | 63 | extern void smtc_idle_loop_hook(void); |
59 | 64 | ||
@@ -62,6 +67,12 @@ void __noreturn cpu_idle(void) | |||
62 | if (cpu_wait) | 67 | if (cpu_wait) |
63 | (*cpu_wait)(); | 68 | (*cpu_wait)(); |
64 | } | 69 | } |
70 | #ifdef CONFIG_HOTPLUG_CPU | ||
71 | if (!cpu_online(cpu) && !cpu_isset(cpu, cpu_callin_map) && | ||
72 | (system_state == SYSTEM_RUNNING || | ||
73 | system_state == SYSTEM_BOOTING)) | ||
74 | play_dead(); | ||
75 | #endif | ||
65 | tick_nohz_restart_sched_tick(); | 76 | tick_nohz_restart_sched_tick(); |
66 | preempt_enable_no_resched(); | 77 | preempt_enable_no_resched(); |
67 | schedule(); | 78 | schedule(); |
diff --git a/arch/mips/kernel/ptrace32.c b/arch/mips/kernel/ptrace32.c index c4f9ac17474a..32644b4a0714 100644 --- a/arch/mips/kernel/ptrace32.c +++ b/arch/mips/kernel/ptrace32.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/errno.h> | 22 | #include <linux/errno.h> |
23 | #include <linux/ptrace.h> | 23 | #include <linux/ptrace.h> |
24 | #include <linux/smp.h> | 24 | #include <linux/smp.h> |
25 | #include <linux/smp_lock.h> | ||
26 | #include <linux/user.h> | 25 | #include <linux/user.h> |
27 | #include <linux/security.h> | 26 | #include <linux/security.h> |
28 | 27 | ||
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index 0b31b9bda048..20a86e08fd58 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
@@ -652,6 +652,8 @@ einval: li v0, -ENOSYS | |||
652 | sys sys_inotify_init1 1 | 652 | sys sys_inotify_init1 1 |
653 | sys sys_preadv 6 /* 4330 */ | 653 | sys sys_preadv 6 /* 4330 */ |
654 | sys sys_pwritev 6 | 654 | sys sys_pwritev 6 |
655 | sys sys_rt_tgsigqueueinfo 4 | ||
656 | sys sys_perf_counter_open 5 | ||
655 | .endm | 657 | .endm |
656 | 658 | ||
657 | /* We pre-compute the number of _instruction_ bytes needed to | 659 | /* We pre-compute the number of _instruction_ bytes needed to |
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S index c647fd6e722f..b046130d4c5d 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
@@ -489,4 +489,6 @@ sys_call_table: | |||
489 | PTR sys_inotify_init1 | 489 | PTR sys_inotify_init1 |
490 | PTR sys_preadv | 490 | PTR sys_preadv |
491 | PTR sys_pwritev /* 5390 */ | 491 | PTR sys_pwritev /* 5390 */ |
492 | PTR sys_rt_tgsigqueueinfo | ||
493 | PTR sys_perf_counter_open | ||
492 | .size sys_call_table,.-sys_call_table | 494 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 93cc672f4522..15874f9812cc 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
@@ -415,4 +415,6 @@ EXPORT(sysn32_call_table) | |||
415 | PTR sys_inotify_init1 | 415 | PTR sys_inotify_init1 |
416 | PTR sys_preadv | 416 | PTR sys_preadv |
417 | PTR sys_pwritev | 417 | PTR sys_pwritev |
418 | PTR compat_sys_rt_tgsigqueueinfo /* 5295 */ | ||
419 | PTR sys_perf_counter_open | ||
418 | .size sysn32_call_table,.-sysn32_call_table | 420 | .size sysn32_call_table,.-sysn32_call_table |
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index a5598b2339dd..781e0f1e9533 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
@@ -535,4 +535,6 @@ sys_call_table: | |||
535 | PTR sys_inotify_init1 | 535 | PTR sys_inotify_init1 |
536 | PTR compat_sys_preadv /* 4330 */ | 536 | PTR compat_sys_preadv /* 4330 */ |
537 | PTR compat_sys_pwritev | 537 | PTR compat_sys_pwritev |
538 | PTR compat_sys_rt_tgsigqueueinfo | ||
539 | PTR sys_perf_counter_open | ||
538 | .size sys_call_table,.-sys_call_table | 540 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/smp-cmp.c b/arch/mips/kernel/smp-cmp.c index f27beca4b26d..ad0ff5dc4d59 100644 --- a/arch/mips/kernel/smp-cmp.c +++ b/arch/mips/kernel/smp-cmp.c | |||
@@ -20,6 +20,7 @@ | |||
20 | 20 | ||
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/sched.h> | 22 | #include <linux/sched.h> |
23 | #include <linux/smp.h> | ||
23 | #include <linux/cpumask.h> | 24 | #include <linux/cpumask.h> |
24 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
25 | #include <linux/compiler.h> | 26 | #include <linux/compiler.h> |
@@ -36,80 +37,24 @@ | |||
36 | #include <asm/mipsregs.h> | 37 | #include <asm/mipsregs.h> |
37 | #include <asm/mipsmtregs.h> | 38 | #include <asm/mipsmtregs.h> |
38 | #include <asm/mips_mt.h> | 39 | #include <asm/mips_mt.h> |
39 | 40 | #include <asm/amon.h> | |
40 | /* | 41 | #include <asm/gic.h> |
41 | * Crude manipulation of the CPU masks to control which | ||
42 | * which CPU's are brought online during initialisation | ||
43 | * | ||
44 | * Beware... this needs to be called after CPU discovery | ||
45 | * but before CPU bringup | ||
46 | */ | ||
47 | static int __init allowcpus(char *str) | ||
48 | { | ||
49 | cpumask_t cpu_allow_map; | ||
50 | char buf[256]; | ||
51 | int len; | ||
52 | |||
53 | cpus_clear(cpu_allow_map); | ||
54 | if (cpulist_parse(str, &cpu_allow_map) == 0) { | ||
55 | cpu_set(0, cpu_allow_map); | ||
56 | cpus_and(cpu_possible_map, cpu_possible_map, cpu_allow_map); | ||
57 | len = cpulist_scnprintf(buf, sizeof(buf)-1, &cpu_possible_map); | ||
58 | buf[len] = '\0'; | ||
59 | pr_debug("Allowable CPUs: %s\n", buf); | ||
60 | return 1; | ||
61 | } else | ||
62 | return 0; | ||
63 | } | ||
64 | __setup("allowcpus=", allowcpus); | ||
65 | 42 | ||
66 | static void ipi_call_function(unsigned int cpu) | 43 | static void ipi_call_function(unsigned int cpu) |
67 | { | 44 | { |
68 | unsigned int action = 0; | ||
69 | |||
70 | pr_debug("CPU%d: %s cpu %d status %08x\n", | 45 | pr_debug("CPU%d: %s cpu %d status %08x\n", |
71 | smp_processor_id(), __func__, cpu, read_c0_status()); | 46 | smp_processor_id(), __func__, cpu, read_c0_status()); |
72 | 47 | ||
73 | switch (cpu) { | 48 | gic_send_ipi(plat_ipi_call_int_xlate(cpu)); |
74 | case 0: | ||
75 | action = GIC_IPI_EXT_INTR_CALLFNC_VPE0; | ||
76 | break; | ||
77 | case 1: | ||
78 | action = GIC_IPI_EXT_INTR_CALLFNC_VPE1; | ||
79 | break; | ||
80 | case 2: | ||
81 | action = GIC_IPI_EXT_INTR_CALLFNC_VPE2; | ||
82 | break; | ||
83 | case 3: | ||
84 | action = GIC_IPI_EXT_INTR_CALLFNC_VPE3; | ||
85 | break; | ||
86 | } | ||
87 | gic_send_ipi(action); | ||
88 | } | 49 | } |
89 | 50 | ||
90 | 51 | ||
91 | static void ipi_resched(unsigned int cpu) | 52 | static void ipi_resched(unsigned int cpu) |
92 | { | 53 | { |
93 | unsigned int action = 0; | ||
94 | |||
95 | pr_debug("CPU%d: %s cpu %d status %08x\n", | 54 | pr_debug("CPU%d: %s cpu %d status %08x\n", |
96 | smp_processor_id(), __func__, cpu, read_c0_status()); | 55 | smp_processor_id(), __func__, cpu, read_c0_status()); |
97 | 56 | ||
98 | switch (cpu) { | 57 | gic_send_ipi(plat_ipi_resched_int_xlate(cpu)); |
99 | case 0: | ||
100 | action = GIC_IPI_EXT_INTR_RESCHED_VPE0; | ||
101 | break; | ||
102 | case 1: | ||
103 | action = GIC_IPI_EXT_INTR_RESCHED_VPE1; | ||
104 | break; | ||
105 | case 2: | ||
106 | action = GIC_IPI_EXT_INTR_RESCHED_VPE2; | ||
107 | break; | ||
108 | case 3: | ||
109 | action = GIC_IPI_EXT_INTR_RESCHED_VPE3; | ||
110 | break; | ||
111 | } | ||
112 | gic_send_ipi(action); | ||
113 | } | 58 | } |
114 | 59 | ||
115 | /* | 60 | /* |
@@ -205,7 +150,7 @@ static void cmp_boot_secondary(int cpu, struct task_struct *idle) | |||
205 | (unsigned long)(gp + sizeof(struct thread_info))); | 150 | (unsigned long)(gp + sizeof(struct thread_info))); |
206 | #endif | 151 | #endif |
207 | 152 | ||
208 | amon_cpu_start(cpu, pc, sp, gp, a0); | 153 | amon_cpu_start(cpu, pc, sp, (unsigned long)gp, a0); |
209 | } | 154 | } |
210 | 155 | ||
211 | /* | 156 | /* |
diff --git a/arch/mips/kernel/smp-up.c b/arch/mips/kernel/smp-up.c index 878e3733bbb2..2508d55d68fd 100644 --- a/arch/mips/kernel/smp-up.c +++ b/arch/mips/kernel/smp-up.c | |||
@@ -55,6 +55,18 @@ static void __init up_prepare_cpus(unsigned int max_cpus) | |||
55 | { | 55 | { |
56 | } | 56 | } |
57 | 57 | ||
58 | #ifdef CONFIG_HOTPLUG_CPU | ||
59 | static int up_cpu_disable(void) | ||
60 | { | ||
61 | return -ENOSYS; | ||
62 | } | ||
63 | |||
64 | static void up_cpu_die(unsigned int cpu) | ||
65 | { | ||
66 | BUG(); | ||
67 | } | ||
68 | #endif | ||
69 | |||
58 | struct plat_smp_ops up_smp_ops = { | 70 | struct plat_smp_ops up_smp_ops = { |
59 | .send_ipi_single = up_send_ipi_single, | 71 | .send_ipi_single = up_send_ipi_single, |
60 | .send_ipi_mask = up_send_ipi_mask, | 72 | .send_ipi_mask = up_send_ipi_mask, |
@@ -64,4 +76,8 @@ struct plat_smp_ops up_smp_ops = { | |||
64 | .boot_secondary = up_boot_secondary, | 76 | .boot_secondary = up_boot_secondary, |
65 | .smp_setup = up_smp_setup, | 77 | .smp_setup = up_smp_setup, |
66 | .prepare_cpus = up_prepare_cpus, | 78 | .prepare_cpus = up_prepare_cpus, |
79 | #ifdef CONFIG_HOTPLUG_CPU | ||
80 | .cpu_disable = up_cpu_disable, | ||
81 | .cpu_die = up_cpu_die, | ||
82 | #endif | ||
67 | }; | 83 | }; |
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index c937506a03aa..bc7d9b05e2f4 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
24 | #include <linux/interrupt.h> | 24 | #include <linux/interrupt.h> |
25 | #include <linux/smp.h> | ||
25 | #include <linux/spinlock.h> | 26 | #include <linux/spinlock.h> |
26 | #include <linux/threads.h> | 27 | #include <linux/threads.h> |
27 | #include <linux/module.h> | 28 | #include <linux/module.h> |
@@ -44,7 +45,7 @@ | |||
44 | #include <asm/mipsmtregs.h> | 45 | #include <asm/mipsmtregs.h> |
45 | #endif /* CONFIG_MIPS_MT_SMTC */ | 46 | #endif /* CONFIG_MIPS_MT_SMTC */ |
46 | 47 | ||
47 | static volatile cpumask_t cpu_callin_map; /* Bitmask of started secondaries */ | 48 | volatile cpumask_t cpu_callin_map; /* Bitmask of started secondaries */ |
48 | int __cpu_number_map[NR_CPUS]; /* Map physical to logical */ | 49 | int __cpu_number_map[NR_CPUS]; /* Map physical to logical */ |
49 | int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */ | 50 | int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */ |
50 | 51 | ||
@@ -200,6 +201,8 @@ void __devinit smp_prepare_boot_cpu(void) | |||
200 | * and keep control until "cpu_online(cpu)" is set. Note: cpu is | 201 | * and keep control until "cpu_online(cpu)" is set. Note: cpu is |
201 | * physical, not logical. | 202 | * physical, not logical. |
202 | */ | 203 | */ |
204 | static struct task_struct *cpu_idle_thread[NR_CPUS]; | ||
205 | |||
203 | int __cpuinit __cpu_up(unsigned int cpu) | 206 | int __cpuinit __cpu_up(unsigned int cpu) |
204 | { | 207 | { |
205 | struct task_struct *idle; | 208 | struct task_struct *idle; |
@@ -209,9 +212,16 @@ int __cpuinit __cpu_up(unsigned int cpu) | |||
209 | * The following code is purely to make sure | 212 | * The following code is purely to make sure |
210 | * Linux can schedule processes on this slave. | 213 | * Linux can schedule processes on this slave. |
211 | */ | 214 | */ |
212 | idle = fork_idle(cpu); | 215 | if (!cpu_idle_thread[cpu]) { |
213 | if (IS_ERR(idle)) | 216 | idle = fork_idle(cpu); |
214 | panic(KERN_ERR "Fork failed for CPU %d", cpu); | 217 | cpu_idle_thread[cpu] = idle; |
218 | |||
219 | if (IS_ERR(idle)) | ||
220 | panic(KERN_ERR "Fork failed for CPU %d", cpu); | ||
221 | } else { | ||
222 | idle = cpu_idle_thread[cpu]; | ||
223 | init_idle(idle, cpu); | ||
224 | } | ||
215 | 225 | ||
216 | mp_ops->boot_secondary(cpu, idle); | 226 | mp_ops->boot_secondary(cpu, idle); |
217 | 227 | ||
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index 37d51cd124e9..8a0626cbb108 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/clockchips.h> | 20 | #include <linux/clockchips.h> |
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/sched.h> | 22 | #include <linux/sched.h> |
23 | #include <linux/smp.h> | ||
23 | #include <linux/cpumask.h> | 24 | #include <linux/cpumask.h> |
24 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
25 | #include <linux/kernel_stat.h> | 26 | #include <linux/kernel_stat.h> |
diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c index 9021108eb9c1..05dd170a83f7 100644 --- a/arch/mips/kernel/sync-r4k.c +++ b/arch/mips/kernel/sync-r4k.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Count register synchronisation. | 2 | * Count register synchronisation. |
3 | * | 3 | * |
4 | * All CPUs will have their count registers synchronised to the CPU0 expirelo | 4 | * All CPUs will have their count registers synchronised to the CPU0 next time |
5 | * value. This can cause a small timewarp for CPU0. All other CPU's should | 5 | * value. This can cause a small timewarp for CPU0. All other CPU's should |
6 | * not have done anything significant (but they may have had interrupts | 6 | * not have done anything significant (but they may have had interrupts |
7 | * enabled briefly - prom_smp_finish() should not be responsible for enabling | 7 | * enabled briefly - prom_smp_finish() should not be responsible for enabling |
@@ -13,21 +13,22 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/irqflags.h> | 15 | #include <linux/irqflags.h> |
16 | #include <linux/r4k-timer.h> | 16 | #include <linux/cpumask.h> |
17 | 17 | ||
18 | #include <asm/r4k-timer.h> | ||
18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
19 | #include <asm/barrier.h> | 20 | #include <asm/barrier.h> |
20 | #include <asm/cpumask.h> | ||
21 | #include <asm/mipsregs.h> | 21 | #include <asm/mipsregs.h> |
22 | 22 | ||
23 | static atomic_t __initdata count_start_flag = ATOMIC_INIT(0); | 23 | static atomic_t __cpuinitdata count_start_flag = ATOMIC_INIT(0); |
24 | static atomic_t __initdata count_count_start = ATOMIC_INIT(0); | 24 | static atomic_t __cpuinitdata count_count_start = ATOMIC_INIT(0); |
25 | static atomic_t __initdata count_count_stop = ATOMIC_INIT(0); | 25 | static atomic_t __cpuinitdata count_count_stop = ATOMIC_INIT(0); |
26 | static atomic_t __cpuinitdata count_reference = ATOMIC_INIT(0); | ||
26 | 27 | ||
27 | #define COUNTON 100 | 28 | #define COUNTON 100 |
28 | #define NR_LOOPS 5 | 29 | #define NR_LOOPS 5 |
29 | 30 | ||
30 | void __init synchronise_count_master(void) | 31 | void __cpuinit synchronise_count_master(void) |
31 | { | 32 | { |
32 | int i; | 33 | int i; |
33 | unsigned long flags; | 34 | unsigned long flags; |
@@ -42,19 +43,20 @@ void __init synchronise_count_master(void) | |||
42 | return; | 43 | return; |
43 | #endif | 44 | #endif |
44 | 45 | ||
45 | pr_info("Checking COUNT synchronization across %u CPUs: ", | 46 | printk(KERN_INFO "Synchronize counters across %u CPUs: ", |
46 | num_online_cpus()); | 47 | num_online_cpus()); |
47 | 48 | ||
48 | local_irq_save(flags); | 49 | local_irq_save(flags); |
49 | 50 | ||
50 | /* | 51 | /* |
51 | * Notify the slaves that it's time to start | 52 | * Notify the slaves that it's time to start |
52 | */ | 53 | */ |
54 | atomic_set(&count_reference, read_c0_count()); | ||
53 | atomic_set(&count_start_flag, 1); | 55 | atomic_set(&count_start_flag, 1); |
54 | smp_wmb(); | 56 | smp_wmb(); |
55 | 57 | ||
56 | /* Count will be initialised to expirelo for all CPU's */ | 58 | /* Count will be initialised to current timer for all CPU's */ |
57 | initcount = expirelo; | 59 | initcount = read_c0_count(); |
58 | 60 | ||
59 | /* | 61 | /* |
60 | * We loop a few times to get a primed instruction cache, | 62 | * We loop a few times to get a primed instruction cache, |
@@ -106,7 +108,7 @@ void __init synchronise_count_master(void) | |||
106 | printk("done.\n"); | 108 | printk("done.\n"); |
107 | } | 109 | } |
108 | 110 | ||
109 | void __init synchronise_count_slave(void) | 111 | void __cpuinit synchronise_count_slave(void) |
110 | { | 112 | { |
111 | int i; | 113 | int i; |
112 | unsigned long flags; | 114 | unsigned long flags; |
@@ -131,8 +133,8 @@ void __init synchronise_count_slave(void) | |||
131 | while (!atomic_read(&count_start_flag)) | 133 | while (!atomic_read(&count_start_flag)) |
132 | mb(); | 134 | mb(); |
133 | 135 | ||
134 | /* Count will be initialised to expirelo for all CPU's */ | 136 | /* Count will be initialised to next expire for all CPU's */ |
135 | initcount = expirelo; | 137 | initcount = atomic_read(&count_reference); |
136 | 138 | ||
137 | ncpus = num_online_cpus(); | 139 | ncpus = num_online_cpus(); |
138 | for (i = 0; i < NR_LOOPS; i++) { | 140 | for (i = 0; i < NR_LOOPS; i++) { |
@@ -156,4 +158,3 @@ void __init synchronise_count_slave(void) | |||
156 | local_irq_restore(flags); | 158 | local_irq_restore(flags); |
157 | } | 159 | } |
158 | #undef NR_LOOPS | 160 | #undef NR_LOOPS |
159 | #endif | ||
diff --git a/arch/mips/kernel/topology.c b/arch/mips/kernel/topology.c index 660e44ed44d7..cf3eb61fad12 100644 --- a/arch/mips/kernel/topology.c +++ b/arch/mips/kernel/topology.c | |||
@@ -17,7 +17,10 @@ static int __init topology_init(void) | |||
17 | #endif /* CONFIG_NUMA */ | 17 | #endif /* CONFIG_NUMA */ |
18 | 18 | ||
19 | for_each_present_cpu(i) { | 19 | for_each_present_cpu(i) { |
20 | ret = register_cpu(&per_cpu(cpu_devices, i), i); | 20 | struct cpu *c = &per_cpu(cpu_devices, i); |
21 | |||
22 | c->hotpluggable = 1; | ||
23 | ret = register_cpu(c, i); | ||
21 | if (ret) | 24 | if (ret) |
22 | printk(KERN_WARNING "topology_init: register_cpu %d " | 25 | printk(KERN_WARNING "topology_init: register_cpu %d " |
23 | "failed (%d)\n", i, ret); | 26 | "failed (%d)\n", i, ret); |
diff --git a/arch/mips/kernel/vpe.c b/arch/mips/kernel/vpe.c index 3ca5f42e819d..07b9ec2c6e3d 100644 --- a/arch/mips/kernel/vpe.c +++ b/arch/mips/kernel/vpe.c | |||
@@ -1387,7 +1387,7 @@ static ssize_t store_ntcs(struct device *dev, struct device_attribute *attr, | |||
1387 | return len; | 1387 | return len; |
1388 | 1388 | ||
1389 | out_einval: | 1389 | out_einval: |
1390 | return -EINVAL;; | 1390 | return -EINVAL; |
1391 | } | 1391 | } |
1392 | 1392 | ||
1393 | static struct device_attribute vpe_class_attributes[] = { | 1393 | static struct device_attribute vpe_class_attributes[] = { |
diff --git a/arch/mips/mipssim/sim_time.c b/arch/mips/mipssim/sim_time.c index 881ecbc1fa23..0cea932f1241 100644 --- a/arch/mips/mipssim/sim_time.c +++ b/arch/mips/mipssim/sim_time.c | |||
@@ -91,6 +91,7 @@ unsigned __cpuinit get_c0_compare_int(void) | |||
91 | mips_cpu_timer_irq = MSC01E_INT_BASE + MSC01E_INT_CPUCTR; | 91 | mips_cpu_timer_irq = MSC01E_INT_BASE + MSC01E_INT_CPUCTR; |
92 | } else { | 92 | } else { |
93 | #endif | 93 | #endif |
94 | { | ||
94 | if (cpu_has_vint) | 95 | if (cpu_has_vint) |
95 | set_vi_handler(cp0_compare_irq, mips_timer_dispatch); | 96 | set_vi_handler(cp0_compare_irq, mips_timer_dispatch); |
96 | mips_cpu_timer_irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq; | 97 | mips_cpu_timer_irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq; |
diff --git a/arch/mips/mm/c-octeon.c b/arch/mips/mm/c-octeon.c index 44d01a0a8490..b165cdcb2818 100644 --- a/arch/mips/mm/c-octeon.c +++ b/arch/mips/mm/c-octeon.c | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <linux/init.h> | 8 | #include <linux/init.h> |
9 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
10 | #include <linux/sched.h> | 10 | #include <linux/sched.h> |
11 | #include <linux/smp.h> | ||
11 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
12 | #include <linux/bitops.h> | 13 | #include <linux/bitops.h> |
13 | #include <linux/cpu.h> | 14 | #include <linux/cpu.h> |
diff --git a/arch/mips/mm/c-r3k.c b/arch/mips/mm/c-r3k.c index 5500c20c79ae..54e5f7b9f440 100644 --- a/arch/mips/mm/c-r3k.c +++ b/arch/mips/mm/c-r3k.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/sched.h> | 14 | #include <linux/sched.h> |
15 | #include <linux/smp.h> | ||
15 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
16 | 17 | ||
17 | #include <asm/page.h> | 18 | #include <asm/page.h> |
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c index 71fe4cb778cd..6721ee2b1e8b 100644 --- a/arch/mips/mm/c-r4k.c +++ b/arch/mips/mm/c-r4k.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
16 | #include <linux/smp.h> | ||
16 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
17 | #include <linux/module.h> | 18 | #include <linux/module.h> |
18 | #include <linux/bitops.h> | 19 | #include <linux/bitops.h> |
diff --git a/arch/mips/mm/c-tx39.c b/arch/mips/mm/c-tx39.c index f7c8f9ce39c1..6515b4418714 100644 --- a/arch/mips/mm/c-tx39.c +++ b/arch/mips/mm/c-tx39.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
14 | #include <linux/smp.h> | ||
14 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
15 | 16 | ||
16 | #include <asm/cacheops.h> | 17 | #include <asm/cacheops.h> |
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c index 55767ad9f00e..6751ce9ede9e 100644 --- a/arch/mips/mm/fault.c +++ b/arch/mips/mm/fault.c | |||
@@ -102,7 +102,7 @@ good_area: | |||
102 | * make sure we exit gracefully rather than endlessly redo | 102 | * make sure we exit gracefully rather than endlessly redo |
103 | * the fault. | 103 | * the fault. |
104 | */ | 104 | */ |
105 | fault = handle_mm_fault(mm, vma, address, write); | 105 | fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); |
106 | if (unlikely(fault & VM_FAULT_ERROR)) { | 106 | if (unlikely(fault & VM_FAULT_ERROR)) { |
107 | if (fault & VM_FAULT_OOM) | 107 | if (fault & VM_FAULT_OOM) |
108 | goto out_of_memory; | 108 | goto out_of_memory; |
diff --git a/arch/mips/mm/highmem.c b/arch/mips/mm/highmem.c index 2b1309b2580a..e274fda329f4 100644 --- a/arch/mips/mm/highmem.c +++ b/arch/mips/mm/highmem.c | |||
@@ -1,5 +1,6 @@ | |||
1 | #include <linux/module.h> | 1 | #include <linux/module.h> |
2 | #include <linux/highmem.h> | 2 | #include <linux/highmem.h> |
3 | #include <linux/smp.h> | ||
3 | #include <asm/fixmap.h> | 4 | #include <asm/fixmap.h> |
4 | #include <asm/tlbflush.h> | 5 | #include <asm/tlbflush.h> |
5 | 6 | ||
diff --git a/arch/mips/mm/hugetlbpage.c b/arch/mips/mm/hugetlbpage.c index 471c09aa1614..8c2834f5919d 100644 --- a/arch/mips/mm/hugetlbpage.c +++ b/arch/mips/mm/hugetlbpage.c | |||
@@ -16,7 +16,6 @@ | |||
16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
17 | #include <linux/hugetlb.h> | 17 | #include <linux/hugetlb.h> |
18 | #include <linux/pagemap.h> | 18 | #include <linux/pagemap.h> |
19 | #include <linux/smp_lock.h> | ||
20 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
21 | #include <linux/err.h> | 20 | #include <linux/err.h> |
22 | #include <linux/sysctl.h> | 21 | #include <linux/sysctl.h> |
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index c5511294a9ee..0e820508ff23 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
14 | #include <linux/signal.h> | 14 | #include <linux/signal.h> |
15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
16 | #include <linux/smp.h> | ||
16 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
17 | #include <linux/errno.h> | 18 | #include <linux/errno.h> |
18 | #include <linux/string.h> | 19 | #include <linux/string.h> |
diff --git a/arch/mips/mm/page.c b/arch/mips/mm/page.c index 48060c635acd..f5c73754d664 100644 --- a/arch/mips/mm/page.c +++ b/arch/mips/mm/page.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
13 | #include <linux/smp.h> | ||
13 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
14 | #include <linux/module.h> | 15 | #include <linux/module.h> |
15 | #include <linux/proc_fs.h> | 16 | #include <linux/proc_fs.h> |
diff --git a/arch/mips/mm/tlb-r3k.c b/arch/mips/mm/tlb-r3k.c index 1c0048a6f5cf..0f5ab236ab69 100644 --- a/arch/mips/mm/tlb-r3k.c +++ b/arch/mips/mm/tlb-r3k.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
16 | #include <linux/smp.h> | ||
16 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
17 | 18 | ||
18 | #include <asm/page.h> | 19 | #include <asm/page.h> |
diff --git a/arch/mips/mm/tlb-r4k.c b/arch/mips/mm/tlb-r4k.c index f60fe513eb60..cee502caf398 100644 --- a/arch/mips/mm/tlb-r4k.c +++ b/arch/mips/mm/tlb-r4k.c | |||
@@ -10,6 +10,7 @@ | |||
10 | */ | 10 | */ |
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
13 | #include <linux/smp.h> | ||
13 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
14 | #include <linux/hugetlb.h> | 15 | #include <linux/hugetlb.h> |
15 | 16 | ||
diff --git a/arch/mips/mm/tlb-r8k.c b/arch/mips/mm/tlb-r8k.c index 4ec95cc2df2f..2b82f23df1a1 100644 --- a/arch/mips/mm/tlb-r8k.c +++ b/arch/mips/mm/tlb-r8k.c | |||
@@ -10,6 +10,7 @@ | |||
10 | */ | 10 | */ |
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
13 | #include <linux/smp.h> | ||
13 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
14 | 15 | ||
15 | #include <asm/cpu.h> | 16 | #include <asm/cpu.h> |
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c index 8f606ead826e..9a17bf8395df 100644 --- a/arch/mips/mm/tlbex.c +++ b/arch/mips/mm/tlbex.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/bug.h> | 23 | #include <linux/bug.h> |
24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
25 | #include <linux/types.h> | 25 | #include <linux/types.h> |
26 | #include <linux/smp.h> | ||
26 | #include <linux/string.h> | 27 | #include <linux/string.h> |
27 | #include <linux/init.h> | 28 | #include <linux/init.h> |
28 | 29 | ||
diff --git a/arch/mips/mti-malta/malta-init.c b/arch/mips/mti-malta/malta-init.c index 475038a141a6..27c807b67fea 100644 --- a/arch/mips/mti-malta/malta-init.c +++ b/arch/mips/mti-malta/malta-init.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <asm/cacheflush.h> | 30 | #include <asm/cacheflush.h> |
31 | #include <asm/traps.h> | 31 | #include <asm/traps.h> |
32 | 32 | ||
33 | #include <asm/gcmpregs.h> | ||
33 | #include <asm/mips-boards/prom.h> | 34 | #include <asm/mips-boards/prom.h> |
34 | #include <asm/mips-boards/generic.h> | 35 | #include <asm/mips-boards/generic.h> |
35 | #include <asm/mips-boards/bonito64.h> | 36 | #include <asm/mips-boards/bonito64.h> |
@@ -192,6 +193,8 @@ extern struct plat_smp_ops msmtc_smp_ops; | |||
192 | 193 | ||
193 | void __init prom_init(void) | 194 | void __init prom_init(void) |
194 | { | 195 | { |
196 | int result; | ||
197 | |||
195 | prom_argc = fw_arg0; | 198 | prom_argc = fw_arg0; |
196 | _prom_argv = (int *) fw_arg1; | 199 | _prom_argv = (int *) fw_arg1; |
197 | _prom_envp = (int *) fw_arg2; | 200 | _prom_envp = (int *) fw_arg2; |
@@ -358,12 +361,21 @@ void __init prom_init(void) | |||
358 | #ifdef CONFIG_SERIAL_8250_CONSOLE | 361 | #ifdef CONFIG_SERIAL_8250_CONSOLE |
359 | console_config(); | 362 | console_config(); |
360 | #endif | 363 | #endif |
364 | /* Early detection of CMP support */ | ||
365 | result = gcmp_probe(GCMP_BASE_ADDR, GCMP_ADDRSPACE_SZ); | ||
366 | |||
361 | #ifdef CONFIG_MIPS_CMP | 367 | #ifdef CONFIG_MIPS_CMP |
362 | register_smp_ops(&cmp_smp_ops); | 368 | if (result) |
369 | register_smp_ops(&cmp_smp_ops); | ||
363 | #endif | 370 | #endif |
364 | #ifdef CONFIG_MIPS_MT_SMP | 371 | #ifdef CONFIG_MIPS_MT_SMP |
372 | #ifdef CONFIG_MIPS_CMP | ||
373 | if (!result) | ||
374 | register_smp_ops(&vsmp_smp_ops); | ||
375 | #else | ||
365 | register_smp_ops(&vsmp_smp_ops); | 376 | register_smp_ops(&vsmp_smp_ops); |
366 | #endif | 377 | #endif |
378 | #endif | ||
367 | #ifdef CONFIG_MIPS_MT_SMTC | 379 | #ifdef CONFIG_MIPS_MT_SMTC |
368 | register_smp_ops(&msmtc_smp_ops); | 380 | register_smp_ops(&msmtc_smp_ops); |
369 | #endif | 381 | #endif |
diff --git a/arch/mips/mti-malta/malta-int.c b/arch/mips/mti-malta/malta-int.c index ea176113fea9..a8756f82c31b 100644 --- a/arch/mips/mti-malta/malta-int.c +++ b/arch/mips/mti-malta/malta-int.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/irq.h> | 25 | #include <linux/irq.h> |
26 | #include <linux/sched.h> | 26 | #include <linux/sched.h> |
27 | #include <linux/smp.h> | ||
27 | #include <linux/slab.h> | 28 | #include <linux/slab.h> |
28 | #include <linux/interrupt.h> | 29 | #include <linux/interrupt.h> |
29 | #include <linux/io.h> | 30 | #include <linux/io.h> |
@@ -330,6 +331,21 @@ static struct irqaction irq_call = { | |||
330 | .flags = IRQF_DISABLED|IRQF_PERCPU, | 331 | .flags = IRQF_DISABLED|IRQF_PERCPU, |
331 | .name = "IPI_call" | 332 | .name = "IPI_call" |
332 | }; | 333 | }; |
334 | |||
335 | static int gic_resched_int_base; | ||
336 | static int gic_call_int_base; | ||
337 | #define GIC_RESCHED_INT(cpu) (gic_resched_int_base+(cpu)) | ||
338 | #define GIC_CALL_INT(cpu) (gic_call_int_base+(cpu)) | ||
339 | |||
340 | unsigned int plat_ipi_call_int_xlate(unsigned int cpu) | ||
341 | { | ||
342 | return GIC_CALL_INT(cpu); | ||
343 | } | ||
344 | |||
345 | unsigned int plat_ipi_resched_int_xlate(unsigned int cpu) | ||
346 | { | ||
347 | return GIC_RESCHED_INT(cpu); | ||
348 | } | ||
333 | #endif /* CONFIG_MIPS_MT_SMP */ | 349 | #endif /* CONFIG_MIPS_MT_SMP */ |
334 | 350 | ||
335 | static struct irqaction i8259irq = { | 351 | static struct irqaction i8259irq = { |
@@ -369,7 +385,7 @@ static int __initdata msc_nr_eicirqs = ARRAY_SIZE(msc_eicirqmap); | |||
369 | * Interrupts and CPUs/Core Interrupts. The nature of the External | 385 | * Interrupts and CPUs/Core Interrupts. The nature of the External |
370 | * Interrupts is also defined here - polarity/trigger. | 386 | * Interrupts is also defined here - polarity/trigger. |
371 | */ | 387 | */ |
372 | static struct gic_intr_map gic_intr_map[] = { | 388 | static struct gic_intr_map gic_intr_map[GIC_NUM_INTRS] = { |
373 | { GIC_EXT_INTR(0), X, X, X, X, 0 }, | 389 | { GIC_EXT_INTR(0), X, X, X, X, 0 }, |
374 | { GIC_EXT_INTR(1), X, X, X, X, 0 }, | 390 | { GIC_EXT_INTR(1), X, X, X, X, 0 }, |
375 | { GIC_EXT_INTR(2), X, X, X, X, 0 }, | 391 | { GIC_EXT_INTR(2), X, X, X, X, 0 }, |
@@ -386,21 +402,14 @@ static struct gic_intr_map gic_intr_map[] = { | |||
386 | { GIC_EXT_INTR(13), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 402 | { GIC_EXT_INTR(13), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, |
387 | { GIC_EXT_INTR(14), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 403 | { GIC_EXT_INTR(14), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, |
388 | { GIC_EXT_INTR(15), X, X, X, X, 0 }, | 404 | { GIC_EXT_INTR(15), X, X, X, X, 0 }, |
389 | { GIC_EXT_INTR(16), 0, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_EDGE, 1 }, | 405 | /* This is the end of the general interrupts now we do IPI ones */ |
390 | { GIC_EXT_INTR(17), 0, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_EDGE, 1 }, | ||
391 | { GIC_EXT_INTR(18), 1, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_EDGE, 1 }, | ||
392 | { GIC_EXT_INTR(19), 1, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_EDGE, 1 }, | ||
393 | { GIC_EXT_INTR(20), 2, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_EDGE, 1 }, | ||
394 | { GIC_EXT_INTR(21), 2, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_EDGE, 1 }, | ||
395 | { GIC_EXT_INTR(22), 3, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_EDGE, 1 }, | ||
396 | { GIC_EXT_INTR(23), 3, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_EDGE, 1 }, | ||
397 | }; | 406 | }; |
398 | #endif | 407 | #endif |
399 | 408 | ||
400 | /* | 409 | /* |
401 | * GCMP needs to be detected before any SMP initialisation | 410 | * GCMP needs to be detected before any SMP initialisation |
402 | */ | 411 | */ |
403 | static int __init gcmp_probe(unsigned long addr, unsigned long size) | 412 | int __init gcmp_probe(unsigned long addr, unsigned long size) |
404 | { | 413 | { |
405 | if (gcmp_present >= 0) | 414 | if (gcmp_present >= 0) |
406 | return gcmp_present; | 415 | return gcmp_present; |
@@ -415,28 +424,36 @@ static int __init gcmp_probe(unsigned long addr, unsigned long size) | |||
415 | } | 424 | } |
416 | 425 | ||
417 | #if defined(CONFIG_MIPS_MT_SMP) | 426 | #if defined(CONFIG_MIPS_MT_SMP) |
427 | static void __init fill_ipi_map1(int baseintr, int cpu, int cpupin) | ||
428 | { | ||
429 | int intr = baseintr + cpu; | ||
430 | gic_intr_map[intr].intrnum = GIC_EXT_INTR(intr); | ||
431 | gic_intr_map[intr].cpunum = cpu; | ||
432 | gic_intr_map[intr].pin = cpupin; | ||
433 | gic_intr_map[intr].polarity = GIC_POL_POS; | ||
434 | gic_intr_map[intr].trigtype = GIC_TRIG_EDGE; | ||
435 | gic_intr_map[intr].ipiflag = 1; | ||
436 | ipi_map[cpu] |= (1 << (cpupin + 2)); | ||
437 | } | ||
438 | |||
418 | static void __init fill_ipi_map(void) | 439 | static void __init fill_ipi_map(void) |
419 | { | 440 | { |
420 | int i; | 441 | int cpu; |
421 | 442 | ||
422 | for (i = 0; i < ARRAY_SIZE(gic_intr_map); i++) { | 443 | for (cpu = 0; cpu < NR_CPUS; cpu++) { |
423 | if (gic_intr_map[i].ipiflag && (gic_intr_map[i].cpunum != X)) | 444 | fill_ipi_map1(gic_resched_int_base, cpu, GIC_CPU_INT1); |
424 | ipi_map[gic_intr_map[i].cpunum] |= | 445 | fill_ipi_map1(gic_call_int_base, cpu, GIC_CPU_INT2); |
425 | (1 << (gic_intr_map[i].pin + 2)); | ||
426 | } | 446 | } |
427 | } | 447 | } |
428 | #endif | 448 | #endif |
429 | 449 | ||
430 | void __init arch_init_irq(void) | 450 | void __init arch_init_irq(void) |
431 | { | 451 | { |
432 | int gic_present, gcmp_present; | ||
433 | |||
434 | init_i8259_irqs(); | 452 | init_i8259_irqs(); |
435 | 453 | ||
436 | if (!cpu_has_veic) | 454 | if (!cpu_has_veic) |
437 | mips_cpu_irq_init(); | 455 | mips_cpu_irq_init(); |
438 | 456 | ||
439 | gcmp_present = gcmp_probe(GCMP_BASE_ADDR, GCMP_ADDRSPACE_SZ); | ||
440 | if (gcmp_present) { | 457 | if (gcmp_present) { |
441 | GCMPGCB(GICBA) = GIC_BASE_ADDR | GCMP_GCB_GICBA_EN_MSK; | 458 | GCMPGCB(GICBA) = GIC_BASE_ADDR | GCMP_GCB_GICBA_EN_MSK; |
442 | gic_present = 1; | 459 | gic_present = 1; |
@@ -513,24 +530,10 @@ void __init arch_init_irq(void) | |||
513 | if (gic_present) { | 530 | if (gic_present) { |
514 | /* FIXME */ | 531 | /* FIXME */ |
515 | int i; | 532 | int i; |
516 | struct { | 533 | |
517 | unsigned int resched; | 534 | gic_call_int_base = GIC_NUM_INTRS - NR_CPUS; |
518 | unsigned int call; | 535 | gic_resched_int_base = gic_call_int_base - NR_CPUS; |
519 | } ipiirq[] = { | 536 | |
520 | { | ||
521 | .resched = GIC_IPI_EXT_INTR_RESCHED_VPE0, | ||
522 | .call = GIC_IPI_EXT_INTR_CALLFNC_VPE0}, | ||
523 | { | ||
524 | .resched = GIC_IPI_EXT_INTR_RESCHED_VPE1, | ||
525 | .call = GIC_IPI_EXT_INTR_CALLFNC_VPE1 | ||
526 | }, { | ||
527 | .resched = GIC_IPI_EXT_INTR_RESCHED_VPE2, | ||
528 | .call = GIC_IPI_EXT_INTR_CALLFNC_VPE2 | ||
529 | }, { | ||
530 | .resched = GIC_IPI_EXT_INTR_RESCHED_VPE3, | ||
531 | .call = GIC_IPI_EXT_INTR_CALLFNC_VPE3 | ||
532 | } | ||
533 | }; | ||
534 | fill_ipi_map(); | 537 | fill_ipi_map(); |
535 | gic_init(GIC_BASE_ADDR, GIC_ADDRSPACE_SZ, gic_intr_map, ARRAY_SIZE(gic_intr_map), MIPS_GIC_IRQ_BASE); | 538 | gic_init(GIC_BASE_ADDR, GIC_ADDRSPACE_SZ, gic_intr_map, ARRAY_SIZE(gic_intr_map), MIPS_GIC_IRQ_BASE); |
536 | if (!gcmp_present) { | 539 | if (!gcmp_present) { |
@@ -552,12 +555,15 @@ void __init arch_init_irq(void) | |||
552 | printk("CPU%d: status register now %08x\n", smp_processor_id(), read_c0_status()); | 555 | printk("CPU%d: status register now %08x\n", smp_processor_id(), read_c0_status()); |
553 | write_c0_status(0x1100dc00); | 556 | write_c0_status(0x1100dc00); |
554 | printk("CPU%d: status register frc %08x\n", smp_processor_id(), read_c0_status()); | 557 | printk("CPU%d: status register frc %08x\n", smp_processor_id(), read_c0_status()); |
555 | for (i = 0; i < ARRAY_SIZE(ipiirq); i++) { | 558 | for (i = 0; i < NR_CPUS; i++) { |
556 | setup_irq(MIPS_GIC_IRQ_BASE + ipiirq[i].resched, &irq_resched); | 559 | setup_irq(MIPS_GIC_IRQ_BASE + |
557 | setup_irq(MIPS_GIC_IRQ_BASE + ipiirq[i].call, &irq_call); | 560 | GIC_RESCHED_INT(i), &irq_resched); |
558 | 561 | setup_irq(MIPS_GIC_IRQ_BASE + | |
559 | set_irq_handler(MIPS_GIC_IRQ_BASE + ipiirq[i].resched, handle_percpu_irq); | 562 | GIC_CALL_INT(i), &irq_call); |
560 | set_irq_handler(MIPS_GIC_IRQ_BASE + ipiirq[i].call, handle_percpu_irq); | 563 | set_irq_handler(MIPS_GIC_IRQ_BASE + |
564 | GIC_RESCHED_INT(i), handle_percpu_irq); | ||
565 | set_irq_handler(MIPS_GIC_IRQ_BASE + | ||
566 | GIC_CALL_INT(i), handle_percpu_irq); | ||
561 | } | 567 | } |
562 | } else { | 568 | } else { |
563 | /* set up ipi interrupts */ | 569 | /* set up ipi interrupts */ |
diff --git a/arch/mips/mti-malta/malta-reset.c b/arch/mips/mti-malta/malta-reset.c index 42dee4da37ba..f48d60e84290 100644 --- a/arch/mips/mti-malta/malta-reset.c +++ b/arch/mips/mti-malta/malta-reset.c | |||
@@ -28,9 +28,6 @@ | |||
28 | #include <asm/reboot.h> | 28 | #include <asm/reboot.h> |
29 | #include <asm/mips-boards/generic.h> | 29 | #include <asm/mips-boards/generic.h> |
30 | 30 | ||
31 | static void mips_machine_restart(char *command); | ||
32 | static void mips_machine_halt(void); | ||
33 | |||
34 | static void mips_machine_restart(char *command) | 31 | static void mips_machine_restart(char *command) |
35 | { | 32 | { |
36 | unsigned int __iomem *softres_reg = | 33 | unsigned int __iomem *softres_reg = |
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile index e8a97f59e066..63d8a297c58d 100644 --- a/arch/mips/pci/Makefile +++ b/arch/mips/pci/Makefile | |||
@@ -52,3 +52,8 @@ obj-$(CONFIG_VICTOR_MPC30X) += fixup-mpc30x.o | |||
52 | obj-$(CONFIG_ZAO_CAPCELLA) += fixup-capcella.o | 52 | obj-$(CONFIG_ZAO_CAPCELLA) += fixup-capcella.o |
53 | obj-$(CONFIG_WR_PPMC) += fixup-wrppmc.o | 53 | obj-$(CONFIG_WR_PPMC) += fixup-wrppmc.o |
54 | obj-$(CONFIG_MIKROTIK_RB532) += pci-rc32434.o ops-rc32434.o fixup-rc32434.o | 54 | obj-$(CONFIG_MIKROTIK_RB532) += pci-rc32434.o ops-rc32434.o fixup-rc32434.o |
55 | obj-$(CONFIG_CPU_CAVIUM_OCTEON) += pci-octeon.o pcie-octeon.o | ||
56 | |||
57 | ifdef CONFIG_PCI_MSI | ||
58 | obj-$(CONFIG_CPU_CAVIUM_OCTEON) += msi-octeon.o | ||
59 | endif | ||
diff --git a/arch/mips/pci/fixup-capcella.c b/arch/mips/pci/fixup-capcella.c index 1416bca6d1a3..1c02f5737367 100644 --- a/arch/mips/pci/fixup-capcella.c +++ b/arch/mips/pci/fixup-capcella.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * fixup-cappcela.c, The ZAO Networks Capcella specific PCI fixups. | 2 | * fixup-cappcela.c, The ZAO Networks Capcella specific PCI fixups. |
3 | * | 3 | * |
4 | * Copyright (C) 2002,2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2002,2004 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/pci/fixup-mpc30x.c b/arch/mips/pci/fixup-mpc30x.c index 591159625722..e08f49cb6875 100644 --- a/arch/mips/pci/fixup-mpc30x.c +++ b/arch/mips/pci/fixup-mpc30x.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * fixup-mpc30x.c, The Victor MP-C303/304 specific PCI fixups. | 2 | * fixup-mpc30x.c, The Victor MP-C303/304 specific PCI fixups. |
3 | * | 3 | * |
4 | * Copyright (C) 2002,2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2002,2004 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/pci/fixup-tb0219.c b/arch/mips/pci/fixup-tb0219.c index ed87733f6796..8084b17d4406 100644 --- a/arch/mips/pci/fixup-tb0219.c +++ b/arch/mips/pci/fixup-tb0219.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * fixup-tb0219.c, The TANBAC TB0219 specific PCI fixups. | 2 | * fixup-tb0219.c, The TANBAC TB0219 specific PCI fixups. |
3 | * | 3 | * |
4 | * Copyright (C) 2003 Megasolution Inc. <matsu@megasolution.jp> | 4 | * Copyright (C) 2003 Megasolution Inc. <matsu@megasolution.jp> |
5 | * Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 5 | * Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@linux-mips.org> |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify | 7 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License as published by | 8 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/pci/fixup-tb0226.c b/arch/mips/pci/fixup-tb0226.c index e3eedf4bf9bd..4196ccf3ea3d 100644 --- a/arch/mips/pci/fixup-tb0226.c +++ b/arch/mips/pci/fixup-tb0226.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * fixup-tb0226.c, The TANBAC TB0226 specific PCI fixups. | 2 | * fixup-tb0226.c, The TANBAC TB0226 specific PCI fixups. |
3 | * | 3 | * |
4 | * Copyright (C) 2002-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2002-2005 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/pci/fixup-tb0287.c b/arch/mips/pci/fixup-tb0287.c index 267ab3dc3d42..2fe29db43725 100644 --- a/arch/mips/pci/fixup-tb0287.c +++ b/arch/mips/pci/fixup-tb0287.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * fixup-tb0287.c, The TANBAC TB0287 specific PCI fixups. | 2 | * fixup-tb0287.c, The TANBAC TB0287 specific PCI fixups. |
3 | * | 3 | * |
4 | * Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2005 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/cavium-octeon/msi.c b/arch/mips/pci/msi-octeon.c index 964b03b75a8f..03742e647657 100644 --- a/arch/mips/cavium-octeon/msi.c +++ b/arch/mips/pci/msi-octeon.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2005-2007 Cavium Networks | 6 | * Copyright (C) 2005-2009 Cavium Networks |
7 | */ | 7 | */ |
8 | #include <linux/kernel.h> | 8 | #include <linux/kernel.h> |
9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
@@ -16,8 +16,7 @@ | |||
16 | #include <asm/octeon/cvmx-pci-defs.h> | 16 | #include <asm/octeon/cvmx-pci-defs.h> |
17 | #include <asm/octeon/cvmx-npei-defs.h> | 17 | #include <asm/octeon/cvmx-npei-defs.h> |
18 | #include <asm/octeon/cvmx-pexp-defs.h> | 18 | #include <asm/octeon/cvmx-pexp-defs.h> |
19 | 19 | #include <asm/octeon/pci-octeon.h> | |
20 | #include "pci-common.h" | ||
21 | 20 | ||
22 | /* | 21 | /* |
23 | * Each bit in msi_free_irq_bitmask represents a MSI interrupt that is | 22 | * Each bit in msi_free_irq_bitmask represents a MSI interrupt that is |
@@ -47,8 +46,8 @@ static DEFINE_SPINLOCK(msi_free_irq_bitmask_lock); | |||
47 | * programming the MSI control bits [6:4] before calling | 46 | * programming the MSI control bits [6:4] before calling |
48 | * pci_enable_msi(). | 47 | * pci_enable_msi(). |
49 | * | 48 | * |
50 | * @param dev Device requesting MSI interrupts | 49 | * @dev: Device requesting MSI interrupts |
51 | * @param desc MSI descriptor | 50 | * @desc: MSI descriptor |
52 | * | 51 | * |
53 | * Returns 0 on success. | 52 | * Returns 0 on success. |
54 | */ | 53 | */ |
@@ -213,14 +212,9 @@ void arch_teardown_msi_irq(unsigned int irq) | |||
213 | } | 212 | } |
214 | 213 | ||
215 | 214 | ||
216 | /** | 215 | /* |
217 | * Called by the interrupt handling code when an MSI interrupt | 216 | * Called by the interrupt handling code when an MSI interrupt |
218 | * occurs. | 217 | * occurs. |
219 | * | ||
220 | * @param cpl | ||
221 | * @param dev_id | ||
222 | * | ||
223 | * @return | ||
224 | */ | 218 | */ |
225 | static irqreturn_t octeon_msi_interrupt(int cpl, void *dev_id) | 219 | static irqreturn_t octeon_msi_interrupt(int cpl, void *dev_id) |
226 | { | 220 | { |
@@ -256,31 +250,37 @@ static irqreturn_t octeon_msi_interrupt(int cpl, void *dev_id) | |||
256 | } | 250 | } |
257 | 251 | ||
258 | 252 | ||
259 | /** | 253 | /* |
260 | * Initializes the MSI interrupt handling code | 254 | * Initializes the MSI interrupt handling code |
261 | * | ||
262 | * @return | ||
263 | */ | 255 | */ |
264 | int octeon_msi_initialize(void) | 256 | int octeon_msi_initialize(void) |
265 | { | 257 | { |
266 | int r; | ||
267 | if (octeon_has_feature(OCTEON_FEATURE_PCIE)) { | 258 | if (octeon_has_feature(OCTEON_FEATURE_PCIE)) { |
268 | r = request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt, | 259 | if (request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt, |
269 | IRQF_SHARED, | 260 | IRQF_SHARED, |
270 | "MSI[0:63]", octeon_msi_interrupt); | 261 | "MSI[0:63]", octeon_msi_interrupt)) |
262 | panic("request_irq(OCTEON_IRQ_PCI_MSI0) failed"); | ||
271 | } else if (octeon_is_pci_host()) { | 263 | } else if (octeon_is_pci_host()) { |
272 | r = request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt, | 264 | if (request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt, |
273 | IRQF_SHARED, | 265 | IRQF_SHARED, |
274 | "MSI[0:15]", octeon_msi_interrupt); | 266 | "MSI[0:15]", octeon_msi_interrupt)) |
275 | r += request_irq(OCTEON_IRQ_PCI_MSI1, octeon_msi_interrupt, | 267 | panic("request_irq(OCTEON_IRQ_PCI_MSI0) failed"); |
276 | IRQF_SHARED, | 268 | |
277 | "MSI[16:31]", octeon_msi_interrupt); | 269 | if (request_irq(OCTEON_IRQ_PCI_MSI1, octeon_msi_interrupt, |
278 | r += request_irq(OCTEON_IRQ_PCI_MSI2, octeon_msi_interrupt, | 270 | IRQF_SHARED, |
279 | IRQF_SHARED, | 271 | "MSI[16:31]", octeon_msi_interrupt)) |
280 | "MSI[32:47]", octeon_msi_interrupt); | 272 | panic("request_irq(OCTEON_IRQ_PCI_MSI1) failed"); |
281 | r += request_irq(OCTEON_IRQ_PCI_MSI3, octeon_msi_interrupt, | 273 | |
282 | IRQF_SHARED, | 274 | if (request_irq(OCTEON_IRQ_PCI_MSI2, octeon_msi_interrupt, |
283 | "MSI[48:63]", octeon_msi_interrupt); | 275 | IRQF_SHARED, |
276 | "MSI[32:47]", octeon_msi_interrupt)) | ||
277 | panic("request_irq(OCTEON_IRQ_PCI_MSI2) failed"); | ||
278 | |||
279 | if (request_irq(OCTEON_IRQ_PCI_MSI3, octeon_msi_interrupt, | ||
280 | IRQF_SHARED, | ||
281 | "MSI[48:63]", octeon_msi_interrupt)) | ||
282 | panic("request_irq(OCTEON_IRQ_PCI_MSI3) failed"); | ||
283 | |||
284 | } | 284 | } |
285 | return 0; | 285 | return 0; |
286 | } | 286 | } |
diff --git a/arch/mips/pci/ops-vr41xx.c b/arch/mips/pci/ops-vr41xx.c index 900c6b32576c..28962a7c6606 100644 --- a/arch/mips/pci/ops-vr41xx.c +++ b/arch/mips/pci/ops-vr41xx.c | |||
@@ -2,8 +2,8 @@ | |||
2 | * ops-vr41xx.c, PCI configuration routines for the PCIU of NEC VR4100 series. | 2 | * ops-vr41xx.c, PCI configuration routines for the PCIU of NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2001-2003 MontaVista Software Inc. | 4 | * Copyright (C) 2001-2003 MontaVista Software Inc. |
5 | * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> | 5 | * Author: Yoichi Yuasa <source@mvista.com> |
6 | * Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 6 | * Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@linux-mips.org> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
@@ -21,7 +21,7 @@ | |||
21 | */ | 21 | */ |
22 | /* | 22 | /* |
23 | * Changes: | 23 | * Changes: |
24 | * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> | 24 | * MontaVista Software Inc. <source@mvista.com> |
25 | * - New creation, NEC VR4122 and VR4131 are supported. | 25 | * - New creation, NEC VR4122 and VR4131 are supported. |
26 | */ | 26 | */ |
27 | #include <linux/pci.h> | 27 | #include <linux/pci.h> |
diff --git a/arch/mips/pci/pci-ip27.c b/arch/mips/pci/pci-ip27.c index dda6f2058665..a0e726eb039a 100644 --- a/arch/mips/pci/pci-ip27.c +++ b/arch/mips/pci/pci-ip27.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/pci.h> | 12 | #include <linux/pci.h> |
13 | #include <linux/smp.h> | ||
13 | #include <asm/sn/arch.h> | 14 | #include <asm/sn/arch.h> |
14 | #include <asm/pci/bridge.h> | 15 | #include <asm/pci/bridge.h> |
15 | #include <asm/paccess.h> | 16 | #include <asm/paccess.h> |
diff --git a/arch/mips/cavium-octeon/pci.c b/arch/mips/pci/pci-octeon.c index 67c0ff5e92f1..9cb0c807f564 100644 --- a/arch/mips/cavium-octeon/pci.c +++ b/arch/mips/pci/pci-octeon.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2005-2007 Cavium Networks | 6 | * Copyright (C) 2005-2009 Cavium Networks |
7 | */ | 7 | */ |
8 | #include <linux/kernel.h> | 8 | #include <linux/kernel.h> |
9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
@@ -17,8 +17,7 @@ | |||
17 | #include <asm/octeon/octeon.h> | 17 | #include <asm/octeon/octeon.h> |
18 | #include <asm/octeon/cvmx-npi-defs.h> | 18 | #include <asm/octeon/cvmx-npi-defs.h> |
19 | #include <asm/octeon/cvmx-pci-defs.h> | 19 | #include <asm/octeon/cvmx-pci-defs.h> |
20 | 20 | #include <asm/octeon/pci-octeon.h> | |
21 | #include "pci-common.h" | ||
22 | 21 | ||
23 | #define USE_OCTEON_INTERNAL_ARBITER | 22 | #define USE_OCTEON_INTERNAL_ARBITER |
24 | 23 | ||
@@ -54,6 +53,126 @@ union octeon_pci_address { | |||
54 | } s; | 53 | } s; |
55 | }; | 54 | }; |
56 | 55 | ||
56 | int __initdata (*octeon_pcibios_map_irq)(const struct pci_dev *dev, | ||
57 | u8 slot, u8 pin); | ||
58 | enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID; | ||
59 | |||
60 | /** | ||
61 | * Map a PCI device to the appropriate interrupt line | ||
62 | * | ||
63 | * @dev: The Linux PCI device structure for the device to map | ||
64 | * @slot: The slot number for this device on __BUS 0__. Linux | ||
65 | * enumerates through all the bridges and figures out the | ||
66 | * slot on Bus 0 where this device eventually hooks to. | ||
67 | * @pin: The PCI interrupt pin read from the device, then swizzled | ||
68 | * as it goes through each bridge. | ||
69 | * Returns Interrupt number for the device | ||
70 | */ | ||
71 | int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | ||
72 | { | ||
73 | if (octeon_pcibios_map_irq) | ||
74 | return octeon_pcibios_map_irq(dev, slot, pin); | ||
75 | else | ||
76 | panic("octeon_pcibios_map_irq not set."); | ||
77 | } | ||
78 | |||
79 | |||
80 | /* | ||
81 | * Called to perform platform specific PCI setup | ||
82 | */ | ||
83 | int pcibios_plat_dev_init(struct pci_dev *dev) | ||
84 | { | ||
85 | uint16_t config; | ||
86 | uint32_t dconfig; | ||
87 | int pos; | ||
88 | /* | ||
89 | * Force the Cache line setting to 64 bytes. The standard | ||
90 | * Linux bus scan doesn't seem to set it. Octeon really has | ||
91 | * 128 byte lines, but Intel bridges get really upset if you | ||
92 | * try and set values above 64 bytes. Value is specified in | ||
93 | * 32bit words. | ||
94 | */ | ||
95 | pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 64 / 4); | ||
96 | /* Set latency timers for all devices */ | ||
97 | pci_write_config_byte(dev, PCI_LATENCY_TIMER, 48); | ||
98 | |||
99 | /* Enable reporting System errors and parity errors on all devices */ | ||
100 | /* Enable parity checking and error reporting */ | ||
101 | pci_read_config_word(dev, PCI_COMMAND, &config); | ||
102 | config |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; | ||
103 | pci_write_config_word(dev, PCI_COMMAND, config); | ||
104 | |||
105 | if (dev->subordinate) { | ||
106 | /* Set latency timers on sub bridges */ | ||
107 | pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER, 48); | ||
108 | /* More bridge error detection */ | ||
109 | pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &config); | ||
110 | config |= PCI_BRIDGE_CTL_PARITY | PCI_BRIDGE_CTL_SERR; | ||
111 | pci_write_config_word(dev, PCI_BRIDGE_CONTROL, config); | ||
112 | } | ||
113 | |||
114 | /* Enable the PCIe normal error reporting */ | ||
115 | pos = pci_find_capability(dev, PCI_CAP_ID_EXP); | ||
116 | if (pos) { | ||
117 | /* Update Device Control */ | ||
118 | pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &config); | ||
119 | /* Correctable Error Reporting */ | ||
120 | config |= PCI_EXP_DEVCTL_CERE; | ||
121 | /* Non-Fatal Error Reporting */ | ||
122 | config |= PCI_EXP_DEVCTL_NFERE; | ||
123 | /* Fatal Error Reporting */ | ||
124 | config |= PCI_EXP_DEVCTL_FERE; | ||
125 | /* Unsupported Request */ | ||
126 | config |= PCI_EXP_DEVCTL_URRE; | ||
127 | pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, config); | ||
128 | } | ||
129 | |||
130 | /* Find the Advanced Error Reporting capability */ | ||
131 | pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR); | ||
132 | if (pos) { | ||
133 | /* Clear Uncorrectable Error Status */ | ||
134 | pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS, | ||
135 | &dconfig); | ||
136 | pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS, | ||
137 | dconfig); | ||
138 | /* Enable reporting of all uncorrectable errors */ | ||
139 | /* Uncorrectable Error Mask - turned on bits disable errors */ | ||
140 | pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, 0); | ||
141 | /* | ||
142 | * Leave severity at HW default. This only controls if | ||
143 | * errors are reported as uncorrectable or | ||
144 | * correctable, not if the error is reported. | ||
145 | */ | ||
146 | /* PCI_ERR_UNCOR_SEVER - Uncorrectable Error Severity */ | ||
147 | /* Clear Correctable Error Status */ | ||
148 | pci_read_config_dword(dev, pos + PCI_ERR_COR_STATUS, &dconfig); | ||
149 | pci_write_config_dword(dev, pos + PCI_ERR_COR_STATUS, dconfig); | ||
150 | /* Enable reporting of all correctable errors */ | ||
151 | /* Correctable Error Mask - turned on bits disable errors */ | ||
152 | pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, 0); | ||
153 | /* Advanced Error Capabilities */ | ||
154 | pci_read_config_dword(dev, pos + PCI_ERR_CAP, &dconfig); | ||
155 | /* ECRC Generation Enable */ | ||
156 | if (config & PCI_ERR_CAP_ECRC_GENC) | ||
157 | config |= PCI_ERR_CAP_ECRC_GENE; | ||
158 | /* ECRC Check Enable */ | ||
159 | if (config & PCI_ERR_CAP_ECRC_CHKC) | ||
160 | config |= PCI_ERR_CAP_ECRC_CHKE; | ||
161 | pci_write_config_dword(dev, pos + PCI_ERR_CAP, dconfig); | ||
162 | /* PCI_ERR_HEADER_LOG - Header Log Register (16 bytes) */ | ||
163 | /* Report all errors to the root complex */ | ||
164 | pci_write_config_dword(dev, pos + PCI_ERR_ROOT_COMMAND, | ||
165 | PCI_ERR_ROOT_CMD_COR_EN | | ||
166 | PCI_ERR_ROOT_CMD_NONFATAL_EN | | ||
167 | PCI_ERR_ROOT_CMD_FATAL_EN); | ||
168 | /* Clear the Root status register */ | ||
169 | pci_read_config_dword(dev, pos + PCI_ERR_ROOT_STATUS, &dconfig); | ||
170 | pci_write_config_dword(dev, pos + PCI_ERR_ROOT_STATUS, dconfig); | ||
171 | } | ||
172 | |||
173 | return 0; | ||
174 | } | ||
175 | |||
57 | /** | 176 | /** |
58 | * Return the mapping of PCI device number to IRQ line. Each | 177 | * Return the mapping of PCI device number to IRQ line. Each |
59 | * character in the return string represents the interrupt | 178 | * character in the return string represents the interrupt |
@@ -136,9 +255,8 @@ int __init octeon_pci_pcibios_map_irq(const struct pci_dev *dev, | |||
136 | } | 255 | } |
137 | 256 | ||
138 | 257 | ||
139 | /** | 258 | /* |
140 | * Read a value from configuration space | 259 | * Read a value from configuration space |
141 | * | ||
142 | */ | 260 | */ |
143 | static int octeon_read_config(struct pci_bus *bus, unsigned int devfn, | 261 | static int octeon_read_config(struct pci_bus *bus, unsigned int devfn, |
144 | int reg, int size, u32 *val) | 262 | int reg, int size, u32 *val) |
@@ -174,15 +292,8 @@ static int octeon_read_config(struct pci_bus *bus, unsigned int devfn, | |||
174 | } | 292 | } |
175 | 293 | ||
176 | 294 | ||
177 | /** | 295 | /* |
178 | * Write a value to PCI configuration space | 296 | * Write a value to PCI configuration space |
179 | * | ||
180 | * @bus: | ||
181 | * @devfn: | ||
182 | * @reg: | ||
183 | * @size: | ||
184 | * @val: | ||
185 | * Returns | ||
186 | */ | 297 | */ |
187 | static int octeon_write_config(struct pci_bus *bus, unsigned int devfn, | 298 | static int octeon_write_config(struct pci_bus *bus, unsigned int devfn, |
188 | int reg, int size, u32 val) | 299 | int reg, int size, u32 val) |
@@ -251,10 +362,8 @@ static struct pci_controller octeon_pci_controller = { | |||
251 | }; | 362 | }; |
252 | 363 | ||
253 | 364 | ||
254 | /** | 365 | /* |
255 | * Low level initialize the Octeon PCI controller | 366 | * Low level initialize the Octeon PCI controller |
256 | * | ||
257 | * Returns | ||
258 | */ | 367 | */ |
259 | static void octeon_pci_initialize(void) | 368 | static void octeon_pci_initialize(void) |
260 | { | 369 | { |
@@ -398,7 +507,7 @@ static void octeon_pci_initialize(void) | |||
398 | pci_int_arb_cfg.s.en = 1; /* Internal arbiter enable */ | 507 | pci_int_arb_cfg.s.en = 1; /* Internal arbiter enable */ |
399 | cvmx_write_csr(CVMX_NPI_PCI_INT_ARB_CFG, pci_int_arb_cfg.u64); | 508 | cvmx_write_csr(CVMX_NPI_PCI_INT_ARB_CFG, pci_int_arb_cfg.u64); |
400 | } | 509 | } |
401 | #endif /* USE_OCTEON_INTERNAL_ARBITER */ | 510 | #endif /* USE_OCTEON_INTERNAL_ARBITER */ |
402 | 511 | ||
403 | /* | 512 | /* |
404 | * Preferrably written to 1 to set MLTD. [RDSATI,TRTAE, | 513 | * Preferrably written to 1 to set MLTD. [RDSATI,TRTAE, |
@@ -457,10 +566,8 @@ static void octeon_pci_initialize(void) | |||
457 | } | 566 | } |
458 | 567 | ||
459 | 568 | ||
460 | /** | 569 | /* |
461 | * Initialize the Octeon PCI controller | 570 | * Initialize the Octeon PCI controller |
462 | * | ||
463 | * Returns | ||
464 | */ | 571 | */ |
465 | static int __init octeon_pci_setup(void) | 572 | static int __init octeon_pci_setup(void) |
466 | { | 573 | { |
diff --git a/arch/mips/pci/pci-vr41xx.c b/arch/mips/pci/pci-vr41xx.c index d1e049b55f34..56525711f8b7 100644 --- a/arch/mips/pci/pci-vr41xx.c +++ b/arch/mips/pci/pci-vr41xx.c | |||
@@ -2,8 +2,8 @@ | |||
2 | * pci-vr41xx.c, PCI Control Unit routines for the NEC VR4100 series. | 2 | * pci-vr41xx.c, PCI Control Unit routines for the NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2001-2003 MontaVista Software Inc. | 4 | * Copyright (C) 2001-2003 MontaVista Software Inc. |
5 | * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> | 5 | * Author: Yoichi Yuasa <source@mvista.com> |
6 | * Copyright (C) 2004-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 6 | * Copyright (C) 2004-2008 Yoichi Yuasa <yuasa@linux-mips.org> |
7 | * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org) | 7 | * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org) |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
@@ -22,7 +22,7 @@ | |||
22 | */ | 22 | */ |
23 | /* | 23 | /* |
24 | * Changes: | 24 | * Changes: |
25 | * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> | 25 | * MontaVista Software Inc. <source@mvista.com> |
26 | * - New creation, NEC VR4122 and VR4131 are supported. | 26 | * - New creation, NEC VR4122 and VR4131 are supported. |
27 | */ | 27 | */ |
28 | #include <linux/init.h> | 28 | #include <linux/init.h> |
diff --git a/arch/mips/pci/pci-vr41xx.h b/arch/mips/pci/pci-vr41xx.h index 8a35e32b8376..6b1ae2eb1c06 100644 --- a/arch/mips/pci/pci-vr41xx.h +++ b/arch/mips/pci/pci-vr41xx.h | |||
@@ -2,8 +2,8 @@ | |||
2 | * pci-vr41xx.h, Include file for PCI Control Unit of the NEC VR4100 series. | 2 | * pci-vr41xx.h, Include file for PCI Control Unit of the NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2002 MontaVista Software Inc. | 4 | * Copyright (C) 2002 MontaVista Software Inc. |
5 | * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> | 5 | * Author: Yoichi Yuasa <source@mvista.com> |
6 | * Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 6 | * Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@linux-mips.org> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/cavium-octeon/pcie.c b/arch/mips/pci/pcie-octeon.c index 49d14081b3b5..75262247f3e4 100644 --- a/arch/mips/cavium-octeon/pcie.c +++ b/arch/mips/pci/pcie-octeon.c | |||
@@ -18,8 +18,7 @@ | |||
18 | #include <asm/octeon/cvmx-pescx-defs.h> | 18 | #include <asm/octeon/cvmx-pescx-defs.h> |
19 | #include <asm/octeon/cvmx-pexp-defs.h> | 19 | #include <asm/octeon/cvmx-pexp-defs.h> |
20 | #include <asm/octeon/cvmx-helper-errata.h> | 20 | #include <asm/octeon/cvmx-helper-errata.h> |
21 | 21 | #include <asm/octeon/pci-octeon.h> | |
22 | #include "pci-common.h" | ||
23 | 22 | ||
24 | union cvmx_pcie_address { | 23 | union cvmx_pcie_address { |
25 | uint64_t u64; | 24 | uint64_t u64; |
@@ -976,13 +975,13 @@ static int cvmx_pcie_rc_initialize(int pcie_port) | |||
976 | /** | 975 | /** |
977 | * Map a PCI device to the appropriate interrupt line | 976 | * Map a PCI device to the appropriate interrupt line |
978 | * | 977 | * |
979 | * @param dev The Linux PCI device structure for the device to map | 978 | * @dev: The Linux PCI device structure for the device to map |
980 | * @param slot The slot number for this device on __BUS 0__. Linux | 979 | * @slot: The slot number for this device on __BUS 0__. Linux |
981 | * enumerates through all the bridges and figures out the | 980 | * enumerates through all the bridges and figures out the |
982 | * slot on Bus 0 where this device eventually hooks to. | 981 | * slot on Bus 0 where this device eventually hooks to. |
983 | * @param pin The PCI interrupt pin read from the device, then swizzled | 982 | * @pin: The PCI interrupt pin read from the device, then swizzled |
984 | * as it goes through each bridge. | 983 | * as it goes through each bridge. |
985 | * @return Interrupt number for the device | 984 | * Returns Interrupt number for the device |
986 | */ | 985 | */ |
987 | int __init octeon_pcie_pcibios_map_irq(const struct pci_dev *dev, | 986 | int __init octeon_pcie_pcibios_map_irq(const struct pci_dev *dev, |
988 | u8 slot, u8 pin) | 987 | u8 slot, u8 pin) |
@@ -1025,12 +1024,12 @@ int __init octeon_pcie_pcibios_map_irq(const struct pci_dev *dev, | |||
1025 | /** | 1024 | /** |
1026 | * Read a value from configuration space | 1025 | * Read a value from configuration space |
1027 | * | 1026 | * |
1028 | * @param bus | 1027 | * @bus: |
1029 | * @param devfn | 1028 | * @devfn: |
1030 | * @param reg | 1029 | * @reg: |
1031 | * @param size | 1030 | * @size: |
1032 | * @param val | 1031 | * @val: |
1033 | * @return | 1032 | * Returns |
1034 | */ | 1033 | */ |
1035 | static inline int octeon_pcie_read_config(int pcie_port, struct pci_bus *bus, | 1034 | static inline int octeon_pcie_read_config(int pcie_port, struct pci_bus *bus, |
1036 | unsigned int devfn, int reg, int size, | 1035 | unsigned int devfn, int reg, int size, |
@@ -1156,12 +1155,12 @@ static int octeon_pcie1_read_config(struct pci_bus *bus, unsigned int devfn, | |||
1156 | /** | 1155 | /** |
1157 | * Write a value to PCI configuration space | 1156 | * Write a value to PCI configuration space |
1158 | * | 1157 | * |
1159 | * @param bus | 1158 | * @bus: |
1160 | * @param devfn | 1159 | * @devfn: |
1161 | * @param reg | 1160 | * @reg: |
1162 | * @param size | 1161 | * @size: |
1163 | * @param val | 1162 | * @val: |
1164 | * @return | 1163 | * Returns |
1165 | */ | 1164 | */ |
1166 | static inline int octeon_pcie_write_config(int pcie_port, struct pci_bus *bus, | 1165 | static inline int octeon_pcie_write_config(int pcie_port, struct pci_bus *bus, |
1167 | unsigned int devfn, int reg, | 1166 | unsigned int devfn, int reg, |
@@ -1254,7 +1253,7 @@ static struct pci_controller octeon_pcie1_controller = { | |||
1254 | /** | 1253 | /** |
1255 | * Initialize the Octeon PCIe controllers | 1254 | * Initialize the Octeon PCIe controllers |
1256 | * | 1255 | * |
1257 | * @return | 1256 | * Returns |
1258 | */ | 1257 | */ |
1259 | static int __init octeon_pcie_setup(void) | 1258 | static int __init octeon_pcie_setup(void) |
1260 | { | 1259 | { |
diff --git a/arch/mips/pmc-sierra/yosemite/smp.c b/arch/mips/pmc-sierra/yosemite/smp.c index f78c29b68d77..8ace27716232 100644 --- a/arch/mips/pmc-sierra/yosemite/smp.c +++ b/arch/mips/pmc-sierra/yosemite/smp.c | |||
@@ -1,5 +1,6 @@ | |||
1 | #include <linux/linkage.h> | 1 | #include <linux/linkage.h> |
2 | #include <linux/sched.h> | 2 | #include <linux/sched.h> |
3 | #include <linux/smp.h> | ||
3 | 4 | ||
4 | #include <asm/pmon.h> | 5 | #include <asm/pmon.h> |
5 | #include <asm/titan_dep.h> | 6 | #include <asm/titan_dep.h> |
diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S index 486bd3fd01a1..4b8174b382d7 100644 --- a/arch/mips/power/hibernate.S +++ b/arch/mips/power/hibernate.S | |||
@@ -43,15 +43,6 @@ LEAF(swsusp_arch_resume) | |||
43 | bne t1, t3, 1b | 43 | bne t1, t3, 1b |
44 | PTR_L t0, PBE_NEXT(t0) | 44 | PTR_L t0, PBE_NEXT(t0) |
45 | bnez t0, 0b | 45 | bnez t0, 0b |
46 | /* flush caches to make sure context is in memory */ | ||
47 | PTR_L t0, __flush_cache_all | ||
48 | jalr t0 | ||
49 | /* flush tlb entries */ | ||
50 | #ifdef CONFIG_SMP | ||
51 | jal flush_tlb_all | ||
52 | #else | ||
53 | jal local_flush_tlb_all | ||
54 | #endif | ||
55 | PTR_LA t0, saved_regs | 46 | PTR_LA t0, saved_regs |
56 | PTR_L ra, PT_R31(t0) | 47 | PTR_L ra, PT_R31(t0) |
57 | PTR_L sp, PT_R29(t0) | 48 | PTR_L sp, PT_R29(t0) |
diff --git a/arch/mips/sgi-ip27/ip27-init.c b/arch/mips/sgi-ip27/ip27-init.c index 4a500e8cd3cc..51d3a4f2d7e1 100644 --- a/arch/mips/sgi-ip27/ip27-init.c +++ b/arch/mips/sgi-ip27/ip27-init.c | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
12 | #include <linux/smp.h> | ||
12 | #include <linux/mm.h> | 13 | #include <linux/mm.h> |
13 | #include <linux/module.h> | 14 | #include <linux/module.h> |
14 | #include <linux/cpumask.h> | 15 | #include <linux/cpumask.h> |
diff --git a/arch/mips/sgi-ip27/ip27-irq.c b/arch/mips/sgi-ip27/ip27-irq.c index 1bb692a3b319..c1c8e40d65d6 100644 --- a/arch/mips/sgi-ip27/ip27-irq.c +++ b/arch/mips/sgi-ip27/ip27-irq.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/ioport.h> | 18 | #include <linux/ioport.h> |
19 | #include <linux/timex.h> | 19 | #include <linux/timex.h> |
20 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
21 | #include <linux/smp.h> | ||
21 | #include <linux/random.h> | 22 | #include <linux/random.h> |
22 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
23 | #include <linux/kernel_stat.h> | 24 | #include <linux/kernel_stat.h> |
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c index f10a7cd64f7e..6d0e59ffba2e 100644 --- a/arch/mips/sgi-ip27/ip27-timer.c +++ b/arch/mips/sgi-ip27/ip27-timer.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/interrupt.h> | 10 | #include <linux/interrupt.h> |
11 | #include <linux/kernel_stat.h> | 11 | #include <linux/kernel_stat.h> |
12 | #include <linux/param.h> | 12 | #include <linux/param.h> |
13 | #include <linux/smp.h> | ||
13 | #include <linux/time.h> | 14 | #include <linux/time.h> |
14 | #include <linux/timex.h> | 15 | #include <linux/timex.h> |
15 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
diff --git a/arch/mips/sgi-ip27/ip27-xtalk.c b/arch/mips/sgi-ip27/ip27-xtalk.c index 6ae64e8dfc40..5e871e75a8d9 100644 --- a/arch/mips/sgi-ip27/ip27-xtalk.c +++ b/arch/mips/sgi-ip27/ip27-xtalk.c | |||
@@ -9,6 +9,7 @@ | |||
9 | 9 | ||
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/smp.h> | ||
12 | #include <asm/sn/types.h> | 13 | #include <asm/sn/types.h> |
13 | #include <asm/sn/klconfig.h> | 14 | #include <asm/sn/klconfig.h> |
14 | #include <asm/sn/hub.h> | 15 | #include <asm/sn/hub.h> |
diff --git a/arch/mips/sibyte/bcm1480/irq.c b/arch/mips/sibyte/bcm1480/irq.c index 690de06bde90..ba59839a021e 100644 --- a/arch/mips/sibyte/bcm1480/irq.c +++ b/arch/mips/sibyte/bcm1480/irq.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | #include <linux/linkage.h> | 20 | #include <linux/linkage.h> |
21 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
22 | #include <linux/smp.h> | ||
22 | #include <linux/spinlock.h> | 23 | #include <linux/spinlock.h> |
23 | #include <linux/mm.h> | 24 | #include <linux/mm.h> |
24 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
diff --git a/arch/mips/sibyte/common/cfe_console.c b/arch/mips/sibyte/common/cfe_console.c index 81e3d54376e9..1ad2da103fe9 100644 --- a/arch/mips/sibyte/common/cfe_console.c +++ b/arch/mips/sibyte/common/cfe_console.c | |||
@@ -51,12 +51,13 @@ static int cfe_console_setup(struct console *cons, char *str) | |||
51 | setleds("u0cn"); | 51 | setleds("u0cn"); |
52 | } else if (!strcmp(consdev, "uart1")) { | 52 | } else if (!strcmp(consdev, "uart1")) { |
53 | setleds("u1cn"); | 53 | setleds("u1cn"); |
54 | } else | ||
54 | #endif | 55 | #endif |
55 | #ifdef CONFIG_VGA_CONSOLE | 56 | #ifdef CONFIG_VGA_CONSOLE |
56 | } else if (!strcmp(consdev, "pcconsole0")) { | 57 | if (!strcmp(consdev, "pcconsole0")) { |
57 | setleds("pccn"); | 58 | setleds("pccn"); |
58 | #endif | ||
59 | } else | 59 | } else |
60 | #endif | ||
60 | return -ENODEV; | 61 | return -ENODEV; |
61 | } | 62 | } |
62 | return 0; | 63 | return 0; |
diff --git a/arch/mips/sni/time.c b/arch/mips/sni/time.c index 69f5f88711cc..0d9ec1a5c24a 100644 --- a/arch/mips/sni/time.c +++ b/arch/mips/sni/time.c | |||
@@ -1,5 +1,6 @@ | |||
1 | #include <linux/types.h> | 1 | #include <linux/types.h> |
2 | #include <linux/interrupt.h> | 2 | #include <linux/interrupt.h> |
3 | #include <linux/smp.h> | ||
3 | #include <linux/time.h> | 4 | #include <linux/time.h> |
4 | #include <linux/clockchips.h> | 5 | #include <linux/clockchips.h> |
5 | 6 | ||
diff --git a/arch/mips/vr41xx/casio-e55/setup.c b/arch/mips/vr41xx/casio-e55/setup.c index 6d9bab890587..719f4a5b9844 100644 --- a/arch/mips/vr41xx/casio-e55/setup.c +++ b/arch/mips/vr41xx/casio-e55/setup.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * setup.c, Setup for the CASIO CASSIOPEIA E-11/15/55/65. | 2 | * setup.c, Setup for the CASIO CASSIOPEIA E-11/15/55/65. |
3 | * | 3 | * |
4 | * Copyright (C) 2002-2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2002-2006 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/vr41xx/common/bcu.c b/arch/mips/vr41xx/common/bcu.c index d77c330a0d59..6346c59c9f9d 100644 --- a/arch/mips/vr41xx/common/bcu.c +++ b/arch/mips/vr41xx/common/bcu.c | |||
@@ -2,8 +2,8 @@ | |||
2 | * bcu.c, Bus Control Unit routines for the NEC VR4100 series. | 2 | * bcu.c, Bus Control Unit routines for the NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2002 MontaVista Software Inc. | 4 | * Copyright (C) 2002 MontaVista Software Inc. |
5 | * Author: Yoichi Yuasa <yyuasa@mvista.com, or source@mvista.com> | 5 | * Author: Yoichi Yuasa <source@mvista.com> |
6 | * Copyright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 6 | * Copyright (C) 2003-2005 Yoichi Yuasa <yuasa@linux-mips.org> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
@@ -21,11 +21,11 @@ | |||
21 | */ | 21 | */ |
22 | /* | 22 | /* |
23 | * Changes: | 23 | * Changes: |
24 | * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> | 24 | * MontaVista Software Inc. <source@mvista.com> |
25 | * - New creation, NEC VR4122 and VR4131 are supported. | 25 | * - New creation, NEC VR4122 and VR4131 are supported. |
26 | * - Added support for NEC VR4111 and VR4121. | 26 | * - Added support for NEC VR4111 and VR4121. |
27 | * | 27 | * |
28 | * Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 28 | * Yoichi Yuasa <yuasa@linux-mips.org> |
29 | * - Added support for NEC VR4133. | 29 | * - Added support for NEC VR4133. |
30 | */ | 30 | */ |
31 | #include <linux/kernel.h> | 31 | #include <linux/kernel.h> |
diff --git a/arch/mips/vr41xx/common/cmu.c b/arch/mips/vr41xx/common/cmu.c index ad0e8e3409d9..8ba7d04a5ec5 100644 --- a/arch/mips/vr41xx/common/cmu.c +++ b/arch/mips/vr41xx/common/cmu.c | |||
@@ -2,8 +2,8 @@ | |||
2 | * cmu.c, Clock Mask Unit routines for the NEC VR4100 series. | 2 | * cmu.c, Clock Mask Unit routines for the NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2001-2002 MontaVista Software Inc. | 4 | * Copyright (C) 2001-2002 MontaVista Software Inc. |
5 | * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> | 5 | * Author: Yoichi Yuasa <source@mvista.com> |
6 | * Copuright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 6 | * Copuright (C) 2003-2005 Yoichi Yuasa <yuasa@linux-mips.org> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
@@ -21,11 +21,11 @@ | |||
21 | */ | 21 | */ |
22 | /* | 22 | /* |
23 | * Changes: | 23 | * Changes: |
24 | * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> | 24 | * MontaVista Software Inc. <source@mvista.com> |
25 | * - New creation, NEC VR4122 and VR4131 are supported. | 25 | * - New creation, NEC VR4122 and VR4131 are supported. |
26 | * - Added support for NEC VR4111 and VR4121. | 26 | * - Added support for NEC VR4111 and VR4121. |
27 | * | 27 | * |
28 | * Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 28 | * Yoichi Yuasa <yuasa@linux-mips.org> |
29 | * - Added support for NEC VR4133. | 29 | * - Added support for NEC VR4133. |
30 | */ | 30 | */ |
31 | #include <linux/init.h> | 31 | #include <linux/init.h> |
diff --git a/arch/mips/vr41xx/common/giu.c b/arch/mips/vr41xx/common/giu.c index 2b272f1496fe..22cc6f2100a1 100644 --- a/arch/mips/vr41xx/common/giu.c +++ b/arch/mips/vr41xx/common/giu.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * NEC VR4100 series GIU platform device. | 2 | * NEC VR4100 series GIU platform device. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/vr41xx/common/icu.c b/arch/mips/vr41xx/common/icu.c index 3f23d9fda662..6d39e222b170 100644 --- a/arch/mips/vr41xx/common/icu.c +++ b/arch/mips/vr41xx/common/icu.c | |||
@@ -2,8 +2,8 @@ | |||
2 | * icu.c, Interrupt Control Unit routines for the NEC VR4100 series. | 2 | * icu.c, Interrupt Control Unit routines for the NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2001-2002 MontaVista Software Inc. | 4 | * Copyright (C) 2001-2002 MontaVista Software Inc. |
5 | * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> | 5 | * Author: Yoichi Yuasa <source@mvista.com> |
6 | * Copyright (C) 2003-2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 6 | * Copyright (C) 2003-2006 Yoichi Yuasa <yuasa@linux-mips.org> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
@@ -21,11 +21,11 @@ | |||
21 | */ | 21 | */ |
22 | /* | 22 | /* |
23 | * Changes: | 23 | * Changes: |
24 | * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> | 24 | * MontaVista Software Inc. <source@mvista.com> |
25 | * - New creation, NEC VR4122 and VR4131 are supported. | 25 | * - New creation, NEC VR4122 and VR4131 are supported. |
26 | * - Added support for NEC VR4111 and VR4121. | 26 | * - Added support for NEC VR4111 and VR4121. |
27 | * | 27 | * |
28 | * Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 28 | * Yoichi Yuasa <yuasa@linux-mips.org> |
29 | * - Coped with INTASSIGN of NEC VR4133. | 29 | * - Coped with INTASSIGN of NEC VR4133. |
30 | */ | 30 | */ |
31 | #include <linux/errno.h> | 31 | #include <linux/errno.h> |
diff --git a/arch/mips/vr41xx/common/init.c b/arch/mips/vr41xx/common/init.c index c64995342ba8..1386e6f081c8 100644 --- a/arch/mips/vr41xx/common/init.c +++ b/arch/mips/vr41xx/common/init.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * init.c, Common initialization routines for NEC VR4100 series. | 2 | * init.c, Common initialization routines for NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2003-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2003-2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/vr41xx/common/irq.c b/arch/mips/vr41xx/common/irq.c index 9cc389109b19..bef06872f012 100644 --- a/arch/mips/vr41xx/common/irq.c +++ b/arch/mips/vr41xx/common/irq.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Interrupt handing routines for NEC VR4100 series. | 2 | * Interrupt handing routines for NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2005-2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2005-2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/vr41xx/common/pmu.c b/arch/mips/vr41xx/common/pmu.c index 028aaf75eb21..692b4e85b7fc 100644 --- a/arch/mips/vr41xx/common/pmu.c +++ b/arch/mips/vr41xx/common/pmu.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * pmu.c, Power Management Unit routines for NEC VR4100 series. | 2 | * pmu.c, Power Management Unit routines for NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2003-2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2003-2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/vr41xx/common/rtc.c b/arch/mips/vr41xx/common/rtc.c index 9f26c14edcac..ebc5dcf0ed8e 100644 --- a/arch/mips/vr41xx/common/rtc.c +++ b/arch/mips/vr41xx/common/rtc.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * NEC VR4100 series RTC platform device. | 2 | * NEC VR4100 series RTC platform device. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/vr41xx/common/siu.c b/arch/mips/vr41xx/common/siu.c index 654dee6208be..54eae56108fb 100644 --- a/arch/mips/vr41xx/common/siu.c +++ b/arch/mips/vr41xx/common/siu.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * NEC VR4100 series SIU platform device. | 2 | * NEC VR4100 series SIU platform device. |
3 | * | 3 | * |
4 | * Copyright (C) 2007-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007-2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/vr41xx/common/type.c b/arch/mips/vr41xx/common/type.c index e0c1ac5e988e..ff841422b638 100644 --- a/arch/mips/vr41xx/common/type.c +++ b/arch/mips/vr41xx/common/type.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * type.c, System type for NEC VR4100 series. | 2 | * type.c, System type for NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2005 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/vr41xx/ibm-workpad/setup.c b/arch/mips/vr41xx/ibm-workpad/setup.c index 9eef297eca1a..3982f378a3e6 100644 --- a/arch/mips/vr41xx/ibm-workpad/setup.c +++ b/arch/mips/vr41xx/ibm-workpad/setup.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * setup.c, Setup for the IBM WorkPad z50. | 2 | * setup.c, Setup for the IBM WorkPad z50. |
3 | * | 3 | * |
4 | * Copyright (C) 2002-2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2002-2006 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mn10300/include/asm/pci.h b/arch/mn10300/include/asm/pci.h index e58b9a46e1b1..35d2ed6396f6 100644 --- a/arch/mn10300/include/asm/pci.h +++ b/arch/mn10300/include/asm/pci.h | |||
@@ -70,10 +70,6 @@ struct pci_dev; | |||
70 | */ | 70 | */ |
71 | #define PCI_DMA_BUS_IS_PHYS (1) | 71 | #define PCI_DMA_BUS_IS_PHYS (1) |
72 | 72 | ||
73 | |||
74 | /* This is always fine. */ | ||
75 | #define pci_dac_dma_supported(pci_dev, mask) (0) | ||
76 | |||
77 | /* Return the index of the PCI controller for device. */ | 73 | /* Return the index of the PCI controller for device. */ |
78 | static inline int pci_controller_num(struct pci_dev *dev) | 74 | static inline int pci_controller_num(struct pci_dev *dev) |
79 | { | 75 | { |
diff --git a/arch/mn10300/include/asm/thread_info.h b/arch/mn10300/include/asm/thread_info.h index 78a3881f3c12..58d64f8b2cc3 100644 --- a/arch/mn10300/include/asm/thread_info.h +++ b/arch/mn10300/include/asm/thread_info.h | |||
@@ -65,8 +65,6 @@ struct thread_info { | |||
65 | 65 | ||
66 | /* | 66 | /* |
67 | * macros/functions for gaining access to the thread information structure | 67 | * macros/functions for gaining access to the thread information structure |
68 | * | ||
69 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
70 | */ | 68 | */ |
71 | #ifndef __ASSEMBLY__ | 69 | #ifndef __ASSEMBLY__ |
72 | 70 | ||
@@ -76,7 +74,7 @@ struct thread_info { | |||
76 | .exec_domain = &default_exec_domain, \ | 74 | .exec_domain = &default_exec_domain, \ |
77 | .flags = 0, \ | 75 | .flags = 0, \ |
78 | .cpu = 0, \ | 76 | .cpu = 0, \ |
79 | .preempt_count = 1, \ | 77 | .preempt_count = INIT_PREEMPT_COUNT, \ |
80 | .addr_limit = KERNEL_DS, \ | 78 | .addr_limit = KERNEL_DS, \ |
81 | .restart_block = { \ | 79 | .restart_block = { \ |
82 | .fn = do_no_restart_syscall, \ | 80 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/mn10300/include/asm/unistd.h b/arch/mn10300/include/asm/unistd.h index fef5b434dadc..fad68616af32 100644 --- a/arch/mn10300/include/asm/unistd.h +++ b/arch/mn10300/include/asm/unistd.h | |||
@@ -346,10 +346,12 @@ | |||
346 | #define __NR_inotify_init1 333 | 346 | #define __NR_inotify_init1 333 |
347 | #define __NR_preadv 334 | 347 | #define __NR_preadv 334 |
348 | #define __NR_pwritev 335 | 348 | #define __NR_pwritev 335 |
349 | #define __NR_rt_tgsigqueueinfo 336 | ||
350 | #define __NR_perf_counter_open 337 | ||
349 | 351 | ||
350 | #ifdef __KERNEL__ | 352 | #ifdef __KERNEL__ |
351 | 353 | ||
352 | #define NR_syscalls 326 | 354 | #define NR_syscalls 338 |
353 | 355 | ||
354 | /* | 356 | /* |
355 | * specify the deprecated syscalls we want to support on this arch | 357 | * specify the deprecated syscalls we want to support on this arch |
diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S index 7408a27199f3..e0d2563af4f2 100644 --- a/arch/mn10300/kernel/entry.S +++ b/arch/mn10300/kernel/entry.S | |||
@@ -722,6 +722,8 @@ ENTRY(sys_call_table) | |||
722 | .long sys_inotify_init1 | 722 | .long sys_inotify_init1 |
723 | .long sys_preadv | 723 | .long sys_preadv |
724 | .long sys_pwritev /* 335 */ | 724 | .long sys_pwritev /* 335 */ |
725 | .long sys_rt_tgsigqueueinfo | ||
726 | .long sys_perf_counter_open | ||
725 | 727 | ||
726 | 728 | ||
727 | nr_syscalls=(.-sys_call_table)/4 | 729 | nr_syscalls=(.-sys_call_table)/4 |
diff --git a/arch/mn10300/kernel/ptrace.c b/arch/mn10300/kernel/ptrace.c index e143339ad28e..cf847dabc1bd 100644 --- a/arch/mn10300/kernel/ptrace.c +++ b/arch/mn10300/kernel/ptrace.c | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
15 | #include <linux/smp.h> | 15 | #include <linux/smp.h> |
16 | #include <linux/smp_lock.h> | ||
17 | #include <linux/errno.h> | 16 | #include <linux/errno.h> |
18 | #include <linux/ptrace.h> | 17 | #include <linux/ptrace.h> |
19 | #include <linux/user.h> | 18 | #include <linux/user.h> |
diff --git a/arch/mn10300/kernel/signal.c b/arch/mn10300/kernel/signal.c index 9f7572a0f578..feb2f2e810db 100644 --- a/arch/mn10300/kernel/signal.c +++ b/arch/mn10300/kernel/signal.c | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
13 | #include <linux/mm.h> | 13 | #include <linux/mm.h> |
14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
15 | #include <linux/smp_lock.h> | ||
16 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
17 | #include <linux/signal.h> | 16 | #include <linux/signal.h> |
18 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
diff --git a/arch/mn10300/kernel/sys_mn10300.c b/arch/mn10300/kernel/sys_mn10300.c index bca5a84dc72c..3e52a1054327 100644 --- a/arch/mn10300/kernel/sys_mn10300.c +++ b/arch/mn10300/kernel/sys_mn10300.c | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/syscalls.h> | 13 | #include <linux/syscalls.h> |
14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
15 | #include <linux/smp.h> | 15 | #include <linux/smp.h> |
16 | #include <linux/smp_lock.h> | ||
17 | #include <linux/sem.h> | 16 | #include <linux/sem.h> |
18 | #include <linux/msg.h> | 17 | #include <linux/msg.h> |
19 | #include <linux/shm.h> | 18 | #include <linux/shm.h> |
@@ -21,7 +20,6 @@ | |||
21 | #include <linux/mman.h> | 20 | #include <linux/mman.h> |
22 | #include <linux/file.h> | 21 | #include <linux/file.h> |
23 | #include <linux/utsname.h> | 22 | #include <linux/utsname.h> |
24 | #include <linux/syscalls.h> | ||
25 | #include <linux/tty.h> | 23 | #include <linux/tty.h> |
26 | 24 | ||
27 | #include <asm/uaccess.h> | 25 | #include <asm/uaccess.h> |
diff --git a/arch/mn10300/kernel/traps.c b/arch/mn10300/kernel/traps.c index 681ad8c9e4fb..91365adba4f5 100644 --- a/arch/mn10300/kernel/traps.c +++ b/arch/mn10300/kernel/traps.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/timer.h> | 17 | #include <linux/timer.h> |
18 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
20 | #include <linux/smp_lock.h> | ||
21 | #include <linux/init.h> | 20 | #include <linux/init.h> |
22 | #include <linux/delay.h> | 21 | #include <linux/delay.h> |
23 | #include <linux/spinlock.h> | 22 | #include <linux/spinlock.h> |
@@ -136,8 +135,7 @@ void show_trace(unsigned long *sp) | |||
136 | unsigned long *stack, addr, module_start, module_end; | 135 | unsigned long *stack, addr, module_start, module_end; |
137 | int i; | 136 | int i; |
138 | 137 | ||
139 | printk(KERN_EMERG "\n" | 138 | printk(KERN_EMERG "\nCall Trace:"); |
140 | KERN_EMERG "Call Trace:"); | ||
141 | 139 | ||
142 | stack = sp; | 140 | stack = sp; |
143 | i = 0; | 141 | i = 0; |
@@ -153,7 +151,7 @@ void show_trace(unsigned long *sp) | |||
153 | printk("\n"); | 151 | printk("\n"); |
154 | #else | 152 | #else |
155 | if ((i % 6) == 0) | 153 | if ((i % 6) == 0) |
156 | printk("\n" KERN_EMERG " "); | 154 | printk(KERN_EMERG " "); |
157 | printk("[<%08lx>] ", addr); | 155 | printk("[<%08lx>] ", addr); |
158 | i++; | 156 | i++; |
159 | #endif | 157 | #endif |
@@ -180,7 +178,7 @@ void show_stack(struct task_struct *task, unsigned long *sp) | |||
180 | if (((long) stack & (THREAD_SIZE - 1)) == 0) | 178 | if (((long) stack & (THREAD_SIZE - 1)) == 0) |
181 | break; | 179 | break; |
182 | if ((i % 8) == 0) | 180 | if ((i % 8) == 0) |
183 | printk("\n" KERN_EMERG " "); | 181 | printk(KERN_EMERG " "); |
184 | printk("%08lx ", *stack++); | 182 | printk("%08lx ", *stack++); |
185 | } | 183 | } |
186 | 184 | ||
@@ -264,8 +262,7 @@ void show_registers(struct pt_regs *regs) | |||
264 | show_stack(current, (unsigned long *) sp); | 262 | show_stack(current, (unsigned long *) sp); |
265 | 263 | ||
266 | #if 0 | 264 | #if 0 |
267 | printk(KERN_EMERG "\n" | 265 | printk(KERN_EMERG "\nCode: "); |
268 | KERN_EMERG "Code: "); | ||
269 | if (regs->pc < PAGE_OFFSET) | 266 | if (regs->pc < PAGE_OFFSET) |
270 | goto bad; | 267 | goto bad; |
271 | 268 | ||
@@ -311,16 +308,14 @@ void die(const char *str, struct pt_regs *regs, enum exception_code code) | |||
311 | { | 308 | { |
312 | console_verbose(); | 309 | console_verbose(); |
313 | spin_lock_irq(&die_lock); | 310 | spin_lock_irq(&die_lock); |
314 | printk(KERN_EMERG "\n" | 311 | printk(KERN_EMERG "\n%s: %04x\n", |
315 | KERN_EMERG "%s: %04x\n", | ||
316 | str, code & 0xffff); | 312 | str, code & 0xffff); |
317 | show_registers(regs); | 313 | show_registers(regs); |
318 | 314 | ||
319 | if (regs->pc >= 0x02000000 && regs->pc < 0x04000000 && | 315 | if (regs->pc >= 0x02000000 && regs->pc < 0x04000000 && |
320 | (regs->epsw & (EPSW_IM | EPSW_IE)) != (EPSW_IM | EPSW_IE)) { | 316 | (regs->epsw & (EPSW_IM | EPSW_IE)) != (EPSW_IM | EPSW_IE)) { |
321 | printk(KERN_EMERG "Exception in usermode interrupt handler\n"); | 317 | printk(KERN_EMERG "Exception in usermode interrupt handler\n"); |
322 | printk(KERN_EMERG "\n" | 318 | printk(KERN_EMERG "\nPlease connect to kernel debugger !!\n"); |
323 | KERN_EMERG " Please connect to kernel debugger !!\n"); | ||
324 | asm volatile ("0: bra 0b"); | 319 | asm volatile ("0: bra 0b"); |
325 | } | 320 | } |
326 | 321 | ||
@@ -429,9 +424,8 @@ asmlinkage void io_bus_error(u32 bcberr, u32 bcbear, struct pt_regs *regs) | |||
429 | { | 424 | { |
430 | console_verbose(); | 425 | console_verbose(); |
431 | 426 | ||
432 | printk(KERN_EMERG "\n" | 427 | printk(KERN_EMERG "Asynchronous I/O Bus Error\n"); |
433 | KERN_EMERG "Asynchronous I/O Bus Error\n" | 428 | printk(KERN_EMERG "==========================\n"); |
434 | KERN_EMERG "==========================\n"); | ||
435 | 429 | ||
436 | if (bcberr & BCBERR_BEME) | 430 | if (bcberr & BCBERR_BEME) |
437 | printk(KERN_EMERG "- Multiple recorded errors\n"); | 431 | printk(KERN_EMERG "- Multiple recorded errors\n"); |
diff --git a/arch/mn10300/kernel/vmlinux.lds.S b/arch/mn10300/kernel/vmlinux.lds.S index 24de6b90f401..c96ba3da95ac 100644 --- a/arch/mn10300/kernel/vmlinux.lds.S +++ b/arch/mn10300/kernel/vmlinux.lds.S | |||
@@ -38,14 +38,10 @@ SECTIONS | |||
38 | 38 | ||
39 | _etext = .; /* End of text section */ | 39 | _etext = .; /* End of text section */ |
40 | 40 | ||
41 | . = ALIGN(16); /* Exception table */ | 41 | EXCEPTION_TABLE(16) |
42 | __start___ex_table = .; | ||
43 | __ex_table : { *(__ex_table) } | ||
44 | __stop___ex_table = .; | ||
45 | |||
46 | BUG_TABLE | 42 | BUG_TABLE |
47 | 43 | ||
48 | RODATA | 44 | RO_DATA(PAGE_SIZE) |
49 | 45 | ||
50 | /* writeable */ | 46 | /* writeable */ |
51 | .data : { /* Data */ | 47 | .data : { /* Data */ |
@@ -53,27 +49,19 @@ SECTIONS | |||
53 | CONSTRUCTORS | 49 | CONSTRUCTORS |
54 | } | 50 | } |
55 | 51 | ||
56 | . = ALIGN(PAGE_SIZE); | 52 | .data_nosave : { NOSAVE_DATA; } |
57 | __nosave_begin = .; | ||
58 | .data_nosave : { *(.data.nosave) } | ||
59 | . = ALIGN(PAGE_SIZE); | ||
60 | __nosave_end = .; | ||
61 | |||
62 | . = ALIGN(PAGE_SIZE); | ||
63 | .data.page_aligned : { *(.data.idt) } | ||
64 | 53 | ||
65 | . = ALIGN(32); | 54 | .data.page_aligned : { PAGE_ALIGNED_DATA(PAGE_SIZE); } |
66 | .data.cacheline_aligned : { *(.data.cacheline_aligned) } | 55 | .data.cacheline_aligned : { CACHELINE_ALIGNED_DATA(32); } |
67 | 56 | ||
68 | /* rarely changed data like cpu maps */ | 57 | /* rarely changed data like cpu maps */ |
69 | . = ALIGN(32); | 58 | . = ALIGN(32); |
70 | .data.read_mostly : AT(ADDR(.data.read_mostly)) { | 59 | .data.read_mostly : AT(ADDR(.data.read_mostly)) { |
71 | *(.data.read_mostly) | 60 | READ_MOSTLY_DATA(32); |
72 | _edata = .; /* End of data section */ | 61 | _edata = .; /* End of data section */ |
73 | } | 62 | } |
74 | 63 | ||
75 | . = ALIGN(THREAD_SIZE); /* init_task */ | 64 | .data.init_task : { INIT_TASK_DATA(THREAD_SIZE); } |
76 | .data.init_task : { *(.data.init_task) } | ||
77 | 65 | ||
78 | /* might get freed after init */ | 66 | /* might get freed after init */ |
79 | . = ALIGN(PAGE_SIZE); | 67 | . = ALIGN(PAGE_SIZE); |
@@ -88,23 +76,18 @@ SECTIONS | |||
88 | __init_begin = .; | 76 | __init_begin = .; |
89 | .init.text : { | 77 | .init.text : { |
90 | _sinittext = .; | 78 | _sinittext = .; |
91 | *(.init.text) | 79 | INIT_TEXT; |
92 | _einittext = .; | 80 | _einittext = .; |
93 | } | 81 | } |
94 | .init.data : { *(.init.data) } | 82 | .init.data : { INIT_DATA; } |
95 | . = ALIGN(16); | 83 | .setup.init : { INIT_SETUP(16); } |
96 | __setup_start = .; | ||
97 | .setup.init : { KEEP(*(.init.setup)) } | ||
98 | __setup_end = .; | ||
99 | 84 | ||
100 | __initcall_start = .; | 85 | __initcall_start = .; |
101 | .initcall.init : { | 86 | .initcall.init : { |
102 | INITCALLS | 87 | INITCALLS |
103 | } | 88 | } |
104 | __initcall_end = .; | 89 | __initcall_end = .; |
105 | __con_initcall_start = .; | 90 | .con_initcall.init : { CON_INITCALL; } |
106 | .con_initcall.init : { *(.con_initcall.init) } | ||
107 | __con_initcall_end = .; | ||
108 | 91 | ||
109 | SECURITY_INIT | 92 | SECURITY_INIT |
110 | . = ALIGN(4); | 93 | . = ALIGN(4); |
@@ -114,28 +97,17 @@ SECTIONS | |||
114 | .altinstr_replacement : { *(.altinstr_replacement) } | 97 | .altinstr_replacement : { *(.altinstr_replacement) } |
115 | /* .exit.text is discard at runtime, not link time, to deal with references | 98 | /* .exit.text is discard at runtime, not link time, to deal with references |
116 | from .altinstructions and .eh_frame */ | 99 | from .altinstructions and .eh_frame */ |
117 | .exit.text : { *(.exit.text) } | 100 | .exit.text : { EXIT_TEXT; } |
118 | .exit.data : { *(.exit.data) } | 101 | .exit.data : { EXIT_DATA; } |
119 | 102 | ||
120 | #ifdef CONFIG_BLK_DEV_INITRD | 103 | .init.ramfs : { INIT_RAM_FS; } |
121 | . = ALIGN(PAGE_SIZE); | ||
122 | __initramfs_start = .; | ||
123 | .init.ramfs : { *(.init.ramfs) } | ||
124 | __initramfs_end = .; | ||
125 | #endif | ||
126 | 104 | ||
127 | PERCPU(32) | 105 | PERCPU(32) |
128 | . = ALIGN(PAGE_SIZE); | 106 | . = ALIGN(PAGE_SIZE); |
129 | __init_end = .; | 107 | __init_end = .; |
130 | /* freed after init ends here */ | 108 | /* freed after init ends here */ |
131 | 109 | ||
132 | __bss_start = .; /* BSS */ | 110 | BSS(4) |
133 | .bss : { | ||
134 | *(.bss.page_aligned) | ||
135 | *(.bss) | ||
136 | } | ||
137 | . = ALIGN(4); | ||
138 | __bss_stop = .; | ||
139 | 111 | ||
140 | _end = . ; | 112 | _end = . ; |
141 | 113 | ||
@@ -145,7 +117,7 @@ SECTIONS | |||
145 | 117 | ||
146 | /* Sections to be discarded */ | 118 | /* Sections to be discarded */ |
147 | /DISCARD/ : { | 119 | /DISCARD/ : { |
148 | *(.exitcall.exit) | 120 | EXIT_CALL |
149 | } | 121 | } |
150 | 122 | ||
151 | STABS_DEBUG | 123 | STABS_DEBUG |
diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c index 33cf25025dac..53bb17d0f068 100644 --- a/arch/mn10300/mm/fault.c +++ b/arch/mn10300/mm/fault.c | |||
@@ -20,7 +20,6 @@ | |||
20 | #include <linux/mman.h> | 20 | #include <linux/mman.h> |
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/smp.h> | 22 | #include <linux/smp.h> |
23 | #include <linux/smp_lock.h> | ||
24 | #include <linux/interrupt.h> | 23 | #include <linux/interrupt.h> |
25 | #include <linux/init.h> | 24 | #include <linux/init.h> |
26 | #include <linux/vt_kern.h> /* For unblank_screen() */ | 25 | #include <linux/vt_kern.h> /* For unblank_screen() */ |
@@ -258,7 +257,7 @@ good_area: | |||
258 | * make sure we exit gracefully rather than endlessly redo | 257 | * make sure we exit gracefully rather than endlessly redo |
259 | * the fault. | 258 | * the fault. |
260 | */ | 259 | */ |
261 | fault = handle_mm_fault(mm, vma, address, write); | 260 | fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); |
262 | if (unlikely(fault & VM_FAULT_ERROR)) { | 261 | if (unlikely(fault & VM_FAULT_ERROR)) { |
263 | if (fault & VM_FAULT_OOM) | 262 | if (fault & VM_FAULT_OOM) |
264 | goto out_of_memory; | 263 | goto out_of_memory; |
diff --git a/arch/mn10300/mm/misalignment.c b/arch/mn10300/mm/misalignment.c index 94c4a4358065..30016251f658 100644 --- a/arch/mn10300/mm/misalignment.c +++ b/arch/mn10300/mm/misalignment.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/timer.h> | 17 | #include <linux/timer.h> |
18 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
20 | #include <linux/smp_lock.h> | ||
21 | #include <linux/init.h> | 20 | #include <linux/init.h> |
22 | #include <linux/delay.h> | 21 | #include <linux/delay.h> |
23 | #include <linux/spinlock.h> | 22 | #include <linux/spinlock.h> |
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 9038f39d9d73..06f8d5b5b0f9 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig | |||
@@ -16,6 +16,8 @@ config PARISC | |||
16 | select RTC_DRV_GENERIC | 16 | select RTC_DRV_GENERIC |
17 | select INIT_ALL_POSSIBLE | 17 | select INIT_ALL_POSSIBLE |
18 | select BUG | 18 | select BUG |
19 | select HAVE_PERF_COUNTERS | ||
20 | select GENERIC_ATOMIC64 if !64BIT | ||
19 | help | 21 | help |
20 | The PA-RISC microprocessor is designed by Hewlett-Packard and used | 22 | The PA-RISC microprocessor is designed by Hewlett-Packard and used |
21 | in many of their workstations & servers (HP9000 700 and 800 series, | 23 | in many of their workstations & servers (HP9000 700 and 800 series, |
diff --git a/arch/parisc/include/asm/atomic.h b/arch/parisc/include/asm/atomic.h index 7eeaff944360..8bc9e96699b2 100644 --- a/arch/parisc/include/asm/atomic.h +++ b/arch/parisc/include/asm/atomic.h | |||
@@ -222,13 +222,13 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) | |||
222 | 222 | ||
223 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | 223 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
224 | 224 | ||
225 | #define atomic_add(i,v) ((void)(__atomic_add_return( ((int)(i)),(v)))) | 225 | #define atomic_add(i,v) ((void)(__atomic_add_return( (i),(v)))) |
226 | #define atomic_sub(i,v) ((void)(__atomic_add_return(-((int)(i)),(v)))) | 226 | #define atomic_sub(i,v) ((void)(__atomic_add_return(-(i),(v)))) |
227 | #define atomic_inc(v) ((void)(__atomic_add_return( 1,(v)))) | 227 | #define atomic_inc(v) ((void)(__atomic_add_return( 1,(v)))) |
228 | #define atomic_dec(v) ((void)(__atomic_add_return( -1,(v)))) | 228 | #define atomic_dec(v) ((void)(__atomic_add_return( -1,(v)))) |
229 | 229 | ||
230 | #define atomic_add_return(i,v) (__atomic_add_return( ((int)(i)),(v))) | 230 | #define atomic_add_return(i,v) (__atomic_add_return( (i),(v))) |
231 | #define atomic_sub_return(i,v) (__atomic_add_return(-((int)(i)),(v))) | 231 | #define atomic_sub_return(i,v) (__atomic_add_return(-(i),(v))) |
232 | #define atomic_inc_return(v) (__atomic_add_return( 1,(v))) | 232 | #define atomic_inc_return(v) (__atomic_add_return( 1,(v))) |
233 | #define atomic_dec_return(v) (__atomic_add_return( -1,(v))) | 233 | #define atomic_dec_return(v) (__atomic_add_return( -1,(v))) |
234 | 234 | ||
@@ -336,7 +336,11 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) | |||
336 | 336 | ||
337 | #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) | 337 | #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) |
338 | 338 | ||
339 | #endif /* CONFIG_64BIT */ | 339 | #else /* CONFIG_64BIT */ |
340 | |||
341 | #include <asm-generic/atomic64.h> | ||
342 | |||
343 | #endif /* !CONFIG_64BIT */ | ||
340 | 344 | ||
341 | #include <asm-generic/atomic-long.h> | 345 | #include <asm-generic/atomic-long.h> |
342 | 346 | ||
diff --git a/arch/parisc/include/asm/dma.h b/arch/parisc/include/asm/dma.h index 31ad0f05af3d..f7a18f968703 100644 --- a/arch/parisc/include/asm/dma.h +++ b/arch/parisc/include/asm/dma.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: dma.h,v 1.2 1999/04/27 00:46:18 deller Exp $ | 1 | /* asm/dma.h: Defines for using and allocating dma channels. |
2 | * linux/include/asm/dma.h: Defines for using and allocating dma channels. | ||
3 | * Written by Hennus Bergman, 1992. | 2 | * Written by Hennus Bergman, 1992. |
4 | * High DMA channel support & info by Hannu Savolainen | 3 | * High DMA channel support & info by Hannu Savolainen |
5 | * and John Boyd, Nov. 1992. | 4 | * and John Boyd, Nov. 1992. |
diff --git a/arch/parisc/include/asm/perf_counter.h b/arch/parisc/include/asm/perf_counter.h new file mode 100644 index 000000000000..dc9e829f7013 --- /dev/null +++ b/arch/parisc/include/asm/perf_counter.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #ifndef __ASM_PARISC_PERF_COUNTER_H | ||
2 | #define __ASM_PARISC_PERF_COUNTER_H | ||
3 | |||
4 | /* parisc only supports software counters through this interface. */ | ||
5 | static inline void set_perf_counter_pending(void) { } | ||
6 | |||
7 | #endif /* __ASM_PARISC_PERF_COUNTER_H */ | ||
diff --git a/arch/parisc/include/asm/processor.h b/arch/parisc/include/asm/processor.h index 9d64df8754ba..9ce66e9d1c2b 100644 --- a/arch/parisc/include/asm/processor.h +++ b/arch/parisc/include/asm/processor.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/types.h> | 18 | #include <asm/types.h> |
19 | #include <asm/system.h> | 19 | #include <asm/system.h> |
20 | #include <asm/percpu.h> | 20 | #include <asm/percpu.h> |
21 | |||
21 | #endif /* __ASSEMBLY__ */ | 22 | #endif /* __ASSEMBLY__ */ |
22 | 23 | ||
23 | #define KERNEL_STACK_SIZE (4*PAGE_SIZE) | 24 | #define KERNEL_STACK_SIZE (4*PAGE_SIZE) |
@@ -127,6 +128,8 @@ struct thread_struct { | |||
127 | unsigned long flags; | 128 | unsigned long flags; |
128 | }; | 129 | }; |
129 | 130 | ||
131 | #define task_pt_regs(tsk) ((struct pt_regs *)&((tsk)->thread.regs)) | ||
132 | |||
130 | /* Thread struct flags. */ | 133 | /* Thread struct flags. */ |
131 | #define PARISC_UAC_NOPRINT (1UL << 0) /* see prctl and unaligned.c */ | 134 | #define PARISC_UAC_NOPRINT (1UL << 0) /* see prctl and unaligned.c */ |
132 | #define PARISC_UAC_SIGBUS (1UL << 1) | 135 | #define PARISC_UAC_SIGBUS (1UL << 1) |
diff --git a/arch/parisc/include/asm/system.h b/arch/parisc/include/asm/system.h index ee80c920b464..d91357bca5b4 100644 --- a/arch/parisc/include/asm/system.h +++ b/arch/parisc/include/asm/system.h | |||
@@ -168,8 +168,8 @@ static inline void set_eiem(unsigned long val) | |||
168 | /* LDCW, the only atomic read-write operation PA-RISC has. *sigh*. */ | 168 | /* LDCW, the only atomic read-write operation PA-RISC has. *sigh*. */ |
169 | #define __ldcw(a) ({ \ | 169 | #define __ldcw(a) ({ \ |
170 | unsigned __ret; \ | 170 | unsigned __ret; \ |
171 | __asm__ __volatile__(__LDCW " 0(%1),%0" \ | 171 | __asm__ __volatile__(__LDCW " 0(%2),%0" \ |
172 | : "=r" (__ret) : "r" (a)); \ | 172 | : "=r" (__ret), "+m" (*(a)) : "r" (a)); \ |
173 | __ret; \ | 173 | __ret; \ |
174 | }) | 174 | }) |
175 | 175 | ||
diff --git a/arch/parisc/include/asm/thread_info.h b/arch/parisc/include/asm/thread_info.h index 0407959da489..4ce0edfbe969 100644 --- a/arch/parisc/include/asm/thread_info.h +++ b/arch/parisc/include/asm/thread_info.h | |||
@@ -23,7 +23,7 @@ struct thread_info { | |||
23 | .flags = 0, \ | 23 | .flags = 0, \ |
24 | .cpu = 0, \ | 24 | .cpu = 0, \ |
25 | .addr_limit = KERNEL_DS, \ | 25 | .addr_limit = KERNEL_DS, \ |
26 | .preempt_count = 1, \ | 26 | .preempt_count = INIT_PREEMPT_COUNT, \ |
27 | .restart_block = { \ | 27 | .restart_block = { \ |
28 | .fn = do_no_restart_syscall \ | 28 | .fn = do_no_restart_syscall \ |
29 | } \ | 29 | } \ |
diff --git a/arch/parisc/include/asm/tlbflush.h b/arch/parisc/include/asm/tlbflush.h index 1f6fd4fc05b9..8f1a8100bf2d 100644 --- a/arch/parisc/include/asm/tlbflush.h +++ b/arch/parisc/include/asm/tlbflush.h | |||
@@ -12,14 +12,12 @@ | |||
12 | * N class systems, only one PxTLB inter processor broadcast can be | 12 | * N class systems, only one PxTLB inter processor broadcast can be |
13 | * active at any one time on the Merced bus. This tlb purge | 13 | * active at any one time on the Merced bus. This tlb purge |
14 | * synchronisation is fairly lightweight and harmless so we activate | 14 | * synchronisation is fairly lightweight and harmless so we activate |
15 | * it on all SMP systems not just the N class. We also need to have | 15 | * it on all systems not just the N class. |
16 | * preemption disabled on uniprocessor machines, and spin_lock does that | ||
17 | * nicely. | ||
18 | */ | 16 | */ |
19 | extern spinlock_t pa_tlb_lock; | 17 | extern spinlock_t pa_tlb_lock; |
20 | 18 | ||
21 | #define purge_tlb_start(x) spin_lock(&pa_tlb_lock) | 19 | #define purge_tlb_start(flags) spin_lock_irqsave(&pa_tlb_lock, flags) |
22 | #define purge_tlb_end(x) spin_unlock(&pa_tlb_lock) | 20 | #define purge_tlb_end(flags) spin_unlock_irqrestore(&pa_tlb_lock, flags) |
23 | 21 | ||
24 | extern void flush_tlb_all(void); | 22 | extern void flush_tlb_all(void); |
25 | extern void flush_tlb_all_local(void *); | 23 | extern void flush_tlb_all_local(void *); |
@@ -63,14 +61,16 @@ static inline void flush_tlb_mm(struct mm_struct *mm) | |||
63 | static inline void flush_tlb_page(struct vm_area_struct *vma, | 61 | static inline void flush_tlb_page(struct vm_area_struct *vma, |
64 | unsigned long addr) | 62 | unsigned long addr) |
65 | { | 63 | { |
64 | unsigned long flags; | ||
65 | |||
66 | /* For one page, it's not worth testing the split_tlb variable */ | 66 | /* For one page, it's not worth testing the split_tlb variable */ |
67 | 67 | ||
68 | mb(); | 68 | mb(); |
69 | mtsp(vma->vm_mm->context,1); | 69 | mtsp(vma->vm_mm->context,1); |
70 | purge_tlb_start(); | 70 | purge_tlb_start(flags); |
71 | pdtlb(addr); | 71 | pdtlb(addr); |
72 | pitlb(addr); | 72 | pitlb(addr); |
73 | purge_tlb_end(); | 73 | purge_tlb_end(flags); |
74 | } | 74 | } |
75 | 75 | ||
76 | void __flush_tlb_range(unsigned long sid, | 76 | void __flush_tlb_range(unsigned long sid, |
diff --git a/arch/parisc/include/asm/unistd.h b/arch/parisc/include/asm/unistd.h index ef26b009dc5d..f3d3b8b012c4 100644 --- a/arch/parisc/include/asm/unistd.h +++ b/arch/parisc/include/asm/unistd.h | |||
@@ -807,8 +807,12 @@ | |||
807 | #define __NR_dup3 (__NR_Linux + 312) | 807 | #define __NR_dup3 (__NR_Linux + 312) |
808 | #define __NR_pipe2 (__NR_Linux + 313) | 808 | #define __NR_pipe2 (__NR_Linux + 313) |
809 | #define __NR_inotify_init1 (__NR_Linux + 314) | 809 | #define __NR_inotify_init1 (__NR_Linux + 314) |
810 | #define __NR_preadv (__NR_Linux + 315) | ||
811 | #define __NR_pwritev (__NR_Linux + 316) | ||
812 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 317) | ||
813 | #define __NR_perf_counter_open (__NR_Linux + 318) | ||
810 | 814 | ||
811 | #define __NR_Linux_syscalls (__NR_inotify_init1 + 1) | 815 | #define __NR_Linux_syscalls (__NR_perf_counter_open + 1) |
812 | 816 | ||
813 | 817 | ||
814 | #define __IGNORE_select /* newselect */ | 818 | #define __IGNORE_select /* newselect */ |
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c index 837530ea32e7..b6ed34de14e1 100644 --- a/arch/parisc/kernel/cache.c +++ b/arch/parisc/kernel/cache.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: cache.c,v 1.4 2000/01/25 00:11:38 prumpf Exp $ | 1 | /* |
2 | * | ||
3 | * This file is subject to the terms and conditions of the GNU General Public | 2 | * This file is subject to the terms and conditions of the GNU General Public |
4 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
5 | * for more details. | 4 | * for more details. |
@@ -398,12 +397,13 @@ EXPORT_SYMBOL(flush_kernel_icache_range_asm); | |||
398 | 397 | ||
399 | void clear_user_page_asm(void *page, unsigned long vaddr) | 398 | void clear_user_page_asm(void *page, unsigned long vaddr) |
400 | { | 399 | { |
400 | unsigned long flags; | ||
401 | /* This function is implemented in assembly in pacache.S */ | 401 | /* This function is implemented in assembly in pacache.S */ |
402 | extern void __clear_user_page_asm(void *page, unsigned long vaddr); | 402 | extern void __clear_user_page_asm(void *page, unsigned long vaddr); |
403 | 403 | ||
404 | purge_tlb_start(); | 404 | purge_tlb_start(flags); |
405 | __clear_user_page_asm(page, vaddr); | 405 | __clear_user_page_asm(page, vaddr); |
406 | purge_tlb_end(); | 406 | purge_tlb_end(flags); |
407 | } | 407 | } |
408 | 408 | ||
409 | #define FLUSH_THRESHOLD 0x80000 /* 0.5MB */ | 409 | #define FLUSH_THRESHOLD 0x80000 /* 0.5MB */ |
@@ -444,20 +444,24 @@ extern void clear_user_page_asm(void *page, unsigned long vaddr); | |||
444 | 444 | ||
445 | void clear_user_page(void *page, unsigned long vaddr, struct page *pg) | 445 | void clear_user_page(void *page, unsigned long vaddr, struct page *pg) |
446 | { | 446 | { |
447 | unsigned long flags; | ||
448 | |||
447 | purge_kernel_dcache_page((unsigned long)page); | 449 | purge_kernel_dcache_page((unsigned long)page); |
448 | purge_tlb_start(); | 450 | purge_tlb_start(flags); |
449 | pdtlb_kernel(page); | 451 | pdtlb_kernel(page); |
450 | purge_tlb_end(); | 452 | purge_tlb_end(flags); |
451 | clear_user_page_asm(page, vaddr); | 453 | clear_user_page_asm(page, vaddr); |
452 | } | 454 | } |
453 | EXPORT_SYMBOL(clear_user_page); | 455 | EXPORT_SYMBOL(clear_user_page); |
454 | 456 | ||
455 | void flush_kernel_dcache_page_addr(void *addr) | 457 | void flush_kernel_dcache_page_addr(void *addr) |
456 | { | 458 | { |
459 | unsigned long flags; | ||
460 | |||
457 | flush_kernel_dcache_page_asm(addr); | 461 | flush_kernel_dcache_page_asm(addr); |
458 | purge_tlb_start(); | 462 | purge_tlb_start(flags); |
459 | pdtlb_kernel(addr); | 463 | pdtlb_kernel(addr); |
460 | purge_tlb_end(); | 464 | purge_tlb_end(flags); |
461 | } | 465 | } |
462 | EXPORT_SYMBOL(flush_kernel_dcache_page_addr); | 466 | EXPORT_SYMBOL(flush_kernel_dcache_page_addr); |
463 | 467 | ||
@@ -490,8 +494,10 @@ void __flush_tlb_range(unsigned long sid, unsigned long start, | |||
490 | if (npages >= 512) /* 2MB of space: arbitrary, should be tuned */ | 494 | if (npages >= 512) /* 2MB of space: arbitrary, should be tuned */ |
491 | flush_tlb_all(); | 495 | flush_tlb_all(); |
492 | else { | 496 | else { |
497 | unsigned long flags; | ||
498 | |||
493 | mtsp(sid, 1); | 499 | mtsp(sid, 1); |
494 | purge_tlb_start(); | 500 | purge_tlb_start(flags); |
495 | if (split_tlb) { | 501 | if (split_tlb) { |
496 | while (npages--) { | 502 | while (npages--) { |
497 | pdtlb(start); | 503 | pdtlb(start); |
@@ -504,7 +510,7 @@ void __flush_tlb_range(unsigned long sid, unsigned long start, | |||
504 | start += PAGE_SIZE; | 510 | start += PAGE_SIZE; |
505 | } | 511 | } |
506 | } | 512 | } |
507 | purge_tlb_end(); | 513 | purge_tlb_end(flags); |
508 | } | 514 | } |
509 | } | 515 | } |
510 | 516 | ||
diff --git a/arch/parisc/kernel/inventory.c b/arch/parisc/kernel/inventory.c index bd1f7f1ff74e..d228d8237879 100644 --- a/arch/parisc/kernel/inventory.c +++ b/arch/parisc/kernel/inventory.c | |||
@@ -170,23 +170,27 @@ static void __init pagezero_memconfig(void) | |||
170 | static int __init | 170 | static int __init |
171 | pat_query_module(ulong pcell_loc, ulong mod_index) | 171 | pat_query_module(ulong pcell_loc, ulong mod_index) |
172 | { | 172 | { |
173 | pdc_pat_cell_mod_maddr_block_t pa_pdc_cell; | 173 | pdc_pat_cell_mod_maddr_block_t *pa_pdc_cell; |
174 | unsigned long bytecnt; | 174 | unsigned long bytecnt; |
175 | unsigned long temp; /* 64-bit scratch value */ | 175 | unsigned long temp; /* 64-bit scratch value */ |
176 | long status; /* PDC return value status */ | 176 | long status; /* PDC return value status */ |
177 | struct parisc_device *dev; | 177 | struct parisc_device *dev; |
178 | 178 | ||
179 | pa_pdc_cell = kmalloc(sizeof (*pa_pdc_cell), GFP_KERNEL); | ||
180 | if (!pa_pdc_cell) | ||
181 | panic("couldn't allocate memory for PDC_PAT_CELL!"); | ||
182 | |||
179 | /* return cell module (PA or Processor view) */ | 183 | /* return cell module (PA or Processor view) */ |
180 | status = pdc_pat_cell_module(&bytecnt, pcell_loc, mod_index, | 184 | status = pdc_pat_cell_module(&bytecnt, pcell_loc, mod_index, |
181 | PA_VIEW, &pa_pdc_cell); | 185 | PA_VIEW, pa_pdc_cell); |
182 | 186 | ||
183 | if (status != PDC_OK) { | 187 | if (status != PDC_OK) { |
184 | /* no more cell modules or error */ | 188 | /* no more cell modules or error */ |
185 | return status; | 189 | return status; |
186 | } | 190 | } |
187 | 191 | ||
188 | temp = pa_pdc_cell.cba; | 192 | temp = pa_pdc_cell->cba; |
189 | dev = alloc_pa_dev(PAT_GET_CBA(temp), &pa_pdc_cell.mod_path); | 193 | dev = alloc_pa_dev(PAT_GET_CBA(temp), &(pa_pdc_cell->mod_path)); |
190 | if (!dev) { | 194 | if (!dev) { |
191 | return PDC_OK; | 195 | return PDC_OK; |
192 | } | 196 | } |
@@ -203,8 +207,8 @@ pat_query_module(ulong pcell_loc, ulong mod_index) | |||
203 | 207 | ||
204 | /* save generic info returned from the call */ | 208 | /* save generic info returned from the call */ |
205 | /* REVISIT: who is the consumer of this? not sure yet... */ | 209 | /* REVISIT: who is the consumer of this? not sure yet... */ |
206 | dev->mod_info = pa_pdc_cell.mod_info; /* pass to PAT_GET_ENTITY() */ | 210 | dev->mod_info = pa_pdc_cell->mod_info; /* pass to PAT_GET_ENTITY() */ |
207 | dev->pmod_loc = pa_pdc_cell.mod_location; | 211 | dev->pmod_loc = pa_pdc_cell->mod_location; |
208 | 212 | ||
209 | register_parisc_device(dev); /* advertise device */ | 213 | register_parisc_device(dev); /* advertise device */ |
210 | 214 | ||
@@ -216,14 +220,14 @@ pat_query_module(ulong pcell_loc, ulong mod_index) | |||
216 | 220 | ||
217 | case PAT_ENTITY_PROC: | 221 | case PAT_ENTITY_PROC: |
218 | printk(KERN_DEBUG "PAT_ENTITY_PROC: id_eid 0x%lx\n", | 222 | printk(KERN_DEBUG "PAT_ENTITY_PROC: id_eid 0x%lx\n", |
219 | pa_pdc_cell.mod[0]); | 223 | pa_pdc_cell->mod[0]); |
220 | break; | 224 | break; |
221 | 225 | ||
222 | case PAT_ENTITY_MEM: | 226 | case PAT_ENTITY_MEM: |
223 | printk(KERN_DEBUG | 227 | printk(KERN_DEBUG |
224 | "PAT_ENTITY_MEM: amount 0x%lx min_gni_base 0x%lx min_gni_len 0x%lx\n", | 228 | "PAT_ENTITY_MEM: amount 0x%lx min_gni_base 0x%lx min_gni_len 0x%lx\n", |
225 | pa_pdc_cell.mod[0], pa_pdc_cell.mod[1], | 229 | pa_pdc_cell->mod[0], pa_pdc_cell->mod[1], |
226 | pa_pdc_cell.mod[2]); | 230 | pa_pdc_cell->mod[2]); |
227 | break; | 231 | break; |
228 | case PAT_ENTITY_CA: | 232 | case PAT_ENTITY_CA: |
229 | printk(KERN_DEBUG "PAT_ENTITY_CA: %ld\n", pcell_loc); | 233 | printk(KERN_DEBUG "PAT_ENTITY_CA: %ld\n", pcell_loc); |
@@ -243,23 +247,26 @@ pat_query_module(ulong pcell_loc, ulong mod_index) | |||
243 | print_ranges: | 247 | print_ranges: |
244 | pdc_pat_cell_module(&bytecnt, pcell_loc, mod_index, | 248 | pdc_pat_cell_module(&bytecnt, pcell_loc, mod_index, |
245 | IO_VIEW, &io_pdc_cell); | 249 | IO_VIEW, &io_pdc_cell); |
246 | printk(KERN_DEBUG "ranges %ld\n", pa_pdc_cell.mod[1]); | 250 | printk(KERN_DEBUG "ranges %ld\n", pa_pdc_cell->mod[1]); |
247 | for (i = 0; i < pa_pdc_cell.mod[1]; i++) { | 251 | for (i = 0; i < pa_pdc_cell->mod[1]; i++) { |
248 | printk(KERN_DEBUG | 252 | printk(KERN_DEBUG |
249 | " PA_VIEW %ld: 0x%016lx 0x%016lx 0x%016lx\n", | 253 | " PA_VIEW %ld: 0x%016lx 0x%016lx 0x%016lx\n", |
250 | i, pa_pdc_cell.mod[2 + i * 3], /* type */ | 254 | i, pa_pdc_cell->mod[2 + i * 3], /* type */ |
251 | pa_pdc_cell.mod[3 + i * 3], /* start */ | 255 | pa_pdc_cell->mod[3 + i * 3], /* start */ |
252 | pa_pdc_cell.mod[4 + i * 3]); /* finish (ie end) */ | 256 | pa_pdc_cell->mod[4 + i * 3]); /* finish (ie end) */ |
253 | printk(KERN_DEBUG | 257 | printk(KERN_DEBUG |
254 | " IO_VIEW %ld: 0x%016lx 0x%016lx 0x%016lx\n", | 258 | " IO_VIEW %ld: 0x%016lx 0x%016lx 0x%016lx\n", |
255 | i, io_pdc_cell.mod[2 + i * 3], /* type */ | 259 | i, io_pdc_cell->mod[2 + i * 3], /* type */ |
256 | io_pdc_cell.mod[3 + i * 3], /* start */ | 260 | io_pdc_cell->mod[3 + i * 3], /* start */ |
257 | io_pdc_cell.mod[4 + i * 3]); /* finish (ie end) */ | 261 | io_pdc_cell->mod[4 + i * 3]); /* finish (ie end) */ |
258 | } | 262 | } |
259 | printk(KERN_DEBUG "\n"); | 263 | printk(KERN_DEBUG "\n"); |
260 | break; | 264 | break; |
261 | } | 265 | } |
262 | #endif /* DEBUG_PAT */ | 266 | #endif /* DEBUG_PAT */ |
267 | |||
268 | kfree(pa_pdc_cell); | ||
269 | |||
263 | return PDC_OK; | 270 | return PDC_OK; |
264 | } | 271 | } |
265 | 272 | ||
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c index 8007f1e65729..330f536a9324 100644 --- a/arch/parisc/kernel/irq.c +++ b/arch/parisc/kernel/irq.c | |||
@@ -120,7 +120,7 @@ int cpu_check_affinity(unsigned int irq, const struct cpumask *dest) | |||
120 | if (CHECK_IRQ_PER_CPU(irq)) { | 120 | if (CHECK_IRQ_PER_CPU(irq)) { |
121 | /* Bad linux design decision. The mask has already | 121 | /* Bad linux design decision. The mask has already |
122 | * been set; we must reset it */ | 122 | * been set; we must reset it */ |
123 | cpumask_setall(&irq_desc[irq].affinity); | 123 | cpumask_setall(irq_desc[irq].affinity); |
124 | return -EINVAL; | 124 | return -EINVAL; |
125 | } | 125 | } |
126 | 126 | ||
@@ -138,13 +138,13 @@ static int cpu_set_affinity_irq(unsigned int irq, const struct cpumask *dest) | |||
138 | if (cpu_dest < 0) | 138 | if (cpu_dest < 0) |
139 | return -1; | 139 | return -1; |
140 | 140 | ||
141 | cpumask_copy(&irq_desc[irq].affinity, dest); | 141 | cpumask_copy(irq_desc[irq].affinity, dest); |
142 | 142 | ||
143 | return 0; | 143 | return 0; |
144 | } | 144 | } |
145 | #endif | 145 | #endif |
146 | 146 | ||
147 | static struct hw_interrupt_type cpu_interrupt_type = { | 147 | static struct irq_chip cpu_interrupt_type = { |
148 | .typename = "CPU", | 148 | .typename = "CPU", |
149 | .startup = cpu_startup_irq, | 149 | .startup = cpu_startup_irq, |
150 | .shutdown = cpu_disable_irq, | 150 | .shutdown = cpu_disable_irq, |
@@ -299,7 +299,7 @@ int txn_alloc_irq(unsigned int bits_wide) | |||
299 | unsigned long txn_affinity_addr(unsigned int irq, int cpu) | 299 | unsigned long txn_affinity_addr(unsigned int irq, int cpu) |
300 | { | 300 | { |
301 | #ifdef CONFIG_SMP | 301 | #ifdef CONFIG_SMP |
302 | cpumask_copy(&irq_desc[irq].affinity, cpumask_of(cpu)); | 302 | cpumask_copy(irq_desc[irq].affinity, cpumask_of(cpu)); |
303 | #endif | 303 | #endif |
304 | 304 | ||
305 | return per_cpu(cpu_data, cpu).txn_addr; | 305 | return per_cpu(cpu_data, cpu).txn_addr; |
@@ -356,7 +356,7 @@ void do_cpu_irq_mask(struct pt_regs *regs) | |||
356 | irq = eirr_to_irq(eirr_val); | 356 | irq = eirr_to_irq(eirr_val); |
357 | 357 | ||
358 | #ifdef CONFIG_SMP | 358 | #ifdef CONFIG_SMP |
359 | cpumask_copy(&dest, &irq_desc[irq].affinity); | 359 | cpumask_copy(&dest, irq_desc[irq].affinity); |
360 | if (CHECK_IRQ_PER_CPU(irq_desc[irq].status) && | 360 | if (CHECK_IRQ_PER_CPU(irq_desc[irq].status) && |
361 | !cpu_isset(smp_processor_id(), dest)) { | 361 | !cpu_isset(smp_processor_id(), dest)) { |
362 | int cpu = first_cpu(dest); | 362 | int cpu = first_cpu(dest); |
diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c index 7d927eac932b..c07f618ff7da 100644 --- a/arch/parisc/kernel/pci-dma.c +++ b/arch/parisc/kernel/pci-dma.c | |||
@@ -90,12 +90,14 @@ static inline int map_pte_uncached(pte_t * pte, | |||
90 | if (end > PMD_SIZE) | 90 | if (end > PMD_SIZE) |
91 | end = PMD_SIZE; | 91 | end = PMD_SIZE; |
92 | do { | 92 | do { |
93 | unsigned long flags; | ||
94 | |||
93 | if (!pte_none(*pte)) | 95 | if (!pte_none(*pte)) |
94 | printk(KERN_ERR "map_pte_uncached: page already exists\n"); | 96 | printk(KERN_ERR "map_pte_uncached: page already exists\n"); |
95 | set_pte(pte, __mk_pte(*paddr_ptr, PAGE_KERNEL_UNC)); | 97 | set_pte(pte, __mk_pte(*paddr_ptr, PAGE_KERNEL_UNC)); |
96 | purge_tlb_start(); | 98 | purge_tlb_start(flags); |
97 | pdtlb_kernel(orig_vaddr); | 99 | pdtlb_kernel(orig_vaddr); |
98 | purge_tlb_end(); | 100 | purge_tlb_end(flags); |
99 | vaddr += PAGE_SIZE; | 101 | vaddr += PAGE_SIZE; |
100 | orig_vaddr += PAGE_SIZE; | 102 | orig_vaddr += PAGE_SIZE; |
101 | (*paddr_ptr) += PAGE_SIZE; | 103 | (*paddr_ptr) += PAGE_SIZE; |
@@ -168,11 +170,13 @@ static inline void unmap_uncached_pte(pmd_t * pmd, unsigned long vaddr, | |||
168 | if (end > PMD_SIZE) | 170 | if (end > PMD_SIZE) |
169 | end = PMD_SIZE; | 171 | end = PMD_SIZE; |
170 | do { | 172 | do { |
173 | unsigned long flags; | ||
171 | pte_t page = *pte; | 174 | pte_t page = *pte; |
175 | |||
172 | pte_clear(&init_mm, vaddr, pte); | 176 | pte_clear(&init_mm, vaddr, pte); |
173 | purge_tlb_start(); | 177 | purge_tlb_start(flags); |
174 | pdtlb_kernel(orig_vaddr); | 178 | pdtlb_kernel(orig_vaddr); |
175 | purge_tlb_end(); | 179 | purge_tlb_end(flags); |
176 | vaddr += PAGE_SIZE; | 180 | vaddr += PAGE_SIZE; |
177 | orig_vaddr += PAGE_SIZE; | 181 | orig_vaddr += PAGE_SIZE; |
178 | pte++; | 182 | pte++; |
diff --git a/arch/parisc/kernel/pci.c b/arch/parisc/kernel/pci.c index 6936386c9861..f7064abc3bb6 100644 --- a/arch/parisc/kernel/pci.c +++ b/arch/parisc/kernel/pci.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: pci.c,v 1.6 2000/01/29 00:12:05 grundler Exp $ | 1 | /* |
2 | * | ||
3 | * This file is subject to the terms and conditions of the GNU General Public | 2 | * This file is subject to the terms and conditions of the GNU General Public |
4 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
5 | * for more details. | 4 | * for more details. |
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c index 61c07078c072..1f3aa8db0203 100644 --- a/arch/parisc/kernel/process.c +++ b/arch/parisc/kernel/process.c | |||
@@ -156,7 +156,7 @@ void machine_power_off(void) | |||
156 | * software. The user has to press the button himself. */ | 156 | * software. The user has to press the button himself. */ |
157 | 157 | ||
158 | printk(KERN_EMERG "System shut down completed.\n" | 158 | printk(KERN_EMERG "System shut down completed.\n" |
159 | KERN_EMERG "Please power this system off now."); | 159 | "Please power this system off now."); |
160 | } | 160 | } |
161 | 161 | ||
162 | void (*pm_power_off)(void) = machine_power_off; | 162 | void (*pm_power_off)(void) = machine_power_off; |
diff --git a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c index e09d0f7fb6b0..c8fb61ed32f4 100644 --- a/arch/parisc/kernel/processor.c +++ b/arch/parisc/kernel/processor.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: processor.c,v 1.1 2002/07/20 16:27:06 rhirst Exp $ | 1 | /* |
2 | * | ||
3 | * Initial setup-routines for HP 9000 based hardware. | 2 | * Initial setup-routines for HP 9000 based hardware. |
4 | * | 3 | * |
5 | * Copyright (C) 1991, 1992, 1995 Linus Torvalds | 4 | * Copyright (C) 1991, 1992, 1995 Linus Torvalds |
@@ -121,22 +120,28 @@ static int __cpuinit processor_probe(struct parisc_device *dev) | |||
121 | if (is_pdc_pat()) { | 120 | if (is_pdc_pat()) { |
122 | ulong status; | 121 | ulong status; |
123 | unsigned long bytecnt; | 122 | unsigned long bytecnt; |
124 | pdc_pat_cell_mod_maddr_block_t pa_pdc_cell; | 123 | pdc_pat_cell_mod_maddr_block_t *pa_pdc_cell; |
125 | #undef USE_PAT_CPUID | 124 | #undef USE_PAT_CPUID |
126 | #ifdef USE_PAT_CPUID | 125 | #ifdef USE_PAT_CPUID |
127 | struct pdc_pat_cpu_num cpu_info; | 126 | struct pdc_pat_cpu_num cpu_info; |
128 | #endif | 127 | #endif |
129 | 128 | ||
129 | pa_pdc_cell = kmalloc(sizeof (*pa_pdc_cell), GFP_KERNEL); | ||
130 | if (!pa_pdc_cell) | ||
131 | panic("couldn't allocate memory for PDC_PAT_CELL!"); | ||
132 | |||
130 | status = pdc_pat_cell_module(&bytecnt, dev->pcell_loc, | 133 | status = pdc_pat_cell_module(&bytecnt, dev->pcell_loc, |
131 | dev->mod_index, PA_VIEW, &pa_pdc_cell); | 134 | dev->mod_index, PA_VIEW, pa_pdc_cell); |
132 | 135 | ||
133 | BUG_ON(PDC_OK != status); | 136 | BUG_ON(PDC_OK != status); |
134 | 137 | ||
135 | /* verify it's the same as what do_pat_inventory() found */ | 138 | /* verify it's the same as what do_pat_inventory() found */ |
136 | BUG_ON(dev->mod_info != pa_pdc_cell.mod_info); | 139 | BUG_ON(dev->mod_info != pa_pdc_cell->mod_info); |
137 | BUG_ON(dev->pmod_loc != pa_pdc_cell.mod_location); | 140 | BUG_ON(dev->pmod_loc != pa_pdc_cell->mod_location); |
141 | |||
142 | txn_addr = pa_pdc_cell->mod[0]; /* id_eid for IO sapic */ | ||
138 | 143 | ||
139 | txn_addr = pa_pdc_cell.mod[0]; /* id_eid for IO sapic */ | 144 | kfree(pa_pdc_cell); |
140 | 145 | ||
141 | #ifdef USE_PAT_CPUID | 146 | #ifdef USE_PAT_CPUID |
142 | /* We need contiguous numbers for cpuid. Firmware's notion | 147 | /* We need contiguous numbers for cpuid. Firmware's notion |
diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c index 82131ca8e05c..cb71f3dac995 100644 --- a/arch/parisc/kernel/setup.c +++ b/arch/parisc/kernel/setup.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: setup.c,v 1.8 2000/02/02 04:42:38 prumpf Exp $ | 1 | /* |
2 | * | ||
3 | * Initial setup-routines for HP 9000 based hardware. | 2 | * Initial setup-routines for HP 9000 based hardware. |
4 | * | 3 | * |
5 | * Copyright (C) 1991, 1992, 1995 Linus Torvalds | 4 | * Copyright (C) 1991, 1992, 1995 Linus Torvalds |
diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c index 1adb40c81669..92a0acaa0d12 100644 --- a/arch/parisc/kernel/sys_parisc32.c +++ b/arch/parisc/kernel/sys_parisc32.c | |||
@@ -174,68 +174,6 @@ asmlinkage long sys32_sched_rr_get_interval(pid_t pid, | |||
174 | return ret; | 174 | return ret; |
175 | } | 175 | } |
176 | 176 | ||
177 | /*** copied from mips64 ***/ | ||
178 | /* | ||
179 | * Ooo, nasty. We need here to frob 32-bit unsigned longs to | ||
180 | * 64-bit unsigned longs. | ||
181 | */ | ||
182 | |||
183 | static inline int | ||
184 | get_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset) | ||
185 | { | ||
186 | n = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32)); | ||
187 | if (ufdset) { | ||
188 | unsigned long odd; | ||
189 | |||
190 | if (!access_ok(VERIFY_WRITE, ufdset, n*sizeof(u32))) | ||
191 | return -EFAULT; | ||
192 | |||
193 | odd = n & 1UL; | ||
194 | n &= ~1UL; | ||
195 | while (n) { | ||
196 | unsigned long h, l; | ||
197 | __get_user(l, ufdset); | ||
198 | __get_user(h, ufdset+1); | ||
199 | ufdset += 2; | ||
200 | *fdset++ = h << 32 | l; | ||
201 | n -= 2; | ||
202 | } | ||
203 | if (odd) | ||
204 | __get_user(*fdset, ufdset); | ||
205 | } else { | ||
206 | /* Tricky, must clear full unsigned long in the | ||
207 | * kernel fdset at the end, this makes sure that | ||
208 | * actually happens. | ||
209 | */ | ||
210 | memset(fdset, 0, ((n + 1) & ~1)*sizeof(u32)); | ||
211 | } | ||
212 | return 0; | ||
213 | } | ||
214 | |||
215 | static inline void | ||
216 | set_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset) | ||
217 | { | ||
218 | unsigned long odd; | ||
219 | n = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32)); | ||
220 | |||
221 | if (!ufdset) | ||
222 | return; | ||
223 | |||
224 | odd = n & 1UL; | ||
225 | n &= ~1UL; | ||
226 | while (n) { | ||
227 | unsigned long h, l; | ||
228 | l = *fdset++; | ||
229 | h = l >> 32; | ||
230 | __put_user(l, ufdset); | ||
231 | __put_user(h, ufdset+1); | ||
232 | ufdset += 2; | ||
233 | n -= 2; | ||
234 | } | ||
235 | if (odd) | ||
236 | __put_user(*fdset, ufdset); | ||
237 | } | ||
238 | |||
239 | struct msgbuf32 { | 177 | struct msgbuf32 { |
240 | int mtype; | 178 | int mtype; |
241 | char mtext[1]; | 179 | char mtext[1]; |
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index 03b9a01bc16c..cf145eb026b3 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S | |||
@@ -413,6 +413,10 @@ | |||
413 | ENTRY_SAME(dup3) | 413 | ENTRY_SAME(dup3) |
414 | ENTRY_SAME(pipe2) | 414 | ENTRY_SAME(pipe2) |
415 | ENTRY_SAME(inotify_init1) | 415 | ENTRY_SAME(inotify_init1) |
416 | ENTRY_COMP(preadv) /* 315 */ | ||
417 | ENTRY_COMP(pwritev) | ||
418 | ENTRY_COMP(rt_tgsigqueueinfo) | ||
419 | ENTRY_SAME(perf_counter_open) | ||
416 | 420 | ||
417 | /* Nothing yet */ | 421 | /* Nothing yet */ |
418 | 422 | ||
diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c index d4dd05674c62..a79c6f9e7e2c 100644 --- a/arch/parisc/kernel/time.c +++ b/arch/parisc/kernel/time.c | |||
@@ -56,9 +56,9 @@ static unsigned long clocktick __read_mostly; /* timer cycles per tick */ | |||
56 | */ | 56 | */ |
57 | irqreturn_t __irq_entry timer_interrupt(int irq, void *dev_id) | 57 | irqreturn_t __irq_entry timer_interrupt(int irq, void *dev_id) |
58 | { | 58 | { |
59 | unsigned long now; | 59 | unsigned long now, now2; |
60 | unsigned long next_tick; | 60 | unsigned long next_tick; |
61 | unsigned long cycles_elapsed, ticks_elapsed; | 61 | unsigned long cycles_elapsed, ticks_elapsed = 1; |
62 | unsigned long cycles_remainder; | 62 | unsigned long cycles_remainder; |
63 | unsigned int cpu = smp_processor_id(); | 63 | unsigned int cpu = smp_processor_id(); |
64 | struct cpuinfo_parisc *cpuinfo = &per_cpu(cpu_data, cpu); | 64 | struct cpuinfo_parisc *cpuinfo = &per_cpu(cpu_data, cpu); |
@@ -71,44 +71,24 @@ irqreturn_t __irq_entry timer_interrupt(int irq, void *dev_id) | |||
71 | /* Initialize next_tick to the expected tick time. */ | 71 | /* Initialize next_tick to the expected tick time. */ |
72 | next_tick = cpuinfo->it_value; | 72 | next_tick = cpuinfo->it_value; |
73 | 73 | ||
74 | /* Get current interval timer. | 74 | /* Get current cycle counter (Control Register 16). */ |
75 | * CR16 reads as 64 bits in CPU wide mode. | ||
76 | * CR16 reads as 32 bits in CPU narrow mode. | ||
77 | */ | ||
78 | now = mfctl(16); | 75 | now = mfctl(16); |
79 | 76 | ||
80 | cycles_elapsed = now - next_tick; | 77 | cycles_elapsed = now - next_tick; |
81 | 78 | ||
82 | if ((cycles_elapsed >> 5) < cpt) { | 79 | if ((cycles_elapsed >> 6) < cpt) { |
83 | /* use "cheap" math (add/subtract) instead | 80 | /* use "cheap" math (add/subtract) instead |
84 | * of the more expensive div/mul method | 81 | * of the more expensive div/mul method |
85 | */ | 82 | */ |
86 | cycles_remainder = cycles_elapsed; | 83 | cycles_remainder = cycles_elapsed; |
87 | ticks_elapsed = 1; | ||
88 | while (cycles_remainder > cpt) { | 84 | while (cycles_remainder > cpt) { |
89 | cycles_remainder -= cpt; | 85 | cycles_remainder -= cpt; |
90 | ticks_elapsed++; | 86 | ticks_elapsed++; |
91 | } | 87 | } |
92 | } else { | 88 | } else { |
89 | /* TODO: Reduce this to one fdiv op */ | ||
93 | cycles_remainder = cycles_elapsed % cpt; | 90 | cycles_remainder = cycles_elapsed % cpt; |
94 | ticks_elapsed = 1 + cycles_elapsed / cpt; | 91 | ticks_elapsed += cycles_elapsed / cpt; |
95 | } | ||
96 | |||
97 | /* Can we differentiate between "early CR16" (aka Scenario 1) and | ||
98 | * "long delay" (aka Scenario 3)? I don't think so. | ||
99 | * | ||
100 | * We expected timer_interrupt to be delivered at least a few hundred | ||
101 | * cycles after the IT fires. But it's arbitrary how much time passes | ||
102 | * before we call it "late". I've picked one second. | ||
103 | */ | ||
104 | if (unlikely(ticks_elapsed > HZ)) { | ||
105 | /* Scenario 3: very long delay? bad in any case */ | ||
106 | printk (KERN_CRIT "timer_interrupt(CPU %d): delayed!" | ||
107 | " cycles %lX rem %lX " | ||
108 | " next/now %lX/%lX\n", | ||
109 | cpu, | ||
110 | cycles_elapsed, cycles_remainder, | ||
111 | next_tick, now ); | ||
112 | } | 92 | } |
113 | 93 | ||
114 | /* convert from "division remainder" to "remainder of clock tick" */ | 94 | /* convert from "division remainder" to "remainder of clock tick" */ |
@@ -122,18 +102,56 @@ irqreturn_t __irq_entry timer_interrupt(int irq, void *dev_id) | |||
122 | 102 | ||
123 | cpuinfo->it_value = next_tick; | 103 | cpuinfo->it_value = next_tick; |
124 | 104 | ||
125 | /* Skip one clocktick on purpose if we are likely to miss next_tick. | 105 | /* Program the IT when to deliver the next interrupt. |
126 | * We want to avoid the new next_tick being less than CR16. | 106 | * Only bottom 32-bits of next_tick are writable in CR16! |
127 | * If that happened, itimer wouldn't fire until CR16 wrapped. | ||
128 | * We'll catch the tick we missed on the tick after that. | ||
129 | */ | 107 | */ |
130 | if (!(cycles_remainder >> 13)) | ||
131 | next_tick += cpt; | ||
132 | |||
133 | /* Program the IT when to deliver the next interrupt. */ | ||
134 | /* Only bottom 32-bits of next_tick are written to cr16. */ | ||
135 | mtctl(next_tick, 16); | 108 | mtctl(next_tick, 16); |
136 | 109 | ||
110 | /* Skip one clocktick on purpose if we missed next_tick. | ||
111 | * The new CR16 must be "later" than current CR16 otherwise | ||
112 | * itimer would not fire until CR16 wrapped - e.g 4 seconds | ||
113 | * later on a 1Ghz processor. We'll account for the missed | ||
114 | * tick on the next timer interrupt. | ||
115 | * | ||
116 | * "next_tick - now" will always give the difference regardless | ||
117 | * if one or the other wrapped. If "now" is "bigger" we'll end up | ||
118 | * with a very large unsigned number. | ||
119 | */ | ||
120 | now2 = mfctl(16); | ||
121 | if (next_tick - now2 > cpt) | ||
122 | mtctl(next_tick+cpt, 16); | ||
123 | |||
124 | #if 1 | ||
125 | /* | ||
126 | * GGG: DEBUG code for how many cycles programming CR16 used. | ||
127 | */ | ||
128 | if (unlikely(now2 - now > 0x3000)) /* 12K cycles */ | ||
129 | printk (KERN_CRIT "timer_interrupt(CPU %d): SLOW! 0x%lx cycles!" | ||
130 | " cyc %lX rem %lX " | ||
131 | " next/now %lX/%lX\n", | ||
132 | cpu, now2 - now, cycles_elapsed, cycles_remainder, | ||
133 | next_tick, now ); | ||
134 | #endif | ||
135 | |||
136 | /* Can we differentiate between "early CR16" (aka Scenario 1) and | ||
137 | * "long delay" (aka Scenario 3)? I don't think so. | ||
138 | * | ||
139 | * Timer_interrupt will be delivered at least a few hundred cycles | ||
140 | * after the IT fires. But it's arbitrary how much time passes | ||
141 | * before we call it "late". I've picked one second. | ||
142 | * | ||
143 | * It's important NO printk's are between reading CR16 and | ||
144 | * setting up the next value. May introduce huge variance. | ||
145 | */ | ||
146 | if (unlikely(ticks_elapsed > HZ)) { | ||
147 | /* Scenario 3: very long delay? bad in any case */ | ||
148 | printk (KERN_CRIT "timer_interrupt(CPU %d): delayed!" | ||
149 | " cycles %lX rem %lX " | ||
150 | " next/now %lX/%lX\n", | ||
151 | cpu, | ||
152 | cycles_elapsed, cycles_remainder, | ||
153 | next_tick, now ); | ||
154 | } | ||
137 | 155 | ||
138 | /* Done mucking with unreliable delivery of interrupts. | 156 | /* Done mucking with unreliable delivery of interrupts. |
139 | * Go do system house keeping. | 157 | * Go do system house keeping. |
@@ -173,7 +191,7 @@ EXPORT_SYMBOL(profile_pc); | |||
173 | 191 | ||
174 | /* clock source code */ | 192 | /* clock source code */ |
175 | 193 | ||
176 | static cycle_t read_cr16(void) | 194 | static cycle_t read_cr16(struct clocksource *cs) |
177 | { | 195 | { |
178 | return get_cycles(); | 196 | return get_cycles(); |
179 | } | 197 | } |
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c index c32f5d6d778e..528f0ff9b273 100644 --- a/arch/parisc/kernel/traps.c +++ b/arch/parisc/kernel/traps.c | |||
@@ -250,15 +250,14 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err) | |||
250 | oops_enter(); | 250 | oops_enter(); |
251 | 251 | ||
252 | /* Amuse the user in a SPARC fashion */ | 252 | /* Amuse the user in a SPARC fashion */ |
253 | if (err) printk( | 253 | if (err) printk(KERN_CRIT |
254 | KERN_CRIT " _______________________________ \n" | 254 | " _______________________________ \n" |
255 | KERN_CRIT " < Your System ate a SPARC! Gah! >\n" | 255 | " < Your System ate a SPARC! Gah! >\n" |
256 | KERN_CRIT " ------------------------------- \n" | 256 | " ------------------------------- \n" |
257 | KERN_CRIT " \\ ^__^\n" | 257 | " \\ ^__^\n" |
258 | KERN_CRIT " \\ (xx)\\_______\n" | 258 | " (__)\\ )\\/\\\n" |
259 | KERN_CRIT " (__)\\ )\\/\\\n" | 259 | " U ||----w |\n" |
260 | KERN_CRIT " U ||----w |\n" | 260 | " || ||\n"); |
261 | KERN_CRIT " || ||\n"); | ||
262 | 261 | ||
263 | /* unlock the pdc lock if necessary */ | 262 | /* unlock the pdc lock if necessary */ |
264 | pdc_emergency_unlock(); | 263 | pdc_emergency_unlock(); |
@@ -797,7 +796,8 @@ void notrace handle_interruption(int code, struct pt_regs *regs) | |||
797 | else | 796 | else |
798 | printk(KERN_DEBUG "User Fault (long pointer) (fault %d) ", | 797 | printk(KERN_DEBUG "User Fault (long pointer) (fault %d) ", |
799 | code); | 798 | code); |
800 | printk("pid=%d command='%s'\n", task_pid_nr(current), current->comm); | 799 | printk(KERN_CONT "pid=%d command='%s'\n", |
800 | task_pid_nr(current), current->comm); | ||
801 | show_regs(regs); | 801 | show_regs(regs); |
802 | #endif | 802 | #endif |
803 | si.si_signo = SIGSEGV; | 803 | si.si_signo = SIGSEGV; |
diff --git a/arch/parisc/lib/checksum.c b/arch/parisc/lib/checksum.c index 462696d30d3b..ae66d31f9ecf 100644 --- a/arch/parisc/lib/checksum.c +++ b/arch/parisc/lib/checksum.c | |||
@@ -13,8 +13,6 @@ | |||
13 | * modify it under the terms of the GNU General Public License | 13 | * modify it under the terms of the GNU General Public License |
14 | * as published by the Free Software Foundation; either version | 14 | * as published by the Free Software Foundation; either version |
15 | * 2 of the License, or (at your option) any later version. | 15 | * 2 of the License, or (at your option) any later version. |
16 | * | ||
17 | * $Id: checksum.c,v 1.3 1997/12/01 17:57:34 ralf Exp $ | ||
18 | */ | 16 | */ |
19 | #include <linux/module.h> | 17 | #include <linux/module.h> |
20 | #include <linux/types.h> | 18 | #include <linux/types.h> |
diff --git a/arch/parisc/lib/memcpy.c b/arch/parisc/lib/memcpy.c index bbda909c866e..abf41f4632a9 100644 --- a/arch/parisc/lib/memcpy.c +++ b/arch/parisc/lib/memcpy.c | |||
@@ -405,7 +405,7 @@ byte_copy: | |||
405 | 405 | ||
406 | unaligned_copy: | 406 | unaligned_copy: |
407 | /* possibly we are aligned on a word, but not on a double... */ | 407 | /* possibly we are aligned on a word, but not on a double... */ |
408 | if (likely(t1 & (sizeof(unsigned int)-1)) == 0) { | 408 | if (likely((t1 & (sizeof(unsigned int)-1)) == 0)) { |
409 | t2 = src & (sizeof(unsigned int) - 1); | 409 | t2 = src & (sizeof(unsigned int) - 1); |
410 | 410 | ||
411 | if (unlikely(t2 != 0)) { | 411 | if (unlikely(t2 != 0)) { |
diff --git a/arch/parisc/math-emu/decode_exc.c b/arch/parisc/math-emu/decode_exc.c index 66c8a9f6a27e..3ca1c6149218 100644 --- a/arch/parisc/math-emu/decode_exc.c +++ b/arch/parisc/math-emu/decode_exc.c | |||
@@ -40,7 +40,7 @@ | |||
40 | * END_DESC | 40 | * END_DESC |
41 | */ | 41 | */ |
42 | 42 | ||
43 | 43 | #include <linux/kernel.h> | |
44 | #include "float.h" | 44 | #include "float.h" |
45 | #include "sgl_float.h" | 45 | #include "sgl_float.h" |
46 | #include "dbl_float.h" | 46 | #include "dbl_float.h" |
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c index 92c7fa4ecc3f..c6afbfc95770 100644 --- a/arch/parisc/mm/fault.c +++ b/arch/parisc/mm/fault.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: fault.c,v 1.5 2000/01/26 16:20:29 jsm Exp $ | 1 | /* |
2 | * | ||
3 | * This file is subject to the terms and conditions of the GNU General Public | 2 | * This file is subject to the terms and conditions of the GNU General Public |
4 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
5 | * for more details. | 4 | * for more details. |
@@ -202,7 +201,7 @@ good_area: | |||
202 | * fault. | 201 | * fault. |
203 | */ | 202 | */ |
204 | 203 | ||
205 | fault = handle_mm_fault(mm, vma, address, (acc_type & VM_WRITE) != 0); | 204 | fault = handle_mm_fault(mm, vma, address, (acc_type & VM_WRITE) ? FAULT_FLAG_WRITE : 0); |
206 | if (unlikely(fault & VM_FAULT_ERROR)) { | 205 | if (unlikely(fault & VM_FAULT_ERROR)) { |
207 | /* | 206 | /* |
208 | * We hit a shared mapping outside of the file, or some | 207 | * We hit a shared mapping outside of the file, or some |
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c index 4356ceb1e366..b0831d9e35cb 100644 --- a/arch/parisc/mm/init.c +++ b/arch/parisc/mm/init.c | |||
@@ -370,34 +370,22 @@ static void __init setup_bootmem(void) | |||
370 | 370 | ||
371 | void free_initmem(void) | 371 | void free_initmem(void) |
372 | { | 372 | { |
373 | unsigned long addr, init_begin, init_end; | 373 | unsigned long addr; |
374 | 374 | unsigned long init_begin = (unsigned long)__init_begin; | |
375 | printk(KERN_INFO "Freeing unused kernel memory: "); | 375 | unsigned long init_end = (unsigned long)__init_end; |
376 | 376 | ||
377 | #ifdef CONFIG_DEBUG_KERNEL | 377 | #ifdef CONFIG_DEBUG_KERNEL |
378 | /* Attempt to catch anyone trying to execute code here | 378 | /* Attempt to catch anyone trying to execute code here |
379 | * by filling the page with BRK insns. | 379 | * by filling the page with BRK insns. |
380 | * | ||
381 | * If we disable interrupts for all CPUs, then IPI stops working. | ||
382 | * Kinda breaks the global cache flushing. | ||
383 | */ | 380 | */ |
384 | local_irq_disable(); | 381 | memset((void *)init_begin, 0x00, init_end - init_begin); |
385 | 382 | flush_icache_range(init_begin, init_end); | |
386 | memset(__init_begin, 0x00, | ||
387 | (unsigned long)__init_end - (unsigned long)__init_begin); | ||
388 | |||
389 | flush_data_cache(); | ||
390 | asm volatile("sync" : : ); | ||
391 | flush_icache_range((unsigned long)__init_begin, (unsigned long)__init_end); | ||
392 | asm volatile("sync" : : ); | ||
393 | |||
394 | local_irq_enable(); | ||
395 | #endif | 383 | #endif |
396 | 384 | ||
397 | /* align __init_begin and __init_end to page size, | 385 | /* align __init_begin and __init_end to page size, |
398 | ignoring linker script where we might have tried to save RAM */ | 386 | ignoring linker script where we might have tried to save RAM */ |
399 | init_begin = PAGE_ALIGN((unsigned long)(__init_begin)); | 387 | init_begin = PAGE_ALIGN(init_begin); |
400 | init_end = PAGE_ALIGN((unsigned long)(__init_end)); | 388 | init_end = PAGE_ALIGN(init_end); |
401 | for (addr = init_begin; addr < init_end; addr += PAGE_SIZE) { | 389 | for (addr = init_begin; addr < init_end; addr += PAGE_SIZE) { |
402 | ClearPageReserved(virt_to_page(addr)); | 390 | ClearPageReserved(virt_to_page(addr)); |
403 | init_page_count(virt_to_page(addr)); | 391 | init_page_count(virt_to_page(addr)); |
@@ -409,7 +397,8 @@ void free_initmem(void) | |||
409 | /* set up a new led state on systems shipped LED State panel */ | 397 | /* set up a new led state on systems shipped LED State panel */ |
410 | pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE); | 398 | pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE); |
411 | 399 | ||
412 | printk("%luk freed\n", (init_end - init_begin) >> 10); | 400 | printk(KERN_INFO "Freeing unused kernel memory: %luk freed\n", |
401 | (init_end - init_begin) >> 10); | ||
413 | } | 402 | } |
414 | 403 | ||
415 | 404 | ||
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index bf6cedfa05db..d00131ca0835 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -62,7 +62,6 @@ config HAVE_LATENCYTOP_SUPPORT | |||
62 | 62 | ||
63 | config TRACE_IRQFLAGS_SUPPORT | 63 | config TRACE_IRQFLAGS_SUPPORT |
64 | bool | 64 | bool |
65 | depends on PPC64 | ||
66 | default y | 65 | default y |
67 | 66 | ||
68 | config LOCKDEP_SUPPORT | 67 | config LOCKDEP_SUPPORT |
diff --git a/arch/powerpc/boot/.gitignore b/arch/powerpc/boot/.gitignore index 2f50acd11a60..3d80c3e9cf60 100644 --- a/arch/powerpc/boot/.gitignore +++ b/arch/powerpc/boot/.gitignore | |||
@@ -36,3 +36,13 @@ zImage.pseries | |||
36 | zconf.h | 36 | zconf.h |
37 | zlib.h | 37 | zlib.h |
38 | zutil.h | 38 | zutil.h |
39 | fdt.c | ||
40 | fdt.h | ||
41 | fdt_ro.c | ||
42 | fdt_rw.c | ||
43 | fdt_strerror.c | ||
44 | fdt_sw.c | ||
45 | fdt_wip.c | ||
46 | libfdt.h | ||
47 | libfdt_internal.h | ||
48 | |||
diff --git a/arch/powerpc/boot/dts/amigaone.dts b/arch/powerpc/boot/dts/amigaone.dts index 26549fca2ed4..49ac36b16dd7 100644 --- a/arch/powerpc/boot/dts/amigaone.dts +++ b/arch/powerpc/boot/dts/amigaone.dts | |||
@@ -70,8 +70,8 @@ | |||
70 | devsel-speed = <0x00000001>; | 70 | devsel-speed = <0x00000001>; |
71 | min-grant = <0>; | 71 | min-grant = <0>; |
72 | max-latency = <0>; | 72 | max-latency = <0>; |
73 | /* First 64k for I/O at 0x0 on PCI mapped to 0x0 on ISA. */ | 73 | /* First 4k for I/O at 0x0 on PCI mapped to 0x0 on ISA. */ |
74 | ranges = <0x00000001 0 0x01000000 0 0x00000000 0x00010000>; | 74 | ranges = <0x00000001 0 0x01000000 0 0x00000000 0x00001000>; |
75 | interrupt-parent = <&i8259>; | 75 | interrupt-parent = <&i8259>; |
76 | #interrupt-cells = <2>; | 76 | #interrupt-cells = <2>; |
77 | #address-cells = <2>; | 77 | #address-cells = <2>; |
diff --git a/arch/powerpc/boot/dts/mpc8569mds.dts b/arch/powerpc/boot/dts/mpc8569mds.dts index a8dcb018c4a5..a680165292f2 100644 --- a/arch/powerpc/boot/dts/mpc8569mds.dts +++ b/arch/powerpc/boot/dts/mpc8569mds.dts | |||
@@ -253,6 +253,7 @@ | |||
253 | /* Filled in by U-Boot */ | 253 | /* Filled in by U-Boot */ |
254 | clock-frequency = <0>; | 254 | clock-frequency = <0>; |
255 | status = "disabled"; | 255 | status = "disabled"; |
256 | sdhci,1-bit-only; | ||
256 | }; | 257 | }; |
257 | 258 | ||
258 | crypto@30000 { | 259 | crypto@30000 { |
diff --git a/arch/powerpc/boot/dts/warp.dts b/arch/powerpc/boot/dts/warp.dts index 01bfb56bbe80..31605ee4afb6 100644 --- a/arch/powerpc/boot/dts/warp.dts +++ b/arch/powerpc/boot/dts/warp.dts | |||
@@ -261,10 +261,11 @@ | |||
261 | compatible = "gpio-leds"; | 261 | compatible = "gpio-leds"; |
262 | green { | 262 | green { |
263 | gpios = <&GPIO1 0 0>; | 263 | gpios = <&GPIO1 0 0>; |
264 | default-state = "on"; | 264 | default-state = "keep"; |
265 | }; | 265 | }; |
266 | red { | 266 | red { |
267 | gpios = <&GPIO1 1 0>; | 267 | gpios = <&GPIO1 1 0>; |
268 | default-state = "keep"; | ||
268 | }; | 269 | }; |
269 | }; | 270 | }; |
270 | 271 | ||
diff --git a/arch/powerpc/configs/44x/warp_defconfig b/arch/powerpc/configs/44x/warp_defconfig index 3b77f092abe1..787635f23d8f 100644 --- a/arch/powerpc/configs/44x/warp_defconfig +++ b/arch/powerpc/configs/44x/warp_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-rc2 | 3 | # Linux kernel version: 2.6.30 |
4 | # Fri Jan 23 07:57:16 2009 | 4 | # Tue Jun 9 23:35:36 2009 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | 7 | ||
@@ -41,6 +41,7 @@ CONFIG_ARCH_HAS_ILOG2_U32=y | |||
41 | CONFIG_GENERIC_HWEIGHT=y | 41 | CONFIG_GENERIC_HWEIGHT=y |
42 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 42 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
43 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 43 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
44 | CONFIG_GENERIC_GPIO=y | ||
44 | # CONFIG_ARCH_NO_VIRT_TO_BUS is not set | 45 | # CONFIG_ARCH_NO_VIRT_TO_BUS is not set |
45 | CONFIG_PPC=y | 46 | CONFIG_PPC=y |
46 | CONFIG_EARLY_PRINTK=y | 47 | CONFIG_EARLY_PRINTK=y |
@@ -53,10 +54,12 @@ CONFIG_PPC_UDBG_16550=y | |||
53 | # CONFIG_GENERIC_TBSYNC is not set | 54 | # CONFIG_GENERIC_TBSYNC is not set |
54 | CONFIG_AUDIT_ARCH=y | 55 | CONFIG_AUDIT_ARCH=y |
55 | CONFIG_GENERIC_BUG=y | 56 | CONFIG_GENERIC_BUG=y |
57 | CONFIG_DTC=y | ||
56 | # CONFIG_DEFAULT_UIMAGE is not set | 58 | # CONFIG_DEFAULT_UIMAGE is not set |
57 | CONFIG_PPC_DCR_NATIVE=y | 59 | CONFIG_PPC_DCR_NATIVE=y |
58 | # CONFIG_PPC_DCR_MMIO is not set | 60 | # CONFIG_PPC_DCR_MMIO is not set |
59 | CONFIG_PPC_DCR=y | 61 | CONFIG_PPC_DCR=y |
62 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||
60 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 63 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
61 | 64 | ||
62 | # | 65 | # |
@@ -74,7 +77,17 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
74 | # CONFIG_BSD_PROCESS_ACCT is not set | 77 | # CONFIG_BSD_PROCESS_ACCT is not set |
75 | # CONFIG_TASKSTATS is not set | 78 | # CONFIG_TASKSTATS is not set |
76 | # CONFIG_AUDIT is not set | 79 | # CONFIG_AUDIT is not set |
77 | # CONFIG_IKCONFIG is not set | 80 | |
81 | # | ||
82 | # RCU Subsystem | ||
83 | # | ||
84 | CONFIG_CLASSIC_RCU=y | ||
85 | # CONFIG_TREE_RCU is not set | ||
86 | # CONFIG_PREEMPT_RCU is not set | ||
87 | # CONFIG_TREE_RCU_TRACE is not set | ||
88 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
89 | CONFIG_IKCONFIG=y | ||
90 | CONFIG_IKCONFIG_PROC=y | ||
78 | CONFIG_LOG_BUF_SHIFT=14 | 91 | CONFIG_LOG_BUF_SHIFT=14 |
79 | CONFIG_GROUP_SCHED=y | 92 | CONFIG_GROUP_SCHED=y |
80 | CONFIG_FAIR_GROUP_SCHED=y | 93 | CONFIG_FAIR_GROUP_SCHED=y |
@@ -82,27 +95,29 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
82 | CONFIG_USER_SCHED=y | 95 | CONFIG_USER_SCHED=y |
83 | # CONFIG_CGROUP_SCHED is not set | 96 | # CONFIG_CGROUP_SCHED is not set |
84 | # CONFIG_CGROUPS is not set | 97 | # CONFIG_CGROUPS is not set |
85 | CONFIG_SYSFS_DEPRECATED=y | 98 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
86 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
87 | # CONFIG_RELAY is not set | 99 | # CONFIG_RELAY is not set |
88 | # CONFIG_NAMESPACES is not set | 100 | # CONFIG_NAMESPACES is not set |
89 | CONFIG_BLK_DEV_INITRD=y | 101 | CONFIG_BLK_DEV_INITRD=y |
90 | CONFIG_INITRAMFS_SOURCE="" | 102 | CONFIG_INITRAMFS_SOURCE="" |
103 | CONFIG_RD_GZIP=y | ||
104 | # CONFIG_RD_BZIP2 is not set | ||
105 | # CONFIG_RD_LZMA is not set | ||
91 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 106 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
92 | CONFIG_SYSCTL=y | 107 | CONFIG_SYSCTL=y |
108 | CONFIG_ANON_INODES=y | ||
93 | CONFIG_EMBEDDED=y | 109 | CONFIG_EMBEDDED=y |
94 | CONFIG_SYSCTL_SYSCALL=y | 110 | CONFIG_SYSCTL_SYSCALL=y |
95 | CONFIG_KALLSYMS=y | 111 | CONFIG_KALLSYMS=y |
96 | # CONFIG_KALLSYMS_ALL is not set | 112 | # CONFIG_KALLSYMS_ALL is not set |
97 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 113 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
98 | # CONFIG_HOTPLUG is not set | 114 | # CONFIG_STRIP_ASM_SYMS is not set |
115 | CONFIG_HOTPLUG=y | ||
99 | CONFIG_PRINTK=y | 116 | CONFIG_PRINTK=y |
100 | CONFIG_BUG=y | 117 | CONFIG_BUG=y |
101 | CONFIG_ELF_CORE=y | 118 | CONFIG_ELF_CORE=y |
102 | CONFIG_COMPAT_BRK=y | ||
103 | CONFIG_BASE_FULL=y | 119 | CONFIG_BASE_FULL=y |
104 | CONFIG_FUTEX=y | 120 | CONFIG_FUTEX=y |
105 | CONFIG_ANON_INODES=y | ||
106 | CONFIG_EPOLL=y | 121 | CONFIG_EPOLL=y |
107 | CONFIG_SIGNALFD=y | 122 | CONFIG_SIGNALFD=y |
108 | CONFIG_TIMERFD=y | 123 | CONFIG_TIMERFD=y |
@@ -110,10 +125,13 @@ CONFIG_EVENTFD=y | |||
110 | CONFIG_SHMEM=y | 125 | CONFIG_SHMEM=y |
111 | CONFIG_AIO=y | 126 | CONFIG_AIO=y |
112 | CONFIG_VM_EVENT_COUNTERS=y | 127 | CONFIG_VM_EVENT_COUNTERS=y |
113 | CONFIG_SLAB=y | 128 | CONFIG_SLUB_DEBUG=y |
114 | # CONFIG_SLUB is not set | 129 | CONFIG_COMPAT_BRK=y |
130 | # CONFIG_SLAB is not set | ||
131 | CONFIG_SLUB=y | ||
115 | # CONFIG_SLOB is not set | 132 | # CONFIG_SLOB is not set |
116 | # CONFIG_PROFILING is not set | 133 | # CONFIG_PROFILING is not set |
134 | # CONFIG_MARKERS is not set | ||
117 | CONFIG_HAVE_OPROFILE=y | 135 | CONFIG_HAVE_OPROFILE=y |
118 | # CONFIG_KPROBES is not set | 136 | # CONFIG_KPROBES is not set |
119 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y | 137 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y |
@@ -121,6 +139,7 @@ CONFIG_HAVE_IOREMAP_PROT=y | |||
121 | CONFIG_HAVE_KPROBES=y | 139 | CONFIG_HAVE_KPROBES=y |
122 | CONFIG_HAVE_KRETPROBES=y | 140 | CONFIG_HAVE_KRETPROBES=y |
123 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 141 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
142 | # CONFIG_SLOW_WORK is not set | ||
124 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 143 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
125 | CONFIG_SLABINFO=y | 144 | CONFIG_SLABINFO=y |
126 | CONFIG_RT_MUTEXES=y | 145 | CONFIG_RT_MUTEXES=y |
@@ -133,7 +152,6 @@ CONFIG_MODULE_UNLOAD=y | |||
133 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 152 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
134 | CONFIG_BLOCK=y | 153 | CONFIG_BLOCK=y |
135 | # CONFIG_LBD is not set | 154 | # CONFIG_LBD is not set |
136 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
137 | # CONFIG_BLK_DEV_BSG is not set | 155 | # CONFIG_BLK_DEV_BSG is not set |
138 | # CONFIG_BLK_DEV_INTEGRITY is not set | 156 | # CONFIG_BLK_DEV_INTEGRITY is not set |
139 | 157 | ||
@@ -149,11 +167,6 @@ CONFIG_DEFAULT_AS=y | |||
149 | # CONFIG_DEFAULT_CFQ is not set | 167 | # CONFIG_DEFAULT_CFQ is not set |
150 | # CONFIG_DEFAULT_NOOP is not set | 168 | # CONFIG_DEFAULT_NOOP is not set |
151 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 169 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
152 | CONFIG_CLASSIC_RCU=y | ||
153 | # CONFIG_TREE_RCU is not set | ||
154 | # CONFIG_PREEMPT_RCU is not set | ||
155 | # CONFIG_TREE_RCU_TRACE is not set | ||
156 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
157 | # CONFIG_FREEZER is not set | 170 | # CONFIG_FREEZER is not set |
158 | 171 | ||
159 | # | 172 | # |
@@ -173,10 +186,11 @@ CONFIG_WARP=y | |||
173 | # CONFIG_ARCHES is not set | 186 | # CONFIG_ARCHES is not set |
174 | # CONFIG_CANYONLANDS is not set | 187 | # CONFIG_CANYONLANDS is not set |
175 | # CONFIG_GLACIER is not set | 188 | # CONFIG_GLACIER is not set |
189 | # CONFIG_REDWOOD is not set | ||
176 | # CONFIG_YOSEMITE is not set | 190 | # CONFIG_YOSEMITE is not set |
177 | # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set | 191 | # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set |
178 | # CONFIG_PPC44x_SIMPLE is not set | 192 | # CONFIG_PPC44x_SIMPLE is not set |
179 | # CONFIG_PPC4xx_GPIO is not set | 193 | CONFIG_PPC4xx_GPIO=y |
180 | CONFIG_440EP=y | 194 | CONFIG_440EP=y |
181 | CONFIG_IBM440EP_ERR42=y | 195 | CONFIG_IBM440EP_ERR42=y |
182 | # CONFIG_IPIC is not set | 196 | # CONFIG_IPIC is not set |
@@ -235,9 +249,13 @@ CONFIG_ZONE_DMA_FLAG=1 | |||
235 | CONFIG_BOUNCE=y | 249 | CONFIG_BOUNCE=y |
236 | CONFIG_VIRT_TO_BUS=y | 250 | CONFIG_VIRT_TO_BUS=y |
237 | CONFIG_UNEVICTABLE_LRU=y | 251 | CONFIG_UNEVICTABLE_LRU=y |
252 | CONFIG_HAVE_MLOCK=y | ||
253 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
254 | CONFIG_STDBINUTILS=y | ||
238 | CONFIG_PPC_4K_PAGES=y | 255 | CONFIG_PPC_4K_PAGES=y |
239 | # CONFIG_PPC_16K_PAGES is not set | 256 | # CONFIG_PPC_16K_PAGES is not set |
240 | # CONFIG_PPC_64K_PAGES is not set | 257 | # CONFIG_PPC_64K_PAGES is not set |
258 | # CONFIG_PPC_256K_PAGES is not set | ||
241 | CONFIG_FORCE_MAX_ZONEORDER=11 | 259 | CONFIG_FORCE_MAX_ZONEORDER=11 |
242 | CONFIG_PROC_DEVICETREE=y | 260 | CONFIG_PROC_DEVICETREE=y |
243 | CONFIG_CMDLINE_BOOL=y | 261 | CONFIG_CMDLINE_BOOL=y |
@@ -256,6 +274,7 @@ CONFIG_PPC_PCI_CHOICE=y | |||
256 | # CONFIG_PCI_DOMAINS is not set | 274 | # CONFIG_PCI_DOMAINS is not set |
257 | # CONFIG_PCI_SYSCALL is not set | 275 | # CONFIG_PCI_SYSCALL is not set |
258 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 276 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
277 | # CONFIG_PCCARD is not set | ||
259 | # CONFIG_HAS_RAPIDIO is not set | 278 | # CONFIG_HAS_RAPIDIO is not set |
260 | 279 | ||
261 | # | 280 | # |
@@ -271,14 +290,12 @@ CONFIG_PAGE_OFFSET=0xc0000000 | |||
271 | CONFIG_KERNEL_START=0xc0000000 | 290 | CONFIG_KERNEL_START=0xc0000000 |
272 | CONFIG_PHYSICAL_START=0x00000000 | 291 | CONFIG_PHYSICAL_START=0x00000000 |
273 | CONFIG_TASK_SIZE=0xc0000000 | 292 | CONFIG_TASK_SIZE=0xc0000000 |
274 | CONFIG_CONSISTENT_START=0xff100000 | ||
275 | CONFIG_CONSISTENT_SIZE=0x00200000 | 293 | CONFIG_CONSISTENT_SIZE=0x00200000 |
276 | CONFIG_NET=y | 294 | CONFIG_NET=y |
277 | 295 | ||
278 | # | 296 | # |
279 | # Networking options | 297 | # Networking options |
280 | # | 298 | # |
281 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
282 | CONFIG_PACKET=y | 299 | CONFIG_PACKET=y |
283 | # CONFIG_PACKET_MMAP is not set | 300 | # CONFIG_PACKET_MMAP is not set |
284 | CONFIG_UNIX=y | 301 | CONFIG_UNIX=y |
@@ -353,6 +370,7 @@ CONFIG_VLAN_8021Q=y | |||
353 | # CONFIG_LAPB is not set | 370 | # CONFIG_LAPB is not set |
354 | # CONFIG_ECONET is not set | 371 | # CONFIG_ECONET is not set |
355 | # CONFIG_WAN_ROUTER is not set | 372 | # CONFIG_WAN_ROUTER is not set |
373 | # CONFIG_PHONET is not set | ||
356 | # CONFIG_NET_SCHED is not set | 374 | # CONFIG_NET_SCHED is not set |
357 | # CONFIG_DCB is not set | 375 | # CONFIG_DCB is not set |
358 | 376 | ||
@@ -365,7 +383,6 @@ CONFIG_VLAN_8021Q=y | |||
365 | # CONFIG_IRDA is not set | 383 | # CONFIG_IRDA is not set |
366 | # CONFIG_BT is not set | 384 | # CONFIG_BT is not set |
367 | # CONFIG_AF_RXRPC is not set | 385 | # CONFIG_AF_RXRPC is not set |
368 | # CONFIG_PHONET is not set | ||
369 | # CONFIG_WIRELESS is not set | 386 | # CONFIG_WIRELESS is not set |
370 | # CONFIG_WIMAX is not set | 387 | # CONFIG_WIMAX is not set |
371 | # CONFIG_RFKILL is not set | 388 | # CONFIG_RFKILL is not set |
@@ -378,8 +395,12 @@ CONFIG_VLAN_8021Q=y | |||
378 | # | 395 | # |
379 | # Generic Driver Options | 396 | # Generic Driver Options |
380 | # | 397 | # |
398 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
381 | # CONFIG_STANDALONE is not set | 399 | # CONFIG_STANDALONE is not set |
382 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 400 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
401 | CONFIG_FW_LOADER=y | ||
402 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
403 | CONFIG_EXTRA_FIRMWARE="" | ||
383 | # CONFIG_DEBUG_DRIVER is not set | 404 | # CONFIG_DEBUG_DRIVER is not set |
384 | # CONFIG_DEBUG_DEVRES is not set | 405 | # CONFIG_DEBUG_DEVRES is not set |
385 | # CONFIG_SYS_HYPERVISOR is not set | 406 | # CONFIG_SYS_HYPERVISOR is not set |
@@ -471,13 +492,21 @@ CONFIG_MTD_NAND_NDFC=y | |||
471 | # LPDDR flash memory drivers | 492 | # LPDDR flash memory drivers |
472 | # | 493 | # |
473 | # CONFIG_MTD_LPDDR is not set | 494 | # CONFIG_MTD_LPDDR is not set |
474 | # CONFIG_MTD_QINFO_PROBE is not set | ||
475 | 495 | ||
476 | # | 496 | # |
477 | # UBI - Unsorted block images | 497 | # UBI - Unsorted block images |
478 | # | 498 | # |
479 | # CONFIG_MTD_UBI is not set | 499 | CONFIG_MTD_UBI=y |
500 | CONFIG_MTD_UBI_WL_THRESHOLD=4096 | ||
501 | CONFIG_MTD_UBI_BEB_RESERVE=1 | ||
502 | # CONFIG_MTD_UBI_GLUEBI is not set | ||
503 | |||
504 | # | ||
505 | # UBI debugging options | ||
506 | # | ||
507 | # CONFIG_MTD_UBI_DEBUG is not set | ||
480 | CONFIG_OF_DEVICE=y | 508 | CONFIG_OF_DEVICE=y |
509 | CONFIG_OF_GPIO=y | ||
481 | CONFIG_OF_I2C=y | 510 | CONFIG_OF_I2C=y |
482 | # CONFIG_PARPORT is not set | 511 | # CONFIG_PARPORT is not set |
483 | CONFIG_BLK_DEV=y | 512 | CONFIG_BLK_DEV=y |
@@ -495,10 +524,17 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 | |||
495 | # CONFIG_XILINX_SYSACE is not set | 524 | # CONFIG_XILINX_SYSACE is not set |
496 | # CONFIG_BLK_DEV_HD is not set | 525 | # CONFIG_BLK_DEV_HD is not set |
497 | CONFIG_MISC_DEVICES=y | 526 | CONFIG_MISC_DEVICES=y |
498 | # CONFIG_EEPROM_93CX6 is not set | ||
499 | # CONFIG_ICS932S401 is not set | 527 | # CONFIG_ICS932S401 is not set |
500 | # CONFIG_ENCLOSURE_SERVICES is not set | 528 | # CONFIG_ENCLOSURE_SERVICES is not set |
529 | # CONFIG_ISL29003 is not set | ||
501 | # CONFIG_C2PORT is not set | 530 | # CONFIG_C2PORT is not set |
531 | |||
532 | # | ||
533 | # EEPROM support | ||
534 | # | ||
535 | CONFIG_EEPROM_AT24=y | ||
536 | # CONFIG_EEPROM_LEGACY is not set | ||
537 | # CONFIG_EEPROM_93CX6 is not set | ||
502 | CONFIG_HAVE_IDE=y | 538 | CONFIG_HAVE_IDE=y |
503 | # CONFIG_IDE is not set | 539 | # CONFIG_IDE is not set |
504 | 540 | ||
@@ -529,7 +565,7 @@ CONFIG_BLK_DEV_SD=y | |||
529 | # CONFIG_SCSI_CONSTANTS is not set | 565 | # CONFIG_SCSI_CONSTANTS is not set |
530 | # CONFIG_SCSI_LOGGING is not set | 566 | # CONFIG_SCSI_LOGGING is not set |
531 | # CONFIG_SCSI_SCAN_ASYNC is not set | 567 | # CONFIG_SCSI_SCAN_ASYNC is not set |
532 | CONFIG_SCSI_WAIT_SCAN=m | 568 | # CONFIG_SCSI_WAIT_SCAN is not set |
533 | 569 | ||
534 | # | 570 | # |
535 | # SCSI Transports | 571 | # SCSI Transports |
@@ -541,10 +577,12 @@ CONFIG_SCSI_SPI_ATTRS=y | |||
541 | # CONFIG_SCSI_SRP_ATTRS is not set | 577 | # CONFIG_SCSI_SRP_ATTRS is not set |
542 | # CONFIG_SCSI_LOWLEVEL is not set | 578 | # CONFIG_SCSI_LOWLEVEL is not set |
543 | # CONFIG_SCSI_DH is not set | 579 | # CONFIG_SCSI_DH is not set |
580 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
544 | # CONFIG_ATA is not set | 581 | # CONFIG_ATA is not set |
545 | # CONFIG_MD is not set | 582 | # CONFIG_MD is not set |
546 | # CONFIG_MACINTOSH_DRIVERS is not set | 583 | # CONFIG_MACINTOSH_DRIVERS is not set |
547 | CONFIG_NETDEVICES=y | 584 | CONFIG_NETDEVICES=y |
585 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
548 | # CONFIG_DUMMY is not set | 586 | # CONFIG_DUMMY is not set |
549 | # CONFIG_BONDING is not set | 587 | # CONFIG_BONDING is not set |
550 | # CONFIG_MACVLAN is not set | 588 | # CONFIG_MACVLAN is not set |
@@ -554,6 +592,8 @@ CONFIG_NETDEVICES=y | |||
554 | # CONFIG_PHYLIB is not set | 592 | # CONFIG_PHYLIB is not set |
555 | CONFIG_NET_ETHERNET=y | 593 | CONFIG_NET_ETHERNET=y |
556 | CONFIG_MII=y | 594 | CONFIG_MII=y |
595 | # CONFIG_ETHOC is not set | ||
596 | # CONFIG_DNET is not set | ||
557 | CONFIG_IBM_NEW_EMAC=y | 597 | CONFIG_IBM_NEW_EMAC=y |
558 | CONFIG_IBM_NEW_EMAC_RXB=128 | 598 | CONFIG_IBM_NEW_EMAC_RXB=128 |
559 | CONFIG_IBM_NEW_EMAC_TXB=64 | 599 | CONFIG_IBM_NEW_EMAC_TXB=64 |
@@ -577,7 +617,6 @@ CONFIG_IBM_NEW_EMAC_ZMII=y | |||
577 | # | 617 | # |
578 | # CONFIG_WLAN_PRE80211 is not set | 618 | # CONFIG_WLAN_PRE80211 is not set |
579 | # CONFIG_WLAN_80211 is not set | 619 | # CONFIG_WLAN_80211 is not set |
580 | # CONFIG_IWLWIFI_LEDS is not set | ||
581 | 620 | ||
582 | # | 621 | # |
583 | # Enable WiMAX (Networking options) to see the WiMAX drivers | 622 | # Enable WiMAX (Networking options) to see the WiMAX drivers |
@@ -646,6 +685,7 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
646 | # CONFIG_HVC_UDBG is not set | 685 | # CONFIG_HVC_UDBG is not set |
647 | # CONFIG_IPMI_HANDLER is not set | 686 | # CONFIG_IPMI_HANDLER is not set |
648 | CONFIG_HW_RANDOM=y | 687 | CONFIG_HW_RANDOM=y |
688 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
649 | # CONFIG_NVRAM is not set | 689 | # CONFIG_NVRAM is not set |
650 | # CONFIG_GEN_RTC is not set | 690 | # CONFIG_GEN_RTC is not set |
651 | # CONFIG_R3964 is not set | 691 | # CONFIG_R3964 is not set |
@@ -663,6 +703,7 @@ CONFIG_I2C_HELPER_AUTO=y | |||
663 | # | 703 | # |
664 | # I2C system bus drivers (mostly embedded / system-on-chip) | 704 | # I2C system bus drivers (mostly embedded / system-on-chip) |
665 | # | 705 | # |
706 | # CONFIG_I2C_GPIO is not set | ||
666 | CONFIG_I2C_IBM_IIC=y | 707 | CONFIG_I2C_IBM_IIC=y |
667 | # CONFIG_I2C_MPC is not set | 708 | # CONFIG_I2C_MPC is not set |
668 | # CONFIG_I2C_OCORES is not set | 709 | # CONFIG_I2C_OCORES is not set |
@@ -685,12 +726,9 @@ CONFIG_I2C_IBM_IIC=y | |||
685 | # Miscellaneous I2C Chip support | 726 | # Miscellaneous I2C Chip support |
686 | # | 727 | # |
687 | # CONFIG_DS1682 is not set | 728 | # CONFIG_DS1682 is not set |
688 | CONFIG_EEPROM_AT24=y | ||
689 | CONFIG_EEPROM_LEGACY=y | ||
690 | # CONFIG_SENSORS_PCF8574 is not set | 729 | # CONFIG_SENSORS_PCF8574 is not set |
691 | # CONFIG_PCF8575 is not set | 730 | # CONFIG_PCF8575 is not set |
692 | # CONFIG_SENSORS_PCA9539 is not set | 731 | # CONFIG_SENSORS_PCA9539 is not set |
693 | # CONFIG_SENSORS_PCF8591 is not set | ||
694 | # CONFIG_SENSORS_MAX6875 is not set | 732 | # CONFIG_SENSORS_MAX6875 is not set |
695 | # CONFIG_SENSORS_TSL2550 is not set | 733 | # CONFIG_SENSORS_TSL2550 is not set |
696 | # CONFIG_I2C_DEBUG_CORE is not set | 734 | # CONFIG_I2C_DEBUG_CORE is not set |
@@ -699,7 +737,30 @@ CONFIG_EEPROM_LEGACY=y | |||
699 | # CONFIG_I2C_DEBUG_CHIP is not set | 737 | # CONFIG_I2C_DEBUG_CHIP is not set |
700 | # CONFIG_SPI is not set | 738 | # CONFIG_SPI is not set |
701 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | 739 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y |
702 | # CONFIG_GPIOLIB is not set | 740 | CONFIG_ARCH_REQUIRE_GPIOLIB=y |
741 | CONFIG_GPIOLIB=y | ||
742 | # CONFIG_DEBUG_GPIO is not set | ||
743 | CONFIG_GPIO_SYSFS=y | ||
744 | |||
745 | # | ||
746 | # Memory mapped GPIO expanders: | ||
747 | # | ||
748 | # CONFIG_GPIO_XILINX is not set | ||
749 | |||
750 | # | ||
751 | # I2C GPIO expanders: | ||
752 | # | ||
753 | # CONFIG_GPIO_MAX732X is not set | ||
754 | # CONFIG_GPIO_PCA953X is not set | ||
755 | # CONFIG_GPIO_PCF857X is not set | ||
756 | |||
757 | # | ||
758 | # PCI GPIO expanders: | ||
759 | # | ||
760 | |||
761 | # | ||
762 | # SPI GPIO expanders: | ||
763 | # | ||
703 | # CONFIG_W1 is not set | 764 | # CONFIG_W1 is not set |
704 | # CONFIG_POWER_SUPPLY is not set | 765 | # CONFIG_POWER_SUPPLY is not set |
705 | CONFIG_HWMON=y | 766 | CONFIG_HWMON=y |
@@ -721,6 +782,7 @@ CONFIG_SENSORS_AD7414=y | |||
721 | # CONFIG_SENSORS_F71805F is not set | 782 | # CONFIG_SENSORS_F71805F is not set |
722 | # CONFIG_SENSORS_F71882FG is not set | 783 | # CONFIG_SENSORS_F71882FG is not set |
723 | # CONFIG_SENSORS_F75375S is not set | 784 | # CONFIG_SENSORS_F75375S is not set |
785 | # CONFIG_SENSORS_G760A is not set | ||
724 | # CONFIG_SENSORS_GL518SM is not set | 786 | # CONFIG_SENSORS_GL518SM is not set |
725 | # CONFIG_SENSORS_GL520SM is not set | 787 | # CONFIG_SENSORS_GL520SM is not set |
726 | # CONFIG_SENSORS_IT87 is not set | 788 | # CONFIG_SENSORS_IT87 is not set |
@@ -735,11 +797,15 @@ CONFIG_SENSORS_AD7414=y | |||
735 | # CONFIG_SENSORS_LM90 is not set | 797 | # CONFIG_SENSORS_LM90 is not set |
736 | # CONFIG_SENSORS_LM92 is not set | 798 | # CONFIG_SENSORS_LM92 is not set |
737 | # CONFIG_SENSORS_LM93 is not set | 799 | # CONFIG_SENSORS_LM93 is not set |
800 | # CONFIG_SENSORS_LTC4215 is not set | ||
738 | # CONFIG_SENSORS_LTC4245 is not set | 801 | # CONFIG_SENSORS_LTC4245 is not set |
802 | # CONFIG_SENSORS_LM95241 is not set | ||
739 | # CONFIG_SENSORS_MAX1619 is not set | 803 | # CONFIG_SENSORS_MAX1619 is not set |
740 | # CONFIG_SENSORS_MAX6650 is not set | 804 | # CONFIG_SENSORS_MAX6650 is not set |
741 | # CONFIG_SENSORS_PC87360 is not set | 805 | # CONFIG_SENSORS_PC87360 is not set |
742 | # CONFIG_SENSORS_PC87427 is not set | 806 | # CONFIG_SENSORS_PC87427 is not set |
807 | # CONFIG_SENSORS_PCF8591 is not set | ||
808 | # CONFIG_SENSORS_SHT15 is not set | ||
743 | # CONFIG_SENSORS_DME1737 is not set | 809 | # CONFIG_SENSORS_DME1737 is not set |
744 | # CONFIG_SENSORS_SMSC47M1 is not set | 810 | # CONFIG_SENSORS_SMSC47M1 is not set |
745 | # CONFIG_SENSORS_SMSC47M192 is not set | 811 | # CONFIG_SENSORS_SMSC47M192 is not set |
@@ -785,6 +851,7 @@ CONFIG_SSB_POSSIBLE=y | |||
785 | # CONFIG_MFD_CORE is not set | 851 | # CONFIG_MFD_CORE is not set |
786 | # CONFIG_MFD_SM501 is not set | 852 | # CONFIG_MFD_SM501 is not set |
787 | # CONFIG_HTC_PASIC3 is not set | 853 | # CONFIG_HTC_PASIC3 is not set |
854 | # CONFIG_TPS65010 is not set | ||
788 | # CONFIG_TWL4030_CORE is not set | 855 | # CONFIG_TWL4030_CORE is not set |
789 | # CONFIG_MFD_TMIO is not set | 856 | # CONFIG_MFD_TMIO is not set |
790 | # CONFIG_PMIC_DA903X is not set | 857 | # CONFIG_PMIC_DA903X is not set |
@@ -870,11 +937,11 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y | |||
870 | # CONFIG_USB_TMC is not set | 937 | # CONFIG_USB_TMC is not set |
871 | 938 | ||
872 | # | 939 | # |
873 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; | 940 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may |
874 | # | 941 | # |
875 | 942 | ||
876 | # | 943 | # |
877 | # see USB_STORAGE Help for more information | 944 | # also be needed; see USB_STORAGE Help for more info |
878 | # | 945 | # |
879 | CONFIG_USB_STORAGE=y | 946 | CONFIG_USB_STORAGE=y |
880 | # CONFIG_USB_STORAGE_DEBUG is not set | 947 | # CONFIG_USB_STORAGE_DEBUG is not set |
@@ -915,7 +982,6 @@ CONFIG_USB_STORAGE=y | |||
915 | # CONFIG_USB_LED is not set | 982 | # CONFIG_USB_LED is not set |
916 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 983 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
917 | # CONFIG_USB_CYTHERM is not set | 984 | # CONFIG_USB_CYTHERM is not set |
918 | # CONFIG_USB_PHIDGET is not set | ||
919 | # CONFIG_USB_IDMOUSE is not set | 985 | # CONFIG_USB_IDMOUSE is not set |
920 | # CONFIG_USB_FTDI_ELAN is not set | 986 | # CONFIG_USB_FTDI_ELAN is not set |
921 | # CONFIG_USB_APPLEDISPLAY is not set | 987 | # CONFIG_USB_APPLEDISPLAY is not set |
@@ -929,6 +995,8 @@ CONFIG_USB_STORAGE=y | |||
929 | # | 995 | # |
930 | # OTG and related infrastructure | 996 | # OTG and related infrastructure |
931 | # | 997 | # |
998 | # CONFIG_USB_GPIO_VBUS is not set | ||
999 | # CONFIG_NOP_USB_XCEIV is not set | ||
932 | CONFIG_MMC=y | 1000 | CONFIG_MMC=y |
933 | # CONFIG_MMC_DEBUG is not set | 1001 | # CONFIG_MMC_DEBUG is not set |
934 | # CONFIG_MMC_UNSAFE_RESUME is not set | 1002 | # CONFIG_MMC_UNSAFE_RESUME is not set |
@@ -946,6 +1014,7 @@ CONFIG_MMC_BLOCK_BOUNCE=y | |||
946 | # | 1014 | # |
947 | # CONFIG_MMC_SDHCI is not set | 1015 | # CONFIG_MMC_SDHCI is not set |
948 | # CONFIG_MMC_WBSD is not set | 1016 | # CONFIG_MMC_WBSD is not set |
1017 | CONFIG_MMC_PIKASD=y | ||
949 | # CONFIG_MEMSTICK is not set | 1018 | # CONFIG_MEMSTICK is not set |
950 | CONFIG_NEW_LEDS=y | 1019 | CONFIG_NEW_LEDS=y |
951 | CONFIG_LEDS_CLASS=y | 1020 | CONFIG_LEDS_CLASS=y |
@@ -953,16 +1022,31 @@ CONFIG_LEDS_CLASS=y | |||
953 | # | 1022 | # |
954 | # LED drivers | 1023 | # LED drivers |
955 | # | 1024 | # |
1025 | CONFIG_LEDS_GPIO=y | ||
1026 | # CONFIG_LEDS_GPIO_PLATFORM is not set | ||
1027 | CONFIG_LEDS_GPIO_OF=y | ||
1028 | # CONFIG_LEDS_LP5521 is not set | ||
956 | # CONFIG_LEDS_PCA955X is not set | 1029 | # CONFIG_LEDS_PCA955X is not set |
1030 | # CONFIG_LEDS_BD2802 is not set | ||
957 | 1031 | ||
958 | # | 1032 | # |
959 | # LED Triggers | 1033 | # LED Triggers |
960 | # | 1034 | # |
961 | # CONFIG_LEDS_TRIGGERS is not set | 1035 | CONFIG_LEDS_TRIGGERS=y |
1036 | # CONFIG_LEDS_TRIGGER_TIMER is not set | ||
1037 | # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set | ||
1038 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | ||
1039 | # CONFIG_LEDS_TRIGGER_GPIO is not set | ||
1040 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
1041 | |||
1042 | # | ||
1043 | # iptables trigger is under Netfilter config (LED target) | ||
1044 | # | ||
962 | # CONFIG_ACCESSIBILITY is not set | 1045 | # CONFIG_ACCESSIBILITY is not set |
963 | # CONFIG_EDAC is not set | 1046 | # CONFIG_EDAC is not set |
964 | # CONFIG_RTC_CLASS is not set | 1047 | # CONFIG_RTC_CLASS is not set |
965 | # CONFIG_DMADEVICES is not set | 1048 | # CONFIG_DMADEVICES is not set |
1049 | # CONFIG_AUXDISPLAY is not set | ||
966 | # CONFIG_UIO is not set | 1050 | # CONFIG_UIO is not set |
967 | # CONFIG_STAGING is not set | 1051 | # CONFIG_STAGING is not set |
968 | 1052 | ||
@@ -973,6 +1057,7 @@ CONFIG_EXT2_FS=y | |||
973 | # CONFIG_EXT2_FS_XATTR is not set | 1057 | # CONFIG_EXT2_FS_XATTR is not set |
974 | # CONFIG_EXT2_FS_XIP is not set | 1058 | # CONFIG_EXT2_FS_XIP is not set |
975 | CONFIG_EXT3_FS=y | 1059 | CONFIG_EXT3_FS=y |
1060 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
976 | # CONFIG_EXT3_FS_XATTR is not set | 1061 | # CONFIG_EXT3_FS_XATTR is not set |
977 | # CONFIG_EXT4_FS is not set | 1062 | # CONFIG_EXT4_FS is not set |
978 | CONFIG_JBD=y | 1063 | CONFIG_JBD=y |
@@ -993,6 +1078,11 @@ CONFIG_INOTIFY_USER=y | |||
993 | # CONFIG_FUSE_FS is not set | 1078 | # CONFIG_FUSE_FS is not set |
994 | 1079 | ||
995 | # | 1080 | # |
1081 | # Caches | ||
1082 | # | ||
1083 | # CONFIG_FSCACHE is not set | ||
1084 | |||
1085 | # | ||
996 | # CD-ROM/DVD Filesystems | 1086 | # CD-ROM/DVD Filesystems |
997 | # | 1087 | # |
998 | # CONFIG_ISO9660_FS is not set | 1088 | # CONFIG_ISO9660_FS is not set |
@@ -1039,6 +1129,12 @@ CONFIG_JFFS2_ZLIB=y | |||
1039 | # CONFIG_JFFS2_LZO is not set | 1129 | # CONFIG_JFFS2_LZO is not set |
1040 | CONFIG_JFFS2_RTIME=y | 1130 | CONFIG_JFFS2_RTIME=y |
1041 | # CONFIG_JFFS2_RUBIN is not set | 1131 | # CONFIG_JFFS2_RUBIN is not set |
1132 | CONFIG_UBIFS_FS=y | ||
1133 | # CONFIG_UBIFS_FS_XATTR is not set | ||
1134 | # CONFIG_UBIFS_FS_ADVANCED_COMPR is not set | ||
1135 | CONFIG_UBIFS_FS_LZO=y | ||
1136 | CONFIG_UBIFS_FS_ZLIB=y | ||
1137 | # CONFIG_UBIFS_FS_DEBUG is not set | ||
1042 | CONFIG_CRAMFS=y | 1138 | CONFIG_CRAMFS=y |
1043 | # CONFIG_SQUASHFS is not set | 1139 | # CONFIG_SQUASHFS is not set |
1044 | # CONFIG_VXFS_FS is not set | 1140 | # CONFIG_VXFS_FS is not set |
@@ -1049,6 +1145,7 @@ CONFIG_CRAMFS=y | |||
1049 | # CONFIG_ROMFS_FS is not set | 1145 | # CONFIG_ROMFS_FS is not set |
1050 | # CONFIG_SYSV_FS is not set | 1146 | # CONFIG_SYSV_FS is not set |
1051 | # CONFIG_UFS_FS is not set | 1147 | # CONFIG_UFS_FS is not set |
1148 | # CONFIG_NILFS2_FS is not set | ||
1052 | CONFIG_NETWORK_FILESYSTEMS=y | 1149 | CONFIG_NETWORK_FILESYSTEMS=y |
1053 | CONFIG_NFS_FS=y | 1150 | CONFIG_NFS_FS=y |
1054 | CONFIG_NFS_V3=y | 1151 | CONFIG_NFS_V3=y |
@@ -1060,7 +1157,6 @@ CONFIG_LOCKD=y | |||
1060 | CONFIG_LOCKD_V4=y | 1157 | CONFIG_LOCKD_V4=y |
1061 | CONFIG_NFS_COMMON=y | 1158 | CONFIG_NFS_COMMON=y |
1062 | CONFIG_SUNRPC=y | 1159 | CONFIG_SUNRPC=y |
1063 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
1064 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 1160 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
1065 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1161 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
1066 | # CONFIG_SMB_FS is not set | 1162 | # CONFIG_SMB_FS is not set |
@@ -1115,6 +1211,7 @@ CONFIG_NLS_ISO8859_15=y | |||
1115 | # CONFIG_NLS_KOI8_U is not set | 1211 | # CONFIG_NLS_KOI8_U is not set |
1116 | CONFIG_NLS_UTF8=y | 1212 | CONFIG_NLS_UTF8=y |
1117 | # CONFIG_DLM is not set | 1213 | # CONFIG_DLM is not set |
1214 | # CONFIG_BINARY_PRINTF is not set | ||
1118 | 1215 | ||
1119 | # | 1216 | # |
1120 | # Library routines | 1217 | # Library routines |
@@ -1122,7 +1219,7 @@ CONFIG_NLS_UTF8=y | |||
1122 | CONFIG_BITREVERSE=y | 1219 | CONFIG_BITREVERSE=y |
1123 | CONFIG_GENERIC_FIND_LAST_BIT=y | 1220 | CONFIG_GENERIC_FIND_LAST_BIT=y |
1124 | CONFIG_CRC_CCITT=y | 1221 | CONFIG_CRC_CCITT=y |
1125 | # CONFIG_CRC16 is not set | 1222 | CONFIG_CRC16=y |
1126 | CONFIG_CRC_T10DIF=y | 1223 | CONFIG_CRC_T10DIF=y |
1127 | # CONFIG_CRC_ITU_T is not set | 1224 | # CONFIG_CRC_ITU_T is not set |
1128 | CONFIG_CRC32=y | 1225 | CONFIG_CRC32=y |
@@ -1130,16 +1227,19 @@ CONFIG_CRC32=y | |||
1130 | # CONFIG_LIBCRC32C is not set | 1227 | # CONFIG_LIBCRC32C is not set |
1131 | CONFIG_ZLIB_INFLATE=y | 1228 | CONFIG_ZLIB_INFLATE=y |
1132 | CONFIG_ZLIB_DEFLATE=y | 1229 | CONFIG_ZLIB_DEFLATE=y |
1133 | CONFIG_PLIST=y | 1230 | CONFIG_LZO_COMPRESS=y |
1231 | CONFIG_LZO_DECOMPRESS=y | ||
1232 | CONFIG_DECOMPRESS_GZIP=y | ||
1134 | CONFIG_HAS_IOMEM=y | 1233 | CONFIG_HAS_IOMEM=y |
1135 | CONFIG_HAS_IOPORT=y | 1234 | CONFIG_HAS_IOPORT=y |
1136 | CONFIG_HAS_DMA=y | 1235 | CONFIG_HAS_DMA=y |
1137 | CONFIG_HAVE_LMB=y | 1236 | CONFIG_HAVE_LMB=y |
1237 | CONFIG_NLATTR=y | ||
1138 | 1238 | ||
1139 | # | 1239 | # |
1140 | # Kernel hacking | 1240 | # Kernel hacking |
1141 | # | 1241 | # |
1142 | # CONFIG_PRINTK_TIME is not set | 1242 | CONFIG_PRINTK_TIME=y |
1143 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1243 | CONFIG_ENABLE_WARN_DEPRECATED=y |
1144 | CONFIG_ENABLE_MUST_CHECK=y | 1244 | CONFIG_ENABLE_MUST_CHECK=y |
1145 | CONFIG_FRAME_WARN=1024 | 1245 | CONFIG_FRAME_WARN=1024 |
@@ -1152,11 +1252,15 @@ CONFIG_DEBUG_KERNEL=y | |||
1152 | CONFIG_DETECT_SOFTLOCKUP=y | 1252 | CONFIG_DETECT_SOFTLOCKUP=y |
1153 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | 1253 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set |
1154 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | 1254 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 |
1255 | CONFIG_DETECT_HUNG_TASK=y | ||
1256 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
1257 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
1155 | # CONFIG_SCHED_DEBUG is not set | 1258 | # CONFIG_SCHED_DEBUG is not set |
1156 | # CONFIG_SCHEDSTATS is not set | 1259 | # CONFIG_SCHEDSTATS is not set |
1157 | # CONFIG_TIMER_STATS is not set | 1260 | # CONFIG_TIMER_STATS is not set |
1158 | # CONFIG_DEBUG_OBJECTS is not set | 1261 | # CONFIG_DEBUG_OBJECTS is not set |
1159 | # CONFIG_DEBUG_SLAB is not set | 1262 | # CONFIG_SLUB_DEBUG_ON is not set |
1263 | # CONFIG_SLUB_STATS is not set | ||
1160 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1264 | # CONFIG_DEBUG_RT_MUTEXES is not set |
1161 | # CONFIG_RT_MUTEX_TESTER is not set | 1265 | # CONFIG_RT_MUTEX_TESTER is not set |
1162 | # CONFIG_DEBUG_SPINLOCK is not set | 1266 | # CONFIG_DEBUG_SPINLOCK is not set |
@@ -1180,9 +1284,12 @@ CONFIG_DEBUG_INFO=y | |||
1180 | # CONFIG_FAULT_INJECTION is not set | 1284 | # CONFIG_FAULT_INJECTION is not set |
1181 | # CONFIG_LATENCYTOP is not set | 1285 | # CONFIG_LATENCYTOP is not set |
1182 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1286 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
1287 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
1183 | CONFIG_HAVE_FUNCTION_TRACER=y | 1288 | CONFIG_HAVE_FUNCTION_TRACER=y |
1289 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
1184 | CONFIG_HAVE_DYNAMIC_FTRACE=y | 1290 | CONFIG_HAVE_DYNAMIC_FTRACE=y |
1185 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | 1291 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y |
1292 | CONFIG_TRACING_SUPPORT=y | ||
1186 | 1293 | ||
1187 | # | 1294 | # |
1188 | # Tracers | 1295 | # Tracers |
@@ -1190,24 +1297,27 @@ CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | |||
1190 | # CONFIG_FUNCTION_TRACER is not set | 1297 | # CONFIG_FUNCTION_TRACER is not set |
1191 | # CONFIG_SCHED_TRACER is not set | 1298 | # CONFIG_SCHED_TRACER is not set |
1192 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 1299 | # CONFIG_CONTEXT_SWITCH_TRACER is not set |
1300 | # CONFIG_EVENT_TRACER is not set | ||
1193 | # CONFIG_BOOT_TRACER is not set | 1301 | # CONFIG_BOOT_TRACER is not set |
1194 | # CONFIG_TRACE_BRANCH_PROFILING is not set | 1302 | # CONFIG_TRACE_BRANCH_PROFILING is not set |
1195 | # CONFIG_STACK_TRACER is not set | 1303 | # CONFIG_STACK_TRACER is not set |
1196 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | 1304 | # CONFIG_KMEMTRACE is not set |
1305 | # CONFIG_WORKQUEUE_TRACER is not set | ||
1306 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
1307 | # CONFIG_DYNAMIC_DEBUG is not set | ||
1197 | # CONFIG_SAMPLES is not set | 1308 | # CONFIG_SAMPLES is not set |
1198 | CONFIG_HAVE_ARCH_KGDB=y | 1309 | CONFIG_HAVE_ARCH_KGDB=y |
1199 | # CONFIG_KGDB is not set | 1310 | # CONFIG_KGDB is not set |
1200 | CONFIG_PRINT_STACK_DEPTH=64 | 1311 | CONFIG_PRINT_STACK_DEPTH=64 |
1201 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1312 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
1202 | # CONFIG_DEBUG_STACK_USAGE is not set | 1313 | # CONFIG_DEBUG_STACK_USAGE is not set |
1203 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
1204 | # CONFIG_CODE_PATCHING_SELFTEST is not set | 1314 | # CONFIG_CODE_PATCHING_SELFTEST is not set |
1205 | # CONFIG_FTR_FIXUP_SELFTEST is not set | 1315 | # CONFIG_FTR_FIXUP_SELFTEST is not set |
1206 | # CONFIG_MSI_BITMAP_SELFTEST is not set | 1316 | # CONFIG_MSI_BITMAP_SELFTEST is not set |
1207 | # CONFIG_XMON is not set | 1317 | # CONFIG_XMON is not set |
1208 | CONFIG_IRQSTACKS=y | 1318 | CONFIG_IRQSTACKS=y |
1209 | # CONFIG_VIRQ_DEBUG is not set | 1319 | # CONFIG_VIRQ_DEBUG is not set |
1210 | CONFIG_BDI_SWITCH=y | 1320 | # CONFIG_BDI_SWITCH is not set |
1211 | # CONFIG_PPC_EARLY_DEBUG is not set | 1321 | # CONFIG_PPC_EARLY_DEBUG is not set |
1212 | 1322 | ||
1213 | # | 1323 | # |
@@ -1223,6 +1333,8 @@ CONFIG_CRYPTO=y | |||
1223 | # Crypto core or helper | 1333 | # Crypto core or helper |
1224 | # | 1334 | # |
1225 | # CONFIG_CRYPTO_FIPS is not set | 1335 | # CONFIG_CRYPTO_FIPS is not set |
1336 | CONFIG_CRYPTO_ALGAPI=y | ||
1337 | CONFIG_CRYPTO_ALGAPI2=y | ||
1226 | # CONFIG_CRYPTO_MANAGER is not set | 1338 | # CONFIG_CRYPTO_MANAGER is not set |
1227 | # CONFIG_CRYPTO_MANAGER2 is not set | 1339 | # CONFIG_CRYPTO_MANAGER2 is not set |
1228 | # CONFIG_CRYPTO_GF128MUL is not set | 1340 | # CONFIG_CRYPTO_GF128MUL is not set |
@@ -1294,13 +1406,15 @@ CONFIG_CRYPTO=y | |||
1294 | # | 1406 | # |
1295 | # Compression | 1407 | # Compression |
1296 | # | 1408 | # |
1297 | # CONFIG_CRYPTO_DEFLATE is not set | 1409 | CONFIG_CRYPTO_DEFLATE=y |
1298 | # CONFIG_CRYPTO_LZO is not set | 1410 | # CONFIG_CRYPTO_ZLIB is not set |
1411 | CONFIG_CRYPTO_LZO=y | ||
1299 | 1412 | ||
1300 | # | 1413 | # |
1301 | # Random Number Generation | 1414 | # Random Number Generation |
1302 | # | 1415 | # |
1303 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 1416 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
1304 | CONFIG_CRYPTO_HW=y | 1417 | CONFIG_CRYPTO_HW=y |
1418 | # CONFIG_CRYPTO_DEV_PPC4XX is not set | ||
1305 | # CONFIG_PPC_CLOCK is not set | 1419 | # CONFIG_PPC_CLOCK is not set |
1306 | # CONFIG_VIRTUALIZATION is not set | 1420 | # CONFIG_VIRTUALIZATION is not set |
diff --git a/arch/powerpc/include/asm/cpm1.h b/arch/powerpc/include/asm/cpm1.h index 2ff798744c1d..7685ffde8821 100644 --- a/arch/powerpc/include/asm/cpm1.h +++ b/arch/powerpc/include/asm/cpm1.h | |||
@@ -598,8 +598,6 @@ typedef struct risc_timer_pram { | |||
598 | #define CICR_IEN ((uint)0x00000080) /* Int. enable */ | 598 | #define CICR_IEN ((uint)0x00000080) /* Int. enable */ |
599 | #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ | 599 | #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ |
600 | 600 | ||
601 | #define IMAP_ADDR (get_immrbase()) | ||
602 | |||
603 | #define CPM_PIN_INPUT 0 | 601 | #define CPM_PIN_INPUT 0 |
604 | #define CPM_PIN_OUTPUT 1 | 602 | #define CPM_PIN_OUTPUT 1 |
605 | #define CPM_PIN_PRIMARY 0 | 603 | #define CPM_PIN_PRIMARY 0 |
diff --git a/arch/powerpc/include/asm/delay.h b/arch/powerpc/include/asm/delay.h index 1e2eb41fa057..52e4d54da2a9 100644 --- a/arch/powerpc/include/asm/delay.h +++ b/arch/powerpc/include/asm/delay.h | |||
@@ -63,6 +63,8 @@ extern void udelay(unsigned long usecs); | |||
63 | udelay(delay); \ | 63 | udelay(delay); \ |
64 | else \ | 64 | else \ |
65 | cpu_relax(); \ | 65 | cpu_relax(); \ |
66 | if (!__ret) \ | ||
67 | __ret = (condition); \ | ||
66 | __ret; \ | 68 | __ret; \ |
67 | }) | 69 | }) |
68 | 70 | ||
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index 3d9e887c3c0c..b44aaabdd1a6 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h | |||
@@ -309,7 +309,9 @@ static inline void dma_sync_single_for_cpu(struct device *dev, | |||
309 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 309 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
310 | 310 | ||
311 | BUG_ON(!dma_ops); | 311 | BUG_ON(!dma_ops); |
312 | dma_ops->sync_single_range_for_cpu(dev, dma_handle, 0, | 312 | |
313 | if (dma_ops->sync_single_range_for_cpu) | ||
314 | dma_ops->sync_single_range_for_cpu(dev, dma_handle, 0, | ||
313 | size, direction); | 315 | size, direction); |
314 | } | 316 | } |
315 | 317 | ||
@@ -320,7 +322,9 @@ static inline void dma_sync_single_for_device(struct device *dev, | |||
320 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 322 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
321 | 323 | ||
322 | BUG_ON(!dma_ops); | 324 | BUG_ON(!dma_ops); |
323 | dma_ops->sync_single_range_for_device(dev, dma_handle, | 325 | |
326 | if (dma_ops->sync_single_range_for_device) | ||
327 | dma_ops->sync_single_range_for_device(dev, dma_handle, | ||
324 | 0, size, direction); | 328 | 0, size, direction); |
325 | } | 329 | } |
326 | 330 | ||
@@ -331,7 +335,9 @@ static inline void dma_sync_sg_for_cpu(struct device *dev, | |||
331 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 335 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
332 | 336 | ||
333 | BUG_ON(!dma_ops); | 337 | BUG_ON(!dma_ops); |
334 | dma_ops->sync_sg_for_cpu(dev, sgl, nents, direction); | 338 | |
339 | if (dma_ops->sync_sg_for_cpu) | ||
340 | dma_ops->sync_sg_for_cpu(dev, sgl, nents, direction); | ||
335 | } | 341 | } |
336 | 342 | ||
337 | static inline void dma_sync_sg_for_device(struct device *dev, | 343 | static inline void dma_sync_sg_for_device(struct device *dev, |
@@ -341,7 +347,9 @@ static inline void dma_sync_sg_for_device(struct device *dev, | |||
341 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 347 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
342 | 348 | ||
343 | BUG_ON(!dma_ops); | 349 | BUG_ON(!dma_ops); |
344 | dma_ops->sync_sg_for_device(dev, sgl, nents, direction); | 350 | |
351 | if (dma_ops->sync_sg_for_device) | ||
352 | dma_ops->sync_sg_for_device(dev, sgl, nents, direction); | ||
345 | } | 353 | } |
346 | 354 | ||
347 | static inline void dma_sync_single_range_for_cpu(struct device *dev, | 355 | static inline void dma_sync_single_range_for_cpu(struct device *dev, |
@@ -351,7 +359,9 @@ static inline void dma_sync_single_range_for_cpu(struct device *dev, | |||
351 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 359 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
352 | 360 | ||
353 | BUG_ON(!dma_ops); | 361 | BUG_ON(!dma_ops); |
354 | dma_ops->sync_single_range_for_cpu(dev, dma_handle, | 362 | |
363 | if (dma_ops->sync_single_range_for_cpu) | ||
364 | dma_ops->sync_single_range_for_cpu(dev, dma_handle, | ||
355 | offset, size, direction); | 365 | offset, size, direction); |
356 | } | 366 | } |
357 | 367 | ||
@@ -362,7 +372,9 @@ static inline void dma_sync_single_range_for_device(struct device *dev, | |||
362 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 372 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
363 | 373 | ||
364 | BUG_ON(!dma_ops); | 374 | BUG_ON(!dma_ops); |
365 | dma_ops->sync_single_range_for_device(dev, dma_handle, offset, | 375 | |
376 | if (dma_ops->sync_single_range_for_device) | ||
377 | dma_ops->sync_single_range_for_device(dev, dma_handle, offset, | ||
366 | size, direction); | 378 | size, direction); |
367 | } | 379 | } |
368 | #else /* CONFIG_PPC_NEED_DMA_SYNC_OPS */ | 380 | #else /* CONFIG_PPC_NEED_DMA_SYNC_OPS */ |
diff --git a/arch/powerpc/include/asm/highmem.h b/arch/powerpc/include/asm/highmem.h index 684a73f4324f..a74c4ee6c020 100644 --- a/arch/powerpc/include/asm/highmem.h +++ b/arch/powerpc/include/asm/highmem.h | |||
@@ -22,9 +22,7 @@ | |||
22 | 22 | ||
23 | #ifdef __KERNEL__ | 23 | #ifdef __KERNEL__ |
24 | 24 | ||
25 | #include <linux/init.h> | ||
26 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
27 | #include <linux/highmem.h> | ||
28 | #include <asm/kmap_types.h> | 26 | #include <asm/kmap_types.h> |
29 | #include <asm/tlbflush.h> | 27 | #include <asm/tlbflush.h> |
30 | #include <asm/page.h> | 28 | #include <asm/page.h> |
@@ -62,6 +60,9 @@ extern pte_t *pkmap_page_table; | |||
62 | 60 | ||
63 | extern void *kmap_high(struct page *page); | 61 | extern void *kmap_high(struct page *page); |
64 | extern void kunmap_high(struct page *page); | 62 | extern void kunmap_high(struct page *page); |
63 | extern void *kmap_atomic_prot(struct page *page, enum km_type type, | ||
64 | pgprot_t prot); | ||
65 | extern void kunmap_atomic(void *kvaddr, enum km_type type); | ||
65 | 66 | ||
66 | static inline void *kmap(struct page *page) | 67 | static inline void *kmap(struct page *page) |
67 | { | 68 | { |
@@ -79,62 +80,11 @@ static inline void kunmap(struct page *page) | |||
79 | kunmap_high(page); | 80 | kunmap_high(page); |
80 | } | 81 | } |
81 | 82 | ||
82 | /* | ||
83 | * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap | ||
84 | * gives a more generic (and caching) interface. But kmap_atomic can | ||
85 | * be used in IRQ contexts, so in some (very limited) cases we need | ||
86 | * it. | ||
87 | */ | ||
88 | static inline void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot) | ||
89 | { | ||
90 | unsigned int idx; | ||
91 | unsigned long vaddr; | ||
92 | |||
93 | /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ | ||
94 | pagefault_disable(); | ||
95 | if (!PageHighMem(page)) | ||
96 | return page_address(page); | ||
97 | |||
98 | debug_kmap_atomic(type); | ||
99 | idx = type + KM_TYPE_NR*smp_processor_id(); | ||
100 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); | ||
101 | #ifdef CONFIG_DEBUG_HIGHMEM | ||
102 | BUG_ON(!pte_none(*(kmap_pte-idx))); | ||
103 | #endif | ||
104 | __set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot), 1); | ||
105 | local_flush_tlb_page(NULL, vaddr); | ||
106 | |||
107 | return (void*) vaddr; | ||
108 | } | ||
109 | |||
110 | static inline void *kmap_atomic(struct page *page, enum km_type type) | 83 | static inline void *kmap_atomic(struct page *page, enum km_type type) |
111 | { | 84 | { |
112 | return kmap_atomic_prot(page, type, kmap_prot); | 85 | return kmap_atomic_prot(page, type, kmap_prot); |
113 | } | 86 | } |
114 | 87 | ||
115 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) | ||
116 | { | ||
117 | #ifdef CONFIG_DEBUG_HIGHMEM | ||
118 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; | ||
119 | enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); | ||
120 | |||
121 | if (vaddr < __fix_to_virt(FIX_KMAP_END)) { | ||
122 | pagefault_enable(); | ||
123 | return; | ||
124 | } | ||
125 | |||
126 | BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); | ||
127 | |||
128 | /* | ||
129 | * force other mappings to Oops if they'll try to access | ||
130 | * this pte without first remap it | ||
131 | */ | ||
132 | pte_clear(&init_mm, vaddr, kmap_pte-idx); | ||
133 | local_flush_tlb_page(NULL, vaddr); | ||
134 | #endif | ||
135 | pagefault_enable(); | ||
136 | } | ||
137 | |||
138 | static inline struct page *kmap_atomic_to_page(void *ptr) | 88 | static inline struct page *kmap_atomic_to_page(void *ptr) |
139 | { | 89 | { |
140 | unsigned long idx, vaddr = (unsigned long) ptr; | 90 | unsigned long idx, vaddr = (unsigned long) ptr; |
@@ -148,6 +98,7 @@ static inline struct page *kmap_atomic_to_page(void *ptr) | |||
148 | return pte_page(*pte); | 98 | return pte_page(*pte); |
149 | } | 99 | } |
150 | 100 | ||
101 | |||
151 | #define flush_cache_kmaps() flush_cache_all() | 102 | #define flush_cache_kmaps() flush_cache_all() |
152 | 103 | ||
153 | #endif /* __KERNEL__ */ | 104 | #endif /* __KERNEL__ */ |
diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h index 867ab8ed69b3..8b505eaaa38a 100644 --- a/arch/powerpc/include/asm/hw_irq.h +++ b/arch/powerpc/include/asm/hw_irq.h | |||
@@ -68,13 +68,13 @@ static inline int irqs_disabled_flags(unsigned long flags) | |||
68 | 68 | ||
69 | #if defined(CONFIG_BOOKE) | 69 | #if defined(CONFIG_BOOKE) |
70 | #define SET_MSR_EE(x) mtmsr(x) | 70 | #define SET_MSR_EE(x) mtmsr(x) |
71 | #define local_irq_restore(flags) __asm__ __volatile__("wrtee %0" : : "r" (flags) : "memory") | 71 | #define raw_local_irq_restore(flags) __asm__ __volatile__("wrtee %0" : : "r" (flags) : "memory") |
72 | #else | 72 | #else |
73 | #define SET_MSR_EE(x) mtmsr(x) | 73 | #define SET_MSR_EE(x) mtmsr(x) |
74 | #define local_irq_restore(flags) mtmsr(flags) | 74 | #define raw_local_irq_restore(flags) mtmsr(flags) |
75 | #endif | 75 | #endif |
76 | 76 | ||
77 | static inline void local_irq_disable(void) | 77 | static inline void raw_local_irq_disable(void) |
78 | { | 78 | { |
79 | #ifdef CONFIG_BOOKE | 79 | #ifdef CONFIG_BOOKE |
80 | __asm__ __volatile__("wrteei 0": : :"memory"); | 80 | __asm__ __volatile__("wrteei 0": : :"memory"); |
@@ -86,7 +86,7 @@ static inline void local_irq_disable(void) | |||
86 | #endif | 86 | #endif |
87 | } | 87 | } |
88 | 88 | ||
89 | static inline void local_irq_enable(void) | 89 | static inline void raw_local_irq_enable(void) |
90 | { | 90 | { |
91 | #ifdef CONFIG_BOOKE | 91 | #ifdef CONFIG_BOOKE |
92 | __asm__ __volatile__("wrteei 1": : :"memory"); | 92 | __asm__ __volatile__("wrteei 1": : :"memory"); |
@@ -98,7 +98,7 @@ static inline void local_irq_enable(void) | |||
98 | #endif | 98 | #endif |
99 | } | 99 | } |
100 | 100 | ||
101 | static inline void local_irq_save_ptr(unsigned long *flags) | 101 | static inline void raw_local_irq_save_ptr(unsigned long *flags) |
102 | { | 102 | { |
103 | unsigned long msr; | 103 | unsigned long msr; |
104 | msr = mfmsr(); | 104 | msr = mfmsr(); |
@@ -110,12 +110,12 @@ static inline void local_irq_save_ptr(unsigned long *flags) | |||
110 | #endif | 110 | #endif |
111 | } | 111 | } |
112 | 112 | ||
113 | #define local_save_flags(flags) ((flags) = mfmsr()) | 113 | #define raw_local_save_flags(flags) ((flags) = mfmsr()) |
114 | #define local_irq_save(flags) local_irq_save_ptr(&flags) | 114 | #define raw_local_irq_save(flags) raw_local_irq_save_ptr(&flags) |
115 | #define irqs_disabled() ((mfmsr() & MSR_EE) == 0) | 115 | #define raw_irqs_disabled() ((mfmsr() & MSR_EE) == 0) |
116 | #define raw_irqs_disabled_flags(flags) (((flags) & MSR_EE) == 0) | ||
116 | 117 | ||
117 | #define hard_irq_enable() local_irq_enable() | 118 | #define hard_irq_disable() raw_local_irq_disable() |
118 | #define hard_irq_disable() local_irq_disable() | ||
119 | 119 | ||
120 | static inline int irqs_disabled_flags(unsigned long flags) | 120 | static inline int irqs_disabled_flags(unsigned long flags) |
121 | { | 121 | { |
diff --git a/arch/powerpc/include/asm/perf_counter.h b/arch/powerpc/include/asm/perf_counter.h index 8ccd4e155768..0ea0639fcf75 100644 --- a/arch/powerpc/include/asm/perf_counter.h +++ b/arch/powerpc/include/asm/perf_counter.h | |||
@@ -61,6 +61,8 @@ struct pt_regs; | |||
61 | extern unsigned long perf_misc_flags(struct pt_regs *regs); | 61 | extern unsigned long perf_misc_flags(struct pt_regs *regs); |
62 | extern unsigned long perf_instruction_pointer(struct pt_regs *regs); | 62 | extern unsigned long perf_instruction_pointer(struct pt_regs *regs); |
63 | 63 | ||
64 | #define PERF_COUNTER_INDEX_OFFSET 1 | ||
65 | |||
64 | /* | 66 | /* |
65 | * Only override the default definitions in include/linux/perf_counter.h | 67 | * Only override the default definitions in include/linux/perf_counter.h |
66 | * if we have hardware PMU support. | 68 | * if we have hardware PMU support. |
diff --git a/arch/powerpc/include/asm/pte-hash64-64k.h b/arch/powerpc/include/asm/pte-hash64-64k.h index e05d26fa372f..82b72207c51c 100644 --- a/arch/powerpc/include/asm/pte-hash64-64k.h +++ b/arch/powerpc/include/asm/pte-hash64-64k.h | |||
@@ -47,7 +47,8 @@ | |||
47 | * generic accessors and iterators here | 47 | * generic accessors and iterators here |
48 | */ | 48 | */ |
49 | #define __real_pte(e,p) ((real_pte_t) { \ | 49 | #define __real_pte(e,p) ((real_pte_t) { \ |
50 | (e), pte_val(*((p) + PTRS_PER_PTE)) }) | 50 | (e), ((e) & _PAGE_COMBO) ? \ |
51 | (pte_val(*((p) + PTRS_PER_PTE))) : 0 }) | ||
51 | #define __rpte_to_hidx(r,index) ((pte_val((r).pte) & _PAGE_COMBO) ? \ | 52 | #define __rpte_to_hidx(r,index) ((pte_val((r).pte) & _PAGE_COMBO) ? \ |
52 | (((r).hidx >> ((index)<<2)) & 0xf) : ((pte_val((r).pte) >> 12) & 0xf)) | 53 | (((r).hidx >> ((index)<<2)) & 0xf) : ((pte_val((r).pte) >> 12) & 0xf)) |
53 | #define __rpte_to_pte(r) ((r).pte) | 54 | #define __rpte_to_pte(r) ((r).pte) |
diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h index 01c12339b304..168fce726201 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h | |||
@@ -58,7 +58,7 @@ struct rtas_t { | |||
58 | unsigned long entry; /* physical address pointer */ | 58 | unsigned long entry; /* physical address pointer */ |
59 | unsigned long base; /* physical address pointer */ | 59 | unsigned long base; /* physical address pointer */ |
60 | unsigned long size; | 60 | unsigned long size; |
61 | spinlock_t lock; | 61 | raw_spinlock_t lock; |
62 | struct rtas_args args; | 62 | struct rtas_args args; |
63 | struct device_node *dev; /* virtual address pointer */ | 63 | struct device_node *dev; /* virtual address pointer */ |
64 | }; | 64 | }; |
@@ -245,5 +245,8 @@ static inline u32 rtas_config_addr(int busno, int devfn, int reg) | |||
245 | (devfn << 8) | (reg & 0xff); | 245 | (devfn << 8) | (reg & 0xff); |
246 | } | 246 | } |
247 | 247 | ||
248 | extern void __cpuinit rtas_give_timebase(void); | ||
249 | extern void __cpuinit rtas_take_timebase(void); | ||
250 | |||
248 | #endif /* __KERNEL__ */ | 251 | #endif /* __KERNEL__ */ |
249 | #endif /* _POWERPC_RTAS_H */ | 252 | #endif /* _POWERPC_RTAS_H */ |
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h index 9aba5a38a7c4..c8b329255678 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h | |||
@@ -46,15 +46,13 @@ struct thread_info { | |||
46 | 46 | ||
47 | /* | 47 | /* |
48 | * macros/functions for gaining access to the thread information structure | 48 | * macros/functions for gaining access to the thread information structure |
49 | * | ||
50 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
51 | */ | 49 | */ |
52 | #define INIT_THREAD_INFO(tsk) \ | 50 | #define INIT_THREAD_INFO(tsk) \ |
53 | { \ | 51 | { \ |
54 | .task = &tsk, \ | 52 | .task = &tsk, \ |
55 | .exec_domain = &default_exec_domain, \ | 53 | .exec_domain = &default_exec_domain, \ |
56 | .cpu = 0, \ | 54 | .cpu = 0, \ |
57 | .preempt_count = 1, \ | 55 | .preempt_count = INIT_PREEMPT_COUNT, \ |
58 | .restart_block = { \ | 56 | .restart_block = { \ |
59 | .fn = do_no_restart_syscall, \ | 57 | .fn = do_no_restart_syscall, \ |
60 | }, \ | 58 | }, \ |
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 4dd38f129153..3cadba60a4b6 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
@@ -191,11 +191,49 @@ transfer_to_handler_cont: | |||
191 | mflr r9 | 191 | mflr r9 |
192 | lwz r11,0(r9) /* virtual address of handler */ | 192 | lwz r11,0(r9) /* virtual address of handler */ |
193 | lwz r9,4(r9) /* where to go when done */ | 193 | lwz r9,4(r9) /* where to go when done */ |
194 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
195 | lis r12,reenable_mmu@h | ||
196 | ori r12,r12,reenable_mmu@l | ||
197 | mtspr SPRN_SRR0,r12 | ||
198 | mtspr SPRN_SRR1,r10 | ||
199 | SYNC | ||
200 | RFI | ||
201 | reenable_mmu: /* re-enable mmu so we can */ | ||
202 | mfmsr r10 | ||
203 | lwz r12,_MSR(r1) | ||
204 | xor r10,r10,r12 | ||
205 | andi. r10,r10,MSR_EE /* Did EE change? */ | ||
206 | beq 1f | ||
207 | |||
208 | /* Save handler and return address into the 2 unused words | ||
209 | * of the STACK_FRAME_OVERHEAD (sneak sneak sneak). Everything | ||
210 | * else can be recovered from the pt_regs except r3 which for | ||
211 | * normal interrupts has been set to pt_regs and for syscalls | ||
212 | * is an argument, so we temporarily use ORIG_GPR3 to save it | ||
213 | */ | ||
214 | stw r9,8(r1) | ||
215 | stw r11,12(r1) | ||
216 | stw r3,ORIG_GPR3(r1) | ||
217 | bl trace_hardirqs_off | ||
218 | lwz r0,GPR0(r1) | ||
219 | lwz r3,ORIG_GPR3(r1) | ||
220 | lwz r4,GPR4(r1) | ||
221 | lwz r5,GPR5(r1) | ||
222 | lwz r6,GPR6(r1) | ||
223 | lwz r7,GPR7(r1) | ||
224 | lwz r8,GPR8(r1) | ||
225 | lwz r9,8(r1) | ||
226 | lwz r11,12(r1) | ||
227 | 1: mtctr r11 | ||
228 | mtlr r9 | ||
229 | bctr /* jump to handler */ | ||
230 | #else /* CONFIG_TRACE_IRQFLAGS */ | ||
194 | mtspr SPRN_SRR0,r11 | 231 | mtspr SPRN_SRR0,r11 |
195 | mtspr SPRN_SRR1,r10 | 232 | mtspr SPRN_SRR1,r10 |
196 | mtlr r9 | 233 | mtlr r9 |
197 | SYNC | 234 | SYNC |
198 | RFI /* jump to handler, enable MMU */ | 235 | RFI /* jump to handler, enable MMU */ |
236 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
199 | 237 | ||
200 | #if defined (CONFIG_6xx) || defined(CONFIG_E500) | 238 | #if defined (CONFIG_6xx) || defined(CONFIG_E500) |
201 | 4: rlwinm r12,r12,0,~_TLF_NAPPING | 239 | 4: rlwinm r12,r12,0,~_TLF_NAPPING |
@@ -251,6 +289,31 @@ _GLOBAL(DoSyscall) | |||
251 | #ifdef SHOW_SYSCALLS | 289 | #ifdef SHOW_SYSCALLS |
252 | bl do_show_syscall | 290 | bl do_show_syscall |
253 | #endif /* SHOW_SYSCALLS */ | 291 | #endif /* SHOW_SYSCALLS */ |
292 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
293 | /* Return from syscalls can (and generally will) hard enable | ||
294 | * interrupts. You aren't supposed to call a syscall with | ||
295 | * interrupts disabled in the first place. However, to ensure | ||
296 | * that we get it right vs. lockdep if it happens, we force | ||
297 | * that hard enable here with appropriate tracing if we see | ||
298 | * that we have been called with interrupts off | ||
299 | */ | ||
300 | mfmsr r11 | ||
301 | andi. r12,r11,MSR_EE | ||
302 | bne+ 1f | ||
303 | /* We came in with interrupts disabled, we enable them now */ | ||
304 | bl trace_hardirqs_on | ||
305 | mfmsr r11 | ||
306 | lwz r0,GPR0(r1) | ||
307 | lwz r3,GPR3(r1) | ||
308 | lwz r4,GPR4(r1) | ||
309 | ori r11,r11,MSR_EE | ||
310 | lwz r5,GPR5(r1) | ||
311 | lwz r6,GPR6(r1) | ||
312 | lwz r7,GPR7(r1) | ||
313 | lwz r8,GPR8(r1) | ||
314 | mtmsr r11 | ||
315 | 1: | ||
316 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
254 | rlwinm r10,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ | 317 | rlwinm r10,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ |
255 | lwz r11,TI_FLAGS(r10) | 318 | lwz r11,TI_FLAGS(r10) |
256 | andi. r11,r11,_TIF_SYSCALL_T_OR_A | 319 | andi. r11,r11,_TIF_SYSCALL_T_OR_A |
@@ -275,6 +338,7 @@ ret_from_syscall: | |||
275 | rlwinm r12,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ | 338 | rlwinm r12,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ |
276 | /* disable interrupts so current_thread_info()->flags can't change */ | 339 | /* disable interrupts so current_thread_info()->flags can't change */ |
277 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) /* doesn't include MSR_EE */ | 340 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) /* doesn't include MSR_EE */ |
341 | /* Note: We don't bother telling lockdep about it */ | ||
278 | SYNC | 342 | SYNC |
279 | MTMSRD(r10) | 343 | MTMSRD(r10) |
280 | lwz r9,TI_FLAGS(r12) | 344 | lwz r9,TI_FLAGS(r12) |
@@ -288,6 +352,19 @@ ret_from_syscall: | |||
288 | oris r11,r11,0x1000 /* Set SO bit in CR */ | 352 | oris r11,r11,0x1000 /* Set SO bit in CR */ |
289 | stw r11,_CCR(r1) | 353 | stw r11,_CCR(r1) |
290 | syscall_exit_cont: | 354 | syscall_exit_cont: |
355 | lwz r8,_MSR(r1) | ||
356 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
357 | /* If we are going to return from the syscall with interrupts | ||
358 | * off, we trace that here. It shouldn't happen though but we | ||
359 | * want to catch the bugger if it does right ? | ||
360 | */ | ||
361 | andi. r10,r8,MSR_EE | ||
362 | bne+ 1f | ||
363 | stw r3,GPR3(r1) | ||
364 | bl trace_hardirqs_off | ||
365 | lwz r3,GPR3(r1) | ||
366 | 1: | ||
367 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
291 | #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) | 368 | #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) |
292 | /* If the process has its own DBCR0 value, load it up. The internal | 369 | /* If the process has its own DBCR0 value, load it up. The internal |
293 | debug mode bit tells us that dbcr0 should be loaded. */ | 370 | debug mode bit tells us that dbcr0 should be loaded. */ |
@@ -311,7 +388,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX) | |||
311 | mtlr r4 | 388 | mtlr r4 |
312 | mtcr r5 | 389 | mtcr r5 |
313 | lwz r7,_NIP(r1) | 390 | lwz r7,_NIP(r1) |
314 | lwz r8,_MSR(r1) | ||
315 | FIX_SRR1(r8, r0) | 391 | FIX_SRR1(r8, r0) |
316 | lwz r2,GPR2(r1) | 392 | lwz r2,GPR2(r1) |
317 | lwz r1,GPR1(r1) | 393 | lwz r1,GPR1(r1) |
@@ -394,7 +470,9 @@ syscall_exit_work: | |||
394 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) | 470 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) |
395 | beq ret_from_except | 471 | beq ret_from_except |
396 | 472 | ||
397 | /* Re-enable interrupts */ | 473 | /* Re-enable interrupts. There is no need to trace that with |
474 | * lockdep as we are supposed to have IRQs on at this point | ||
475 | */ | ||
398 | ori r10,r10,MSR_EE | 476 | ori r10,r10,MSR_EE |
399 | SYNC | 477 | SYNC |
400 | MTMSRD(r10) | 478 | MTMSRD(r10) |
@@ -705,6 +783,7 @@ ret_from_except: | |||
705 | /* Hard-disable interrupts so that current_thread_info()->flags | 783 | /* Hard-disable interrupts so that current_thread_info()->flags |
706 | * can't change between when we test it and when we return | 784 | * can't change between when we test it and when we return |
707 | * from the interrupt. */ | 785 | * from the interrupt. */ |
786 | /* Note: We don't bother telling lockdep about it */ | ||
708 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) | 787 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) |
709 | SYNC /* Some chip revs have problems here... */ | 788 | SYNC /* Some chip revs have problems here... */ |
710 | MTMSRD(r10) /* disable interrupts */ | 789 | MTMSRD(r10) /* disable interrupts */ |
@@ -744,11 +823,24 @@ resume_kernel: | |||
744 | beq+ restore | 823 | beq+ restore |
745 | andi. r0,r3,MSR_EE /* interrupts off? */ | 824 | andi. r0,r3,MSR_EE /* interrupts off? */ |
746 | beq restore /* don't schedule if so */ | 825 | beq restore /* don't schedule if so */ |
826 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
827 | /* Lockdep thinks irqs are enabled, we need to call | ||
828 | * preempt_schedule_irq with IRQs off, so we inform lockdep | ||
829 | * now that we -did- turn them off already | ||
830 | */ | ||
831 | bl trace_hardirqs_off | ||
832 | #endif | ||
747 | 1: bl preempt_schedule_irq | 833 | 1: bl preempt_schedule_irq |
748 | rlwinm r9,r1,0,0,(31-THREAD_SHIFT) | 834 | rlwinm r9,r1,0,0,(31-THREAD_SHIFT) |
749 | lwz r3,TI_FLAGS(r9) | 835 | lwz r3,TI_FLAGS(r9) |
750 | andi. r0,r3,_TIF_NEED_RESCHED | 836 | andi. r0,r3,_TIF_NEED_RESCHED |
751 | bne- 1b | 837 | bne- 1b |
838 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
839 | /* And now, to properly rebalance the above, we tell lockdep they | ||
840 | * are being turned back on, which will happen when we return | ||
841 | */ | ||
842 | bl trace_hardirqs_on | ||
843 | #endif | ||
752 | #else | 844 | #else |
753 | resume_kernel: | 845 | resume_kernel: |
754 | #endif /* CONFIG_PREEMPT */ | 846 | #endif /* CONFIG_PREEMPT */ |
@@ -765,6 +857,28 @@ restore: | |||
765 | stw r6,icache_44x_need_flush@l(r4) | 857 | stw r6,icache_44x_need_flush@l(r4) |
766 | 1: | 858 | 1: |
767 | #endif /* CONFIG_44x */ | 859 | #endif /* CONFIG_44x */ |
860 | |||
861 | lwz r9,_MSR(r1) | ||
862 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
863 | /* Lockdep doesn't know about the fact that IRQs are temporarily turned | ||
864 | * off in this assembly code while peeking at TI_FLAGS() and such. However | ||
865 | * we need to inform it if the exception turned interrupts off, and we | ||
866 | * are about to trun them back on. | ||
867 | * | ||
868 | * The problem here sadly is that we don't know whether the exceptions was | ||
869 | * one that turned interrupts off or not. So we always tell lockdep about | ||
870 | * turning them on here when we go back to wherever we came from with EE | ||
871 | * on, even if that may meen some redudant calls being tracked. Maybe later | ||
872 | * we could encode what the exception did somewhere or test the exception | ||
873 | * type in the pt_regs but that sounds overkill | ||
874 | */ | ||
875 | andi. r10,r9,MSR_EE | ||
876 | beq 1f | ||
877 | bl trace_hardirqs_on | ||
878 | lwz r9,_MSR(r1) | ||
879 | 1: | ||
880 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
881 | |||
768 | lwz r0,GPR0(r1) | 882 | lwz r0,GPR0(r1) |
769 | lwz r2,GPR2(r1) | 883 | lwz r2,GPR2(r1) |
770 | REST_4GPRS(3, r1) | 884 | REST_4GPRS(3, r1) |
@@ -782,7 +896,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX) | |||
782 | stwcx. r0,0,r1 /* to clear the reservation */ | 896 | stwcx. r0,0,r1 /* to clear the reservation */ |
783 | 897 | ||
784 | #if !(defined(CONFIG_4xx) || defined(CONFIG_BOOKE)) | 898 | #if !(defined(CONFIG_4xx) || defined(CONFIG_BOOKE)) |
785 | lwz r9,_MSR(r1) | ||
786 | andi. r10,r9,MSR_RI /* check if this exception occurred */ | 899 | andi. r10,r9,MSR_RI /* check if this exception occurred */ |
787 | beql nonrecoverable /* at a bad place (MSR:RI = 0) */ | 900 | beql nonrecoverable /* at a bad place (MSR:RI = 0) */ |
788 | 901 | ||
@@ -805,7 +918,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX) | |||
805 | MTMSRD(r10) /* clear the RI bit */ | 918 | MTMSRD(r10) /* clear the RI bit */ |
806 | .globl exc_exit_restart | 919 | .globl exc_exit_restart |
807 | exc_exit_restart: | 920 | exc_exit_restart: |
808 | lwz r9,_MSR(r1) | ||
809 | lwz r12,_NIP(r1) | 921 | lwz r12,_NIP(r1) |
810 | FIX_SRR1(r9,r10) | 922 | FIX_SRR1(r9,r10) |
811 | mtspr SPRN_SRR0,r12 | 923 | mtspr SPRN_SRR0,r12 |
@@ -1035,11 +1147,18 @@ do_work: /* r10 contains MSR_KERNEL here */ | |||
1035 | beq do_user_signal | 1147 | beq do_user_signal |
1036 | 1148 | ||
1037 | do_resched: /* r10 contains MSR_KERNEL here */ | 1149 | do_resched: /* r10 contains MSR_KERNEL here */ |
1150 | /* Note: We don't need to inform lockdep that we are enabling | ||
1151 | * interrupts here. As far as it knows, they are already enabled | ||
1152 | */ | ||
1038 | ori r10,r10,MSR_EE | 1153 | ori r10,r10,MSR_EE |
1039 | SYNC | 1154 | SYNC |
1040 | MTMSRD(r10) /* hard-enable interrupts */ | 1155 | MTMSRD(r10) /* hard-enable interrupts */ |
1041 | bl schedule | 1156 | bl schedule |
1042 | recheck: | 1157 | recheck: |
1158 | /* Note: And we don't tell it we are disabling them again | ||
1159 | * neither. Those disable/enable cycles used to peek at | ||
1160 | * TI_FLAGS aren't advertised. | ||
1161 | */ | ||
1043 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) | 1162 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) |
1044 | SYNC | 1163 | SYNC |
1045 | MTMSRD(r10) /* disable interrupts */ | 1164 | MTMSRD(r10) /* disable interrupts */ |
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index 48469463f89e..fc2132942754 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S | |||
@@ -1124,9 +1124,8 @@ mmu_off: | |||
1124 | RFI | 1124 | RFI |
1125 | 1125 | ||
1126 | /* | 1126 | /* |
1127 | * Use the first pair of BAT registers to map the 1st 16MB | 1127 | * On 601, we use 3 BATs to map up to 24M of RAM at _PAGE_OFFSET |
1128 | * of RAM to PAGE_OFFSET. From this point on we can't safely | 1128 | * (we keep one for debugging) and on others, we use one 256M BAT. |
1129 | * call OF any more. | ||
1130 | */ | 1129 | */ |
1131 | initial_bats: | 1130 | initial_bats: |
1132 | lis r11,PAGE_OFFSET@h | 1131 | lis r11,PAGE_OFFSET@h |
@@ -1136,12 +1135,16 @@ initial_bats: | |||
1136 | bne 4f | 1135 | bne 4f |
1137 | ori r11,r11,4 /* set up BAT registers for 601 */ | 1136 | ori r11,r11,4 /* set up BAT registers for 601 */ |
1138 | li r8,0x7f /* valid, block length = 8MB */ | 1137 | li r8,0x7f /* valid, block length = 8MB */ |
1139 | oris r9,r11,0x800000@h /* set up BAT reg for 2nd 8M */ | ||
1140 | oris r10,r8,0x800000@h /* set up BAT reg for 2nd 8M */ | ||
1141 | mtspr SPRN_IBAT0U,r11 /* N.B. 601 has valid bit in */ | 1138 | mtspr SPRN_IBAT0U,r11 /* N.B. 601 has valid bit in */ |
1142 | mtspr SPRN_IBAT0L,r8 /* lower BAT register */ | 1139 | mtspr SPRN_IBAT0L,r8 /* lower BAT register */ |
1143 | mtspr SPRN_IBAT1U,r9 | 1140 | addis r11,r11,0x800000@h |
1144 | mtspr SPRN_IBAT1L,r10 | 1141 | addis r8,r8,0x800000@h |
1142 | mtspr SPRN_IBAT1U,r11 | ||
1143 | mtspr SPRN_IBAT1L,r8 | ||
1144 | addis r11,r11,0x800000@h | ||
1145 | addis r8,r8,0x800000@h | ||
1146 | mtspr SPRN_IBAT2U,r11 | ||
1147 | mtspr SPRN_IBAT2L,r8 | ||
1145 | isync | 1148 | isync |
1146 | blr | 1149 | blr |
1147 | 1150 | ||
diff --git a/arch/powerpc/kernel/mpc7450-pmu.c b/arch/powerpc/kernel/mpc7450-pmu.c index 75ff47fed7bf..c244133c67a6 100644 --- a/arch/powerpc/kernel/mpc7450-pmu.c +++ b/arch/powerpc/kernel/mpc7450-pmu.c | |||
@@ -10,7 +10,6 @@ | |||
10 | */ | 10 | */ |
11 | #include <linux/string.h> | 11 | #include <linux/string.h> |
12 | #include <linux/perf_counter.h> | 12 | #include <linux/perf_counter.h> |
13 | #include <linux/string.h> | ||
14 | #include <asm/reg.h> | 13 | #include <asm/reg.h> |
15 | #include <asm/cputable.h> | 14 | #include <asm/cputable.h> |
16 | 15 | ||
diff --git a/arch/powerpc/kernel/of_device.c b/arch/powerpc/kernel/of_device.c index fa983a59c4ce..a359cb08e900 100644 --- a/arch/powerpc/kernel/of_device.c +++ b/arch/powerpc/kernel/of_device.c | |||
@@ -76,7 +76,7 @@ struct of_device *of_device_alloc(struct device_node *np, | |||
76 | dev->dev.archdata.of_node = np; | 76 | dev->dev.archdata.of_node = np; |
77 | 77 | ||
78 | if (bus_id) | 78 | if (bus_id) |
79 | dev_set_name(&dev->dev, bus_id); | 79 | dev_set_name(&dev->dev, "%s", bus_id); |
80 | else | 80 | else |
81 | of_device_make_bus_id(dev); | 81 | of_device_make_bus_id(dev); |
82 | 82 | ||
diff --git a/arch/powerpc/kernel/power7-pmu.c b/arch/powerpc/kernel/power7-pmu.c index 5d755ef7ac8f..5a9f5cbd40a4 100644 --- a/arch/powerpc/kernel/power7-pmu.c +++ b/arch/powerpc/kernel/power7-pmu.c | |||
@@ -358,6 +358,7 @@ static struct power_pmu power7_pmu = { | |||
358 | .get_constraint = power7_get_constraint, | 358 | .get_constraint = power7_get_constraint, |
359 | .get_alternatives = power7_get_alternatives, | 359 | .get_alternatives = power7_get_alternatives, |
360 | .disable_pmc = power7_disable_pmc, | 360 | .disable_pmc = power7_disable_pmc, |
361 | .flags = PPMU_ALT_SIPR, | ||
361 | .n_generic = ARRAY_SIZE(power7_generic_events), | 362 | .n_generic = ARRAY_SIZE(power7_generic_events), |
362 | .generic_events = power7_generic_events, | 363 | .generic_events = power7_generic_events, |
363 | .cache_events = &power7_cache_events, | 364 | .cache_events = &power7_cache_events, |
diff --git a/arch/powerpc/kernel/ppc970-pmu.c b/arch/powerpc/kernel/ppc970-pmu.c index 6637c87fe70e..833097ac45dc 100644 --- a/arch/powerpc/kernel/ppc970-pmu.c +++ b/arch/powerpc/kernel/ppc970-pmu.c | |||
@@ -10,7 +10,6 @@ | |||
10 | */ | 10 | */ |
11 | #include <linux/string.h> | 11 | #include <linux/string.h> |
12 | #include <linux/perf_counter.h> | 12 | #include <linux/perf_counter.h> |
13 | #include <linux/string.h> | ||
14 | #include <asm/reg.h> | 13 | #include <asm/reg.h> |
15 | #include <asm/cputable.h> | 14 | #include <asm/cputable.h> |
16 | 15 | ||
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 3e7135bbe40f..892a9f2e6d76 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -528,7 +528,7 @@ void show_regs(struct pt_regs * regs) | |||
528 | 528 | ||
529 | for (i = 0; i < 32; i++) { | 529 | for (i = 0; i < 32; i++) { |
530 | if ((i % REGS_PER_LINE) == 0) | 530 | if ((i % REGS_PER_LINE) == 0) |
531 | printk("\n" KERN_INFO "GPR%02d: ", i); | 531 | printk("\nGPR%02d: ", i); |
532 | printk(REG " ", regs->gpr[i]); | 532 | printk(REG " ", regs->gpr[i]); |
533 | if (i == LAST_VOLATILE && !FULL_REGS(regs)) | 533 | if (i == LAST_VOLATILE && !FULL_REGS(regs)) |
534 | break; | 534 | break; |
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 9fa2c7dcd05a..ef149880c145 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c | |||
@@ -736,15 +736,16 @@ void user_disable_single_step(struct task_struct *task) | |||
736 | { | 736 | { |
737 | struct pt_regs *regs = task->thread.regs; | 737 | struct pt_regs *regs = task->thread.regs; |
738 | 738 | ||
739 | |||
740 | #if defined(CONFIG_BOOKE) | ||
741 | /* If DAC then do not single step, skip */ | ||
742 | if (task->thread.dabr) | ||
743 | return; | ||
744 | #endif | ||
745 | |||
746 | if (regs != NULL) { | 739 | if (regs != NULL) { |
747 | #if defined(CONFIG_40x) || defined(CONFIG_BOOKE) | 740 | #if defined(CONFIG_BOOKE) |
741 | /* If DAC don't clear DBCRO_IDM or MSR_DE */ | ||
742 | if (task->thread.dabr) | ||
743 | task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT); | ||
744 | else { | ||
745 | task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM); | ||
746 | regs->msr &= ~MSR_DE; | ||
747 | } | ||
748 | #elif defined(CONFIG_40x) | ||
748 | task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM); | 749 | task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM); |
749 | regs->msr &= ~MSR_DE; | 750 | regs->msr &= ~MSR_DE; |
750 | #else | 751 | #else |
diff --git a/arch/powerpc/kernel/ptrace32.c b/arch/powerpc/kernel/ptrace32.c index 297632cba047..8a6daf4129f6 100644 --- a/arch/powerpc/kernel/ptrace32.c +++ b/arch/powerpc/kernel/ptrace32.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
22 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
23 | #include <linux/smp.h> | 23 | #include <linux/smp.h> |
24 | #include <linux/smp_lock.h> | ||
25 | #include <linux/errno.h> | 24 | #include <linux/errno.h> |
26 | #include <linux/ptrace.h> | 25 | #include <linux/ptrace.h> |
27 | #include <linux/regset.h> | 26 | #include <linux/regset.h> |
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index ee4c7609b649..c434823b8c83 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -38,9 +38,10 @@ | |||
38 | #include <asm/syscalls.h> | 38 | #include <asm/syscalls.h> |
39 | #include <asm/smp.h> | 39 | #include <asm/smp.h> |
40 | #include <asm/atomic.h> | 40 | #include <asm/atomic.h> |
41 | #include <asm/time.h> | ||
41 | 42 | ||
42 | struct rtas_t rtas = { | 43 | struct rtas_t rtas = { |
43 | .lock = SPIN_LOCK_UNLOCKED | 44 | .lock = __RAW_SPIN_LOCK_UNLOCKED |
44 | }; | 45 | }; |
45 | EXPORT_SYMBOL(rtas); | 46 | EXPORT_SYMBOL(rtas); |
46 | 47 | ||
@@ -67,6 +68,28 @@ unsigned long rtas_rmo_buf; | |||
67 | void (*rtas_flash_term_hook)(int); | 68 | void (*rtas_flash_term_hook)(int); |
68 | EXPORT_SYMBOL(rtas_flash_term_hook); | 69 | EXPORT_SYMBOL(rtas_flash_term_hook); |
69 | 70 | ||
71 | /* RTAS use home made raw locking instead of spin_lock_irqsave | ||
72 | * because those can be called from within really nasty contexts | ||
73 | * such as having the timebase stopped which would lockup with | ||
74 | * normal locks and spinlock debugging enabled | ||
75 | */ | ||
76 | static unsigned long lock_rtas(void) | ||
77 | { | ||
78 | unsigned long flags; | ||
79 | |||
80 | local_irq_save(flags); | ||
81 | preempt_disable(); | ||
82 | __raw_spin_lock_flags(&rtas.lock, flags); | ||
83 | return flags; | ||
84 | } | ||
85 | |||
86 | static void unlock_rtas(unsigned long flags) | ||
87 | { | ||
88 | __raw_spin_unlock(&rtas.lock); | ||
89 | local_irq_restore(flags); | ||
90 | preempt_enable(); | ||
91 | } | ||
92 | |||
70 | /* | 93 | /* |
71 | * call_rtas_display_status and call_rtas_display_status_delay | 94 | * call_rtas_display_status and call_rtas_display_status_delay |
72 | * are designed only for very early low-level debugging, which | 95 | * are designed only for very early low-level debugging, which |
@@ -79,7 +102,7 @@ static void call_rtas_display_status(char c) | |||
79 | 102 | ||
80 | if (!rtas.base) | 103 | if (!rtas.base) |
81 | return; | 104 | return; |
82 | spin_lock_irqsave(&rtas.lock, s); | 105 | s = lock_rtas(); |
83 | 106 | ||
84 | args->token = 10; | 107 | args->token = 10; |
85 | args->nargs = 1; | 108 | args->nargs = 1; |
@@ -89,7 +112,7 @@ static void call_rtas_display_status(char c) | |||
89 | 112 | ||
90 | enter_rtas(__pa(args)); | 113 | enter_rtas(__pa(args)); |
91 | 114 | ||
92 | spin_unlock_irqrestore(&rtas.lock, s); | 115 | unlock_rtas(s); |
93 | } | 116 | } |
94 | 117 | ||
95 | static void call_rtas_display_status_delay(char c) | 118 | static void call_rtas_display_status_delay(char c) |
@@ -411,8 +434,7 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...) | |||
411 | if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE) | 434 | if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE) |
412 | return -1; | 435 | return -1; |
413 | 436 | ||
414 | /* Gotta do something different here, use global lock for now... */ | 437 | s = lock_rtas(); |
415 | spin_lock_irqsave(&rtas.lock, s); | ||
416 | rtas_args = &rtas.args; | 438 | rtas_args = &rtas.args; |
417 | 439 | ||
418 | rtas_args->token = token; | 440 | rtas_args->token = token; |
@@ -439,8 +461,7 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...) | |||
439 | outputs[i] = rtas_args->rets[i+1]; | 461 | outputs[i] = rtas_args->rets[i+1]; |
440 | ret = (nret > 0)? rtas_args->rets[0]: 0; | 462 | ret = (nret > 0)? rtas_args->rets[0]: 0; |
441 | 463 | ||
442 | /* Gotta do something different here, use global lock for now... */ | 464 | unlock_rtas(s); |
443 | spin_unlock_irqrestore(&rtas.lock, s); | ||
444 | 465 | ||
445 | if (buff_copy) { | 466 | if (buff_copy) { |
446 | log_error(buff_copy, ERR_TYPE_RTAS_LOG, 0); | 467 | log_error(buff_copy, ERR_TYPE_RTAS_LOG, 0); |
@@ -837,7 +858,7 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs) | |||
837 | 858 | ||
838 | buff_copy = get_errorlog_buffer(); | 859 | buff_copy = get_errorlog_buffer(); |
839 | 860 | ||
840 | spin_lock_irqsave(&rtas.lock, flags); | 861 | flags = lock_rtas(); |
841 | 862 | ||
842 | rtas.args = args; | 863 | rtas.args = args; |
843 | enter_rtas(__pa(&rtas.args)); | 864 | enter_rtas(__pa(&rtas.args)); |
@@ -848,7 +869,7 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs) | |||
848 | if (args.rets[0] == -1) | 869 | if (args.rets[0] == -1) |
849 | errbuf = __fetch_rtas_last_error(buff_copy); | 870 | errbuf = __fetch_rtas_last_error(buff_copy); |
850 | 871 | ||
851 | spin_unlock_irqrestore(&rtas.lock, flags); | 872 | unlock_rtas(flags); |
852 | 873 | ||
853 | if (buff_copy) { | 874 | if (buff_copy) { |
854 | if (errbuf) | 875 | if (errbuf) |
@@ -951,3 +972,33 @@ int __init early_init_dt_scan_rtas(unsigned long node, | |||
951 | /* break now */ | 972 | /* break now */ |
952 | return 1; | 973 | return 1; |
953 | } | 974 | } |
975 | |||
976 | static raw_spinlock_t timebase_lock; | ||
977 | static u64 timebase = 0; | ||
978 | |||
979 | void __cpuinit rtas_give_timebase(void) | ||
980 | { | ||
981 | unsigned long flags; | ||
982 | |||
983 | local_irq_save(flags); | ||
984 | hard_irq_disable(); | ||
985 | __raw_spin_lock(&timebase_lock); | ||
986 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); | ||
987 | timebase = get_tb(); | ||
988 | __raw_spin_unlock(&timebase_lock); | ||
989 | |||
990 | while (timebase) | ||
991 | barrier(); | ||
992 | rtas_call(rtas_token("thaw-time-base"), 0, 1, NULL); | ||
993 | local_irq_restore(flags); | ||
994 | } | ||
995 | |||
996 | void __cpuinit rtas_take_timebase(void) | ||
997 | { | ||
998 | while (!timebase) | ||
999 | barrier(); | ||
1000 | __raw_spin_lock(&timebase_lock); | ||
1001 | set_tb(timebase >> 32, timebase & 0xffffffff); | ||
1002 | timebase = 0; | ||
1003 | __raw_spin_unlock(&timebase_lock); | ||
1004 | } | ||
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 1d154248cf40..e1e3059cf34b 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
@@ -119,6 +119,8 @@ notrace unsigned long __init early_init(unsigned long dt_ptr) | |||
119 | */ | 119 | */ |
120 | notrace void __init machine_init(unsigned long dt_ptr) | 120 | notrace void __init machine_init(unsigned long dt_ptr) |
121 | { | 121 | { |
122 | lockdep_init(); | ||
123 | |||
122 | /* Enable early debugging if any specified (see udbg.h) */ | 124 | /* Enable early debugging if any specified (see udbg.h) */ |
123 | udbg_early_init(); | 125 | udbg_early_init(); |
124 | 126 | ||
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 65484b2200b3..0b47de07302d 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
@@ -68,7 +68,8 @@ EXPORT_PER_CPU_SYMBOL(cpu_core_map); | |||
68 | /* SMP operations for this machine */ | 68 | /* SMP operations for this machine */ |
69 | struct smp_ops_t *smp_ops; | 69 | struct smp_ops_t *smp_ops; |
70 | 70 | ||
71 | static volatile unsigned int cpu_callin_map[NR_CPUS]; | 71 | /* Can't be static due to PowerMac hackery */ |
72 | volatile unsigned int cpu_callin_map[NR_CPUS]; | ||
72 | 73 | ||
73 | int smt_enabled_at_boot = 1; | 74 | int smt_enabled_at_boot = 1; |
74 | 75 | ||
diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c index 0362a891e54e..acb74a17bbbf 100644 --- a/arch/powerpc/kernel/udbg_16550.c +++ b/arch/powerpc/kernel/udbg_16550.c | |||
@@ -219,7 +219,7 @@ void udbg_init_pas_realmode(void) | |||
219 | #ifdef CONFIG_PPC_EARLY_DEBUG_44x | 219 | #ifdef CONFIG_PPC_EARLY_DEBUG_44x |
220 | #include <platforms/44x/44x.h> | 220 | #include <platforms/44x/44x.h> |
221 | 221 | ||
222 | static int udbg_44x_as1_flush(void) | 222 | static void udbg_44x_as1_flush(void) |
223 | { | 223 | { |
224 | if (udbg_comport) { | 224 | if (udbg_comport) { |
225 | while ((as1_readb(&udbg_comport->lsr) & LSR_THRE) == 0) | 225 | while ((as1_readb(&udbg_comport->lsr) & LSR_THRE) == 0) |
diff --git a/arch/powerpc/kernel/vector.S b/arch/powerpc/kernel/vector.S index ef36cbbc5882..ea4d64644d02 100644 --- a/arch/powerpc/kernel/vector.S +++ b/arch/powerpc/kernel/vector.S | |||
@@ -80,10 +80,10 @@ _GLOBAL(load_up_altivec) | |||
80 | mtvscr vr0 | 80 | mtvscr vr0 |
81 | REST_32VRS(0,r4,r5) | 81 | REST_32VRS(0,r4,r5) |
82 | #ifndef CONFIG_SMP | 82 | #ifndef CONFIG_SMP |
83 | /* Update last_task_used_math to 'current' */ | 83 | /* Update last_task_used_altivec to 'current' */ |
84 | subi r4,r5,THREAD /* Back to 'current' */ | 84 | subi r4,r5,THREAD /* Back to 'current' */ |
85 | fromreal(r4) | 85 | fromreal(r4) |
86 | PPC_STL r4,ADDROFF(last_task_used_math)(r3) | 86 | PPC_STL r4,ADDROFF(last_task_used_altivec)(r3) |
87 | #endif /* CONFIG_SMP */ | 87 | #endif /* CONFIG_SMP */ |
88 | /* restore registers and return */ | 88 | /* restore registers and return */ |
89 | blr | 89 | blr |
@@ -172,7 +172,7 @@ _GLOBAL(load_up_vsx) | |||
172 | oris r12,r12,MSR_VSX@h | 172 | oris r12,r12,MSR_VSX@h |
173 | std r12,_MSR(r1) | 173 | std r12,_MSR(r1) |
174 | #ifndef CONFIG_SMP | 174 | #ifndef CONFIG_SMP |
175 | /* Update last_task_used_math to 'current' */ | 175 | /* Update last_task_used_vsx to 'current' */ |
176 | ld r4,PACACURRENT(r13) | 176 | ld r4,PACACURRENT(r13) |
177 | std r4,0(r3) | 177 | std r4,0(r3) |
178 | #endif /* CONFIG_SMP */ | 178 | #endif /* CONFIG_SMP */ |
diff --git a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile index 2d2192e48de7..3e68363405b7 100644 --- a/arch/powerpc/mm/Makefile +++ b/arch/powerpc/mm/Makefile | |||
@@ -30,3 +30,4 @@ obj-$(CONFIG_PPC_MM_SLICES) += slice.o | |||
30 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o | 30 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o |
31 | obj-$(CONFIG_PPC_SUBPAGE_PROT) += subpage-prot.o | 31 | obj-$(CONFIG_PPC_SUBPAGE_PROT) += subpage-prot.o |
32 | obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o | 32 | obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o |
33 | obj-$(CONFIG_HIGHMEM) += highmem.o | ||
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index 5beffc8f481e..830bef0a1131 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c | |||
@@ -302,7 +302,7 @@ good_area: | |||
302 | * the fault. | 302 | * the fault. |
303 | */ | 303 | */ |
304 | survive: | 304 | survive: |
305 | ret = handle_mm_fault(mm, vma, address, is_write); | 305 | ret = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0); |
306 | if (unlikely(ret & VM_FAULT_ERROR)) { | 306 | if (unlikely(ret & VM_FAULT_ERROR)) { |
307 | if (ret & VM_FAULT_OOM) | 307 | if (ret & VM_FAULT_OOM) |
308 | goto out_of_memory; | 308 | goto out_of_memory; |
diff --git a/arch/powerpc/mm/gup.c b/arch/powerpc/mm/gup.c index bc400c78c97f..bc122a120bf0 100644 --- a/arch/powerpc/mm/gup.c +++ b/arch/powerpc/mm/gup.c | |||
@@ -159,7 +159,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
159 | int psize; | 159 | int psize; |
160 | #endif | 160 | #endif |
161 | 161 | ||
162 | pr_debug("%s(%lx,%x,%s)\n", __func__, start, nr_pages, write ? "write" : "read"); | 162 | pr_devel("%s(%lx,%x,%s)\n", __func__, start, nr_pages, write ? "write" : "read"); |
163 | 163 | ||
164 | start &= PAGE_MASK; | 164 | start &= PAGE_MASK; |
165 | addr = start; | 165 | addr = start; |
@@ -170,7 +170,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
170 | start, len))) | 170 | start, len))) |
171 | goto slow_irqon; | 171 | goto slow_irqon; |
172 | 172 | ||
173 | pr_debug(" aligned: %lx .. %lx\n", start, end); | 173 | pr_devel(" aligned: %lx .. %lx\n", start, end); |
174 | 174 | ||
175 | #ifdef CONFIG_HUGETLB_PAGE | 175 | #ifdef CONFIG_HUGETLB_PAGE |
176 | /* We bail out on slice boundary crossing when hugetlb is | 176 | /* We bail out on slice boundary crossing when hugetlb is |
@@ -234,7 +234,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
234 | do { | 234 | do { |
235 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, a)].shift); | 235 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, a)].shift); |
236 | ptep = huge_pte_offset(mm, a); | 236 | ptep = huge_pte_offset(mm, a); |
237 | pr_debug(" %016lx: huge ptep %p\n", a, ptep); | 237 | pr_devel(" %016lx: huge ptep %p\n", a, ptep); |
238 | if (!ptep || !gup_huge_pte(ptep, hstate, &a, end, write, pages, | 238 | if (!ptep || !gup_huge_pte(ptep, hstate, &a, end, write, pages, |
239 | &nr)) | 239 | &nr)) |
240 | goto slow; | 240 | goto slow; |
@@ -249,7 +249,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
249 | #ifdef CONFIG_PPC64 | 249 | #ifdef CONFIG_PPC64 |
250 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, addr)].shift); | 250 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, addr)].shift); |
251 | #endif | 251 | #endif |
252 | pr_debug(" %016lx: normal pgd %p\n", addr, | 252 | pr_devel(" %016lx: normal pgd %p\n", addr, |
253 | (void *)pgd_val(pgd)); | 253 | (void *)pgd_val(pgd)); |
254 | next = pgd_addr_end(addr, end); | 254 | next = pgd_addr_end(addr, end); |
255 | if (pgd_none(pgd)) | 255 | if (pgd_none(pgd)) |
@@ -269,7 +269,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
269 | slow: | 269 | slow: |
270 | local_irq_enable(); | 270 | local_irq_enable(); |
271 | slow_irqon: | 271 | slow_irqon: |
272 | pr_debug(" slow path ! nr = %d\n", nr); | 272 | pr_devel(" slow path ! nr = %d\n", nr); |
273 | 273 | ||
274 | /* Try to get the remaining pages with get_user_pages */ | 274 | /* Try to get the remaining pages with get_user_pages */ |
275 | start += nr << PAGE_SHIFT; | 275 | start += nr << PAGE_SHIFT; |
diff --git a/arch/powerpc/mm/highmem.c b/arch/powerpc/mm/highmem.c new file mode 100644 index 000000000000..c2186c74c85a --- /dev/null +++ b/arch/powerpc/mm/highmem.c | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | * highmem.c: virtual kernel memory mappings for high memory | ||
3 | * | ||
4 | * PowerPC version, stolen from the i386 version. | ||
5 | * | ||
6 | * Used in CONFIG_HIGHMEM systems for memory pages which | ||
7 | * are not addressable by direct kernel virtual addresses. | ||
8 | * | ||
9 | * Copyright (C) 1999 Gerhard Wichert, Siemens AG | ||
10 | * Gerhard.Wichert@pdb.siemens.de | ||
11 | * | ||
12 | * | ||
13 | * Redesigned the x86 32-bit VM architecture to deal with | ||
14 | * up to 16 Terrabyte physical memory. With current x86 CPUs | ||
15 | * we now support up to 64 Gigabytes physical RAM. | ||
16 | * | ||
17 | * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com> | ||
18 | * | ||
19 | * Reworked for PowerPC by various contributors. Moved from | ||
20 | * highmem.h by Benjamin Herrenschmidt (c) 2009 IBM Corp. | ||
21 | */ | ||
22 | |||
23 | #include <linux/highmem.h> | ||
24 | #include <linux/module.h> | ||
25 | |||
26 | /* | ||
27 | * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap | ||
28 | * gives a more generic (and caching) interface. But kmap_atomic can | ||
29 | * be used in IRQ contexts, so in some (very limited) cases we need | ||
30 | * it. | ||
31 | */ | ||
32 | void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot) | ||
33 | { | ||
34 | unsigned int idx; | ||
35 | unsigned long vaddr; | ||
36 | |||
37 | /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ | ||
38 | pagefault_disable(); | ||
39 | if (!PageHighMem(page)) | ||
40 | return page_address(page); | ||
41 | |||
42 | debug_kmap_atomic(type); | ||
43 | idx = type + KM_TYPE_NR*smp_processor_id(); | ||
44 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); | ||
45 | #ifdef CONFIG_DEBUG_HIGHMEM | ||
46 | BUG_ON(!pte_none(*(kmap_pte-idx))); | ||
47 | #endif | ||
48 | __set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot), 1); | ||
49 | local_flush_tlb_page(NULL, vaddr); | ||
50 | |||
51 | return (void*) vaddr; | ||
52 | } | ||
53 | EXPORT_SYMBOL(kmap_atomic_prot); | ||
54 | |||
55 | void kunmap_atomic(void *kvaddr, enum km_type type) | ||
56 | { | ||
57 | #ifdef CONFIG_DEBUG_HIGHMEM | ||
58 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; | ||
59 | enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); | ||
60 | |||
61 | if (vaddr < __fix_to_virt(FIX_KMAP_END)) { | ||
62 | pagefault_enable(); | ||
63 | return; | ||
64 | } | ||
65 | |||
66 | BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); | ||
67 | |||
68 | /* | ||
69 | * force other mappings to Oops if they'll try to access | ||
70 | * this pte without first remap it | ||
71 | */ | ||
72 | pte_clear(&init_mm, vaddr, kmap_pte-idx); | ||
73 | local_flush_tlb_page(NULL, vaddr); | ||
74 | #endif | ||
75 | pagefault_enable(); | ||
76 | } | ||
77 | EXPORT_SYMBOL(kunmap_atomic); | ||
diff --git a/arch/powerpc/mm/mmu_context_nohash.c b/arch/powerpc/mm/mmu_context_nohash.c index 8343986809c0..92a197117d5b 100644 --- a/arch/powerpc/mm/mmu_context_nohash.c +++ b/arch/powerpc/mm/mmu_context_nohash.c | |||
@@ -89,7 +89,7 @@ static unsigned int steal_context_smp(unsigned int id) | |||
89 | id = first_context; | 89 | id = first_context; |
90 | continue; | 90 | continue; |
91 | } | 91 | } |
92 | pr_debug("[%d] steal context %d from mm @%p\n", | 92 | pr_devel("[%d] steal context %d from mm @%p\n", |
93 | smp_processor_id(), id, mm); | 93 | smp_processor_id(), id, mm); |
94 | 94 | ||
95 | /* Mark this mm has having no context anymore */ | 95 | /* Mark this mm has having no context anymore */ |
@@ -126,7 +126,7 @@ static unsigned int steal_context_up(unsigned int id) | |||
126 | /* Pick up the victim mm */ | 126 | /* Pick up the victim mm */ |
127 | mm = context_mm[id]; | 127 | mm = context_mm[id]; |
128 | 128 | ||
129 | pr_debug("[%d] steal context %d from mm @%p\n", cpu, id, mm); | 129 | pr_devel("[%d] steal context %d from mm @%p\n", cpu, id, mm); |
130 | 130 | ||
131 | /* Flush the TLB for that context */ | 131 | /* Flush the TLB for that context */ |
132 | local_flush_tlb_mm(mm); | 132 | local_flush_tlb_mm(mm); |
@@ -180,7 +180,7 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) | |||
180 | spin_lock(&context_lock); | 180 | spin_lock(&context_lock); |
181 | 181 | ||
182 | #ifndef DEBUG_STEAL_ONLY | 182 | #ifndef DEBUG_STEAL_ONLY |
183 | pr_debug("[%d] activating context for mm @%p, active=%d, id=%d\n", | 183 | pr_devel("[%d] activating context for mm @%p, active=%d, id=%d\n", |
184 | cpu, next, next->context.active, next->context.id); | 184 | cpu, next, next->context.active, next->context.id); |
185 | #endif | 185 | #endif |
186 | 186 | ||
@@ -189,7 +189,7 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) | |||
189 | next->context.active++; | 189 | next->context.active++; |
190 | if (prev) { | 190 | if (prev) { |
191 | #ifndef DEBUG_STEAL_ONLY | 191 | #ifndef DEBUG_STEAL_ONLY |
192 | pr_debug(" old context %p active was: %d\n", | 192 | pr_devel(" old context %p active was: %d\n", |
193 | prev, prev->context.active); | 193 | prev, prev->context.active); |
194 | #endif | 194 | #endif |
195 | WARN_ON(prev->context.active < 1); | 195 | WARN_ON(prev->context.active < 1); |
@@ -236,7 +236,7 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) | |||
236 | next->context.id = id; | 236 | next->context.id = id; |
237 | 237 | ||
238 | #ifndef DEBUG_STEAL_ONLY | 238 | #ifndef DEBUG_STEAL_ONLY |
239 | pr_debug("[%d] picked up new id %d, nrf is now %d\n", | 239 | pr_devel("[%d] picked up new id %d, nrf is now %d\n", |
240 | cpu, id, nr_free_contexts); | 240 | cpu, id, nr_free_contexts); |
241 | #endif | 241 | #endif |
242 | 242 | ||
@@ -247,7 +247,7 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) | |||
247 | * local TLB for it and unmark it before we use it | 247 | * local TLB for it and unmark it before we use it |
248 | */ | 248 | */ |
249 | if (test_bit(id, stale_map[cpu])) { | 249 | if (test_bit(id, stale_map[cpu])) { |
250 | pr_debug("[%d] flushing stale context %d for mm @%p !\n", | 250 | pr_devel("[%d] flushing stale context %d for mm @%p !\n", |
251 | cpu, id, next); | 251 | cpu, id, next); |
252 | local_flush_tlb_mm(next); | 252 | local_flush_tlb_mm(next); |
253 | 253 | ||
@@ -314,13 +314,13 @@ static int __cpuinit mmu_context_cpu_notify(struct notifier_block *self, | |||
314 | switch (action) { | 314 | switch (action) { |
315 | case CPU_ONLINE: | 315 | case CPU_ONLINE: |
316 | case CPU_ONLINE_FROZEN: | 316 | case CPU_ONLINE_FROZEN: |
317 | pr_debug("MMU: Allocating stale context map for CPU %d\n", cpu); | 317 | pr_devel("MMU: Allocating stale context map for CPU %d\n", cpu); |
318 | stale_map[cpu] = kzalloc(CTX_MAP_SIZE, GFP_KERNEL); | 318 | stale_map[cpu] = kzalloc(CTX_MAP_SIZE, GFP_KERNEL); |
319 | break; | 319 | break; |
320 | #ifdef CONFIG_HOTPLUG_CPU | 320 | #ifdef CONFIG_HOTPLUG_CPU |
321 | case CPU_DEAD: | 321 | case CPU_DEAD: |
322 | case CPU_DEAD_FROZEN: | 322 | case CPU_DEAD_FROZEN: |
323 | pr_debug("MMU: Freeing stale context map for CPU %d\n", cpu); | 323 | pr_devel("MMU: Freeing stale context map for CPU %d\n", cpu); |
324 | kfree(stale_map[cpu]); | 324 | kfree(stale_map[cpu]); |
325 | stale_map[cpu] = NULL; | 325 | stale_map[cpu] = NULL; |
326 | break; | 326 | break; |
diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c index ae1d67cc090c..627767d6169b 100644 --- a/arch/powerpc/mm/pgtable.c +++ b/arch/powerpc/mm/pgtable.c | |||
@@ -129,12 +129,12 @@ static pte_t do_dcache_icache_coherency(pte_t pte) | |||
129 | page = pfn_to_page(pfn); | 129 | page = pfn_to_page(pfn); |
130 | 130 | ||
131 | if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags)) { | 131 | if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags)) { |
132 | pr_debug("do_dcache_icache_coherency... flushing\n"); | 132 | pr_devel("do_dcache_icache_coherency... flushing\n"); |
133 | flush_dcache_icache_page(page); | 133 | flush_dcache_icache_page(page); |
134 | set_bit(PG_arch_1, &page->flags); | 134 | set_bit(PG_arch_1, &page->flags); |
135 | } | 135 | } |
136 | else | 136 | else |
137 | pr_debug("do_dcache_icache_coherency... already clean\n"); | 137 | pr_devel("do_dcache_icache_coherency... already clean\n"); |
138 | return __pte(pte_val(pte) | _PAGE_HWEXEC); | 138 | return __pte(pte_val(pte) | _PAGE_HWEXEC); |
139 | } | 139 | } |
140 | 140 | ||
diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c index 3b52c80e5e33..5b7038f248b6 100644 --- a/arch/powerpc/mm/slb.c +++ b/arch/powerpc/mm/slb.c | |||
@@ -14,8 +14,6 @@ | |||
14 | * 2 of the License, or (at your option) any later version. | 14 | * 2 of the License, or (at your option) any later version. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #undef DEBUG | ||
18 | |||
19 | #include <asm/pgtable.h> | 17 | #include <asm/pgtable.h> |
20 | #include <asm/mmu.h> | 18 | #include <asm/mmu.h> |
21 | #include <asm/mmu_context.h> | 19 | #include <asm/mmu_context.h> |
@@ -27,11 +25,6 @@ | |||
27 | #include <linux/compiler.h> | 25 | #include <linux/compiler.h> |
28 | #include <asm/udbg.h> | 26 | #include <asm/udbg.h> |
29 | 27 | ||
30 | #ifdef DEBUG | ||
31 | #define DBG(fmt...) printk(fmt) | ||
32 | #else | ||
33 | #define DBG pr_debug | ||
34 | #endif | ||
35 | 28 | ||
36 | extern void slb_allocate_realmode(unsigned long ea); | 29 | extern void slb_allocate_realmode(unsigned long ea); |
37 | extern void slb_allocate_user(unsigned long ea); | 30 | extern void slb_allocate_user(unsigned long ea); |
@@ -285,13 +278,13 @@ void slb_initialize(void) | |||
285 | patch_slb_encoding(slb_compare_rr_to_size, | 278 | patch_slb_encoding(slb_compare_rr_to_size, |
286 | mmu_slb_size); | 279 | mmu_slb_size); |
287 | 280 | ||
288 | DBG("SLB: linear LLP = %04lx\n", linear_llp); | 281 | pr_devel("SLB: linear LLP = %04lx\n", linear_llp); |
289 | DBG("SLB: io LLP = %04lx\n", io_llp); | 282 | pr_devel("SLB: io LLP = %04lx\n", io_llp); |
290 | 283 | ||
291 | #ifdef CONFIG_SPARSEMEM_VMEMMAP | 284 | #ifdef CONFIG_SPARSEMEM_VMEMMAP |
292 | patch_slb_encoding(slb_miss_kernel_load_vmemmap, | 285 | patch_slb_encoding(slb_miss_kernel_load_vmemmap, |
293 | SLB_VSID_KERNEL | vmemmap_llp); | 286 | SLB_VSID_KERNEL | vmemmap_llp); |
294 | DBG("SLB: vmemmap LLP = %04lx\n", vmemmap_llp); | 287 | pr_devel("SLB: vmemmap LLP = %04lx\n", vmemmap_llp); |
295 | #endif | 288 | #endif |
296 | } | 289 | } |
297 | 290 | ||
diff --git a/arch/powerpc/mm/tlb_hash64.c b/arch/powerpc/mm/tlb_hash64.c index 1be1b5e59796..937eb90677d9 100644 --- a/arch/powerpc/mm/tlb_hash64.c +++ b/arch/powerpc/mm/tlb_hash64.c | |||
@@ -72,7 +72,7 @@ void hpte_need_flush(struct mm_struct *mm, unsigned long addr, | |||
72 | */ | 72 | */ |
73 | if (huge) { | 73 | if (huge) { |
74 | #ifdef CONFIG_HUGETLB_PAGE | 74 | #ifdef CONFIG_HUGETLB_PAGE |
75 | psize = get_slice_psize(mm, addr);; | 75 | psize = get_slice_psize(mm, addr); |
76 | #else | 76 | #else |
77 | BUG(); | 77 | BUG(); |
78 | psize = pte_pagesize_index(mm, addr, pte); /* shutup gcc */ | 78 | psize = pte_pagesize_index(mm, addr, pte); /* shutup gcc */ |
diff --git a/arch/powerpc/oprofile/cell/vma_map.c b/arch/powerpc/oprofile/cell/vma_map.c index 258fa4411e9e..c591339daf58 100644 --- a/arch/powerpc/oprofile/cell/vma_map.c +++ b/arch/powerpc/oprofile/cell/vma_map.c | |||
@@ -185,7 +185,7 @@ struct vma_to_fileoffset_map *create_vma_map(const struct spu *aSpu, | |||
185 | goto fail; | 185 | goto fail; |
186 | 186 | ||
187 | if (shdr_str.sh_type != SHT_STRTAB) | 187 | if (shdr_str.sh_type != SHT_STRTAB) |
188 | goto fail;; | 188 | goto fail; |
189 | 189 | ||
190 | for (j = 0; j < shdr.sh_size / sizeof (sym); j++) { | 190 | for (j = 0; j < shdr.sh_size / sizeof (sym); j++) { |
191 | if (copy_from_user(&sym, spu_elf_start + | 191 | if (copy_from_user(&sym, spu_elf_start + |
diff --git a/arch/powerpc/platforms/44x/warp.c b/arch/powerpc/platforms/44x/warp.c index 42e09a9f77e2..e5c1b096c3e1 100644 --- a/arch/powerpc/platforms/44x/warp.c +++ b/arch/powerpc/platforms/44x/warp.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
17 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
18 | #include <linux/of_gpio.h> | 18 | #include <linux/of_gpio.h> |
19 | #include <linux/of_i2c.h> | ||
19 | 20 | ||
20 | #include <asm/machdep.h> | 21 | #include <asm/machdep.h> |
21 | #include <asm/prom.h> | 22 | #include <asm/prom.h> |
@@ -63,9 +64,6 @@ define_machine(warp) { | |||
63 | }; | 64 | }; |
64 | 65 | ||
65 | 66 | ||
66 | static u32 post_info; | ||
67 | |||
68 | /* I am not sure this is the best place for this... */ | ||
69 | static int __init warp_post_info(void) | 67 | static int __init warp_post_info(void) |
70 | { | 68 | { |
71 | struct device_node *np; | 69 | struct device_node *np; |
@@ -87,10 +85,9 @@ static int __init warp_post_info(void) | |||
87 | 85 | ||
88 | iounmap(fpga); | 86 | iounmap(fpga); |
89 | 87 | ||
90 | if (post1 || post2) { | 88 | if (post1 || post2) |
91 | printk(KERN_INFO "Warp POST %08x %08x\n", post1, post2); | 89 | printk(KERN_INFO "Warp POST %08x %08x\n", post1, post2); |
92 | post_info = 1; | 90 | else |
93 | } else | ||
94 | printk(KERN_INFO "Warp POST OK\n"); | 91 | printk(KERN_INFO "Warp POST OK\n"); |
95 | 92 | ||
96 | return 0; | 93 | return 0; |
@@ -166,6 +163,9 @@ static irqreturn_t temp_isr(int irq, void *context) | |||
166 | value ^= 1; | 163 | value ^= 1; |
167 | mdelay(500); | 164 | mdelay(500); |
168 | } | 165 | } |
166 | |||
167 | /* Not reached */ | ||
168 | return IRQ_HANDLED; | ||
169 | } | 169 | } |
170 | 170 | ||
171 | static int pika_setup_leds(void) | 171 | static int pika_setup_leds(void) |
@@ -179,24 +179,19 @@ static int pika_setup_leds(void) | |||
179 | } | 179 | } |
180 | 180 | ||
181 | for_each_child_of_node(np, child) | 181 | for_each_child_of_node(np, child) |
182 | if (strcmp(child->name, "green") == 0) { | 182 | if (strcmp(child->name, "green") == 0) |
183 | green_led = of_get_gpio(child, 0); | 183 | green_led = of_get_gpio(child, 0); |
184 | /* Turn back on the green LED */ | 184 | else if (strcmp(child->name, "red") == 0) |
185 | gpio_set_value(green_led, 1); | ||
186 | } else if (strcmp(child->name, "red") == 0) { | ||
187 | red_led = of_get_gpio(child, 0); | 185 | red_led = of_get_gpio(child, 0); |
188 | /* Set based on post */ | ||
189 | gpio_set_value(red_led, post_info); | ||
190 | } | ||
191 | 186 | ||
192 | of_node_put(np); | 187 | of_node_put(np); |
193 | 188 | ||
194 | return 0; | 189 | return 0; |
195 | } | 190 | } |
196 | 191 | ||
197 | static void pika_setup_critical_temp(struct i2c_client *client) | 192 | static void pika_setup_critical_temp(struct device_node *np, |
193 | struct i2c_client *client) | ||
198 | { | 194 | { |
199 | struct device_node *np; | ||
200 | int irq, rc; | 195 | int irq, rc; |
201 | 196 | ||
202 | /* Do this before enabling critical temp interrupt since we | 197 | /* Do this before enabling critical temp interrupt since we |
@@ -208,14 +203,7 @@ static void pika_setup_critical_temp(struct i2c_client *client) | |||
208 | i2c_smbus_write_byte_data(client, 2, 65); /* Thigh */ | 203 | i2c_smbus_write_byte_data(client, 2, 65); /* Thigh */ |
209 | i2c_smbus_write_byte_data(client, 3, 0); /* Tlow */ | 204 | i2c_smbus_write_byte_data(client, 3, 0); /* Tlow */ |
210 | 205 | ||
211 | np = of_find_compatible_node(NULL, NULL, "adi,ad7414"); | ||
212 | if (np == NULL) { | ||
213 | printk(KERN_ERR __FILE__ ": Unable to find ad7414\n"); | ||
214 | return; | ||
215 | } | ||
216 | |||
217 | irq = irq_of_parse_and_map(np, 0); | 206 | irq = irq_of_parse_and_map(np, 0); |
218 | of_node_put(np); | ||
219 | if (irq == NO_IRQ) { | 207 | if (irq == NO_IRQ) { |
220 | printk(KERN_ERR __FILE__ ": Unable to get ad7414 irq\n"); | 208 | printk(KERN_ERR __FILE__ ": Unable to get ad7414 irq\n"); |
221 | return; | 209 | return; |
@@ -244,32 +232,24 @@ static inline void pika_dtm_check_fan(void __iomem *fpga) | |||
244 | 232 | ||
245 | static int pika_dtm_thread(void __iomem *fpga) | 233 | static int pika_dtm_thread(void __iomem *fpga) |
246 | { | 234 | { |
247 | struct i2c_adapter *adap; | 235 | struct device_node *np; |
248 | struct i2c_client *client; | 236 | struct i2c_client *client; |
249 | 237 | ||
250 | /* We loop in case either driver was compiled as a module and | 238 | np = of_find_compatible_node(NULL, NULL, "adi,ad7414"); |
251 | * has not been insmoded yet. | 239 | if (np == NULL) |
252 | */ | 240 | return -ENOENT; |
253 | while (!(adap = i2c_get_adapter(0))) { | ||
254 | set_current_state(TASK_INTERRUPTIBLE); | ||
255 | schedule_timeout(HZ); | ||
256 | } | ||
257 | |||
258 | while (1) { | ||
259 | list_for_each_entry(client, &adap->clients, list) | ||
260 | if (client->addr == 0x4a) | ||
261 | goto found_it; | ||
262 | 241 | ||
263 | set_current_state(TASK_INTERRUPTIBLE); | 242 | client = of_find_i2c_device_by_node(np); |
264 | schedule_timeout(HZ); | 243 | if (client == NULL) { |
244 | of_node_put(np); | ||
245 | return -ENOENT; | ||
265 | } | 246 | } |
266 | 247 | ||
267 | found_it: | 248 | pika_setup_critical_temp(np, client); |
268 | pika_setup_critical_temp(client); | ||
269 | 249 | ||
270 | i2c_put_adapter(adap); | 250 | of_node_put(np); |
271 | 251 | ||
272 | printk(KERN_INFO "PIKA DTM thread running.\n"); | 252 | printk(KERN_INFO "Warp DTM thread running.\n"); |
273 | 253 | ||
274 | while (!kthread_should_stop()) { | 254 | while (!kthread_should_stop()) { |
275 | int val; | 255 | int val; |
@@ -291,7 +271,6 @@ found_it: | |||
291 | return 0; | 271 | return 0; |
292 | } | 272 | } |
293 | 273 | ||
294 | |||
295 | static int __init pika_dtm_start(void) | 274 | static int __init pika_dtm_start(void) |
296 | { | 275 | { |
297 | struct task_struct *dtm_thread; | 276 | struct task_struct *dtm_thread; |
diff --git a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c index ddf0bdc0fc8b..7ee979f323d1 100644 --- a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c +++ b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c | |||
@@ -147,7 +147,7 @@ int __init pq2ads_pci_init_irq(void) | |||
147 | goto out; | 147 | goto out; |
148 | } | 148 | } |
149 | 149 | ||
150 | priv = alloc_bootmem(sizeof(struct pq2ads_pci_pic)); | 150 | priv = kzalloc(sizeof(*priv), GFP_KERNEL); |
151 | if (!priv) { | 151 | if (!priv) { |
152 | of_node_put(np); | 152 | of_node_put(np); |
153 | ret = -ENOMEM; | 153 | ret = -ENOMEM; |
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c index 77f90b356356..60ed9c067b1d 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c | |||
@@ -285,6 +285,7 @@ static struct of_device_id mpc85xx_ids[] = { | |||
285 | { .type = "qe", }, | 285 | { .type = "qe", }, |
286 | { .compatible = "fsl,qe", }, | 286 | { .compatible = "fsl,qe", }, |
287 | { .compatible = "gianfar", }, | 287 | { .compatible = "gianfar", }, |
288 | { .compatible = "fsl,rapidio-delta", }, | ||
288 | {}, | 289 | {}, |
289 | }; | 290 | }; |
290 | 291 | ||
diff --git a/arch/powerpc/platforms/85xx/smp.c b/arch/powerpc/platforms/85xx/smp.c index cc0b0db8a6f3..62c592ede641 100644 --- a/arch/powerpc/platforms/85xx/smp.c +++ b/arch/powerpc/platforms/85xx/smp.c | |||
@@ -52,20 +52,19 @@ smp_85xx_kick_cpu(int nr) | |||
52 | 52 | ||
53 | pr_debug("smp_85xx_kick_cpu: kick CPU #%d\n", nr); | 53 | pr_debug("smp_85xx_kick_cpu: kick CPU #%d\n", nr); |
54 | 54 | ||
55 | local_irq_save(flags); | ||
56 | |||
57 | np = of_get_cpu_node(nr, NULL); | 55 | np = of_get_cpu_node(nr, NULL); |
58 | cpu_rel_addr = of_get_property(np, "cpu-release-addr", NULL); | 56 | cpu_rel_addr = of_get_property(np, "cpu-release-addr", NULL); |
59 | 57 | ||
60 | if (cpu_rel_addr == NULL) { | 58 | if (cpu_rel_addr == NULL) { |
61 | printk(KERN_ERR "No cpu-release-addr for cpu %d\n", nr); | 59 | printk(KERN_ERR "No cpu-release-addr for cpu %d\n", nr); |
62 | local_irq_restore(flags); | ||
63 | return; | 60 | return; |
64 | } | 61 | } |
65 | 62 | ||
66 | /* Map the spin table */ | 63 | /* Map the spin table */ |
67 | bptr_vaddr = ioremap(*cpu_rel_addr, SIZE_BOOT_ENTRY); | 64 | bptr_vaddr = ioremap(*cpu_rel_addr, SIZE_BOOT_ENTRY); |
68 | 65 | ||
66 | local_irq_save(flags); | ||
67 | |||
69 | out_be32(bptr_vaddr + BOOT_ENTRY_PIR, nr); | 68 | out_be32(bptr_vaddr + BOOT_ENTRY_PIR, nr); |
70 | out_be32(bptr_vaddr + BOOT_ENTRY_ADDR_LOWER, __pa(__early_start)); | 69 | out_be32(bptr_vaddr + BOOT_ENTRY_ADDR_LOWER, __pa(__early_start)); |
71 | 70 | ||
@@ -73,10 +72,10 @@ smp_85xx_kick_cpu(int nr) | |||
73 | while ((__secondary_hold_acknowledge != nr) && (++n < 1000)) | 72 | while ((__secondary_hold_acknowledge != nr) && (++n < 1000)) |
74 | mdelay(1); | 73 | mdelay(1); |
75 | 74 | ||
76 | iounmap(bptr_vaddr); | ||
77 | |||
78 | local_irq_restore(flags); | 75 | local_irq_restore(flags); |
79 | 76 | ||
77 | iounmap(bptr_vaddr); | ||
78 | |||
80 | pr_debug("waited %d msecs for CPU #%d.\n", n, nr); | 79 | pr_debug("waited %d msecs for CPU #%d.\n", n, nr); |
81 | } | 80 | } |
82 | 81 | ||
diff --git a/arch/powerpc/platforms/85xx/socrates.c b/arch/powerpc/platforms/85xx/socrates.c index d0e8443b12c6..747d8fb3ab82 100644 --- a/arch/powerpc/platforms/85xx/socrates.c +++ b/arch/powerpc/platforms/85xx/socrates.c | |||
@@ -102,10 +102,11 @@ static struct of_device_id __initdata socrates_of_bus_ids[] = { | |||
102 | {}, | 102 | {}, |
103 | }; | 103 | }; |
104 | 104 | ||
105 | static void __init socrates_init(void) | 105 | static int __init socrates_publish_devices(void) |
106 | { | 106 | { |
107 | of_platform_bus_probe(NULL, socrates_of_bus_ids, NULL); | 107 | return of_platform_bus_probe(NULL, socrates_of_bus_ids, NULL); |
108 | } | 108 | } |
109 | machine_device_initcall(socrates, socrates_publish_devices); | ||
109 | 110 | ||
110 | /* | 111 | /* |
111 | * Called very early, device-tree isn't unflattened | 112 | * Called very early, device-tree isn't unflattened |
@@ -124,7 +125,6 @@ define_machine(socrates) { | |||
124 | .name = "Socrates", | 125 | .name = "Socrates", |
125 | .probe = socrates_probe, | 126 | .probe = socrates_probe, |
126 | .setup_arch = socrates_setup_arch, | 127 | .setup_arch = socrates_setup_arch, |
127 | .init = socrates_init, | ||
128 | .init_IRQ = socrates_pic_init, | 128 | .init_IRQ = socrates_pic_init, |
129 | .get_irq = mpic_get_irq, | 129 | .get_irq = mpic_get_irq, |
130 | .restart = fsl_rstcr_restart, | 130 | .restart = fsl_rstcr_restart, |
diff --git a/arch/powerpc/platforms/85xx/xes_mpc85xx.c b/arch/powerpc/platforms/85xx/xes_mpc85xx.c index ee01532786e4..1b426050a2f9 100644 --- a/arch/powerpc/platforms/85xx/xes_mpc85xx.c +++ b/arch/powerpc/platforms/85xx/xes_mpc85xx.c | |||
@@ -32,7 +32,6 @@ | |||
32 | 32 | ||
33 | #include <sysdev/fsl_soc.h> | 33 | #include <sysdev/fsl_soc.h> |
34 | #include <sysdev/fsl_pci.h> | 34 | #include <sysdev/fsl_pci.h> |
35 | #include <linux/of_platform.h> | ||
36 | 35 | ||
37 | /* A few bit definitions needed for fixups on some boards */ | 36 | /* A few bit definitions needed for fixups on some boards */ |
38 | #define MPC85xx_L2CTL_L2E 0x80000000 /* L2 enable */ | 37 | #define MPC85xx_L2CTL_L2E 0x80000000 /* L2 enable */ |
diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c index c71498dbf211..aca5741ddc67 100644 --- a/arch/powerpc/platforms/cell/axon_msi.c +++ b/arch/powerpc/platforms/cell/axon_msi.c | |||
@@ -85,7 +85,7 @@ static inline void axon_msi_debug_setup(struct device_node *dn, | |||
85 | 85 | ||
86 | static void msic_dcr_write(struct axon_msic *msic, unsigned int dcr_n, u32 val) | 86 | static void msic_dcr_write(struct axon_msic *msic, unsigned int dcr_n, u32 val) |
87 | { | 87 | { |
88 | pr_debug("axon_msi: dcr_write(0x%x, 0x%x)\n", val, dcr_n); | 88 | pr_devel("axon_msi: dcr_write(0x%x, 0x%x)\n", val, dcr_n); |
89 | 89 | ||
90 | dcr_write(msic->dcr_host, dcr_n, val); | 90 | dcr_write(msic->dcr_host, dcr_n, val); |
91 | } | 91 | } |
@@ -98,7 +98,7 @@ static void axon_msi_cascade(unsigned int irq, struct irq_desc *desc) | |||
98 | int retry = 0; | 98 | int retry = 0; |
99 | 99 | ||
100 | write_offset = dcr_read(msic->dcr_host, MSIC_WRITE_OFFSET_REG); | 100 | write_offset = dcr_read(msic->dcr_host, MSIC_WRITE_OFFSET_REG); |
101 | pr_debug("axon_msi: original write_offset 0x%x\n", write_offset); | 101 | pr_devel("axon_msi: original write_offset 0x%x\n", write_offset); |
102 | 102 | ||
103 | /* write_offset doesn't wrap properly, so we have to mask it */ | 103 | /* write_offset doesn't wrap properly, so we have to mask it */ |
104 | write_offset &= MSIC_FIFO_SIZE_MASK; | 104 | write_offset &= MSIC_FIFO_SIZE_MASK; |
@@ -108,7 +108,7 @@ static void axon_msi_cascade(unsigned int irq, struct irq_desc *desc) | |||
108 | msi = le32_to_cpu(msic->fifo_virt[idx]); | 108 | msi = le32_to_cpu(msic->fifo_virt[idx]); |
109 | msi &= 0xFFFF; | 109 | msi &= 0xFFFF; |
110 | 110 | ||
111 | pr_debug("axon_msi: woff %x roff %x msi %x\n", | 111 | pr_devel("axon_msi: woff %x roff %x msi %x\n", |
112 | write_offset, msic->read_offset, msi); | 112 | write_offset, msic->read_offset, msi); |
113 | 113 | ||
114 | if (msi < NR_IRQS && irq_map[msi].host == msic->irq_host) { | 114 | if (msi < NR_IRQS && irq_map[msi].host == msic->irq_host) { |
@@ -123,12 +123,12 @@ static void axon_msi_cascade(unsigned int irq, struct irq_desc *desc) | |||
123 | */ | 123 | */ |
124 | udelay(1); | 124 | udelay(1); |
125 | retry++; | 125 | retry++; |
126 | pr_debug("axon_msi: invalid irq 0x%x!\n", msi); | 126 | pr_devel("axon_msi: invalid irq 0x%x!\n", msi); |
127 | continue; | 127 | continue; |
128 | } | 128 | } |
129 | 129 | ||
130 | if (retry) { | 130 | if (retry) { |
131 | pr_debug("axon_msi: late irq 0x%x, retry %d\n", | 131 | pr_devel("axon_msi: late irq 0x%x, retry %d\n", |
132 | msi, retry); | 132 | msi, retry); |
133 | retry = 0; | 133 | retry = 0; |
134 | } | 134 | } |
@@ -332,7 +332,7 @@ static int axon_msi_shutdown(struct of_device *device) | |||
332 | struct axon_msic *msic = dev_get_drvdata(&device->dev); | 332 | struct axon_msic *msic = dev_get_drvdata(&device->dev); |
333 | u32 tmp; | 333 | u32 tmp; |
334 | 334 | ||
335 | pr_debug("axon_msi: disabling %s\n", | 335 | pr_devel("axon_msi: disabling %s\n", |
336 | msic->irq_host->of_node->full_name); | 336 | msic->irq_host->of_node->full_name); |
337 | tmp = dcr_read(msic->dcr_host, MSIC_CTRL_REG); | 337 | tmp = dcr_read(msic->dcr_host, MSIC_CTRL_REG); |
338 | tmp &= ~MSIC_CTRL_ENABLE & ~MSIC_CTRL_IRQ_ENABLE; | 338 | tmp &= ~MSIC_CTRL_ENABLE & ~MSIC_CTRL_IRQ_ENABLE; |
@@ -349,7 +349,7 @@ static int axon_msi_probe(struct of_device *device, | |||
349 | unsigned int virq; | 349 | unsigned int virq; |
350 | int dcr_base, dcr_len; | 350 | int dcr_base, dcr_len; |
351 | 351 | ||
352 | pr_debug("axon_msi: setting up dn %s\n", dn->full_name); | 352 | pr_devel("axon_msi: setting up dn %s\n", dn->full_name); |
353 | 353 | ||
354 | msic = kzalloc(sizeof(struct axon_msic), GFP_KERNEL); | 354 | msic = kzalloc(sizeof(struct axon_msic), GFP_KERNEL); |
355 | if (!msic) { | 355 | if (!msic) { |
@@ -403,7 +403,7 @@ static int axon_msi_probe(struct of_device *device, | |||
403 | 403 | ||
404 | set_irq_data(virq, msic); | 404 | set_irq_data(virq, msic); |
405 | set_irq_chained_handler(virq, axon_msi_cascade); | 405 | set_irq_chained_handler(virq, axon_msi_cascade); |
406 | pr_debug("axon_msi: irq 0x%x setup for axon_msi\n", virq); | 406 | pr_devel("axon_msi: irq 0x%x setup for axon_msi\n", virq); |
407 | 407 | ||
408 | /* Enable the MSIC hardware */ | 408 | /* Enable the MSIC hardware */ |
409 | msic_dcr_write(msic, MSIC_BASE_ADDR_HI_REG, msic->fifo_phys >> 32); | 409 | msic_dcr_write(msic, MSIC_BASE_ADDR_HI_REG, msic->fifo_phys >> 32); |
@@ -484,13 +484,13 @@ void axon_msi_debug_setup(struct device_node *dn, struct axon_msic *msic) | |||
484 | 484 | ||
485 | addr = of_translate_address(dn, of_get_property(dn, "reg", NULL)); | 485 | addr = of_translate_address(dn, of_get_property(dn, "reg", NULL)); |
486 | if (addr == OF_BAD_ADDR) { | 486 | if (addr == OF_BAD_ADDR) { |
487 | pr_debug("axon_msi: couldn't translate reg property\n"); | 487 | pr_devel("axon_msi: couldn't translate reg property\n"); |
488 | return; | 488 | return; |
489 | } | 489 | } |
490 | 490 | ||
491 | msic->trigger = ioremap(addr, 0x4); | 491 | msic->trigger = ioremap(addr, 0x4); |
492 | if (!msic->trigger) { | 492 | if (!msic->trigger) { |
493 | pr_debug("axon_msi: ioremap failed\n"); | 493 | pr_devel("axon_msi: ioremap failed\n"); |
494 | return; | 494 | return; |
495 | } | 495 | } |
496 | 496 | ||
@@ -498,7 +498,7 @@ void axon_msi_debug_setup(struct device_node *dn, struct axon_msic *msic) | |||
498 | 498 | ||
499 | if (!debugfs_create_file(name, 0600, powerpc_debugfs_root, | 499 | if (!debugfs_create_file(name, 0600, powerpc_debugfs_root, |
500 | msic, &fops_msic)) { | 500 | msic, &fops_msic)) { |
501 | pr_debug("axon_msi: debugfs_create_file failed!\n"); | 501 | pr_devel("axon_msi: debugfs_create_file failed!\n"); |
502 | return; | 502 | return; |
503 | } | 503 | } |
504 | } | 504 | } |
diff --git a/arch/powerpc/platforms/cell/smp.c b/arch/powerpc/platforms/cell/smp.c index 9046803c8276..bc97fada48c6 100644 --- a/arch/powerpc/platforms/cell/smp.c +++ b/arch/powerpc/platforms/cell/smp.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <asm/prom.h> | 36 | #include <asm/prom.h> |
37 | #include <asm/smp.h> | 37 | #include <asm/smp.h> |
38 | #include <asm/paca.h> | 38 | #include <asm/paca.h> |
39 | #include <asm/time.h> | ||
40 | #include <asm/machdep.h> | 39 | #include <asm/machdep.h> |
41 | #include <asm/cputable.h> | 40 | #include <asm/cputable.h> |
42 | #include <asm/firmware.h> | 41 | #include <asm/firmware.h> |
@@ -140,31 +139,6 @@ static void __devinit smp_cell_setup_cpu(int cpu) | |||
140 | mtspr(SPRN_DABRX, DABRX_KERNEL | DABRX_USER); | 139 | mtspr(SPRN_DABRX, DABRX_KERNEL | DABRX_USER); |
141 | } | 140 | } |
142 | 141 | ||
143 | static DEFINE_SPINLOCK(timebase_lock); | ||
144 | static unsigned long timebase = 0; | ||
145 | |||
146 | static void __devinit cell_give_timebase(void) | ||
147 | { | ||
148 | spin_lock(&timebase_lock); | ||
149 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); | ||
150 | timebase = get_tb(); | ||
151 | spin_unlock(&timebase_lock); | ||
152 | |||
153 | while (timebase) | ||
154 | barrier(); | ||
155 | rtas_call(rtas_token("thaw-time-base"), 0, 1, NULL); | ||
156 | } | ||
157 | |||
158 | static void __devinit cell_take_timebase(void) | ||
159 | { | ||
160 | while (!timebase) | ||
161 | barrier(); | ||
162 | spin_lock(&timebase_lock); | ||
163 | set_tb(timebase >> 32, timebase & 0xffffffff); | ||
164 | timebase = 0; | ||
165 | spin_unlock(&timebase_lock); | ||
166 | } | ||
167 | |||
168 | static void __devinit smp_cell_kick_cpu(int nr) | 142 | static void __devinit smp_cell_kick_cpu(int nr) |
169 | { | 143 | { |
170 | BUG_ON(nr < 0 || nr >= NR_CPUS); | 144 | BUG_ON(nr < 0 || nr >= NR_CPUS); |
@@ -224,8 +198,8 @@ void __init smp_init_cell(void) | |||
224 | 198 | ||
225 | /* Non-lpar has additional take/give timebase */ | 199 | /* Non-lpar has additional take/give timebase */ |
226 | if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) { | 200 | if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) { |
227 | smp_ops->give_timebase = cell_give_timebase; | 201 | smp_ops->give_timebase = rtas_give_timebase; |
228 | smp_ops->take_timebase = cell_take_timebase; | 202 | smp_ops->take_timebase = rtas_take_timebase; |
229 | } | 203 | } |
230 | 204 | ||
231 | DBG(" <- smp_init_cell()\n"); | 205 | DBG(" <- smp_init_cell()\n"); |
diff --git a/arch/powerpc/platforms/cell/spu_fault.c b/arch/powerpc/platforms/cell/spu_fault.c index 95d8dadf2d87..d06ba87f1a19 100644 --- a/arch/powerpc/platforms/cell/spu_fault.c +++ b/arch/powerpc/platforms/cell/spu_fault.c | |||
@@ -70,7 +70,7 @@ int spu_handle_mm_fault(struct mm_struct *mm, unsigned long ea, | |||
70 | } | 70 | } |
71 | 71 | ||
72 | ret = 0; | 72 | ret = 0; |
73 | *flt = handle_mm_fault(mm, vma, ea, is_write); | 73 | *flt = handle_mm_fault(mm, vma, ea, is_write ? FAULT_FLAG_WRITE : 0); |
74 | if (unlikely(*flt & VM_FAULT_ERROR)) { | 74 | if (unlikely(*flt & VM_FAULT_ERROR)) { |
75 | if (*flt & VM_FAULT_OOM) { | 75 | if (*flt & VM_FAULT_OOM) { |
76 | ret = -ENOMEM; | 76 | ret = -ENOMEM; |
diff --git a/arch/powerpc/platforms/chrp/smp.c b/arch/powerpc/platforms/chrp/smp.c index 10a4a4d063b6..02cafecc90e3 100644 --- a/arch/powerpc/platforms/chrp/smp.c +++ b/arch/powerpc/platforms/chrp/smp.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <asm/io.h> | 26 | #include <asm/io.h> |
27 | #include <asm/prom.h> | 27 | #include <asm/prom.h> |
28 | #include <asm/smp.h> | 28 | #include <asm/smp.h> |
29 | #include <asm/time.h> | ||
30 | #include <asm/machdep.h> | 29 | #include <asm/machdep.h> |
31 | #include <asm/mpic.h> | 30 | #include <asm/mpic.h> |
32 | #include <asm/rtas.h> | 31 | #include <asm/rtas.h> |
@@ -42,40 +41,12 @@ static void __devinit smp_chrp_setup_cpu(int cpu_nr) | |||
42 | mpic_setup_this_cpu(); | 41 | mpic_setup_this_cpu(); |
43 | } | 42 | } |
44 | 43 | ||
45 | static DEFINE_SPINLOCK(timebase_lock); | ||
46 | static unsigned int timebase_upper = 0, timebase_lower = 0; | ||
47 | |||
48 | void __devinit smp_chrp_give_timebase(void) | ||
49 | { | ||
50 | spin_lock(&timebase_lock); | ||
51 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); | ||
52 | timebase_upper = get_tbu(); | ||
53 | timebase_lower = get_tbl(); | ||
54 | spin_unlock(&timebase_lock); | ||
55 | |||
56 | while (timebase_upper || timebase_lower) | ||
57 | barrier(); | ||
58 | rtas_call(rtas_token("thaw-time-base"), 0, 1, NULL); | ||
59 | } | ||
60 | |||
61 | void __devinit smp_chrp_take_timebase(void) | ||
62 | { | ||
63 | while (!(timebase_upper || timebase_lower)) | ||
64 | barrier(); | ||
65 | spin_lock(&timebase_lock); | ||
66 | set_tb(timebase_upper, timebase_lower); | ||
67 | timebase_upper = 0; | ||
68 | timebase_lower = 0; | ||
69 | spin_unlock(&timebase_lock); | ||
70 | printk("CPU %i taken timebase\n", smp_processor_id()); | ||
71 | } | ||
72 | |||
73 | /* CHRP with openpic */ | 44 | /* CHRP with openpic */ |
74 | struct smp_ops_t chrp_smp_ops = { | 45 | struct smp_ops_t chrp_smp_ops = { |
75 | .message_pass = smp_mpic_message_pass, | 46 | .message_pass = smp_mpic_message_pass, |
76 | .probe = smp_mpic_probe, | 47 | .probe = smp_mpic_probe, |
77 | .kick_cpu = smp_chrp_kick_cpu, | 48 | .kick_cpu = smp_chrp_kick_cpu, |
78 | .setup_cpu = smp_chrp_setup_cpu, | 49 | .setup_cpu = smp_chrp_setup_cpu, |
79 | .give_timebase = smp_chrp_give_timebase, | 50 | .give_timebase = rtas_give_timebase, |
80 | .take_timebase = smp_chrp_take_timebase, | 51 | .take_timebase = rtas_take_timebase, |
81 | }; | 52 | }; |
diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c index 153051eb6d93..a4619347aa7e 100644 --- a/arch/powerpc/platforms/pasemi/setup.c +++ b/arch/powerpc/platforms/pasemi/setup.c | |||
@@ -71,20 +71,25 @@ static void pas_restart(char *cmd) | |||
71 | } | 71 | } |
72 | 72 | ||
73 | #ifdef CONFIG_SMP | 73 | #ifdef CONFIG_SMP |
74 | static DEFINE_SPINLOCK(timebase_lock); | 74 | static raw_spinlock_t timebase_lock; |
75 | static unsigned long timebase; | 75 | static unsigned long timebase; |
76 | 76 | ||
77 | static void __devinit pas_give_timebase(void) | 77 | static void __devinit pas_give_timebase(void) |
78 | { | 78 | { |
79 | spin_lock(&timebase_lock); | 79 | unsigned long flags; |
80 | |||
81 | local_irq_save(flags); | ||
82 | hard_irq_disable(); | ||
83 | __raw_spin_lock(&timebase_lock); | ||
80 | mtspr(SPRN_TBCTL, TBCTL_FREEZE); | 84 | mtspr(SPRN_TBCTL, TBCTL_FREEZE); |
81 | isync(); | 85 | isync(); |
82 | timebase = get_tb(); | 86 | timebase = get_tb(); |
83 | spin_unlock(&timebase_lock); | 87 | __raw_spin_unlock(&timebase_lock); |
84 | 88 | ||
85 | while (timebase) | 89 | while (timebase) |
86 | barrier(); | 90 | barrier(); |
87 | mtspr(SPRN_TBCTL, TBCTL_RESTART); | 91 | mtspr(SPRN_TBCTL, TBCTL_RESTART); |
92 | local_irq_restore(flags); | ||
88 | } | 93 | } |
89 | 94 | ||
90 | static void __devinit pas_take_timebase(void) | 95 | static void __devinit pas_take_timebase(void) |
@@ -92,10 +97,10 @@ static void __devinit pas_take_timebase(void) | |||
92 | while (!timebase) | 97 | while (!timebase) |
93 | smp_rmb(); | 98 | smp_rmb(); |
94 | 99 | ||
95 | spin_lock(&timebase_lock); | 100 | __raw_spin_lock(&timebase_lock); |
96 | set_tb(timebase >> 32, timebase & 0xffffffff); | 101 | set_tb(timebase >> 32, timebase & 0xffffffff); |
97 | timebase = 0; | 102 | timebase = 0; |
98 | spin_unlock(&timebase_lock); | 103 | __raw_spin_unlock(&timebase_lock); |
99 | } | 104 | } |
100 | 105 | ||
101 | struct smp_ops_t pas_smp_ops = { | 106 | struct smp_ops_t pas_smp_ops = { |
diff --git a/arch/powerpc/platforms/powermac/cpufreq_64.c b/arch/powerpc/platforms/powermac/cpufreq_64.c index 22ecfbe7183d..708c75133377 100644 --- a/arch/powerpc/platforms/powermac/cpufreq_64.c +++ b/arch/powerpc/platforms/powermac/cpufreq_64.c | |||
@@ -251,7 +251,7 @@ static void g5_pfunc_switch_volt(int speed_mode) | |||
251 | static struct pmf_function *pfunc_cpu_setfreq_high; | 251 | static struct pmf_function *pfunc_cpu_setfreq_high; |
252 | static struct pmf_function *pfunc_cpu_setfreq_low; | 252 | static struct pmf_function *pfunc_cpu_setfreq_low; |
253 | static struct pmf_function *pfunc_cpu_getfreq; | 253 | static struct pmf_function *pfunc_cpu_getfreq; |
254 | static struct pmf_function *pfunc_slewing_done;; | 254 | static struct pmf_function *pfunc_slewing_done; |
255 | 255 | ||
256 | static int g5_pfunc_switch_freq(int speed_mode) | 256 | static int g5_pfunc_switch_freq(int speed_mode) |
257 | { | 257 | { |
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c index dce736349107..d212006a5b3c 100644 --- a/arch/powerpc/platforms/powermac/pic.c +++ b/arch/powerpc/platforms/powermac/pic.c | |||
@@ -609,7 +609,7 @@ static int pmacpic_find_viaint(void) | |||
609 | np = of_find_node_by_name(NULL, "via-pmu"); | 609 | np = of_find_node_by_name(NULL, "via-pmu"); |
610 | if (np == NULL) | 610 | if (np == NULL) |
611 | goto not_found; | 611 | goto not_found; |
612 | viaint = irq_of_parse_and_map(np, 0);; | 612 | viaint = irq_of_parse_and_map(np, 0); |
613 | 613 | ||
614 | not_found: | 614 | not_found: |
615 | #endif /* CONFIG_ADB_PMU */ | 615 | #endif /* CONFIG_ADB_PMU */ |
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c index 86f69a4eb49b..c20522656367 100644 --- a/arch/powerpc/platforms/powermac/setup.c +++ b/arch/powerpc/platforms/powermac/setup.c | |||
@@ -103,11 +103,6 @@ unsigned long smu_cmdbuf_abs; | |||
103 | EXPORT_SYMBOL(smu_cmdbuf_abs); | 103 | EXPORT_SYMBOL(smu_cmdbuf_abs); |
104 | #endif | 104 | #endif |
105 | 105 | ||
106 | #ifdef CONFIG_SMP | ||
107 | extern struct smp_ops_t psurge_smp_ops; | ||
108 | extern struct smp_ops_t core99_smp_ops; | ||
109 | #endif /* CONFIG_SMP */ | ||
110 | |||
111 | static void pmac_show_cpuinfo(struct seq_file *m) | 106 | static void pmac_show_cpuinfo(struct seq_file *m) |
112 | { | 107 | { |
113 | struct device_node *np; | 108 | struct device_node *np; |
@@ -341,34 +336,6 @@ static void __init pmac_setup_arch(void) | |||
341 | ROOT_DEV = DEFAULT_ROOT_DEVICE; | 336 | ROOT_DEV = DEFAULT_ROOT_DEVICE; |
342 | #endif | 337 | #endif |
343 | 338 | ||
344 | #ifdef CONFIG_SMP | ||
345 | /* Check for Core99 */ | ||
346 | ic = of_find_node_by_name(NULL, "uni-n"); | ||
347 | if (!ic) | ||
348 | ic = of_find_node_by_name(NULL, "u3"); | ||
349 | if (!ic) | ||
350 | ic = of_find_node_by_name(NULL, "u4"); | ||
351 | if (ic) { | ||
352 | of_node_put(ic); | ||
353 | smp_ops = &core99_smp_ops; | ||
354 | } | ||
355 | #ifdef CONFIG_PPC32 | ||
356 | else { | ||
357 | /* | ||
358 | * We have to set bits in cpu_possible_map here since the | ||
359 | * secondary CPU(s) aren't in the device tree, and | ||
360 | * setup_per_cpu_areas only allocates per-cpu data for | ||
361 | * CPUs in the cpu_possible_map. | ||
362 | */ | ||
363 | int cpu; | ||
364 | |||
365 | for (cpu = 1; cpu < 4 && cpu < NR_CPUS; ++cpu) | ||
366 | cpu_set(cpu, cpu_possible_map); | ||
367 | smp_ops = &psurge_smp_ops; | ||
368 | } | ||
369 | #endif | ||
370 | #endif /* CONFIG_SMP */ | ||
371 | |||
372 | #ifdef CONFIG_ADB | 339 | #ifdef CONFIG_ADB |
373 | if (strstr(cmd_line, "adb_sync")) { | 340 | if (strstr(cmd_line, "adb_sync")) { |
374 | extern int __adb_probe_sync; | 341 | extern int __adb_probe_sync; |
@@ -512,6 +479,14 @@ static void __init pmac_init_early(void) | |||
512 | #ifdef CONFIG_PPC64 | 479 | #ifdef CONFIG_PPC64 |
513 | iommu_init_early_dart(); | 480 | iommu_init_early_dart(); |
514 | #endif | 481 | #endif |
482 | |||
483 | /* SMP Init has to be done early as we need to patch up | ||
484 | * cpu_possible_map before interrupt stacks are allocated | ||
485 | * or kaboom... | ||
486 | */ | ||
487 | #ifdef CONFIG_SMP | ||
488 | pmac_setup_smp(); | ||
489 | #endif | ||
515 | } | 490 | } |
516 | 491 | ||
517 | static int __init pmac_declare_of_platform_devices(void) | 492 | static int __init pmac_declare_of_platform_devices(void) |
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index cf1dbe758890..6d4da7b46b41 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -64,10 +64,11 @@ | |||
64 | extern void __secondary_start_pmac_0(void); | 64 | extern void __secondary_start_pmac_0(void); |
65 | extern int pmac_pfunc_base_install(void); | 65 | extern int pmac_pfunc_base_install(void); |
66 | 66 | ||
67 | #ifdef CONFIG_PPC32 | 67 | static void (*pmac_tb_freeze)(int freeze); |
68 | static u64 timebase; | ||
69 | static int tb_req; | ||
68 | 70 | ||
69 | /* Sync flag for HW tb sync */ | 71 | #ifdef CONFIG_PPC32 |
70 | static volatile int sec_tb_reset = 0; | ||
71 | 72 | ||
72 | /* | 73 | /* |
73 | * Powersurge (old powermac SMP) support. | 74 | * Powersurge (old powermac SMP) support. |
@@ -294,6 +295,9 @@ static int __init smp_psurge_probe(void) | |||
294 | psurge_quad_init(); | 295 | psurge_quad_init(); |
295 | /* All released cards using this HW design have 4 CPUs */ | 296 | /* All released cards using this HW design have 4 CPUs */ |
296 | ncpus = 4; | 297 | ncpus = 4; |
298 | /* No sure how timebase sync works on those, let's use SW */ | ||
299 | smp_ops->give_timebase = smp_generic_give_timebase; | ||
300 | smp_ops->take_timebase = smp_generic_take_timebase; | ||
297 | } else { | 301 | } else { |
298 | iounmap(quad_base); | 302 | iounmap(quad_base); |
299 | if ((in_8(hhead_base + HHEAD_CONFIG) & 0x02) == 0) { | 303 | if ((in_8(hhead_base + HHEAD_CONFIG) & 0x02) == 0) { |
@@ -308,18 +312,15 @@ static int __init smp_psurge_probe(void) | |||
308 | psurge_start = ioremap(PSURGE_START, 4); | 312 | psurge_start = ioremap(PSURGE_START, 4); |
309 | psurge_pri_intr = ioremap(PSURGE_PRI_INTR, 4); | 313 | psurge_pri_intr = ioremap(PSURGE_PRI_INTR, 4); |
310 | 314 | ||
311 | /* | 315 | /* This is necessary because OF doesn't know about the |
312 | * This is necessary because OF doesn't know about the | ||
313 | * secondary cpu(s), and thus there aren't nodes in the | 316 | * secondary cpu(s), and thus there aren't nodes in the |
314 | * device tree for them, and smp_setup_cpu_maps hasn't | 317 | * device tree for them, and smp_setup_cpu_maps hasn't |
315 | * set their bits in cpu_possible_map and cpu_present_map. | 318 | * set their bits in cpu_present_map. |
316 | */ | 319 | */ |
317 | if (ncpus > NR_CPUS) | 320 | if (ncpus > NR_CPUS) |
318 | ncpus = NR_CPUS; | 321 | ncpus = NR_CPUS; |
319 | for (i = 1; i < ncpus ; ++i) { | 322 | for (i = 1; i < ncpus ; ++i) |
320 | cpu_set(i, cpu_present_map); | 323 | cpu_set(i, cpu_present_map); |
321 | set_hard_smp_processor_id(i, i); | ||
322 | } | ||
323 | 324 | ||
324 | if (ppc_md.progress) ppc_md.progress("smp_psurge_probe - done", 0x352); | 325 | if (ppc_md.progress) ppc_md.progress("smp_psurge_probe - done", 0x352); |
325 | 326 | ||
@@ -329,8 +330,14 @@ static int __init smp_psurge_probe(void) | |||
329 | static void __init smp_psurge_kick_cpu(int nr) | 330 | static void __init smp_psurge_kick_cpu(int nr) |
330 | { | 331 | { |
331 | unsigned long start = __pa(__secondary_start_pmac_0) + nr * 8; | 332 | unsigned long start = __pa(__secondary_start_pmac_0) + nr * 8; |
332 | unsigned long a; | 333 | unsigned long a, flags; |
333 | int i; | 334 | int i, j; |
335 | |||
336 | /* Defining this here is evil ... but I prefer hiding that | ||
337 | * crap to avoid giving people ideas that they can do the | ||
338 | * same. | ||
339 | */ | ||
340 | extern volatile unsigned int cpu_callin_map[NR_CPUS]; | ||
334 | 341 | ||
335 | /* may need to flush here if secondary bats aren't setup */ | 342 | /* may need to flush here if secondary bats aren't setup */ |
336 | for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32) | 343 | for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32) |
@@ -339,47 +346,52 @@ static void __init smp_psurge_kick_cpu(int nr) | |||
339 | 346 | ||
340 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu", 0x353); | 347 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu", 0x353); |
341 | 348 | ||
349 | /* This is going to freeze the timeebase, we disable interrupts */ | ||
350 | local_irq_save(flags); | ||
351 | |||
342 | out_be32(psurge_start, start); | 352 | out_be32(psurge_start, start); |
343 | mb(); | 353 | mb(); |
344 | 354 | ||
345 | psurge_set_ipi(nr); | 355 | psurge_set_ipi(nr); |
356 | |||
346 | /* | 357 | /* |
347 | * We can't use udelay here because the timebase is now frozen. | 358 | * We can't use udelay here because the timebase is now frozen. |
348 | */ | 359 | */ |
349 | for (i = 0; i < 2000; ++i) | 360 | for (i = 0; i < 2000; ++i) |
350 | barrier(); | 361 | asm volatile("nop" : : : "memory"); |
351 | psurge_clr_ipi(nr); | 362 | psurge_clr_ipi(nr); |
352 | 363 | ||
353 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu - done", 0x354); | 364 | /* |
354 | } | 365 | * Also, because the timebase is frozen, we must not return to the |
355 | 366 | * caller which will try to do udelay's etc... Instead, we wait -here- | |
356 | /* | 367 | * for the CPU to callin. |
357 | * With the dual-cpu powersurge board, the decrementers and timebases | 368 | */ |
358 | * of both cpus are frozen after the secondary cpu is started up, | 369 | for (i = 0; i < 100000 && !cpu_callin_map[nr]; ++i) { |
359 | * until we give the secondary cpu another interrupt. This routine | 370 | for (j = 1; j < 10000; j++) |
360 | * uses this to get the timebases synchronized. | 371 | asm volatile("nop" : : : "memory"); |
361 | * -- paulus. | 372 | asm volatile("sync" : : : "memory"); |
362 | */ | 373 | } |
363 | static void __init psurge_dual_sync_tb(int cpu_nr) | 374 | if (!cpu_callin_map[nr]) |
364 | { | 375 | goto stuck; |
365 | int t; | 376 | |
366 | 377 | /* And we do the TB sync here too for standard dual CPU cards */ | |
367 | set_dec(tb_ticks_per_jiffy); | 378 | if (psurge_type == PSURGE_DUAL) { |
368 | /* XXX fixme */ | 379 | while(!tb_req) |
369 | set_tb(0, 0); | 380 | barrier(); |
370 | 381 | tb_req = 0; | |
371 | if (cpu_nr > 0) { | 382 | mb(); |
383 | timebase = get_tb(); | ||
384 | mb(); | ||
385 | while (timebase) | ||
386 | barrier(); | ||
372 | mb(); | 387 | mb(); |
373 | sec_tb_reset = 1; | ||
374 | return; | ||
375 | } | 388 | } |
389 | stuck: | ||
390 | /* now interrupt the secondary, restarting both TBs */ | ||
391 | if (psurge_type == PSURGE_DUAL) | ||
392 | psurge_set_ipi(1); | ||
376 | 393 | ||
377 | /* wait for the secondary to have reset its TB before proceeding */ | 394 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu - done", 0x354); |
378 | for (t = 10000000; t > 0 && !sec_tb_reset; --t) | ||
379 | ; | ||
380 | |||
381 | /* now interrupt the secondary, starting both TBs */ | ||
382 | psurge_set_ipi(1); | ||
383 | } | 395 | } |
384 | 396 | ||
385 | static struct irqaction psurge_irqaction = { | 397 | static struct irqaction psurge_irqaction = { |
@@ -390,36 +402,35 @@ static struct irqaction psurge_irqaction = { | |||
390 | 402 | ||
391 | static void __init smp_psurge_setup_cpu(int cpu_nr) | 403 | static void __init smp_psurge_setup_cpu(int cpu_nr) |
392 | { | 404 | { |
405 | if (cpu_nr != 0) | ||
406 | return; | ||
393 | 407 | ||
394 | if (cpu_nr == 0) { | 408 | /* reset the entry point so if we get another intr we won't |
395 | /* If we failed to start the second CPU, we should still | 409 | * try to startup again */ |
396 | * send it an IPI to start the timebase & DEC or we might | 410 | out_be32(psurge_start, 0x100); |
397 | * have them stuck. | 411 | if (setup_irq(30, &psurge_irqaction)) |
398 | */ | 412 | printk(KERN_ERR "Couldn't get primary IPI interrupt"); |
399 | if (num_online_cpus() < 2) { | ||
400 | if (psurge_type == PSURGE_DUAL) | ||
401 | psurge_set_ipi(1); | ||
402 | return; | ||
403 | } | ||
404 | /* reset the entry point so if we get another intr we won't | ||
405 | * try to startup again */ | ||
406 | out_be32(psurge_start, 0x100); | ||
407 | if (setup_irq(30, &psurge_irqaction)) | ||
408 | printk(KERN_ERR "Couldn't get primary IPI interrupt"); | ||
409 | } | ||
410 | |||
411 | if (psurge_type == PSURGE_DUAL) | ||
412 | psurge_dual_sync_tb(cpu_nr); | ||
413 | } | 413 | } |
414 | 414 | ||
415 | void __init smp_psurge_take_timebase(void) | 415 | void __init smp_psurge_take_timebase(void) |
416 | { | 416 | { |
417 | /* Dummy implementation */ | 417 | if (psurge_type != PSURGE_DUAL) |
418 | return; | ||
419 | |||
420 | tb_req = 1; | ||
421 | mb(); | ||
422 | while (!timebase) | ||
423 | barrier(); | ||
424 | mb(); | ||
425 | set_tb(timebase >> 32, timebase & 0xffffffff); | ||
426 | timebase = 0; | ||
427 | mb(); | ||
428 | set_dec(tb_ticks_per_jiffy/2); | ||
418 | } | 429 | } |
419 | 430 | ||
420 | void __init smp_psurge_give_timebase(void) | 431 | void __init smp_psurge_give_timebase(void) |
421 | { | 432 | { |
422 | /* Dummy implementation */ | 433 | /* Nothing to do here */ |
423 | } | 434 | } |
424 | 435 | ||
425 | /* PowerSurge-style Macs */ | 436 | /* PowerSurge-style Macs */ |
@@ -437,9 +448,6 @@ struct smp_ops_t psurge_smp_ops = { | |||
437 | * Core 99 and later support | 448 | * Core 99 and later support |
438 | */ | 449 | */ |
439 | 450 | ||
440 | static void (*pmac_tb_freeze)(int freeze); | ||
441 | static u64 timebase; | ||
442 | static int tb_req; | ||
443 | 451 | ||
444 | static void smp_core99_give_timebase(void) | 452 | static void smp_core99_give_timebase(void) |
445 | { | 453 | { |
@@ -478,7 +486,6 @@ static void __devinit smp_core99_take_timebase(void) | |||
478 | set_tb(timebase >> 32, timebase & 0xffffffff); | 486 | set_tb(timebase >> 32, timebase & 0xffffffff); |
479 | timebase = 0; | 487 | timebase = 0; |
480 | mb(); | 488 | mb(); |
481 | set_dec(tb_ticks_per_jiffy/2); | ||
482 | 489 | ||
483 | local_irq_restore(flags); | 490 | local_irq_restore(flags); |
484 | } | 491 | } |
@@ -920,3 +927,34 @@ struct smp_ops_t core99_smp_ops = { | |||
920 | # endif | 927 | # endif |
921 | #endif | 928 | #endif |
922 | }; | 929 | }; |
930 | |||
931 | void __init pmac_setup_smp(void) | ||
932 | { | ||
933 | struct device_node *np; | ||
934 | |||
935 | /* Check for Core99 */ | ||
936 | np = of_find_node_by_name(NULL, "uni-n"); | ||
937 | if (!np) | ||
938 | np = of_find_node_by_name(NULL, "u3"); | ||
939 | if (!np) | ||
940 | np = of_find_node_by_name(NULL, "u4"); | ||
941 | if (np) { | ||
942 | of_node_put(np); | ||
943 | smp_ops = &core99_smp_ops; | ||
944 | } | ||
945 | #ifdef CONFIG_PPC32 | ||
946 | else { | ||
947 | /* We have to set bits in cpu_possible_map here since the | ||
948 | * secondary CPU(s) aren't in the device tree. Various | ||
949 | * things won't be initialized for CPUs not in the possible | ||
950 | * map, so we really need to fix it up here. | ||
951 | */ | ||
952 | int cpu; | ||
953 | |||
954 | for (cpu = 1; cpu < 4 && cpu < NR_CPUS; ++cpu) | ||
955 | cpu_set(cpu, cpu_possible_map); | ||
956 | smp_ops = &psurge_smp_ops; | ||
957 | } | ||
958 | #endif /* CONFIG_PPC32 */ | ||
959 | } | ||
960 | |||
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c index 9fead0faf38b..3f763c5284ac 100644 --- a/arch/powerpc/platforms/ps3/system-bus.c +++ b/arch/powerpc/platforms/ps3/system-bus.c | |||
@@ -284,7 +284,6 @@ static int ps3_sb_free_mmio_region(struct ps3_mmio_region *r) | |||
284 | int result; | 284 | int result; |
285 | 285 | ||
286 | dump_mmio_region(r); | 286 | dump_mmio_region(r); |
287 | ; | ||
288 | result = lv1_unmap_device_mmio_region(r->dev->bus_id, r->dev->dev_id, | 287 | result = lv1_unmap_device_mmio_region(r->dev->bus_id, r->dev->dev_id, |
289 | r->lpar_addr); | 288 | r->lpar_addr); |
290 | 289 | ||
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c index 9a2a6e32f00f..0e8db6771252 100644 --- a/arch/powerpc/platforms/pseries/eeh_driver.c +++ b/arch/powerpc/platforms/pseries/eeh_driver.c | |||
@@ -122,7 +122,7 @@ static void eeh_enable_irq(struct pci_dev *dev) | |||
122 | * passed back in "userdata". | 122 | * passed back in "userdata". |
123 | */ | 123 | */ |
124 | 124 | ||
125 | static void eeh_report_error(struct pci_dev *dev, void *userdata) | 125 | static int eeh_report_error(struct pci_dev *dev, void *userdata) |
126 | { | 126 | { |
127 | enum pci_ers_result rc, *res = userdata; | 127 | enum pci_ers_result rc, *res = userdata; |
128 | struct pci_driver *driver = dev->driver; | 128 | struct pci_driver *driver = dev->driver; |
@@ -130,19 +130,21 @@ static void eeh_report_error(struct pci_dev *dev, void *userdata) | |||
130 | dev->error_state = pci_channel_io_frozen; | 130 | dev->error_state = pci_channel_io_frozen; |
131 | 131 | ||
132 | if (!driver) | 132 | if (!driver) |
133 | return; | 133 | return 0; |
134 | 134 | ||
135 | eeh_disable_irq(dev); | 135 | eeh_disable_irq(dev); |
136 | 136 | ||
137 | if (!driver->err_handler || | 137 | if (!driver->err_handler || |
138 | !driver->err_handler->error_detected) | 138 | !driver->err_handler->error_detected) |
139 | return; | 139 | return 0; |
140 | 140 | ||
141 | rc = driver->err_handler->error_detected (dev, pci_channel_io_frozen); | 141 | rc = driver->err_handler->error_detected (dev, pci_channel_io_frozen); |
142 | 142 | ||
143 | /* A driver that needs a reset trumps all others */ | 143 | /* A driver that needs a reset trumps all others */ |
144 | if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; | 144 | if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; |
145 | if (*res == PCI_ERS_RESULT_NONE) *res = rc; | 145 | if (*res == PCI_ERS_RESULT_NONE) *res = rc; |
146 | |||
147 | return 0; | ||
146 | } | 148 | } |
147 | 149 | ||
148 | /** | 150 | /** |
@@ -153,7 +155,7 @@ static void eeh_report_error(struct pci_dev *dev, void *userdata) | |||
153 | * Cumulative response passed back in "userdata". | 155 | * Cumulative response passed back in "userdata". |
154 | */ | 156 | */ |
155 | 157 | ||
156 | static void eeh_report_mmio_enabled(struct pci_dev *dev, void *userdata) | 158 | static int eeh_report_mmio_enabled(struct pci_dev *dev, void *userdata) |
157 | { | 159 | { |
158 | enum pci_ers_result rc, *res = userdata; | 160 | enum pci_ers_result rc, *res = userdata; |
159 | struct pci_driver *driver = dev->driver; | 161 | struct pci_driver *driver = dev->driver; |
@@ -161,26 +163,28 @@ static void eeh_report_mmio_enabled(struct pci_dev *dev, void *userdata) | |||
161 | if (!driver || | 163 | if (!driver || |
162 | !driver->err_handler || | 164 | !driver->err_handler || |
163 | !driver->err_handler->mmio_enabled) | 165 | !driver->err_handler->mmio_enabled) |
164 | return; | 166 | return 0; |
165 | 167 | ||
166 | rc = driver->err_handler->mmio_enabled (dev); | 168 | rc = driver->err_handler->mmio_enabled (dev); |
167 | 169 | ||
168 | /* A driver that needs a reset trumps all others */ | 170 | /* A driver that needs a reset trumps all others */ |
169 | if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; | 171 | if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; |
170 | if (*res == PCI_ERS_RESULT_NONE) *res = rc; | 172 | if (*res == PCI_ERS_RESULT_NONE) *res = rc; |
173 | |||
174 | return 0; | ||
171 | } | 175 | } |
172 | 176 | ||
173 | /** | 177 | /** |
174 | * eeh_report_reset - tell device that slot has been reset | 178 | * eeh_report_reset - tell device that slot has been reset |
175 | */ | 179 | */ |
176 | 180 | ||
177 | static void eeh_report_reset(struct pci_dev *dev, void *userdata) | 181 | static int eeh_report_reset(struct pci_dev *dev, void *userdata) |
178 | { | 182 | { |
179 | enum pci_ers_result rc, *res = userdata; | 183 | enum pci_ers_result rc, *res = userdata; |
180 | struct pci_driver *driver = dev->driver; | 184 | struct pci_driver *driver = dev->driver; |
181 | 185 | ||
182 | if (!driver) | 186 | if (!driver) |
183 | return; | 187 | return 0; |
184 | 188 | ||
185 | dev->error_state = pci_channel_io_normal; | 189 | dev->error_state = pci_channel_io_normal; |
186 | 190 | ||
@@ -188,35 +192,39 @@ static void eeh_report_reset(struct pci_dev *dev, void *userdata) | |||
188 | 192 | ||
189 | if (!driver->err_handler || | 193 | if (!driver->err_handler || |
190 | !driver->err_handler->slot_reset) | 194 | !driver->err_handler->slot_reset) |
191 | return; | 195 | return 0; |
192 | 196 | ||
193 | rc = driver->err_handler->slot_reset(dev); | 197 | rc = driver->err_handler->slot_reset(dev); |
194 | if ((*res == PCI_ERS_RESULT_NONE) || | 198 | if ((*res == PCI_ERS_RESULT_NONE) || |
195 | (*res == PCI_ERS_RESULT_RECOVERED)) *res = rc; | 199 | (*res == PCI_ERS_RESULT_RECOVERED)) *res = rc; |
196 | if (*res == PCI_ERS_RESULT_DISCONNECT && | 200 | if (*res == PCI_ERS_RESULT_DISCONNECT && |
197 | rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; | 201 | rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; |
202 | |||
203 | return 0; | ||
198 | } | 204 | } |
199 | 205 | ||
200 | /** | 206 | /** |
201 | * eeh_report_resume - tell device to resume normal operations | 207 | * eeh_report_resume - tell device to resume normal operations |
202 | */ | 208 | */ |
203 | 209 | ||
204 | static void eeh_report_resume(struct pci_dev *dev, void *userdata) | 210 | static int eeh_report_resume(struct pci_dev *dev, void *userdata) |
205 | { | 211 | { |
206 | struct pci_driver *driver = dev->driver; | 212 | struct pci_driver *driver = dev->driver; |
207 | 213 | ||
208 | dev->error_state = pci_channel_io_normal; | 214 | dev->error_state = pci_channel_io_normal; |
209 | 215 | ||
210 | if (!driver) | 216 | if (!driver) |
211 | return; | 217 | return 0; |
212 | 218 | ||
213 | eeh_enable_irq(dev); | 219 | eeh_enable_irq(dev); |
214 | 220 | ||
215 | if (!driver->err_handler || | 221 | if (!driver->err_handler || |
216 | !driver->err_handler->resume) | 222 | !driver->err_handler->resume) |
217 | return; | 223 | return 0; |
218 | 224 | ||
219 | driver->err_handler->resume(dev); | 225 | driver->err_handler->resume(dev); |
226 | |||
227 | return 0; | ||
220 | } | 228 | } |
221 | 229 | ||
222 | /** | 230 | /** |
@@ -226,22 +234,24 @@ static void eeh_report_resume(struct pci_dev *dev, void *userdata) | |||
226 | * dead, and that no further recovery attempts will be made on it. | 234 | * dead, and that no further recovery attempts will be made on it. |
227 | */ | 235 | */ |
228 | 236 | ||
229 | static void eeh_report_failure(struct pci_dev *dev, void *userdata) | 237 | static int eeh_report_failure(struct pci_dev *dev, void *userdata) |
230 | { | 238 | { |
231 | struct pci_driver *driver = dev->driver; | 239 | struct pci_driver *driver = dev->driver; |
232 | 240 | ||
233 | dev->error_state = pci_channel_io_perm_failure; | 241 | dev->error_state = pci_channel_io_perm_failure; |
234 | 242 | ||
235 | if (!driver) | 243 | if (!driver) |
236 | return; | 244 | return 0; |
237 | 245 | ||
238 | eeh_disable_irq(dev); | 246 | eeh_disable_irq(dev); |
239 | 247 | ||
240 | if (!driver->err_handler || | 248 | if (!driver->err_handler || |
241 | !driver->err_handler->error_detected) | 249 | !driver->err_handler->error_detected) |
242 | return; | 250 | return 0; |
243 | 251 | ||
244 | driver->err_handler->error_detected(dev, pci_channel_io_perm_failure); | 252 | driver->err_handler->error_detected(dev, pci_channel_io_perm_failure); |
253 | |||
254 | return 0; | ||
245 | } | 255 | } |
246 | 256 | ||
247 | /* ------------------------------------------------------- */ | 257 | /* ------------------------------------------------------- */ |
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index e3139fa5e556..903eb9eec687 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
@@ -286,7 +286,7 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
286 | unsigned long hpte_v, hpte_r; | 286 | unsigned long hpte_v, hpte_r; |
287 | 287 | ||
288 | if (!(vflags & HPTE_V_BOLTED)) | 288 | if (!(vflags & HPTE_V_BOLTED)) |
289 | pr_debug("hpte_insert(group=%lx, va=%016lx, pa=%016lx, " | 289 | pr_devel("hpte_insert(group=%lx, va=%016lx, pa=%016lx, " |
290 | "rflags=%lx, vflags=%lx, psize=%d)\n", | 290 | "rflags=%lx, vflags=%lx, psize=%d)\n", |
291 | hpte_group, va, pa, rflags, vflags, psize); | 291 | hpte_group, va, pa, rflags, vflags, psize); |
292 | 292 | ||
@@ -294,7 +294,7 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
294 | hpte_r = hpte_encode_r(pa, psize) | rflags; | 294 | hpte_r = hpte_encode_r(pa, psize) | rflags; |
295 | 295 | ||
296 | if (!(vflags & HPTE_V_BOLTED)) | 296 | if (!(vflags & HPTE_V_BOLTED)) |
297 | pr_debug(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); | 297 | pr_devel(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); |
298 | 298 | ||
299 | /* Now fill in the actual HPTE */ | 299 | /* Now fill in the actual HPTE */ |
300 | /* Set CEC cookie to 0 */ | 300 | /* Set CEC cookie to 0 */ |
@@ -311,7 +311,7 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
311 | lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot); | 311 | lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot); |
312 | if (unlikely(lpar_rc == H_PTEG_FULL)) { | 312 | if (unlikely(lpar_rc == H_PTEG_FULL)) { |
313 | if (!(vflags & HPTE_V_BOLTED)) | 313 | if (!(vflags & HPTE_V_BOLTED)) |
314 | pr_debug(" full\n"); | 314 | pr_devel(" full\n"); |
315 | return -1; | 315 | return -1; |
316 | } | 316 | } |
317 | 317 | ||
@@ -322,11 +322,11 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
322 | */ | 322 | */ |
323 | if (unlikely(lpar_rc != H_SUCCESS)) { | 323 | if (unlikely(lpar_rc != H_SUCCESS)) { |
324 | if (!(vflags & HPTE_V_BOLTED)) | 324 | if (!(vflags & HPTE_V_BOLTED)) |
325 | pr_debug(" lpar err %lu\n", lpar_rc); | 325 | pr_devel(" lpar err %lu\n", lpar_rc); |
326 | return -2; | 326 | return -2; |
327 | } | 327 | } |
328 | if (!(vflags & HPTE_V_BOLTED)) | 328 | if (!(vflags & HPTE_V_BOLTED)) |
329 | pr_debug(" -> slot: %lu\n", slot & 7); | 329 | pr_devel(" -> slot: %lu\n", slot & 7); |
330 | 330 | ||
331 | /* Because of iSeries, we have to pass down the secondary | 331 | /* Because of iSeries, we have to pass down the secondary |
332 | * bucket bit here as well | 332 | * bucket bit here as well |
@@ -418,17 +418,17 @@ static long pSeries_lpar_hpte_updatepp(unsigned long slot, | |||
418 | 418 | ||
419 | want_v = hpte_encode_avpn(va, psize, ssize); | 419 | want_v = hpte_encode_avpn(va, psize, ssize); |
420 | 420 | ||
421 | pr_debug(" update: avpnv=%016lx, hash=%016lx, f=%lx, psize: %d ...", | 421 | pr_devel(" update: avpnv=%016lx, hash=%016lx, f=%lx, psize: %d ...", |
422 | want_v, slot, flags, psize); | 422 | want_v, slot, flags, psize); |
423 | 423 | ||
424 | lpar_rc = plpar_pte_protect(flags, slot, want_v); | 424 | lpar_rc = plpar_pte_protect(flags, slot, want_v); |
425 | 425 | ||
426 | if (lpar_rc == H_NOT_FOUND) { | 426 | if (lpar_rc == H_NOT_FOUND) { |
427 | pr_debug("not found !\n"); | 427 | pr_devel("not found !\n"); |
428 | return -1; | 428 | return -1; |
429 | } | 429 | } |
430 | 430 | ||
431 | pr_debug("ok\n"); | 431 | pr_devel("ok\n"); |
432 | 432 | ||
433 | BUG_ON(lpar_rc != H_SUCCESS); | 433 | BUG_ON(lpar_rc != H_SUCCESS); |
434 | 434 | ||
@@ -503,7 +503,7 @@ static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va, | |||
503 | unsigned long lpar_rc; | 503 | unsigned long lpar_rc; |
504 | unsigned long dummy1, dummy2; | 504 | unsigned long dummy1, dummy2; |
505 | 505 | ||
506 | pr_debug(" inval : slot=%lx, va=%016lx, psize: %d, local: %d\n", | 506 | pr_devel(" inval : slot=%lx, va=%016lx, psize: %d, local: %d\n", |
507 | slot, va, psize, local); | 507 | slot, va, psize, local); |
508 | 508 | ||
509 | want_v = hpte_encode_avpn(va, psize, ssize); | 509 | want_v = hpte_encode_avpn(va, psize, ssize); |
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c index 1a231c389ba0..1f8f6cfb94f7 100644 --- a/arch/powerpc/platforms/pseries/smp.c +++ b/arch/powerpc/platforms/pseries/smp.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <asm/prom.h> | 35 | #include <asm/prom.h> |
36 | #include <asm/smp.h> | 36 | #include <asm/smp.h> |
37 | #include <asm/paca.h> | 37 | #include <asm/paca.h> |
38 | #include <asm/time.h> | ||
39 | #include <asm/machdep.h> | 38 | #include <asm/machdep.h> |
40 | #include <asm/cputable.h> | 39 | #include <asm/cputable.h> |
41 | #include <asm/firmware.h> | 40 | #include <asm/firmware.h> |
@@ -118,31 +117,6 @@ static void __devinit smp_xics_setup_cpu(int cpu) | |||
118 | } | 117 | } |
119 | #endif /* CONFIG_XICS */ | 118 | #endif /* CONFIG_XICS */ |
120 | 119 | ||
121 | static DEFINE_SPINLOCK(timebase_lock); | ||
122 | static unsigned long timebase = 0; | ||
123 | |||
124 | static void __devinit pSeries_give_timebase(void) | ||
125 | { | ||
126 | spin_lock(&timebase_lock); | ||
127 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); | ||
128 | timebase = get_tb(); | ||
129 | spin_unlock(&timebase_lock); | ||
130 | |||
131 | while (timebase) | ||
132 | barrier(); | ||
133 | rtas_call(rtas_token("thaw-time-base"), 0, 1, NULL); | ||
134 | } | ||
135 | |||
136 | static void __devinit pSeries_take_timebase(void) | ||
137 | { | ||
138 | while (!timebase) | ||
139 | barrier(); | ||
140 | spin_lock(&timebase_lock); | ||
141 | set_tb(timebase >> 32, timebase & 0xffffffff); | ||
142 | timebase = 0; | ||
143 | spin_unlock(&timebase_lock); | ||
144 | } | ||
145 | |||
146 | static void __devinit smp_pSeries_kick_cpu(int nr) | 120 | static void __devinit smp_pSeries_kick_cpu(int nr) |
147 | { | 121 | { |
148 | BUG_ON(nr < 0 || nr >= NR_CPUS); | 122 | BUG_ON(nr < 0 || nr >= NR_CPUS); |
@@ -209,8 +183,8 @@ static void __init smp_init_pseries(void) | |||
209 | 183 | ||
210 | /* Non-lpar has additional take/give timebase */ | 184 | /* Non-lpar has additional take/give timebase */ |
211 | if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) { | 185 | if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) { |
212 | smp_ops->give_timebase = pSeries_give_timebase; | 186 | smp_ops->give_timebase = rtas_give_timebase; |
213 | smp_ops->take_timebase = pSeries_take_timebase; | 187 | smp_ops->take_timebase = rtas_take_timebase; |
214 | } | 188 | } |
215 | 189 | ||
216 | pr_debug(" <- smp_init_pSeries()\n"); | 190 | pr_debug(" <- smp_init_pSeries()\n"); |
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index be3581a8c294..419f8a637ffe 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
@@ -190,10 +190,10 @@ static void xics_unmask_irq(unsigned int virq) | |||
190 | int call_status; | 190 | int call_status; |
191 | int server; | 191 | int server; |
192 | 192 | ||
193 | pr_debug("xics: unmask virq %d\n", virq); | 193 | pr_devel("xics: unmask virq %d\n", virq); |
194 | 194 | ||
195 | irq = (unsigned int)irq_map[virq].hwirq; | 195 | irq = (unsigned int)irq_map[virq].hwirq; |
196 | pr_debug(" -> map to hwirq 0x%x\n", irq); | 196 | pr_devel(" -> map to hwirq 0x%x\n", irq); |
197 | if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS) | 197 | if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS) |
198 | return; | 198 | return; |
199 | 199 | ||
@@ -252,7 +252,7 @@ static void xics_mask_irq(unsigned int virq) | |||
252 | { | 252 | { |
253 | unsigned int irq; | 253 | unsigned int irq; |
254 | 254 | ||
255 | pr_debug("xics: mask virq %d\n", virq); | 255 | pr_devel("xics: mask virq %d\n", virq); |
256 | 256 | ||
257 | irq = (unsigned int)irq_map[virq].hwirq; | 257 | irq = (unsigned int)irq_map[virq].hwirq; |
258 | if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS) | 258 | if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS) |
@@ -414,7 +414,7 @@ static int xics_host_match(struct irq_host *h, struct device_node *node) | |||
414 | static int xics_host_map(struct irq_host *h, unsigned int virq, | 414 | static int xics_host_map(struct irq_host *h, unsigned int virq, |
415 | irq_hw_number_t hw) | 415 | irq_hw_number_t hw) |
416 | { | 416 | { |
417 | pr_debug("xics: map virq %d, hwirq 0x%lx\n", virq, hw); | 417 | pr_devel("xics: map virq %d, hwirq 0x%lx\n", virq, hw); |
418 | 418 | ||
419 | /* Insert the interrupt mapping into the radix tree for fast lookup */ | 419 | /* Insert the interrupt mapping into the radix tree for fast lookup */ |
420 | irq_radix_revmap_insert(xics_host, virq, hw); | 420 | irq_radix_revmap_insert(xics_host, virq, hw); |
diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c index 39db9d1155d2..cbb3bed75d3c 100644 --- a/arch/powerpc/sysdev/fsl_rio.c +++ b/arch/powerpc/sysdev/fsl_rio.c | |||
@@ -965,7 +965,7 @@ static inline void fsl_rio_info(struct device *dev, u32 ccsr) | |||
965 | break; | 965 | break; |
966 | default: | 966 | default: |
967 | str = "Unknown"; | 967 | str = "Unknown"; |
968 | break;; | 968 | break; |
969 | } | 969 | } |
970 | dev_info(dev, "Hardware port width: %s\n", str); | 970 | dev_info(dev, "Hardware port width: %s\n", str); |
971 | 971 | ||
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index a86d3ce01ead..69e2630c9062 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c | |||
@@ -728,12 +728,10 @@ struct ipic * __init ipic_init(struct device_node *node, unsigned int flags) | |||
728 | if (ret) | 728 | if (ret) |
729 | return NULL; | 729 | return NULL; |
730 | 730 | ||
731 | ipic = alloc_bootmem(sizeof(struct ipic)); | 731 | ipic = kzalloc(sizeof(*ipic), GFP_KERNEL); |
732 | if (ipic == NULL) | 732 | if (ipic == NULL) |
733 | return NULL; | 733 | return NULL; |
734 | 734 | ||
735 | memset(ipic, 0, sizeof(struct ipic)); | ||
736 | |||
737 | ipic->irqhost = irq_alloc_host(node, IRQ_HOST_MAP_LINEAR, | 735 | ipic->irqhost = irq_alloc_host(node, IRQ_HOST_MAP_LINEAR, |
738 | NR_IPIC_INTS, | 736 | NR_IPIC_INTS, |
739 | &ipic_host_ops, 0); | 737 | &ipic_host_ops, 0); |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 9c3af5045495..3981ae4cb58e 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -279,28 +279,29 @@ static void _mpic_map_mmio(struct mpic *mpic, phys_addr_t phys_addr, | |||
279 | } | 279 | } |
280 | 280 | ||
281 | #ifdef CONFIG_PPC_DCR | 281 | #ifdef CONFIG_PPC_DCR |
282 | static void _mpic_map_dcr(struct mpic *mpic, struct mpic_reg_bank *rb, | 282 | static void _mpic_map_dcr(struct mpic *mpic, struct device_node *node, |
283 | struct mpic_reg_bank *rb, | ||
283 | unsigned int offset, unsigned int size) | 284 | unsigned int offset, unsigned int size) |
284 | { | 285 | { |
285 | const u32 *dbasep; | 286 | const u32 *dbasep; |
286 | 287 | ||
287 | dbasep = of_get_property(mpic->irqhost->of_node, "dcr-reg", NULL); | 288 | dbasep = of_get_property(node, "dcr-reg", NULL); |
288 | 289 | ||
289 | rb->dhost = dcr_map(mpic->irqhost->of_node, *dbasep + offset, size); | 290 | rb->dhost = dcr_map(node, *dbasep + offset, size); |
290 | BUG_ON(!DCR_MAP_OK(rb->dhost)); | 291 | BUG_ON(!DCR_MAP_OK(rb->dhost)); |
291 | } | 292 | } |
292 | 293 | ||
293 | static inline void mpic_map(struct mpic *mpic, phys_addr_t phys_addr, | 294 | static inline void mpic_map(struct mpic *mpic, struct device_node *node, |
294 | struct mpic_reg_bank *rb, unsigned int offset, | 295 | phys_addr_t phys_addr, struct mpic_reg_bank *rb, |
295 | unsigned int size) | 296 | unsigned int offset, unsigned int size) |
296 | { | 297 | { |
297 | if (mpic->flags & MPIC_USES_DCR) | 298 | if (mpic->flags & MPIC_USES_DCR) |
298 | _mpic_map_dcr(mpic, rb, offset, size); | 299 | _mpic_map_dcr(mpic, node, rb, offset, size); |
299 | else | 300 | else |
300 | _mpic_map_mmio(mpic, phys_addr, rb, offset, size); | 301 | _mpic_map_mmio(mpic, phys_addr, rb, offset, size); |
301 | } | 302 | } |
302 | #else /* CONFIG_PPC_DCR */ | 303 | #else /* CONFIG_PPC_DCR */ |
303 | #define mpic_map(m,p,b,o,s) _mpic_map_mmio(m,p,b,o,s) | 304 | #define mpic_map(m,n,p,b,o,s) _mpic_map_mmio(m,p,b,o,s) |
304 | #endif /* !CONFIG_PPC_DCR */ | 305 | #endif /* !CONFIG_PPC_DCR */ |
305 | 306 | ||
306 | 307 | ||
@@ -507,9 +508,8 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic) | |||
507 | printk(KERN_INFO "mpic: Setting up HT PICs workarounds for U3/U4\n"); | 508 | printk(KERN_INFO "mpic: Setting up HT PICs workarounds for U3/U4\n"); |
508 | 509 | ||
509 | /* Allocate fixups array */ | 510 | /* Allocate fixups array */ |
510 | mpic->fixups = alloc_bootmem(128 * sizeof(struct mpic_irq_fixup)); | 511 | mpic->fixups = kzalloc(128 * sizeof(*mpic->fixups), GFP_KERNEL); |
511 | BUG_ON(mpic->fixups == NULL); | 512 | BUG_ON(mpic->fixups == NULL); |
512 | memset(mpic->fixups, 0, 128 * sizeof(struct mpic_irq_fixup)); | ||
513 | 513 | ||
514 | /* Init spinlock */ | 514 | /* Init spinlock */ |
515 | spin_lock_init(&mpic->fixup_lock); | 515 | spin_lock_init(&mpic->fixup_lock); |
@@ -1052,11 +1052,10 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1052 | int intvec_top; | 1052 | int intvec_top; |
1053 | u64 paddr = phys_addr; | 1053 | u64 paddr = phys_addr; |
1054 | 1054 | ||
1055 | mpic = alloc_bootmem(sizeof(struct mpic)); | 1055 | mpic = kzalloc(sizeof(struct mpic), GFP_KERNEL); |
1056 | if (mpic == NULL) | 1056 | if (mpic == NULL) |
1057 | return NULL; | 1057 | return NULL; |
1058 | 1058 | ||
1059 | memset(mpic, 0, sizeof(struct mpic)); | ||
1060 | mpic->name = name; | 1059 | mpic->name = name; |
1061 | 1060 | ||
1062 | mpic->hc_irq = mpic_irq_chip; | 1061 | mpic->hc_irq = mpic_irq_chip; |
@@ -1109,9 +1108,8 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1109 | psize /= 4; | 1108 | psize /= 4; |
1110 | bits = intvec_top + 1; | 1109 | bits = intvec_top + 1; |
1111 | mapsize = BITS_TO_LONGS(bits) * sizeof(unsigned long); | 1110 | mapsize = BITS_TO_LONGS(bits) * sizeof(unsigned long); |
1112 | mpic->protected = alloc_bootmem(mapsize); | 1111 | mpic->protected = kzalloc(mapsize, GFP_KERNEL); |
1113 | BUG_ON(mpic->protected == NULL); | 1112 | BUG_ON(mpic->protected == NULL); |
1114 | memset(mpic->protected, 0, mapsize); | ||
1115 | for (i = 0; i < psize; i++) { | 1113 | for (i = 0; i < psize; i++) { |
1116 | if (psrc[i] > intvec_top) | 1114 | if (psrc[i] > intvec_top) |
1117 | continue; | 1115 | continue; |
@@ -1152,8 +1150,8 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1152 | } | 1150 | } |
1153 | 1151 | ||
1154 | /* Map the global registers */ | 1152 | /* Map the global registers */ |
1155 | mpic_map(mpic, paddr, &mpic->gregs, MPIC_INFO(GREG_BASE), 0x1000); | 1153 | mpic_map(mpic, node, paddr, &mpic->gregs, MPIC_INFO(GREG_BASE), 0x1000); |
1156 | mpic_map(mpic, paddr, &mpic->tmregs, MPIC_INFO(TIMER_BASE), 0x1000); | 1154 | mpic_map(mpic, node, paddr, &mpic->tmregs, MPIC_INFO(TIMER_BASE), 0x1000); |
1157 | 1155 | ||
1158 | /* Reset */ | 1156 | /* Reset */ |
1159 | if (flags & MPIC_WANTS_RESET) { | 1157 | if (flags & MPIC_WANTS_RESET) { |
@@ -1194,7 +1192,7 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1194 | 1192 | ||
1195 | /* Map the per-CPU registers */ | 1193 | /* Map the per-CPU registers */ |
1196 | for (i = 0; i < mpic->num_cpus; i++) { | 1194 | for (i = 0; i < mpic->num_cpus; i++) { |
1197 | mpic_map(mpic, paddr, &mpic->cpuregs[i], | 1195 | mpic_map(mpic, node, paddr, &mpic->cpuregs[i], |
1198 | MPIC_INFO(CPU_BASE) + i * MPIC_INFO(CPU_STRIDE), | 1196 | MPIC_INFO(CPU_BASE) + i * MPIC_INFO(CPU_STRIDE), |
1199 | 0x1000); | 1197 | 0x1000); |
1200 | } | 1198 | } |
@@ -1202,7 +1200,7 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1202 | /* Initialize main ISU if none provided */ | 1200 | /* Initialize main ISU if none provided */ |
1203 | if (mpic->isu_size == 0) { | 1201 | if (mpic->isu_size == 0) { |
1204 | mpic->isu_size = mpic->num_sources; | 1202 | mpic->isu_size = mpic->num_sources; |
1205 | mpic_map(mpic, paddr, &mpic->isus[0], | 1203 | mpic_map(mpic, node, paddr, &mpic->isus[0], |
1206 | MPIC_INFO(IRQ_BASE), MPIC_INFO(IRQ_STRIDE) * mpic->isu_size); | 1204 | MPIC_INFO(IRQ_BASE), MPIC_INFO(IRQ_STRIDE) * mpic->isu_size); |
1207 | } | 1205 | } |
1208 | mpic->isu_shift = 1 + __ilog2(mpic->isu_size - 1); | 1206 | mpic->isu_shift = 1 + __ilog2(mpic->isu_size - 1); |
@@ -1256,8 +1254,10 @@ void __init mpic_assign_isu(struct mpic *mpic, unsigned int isu_num, | |||
1256 | 1254 | ||
1257 | BUG_ON(isu_num >= MPIC_MAX_ISU); | 1255 | BUG_ON(isu_num >= MPIC_MAX_ISU); |
1258 | 1256 | ||
1259 | mpic_map(mpic, paddr, &mpic->isus[isu_num], 0, | 1257 | mpic_map(mpic, mpic->irqhost->of_node, |
1258 | paddr, &mpic->isus[isu_num], 0, | ||
1260 | MPIC_INFO(IRQ_STRIDE) * mpic->isu_size); | 1259 | MPIC_INFO(IRQ_STRIDE) * mpic->isu_size); |
1260 | |||
1261 | if ((isu_first + mpic->isu_size) > mpic->num_sources) | 1261 | if ((isu_first + mpic->isu_size) > mpic->num_sources) |
1262 | mpic->num_sources = isu_first + mpic->isu_size; | 1262 | mpic->num_sources = isu_first + mpic->isu_size; |
1263 | } | 1263 | } |
@@ -1351,7 +1351,8 @@ void __init mpic_init(struct mpic *mpic) | |||
1351 | 1351 | ||
1352 | #ifdef CONFIG_PM | 1352 | #ifdef CONFIG_PM |
1353 | /* allocate memory to save mpic state */ | 1353 | /* allocate memory to save mpic state */ |
1354 | mpic->save_data = alloc_bootmem(mpic->num_sources * sizeof(struct mpic_irq_save)); | 1354 | mpic->save_data = kmalloc(mpic->num_sources * sizeof(*mpic->save_data), |
1355 | GFP_KERNEL); | ||
1355 | BUG_ON(mpic->save_data == NULL); | 1356 | BUG_ON(mpic->save_data == NULL); |
1356 | #endif | 1357 | #endif |
1357 | } | 1358 | } |
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c index daefc93ddffe..6ff9d71b4c0d 100644 --- a/arch/powerpc/sysdev/ppc4xx_pci.c +++ b/arch/powerpc/sysdev/ppc4xx_pci.c | |||
@@ -1531,7 +1531,7 @@ static void __init ppc4xx_configure_pciex_PIMs(struct ppc4xx_pciex_port *port, | |||
1531 | */ | 1531 | */ |
1532 | 1532 | ||
1533 | /* Calculate window size */ | 1533 | /* Calculate window size */ |
1534 | sa = (0xffffffffffffffffull << ilog2(ep_size));; | 1534 | sa = (0xffffffffffffffffull << ilog2(ep_size)); |
1535 | 1535 | ||
1536 | /* Setup BAR0 */ | 1536 | /* Setup BAR0 */ |
1537 | out_le32(mbase + PECFG_BAR0HMPA, RES_TO_U32_HIGH(sa)); | 1537 | out_le32(mbase + PECFG_BAR0HMPA, RES_TO_U32_HIGH(sa)); |
@@ -1550,7 +1550,7 @@ static void __init ppc4xx_configure_pciex_PIMs(struct ppc4xx_pciex_port *port, | |||
1550 | out_le32(mbase + PCI_BASE_ADDRESS_1, RES_TO_U32_HIGH(ep_addr)); | 1550 | out_le32(mbase + PCI_BASE_ADDRESS_1, RES_TO_U32_HIGH(ep_addr)); |
1551 | } else { | 1551 | } else { |
1552 | /* Calculate window size */ | 1552 | /* Calculate window size */ |
1553 | sa = (0xffffffffffffffffull << ilog2(size));; | 1553 | sa = (0xffffffffffffffffull << ilog2(size)); |
1554 | if (res->flags & IORESOURCE_PREFETCH) | 1554 | if (res->flags & IORESOURCE_PREFETCH) |
1555 | sa |= 0x8; | 1555 | sa |= 0x8; |
1556 | 1556 | ||
diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c index b28b0e512d67..237e3654f48c 100644 --- a/arch/powerpc/sysdev/qe_lib/qe.c +++ b/arch/powerpc/sysdev/qe_lib/qe.c | |||
@@ -112,6 +112,7 @@ int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input) | |||
112 | { | 112 | { |
113 | unsigned long flags; | 113 | unsigned long flags; |
114 | u8 mcn_shift = 0, dev_shift = 0; | 114 | u8 mcn_shift = 0, dev_shift = 0; |
115 | u32 ret; | ||
115 | 116 | ||
116 | spin_lock_irqsave(&qe_lock, flags); | 117 | spin_lock_irqsave(&qe_lock, flags); |
117 | if (cmd == QE_RESET) { | 118 | if (cmd == QE_RESET) { |
@@ -139,11 +140,13 @@ int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input) | |||
139 | } | 140 | } |
140 | 141 | ||
141 | /* wait for the QE_CR_FLG to clear */ | 142 | /* wait for the QE_CR_FLG to clear */ |
142 | while(in_be32(&qe_immr->cp.cecr) & QE_CR_FLG) | 143 | ret = spin_event_timeout((in_be32(&qe_immr->cp.cecr) & QE_CR_FLG) == 0, |
143 | cpu_relax(); | 144 | 100, 0); |
145 | /* On timeout (e.g. failure), the expression will be false (ret == 0), | ||
146 | otherwise it will be true (ret == 1). */ | ||
144 | spin_unlock_irqrestore(&qe_lock, flags); | 147 | spin_unlock_irqrestore(&qe_lock, flags); |
145 | 148 | ||
146 | return 0; | 149 | return ret == 1; |
147 | } | 150 | } |
148 | EXPORT_SYMBOL(qe_issue_cmd); | 151 | EXPORT_SYMBOL(qe_issue_cmd); |
149 | 152 | ||
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c index 63cdf9887f36..074905c3ee5a 100644 --- a/arch/powerpc/sysdev/qe_lib/qe_ic.c +++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c | |||
@@ -333,12 +333,10 @@ void __init qe_ic_init(struct device_node *node, unsigned int flags, | |||
333 | if (ret) | 333 | if (ret) |
334 | return; | 334 | return; |
335 | 335 | ||
336 | qe_ic = alloc_bootmem(sizeof(struct qe_ic)); | 336 | qe_ic = kzalloc(sizeof(*qe_ic), GFP_KERNEL); |
337 | if (qe_ic == NULL) | 337 | if (qe_ic == NULL) |
338 | return; | 338 | return; |
339 | 339 | ||
340 | memset(qe_ic, 0, sizeof(struct qe_ic)); | ||
341 | |||
342 | qe_ic->irqhost = irq_alloc_host(node, IRQ_HOST_MAP_LINEAR, | 340 | qe_ic->irqhost = irq_alloc_host(node, IRQ_HOST_MAP_LINEAR, |
343 | NR_QE_IC_INTS, &qe_ic_host_ops, 0); | 341 | NR_QE_IC_INTS, &qe_ic_host_ops, 0); |
344 | if (qe_ic->irqhost == NULL) | 342 | if (qe_ic->irqhost == NULL) |
diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c index d35405c59434..466ce9ace127 100644 --- a/arch/powerpc/sysdev/uic.c +++ b/arch/powerpc/sysdev/uic.c | |||
@@ -258,11 +258,10 @@ static struct uic * __init uic_init_one(struct device_node *node) | |||
258 | 258 | ||
259 | BUG_ON(! of_device_is_compatible(node, "ibm,uic")); | 259 | BUG_ON(! of_device_is_compatible(node, "ibm,uic")); |
260 | 260 | ||
261 | uic = alloc_bootmem(sizeof(*uic)); | 261 | uic = kzalloc(sizeof(*uic), GFP_KERNEL); |
262 | if (! uic) | 262 | if (! uic) |
263 | return NULL; /* FIXME: panic? */ | 263 | return NULL; /* FIXME: panic? */ |
264 | 264 | ||
265 | memset(uic, 0, sizeof(*uic)); | ||
266 | spin_lock_init(&uic->lock); | 265 | spin_lock_init(&uic->lock); |
267 | indexp = of_get_property(node, "cell-index", &len); | 266 | indexp = of_get_property(node, "cell-index", &len); |
268 | if (!indexp || (len != sizeof(u32))) { | 267 | if (!indexp || (len != sizeof(u32))) { |
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index a14dba0e4d67..2ae5d72f47ed 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -94,6 +94,12 @@ config S390 | |||
94 | select HAVE_KVM if 64BIT | 94 | select HAVE_KVM if 64BIT |
95 | select HAVE_ARCH_TRACEHOOK | 95 | select HAVE_ARCH_TRACEHOOK |
96 | select INIT_ALL_POSSIBLE | 96 | select INIT_ALL_POSSIBLE |
97 | select HAVE_PERF_COUNTERS | ||
98 | select GENERIC_ATOMIC64 if !64BIT | ||
99 | |||
100 | config SCHED_OMIT_FRAME_POINTER | ||
101 | bool | ||
102 | default y | ||
97 | 103 | ||
98 | source "init/Kconfig" | 104 | source "init/Kconfig" |
99 | 105 | ||
@@ -115,6 +121,9 @@ config 32BIT | |||
115 | bool | 121 | bool |
116 | default y if !64BIT | 122 | default y if !64BIT |
117 | 123 | ||
124 | config KTIME_SCALAR | ||
125 | def_bool 32BIT | ||
126 | |||
118 | config SMP | 127 | config SMP |
119 | bool "Symmetric multi-processing support" | 128 | bool "Symmetric multi-processing support" |
120 | ---help--- | 129 | ---help--- |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index d401d56c255f..fcba206529f3 100644 --- a/arch/s390/defconfig +++ b/arch/s390/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.30-rc3 | 3 | # Linux kernel version: 2.6.30 |
4 | # Thu Apr 23 09:29:52 2009 | 4 | # Mon Jun 22 11:08:16 2009 |
5 | # | 5 | # |
6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -25,6 +25,7 @@ CONFIG_VIRT_CPU_ACCOUNTING=y | |||
25 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | 25 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y |
26 | CONFIG_S390=y | 26 | CONFIG_S390=y |
27 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 27 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
28 | CONFIG_CONSTRUCTORS=y | ||
28 | 29 | ||
29 | # | 30 | # |
30 | # General setup | 31 | # General setup |
@@ -90,7 +91,6 @@ CONFIG_SYSCTL_SYSCALL=y | |||
90 | CONFIG_KALLSYMS=y | 91 | CONFIG_KALLSYMS=y |
91 | # CONFIG_KALLSYMS_ALL is not set | 92 | # CONFIG_KALLSYMS_ALL is not set |
92 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 93 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
93 | # CONFIG_STRIP_ASM_SYMS is not set | ||
94 | CONFIG_HOTPLUG=y | 94 | CONFIG_HOTPLUG=y |
95 | CONFIG_PRINTK=y | 95 | CONFIG_PRINTK=y |
96 | CONFIG_BUG=y | 96 | CONFIG_BUG=y |
@@ -103,7 +103,14 @@ CONFIG_TIMERFD=y | |||
103 | CONFIG_EVENTFD=y | 103 | CONFIG_EVENTFD=y |
104 | CONFIG_SHMEM=y | 104 | CONFIG_SHMEM=y |
105 | CONFIG_AIO=y | 105 | CONFIG_AIO=y |
106 | CONFIG_HAVE_PERF_COUNTERS=y | ||
107 | |||
108 | # | ||
109 | # Performance Counters | ||
110 | # | ||
111 | # CONFIG_PERF_COUNTERS is not set | ||
106 | CONFIG_VM_EVENT_COUNTERS=y | 112 | CONFIG_VM_EVENT_COUNTERS=y |
113 | # CONFIG_STRIP_ASM_SYMS is not set | ||
107 | # CONFIG_COMPAT_BRK is not set | 114 | # CONFIG_COMPAT_BRK is not set |
108 | CONFIG_SLAB=y | 115 | CONFIG_SLAB=y |
109 | # CONFIG_SLUB is not set | 116 | # CONFIG_SLUB is not set |
@@ -119,6 +126,11 @@ CONFIG_HAVE_KRETPROBES=y | |||
119 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 126 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
120 | CONFIG_USE_GENERIC_SMP_HELPERS=y | 127 | CONFIG_USE_GENERIC_SMP_HELPERS=y |
121 | CONFIG_HAVE_DEFAULT_NO_SPIN_MUTEXES=y | 128 | CONFIG_HAVE_DEFAULT_NO_SPIN_MUTEXES=y |
129 | |||
130 | # | ||
131 | # GCOV-based kernel profiling | ||
132 | # | ||
133 | # CONFIG_GCOV_KERNEL is not set | ||
122 | # CONFIG_SLOW_WORK is not set | 134 | # CONFIG_SLOW_WORK is not set |
123 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 135 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
124 | CONFIG_SLABINFO=y | 136 | CONFIG_SLABINFO=y |
@@ -150,7 +162,7 @@ CONFIG_DEFAULT_DEADLINE=y | |||
150 | # CONFIG_DEFAULT_NOOP is not set | 162 | # CONFIG_DEFAULT_NOOP is not set |
151 | CONFIG_DEFAULT_IOSCHED="deadline" | 163 | CONFIG_DEFAULT_IOSCHED="deadline" |
152 | CONFIG_PREEMPT_NOTIFIERS=y | 164 | CONFIG_PREEMPT_NOTIFIERS=y |
153 | # CONFIG_FREEZER is not set | 165 | CONFIG_FREEZER=y |
154 | 166 | ||
155 | # | 167 | # |
156 | # Base setup | 168 | # Base setup |
@@ -199,6 +211,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y | |||
199 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 211 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
200 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | 212 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y |
201 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | 213 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y |
214 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||
202 | CONFIG_SELECT_MEMORY_MODEL=y | 215 | CONFIG_SELECT_MEMORY_MODEL=y |
203 | # CONFIG_FLATMEM_MANUAL is not set | 216 | # CONFIG_FLATMEM_MANUAL is not set |
204 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 217 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
@@ -218,9 +231,9 @@ CONFIG_PHYS_ADDR_T_64BIT=y | |||
218 | CONFIG_ZONE_DMA_FLAG=1 | 231 | CONFIG_ZONE_DMA_FLAG=1 |
219 | CONFIG_BOUNCE=y | 232 | CONFIG_BOUNCE=y |
220 | CONFIG_VIRT_TO_BUS=y | 233 | CONFIG_VIRT_TO_BUS=y |
221 | CONFIG_UNEVICTABLE_LRU=y | ||
222 | CONFIG_HAVE_MLOCK=y | 234 | CONFIG_HAVE_MLOCK=y |
223 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | 235 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y |
236 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
224 | 237 | ||
225 | # | 238 | # |
226 | # I/O subsystem configuration | 239 | # I/O subsystem configuration |
@@ -257,6 +270,16 @@ CONFIG_KEXEC=y | |||
257 | # CONFIG_ZFCPDUMP is not set | 270 | # CONFIG_ZFCPDUMP is not set |
258 | CONFIG_S390_GUEST=y | 271 | CONFIG_S390_GUEST=y |
259 | CONFIG_SECCOMP=y | 272 | CONFIG_SECCOMP=y |
273 | |||
274 | # | ||
275 | # Power Management | ||
276 | # | ||
277 | CONFIG_PM=y | ||
278 | # CONFIG_PM_DEBUG is not set | ||
279 | CONFIG_PM_SLEEP_SMP=y | ||
280 | CONFIG_PM_SLEEP=y | ||
281 | CONFIG_HIBERNATION=y | ||
282 | CONFIG_PM_STD_PARTITION="" | ||
260 | CONFIG_NET=y | 283 | CONFIG_NET=y |
261 | 284 | ||
262 | # | 285 | # |
@@ -384,6 +407,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
384 | # CONFIG_ECONET is not set | 407 | # CONFIG_ECONET is not set |
385 | # CONFIG_WAN_ROUTER is not set | 408 | # CONFIG_WAN_ROUTER is not set |
386 | # CONFIG_PHONET is not set | 409 | # CONFIG_PHONET is not set |
410 | # CONFIG_IEEE802154 is not set | ||
387 | CONFIG_NET_SCHED=y | 411 | CONFIG_NET_SCHED=y |
388 | 412 | ||
389 | # | 413 | # |
@@ -446,6 +470,7 @@ CONFIG_CAN_BCM=m | |||
446 | # CAN Device Drivers | 470 | # CAN Device Drivers |
447 | # | 471 | # |
448 | CONFIG_CAN_VCAN=m | 472 | CONFIG_CAN_VCAN=m |
473 | # CONFIG_CAN_DEV is not set | ||
449 | # CONFIG_CAN_DEBUG_DEVICES is not set | 474 | # CONFIG_CAN_DEBUG_DEVICES is not set |
450 | # CONFIG_AF_RXRPC is not set | 475 | # CONFIG_AF_RXRPC is not set |
451 | # CONFIG_WIMAX is not set | 476 | # CONFIG_WIMAX is not set |
@@ -524,10 +549,6 @@ CONFIG_BLK_DEV_SR=y | |||
524 | CONFIG_BLK_DEV_SR_VENDOR=y | 549 | CONFIG_BLK_DEV_SR_VENDOR=y |
525 | CONFIG_CHR_DEV_SG=y | 550 | CONFIG_CHR_DEV_SG=y |
526 | # CONFIG_CHR_DEV_SCH is not set | 551 | # CONFIG_CHR_DEV_SCH is not set |
527 | |||
528 | # | ||
529 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
530 | # | ||
531 | CONFIG_SCSI_MULTI_LUN=y | 552 | CONFIG_SCSI_MULTI_LUN=y |
532 | CONFIG_SCSI_CONSTANTS=y | 553 | CONFIG_SCSI_CONSTANTS=y |
533 | CONFIG_SCSI_LOGGING=y | 554 | CONFIG_SCSI_LOGGING=y |
@@ -578,7 +599,6 @@ CONFIG_DM_MULTIPATH=m | |||
578 | # CONFIG_DM_DELAY is not set | 599 | # CONFIG_DM_DELAY is not set |
579 | # CONFIG_DM_UEVENT is not set | 600 | # CONFIG_DM_UEVENT is not set |
580 | CONFIG_NETDEVICES=y | 601 | CONFIG_NETDEVICES=y |
581 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
582 | # CONFIG_IFB is not set | 602 | # CONFIG_IFB is not set |
583 | CONFIG_DUMMY=m | 603 | CONFIG_DUMMY=m |
584 | CONFIG_BONDING=m | 604 | CONFIG_BONDING=m |
@@ -595,6 +615,7 @@ CONFIG_NET_ETHERNET=y | |||
595 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | 615 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set |
596 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | 616 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set |
597 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | 617 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set |
618 | # CONFIG_KS8842 is not set | ||
598 | CONFIG_NETDEV_1000=y | 619 | CONFIG_NETDEV_1000=y |
599 | CONFIG_NETDEV_10000=y | 620 | CONFIG_NETDEV_10000=y |
600 | # CONFIG_TR is not set | 621 | # CONFIG_TR is not set |
@@ -674,6 +695,11 @@ CONFIG_S390_TAPE_34XX=m | |||
674 | # CONFIG_MONREADER is not set | 695 | # CONFIG_MONREADER is not set |
675 | CONFIG_MONWRITER=m | 696 | CONFIG_MONWRITER=m |
676 | CONFIG_S390_VMUR=m | 697 | CONFIG_S390_VMUR=m |
698 | |||
699 | # | ||
700 | # PPS support | ||
701 | # | ||
702 | # CONFIG_PPS is not set | ||
677 | # CONFIG_POWER_SUPPLY is not set | 703 | # CONFIG_POWER_SUPPLY is not set |
678 | # CONFIG_THERMAL is not set | 704 | # CONFIG_THERMAL is not set |
679 | # CONFIG_THERMAL_HWMON is not set | 705 | # CONFIG_THERMAL_HWMON is not set |
@@ -683,6 +709,10 @@ CONFIG_S390_VMUR=m | |||
683 | # CONFIG_NEW_LEDS is not set | 709 | # CONFIG_NEW_LEDS is not set |
684 | CONFIG_ACCESSIBILITY=y | 710 | CONFIG_ACCESSIBILITY=y |
685 | # CONFIG_AUXDISPLAY is not set | 711 | # CONFIG_AUXDISPLAY is not set |
712 | |||
713 | # | ||
714 | # TI VLYNQ | ||
715 | # | ||
686 | # CONFIG_STAGING is not set | 716 | # CONFIG_STAGING is not set |
687 | 717 | ||
688 | # | 718 | # |
@@ -703,11 +733,12 @@ CONFIG_FS_MBCACHE=y | |||
703 | # CONFIG_REISERFS_FS is not set | 733 | # CONFIG_REISERFS_FS is not set |
704 | # CONFIG_JFS_FS is not set | 734 | # CONFIG_JFS_FS is not set |
705 | CONFIG_FS_POSIX_ACL=y | 735 | CONFIG_FS_POSIX_ACL=y |
706 | CONFIG_FILE_LOCKING=y | ||
707 | # CONFIG_XFS_FS is not set | 736 | # CONFIG_XFS_FS is not set |
708 | # CONFIG_GFS2_FS is not set | 737 | # CONFIG_GFS2_FS is not set |
709 | # CONFIG_OCFS2_FS is not set | 738 | # CONFIG_OCFS2_FS is not set |
710 | # CONFIG_BTRFS_FS is not set | 739 | # CONFIG_BTRFS_FS is not set |
740 | CONFIG_FILE_LOCKING=y | ||
741 | CONFIG_FSNOTIFY=y | ||
711 | CONFIG_DNOTIFY=y | 742 | CONFIG_DNOTIFY=y |
712 | CONFIG_INOTIFY=y | 743 | CONFIG_INOTIFY=y |
713 | CONFIG_INOTIFY_USER=y | 744 | CONFIG_INOTIFY_USER=y |
@@ -865,19 +896,23 @@ CONFIG_DEBUG_MEMORY_INIT=y | |||
865 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 896 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
866 | # CONFIG_DEBUG_PAGEALLOC is not set | 897 | # CONFIG_DEBUG_PAGEALLOC is not set |
867 | CONFIG_HAVE_FUNCTION_TRACER=y | 898 | CONFIG_HAVE_FUNCTION_TRACER=y |
899 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
900 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y | ||
901 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
902 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
903 | CONFIG_HAVE_FTRACE_SYSCALLS=y | ||
868 | CONFIG_TRACING_SUPPORT=y | 904 | CONFIG_TRACING_SUPPORT=y |
869 | 905 | CONFIG_FTRACE=y | |
870 | # | ||
871 | # Tracers | ||
872 | # | ||
873 | # CONFIG_FUNCTION_TRACER is not set | 906 | # CONFIG_FUNCTION_TRACER is not set |
874 | # CONFIG_IRQSOFF_TRACER is not set | 907 | # CONFIG_IRQSOFF_TRACER is not set |
875 | # CONFIG_PREEMPT_TRACER is not set | 908 | # CONFIG_PREEMPT_TRACER is not set |
876 | # CONFIG_SCHED_TRACER is not set | 909 | # CONFIG_SCHED_TRACER is not set |
877 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 910 | # CONFIG_ENABLE_DEFAULT_TRACERS is not set |
878 | # CONFIG_EVENT_TRACER is not set | 911 | # CONFIG_FTRACE_SYSCALLS is not set |
879 | # CONFIG_BOOT_TRACER is not set | 912 | # CONFIG_BOOT_TRACER is not set |
880 | # CONFIG_TRACE_BRANCH_PROFILING is not set | 913 | CONFIG_BRANCH_PROFILE_NONE=y |
914 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
915 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
881 | # CONFIG_STACK_TRACER is not set | 916 | # CONFIG_STACK_TRACER is not set |
882 | # CONFIG_KMEMTRACE is not set | 917 | # CONFIG_KMEMTRACE is not set |
883 | # CONFIG_WORKQUEUE_TRACER is not set | 918 | # CONFIG_WORKQUEUE_TRACER is not set |
@@ -886,6 +921,7 @@ CONFIG_TRACING_SUPPORT=y | |||
886 | CONFIG_SAMPLES=y | 921 | CONFIG_SAMPLES=y |
887 | # CONFIG_SAMPLE_KOBJECT is not set | 922 | # CONFIG_SAMPLE_KOBJECT is not set |
888 | # CONFIG_SAMPLE_KPROBES is not set | 923 | # CONFIG_SAMPLE_KPROBES is not set |
924 | # CONFIG_KMEMCHECK is not set | ||
889 | 925 | ||
890 | # | 926 | # |
891 | # Security options | 927 | # Security options |
diff --git a/arch/s390/include/asm/atomic.h b/arch/s390/include/asm/atomic.h index fca9dffcc669..c7d0abfb0f00 100644 --- a/arch/s390/include/asm/atomic.h +++ b/arch/s390/include/asm/atomic.h | |||
@@ -268,7 +268,12 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, | |||
268 | #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) | 268 | #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) |
269 | 269 | ||
270 | #undef __CSG_LOOP | 270 | #undef __CSG_LOOP |
271 | #endif | 271 | |
272 | #else /* __s390x__ */ | ||
273 | |||
274 | #include <asm-generic/atomic64.h> | ||
275 | |||
276 | #endif /* __s390x__ */ | ||
272 | 277 | ||
273 | #define smp_mb__before_atomic_dec() smp_mb() | 278 | #define smp_mb__before_atomic_dec() smp_mb() |
274 | #define smp_mb__after_atomic_dec() smp_mb() | 279 | #define smp_mb__after_atomic_dec() smp_mb() |
diff --git a/arch/s390/include/asm/cputime.h b/arch/s390/include/asm/cputime.h index ec917d42ee6d..7a3817a656df 100644 --- a/arch/s390/include/asm/cputime.h +++ b/arch/s390/include/asm/cputime.h | |||
@@ -178,7 +178,7 @@ cputime64_to_clock_t(cputime64_t cputime) | |||
178 | } | 178 | } |
179 | 179 | ||
180 | struct s390_idle_data { | 180 | struct s390_idle_data { |
181 | spinlock_t lock; | 181 | unsigned int sequence; |
182 | unsigned long long idle_count; | 182 | unsigned long long idle_count; |
183 | unsigned long long idle_enter; | 183 | unsigned long long idle_enter; |
184 | unsigned long long idle_time; | 184 | unsigned long long idle_time; |
diff --git a/arch/s390/include/asm/debug.h b/arch/s390/include/asm/debug.h index 9450ce6e32de..31ed5686a968 100644 --- a/arch/s390/include/asm/debug.h +++ b/arch/s390/include/asm/debug.h | |||
@@ -248,14 +248,5 @@ int debug_unregister_view(debug_info_t* id, struct debug_view* view); | |||
248 | #define PRINT_FATAL(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) | 248 | #define PRINT_FATAL(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) |
249 | #endif /* DASD_DEBUG */ | 249 | #endif /* DASD_DEBUG */ |
250 | 250 | ||
251 | #undef DEBUG_MALLOC | ||
252 | #ifdef DEBUG_MALLOC | ||
253 | void *b; | ||
254 | #define kmalloc(x...) (PRINT_INFO(" kmalloc %p\n",b=kmalloc(x)),b) | ||
255 | #define kfree(x) PRINT_INFO(" kfree %p\n",x);kfree(x) | ||
256 | #define get_zeroed_page(x...) (PRINT_INFO(" gfp %p\n",b=get_zeroed_page(x)),b) | ||
257 | #define __get_free_pages(x...) (PRINT_INFO(" gfps %p\n",b=__get_free_pages(x)),b) | ||
258 | #endif /* DEBUG_MALLOC */ | ||
259 | |||
260 | #endif /* __KERNEL__ */ | 251 | #endif /* __KERNEL__ */ |
261 | #endif /* DEBUG_H */ | 252 | #endif /* DEBUG_H */ |
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h index a27d0d5a6f86..1cd02f6073a0 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h | |||
@@ -99,7 +99,9 @@ struct kvm_s390_sie_block { | |||
99 | __u8 reservedd0[48]; /* 0x00d0 */ | 99 | __u8 reservedd0[48]; /* 0x00d0 */ |
100 | __u64 gcr[16]; /* 0x0100 */ | 100 | __u64 gcr[16]; /* 0x0100 */ |
101 | __u64 gbea; /* 0x0180 */ | 101 | __u64 gbea; /* 0x0180 */ |
102 | __u8 reserved188[120]; /* 0x0188 */ | 102 | __u8 reserved188[24]; /* 0x0188 */ |
103 | __u32 fac; /* 0x01a0 */ | ||
104 | __u8 reserved1a4[92]; /* 0x01a4 */ | ||
103 | } __attribute__((packed)); | 105 | } __attribute__((packed)); |
104 | 106 | ||
105 | struct kvm_vcpu_stat { | 107 | struct kvm_vcpu_stat { |
diff --git a/arch/s390/include/asm/perf_counter.h b/arch/s390/include/asm/perf_counter.h new file mode 100644 index 000000000000..7015188c2cc2 --- /dev/null +++ b/arch/s390/include/asm/perf_counter.h | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | * Performance counter support - s390 specific definitions. | ||
3 | * | ||
4 | * Copyright 2009 Martin Schwidefsky, IBM Corporation. | ||
5 | */ | ||
6 | |||
7 | static inline void set_perf_counter_pending(void) {} | ||
8 | static inline void clear_perf_counter_pending(void) {} | ||
9 | |||
10 | #define PERF_COUNTER_INDEX_OFFSET 0 | ||
diff --git a/arch/s390/include/asm/qdio.h b/arch/s390/include/asm/qdio.h index 402d6dcf0d26..79d849f014f0 100644 --- a/arch/s390/include/asm/qdio.h +++ b/arch/s390/include/asm/qdio.h | |||
@@ -380,7 +380,7 @@ extern int qdio_establish(struct qdio_initialize *); | |||
380 | extern int qdio_activate(struct ccw_device *); | 380 | extern int qdio_activate(struct ccw_device *); |
381 | 381 | ||
382 | extern int do_QDIO(struct ccw_device *cdev, unsigned int callflags, | 382 | extern int do_QDIO(struct ccw_device *cdev, unsigned int callflags, |
383 | int q_nr, int bufnr, int count); | 383 | int q_nr, unsigned int bufnr, unsigned int count); |
384 | extern int qdio_cleanup(struct ccw_device*, int); | 384 | extern int qdio_cleanup(struct ccw_device*, int); |
385 | extern int qdio_shutdown(struct ccw_device*, int); | 385 | extern int qdio_shutdown(struct ccw_device*, int); |
386 | extern int qdio_free(struct ccw_device *); | 386 | extern int qdio_free(struct ccw_device *); |
diff --git a/arch/s390/include/asm/thread_info.h b/arch/s390/include/asm/thread_info.h index 925bcc649035..ba1cab9fc1f9 100644 --- a/arch/s390/include/asm/thread_info.h +++ b/arch/s390/include/asm/thread_info.h | |||
@@ -61,7 +61,7 @@ struct thread_info { | |||
61 | .exec_domain = &default_exec_domain, \ | 61 | .exec_domain = &default_exec_domain, \ |
62 | .flags = 0, \ | 62 | .flags = 0, \ |
63 | .cpu = 0, \ | 63 | .cpu = 0, \ |
64 | .preempt_count = 1, \ | 64 | .preempt_count = INIT_PREEMPT_COUNT, \ |
65 | .restart_block = { \ | 65 | .restart_block = { \ |
66 | .fn = do_no_restart_syscall, \ | 66 | .fn = do_no_restart_syscall, \ |
67 | }, \ | 67 | }, \ |
diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c index d2f270c995d9..db943a7ec513 100644 --- a/arch/s390/kernel/dis.c +++ b/arch/s390/kernel/dis.c | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <linux/timer.h> | 15 | #include <linux/timer.h> |
16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
17 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
18 | #include <linux/smp_lock.h> | ||
19 | #include <linux/init.h> | 18 | #include <linux/init.h> |
20 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
21 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c index b8bf4b140065..371a2d88f4ac 100644 --- a/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c | |||
@@ -70,6 +70,7 @@ struct shutdown_action { | |||
70 | char *name; | 70 | char *name; |
71 | void (*fn) (struct shutdown_trigger *trigger); | 71 | void (*fn) (struct shutdown_trigger *trigger); |
72 | int (*init) (void); | 72 | int (*init) (void); |
73 | int init_rc; | ||
73 | }; | 74 | }; |
74 | 75 | ||
75 | static char *ipl_type_str(enum ipl_type type) | 76 | static char *ipl_type_str(enum ipl_type type) |
@@ -1486,11 +1487,13 @@ static int set_trigger(const char *buf, struct shutdown_trigger *trigger, | |||
1486 | int i; | 1487 | int i; |
1487 | 1488 | ||
1488 | for (i = 0; i < SHUTDOWN_ACTIONS_COUNT; i++) { | 1489 | for (i = 0; i < SHUTDOWN_ACTIONS_COUNT; i++) { |
1489 | if (!shutdown_actions_list[i]) | ||
1490 | continue; | ||
1491 | if (sysfs_streq(buf, shutdown_actions_list[i]->name)) { | 1490 | if (sysfs_streq(buf, shutdown_actions_list[i]->name)) { |
1492 | trigger->action = shutdown_actions_list[i]; | 1491 | if (shutdown_actions_list[i]->init_rc) { |
1493 | return len; | 1492 | return shutdown_actions_list[i]->init_rc; |
1493 | } else { | ||
1494 | trigger->action = shutdown_actions_list[i]; | ||
1495 | return len; | ||
1496 | } | ||
1494 | } | 1497 | } |
1495 | } | 1498 | } |
1496 | return -EINVAL; | 1499 | return -EINVAL; |
@@ -1640,8 +1643,8 @@ static void __init shutdown_actions_init(void) | |||
1640 | for (i = 0; i < SHUTDOWN_ACTIONS_COUNT; i++) { | 1643 | for (i = 0; i < SHUTDOWN_ACTIONS_COUNT; i++) { |
1641 | if (!shutdown_actions_list[i]->init) | 1644 | if (!shutdown_actions_list[i]->init) |
1642 | continue; | 1645 | continue; |
1643 | if (shutdown_actions_list[i]->init()) | 1646 | shutdown_actions_list[i]->init_rc = |
1644 | shutdown_actions_list[i] = NULL; | 1647 | shutdown_actions_list[i]->init(); |
1645 | } | 1648 | } |
1646 | } | 1649 | } |
1647 | 1650 | ||
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c index 9bb2f6241d9f..86783efa24ee 100644 --- a/arch/s390/kernel/kprobes.c +++ b/arch/s390/kernel/kprobes.c | |||
@@ -154,39 +154,35 @@ void __kprobes get_instruction_type(struct arch_specific_insn *ainsn) | |||
154 | 154 | ||
155 | static int __kprobes swap_instruction(void *aref) | 155 | static int __kprobes swap_instruction(void *aref) |
156 | { | 156 | { |
157 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
158 | unsigned long status = kcb->kprobe_status; | ||
157 | struct ins_replace_args *args = aref; | 159 | struct ins_replace_args *args = aref; |
160 | int rc; | ||
158 | 161 | ||
159 | return probe_kernel_write(args->ptr, &args->new, sizeof(args->new)); | 162 | kcb->kprobe_status = KPROBE_SWAP_INST; |
163 | rc = probe_kernel_write(args->ptr, &args->new, sizeof(args->new)); | ||
164 | kcb->kprobe_status = status; | ||
165 | return rc; | ||
160 | } | 166 | } |
161 | 167 | ||
162 | void __kprobes arch_arm_kprobe(struct kprobe *p) | 168 | void __kprobes arch_arm_kprobe(struct kprobe *p) |
163 | { | 169 | { |
164 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
165 | unsigned long status = kcb->kprobe_status; | ||
166 | struct ins_replace_args args; | 170 | struct ins_replace_args args; |
167 | 171 | ||
168 | args.ptr = p->addr; | 172 | args.ptr = p->addr; |
169 | args.old = p->opcode; | 173 | args.old = p->opcode; |
170 | args.new = BREAKPOINT_INSTRUCTION; | 174 | args.new = BREAKPOINT_INSTRUCTION; |
171 | |||
172 | kcb->kprobe_status = KPROBE_SWAP_INST; | ||
173 | stop_machine(swap_instruction, &args, NULL); | 175 | stop_machine(swap_instruction, &args, NULL); |
174 | kcb->kprobe_status = status; | ||
175 | } | 176 | } |
176 | 177 | ||
177 | void __kprobes arch_disarm_kprobe(struct kprobe *p) | 178 | void __kprobes arch_disarm_kprobe(struct kprobe *p) |
178 | { | 179 | { |
179 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
180 | unsigned long status = kcb->kprobe_status; | ||
181 | struct ins_replace_args args; | 180 | struct ins_replace_args args; |
182 | 181 | ||
183 | args.ptr = p->addr; | 182 | args.ptr = p->addr; |
184 | args.old = BREAKPOINT_INSTRUCTION; | 183 | args.old = BREAKPOINT_INSTRUCTION; |
185 | args.new = p->opcode; | 184 | args.new = p->opcode; |
186 | |||
187 | kcb->kprobe_status = KPROBE_SWAP_INST; | ||
188 | stop_machine(swap_instruction, &args, NULL); | 185 | stop_machine(swap_instruction, &args, NULL); |
189 | kcb->kprobe_status = status; | ||
190 | } | 186 | } |
191 | 187 | ||
192 | void __kprobes arch_remove_kprobe(struct kprobe *p) | 188 | void __kprobes arch_remove_kprobe(struct kprobe *p) |
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c index 490b39934d65..43acd73105b7 100644 --- a/arch/s390/kernel/ptrace.c +++ b/arch/s390/kernel/ptrace.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <linux/sched.h> | 26 | #include <linux/sched.h> |
27 | #include <linux/mm.h> | 27 | #include <linux/mm.h> |
28 | #include <linux/smp.h> | 28 | #include <linux/smp.h> |
29 | #include <linux/smp_lock.h> | ||
30 | #include <linux/errno.h> | 29 | #include <linux/errno.h> |
31 | #include <linux/ptrace.h> | 30 | #include <linux/ptrace.h> |
32 | #include <linux/user.h> | 31 | #include <linux/user.h> |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index fd8e3111a4e8..2270730f5354 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -856,13 +856,20 @@ static ssize_t show_idle_count(struct sys_device *dev, | |||
856 | { | 856 | { |
857 | struct s390_idle_data *idle; | 857 | struct s390_idle_data *idle; |
858 | unsigned long long idle_count; | 858 | unsigned long long idle_count; |
859 | unsigned int sequence; | ||
859 | 860 | ||
860 | idle = &per_cpu(s390_idle, dev->id); | 861 | idle = &per_cpu(s390_idle, dev->id); |
861 | spin_lock(&idle->lock); | 862 | repeat: |
863 | sequence = idle->sequence; | ||
864 | smp_rmb(); | ||
865 | if (sequence & 1) | ||
866 | goto repeat; | ||
862 | idle_count = idle->idle_count; | 867 | idle_count = idle->idle_count; |
863 | if (idle->idle_enter) | 868 | if (idle->idle_enter) |
864 | idle_count++; | 869 | idle_count++; |
865 | spin_unlock(&idle->lock); | 870 | smp_rmb(); |
871 | if (idle->sequence != sequence) | ||
872 | goto repeat; | ||
866 | return sprintf(buf, "%llu\n", idle_count); | 873 | return sprintf(buf, "%llu\n", idle_count); |
867 | } | 874 | } |
868 | static SYSDEV_ATTR(idle_count, 0444, show_idle_count, NULL); | 875 | static SYSDEV_ATTR(idle_count, 0444, show_idle_count, NULL); |
@@ -872,15 +879,22 @@ static ssize_t show_idle_time(struct sys_device *dev, | |||
872 | { | 879 | { |
873 | struct s390_idle_data *idle; | 880 | struct s390_idle_data *idle; |
874 | unsigned long long now, idle_time, idle_enter; | 881 | unsigned long long now, idle_time, idle_enter; |
882 | unsigned int sequence; | ||
875 | 883 | ||
876 | idle = &per_cpu(s390_idle, dev->id); | 884 | idle = &per_cpu(s390_idle, dev->id); |
877 | spin_lock(&idle->lock); | ||
878 | now = get_clock(); | 885 | now = get_clock(); |
886 | repeat: | ||
887 | sequence = idle->sequence; | ||
888 | smp_rmb(); | ||
889 | if (sequence & 1) | ||
890 | goto repeat; | ||
879 | idle_time = idle->idle_time; | 891 | idle_time = idle->idle_time; |
880 | idle_enter = idle->idle_enter; | 892 | idle_enter = idle->idle_enter; |
881 | if (idle_enter != 0ULL && idle_enter < now) | 893 | if (idle_enter != 0ULL && idle_enter < now) |
882 | idle_time += now - idle_enter; | 894 | idle_time += now - idle_enter; |
883 | spin_unlock(&idle->lock); | 895 | smp_rmb(); |
896 | if (idle->sequence != sequence) | ||
897 | goto repeat; | ||
884 | return sprintf(buf, "%llu\n", idle_time >> 12); | 898 | return sprintf(buf, "%llu\n", idle_time >> 12); |
885 | } | 899 | } |
886 | static SYSDEV_ATTR(idle_time_us, 0444, show_idle_time, NULL); | 900 | static SYSDEV_ATTR(idle_time_us, 0444, show_idle_time, NULL); |
@@ -908,11 +922,7 @@ static int __cpuinit smp_cpu_notify(struct notifier_block *self, | |||
908 | case CPU_ONLINE: | 922 | case CPU_ONLINE: |
909 | case CPU_ONLINE_FROZEN: | 923 | case CPU_ONLINE_FROZEN: |
910 | idle = &per_cpu(s390_idle, cpu); | 924 | idle = &per_cpu(s390_idle, cpu); |
911 | spin_lock_irq(&idle->lock); | 925 | memset(idle, 0, sizeof(struct s390_idle_data)); |
912 | idle->idle_enter = 0; | ||
913 | idle->idle_time = 0; | ||
914 | idle->idle_count = 0; | ||
915 | spin_unlock_irq(&idle->lock); | ||
916 | if (sysfs_create_group(&s->kobj, &cpu_online_attr_group)) | 926 | if (sysfs_create_group(&s->kobj, &cpu_online_attr_group)) |
917 | return NOTIFY_BAD; | 927 | return NOTIFY_BAD; |
918 | break; | 928 | break; |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 215330a2c128..d4c8e9c47c81 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <linux/notifier.h> | 36 | #include <linux/notifier.h> |
37 | #include <linux/clocksource.h> | 37 | #include <linux/clocksource.h> |
38 | #include <linux/clockchips.h> | 38 | #include <linux/clockchips.h> |
39 | #include <linux/bootmem.h> | ||
40 | #include <asm/uaccess.h> | 39 | #include <asm/uaccess.h> |
41 | #include <asm/delay.h> | 40 | #include <asm/delay.h> |
42 | #include <asm/s390_ext.h> | 41 | #include <asm/s390_ext.h> |
@@ -62,9 +61,6 @@ | |||
62 | 61 | ||
63 | u64 sched_clock_base_cc = -1; /* Force to data section. */ | 62 | u64 sched_clock_base_cc = -1; /* Force to data section. */ |
64 | 63 | ||
65 | static ext_int_info_t ext_int_info_cc; | ||
66 | static ext_int_info_t ext_int_etr_cc; | ||
67 | |||
68 | static DEFINE_PER_CPU(struct clock_event_device, comparators); | 64 | static DEFINE_PER_CPU(struct clock_event_device, comparators); |
69 | 65 | ||
70 | /* | 66 | /* |
@@ -255,15 +251,11 @@ void __init time_init(void) | |||
255 | stp_reset(); | 251 | stp_reset(); |
256 | 252 | ||
257 | /* request the clock comparator external interrupt */ | 253 | /* request the clock comparator external interrupt */ |
258 | if (register_early_external_interrupt(0x1004, | 254 | if (register_external_interrupt(0x1004, clock_comparator_interrupt)) |
259 | clock_comparator_interrupt, | ||
260 | &ext_int_info_cc) != 0) | ||
261 | panic("Couldn't request external interrupt 0x1004"); | 255 | panic("Couldn't request external interrupt 0x1004"); |
262 | 256 | ||
263 | /* request the timing alert external interrupt */ | 257 | /* request the timing alert external interrupt */ |
264 | if (register_early_external_interrupt(0x1406, | 258 | if (register_external_interrupt(0x1406, timing_alert_interrupt)) |
265 | timing_alert_interrupt, | ||
266 | &ext_int_etr_cc) != 0) | ||
267 | panic("Couldn't request external interrupt 0x1406"); | 259 | panic("Couldn't request external interrupt 0x1406"); |
268 | 260 | ||
269 | if (clocksource_register(&clocksource_tod) != 0) | 261 | if (clocksource_register(&clocksource_tod) != 0) |
@@ -1445,14 +1437,14 @@ static void __init stp_reset(void) | |||
1445 | { | 1437 | { |
1446 | int rc; | 1438 | int rc; |
1447 | 1439 | ||
1448 | stp_page = alloc_bootmem_pages(PAGE_SIZE); | 1440 | stp_page = (void *) get_zeroed_page(GFP_ATOMIC); |
1449 | rc = chsc_sstpc(stp_page, STP_OP_CTRL, 0x0000); | 1441 | rc = chsc_sstpc(stp_page, STP_OP_CTRL, 0x0000); |
1450 | if (rc == 0) | 1442 | if (rc == 0) |
1451 | set_bit(CLOCK_SYNC_HAS_STP, &clock_sync_flags); | 1443 | set_bit(CLOCK_SYNC_HAS_STP, &clock_sync_flags); |
1452 | else if (stp_online) { | 1444 | else if (stp_online) { |
1453 | pr_warning("The real or virtual hardware system does " | 1445 | pr_warning("The real or virtual hardware system does " |
1454 | "not provide an STP interface\n"); | 1446 | "not provide an STP interface\n"); |
1455 | free_bootmem((unsigned long) stp_page, PAGE_SIZE); | 1447 | free_page((unsigned long) stp_page); |
1456 | stp_page = NULL; | 1448 | stp_page = NULL; |
1457 | stp_online = 0; | 1449 | stp_online = 0; |
1458 | } | 1450 | } |
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index c8eb7255332b..c41bb0d416e1 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
@@ -25,13 +25,9 @@ | |||
25 | #include <asm/irq_regs.h> | 25 | #include <asm/irq_regs.h> |
26 | #include <asm/cputime.h> | 26 | #include <asm/cputime.h> |
27 | 27 | ||
28 | static ext_int_info_t ext_int_info_timer; | ||
29 | |||
30 | static DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); | 28 | static DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); |
31 | 29 | ||
32 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle) = { | 30 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle); |
33 | .lock = __SPIN_LOCK_UNLOCKED(s390_idle.lock) | ||
34 | }; | ||
35 | 31 | ||
36 | static inline __u64 get_vtimer(void) | 32 | static inline __u64 get_vtimer(void) |
37 | { | 33 | { |
@@ -153,11 +149,13 @@ void vtime_start_cpu(void) | |||
153 | vq->elapsed -= vq->idle - S390_lowcore.async_enter_timer; | 149 | vq->elapsed -= vq->idle - S390_lowcore.async_enter_timer; |
154 | } | 150 | } |
155 | 151 | ||
156 | spin_lock(&idle->lock); | 152 | idle->sequence++; |
153 | smp_wmb(); | ||
157 | idle->idle_time += idle_time; | 154 | idle->idle_time += idle_time; |
158 | idle->idle_enter = 0ULL; | 155 | idle->idle_enter = 0ULL; |
159 | idle->idle_count++; | 156 | idle->idle_count++; |
160 | spin_unlock(&idle->lock); | 157 | smp_wmb(); |
158 | idle->sequence++; | ||
161 | } | 159 | } |
162 | 160 | ||
163 | void vtime_stop_cpu(void) | 161 | void vtime_stop_cpu(void) |
@@ -244,15 +242,23 @@ cputime64_t s390_get_idle_time(int cpu) | |||
244 | { | 242 | { |
245 | struct s390_idle_data *idle; | 243 | struct s390_idle_data *idle; |
246 | unsigned long long now, idle_time, idle_enter; | 244 | unsigned long long now, idle_time, idle_enter; |
245 | unsigned int sequence; | ||
247 | 246 | ||
248 | idle = &per_cpu(s390_idle, cpu); | 247 | idle = &per_cpu(s390_idle, cpu); |
249 | spin_lock(&idle->lock); | 248 | |
250 | now = get_clock(); | 249 | now = get_clock(); |
250 | repeat: | ||
251 | sequence = idle->sequence; | ||
252 | smp_rmb(); | ||
253 | if (sequence & 1) | ||
254 | goto repeat; | ||
251 | idle_time = 0; | 255 | idle_time = 0; |
252 | idle_enter = idle->idle_enter; | 256 | idle_enter = idle->idle_enter; |
253 | if (idle_enter != 0ULL && idle_enter < now) | 257 | if (idle_enter != 0ULL && idle_enter < now) |
254 | idle_time = now - idle_enter; | 258 | idle_time = now - idle_enter; |
255 | spin_unlock(&idle->lock); | 259 | smp_rmb(); |
260 | if (idle->sequence != sequence) | ||
261 | goto repeat; | ||
256 | return idle_time; | 262 | return idle_time; |
257 | } | 263 | } |
258 | 264 | ||
@@ -557,8 +563,7 @@ void init_cpu_vtimer(void) | |||
557 | void __init vtime_init(void) | 563 | void __init vtime_init(void) |
558 | { | 564 | { |
559 | /* request the cpu timer external interrupt */ | 565 | /* request the cpu timer external interrupt */ |
560 | if (register_early_external_interrupt(0x1005, do_cpu_timer_interrupt, | 566 | if (register_external_interrupt(0x1005, do_cpu_timer_interrupt)) |
561 | &ext_int_info_timer) != 0) | ||
562 | panic("Couldn't request external interrupt 0x1005"); | 567 | panic("Couldn't request external interrupt 0x1005"); |
563 | 568 | ||
564 | /* Enable cpu timer interrupts on the boot cpu. */ | 569 | /* Enable cpu timer interrupts on the boot cpu. */ |
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index c18b21d6991c..90d9d1ba258b 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <asm/lowcore.h> | 25 | #include <asm/lowcore.h> |
26 | #include <asm/pgtable.h> | 26 | #include <asm/pgtable.h> |
27 | #include <asm/nmi.h> | 27 | #include <asm/nmi.h> |
28 | #include <asm/system.h> | ||
28 | #include "kvm-s390.h" | 29 | #include "kvm-s390.h" |
29 | #include "gaccess.h" | 30 | #include "gaccess.h" |
30 | 31 | ||
@@ -69,6 +70,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { | |||
69 | { NULL } | 70 | { NULL } |
70 | }; | 71 | }; |
71 | 72 | ||
73 | static unsigned long long *facilities; | ||
72 | 74 | ||
73 | /* Section: not file related */ | 75 | /* Section: not file related */ |
74 | void kvm_arch_hardware_enable(void *garbage) | 76 | void kvm_arch_hardware_enable(void *garbage) |
@@ -288,6 +290,7 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) | |||
288 | vcpu->arch.sie_block->gmsor = vcpu->kvm->arch.guest_origin; | 290 | vcpu->arch.sie_block->gmsor = vcpu->kvm->arch.guest_origin; |
289 | vcpu->arch.sie_block->ecb = 2; | 291 | vcpu->arch.sie_block->ecb = 2; |
290 | vcpu->arch.sie_block->eca = 0xC1002001U; | 292 | vcpu->arch.sie_block->eca = 0xC1002001U; |
293 | vcpu->arch.sie_block->fac = (int) (long) facilities; | ||
291 | hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS); | 294 | hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS); |
292 | tasklet_init(&vcpu->arch.tasklet, kvm_s390_tasklet, | 295 | tasklet_init(&vcpu->arch.tasklet, kvm_s390_tasklet, |
293 | (unsigned long) vcpu); | 296 | (unsigned long) vcpu); |
@@ -739,11 +742,29 @@ gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn) | |||
739 | 742 | ||
740 | static int __init kvm_s390_init(void) | 743 | static int __init kvm_s390_init(void) |
741 | { | 744 | { |
742 | return kvm_init(NULL, sizeof(struct kvm_vcpu), THIS_MODULE); | 745 | int ret; |
746 | ret = kvm_init(NULL, sizeof(struct kvm_vcpu), THIS_MODULE); | ||
747 | if (ret) | ||
748 | return ret; | ||
749 | |||
750 | /* | ||
751 | * guests can ask for up to 255+1 double words, we need a full page | ||
752 | * to hold the maximum amount of facilites. On the other hand, we | ||
753 | * only set facilities that are known to work in KVM. | ||
754 | */ | ||
755 | facilities = (unsigned long long *) get_zeroed_page(GFP_DMA); | ||
756 | if (!facilities) { | ||
757 | kvm_exit(); | ||
758 | return -ENOMEM; | ||
759 | } | ||
760 | stfle(facilities, 1); | ||
761 | facilities[0] &= 0xff00fff3f0700000ULL; | ||
762 | return 0; | ||
743 | } | 763 | } |
744 | 764 | ||
745 | static void __exit kvm_s390_exit(void) | 765 | static void __exit kvm_s390_exit(void) |
746 | { | 766 | { |
767 | free_page((unsigned long) facilities); | ||
747 | kvm_exit(); | 768 | kvm_exit(); |
748 | } | 769 | } |
749 | 770 | ||
diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c index 93ecd06e1a74..d426aac8095d 100644 --- a/arch/s390/kvm/priv.c +++ b/arch/s390/kvm/priv.c | |||
@@ -158,7 +158,7 @@ static int handle_stfl(struct kvm_vcpu *vcpu) | |||
158 | 158 | ||
159 | vcpu->stat.instruction_stfl++; | 159 | vcpu->stat.instruction_stfl++; |
160 | /* only pass the facility bits, which we can handle */ | 160 | /* only pass the facility bits, which we can handle */ |
161 | facility_list &= 0xfe00fff3; | 161 | facility_list &= 0xff00fff3; |
162 | 162 | ||
163 | rc = copy_to_guest(vcpu, offsetof(struct _lowcore, stfl_fac_list), | 163 | rc = copy_to_guest(vcpu, offsetof(struct _lowcore, stfl_fac_list), |
164 | &facility_list, sizeof(facility_list)); | 164 | &facility_list, sizeof(facility_list)); |
diff --git a/arch/s390/lib/Makefile b/arch/s390/lib/Makefile index ab6735df2d21..97975ec7a274 100644 --- a/arch/s390/lib/Makefile +++ b/arch/s390/lib/Makefile | |||
@@ -3,6 +3,6 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | lib-y += delay.o string.o uaccess_std.o uaccess_pt.o | 5 | lib-y += delay.o string.o uaccess_std.o uaccess_pt.o |
6 | obj-$(CONFIG_32BIT) += div64.o qrnnd.o | 6 | obj-$(CONFIG_32BIT) += div64.o qrnnd.o ucmpdi2.o |
7 | lib-$(CONFIG_64BIT) += uaccess_mvcos.o | 7 | lib-$(CONFIG_64BIT) += uaccess_mvcos.o |
8 | lib-$(CONFIG_SMP) += spinlock.o | 8 | lib-$(CONFIG_SMP) += spinlock.o |
diff --git a/arch/s390/lib/delay.c b/arch/s390/lib/delay.c index 3f5f680726ed..97c1eca83cc2 100644 --- a/arch/s390/lib/delay.c +++ b/arch/s390/lib/delay.c | |||
@@ -36,9 +36,11 @@ static void __udelay_disabled(unsigned long usecs) | |||
36 | cr0 = (cr0_saved & 0xffff00e0) | 0x00000800; | 36 | cr0 = (cr0_saved & 0xffff00e0) | 0x00000800; |
37 | __ctl_load(cr0 , 0, 0); | 37 | __ctl_load(cr0 , 0, 0); |
38 | mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT; | 38 | mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT; |
39 | lockdep_off(); | ||
39 | trace_hardirqs_on(); | 40 | trace_hardirqs_on(); |
40 | __load_psw_mask(mask); | 41 | __load_psw_mask(mask); |
41 | local_irq_disable(); | 42 | local_irq_disable(); |
43 | lockdep_on(); | ||
42 | __ctl_load(cr0_saved, 0, 0); | 44 | __ctl_load(cr0_saved, 0, 0); |
43 | local_tick_enable(clock_saved); | 45 | local_tick_enable(clock_saved); |
44 | set_clock_comparator(S390_lowcore.clock_comparator); | 46 | set_clock_comparator(S390_lowcore.clock_comparator); |
diff --git a/arch/s390/lib/uaccess_pt.c b/arch/s390/lib/uaccess_pt.c index b0b84c35b0ad..cb5d59eab0ee 100644 --- a/arch/s390/lib/uaccess_pt.c +++ b/arch/s390/lib/uaccess_pt.c | |||
@@ -66,7 +66,7 @@ static int __handle_fault(struct mm_struct *mm, unsigned long address, | |||
66 | } | 66 | } |
67 | 67 | ||
68 | survive: | 68 | survive: |
69 | fault = handle_mm_fault(mm, vma, address, write_access); | 69 | fault = handle_mm_fault(mm, vma, address, write_access ? FAULT_FLAG_WRITE : 0); |
70 | if (unlikely(fault & VM_FAULT_ERROR)) { | 70 | if (unlikely(fault & VM_FAULT_ERROR)) { |
71 | if (fault & VM_FAULT_OOM) | 71 | if (fault & VM_FAULT_OOM) |
72 | goto out_of_memory; | 72 | goto out_of_memory; |
diff --git a/arch/s390/lib/ucmpdi2.c b/arch/s390/lib/ucmpdi2.c new file mode 100644 index 000000000000..3e05ff532582 --- /dev/null +++ b/arch/s390/lib/ucmpdi2.c | |||
@@ -0,0 +1,26 @@ | |||
1 | #include <linux/module.h> | ||
2 | |||
3 | union ull_union { | ||
4 | unsigned long long ull; | ||
5 | struct { | ||
6 | unsigned int high; | ||
7 | unsigned int low; | ||
8 | } ui; | ||
9 | }; | ||
10 | |||
11 | int __ucmpdi2(unsigned long long a, unsigned long long b) | ||
12 | { | ||
13 | union ull_union au = {.ull = a}; | ||
14 | union ull_union bu = {.ull = b}; | ||
15 | |||
16 | if (au.ui.high < bu.ui.high) | ||
17 | return 0; | ||
18 | else if (au.ui.high > bu.ui.high) | ||
19 | return 2; | ||
20 | if (au.ui.low < bu.ui.low) | ||
21 | return 0; | ||
22 | else if (au.ui.low > bu.ui.low) | ||
23 | return 2; | ||
24 | return 1; | ||
25 | } | ||
26 | EXPORT_SYMBOL(__ucmpdi2); | ||
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 220a152c836c..e5e119fe03b2 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/compat.h> | 22 | #include <linux/compat.h> |
23 | #include <linux/smp.h> | 23 | #include <linux/smp.h> |
24 | #include <linux/kdebug.h> | 24 | #include <linux/kdebug.h> |
25 | #include <linux/smp_lock.h> | ||
26 | #include <linux/init.h> | 25 | #include <linux/init.h> |
27 | #include <linux/console.h> | 26 | #include <linux/console.h> |
28 | #include <linux/module.h> | 27 | #include <linux/module.h> |
@@ -352,7 +351,7 @@ good_area: | |||
352 | * make sure we exit gracefully rather than endlessly redo | 351 | * make sure we exit gracefully rather than endlessly redo |
353 | * the fault. | 352 | * the fault. |
354 | */ | 353 | */ |
355 | fault = handle_mm_fault(mm, vma, address, write); | 354 | fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); |
356 | if (unlikely(fault & VM_FAULT_ERROR)) { | 355 | if (unlikely(fault & VM_FAULT_ERROR)) { |
357 | if (fault & VM_FAULT_OOM) { | 356 | if (fault & VM_FAULT_OOM) { |
358 | up_read(&mm->mmap_sem); | 357 | up_read(&mm->mmap_sem); |
diff --git a/arch/s390/power/swsusp_asm64.S b/arch/s390/power/swsusp_asm64.S index 3c74e7d827c9..76d688da32fa 100644 --- a/arch/s390/power/swsusp_asm64.S +++ b/arch/s390/power/swsusp_asm64.S | |||
@@ -109,10 +109,11 @@ swsusp_arch_resume: | |||
109 | aghi %r15,-STACK_FRAME_OVERHEAD | 109 | aghi %r15,-STACK_FRAME_OVERHEAD |
110 | stg %r1,__SF_BACKCHAIN(%r15) | 110 | stg %r1,__SF_BACKCHAIN(%r15) |
111 | 111 | ||
112 | #ifdef CONFIG_SMP | ||
112 | /* Save boot cpu number */ | 113 | /* Save boot cpu number */ |
113 | brasl %r14,smp_get_phys_cpu_id | 114 | brasl %r14,smp_get_phys_cpu_id |
114 | lgr %r10,%r2 | 115 | lgr %r10,%r2 |
115 | 116 | #endif | |
116 | /* Deactivate DAT */ | 117 | /* Deactivate DAT */ |
117 | stnsm __SF_EMPTY(%r15),0xfb | 118 | stnsm __SF_EMPTY(%r15),0xfb |
118 | 119 | ||
@@ -177,11 +178,12 @@ swsusp_arch_resume: | |||
177 | /* Pointer to save arae */ | 178 | /* Pointer to save arae */ |
178 | lghi %r13,0x1000 | 179 | lghi %r13,0x1000 |
179 | 180 | ||
181 | #ifdef CONFIG_SMP | ||
180 | /* Switch CPUs */ | 182 | /* Switch CPUs */ |
181 | lgr %r2,%r10 /* get cpu id */ | 183 | lgr %r2,%r10 /* get cpu id */ |
182 | llgf %r3,0x318(%r13) | 184 | llgf %r3,0x318(%r13) |
183 | brasl %r14,smp_switch_boot_cpu_in_resume | 185 | brasl %r14,smp_switch_boot_cpu_in_resume |
184 | 186 | #endif | |
185 | /* Restore prefix register */ | 187 | /* Restore prefix register */ |
186 | spx 0x318(%r13) | 188 | spx 0x318(%r13) |
187 | 189 | ||
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index ac1c620d1c7d..e2bdd7b94fd9 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -15,7 +15,7 @@ config SUPERH | |||
15 | select HAVE_IOREMAP_PROT if MMU | 15 | select HAVE_IOREMAP_PROT if MMU |
16 | select HAVE_ARCH_TRACEHOOK | 16 | select HAVE_ARCH_TRACEHOOK |
17 | select HAVE_DMA_API_DEBUG | 17 | select HAVE_DMA_API_DEBUG |
18 | select HAVE_PERF_COUNTER | 18 | select HAVE_PERF_COUNTERS |
19 | select RTC_LIB | 19 | select RTC_LIB |
20 | select GENERIC_ATOMIC64 | 20 | select GENERIC_ATOMIC64 |
21 | help | 21 | help |
@@ -71,6 +71,9 @@ config GENERIC_HARDIRQS_NO__DO_IRQ | |||
71 | config GENERIC_IRQ_PROBE | 71 | config GENERIC_IRQ_PROBE |
72 | def_bool y | 72 | def_bool y |
73 | 73 | ||
74 | config IRQ_PER_CPU | ||
75 | def_bool y | ||
76 | |||
74 | config GENERIC_GPIO | 77 | config GENERIC_GPIO |
75 | def_bool n | 78 | def_bool n |
76 | 79 | ||
@@ -151,6 +154,9 @@ config ARCH_NO_VIRT_TO_BUS | |||
151 | config ARCH_HAS_DEFAULT_IDLE | 154 | config ARCH_HAS_DEFAULT_IDLE |
152 | def_bool y | 155 | def_bool y |
153 | 156 | ||
157 | config ARCH_HAS_CPU_IDLE_WAIT | ||
158 | def_bool y | ||
159 | |||
154 | config IO_TRAPPED | 160 | config IO_TRAPPED |
155 | bool | 161 | bool |
156 | 162 | ||
@@ -411,6 +417,8 @@ config CPU_SUBTYPE_SH7786 | |||
411 | select CPU_HAS_PTEAEX | 417 | select CPU_HAS_PTEAEX |
412 | select ARCH_SPARSEMEM_ENABLE | 418 | select ARCH_SPARSEMEM_ENABLE |
413 | select SYS_SUPPORTS_NUMA | 419 | select SYS_SUPPORTS_NUMA |
420 | select SYS_SUPPORTS_SMP | ||
421 | select GENERIC_CLOCKEVENTS_BROADCAST if SMP | ||
414 | 422 | ||
415 | config CPU_SUBTYPE_SHX3 | 423 | config CPU_SUBTYPE_SHX3 |
416 | bool "Support SH-X3 processor" | 424 | bool "Support SH-X3 processor" |
@@ -648,7 +656,7 @@ config NR_CPUS | |||
648 | int "Maximum number of CPUs (2-32)" | 656 | int "Maximum number of CPUs (2-32)" |
649 | range 2 32 | 657 | range 2 32 |
650 | depends on SMP | 658 | depends on SMP |
651 | default "4" if CPU_SHX3 | 659 | default "4" if CPU_SUBTYPE_SHX3 |
652 | default "2" | 660 | default "2" |
653 | help | 661 | help |
654 | This allows you to specify the maximum number of CPUs which this | 662 | This allows you to specify the maximum number of CPUs which this |
diff --git a/arch/sh/Kconfig.debug b/arch/sh/Kconfig.debug index 8ece0b5bd028..39224b57c6ef 100644 --- a/arch/sh/Kconfig.debug +++ b/arch/sh/Kconfig.debug | |||
@@ -61,10 +61,6 @@ config EARLY_PRINTK | |||
61 | select both the EARLY_SCIF_CONSOLE and SH_STANDARD_BIOS, using | 61 | select both the EARLY_SCIF_CONSOLE and SH_STANDARD_BIOS, using |
62 | the kernel command line option to toggle back and forth. | 62 | the kernel command line option to toggle back and forth. |
63 | 63 | ||
64 | config DEBUG_BOOTMEM | ||
65 | depends on DEBUG_KERNEL | ||
66 | bool "Debug BOOTMEM initialization" | ||
67 | |||
68 | config DEBUG_STACKOVERFLOW | 64 | config DEBUG_STACKOVERFLOW |
69 | bool "Check for stack overflows" | 65 | bool "Check for stack overflows" |
70 | depends on DEBUG_KERNEL && SUPERH32 | 66 | depends on DEBUG_KERNEL && SUPERH32 |
diff --git a/arch/sh/boards/mach-se/7206/io.c b/arch/sh/boards/mach-se/7206/io.c index 9c3a33210d61..180455642a43 100644 --- a/arch/sh/boards/mach-se/7206/io.c +++ b/arch/sh/boards/mach-se/7206/io.c | |||
@@ -50,7 +50,7 @@ unsigned char se7206_inb_p(unsigned long port) | |||
50 | 50 | ||
51 | unsigned short se7206_inw(unsigned long port) | 51 | unsigned short se7206_inw(unsigned long port) |
52 | { | 52 | { |
53 | return *port2adr(port);; | 53 | return *port2adr(port); |
54 | } | 54 | } |
55 | 55 | ||
56 | void se7206_outb(unsigned char value, unsigned long port) | 56 | void se7206_outb(unsigned char value, unsigned long port) |
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index 9cd04bd558b8..8fed45a2fb85 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c | |||
@@ -19,10 +19,13 @@ | |||
19 | #include <linux/smc91x.h> | 19 | #include <linux/smc91x.h> |
20 | #include <linux/gpio.h> | 20 | #include <linux/gpio.h> |
21 | #include <linux/input.h> | 21 | #include <linux/input.h> |
22 | #include <linux/usb/r8a66597.h> | ||
22 | #include <video/sh_mobile_lcdc.h> | 23 | #include <video/sh_mobile_lcdc.h> |
23 | #include <media/sh_mobile_ceu.h> | 24 | #include <media/sh_mobile_ceu.h> |
24 | #include <asm/io.h> | 25 | #include <asm/io.h> |
25 | #include <asm/heartbeat.h> | 26 | #include <asm/heartbeat.h> |
27 | #include <asm/sh_eth.h> | ||
28 | #include <asm/clock.h> | ||
26 | #include <asm/sh_keysc.h> | 29 | #include <asm/sh_keysc.h> |
27 | #include <cpu/sh7724.h> | 30 | #include <cpu/sh7724.h> |
28 | #include <mach-se/mach/se7724.h> | 31 | #include <mach-se/mach/se7724.h> |
@@ -272,6 +275,62 @@ static struct platform_device keysc_device = { | |||
272 | }, | 275 | }, |
273 | }; | 276 | }; |
274 | 277 | ||
278 | /* SH Eth */ | ||
279 | static struct resource sh_eth_resources[] = { | ||
280 | [0] = { | ||
281 | .start = SH_ETH_ADDR, | ||
282 | .end = SH_ETH_ADDR + 0x1FC, | ||
283 | .flags = IORESOURCE_MEM, | ||
284 | }, | ||
285 | [1] = { | ||
286 | .start = 91, | ||
287 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
288 | }, | ||
289 | }; | ||
290 | |||
291 | struct sh_eth_plat_data sh_eth_plat = { | ||
292 | .phy = 0x1f, /* SMSC LAN8187 */ | ||
293 | .edmac_endian = EDMAC_LITTLE_ENDIAN, | ||
294 | }; | ||
295 | |||
296 | static struct platform_device sh_eth_device = { | ||
297 | .name = "sh-eth", | ||
298 | .id = 0, | ||
299 | .dev = { | ||
300 | .platform_data = &sh_eth_plat, | ||
301 | }, | ||
302 | .num_resources = ARRAY_SIZE(sh_eth_resources), | ||
303 | .resource = sh_eth_resources, | ||
304 | }; | ||
305 | |||
306 | static struct r8a66597_platdata sh7724_usb0_host_data = { | ||
307 | }; | ||
308 | |||
309 | static struct resource sh7724_usb0_host_resources[] = { | ||
310 | [0] = { | ||
311 | .start = 0xa4d80000, | ||
312 | .end = 0xa4d800ff, | ||
313 | .flags = IORESOURCE_MEM, | ||
314 | }, | ||
315 | [1] = { | ||
316 | .start = 65, | ||
317 | .end = 65, | ||
318 | .flags = IORESOURCE_IRQ | IRQF_TRIGGER_LOW, | ||
319 | }, | ||
320 | }; | ||
321 | |||
322 | static struct platform_device sh7724_usb0_host_device = { | ||
323 | .name = "r8a66597_hcd", | ||
324 | .id = 0, | ||
325 | .dev = { | ||
326 | .dma_mask = NULL, /* not use dma */ | ||
327 | .coherent_dma_mask = 0xffffffff, | ||
328 | .platform_data = &sh7724_usb0_host_data, | ||
329 | }, | ||
330 | .num_resources = ARRAY_SIZE(sh7724_usb0_host_resources), | ||
331 | .resource = sh7724_usb0_host_resources, | ||
332 | }; | ||
333 | |||
275 | static struct platform_device *ms7724se_devices[] __initdata = { | 334 | static struct platform_device *ms7724se_devices[] __initdata = { |
276 | &heartbeat_device, | 335 | &heartbeat_device, |
277 | &smc91x_eth_device, | 336 | &smc91x_eth_device, |
@@ -280,11 +339,62 @@ static struct platform_device *ms7724se_devices[] __initdata = { | |||
280 | &ceu0_device, | 339 | &ceu0_device, |
281 | &ceu1_device, | 340 | &ceu1_device, |
282 | &keysc_device, | 341 | &keysc_device, |
342 | &sh_eth_device, | ||
343 | &sh7724_usb0_host_device, | ||
283 | }; | 344 | }; |
284 | 345 | ||
346 | #define EEPROM_OP 0xBA206000 | ||
347 | #define EEPROM_ADR 0xBA206004 | ||
348 | #define EEPROM_DATA 0xBA20600C | ||
349 | #define EEPROM_STAT 0xBA206010 | ||
350 | #define EEPROM_STRT 0xBA206014 | ||
351 | static int __init sh_eth_is_eeprom_ready(void) | ||
352 | { | ||
353 | int t = 10000; | ||
354 | |||
355 | while (t--) { | ||
356 | if (!ctrl_inw(EEPROM_STAT)) | ||
357 | return 1; | ||
358 | cpu_relax(); | ||
359 | } | ||
360 | |||
361 | printk(KERN_ERR "ms7724se can not access to eeprom\n"); | ||
362 | return 0; | ||
363 | } | ||
364 | |||
365 | static void __init sh_eth_init(void) | ||
366 | { | ||
367 | int i; | ||
368 | u16 mac[3]; | ||
369 | |||
370 | /* check EEPROM status */ | ||
371 | if (!sh_eth_is_eeprom_ready()) | ||
372 | return; | ||
373 | |||
374 | /* read MAC addr from EEPROM */ | ||
375 | for (i = 0 ; i < 3 ; i++) { | ||
376 | ctrl_outw(0x0, EEPROM_OP); /* read */ | ||
377 | ctrl_outw(i*2, EEPROM_ADR); | ||
378 | ctrl_outw(0x1, EEPROM_STRT); | ||
379 | if (!sh_eth_is_eeprom_ready()) | ||
380 | return; | ||
381 | |||
382 | mac[i] = ctrl_inw(EEPROM_DATA); | ||
383 | mac[i] = ((mac[i] & 0xFF) << 8) | (mac[i] >> 8); /* swap */ | ||
384 | } | ||
385 | |||
386 | /* reset sh-eth */ | ||
387 | ctrl_outl(0x1, SH_ETH_ADDR + 0x0); | ||
388 | |||
389 | /* set MAC addr */ | ||
390 | ctrl_outl(((mac[0] << 16) | (mac[1])), SH_ETH_MAHR); | ||
391 | ctrl_outl((mac[2]), SH_ETH_MALR); | ||
392 | } | ||
393 | |||
285 | #define SW4140 0xBA201000 | 394 | #define SW4140 0xBA201000 |
286 | #define FPGA_OUT 0xBA200400 | 395 | #define FPGA_OUT 0xBA200400 |
287 | #define PORT_HIZA 0xA4050158 | 396 | #define PORT_HIZA 0xA4050158 |
397 | #define PORT_MSELCRB 0xA4050182 | ||
288 | 398 | ||
289 | #define SW41_A 0x0100 | 399 | #define SW41_A 0x0100 |
290 | #define SW41_B 0x0200 | 400 | #define SW41_B 0x0200 |
@@ -294,6 +404,7 @@ static struct platform_device *ms7724se_devices[] __initdata = { | |||
294 | #define SW41_F 0x2000 | 404 | #define SW41_F 0x2000 |
295 | #define SW41_G 0x4000 | 405 | #define SW41_G 0x4000 |
296 | #define SW41_H 0x8000 | 406 | #define SW41_H 0x8000 |
407 | |||
297 | static int __init devices_setup(void) | 408 | static int __init devices_setup(void) |
298 | { | 409 | { |
299 | u16 sw = ctrl_inw(SW4140); /* select camera, monitor */ | 410 | u16 sw = ctrl_inw(SW4140); /* select camera, monitor */ |
@@ -302,9 +413,16 @@ static int __init devices_setup(void) | |||
302 | ctrl_outw(ctrl_inw(FPGA_OUT) & | 413 | ctrl_outw(ctrl_inw(FPGA_OUT) & |
303 | ~((1 << 1) | /* LAN */ | 414 | ~((1 << 1) | /* LAN */ |
304 | (1 << 6) | /* VIDEO DAC */ | 415 | (1 << 6) | /* VIDEO DAC */ |
305 | (1 << 12)), /* USB0 */ | 416 | (1 << 12) | /* USB0 */ |
417 | (1 << 14)), /* RMII */ | ||
306 | FPGA_OUT); | 418 | FPGA_OUT); |
307 | 419 | ||
420 | /* turn on USB clocks, use external clock */ | ||
421 | ctrl_outw((ctrl_inw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); | ||
422 | |||
423 | /* enable USB0 port */ | ||
424 | ctrl_outw(0x0600, 0xa40501d4); | ||
425 | |||
308 | /* enable IRQ 0,1,2 */ | 426 | /* enable IRQ 0,1,2 */ |
309 | gpio_request(GPIO_FN_INTC_IRQ0, NULL); | 427 | gpio_request(GPIO_FN_INTC_IRQ0, NULL); |
310 | gpio_request(GPIO_FN_INTC_IRQ1, NULL); | 428 | gpio_request(GPIO_FN_INTC_IRQ1, NULL); |
@@ -374,7 +492,7 @@ static int __init devices_setup(void) | |||
374 | gpio_request(GPIO_FN_VIO0_CLK, NULL); | 492 | gpio_request(GPIO_FN_VIO0_CLK, NULL); |
375 | gpio_request(GPIO_FN_VIO0_FLD, NULL); | 493 | gpio_request(GPIO_FN_VIO0_FLD, NULL); |
376 | gpio_request(GPIO_FN_VIO0_HD, NULL); | 494 | gpio_request(GPIO_FN_VIO0_HD, NULL); |
377 | platform_resource_setup_memory(&ceu0_device, "ceu", 4 << 20); | 495 | platform_resource_setup_memory(&ceu0_device, "ceu0", 4 << 20); |
378 | 496 | ||
379 | /* enable CEU1 */ | 497 | /* enable CEU1 */ |
380 | gpio_request(GPIO_FN_VIO1_D7, NULL); | 498 | gpio_request(GPIO_FN_VIO1_D7, NULL); |
@@ -389,7 +507,7 @@ static int __init devices_setup(void) | |||
389 | gpio_request(GPIO_FN_VIO1_HD, NULL); | 507 | gpio_request(GPIO_FN_VIO1_HD, NULL); |
390 | gpio_request(GPIO_FN_VIO1_VD, NULL); | 508 | gpio_request(GPIO_FN_VIO1_VD, NULL); |
391 | gpio_request(GPIO_FN_VIO1_CLK, NULL); | 509 | gpio_request(GPIO_FN_VIO1_CLK, NULL); |
392 | platform_resource_setup_memory(&ceu1_device, "ceu", 4 << 20); | 510 | platform_resource_setup_memory(&ceu1_device, "ceu1", 4 << 20); |
393 | 511 | ||
394 | /* KEYSC */ | 512 | /* KEYSC */ |
395 | gpio_request(GPIO_FN_KEYOUT5_IN5, NULL); | 513 | gpio_request(GPIO_FN_KEYOUT5_IN5, NULL); |
@@ -404,6 +522,28 @@ static int __init devices_setup(void) | |||
404 | gpio_request(GPIO_FN_KEYOUT1, NULL); | 522 | gpio_request(GPIO_FN_KEYOUT1, NULL); |
405 | gpio_request(GPIO_FN_KEYOUT0, NULL); | 523 | gpio_request(GPIO_FN_KEYOUT0, NULL); |
406 | 524 | ||
525 | /* | ||
526 | * enable SH-Eth | ||
527 | * | ||
528 | * please remove J33 pin from your board !! | ||
529 | * | ||
530 | * ms7724 board should not use GPIO_FN_LNKSTA pin | ||
531 | * So, This time PTX5 is set to input pin | ||
532 | */ | ||
533 | gpio_request(GPIO_FN_RMII_RXD0, NULL); | ||
534 | gpio_request(GPIO_FN_RMII_RXD1, NULL); | ||
535 | gpio_request(GPIO_FN_RMII_TXD0, NULL); | ||
536 | gpio_request(GPIO_FN_RMII_TXD1, NULL); | ||
537 | gpio_request(GPIO_FN_RMII_REF_CLK, NULL); | ||
538 | gpio_request(GPIO_FN_RMII_TX_EN, NULL); | ||
539 | gpio_request(GPIO_FN_RMII_RX_ER, NULL); | ||
540 | gpio_request(GPIO_FN_RMII_CRS_DV, NULL); | ||
541 | gpio_request(GPIO_FN_MDIO, NULL); | ||
542 | gpio_request(GPIO_FN_MDC, NULL); | ||
543 | gpio_request(GPIO_PTX5, NULL); | ||
544 | gpio_direction_input(GPIO_PTX5); | ||
545 | sh_eth_init(); | ||
546 | |||
407 | if (sw & SW41_B) { | 547 | if (sw & SW41_B) { |
408 | /* SVGA */ | 548 | /* SVGA */ |
409 | lcdc_info.ch[0].lcd_cfg.xres = 800; | 549 | lcdc_info.ch[0].lcd_cfg.xres = 800; |
@@ -437,7 +577,7 @@ static int __init devices_setup(void) | |||
437 | } | 577 | } |
438 | 578 | ||
439 | return platform_add_devices(ms7724se_devices, | 579 | return platform_add_devices(ms7724se_devices, |
440 | ARRAY_SIZE(ms7724se_devices)); | 580 | ARRAY_SIZE(ms7724se_devices)); |
441 | } | 581 | } |
442 | device_initcall(devices_setup); | 582 | device_initcall(devices_setup); |
443 | 583 | ||
diff --git a/arch/sh/configs/migor_defconfig b/arch/sh/configs/migor_defconfig index da627d22c009..b18cfd39cac6 100644 --- a/arch/sh/configs/migor_defconfig +++ b/arch/sh/configs/migor_defconfig | |||
@@ -309,7 +309,7 @@ CONFIG_ZERO_PAGE_OFFSET=0x00001000 | |||
309 | CONFIG_BOOT_LINK_OFFSET=0x00800000 | 309 | CONFIG_BOOT_LINK_OFFSET=0x00800000 |
310 | CONFIG_ENTRY_OFFSET=0x00001000 | 310 | CONFIG_ENTRY_OFFSET=0x00001000 |
311 | CONFIG_CMDLINE_BOOL=y | 311 | CONFIG_CMDLINE_BOOL=y |
312 | CONFIG_CMDLINE="console=ttySC0,115200 earlyprintk=serial ip=on root=/dev/nfs ip=dhcp" | 312 | CONFIG_CMDLINE="console=tty0 console=ttySC0,115200 earlyprintk=serial ip=on root=/dev/nfs ip=dhcp" |
313 | 313 | ||
314 | # | 314 | # |
315 | # Bus options | 315 | # Bus options |
@@ -858,7 +858,35 @@ CONFIG_VIDEO_SH_MOBILE_CEU=y | |||
858 | # | 858 | # |
859 | # CONFIG_VGASTATE is not set | 859 | # CONFIG_VGASTATE is not set |
860 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | 860 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set |
861 | # CONFIG_FB is not set | 861 | CONFIG_FB=y |
862 | # CONFIG_FIRMWARE_EDID is not set | ||
863 | # CONFIG_FB_DDC is not set | ||
864 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
865 | # CONFIG_FB_CFB_FILLRECT is not set | ||
866 | # CONFIG_FB_CFB_COPYAREA is not set | ||
867 | # CONFIG_FB_CFB_IMAGEBLIT is not set | ||
868 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
869 | CONFIG_FB_SYS_FILLRECT=y | ||
870 | CONFIG_FB_SYS_COPYAREA=y | ||
871 | CONFIG_FB_SYS_IMAGEBLIT=y | ||
872 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
873 | CONFIG_FB_SYS_FOPS=y | ||
874 | CONFIG_FB_DEFERRED_IO=y | ||
875 | # CONFIG_FB_SVGALIB is not set | ||
876 | # CONFIG_FB_MACMODES is not set | ||
877 | # CONFIG_FB_BACKLIGHT is not set | ||
878 | # CONFIG_FB_MODE_HELPERS is not set | ||
879 | # CONFIG_FB_TILEBLITTING is not set | ||
880 | |||
881 | # | ||
882 | # Frame buffer hardware drivers | ||
883 | # | ||
884 | # CONFIG_FB_S1D13XXX is not set | ||
885 | CONFIG_FB_SH_MOBILE_LCDC=y | ||
886 | # CONFIG_FB_VIRTUAL is not set | ||
887 | # CONFIG_FB_METRONOME is not set | ||
888 | # CONFIG_FB_MB862XX is not set | ||
889 | # CONFIG_FB_BROADSHEET is not set | ||
862 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 890 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
863 | 891 | ||
864 | # | 892 | # |
@@ -870,6 +898,27 @@ CONFIG_VIDEO_SH_MOBILE_CEU=y | |||
870 | # Console display driver support | 898 | # Console display driver support |
871 | # | 899 | # |
872 | CONFIG_DUMMY_CONSOLE=y | 900 | CONFIG_DUMMY_CONSOLE=y |
901 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
902 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
903 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
904 | CONFIG_FONTS=y | ||
905 | # CONFIG_FONT_8x8 is not set | ||
906 | # CONFIG_FONT_8x16 is not set | ||
907 | # CONFIG_FONT_6x11 is not set | ||
908 | # CONFIG_FONT_7x14 is not set | ||
909 | # CONFIG_FONT_PEARL_8x8 is not set | ||
910 | # CONFIG_FONT_ACORN_8x8 is not set | ||
911 | CONFIG_FONT_MINI_4x6=y | ||
912 | # CONFIG_FONT_SUN8x16 is not set | ||
913 | # CONFIG_FONT_SUN12x22 is not set | ||
914 | # CONFIG_FONT_10x18 is not set | ||
915 | CONFIG_LOGO=y | ||
916 | # CONFIG_LOGO_LINUX_MONO is not set | ||
917 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
918 | # CONFIG_LOGO_LINUX_CLUT224 is not set | ||
919 | # CONFIG_LOGO_SUPERH_MONO is not set | ||
920 | CONFIG_LOGO_SUPERH_VGA16=y | ||
921 | # CONFIG_LOGO_SUPERH_CLUT224 is not set | ||
873 | # CONFIG_SOUND is not set | 922 | # CONFIG_SOUND is not set |
874 | CONFIG_HID_SUPPORT=y | 923 | CONFIG_HID_SUPPORT=y |
875 | CONFIG_HID=y | 924 | CONFIG_HID=y |
diff --git a/arch/sh/configs/se7724_defconfig b/arch/sh/configs/se7724_defconfig index 3840270283e4..3ee783a0a075 100644 --- a/arch/sh/configs/se7724_defconfig +++ b/arch/sh/configs/se7724_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.30 | 3 | # Linux kernel version: 2.6.30 |
4 | # Thu Jun 18 16:09:05 2009 | 4 | # Mon Jun 29 16:28:43 2009 |
5 | # | 5 | # |
6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
7 | CONFIG_SUPERH32=y | 7 | CONFIG_SUPERH32=y |
@@ -14,6 +14,7 @@ CONFIG_GENERIC_HWEIGHT=y | |||
14 | CONFIG_GENERIC_HARDIRQS=y | 14 | CONFIG_GENERIC_HARDIRQS=y |
15 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | 15 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y |
16 | CONFIG_GENERIC_IRQ_PROBE=y | 16 | CONFIG_GENERIC_IRQ_PROBE=y |
17 | CONFIG_IRQ_PER_CPU=y | ||
17 | CONFIG_GENERIC_GPIO=y | 18 | CONFIG_GENERIC_GPIO=y |
18 | CONFIG_GENERIC_TIME=y | 19 | CONFIG_GENERIC_TIME=y |
19 | CONFIG_GENERIC_CLOCKEVENTS=y | 20 | CONFIG_GENERIC_CLOCKEVENTS=y |
@@ -28,7 +29,9 @@ CONFIG_HAVE_LATENCYTOP_SUPPORT=y | |||
28 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 29 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
29 | CONFIG_ARCH_NO_VIRT_TO_BUS=y | 30 | CONFIG_ARCH_NO_VIRT_TO_BUS=y |
30 | CONFIG_ARCH_HAS_DEFAULT_IDLE=y | 31 | CONFIG_ARCH_HAS_DEFAULT_IDLE=y |
32 | CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y | ||
31 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 33 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
34 | CONFIG_CONSTRUCTORS=y | ||
32 | 35 | ||
33 | # | 36 | # |
34 | # General setup | 37 | # General setup |
@@ -88,10 +91,12 @@ CONFIG_TIMERFD=y | |||
88 | CONFIG_EVENTFD=y | 91 | CONFIG_EVENTFD=y |
89 | CONFIG_SHMEM=y | 92 | CONFIG_SHMEM=y |
90 | CONFIG_AIO=y | 93 | CONFIG_AIO=y |
94 | CONFIG_HAVE_PERF_COUNTERS=y | ||
91 | 95 | ||
92 | # | 96 | # |
93 | # Performance Counters | 97 | # Performance Counters |
94 | # | 98 | # |
99 | # CONFIG_PERF_COUNTERS is not set | ||
95 | CONFIG_VM_EVENT_COUNTERS=y | 100 | CONFIG_VM_EVENT_COUNTERS=y |
96 | # CONFIG_STRIP_ASM_SYMS is not set | 101 | # CONFIG_STRIP_ASM_SYMS is not set |
97 | CONFIG_COMPAT_BRK=y | 102 | CONFIG_COMPAT_BRK=y |
@@ -107,6 +112,10 @@ CONFIG_HAVE_KRETPROBES=y | |||
107 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 112 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
108 | CONFIG_HAVE_CLK=y | 113 | CONFIG_HAVE_CLK=y |
109 | CONFIG_HAVE_DMA_API_DEBUG=y | 114 | CONFIG_HAVE_DMA_API_DEBUG=y |
115 | |||
116 | # | ||
117 | # GCOV-based kernel profiling | ||
118 | # | ||
110 | # CONFIG_SLOW_WORK is not set | 119 | # CONFIG_SLOW_WORK is not set |
111 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | 120 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y |
112 | CONFIG_SLABINFO=y | 121 | CONFIG_SLABINFO=y |
@@ -119,7 +128,7 @@ CONFIG_MODULE_UNLOAD=y | |||
119 | # CONFIG_MODVERSIONS is not set | 128 | # CONFIG_MODVERSIONS is not set |
120 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 129 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
121 | CONFIG_BLOCK=y | 130 | CONFIG_BLOCK=y |
122 | # CONFIG_LBD is not set | 131 | CONFIG_LBDAF=y |
123 | # CONFIG_BLK_DEV_BSG is not set | 132 | # CONFIG_BLK_DEV_BSG is not set |
124 | # CONFIG_BLK_DEV_INTEGRITY is not set | 133 | # CONFIG_BLK_DEV_INTEGRITY is not set |
125 | 134 | ||
@@ -584,7 +593,6 @@ CONFIG_SCSI_WAIT_SCAN=m | |||
584 | # CONFIG_SCSI_SRP_ATTRS is not set | 593 | # CONFIG_SCSI_SRP_ATTRS is not set |
585 | CONFIG_SCSI_LOWLEVEL=y | 594 | CONFIG_SCSI_LOWLEVEL=y |
586 | # CONFIG_ISCSI_TCP is not set | 595 | # CONFIG_ISCSI_TCP is not set |
587 | # CONFIG_SCSI_BNX2_ISCSI is not set | ||
588 | # CONFIG_LIBFC is not set | 596 | # CONFIG_LIBFC is not set |
589 | # CONFIG_LIBFCOE is not set | 597 | # CONFIG_LIBFCOE is not set |
590 | # CONFIG_SCSI_DEBUG is not set | 598 | # CONFIG_SCSI_DEBUG is not set |
@@ -624,7 +632,7 @@ CONFIG_NET_ETHERNET=y | |||
624 | CONFIG_MII=y | 632 | CONFIG_MII=y |
625 | # CONFIG_AX88796 is not set | 633 | # CONFIG_AX88796 is not set |
626 | # CONFIG_STNIC is not set | 634 | # CONFIG_STNIC is not set |
627 | # CONFIG_SH_ETH is not set | 635 | CONFIG_SH_ETH=y |
628 | CONFIG_SMC91X=y | 636 | CONFIG_SMC91X=y |
629 | # CONFIG_ENC28J60 is not set | 637 | # CONFIG_ENC28J60 is not set |
630 | # CONFIG_ETHOC is not set | 638 | # CONFIG_ETHOC is not set |
@@ -801,6 +809,11 @@ CONFIG_SPI_BITBANG=y | |||
801 | # | 809 | # |
802 | # CONFIG_SPI_SPIDEV is not set | 810 | # CONFIG_SPI_SPIDEV is not set |
803 | # CONFIG_SPI_TLE62X0 is not set | 811 | # CONFIG_SPI_TLE62X0 is not set |
812 | |||
813 | # | ||
814 | # PPS support | ||
815 | # | ||
816 | # CONFIG_PPS is not set | ||
804 | CONFIG_ARCH_REQUIRE_GPIOLIB=y | 817 | CONFIG_ARCH_REQUIRE_GPIOLIB=y |
805 | CONFIG_GPIOLIB=y | 818 | CONFIG_GPIOLIB=y |
806 | # CONFIG_GPIO_SYSFS is not set | 819 | # CONFIG_GPIO_SYSFS is not set |
@@ -851,6 +864,8 @@ CONFIG_SSB_POSSIBLE=y | |||
851 | # CONFIG_MFD_WM8400 is not set | 864 | # CONFIG_MFD_WM8400 is not set |
852 | # CONFIG_MFD_WM8350_I2C is not set | 865 | # CONFIG_MFD_WM8350_I2C is not set |
853 | # CONFIG_MFD_PCF50633 is not set | 866 | # CONFIG_MFD_PCF50633 is not set |
867 | # CONFIG_AB3100_CORE is not set | ||
868 | # CONFIG_EZX_PCAP is not set | ||
854 | # CONFIG_REGULATOR is not set | 869 | # CONFIG_REGULATOR is not set |
855 | CONFIG_MEDIA_SUPPORT=y | 870 | CONFIG_MEDIA_SUPPORT=y |
856 | 871 | ||
@@ -1196,6 +1211,7 @@ CONFIG_RTC_DRV_PCF8563=y | |||
1196 | # CONFIG_RTC_DRV_S35390A is not set | 1211 | # CONFIG_RTC_DRV_S35390A is not set |
1197 | # CONFIG_RTC_DRV_FM3130 is not set | 1212 | # CONFIG_RTC_DRV_FM3130 is not set |
1198 | # CONFIG_RTC_DRV_RX8581 is not set | 1213 | # CONFIG_RTC_DRV_RX8581 is not set |
1214 | # CONFIG_RTC_DRV_RX8025 is not set | ||
1199 | 1215 | ||
1200 | # | 1216 | # |
1201 | # SPI RTC drivers | 1217 | # SPI RTC drivers |
@@ -1260,6 +1276,7 @@ CONFIG_FS_MBCACHE=y | |||
1260 | # CONFIG_JFS_FS is not set | 1276 | # CONFIG_JFS_FS is not set |
1261 | CONFIG_FS_POSIX_ACL=y | 1277 | CONFIG_FS_POSIX_ACL=y |
1262 | # CONFIG_XFS_FS is not set | 1278 | # CONFIG_XFS_FS is not set |
1279 | # CONFIG_GFS2_FS is not set | ||
1263 | # CONFIG_OCFS2_FS is not set | 1280 | # CONFIG_OCFS2_FS is not set |
1264 | # CONFIG_BTRFS_FS is not set | 1281 | # CONFIG_BTRFS_FS is not set |
1265 | CONFIG_FILE_LOCKING=y | 1282 | CONFIG_FILE_LOCKING=y |
diff --git a/arch/sh/include/asm/dma-mapping.h b/arch/sh/include/asm/dma-mapping.h index ea9d4f41c9d2..69d56dd4c968 100644 --- a/arch/sh/include/asm/dma-mapping.h +++ b/arch/sh/include/asm/dma-mapping.h | |||
@@ -97,7 +97,7 @@ static inline void dma_unmap_page(struct device *dev, dma_addr_t dma_address, | |||
97 | dma_unmap_single(dev, dma_address, size, dir); | 97 | dma_unmap_single(dev, dma_address, size, dir); |
98 | } | 98 | } |
99 | 99 | ||
100 | static inline void dma_sync_single(struct device *dev, dma_addr_t dma_handle, | 100 | static inline void __dma_sync_single(struct device *dev, dma_addr_t dma_handle, |
101 | size_t size, enum dma_data_direction dir) | 101 | size_t size, enum dma_data_direction dir) |
102 | { | 102 | { |
103 | #if defined(CONFIG_PCI) && !defined(CONFIG_SH_PCIDMA_NONCOHERENT) | 103 | #if defined(CONFIG_PCI) && !defined(CONFIG_SH_PCIDMA_NONCOHERENT) |
@@ -119,7 +119,7 @@ static inline void dma_sync_single_range(struct device *dev, | |||
119 | dma_cache_sync(dev, phys_to_virt(dma_handle) + offset, size, dir); | 119 | dma_cache_sync(dev, phys_to_virt(dma_handle) + offset, size, dir); |
120 | } | 120 | } |
121 | 121 | ||
122 | static inline void dma_sync_sg(struct device *dev, struct scatterlist *sg, | 122 | static inline void __dma_sync_sg(struct device *dev, struct scatterlist *sg, |
123 | int nelems, enum dma_data_direction dir) | 123 | int nelems, enum dma_data_direction dir) |
124 | { | 124 | { |
125 | int i; | 125 | int i; |
@@ -137,7 +137,7 @@ static inline void dma_sync_single_for_cpu(struct device *dev, | |||
137 | dma_addr_t dma_handle, size_t size, | 137 | dma_addr_t dma_handle, size_t size, |
138 | enum dma_data_direction dir) | 138 | enum dma_data_direction dir) |
139 | { | 139 | { |
140 | dma_sync_single(dev, dma_handle, size, dir); | 140 | __dma_sync_single(dev, dma_handle, size, dir); |
141 | debug_dma_sync_single_for_cpu(dev, dma_handle, size, dir); | 141 | debug_dma_sync_single_for_cpu(dev, dma_handle, size, dir); |
142 | } | 142 | } |
143 | 143 | ||
@@ -146,7 +146,7 @@ static inline void dma_sync_single_for_device(struct device *dev, | |||
146 | size_t size, | 146 | size_t size, |
147 | enum dma_data_direction dir) | 147 | enum dma_data_direction dir) |
148 | { | 148 | { |
149 | dma_sync_single(dev, dma_handle, size, dir); | 149 | __dma_sync_single(dev, dma_handle, size, dir); |
150 | debug_dma_sync_single_for_device(dev, dma_handle, size, dir); | 150 | debug_dma_sync_single_for_device(dev, dma_handle, size, dir); |
151 | } | 151 | } |
152 | 152 | ||
@@ -177,7 +177,7 @@ static inline void dma_sync_sg_for_cpu(struct device *dev, | |||
177 | struct scatterlist *sg, int nelems, | 177 | struct scatterlist *sg, int nelems, |
178 | enum dma_data_direction dir) | 178 | enum dma_data_direction dir) |
179 | { | 179 | { |
180 | dma_sync_sg(dev, sg, nelems, dir); | 180 | __dma_sync_sg(dev, sg, nelems, dir); |
181 | debug_dma_sync_sg_for_cpu(dev, sg, nelems, dir); | 181 | debug_dma_sync_sg_for_cpu(dev, sg, nelems, dir); |
182 | } | 182 | } |
183 | 183 | ||
@@ -185,7 +185,7 @@ static inline void dma_sync_sg_for_device(struct device *dev, | |||
185 | struct scatterlist *sg, int nelems, | 185 | struct scatterlist *sg, int nelems, |
186 | enum dma_data_direction dir) | 186 | enum dma_data_direction dir) |
187 | { | 187 | { |
188 | dma_sync_sg(dev, sg, nelems, dir); | 188 | __dma_sync_sg(dev, sg, nelems, dir); |
189 | debug_dma_sync_sg_for_device(dev, sg, nelems, dir); | 189 | debug_dma_sync_sg_for_device(dev, sg, nelems, dir); |
190 | } | 190 | } |
191 | 191 | ||
diff --git a/arch/sh/include/asm/perf_counter.h b/arch/sh/include/asm/perf_counter.h index a8153c2aa6fa..d8e6bb9c0ccc 100644 --- a/arch/sh/include/asm/perf_counter.h +++ b/arch/sh/include/asm/perf_counter.h | |||
@@ -2,6 +2,8 @@ | |||
2 | #define __ASM_SH_PERF_COUNTER_H | 2 | #define __ASM_SH_PERF_COUNTER_H |
3 | 3 | ||
4 | /* SH only supports software counters through this interface. */ | 4 | /* SH only supports software counters through this interface. */ |
5 | #define set_perf_counter_pending() do { } while (0) | 5 | static inline void set_perf_counter_pending(void) {} |
6 | |||
7 | #define PERF_COUNTER_INDEX_OFFSET 0 | ||
6 | 8 | ||
7 | #endif /* __ASM_SH_PERF_COUNTER_H */ | 9 | #endif /* __ASM_SH_PERF_COUNTER_H */ |
diff --git a/arch/sh/include/asm/syscall_32.h b/arch/sh/include/asm/syscall_32.h index 5bc34681d994..6f83f2cc45c1 100644 --- a/arch/sh/include/asm/syscall_32.h +++ b/arch/sh/include/asm/syscall_32.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #include <linux/kernel.h> | 4 | #include <linux/kernel.h> |
5 | #include <linux/sched.h> | 5 | #include <linux/sched.h> |
6 | #include <linux/err.h> | ||
6 | #include <asm/ptrace.h> | 7 | #include <asm/ptrace.h> |
7 | 8 | ||
8 | /* The system call number is given by the user in R3 */ | 9 | /* The system call number is given by the user in R3 */ |
diff --git a/arch/sh/include/asm/system.h b/arch/sh/include/asm/system.h index a88895e6dcb0..ab79e1f4fbe0 100644 --- a/arch/sh/include/asm/system.h +++ b/arch/sh/include/asm/system.h | |||
@@ -154,6 +154,7 @@ extern struct dentry *sh_debugfs_root; | |||
154 | 154 | ||
155 | void per_cpu_trap_init(void); | 155 | void per_cpu_trap_init(void); |
156 | void default_idle(void); | 156 | void default_idle(void); |
157 | void cpu_idle_wait(void); | ||
157 | 158 | ||
158 | asmlinkage void break_point_trap(void); | 159 | asmlinkage void break_point_trap(void); |
159 | 160 | ||
diff --git a/arch/sh/include/asm/thread_info.h b/arch/sh/include/asm/thread_info.h index f09ac4806294..d570ac2e5cb9 100644 --- a/arch/sh/include/asm/thread_info.h +++ b/arch/sh/include/asm/thread_info.h | |||
@@ -51,7 +51,7 @@ struct thread_info { | |||
51 | .exec_domain = &default_exec_domain, \ | 51 | .exec_domain = &default_exec_domain, \ |
52 | .flags = 0, \ | 52 | .flags = 0, \ |
53 | .cpu = 0, \ | 53 | .cpu = 0, \ |
54 | .preempt_count = 1, \ | 54 | .preempt_count = INIT_PREEMPT_COUNT, \ |
55 | .addr_limit = KERNEL_DS, \ | 55 | .addr_limit = KERNEL_DS, \ |
56 | .restart_block = { \ | 56 | .restart_block = { \ |
57 | .fn = do_no_restart_syscall, \ | 57 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/sh/include/mach-se/mach/se7724.h b/arch/sh/include/mach-se/mach/se7724.h index 74164b60d0db..29514a39d0f5 100644 --- a/arch/sh/include/mach-se/mach/se7724.h +++ b/arch/sh/include/mach-se/mach/se7724.h | |||
@@ -20,6 +20,11 @@ | |||
20 | */ | 20 | */ |
21 | #include <asm/addrspace.h> | 21 | #include <asm/addrspace.h> |
22 | 22 | ||
23 | /* SH Eth */ | ||
24 | #define SH_ETH_ADDR (0xA4600000) | ||
25 | #define SH_ETH_MAHR (SH_ETH_ADDR + 0x1C0) | ||
26 | #define SH_ETH_MALR (SH_ETH_ADDR + 0x1C8) | ||
27 | |||
23 | #define PA_LED (0xba203000) /* 8bit LED */ | 28 | #define PA_LED (0xba203000) /* 8bit LED */ |
24 | #define IRQ_MODE (0xba200010) | 29 | #define IRQ_MODE (0xba200010) |
25 | #define IRQ0_SR (0xba200014) | 30 | #define IRQ0_SR (0xba200014) |
diff --git a/arch/sh/kernel/cpu/sh4a/Makefile b/arch/sh/kernel/cpu/sh4a/Makefile index 96ea09ca8cc1..ebdd391d5f42 100644 --- a/arch/sh/kernel/cpu/sh4a/Makefile +++ b/arch/sh/kernel/cpu/sh4a/Makefile | |||
@@ -16,7 +16,7 @@ obj-$(CONFIG_CPU_SUBTYPE_SH7366) += setup-sh7366.o | |||
16 | obj-$(CONFIG_CPU_SUBTYPE_SHX3) += setup-shx3.o | 16 | obj-$(CONFIG_CPU_SUBTYPE_SHX3) += setup-shx3.o |
17 | 17 | ||
18 | # SMP setup | 18 | # SMP setup |
19 | smp-$(CONFIG_CPU_SUBTYPE_SHX3) := smp-shx3.o | 19 | smp-$(CONFIG_CPU_SHX3) := smp-shx3.o |
20 | 20 | ||
21 | # Primary on-chip clocks (common) | 21 | # Primary on-chip clocks (common) |
22 | clock-$(CONFIG_CPU_SUBTYPE_SH7763) := clock-sh7763.o | 22 | clock-$(CONFIG_CPU_SUBTYPE_SH7763) := clock-sh7763.o |
@@ -38,6 +38,6 @@ pinmux-$(CONFIG_CPU_SUBTYPE_SH7724) := pinmux-sh7724.o | |||
38 | pinmux-$(CONFIG_CPU_SUBTYPE_SH7785) := pinmux-sh7785.o | 38 | pinmux-$(CONFIG_CPU_SUBTYPE_SH7785) := pinmux-sh7785.o |
39 | pinmux-$(CONFIG_CPU_SUBTYPE_SH7786) := pinmux-sh7786.o | 39 | pinmux-$(CONFIG_CPU_SUBTYPE_SH7786) := pinmux-sh7786.o |
40 | 40 | ||
41 | obj-y += $(clock-y) | 41 | obj-y += $(clock-y) |
42 | obj-$(CONFIG_SMP) += $(smp-y) | 42 | obj-$(CONFIG_SMP) += $(smp-y) |
43 | obj-$(CONFIG_GENERIC_GPIO) += $(pinmux-y) | 43 | obj-$(CONFIG_GENERIC_GPIO) += $(pinmux-y) |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 93e0d2c017e8..b70049470a0b 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c | |||
@@ -595,9 +595,8 @@ enum { | |||
595 | HSPI, | 595 | HSPI, |
596 | GPIO0, GPIO1, | 596 | GPIO0, GPIO1, |
597 | Thermal, | 597 | Thermal, |
598 | INTC0, INTC1, INTC2, INTC3, INTC4, INTC5, INTC6, INTC7, | 598 | INTICI0, INTICI1, INTICI2, INTICI3, |
599 | 599 | INTICI4, INTICI5, INTICI6, INTICI7, | |
600 | /* interrupt groups */ | ||
601 | }; | 600 | }; |
602 | 601 | ||
603 | static struct intc_vect vectors[] __initdata = { | 602 | static struct intc_vect vectors[] __initdata = { |
@@ -638,10 +637,12 @@ static struct intc_vect vectors[] __initdata = { | |||
638 | INTC_VECT(HSPI, 0xe80), | 637 | INTC_VECT(HSPI, 0xe80), |
639 | INTC_VECT(GPIO0, 0xea0), INTC_VECT(GPIO1, 0xec0), | 638 | INTC_VECT(GPIO0, 0xea0), INTC_VECT(GPIO1, 0xec0), |
640 | INTC_VECT(Thermal, 0xee0), | 639 | INTC_VECT(Thermal, 0xee0), |
640 | INTC_VECT(INTICI0, 0xf00), INTC_VECT(INTICI1, 0xf20), | ||
641 | INTC_VECT(INTICI2, 0xf40), INTC_VECT(INTICI3, 0xf60), | ||
642 | INTC_VECT(INTICI4, 0xf80), INTC_VECT(INTICI5, 0xfa0), | ||
643 | INTC_VECT(INTICI6, 0xfc0), INTC_VECT(INTICI7, 0xfe0), | ||
641 | }; | 644 | }; |
642 | 645 | ||
643 | /* FIXME: Main CPU support only now */ | ||
644 | #if 1 /* Main CPU */ | ||
645 | #define CnINTMSK0 0xfe410030 | 646 | #define CnINTMSK0 0xfe410030 |
646 | #define CnINTMSK1 0xfe410040 | 647 | #define CnINTMSK1 0xfe410040 |
647 | #define CnINTMSKCLR0 0xfe410050 | 648 | #define CnINTMSKCLR0 0xfe410050 |
@@ -654,21 +655,6 @@ static struct intc_vect vectors[] __initdata = { | |||
654 | #define CnINT2MSKCR1 0xfe410a34 | 655 | #define CnINT2MSKCR1 0xfe410a34 |
655 | #define CnINT2MSKCR2 0xfe410a38 | 656 | #define CnINT2MSKCR2 0xfe410a38 |
656 | #define CnINT2MSKCR3 0xfe410a3c | 657 | #define CnINT2MSKCR3 0xfe410a3c |
657 | #else /* Sub CPU */ | ||
658 | #define CnINTMSK0 0xfe410034 | ||
659 | #define CnINTMSK1 0xfe410044 | ||
660 | #define CnINTMSKCLR0 0xfe410054 | ||
661 | #define CnINTMSKCLR1 0xfe410064 | ||
662 | #define CnINT2MSKR0 0xfe410b20 | ||
663 | #define CnINT2MSKR1 0xfe410b24 | ||
664 | #define CnINT2MSKR2 0xfe410b28 | ||
665 | #define CnINT2MSKR3 0xfe410b2c | ||
666 | #define CnINT2MSKCR0 0xfe410b30 | ||
667 | #define CnINT2MSKCR1 0xfe410b34 | ||
668 | #define CnINT2MSKCR2 0xfe410b38 | ||
669 | #define CnINT2MSKCR3 0xfe410b3c | ||
670 | #endif | ||
671 | |||
672 | #define INTMSK2 0xfe410068 | 658 | #define INTMSK2 0xfe410068 |
673 | #define INTMSKCLR2 0xfe41006c | 659 | #define INTMSKCLR2 0xfe41006c |
674 | 660 | ||
@@ -753,6 +739,9 @@ static struct intc_prio_reg prio_registers[] __initdata = { | |||
753 | GPIO1, Thermal } }, | 739 | GPIO1, Thermal } }, |
754 | { 0xfe41085c, 0, 32, 8, /* INT2PRI23 */ { 0, 0, 0, 0 } }, | 740 | { 0xfe41085c, 0, 32, 8, /* INT2PRI23 */ { 0, 0, 0, 0 } }, |
755 | { 0xfe410860, 0, 32, 8, /* INT2PRI24 */ { 0, 0, 0, 0 } }, | 741 | { 0xfe410860, 0, 32, 8, /* INT2PRI24 */ { 0, 0, 0, 0 } }, |
742 | { 0xfe410090, 0xfe4100a0, 32, 4, /* CnICIPRI / CnICIPRICLR */ | ||
743 | { INTICI7, INTICI6, INTICI5, INTICI4, | ||
744 | INTICI3, INTICI2, INTICI1, INTICI0 }, INTC_SMP(4, 2) }, | ||
756 | }; | 745 | }; |
757 | 746 | ||
758 | static DECLARE_INTC_DESC(intc_desc, "sh7786", vectors, NULL, | 747 | static DECLARE_INTC_DESC(intc_desc, "sh7786", vectors, NULL, |
diff --git a/arch/sh/kernel/idle.c b/arch/sh/kernel/idle.c index f35ed0348850..27ff2dc093c7 100644 --- a/arch/sh/kernel/idle.c +++ b/arch/sh/kernel/idle.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * The idle loop for all SuperH platforms. | 2 | * The idle loop for all SuperH platforms. |
3 | * | 3 | * |
4 | * Copyright (C) 2002 - 2008 Paul Mundt | 4 | * Copyright (C) 2002 - 2009 Paul Mundt |
5 | * | 5 | * |
6 | * This file is subject to the terms and conditions of the GNU General Public | 6 | * This file is subject to the terms and conditions of the GNU General Public |
7 | * License. See the file "COPYING" in the main directory of this archive | 7 | * License. See the file "COPYING" in the main directory of this archive |
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/preempt.h> | 15 | #include <linux/preempt.h> |
16 | #include <linux/thread_info.h> | 16 | #include <linux/thread_info.h> |
17 | #include <linux/irqflags.h> | 17 | #include <linux/irqflags.h> |
18 | #include <linux/smp.h> | ||
18 | #include <asm/pgalloc.h> | 19 | #include <asm/pgalloc.h> |
19 | #include <asm/system.h> | 20 | #include <asm/system.h> |
20 | #include <asm/atomic.h> | 21 | #include <asm/atomic.h> |
@@ -79,3 +80,23 @@ void cpu_idle(void) | |||
79 | check_pgt_cache(); | 80 | check_pgt_cache(); |
80 | } | 81 | } |
81 | } | 82 | } |
83 | |||
84 | static void do_nothing(void *unused) | ||
85 | { | ||
86 | } | ||
87 | |||
88 | /* | ||
89 | * cpu_idle_wait - Used to ensure that all the CPUs discard old value of | ||
90 | * pm_idle and update to new pm_idle value. Required while changing pm_idle | ||
91 | * handler on SMP systems. | ||
92 | * | ||
93 | * Caller must have changed pm_idle to the new value before the call. Old | ||
94 | * pm_idle value will not be used by any CPU after the return of this function. | ||
95 | */ | ||
96 | void cpu_idle_wait(void) | ||
97 | { | ||
98 | smp_mb(); | ||
99 | /* kick all the CPUs so that they exit out of pm_idle */ | ||
100 | smp_call_function(do_nothing, NULL, 1); | ||
101 | } | ||
102 | EXPORT_SYMBOL_GPL(cpu_idle_wait); | ||
diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c index 2c50f80fc332..71925946f1e1 100644 --- a/arch/sh/mm/fault_32.c +++ b/arch/sh/mm/fault_32.c | |||
@@ -15,12 +15,28 @@ | |||
15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
16 | #include <linux/hardirq.h> | 16 | #include <linux/hardirq.h> |
17 | #include <linux/kprobes.h> | 17 | #include <linux/kprobes.h> |
18 | #include <linux/marker.h> | 18 | #include <linux/perf_counter.h> |
19 | #include <asm/io_trapped.h> | 19 | #include <asm/io_trapped.h> |
20 | #include <asm/system.h> | 20 | #include <asm/system.h> |
21 | #include <asm/mmu_context.h> | 21 | #include <asm/mmu_context.h> |
22 | #include <asm/tlbflush.h> | 22 | #include <asm/tlbflush.h> |
23 | 23 | ||
24 | static inline int notify_page_fault(struct pt_regs *regs, int trap) | ||
25 | { | ||
26 | int ret = 0; | ||
27 | |||
28 | #ifdef CONFIG_KPROBES | ||
29 | if (!user_mode(regs)) { | ||
30 | preempt_disable(); | ||
31 | if (kprobe_running() && kprobe_fault_handler(regs, trap)) | ||
32 | ret = 1; | ||
33 | preempt_enable(); | ||
34 | } | ||
35 | #endif | ||
36 | |||
37 | return ret; | ||
38 | } | ||
39 | |||
24 | /* | 40 | /* |
25 | * This routine handles page faults. It determines the address, | 41 | * This routine handles page faults. It determines the address, |
26 | * and the problem, and then passes it off to one of the appropriate | 42 | * and the problem, and then passes it off to one of the appropriate |
@@ -87,13 +103,16 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, | |||
87 | return; | 103 | return; |
88 | } | 104 | } |
89 | 105 | ||
106 | mm = tsk->mm; | ||
107 | |||
108 | if (unlikely(notify_page_fault(regs, lookup_exception_vector()))) | ||
109 | return; | ||
110 | |||
90 | /* Only enable interrupts if they were on before the fault */ | 111 | /* Only enable interrupts if they were on before the fault */ |
91 | if ((regs->sr & SR_IMASK) != SR_IMASK) { | 112 | if ((regs->sr & SR_IMASK) != SR_IMASK) |
92 | trace_hardirqs_on(); | ||
93 | local_irq_enable(); | 113 | local_irq_enable(); |
94 | } | ||
95 | 114 | ||
96 | mm = tsk->mm; | 115 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address); |
97 | 116 | ||
98 | /* | 117 | /* |
99 | * If we're in an interrupt or have no user | 118 | * If we're in an interrupt or have no user |
@@ -133,7 +152,7 @@ good_area: | |||
133 | * the fault. | 152 | * the fault. |
134 | */ | 153 | */ |
135 | survive: | 154 | survive: |
136 | fault = handle_mm_fault(mm, vma, address, writeaccess); | 155 | fault = handle_mm_fault(mm, vma, address, writeaccess ? FAULT_FLAG_WRITE : 0); |
137 | if (unlikely(fault & VM_FAULT_ERROR)) { | 156 | if (unlikely(fault & VM_FAULT_ERROR)) { |
138 | if (fault & VM_FAULT_OOM) | 157 | if (fault & VM_FAULT_OOM) |
139 | goto out_of_memory; | 158 | goto out_of_memory; |
@@ -141,10 +160,15 @@ survive: | |||
141 | goto do_sigbus; | 160 | goto do_sigbus; |
142 | BUG(); | 161 | BUG(); |
143 | } | 162 | } |
144 | if (fault & VM_FAULT_MAJOR) | 163 | if (fault & VM_FAULT_MAJOR) { |
145 | tsk->maj_flt++; | 164 | tsk->maj_flt++; |
146 | else | 165 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, |
166 | regs, address); | ||
167 | } else { | ||
147 | tsk->min_flt++; | 168 | tsk->min_flt++; |
169 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, | ||
170 | regs, address); | ||
171 | } | ||
148 | 172 | ||
149 | up_read(&mm->mmap_sem); | 173 | up_read(&mm->mmap_sem); |
150 | return; | 174 | return; |
@@ -245,22 +269,6 @@ do_sigbus: | |||
245 | goto no_context; | 269 | goto no_context; |
246 | } | 270 | } |
247 | 271 | ||
248 | static inline int notify_page_fault(struct pt_regs *regs, int trap) | ||
249 | { | ||
250 | int ret = 0; | ||
251 | |||
252 | #ifdef CONFIG_KPROBES | ||
253 | if (!user_mode(regs)) { | ||
254 | preempt_disable(); | ||
255 | if (kprobe_running() && kprobe_fault_handler(regs, trap)) | ||
256 | ret = 1; | ||
257 | preempt_enable(); | ||
258 | } | ||
259 | #endif | ||
260 | |||
261 | return ret; | ||
262 | } | ||
263 | |||
264 | /* | 272 | /* |
265 | * Called with interrupts disabled. | 273 | * Called with interrupts disabled. |
266 | */ | 274 | */ |
@@ -273,12 +281,7 @@ asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs, | |||
273 | pmd_t *pmd; | 281 | pmd_t *pmd; |
274 | pte_t *pte; | 282 | pte_t *pte; |
275 | pte_t entry; | 283 | pte_t entry; |
276 | int ret = 0; | 284 | int ret = 1; |
277 | |||
278 | if (notify_page_fault(regs, lookup_exception_vector())) | ||
279 | goto out; | ||
280 | |||
281 | ret = 1; | ||
282 | 285 | ||
283 | /* | 286 | /* |
284 | * We don't take page faults for P1, P2, and parts of P4, these | 287 | * We don't take page faults for P1, P2, and parts of P4, these |
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index ee8e6bbe882c..fe532aeaa16d 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c | |||
@@ -70,7 +70,7 @@ static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) | |||
70 | } | 70 | } |
71 | 71 | ||
72 | set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, prot)); | 72 | set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, prot)); |
73 | flush_tlb_one(get_asid(), addr); | 73 | local_flush_tlb_one(get_asid(), addr); |
74 | } | 74 | } |
75 | 75 | ||
76 | /* | 76 | /* |
@@ -177,10 +177,8 @@ void __init paging_init(void) | |||
177 | 177 | ||
178 | free_area_init_nodes(max_zone_pfns); | 178 | free_area_init_nodes(max_zone_pfns); |
179 | 179 | ||
180 | #ifdef CONFIG_SUPERH32 | ||
181 | /* Set up the uncached fixmap */ | 180 | /* Set up the uncached fixmap */ |
182 | set_fixmap_nocache(FIX_UNCACHED, __pa(&__uncached_start)); | 181 | set_fixmap_nocache(FIX_UNCACHED, __pa(&__uncached_start)); |
183 | #endif | ||
184 | } | 182 | } |
185 | 183 | ||
186 | static struct kcore_list kcore_mem, kcore_vmalloc; | 184 | static struct kcore_list kcore_mem, kcore_vmalloc; |
diff --git a/arch/sh/mm/tlb-sh3.c b/arch/sh/mm/tlb-sh3.c index 7fbfd5a11ffa..17cb7c3adf22 100644 --- a/arch/sh/mm/tlb-sh3.c +++ b/arch/sh/mm/tlb-sh3.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <linux/mman.h> | 18 | #include <linux/mman.h> |
19 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
20 | #include <linux/smp.h> | 20 | #include <linux/smp.h> |
21 | #include <linux/smp_lock.h> | ||
22 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
23 | 22 | ||
24 | #include <asm/system.h> | 23 | #include <asm/system.h> |
diff --git a/arch/sh/mm/tlbflush_64.c b/arch/sh/mm/tlbflush_64.c index 7876997ba19a..3ce40ea34824 100644 --- a/arch/sh/mm/tlbflush_64.c +++ b/arch/sh/mm/tlbflush_64.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2000, 2001 Paolo Alberelli | 4 | * Copyright (C) 2000, 2001 Paolo Alberelli |
5 | * Copyright (C) 2003 Richard Curnow (/proc/tlb, bug fixes) | 5 | * Copyright (C) 2003 Richard Curnow (/proc/tlb, bug fixes) |
6 | * Copyright (C) 2003 Paul Mundt | 6 | * Copyright (C) 2003 - 2009 Paul Mundt |
7 | * | 7 | * |
8 | * This file is subject to the terms and conditions of the GNU General Public | 8 | * This file is subject to the terms and conditions of the GNU General Public |
9 | * License. See the file "COPYING" in the main directory of this archive | 9 | * License. See the file "COPYING" in the main directory of this archive |
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/mman.h> | 20 | #include <linux/mman.h> |
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/smp.h> | 22 | #include <linux/smp.h> |
23 | #include <linux/perf_counter.h> | ||
23 | #include <linux/interrupt.h> | 24 | #include <linux/interrupt.h> |
24 | #include <asm/system.h> | 25 | #include <asm/system.h> |
25 | #include <asm/io.h> | 26 | #include <asm/io.h> |
@@ -115,6 +116,8 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long writeaccess, | |||
115 | /* Not an IO address, so reenable interrupts */ | 116 | /* Not an IO address, so reenable interrupts */ |
116 | local_irq_enable(); | 117 | local_irq_enable(); |
117 | 118 | ||
119 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address); | ||
120 | |||
118 | /* | 121 | /* |
119 | * If we're in an interrupt or have no user | 122 | * If we're in an interrupt or have no user |
120 | * context, we must not take the fault.. | 123 | * context, we must not take the fault.. |
@@ -187,7 +190,7 @@ good_area: | |||
187 | * the fault. | 190 | * the fault. |
188 | */ | 191 | */ |
189 | survive: | 192 | survive: |
190 | fault = handle_mm_fault(mm, vma, address, writeaccess); | 193 | fault = handle_mm_fault(mm, vma, address, writeaccess ? FAULT_FLAG_WRITE : 0); |
191 | if (unlikely(fault & VM_FAULT_ERROR)) { | 194 | if (unlikely(fault & VM_FAULT_ERROR)) { |
192 | if (fault & VM_FAULT_OOM) | 195 | if (fault & VM_FAULT_OOM) |
193 | goto out_of_memory; | 196 | goto out_of_memory; |
@@ -195,10 +198,16 @@ survive: | |||
195 | goto do_sigbus; | 198 | goto do_sigbus; |
196 | BUG(); | 199 | BUG(); |
197 | } | 200 | } |
198 | if (fault & VM_FAULT_MAJOR) | 201 | |
202 | if (fault & VM_FAULT_MAJOR) { | ||
199 | tsk->maj_flt++; | 203 | tsk->maj_flt++; |
200 | else | 204 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, |
205 | regs, address); | ||
206 | } else { | ||
201 | tsk->min_flt++; | 207 | tsk->min_flt++; |
208 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, | ||
209 | regs, address); | ||
210 | } | ||
202 | 211 | ||
203 | /* If we get here, the page fault has been handled. Do the TLB refill | 212 | /* If we get here, the page fault has been handled. Do the TLB refill |
204 | now from the newly-setup PTE, to avoid having to fault again right | 213 | now from the newly-setup PTE, to avoid having to fault again right |
diff --git a/arch/sparc/boot/Makefile b/arch/sparc/boot/Makefile index 96041a8d39e8..1ff0fd924756 100644 --- a/arch/sparc/boot/Makefile +++ b/arch/sparc/boot/Makefile | |||
@@ -15,7 +15,7 @@ quiet_cmd_elftoaout = ELFTOAOUT $@ | |||
15 | 15 | ||
16 | ifeq ($(CONFIG_SPARC32),y) | 16 | ifeq ($(CONFIG_SPARC32),y) |
17 | quiet_cmd_piggy = PIGGY $@ | 17 | quiet_cmd_piggy = PIGGY $@ |
18 | cmd_piggy = $(obj)/piggyback_32 $@ $(obj)/System.map $(ROOT_IMG) | 18 | cmd_piggy = $(obj)/piggyback_32 $@ System.map $(ROOT_IMG) |
19 | quiet_cmd_btfix = BTFIX $@ | 19 | quiet_cmd_btfix = BTFIX $@ |
20 | cmd_btfix = $(OBJDUMP) -x vmlinux | $(obj)/btfixupprep > $@ | 20 | cmd_btfix = $(OBJDUMP) -x vmlinux | $(obj)/btfixupprep > $@ |
21 | quiet_cmd_sysmap = SYSMAP $(obj)/System.map | 21 | quiet_cmd_sysmap = SYSMAP $(obj)/System.map |
@@ -58,7 +58,7 @@ $(obj)/image: $(obj)/btfix.o FORCE | |||
58 | $(obj)/zImage: $(obj)/image | 58 | $(obj)/zImage: $(obj)/image |
59 | $(call if_changed,strip) | 59 | $(call if_changed,strip) |
60 | 60 | ||
61 | $(obj)/tftpboot.img: $(obj)/piggyback $(obj)/System.map $(obj)/image FORCE | 61 | $(obj)/tftpboot.img: $(obj)/image $(obj)/piggyback_32 System.map $(ROOT_IMG) FORCE |
62 | $(call if_changed,elftoaout) | 62 | $(call if_changed,elftoaout) |
63 | $(call if_changed,piggy) | 63 | $(call if_changed,piggy) |
64 | 64 | ||
@@ -79,7 +79,7 @@ $(obj)/image: vmlinux FORCE | |||
79 | $(call if_changed,strip) | 79 | $(call if_changed,strip) |
80 | @echo ' kernel: $@ is ready' | 80 | @echo ' kernel: $@ is ready' |
81 | 81 | ||
82 | $(obj)/tftpboot.img: vmlinux $(obj)/piggyback_64 System.map $(ROOT_IMG) FORCE | 82 | $(obj)/tftpboot.img: $(obj)/image $(obj)/piggyback_64 System.map $(ROOT_IMG) FORCE |
83 | $(call if_changed,elftoaout) | 83 | $(call if_changed,elftoaout) |
84 | $(call if_changed,piggy) | 84 | $(call if_changed,piggy) |
85 | @echo ' kernel: $@ is ready' | 85 | @echo ' kernel: $@ is ready' |
diff --git a/arch/sparc/boot/piggyback_32.c b/arch/sparc/boot/piggyback_32.c index c9f500c1a8b2..e8dc9adfcd61 100644 --- a/arch/sparc/boot/piggyback_32.c +++ b/arch/sparc/boot/piggyback_32.c | |||
@@ -70,7 +70,7 @@ void die(char *str) | |||
70 | int main(int argc,char **argv) | 70 | int main(int argc,char **argv) |
71 | { | 71 | { |
72 | static char aout_magic[] = { 0x01, 0x03, 0x01, 0x07 }; | 72 | static char aout_magic[] = { 0x01, 0x03, 0x01, 0x07 }; |
73 | unsigned char buffer[1024], *q, *r; | 73 | char buffer[1024], *q, *r; |
74 | unsigned int i, j, k, start, end, offset; | 74 | unsigned int i, j, k, start, end, offset; |
75 | FILE *map; | 75 | FILE *map; |
76 | struct stat s; | 76 | struct stat s; |
@@ -84,7 +84,7 @@ int main(int argc,char **argv) | |||
84 | while (fgets (buffer, 1024, map)) { | 84 | while (fgets (buffer, 1024, map)) { |
85 | if (!strcmp (buffer + 8, " T start\n") || !strcmp (buffer + 16, " T start\n")) | 85 | if (!strcmp (buffer + 8, " T start\n") || !strcmp (buffer + 16, " T start\n")) |
86 | start = strtoul (buffer, NULL, 16); | 86 | start = strtoul (buffer, NULL, 16); |
87 | else if (!strcmp (buffer + 8, " A end\n") || !strcmp (buffer + 16, " A end\n")) | 87 | else if (!strcmp (buffer + 8, " A _end\n") || !strcmp (buffer + 16, " A _end\n")) |
88 | end = strtoul (buffer, NULL, 16); | 88 | end = strtoul (buffer, NULL, 16); |
89 | } | 89 | } |
90 | fclose (map); | 90 | fclose (map); |
diff --git a/arch/sparc/boot/piggyback_64.c b/arch/sparc/boot/piggyback_64.c index de364bfed0bb..c63fd1b6bdd4 100644 --- a/arch/sparc/boot/piggyback_64.c +++ b/arch/sparc/boot/piggyback_64.c | |||
@@ -46,6 +46,7 @@ int main(int argc,char **argv) | |||
46 | struct stat s; | 46 | struct stat s; |
47 | int image, tail; | 47 | int image, tail; |
48 | 48 | ||
49 | start = end = 0; | ||
49 | if (stat (argv[3], &s) < 0) die (argv[3]); | 50 | if (stat (argv[3], &s) < 0) die (argv[3]); |
50 | map = fopen (argv[2], "r"); | 51 | map = fopen (argv[2], "r"); |
51 | if (!map) die(argv[2]); | 52 | if (!map) die(argv[2]); |
diff --git a/arch/sparc/include/asm/thread_info_32.h b/arch/sparc/include/asm/thread_info_32.h index 0f7b0e5fb1c7..844d73a0340c 100644 --- a/arch/sparc/include/asm/thread_info_32.h +++ b/arch/sparc/include/asm/thread_info_32.h | |||
@@ -54,8 +54,6 @@ struct thread_info { | |||
54 | 54 | ||
55 | /* | 55 | /* |
56 | * macros/functions for gaining access to the thread information structure | 56 | * macros/functions for gaining access to the thread information structure |
57 | * | ||
58 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
59 | */ | 57 | */ |
60 | #define INIT_THREAD_INFO(tsk) \ | 58 | #define INIT_THREAD_INFO(tsk) \ |
61 | { \ | 59 | { \ |
@@ -64,7 +62,7 @@ struct thread_info { | |||
64 | .exec_domain = &default_exec_domain, \ | 62 | .exec_domain = &default_exec_domain, \ |
65 | .flags = 0, \ | 63 | .flags = 0, \ |
66 | .cpu = 0, \ | 64 | .cpu = 0, \ |
67 | .preempt_count = 1, \ | 65 | .preempt_count = INIT_PREEMPT_COUNT, \ |
68 | .restart_block = { \ | 66 | .restart_block = { \ |
69 | .fn = do_no_restart_syscall, \ | 67 | .fn = do_no_restart_syscall, \ |
70 | }, \ | 68 | }, \ |
diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h index 65865726b283..1b45a7bbe407 100644 --- a/arch/sparc/include/asm/thread_info_64.h +++ b/arch/sparc/include/asm/thread_info_64.h | |||
@@ -125,8 +125,6 @@ struct thread_info { | |||
125 | 125 | ||
126 | /* | 126 | /* |
127 | * macros/functions for gaining access to the thread information structure | 127 | * macros/functions for gaining access to the thread information structure |
128 | * | ||
129 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
130 | */ | 128 | */ |
131 | #ifndef __ASSEMBLY__ | 129 | #ifndef __ASSEMBLY__ |
132 | 130 | ||
@@ -135,7 +133,7 @@ struct thread_info { | |||
135 | .task = &tsk, \ | 133 | .task = &tsk, \ |
136 | .flags = ((unsigned long)ASI_P) << TI_FLAG_CURRENT_DS_SHIFT, \ | 134 | .flags = ((unsigned long)ASI_P) << TI_FLAG_CURRENT_DS_SHIFT, \ |
137 | .exec_domain = &default_exec_domain, \ | 135 | .exec_domain = &default_exec_domain, \ |
138 | .preempt_count = 1, \ | 136 | .preempt_count = INIT_PREEMPT_COUNT, \ |
139 | .restart_block = { \ | 137 | .restart_block = { \ |
140 | .fn = do_no_restart_syscall, \ | 138 | .fn = do_no_restart_syscall, \ |
141 | }, \ | 139 | }, \ |
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c index bd075054942b..f0ee79055409 100644 --- a/arch/sparc/kernel/irq_64.c +++ b/arch/sparc/kernel/irq_64.c | |||
@@ -20,7 +20,6 @@ | |||
20 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
21 | #include <linux/proc_fs.h> | 21 | #include <linux/proc_fs.h> |
22 | #include <linux/seq_file.h> | 22 | #include <linux/seq_file.h> |
23 | #include <linux/bootmem.h> | ||
24 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
25 | 24 | ||
26 | #include <asm/ptrace.h> | 25 | #include <asm/ptrace.h> |
@@ -914,25 +913,19 @@ void __cpuinit notrace sun4v_register_mondo_queues(int this_cpu) | |||
914 | tb->nonresum_qmask); | 913 | tb->nonresum_qmask); |
915 | } | 914 | } |
916 | 915 | ||
917 | static void __init alloc_one_mondo(unsigned long *pa_ptr, unsigned long qmask) | 916 | /* Each queue region must be a power of 2 multiple of 64 bytes in |
918 | { | 917 | * size. The base real address must be aligned to the size of the |
919 | unsigned long size = PAGE_ALIGN(qmask + 1); | 918 | * region. Thus, an 8KB queue must be 8KB aligned, for example. |
920 | void *p = __alloc_bootmem(size, size, 0); | 919 | */ |
921 | if (!p) { | 920 | static void __init alloc_one_queue(unsigned long *pa_ptr, unsigned long qmask) |
922 | prom_printf("SUN4V: Error, cannot allocate mondo queue.\n"); | ||
923 | prom_halt(); | ||
924 | } | ||
925 | |||
926 | *pa_ptr = __pa(p); | ||
927 | } | ||
928 | |||
929 | static void __init alloc_one_kbuf(unsigned long *pa_ptr, unsigned long qmask) | ||
930 | { | 921 | { |
931 | unsigned long size = PAGE_ALIGN(qmask + 1); | 922 | unsigned long size = PAGE_ALIGN(qmask + 1); |
932 | void *p = __alloc_bootmem(size, size, 0); | 923 | unsigned long order = get_order(size); |
924 | unsigned long p; | ||
933 | 925 | ||
926 | p = __get_free_pages(GFP_KERNEL, order); | ||
934 | if (!p) { | 927 | if (!p) { |
935 | prom_printf("SUN4V: Error, cannot allocate kbuf page.\n"); | 928 | prom_printf("SUN4V: Error, cannot allocate queue.\n"); |
936 | prom_halt(); | 929 | prom_halt(); |
937 | } | 930 | } |
938 | 931 | ||
@@ -942,11 +935,11 @@ static void __init alloc_one_kbuf(unsigned long *pa_ptr, unsigned long qmask) | |||
942 | static void __init init_cpu_send_mondo_info(struct trap_per_cpu *tb) | 935 | static void __init init_cpu_send_mondo_info(struct trap_per_cpu *tb) |
943 | { | 936 | { |
944 | #ifdef CONFIG_SMP | 937 | #ifdef CONFIG_SMP |
945 | void *page; | 938 | unsigned long page; |
946 | 939 | ||
947 | BUILD_BUG_ON((NR_CPUS * sizeof(u16)) > (PAGE_SIZE - 64)); | 940 | BUILD_BUG_ON((NR_CPUS * sizeof(u16)) > (PAGE_SIZE - 64)); |
948 | 941 | ||
949 | page = alloc_bootmem_pages(PAGE_SIZE); | 942 | page = get_zeroed_page(GFP_KERNEL); |
950 | if (!page) { | 943 | if (!page) { |
951 | prom_printf("SUN4V: Error, cannot allocate cpu mondo page.\n"); | 944 | prom_printf("SUN4V: Error, cannot allocate cpu mondo page.\n"); |
952 | prom_halt(); | 945 | prom_halt(); |
@@ -965,13 +958,13 @@ static void __init sun4v_init_mondo_queues(void) | |||
965 | for_each_possible_cpu(cpu) { | 958 | for_each_possible_cpu(cpu) { |
966 | struct trap_per_cpu *tb = &trap_block[cpu]; | 959 | struct trap_per_cpu *tb = &trap_block[cpu]; |
967 | 960 | ||
968 | alloc_one_mondo(&tb->cpu_mondo_pa, tb->cpu_mondo_qmask); | 961 | alloc_one_queue(&tb->cpu_mondo_pa, tb->cpu_mondo_qmask); |
969 | alloc_one_mondo(&tb->dev_mondo_pa, tb->dev_mondo_qmask); | 962 | alloc_one_queue(&tb->dev_mondo_pa, tb->dev_mondo_qmask); |
970 | alloc_one_mondo(&tb->resum_mondo_pa, tb->resum_qmask); | 963 | alloc_one_queue(&tb->resum_mondo_pa, tb->resum_qmask); |
971 | alloc_one_kbuf(&tb->resum_kernel_buf_pa, tb->resum_qmask); | 964 | alloc_one_queue(&tb->resum_kernel_buf_pa, tb->resum_qmask); |
972 | alloc_one_mondo(&tb->nonresum_mondo_pa, tb->nonresum_qmask); | 965 | alloc_one_queue(&tb->nonresum_mondo_pa, tb->nonresum_qmask); |
973 | alloc_one_kbuf(&tb->nonresum_kernel_buf_pa, | 966 | alloc_one_queue(&tb->nonresum_kernel_buf_pa, |
974 | tb->nonresum_qmask); | 967 | tb->nonresum_qmask); |
975 | } | 968 | } |
976 | } | 969 | } |
977 | 970 | ||
@@ -999,7 +992,7 @@ void __init init_IRQ(void) | |||
999 | kill_prom_timer(); | 992 | kill_prom_timer(); |
1000 | 993 | ||
1001 | size = sizeof(struct ino_bucket) * NUM_IVECS; | 994 | size = sizeof(struct ino_bucket) * NUM_IVECS; |
1002 | ivector_table = alloc_bootmem(size); | 995 | ivector_table = kzalloc(size, GFP_KERNEL); |
1003 | if (!ivector_table) { | 996 | if (!ivector_table) { |
1004 | prom_printf("Fatal error, cannot allocate ivector_table\n"); | 997 | prom_printf("Fatal error, cannot allocate ivector_table\n"); |
1005 | prom_halt(); | 998 | prom_halt(); |
diff --git a/arch/sparc/kernel/ptrace_32.c b/arch/sparc/kernel/ptrace_32.c index 8ce6285a06d5..7e3dfd9bb97e 100644 --- a/arch/sparc/kernel/ptrace_32.c +++ b/arch/sparc/kernel/ptrace_32.c | |||
@@ -16,7 +16,6 @@ | |||
16 | #include <linux/ptrace.h> | 16 | #include <linux/ptrace.h> |
17 | #include <linux/user.h> | 17 | #include <linux/user.h> |
18 | #include <linux/smp.h> | 18 | #include <linux/smp.h> |
19 | #include <linux/smp_lock.h> | ||
20 | #include <linux/security.h> | 19 | #include <linux/security.h> |
21 | #include <linux/signal.h> | 20 | #include <linux/signal.h> |
22 | #include <linux/regset.h> | 21 | #include <linux/regset.h> |
diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c index a941c610e7ce..4ae91dc2feb9 100644 --- a/arch/sparc/kernel/ptrace_64.c +++ b/arch/sparc/kernel/ptrace_64.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/ptrace.h> | 17 | #include <linux/ptrace.h> |
18 | #include <linux/user.h> | 18 | #include <linux/user.h> |
19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
20 | #include <linux/smp_lock.h> | ||
21 | #include <linux/security.h> | 20 | #include <linux/security.h> |
22 | #include <linux/seccomp.h> | 21 | #include <linux/seccomp.h> |
23 | #include <linux/audit.h> | 22 | #include <linux/audit.h> |
diff --git a/arch/sparc/kernel/time_64.c b/arch/sparc/kernel/time_64.c index 5c12e79b4bdf..da1218e8ee87 100644 --- a/arch/sparc/kernel/time_64.c +++ b/arch/sparc/kernel/time_64.c | |||
@@ -11,7 +11,6 @@ | |||
11 | #include <linux/errno.h> | 11 | #include <linux/errno.h> |
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
14 | #include <linux/smp_lock.h> | ||
15 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
16 | #include <linux/param.h> | 15 | #include <linux/param.h> |
17 | #include <linux/string.h> | 16 | #include <linux/string.h> |
diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c index 358283341b47..c0490c7bbde0 100644 --- a/arch/sparc/kernel/traps_32.c +++ b/arch/sparc/kernel/traps_32.c | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/signal.h> | 14 | #include <linux/signal.h> |
15 | #include <linux/smp.h> | 15 | #include <linux/smp.h> |
16 | #include <linux/smp_lock.h> | ||
17 | #include <linux/kdebug.h> | 16 | #include <linux/kdebug.h> |
18 | 17 | ||
19 | #include <asm/delay.h> | 18 | #include <asm/delay.h> |
diff --git a/arch/sparc/kernel/vio.c b/arch/sparc/kernel/vio.c index 753d128ed158..c28c71449a6c 100644 --- a/arch/sparc/kernel/vio.c +++ b/arch/sparc/kernel/vio.c | |||
@@ -224,7 +224,12 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp, | |||
224 | if (!strcmp(type, "domain-services-port")) | 224 | if (!strcmp(type, "domain-services-port")) |
225 | bus_id_name = "ds"; | 225 | bus_id_name = "ds"; |
226 | 226 | ||
227 | if (strlen(bus_id_name) >= BUS_ID_SIZE - 4) { | 227 | /* |
228 | * 20 char is the old driver-core name size limit, which is no more. | ||
229 | * This check can probably be removed after review and possible | ||
230 | * adaption of the vio users name length handling. | ||
231 | */ | ||
232 | if (strlen(bus_id_name) >= 20 - 4) { | ||
228 | printk(KERN_ERR "VIO: bus_id_name [%s] is too long.\n", | 233 | printk(KERN_ERR "VIO: bus_id_name [%s] is too long.\n", |
229 | bus_id_name); | 234 | bus_id_name); |
230 | return NULL; | 235 | return NULL; |
diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c index 12e447fc8542..a5e30c642ee3 100644 --- a/arch/sparc/mm/fault_32.c +++ b/arch/sparc/mm/fault_32.c | |||
@@ -241,7 +241,7 @@ good_area: | |||
241 | * make sure we exit gracefully rather than endlessly redo | 241 | * make sure we exit gracefully rather than endlessly redo |
242 | * the fault. | 242 | * the fault. |
243 | */ | 243 | */ |
244 | fault = handle_mm_fault(mm, vma, address, write); | 244 | fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); |
245 | if (unlikely(fault & VM_FAULT_ERROR)) { | 245 | if (unlikely(fault & VM_FAULT_ERROR)) { |
246 | if (fault & VM_FAULT_OOM) | 246 | if (fault & VM_FAULT_OOM) |
247 | goto out_of_memory; | 247 | goto out_of_memory; |
@@ -484,7 +484,7 @@ good_area: | |||
484 | if(!(vma->vm_flags & (VM_READ | VM_EXEC))) | 484 | if(!(vma->vm_flags & (VM_READ | VM_EXEC))) |
485 | goto bad_area; | 485 | goto bad_area; |
486 | } | 486 | } |
487 | switch (handle_mm_fault(mm, vma, address, write)) { | 487 | switch (handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0)) { |
488 | case VM_FAULT_SIGBUS: | 488 | case VM_FAULT_SIGBUS: |
489 | case VM_FAULT_OOM: | 489 | case VM_FAULT_OOM: |
490 | goto do_sigbus; | 490 | goto do_sigbus; |
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c index 4ab8993b0863..e5620b27c8bf 100644 --- a/arch/sparc/mm/fault_64.c +++ b/arch/sparc/mm/fault_64.c | |||
@@ -398,7 +398,7 @@ good_area: | |||
398 | goto bad_area; | 398 | goto bad_area; |
399 | } | 399 | } |
400 | 400 | ||
401 | fault = handle_mm_fault(mm, vma, address, (fault_code & FAULT_CODE_WRITE)); | 401 | fault = handle_mm_fault(mm, vma, address, (fault_code & FAULT_CODE_WRITE) ? FAULT_FLAG_WRITE : 0); |
402 | if (unlikely(fault & VM_FAULT_ERROR)) { | 402 | if (unlikely(fault & VM_FAULT_ERROR)) { |
403 | if (fault & VM_FAULT_OOM) | 403 | if (fault & VM_FAULT_OOM) |
404 | goto out_of_memory; | 404 | goto out_of_memory; |
diff --git a/arch/um/drivers/slip_kern.c b/arch/um/drivers/slip_kern.c index 5ec17563142e..dd2aadc14af0 100644 --- a/arch/um/drivers/slip_kern.c +++ b/arch/um/drivers/slip_kern.c | |||
@@ -30,7 +30,6 @@ static void slip_init(struct net_device *dev, void *data) | |||
30 | 30 | ||
31 | slip_proto_init(&spri->slip); | 31 | slip_proto_init(&spri->slip); |
32 | 32 | ||
33 | dev->init = NULL; | ||
34 | dev->hard_header_len = 0; | 33 | dev->hard_header_len = 0; |
35 | dev->header_ops = NULL; | 34 | dev->header_ops = NULL; |
36 | dev->addr_len = 0; | 35 | dev->addr_len = 0; |
diff --git a/arch/um/drivers/slirp_kern.c b/arch/um/drivers/slirp_kern.c index f15a6e7654f3..e376284f0fb7 100644 --- a/arch/um/drivers/slirp_kern.c +++ b/arch/um/drivers/slirp_kern.c | |||
@@ -32,7 +32,6 @@ void slirp_init(struct net_device *dev, void *data) | |||
32 | 32 | ||
33 | slip_proto_init(&spri->slip); | 33 | slip_proto_init(&spri->slip); |
34 | 34 | ||
35 | dev->init = NULL; | ||
36 | dev->hard_header_len = 0; | 35 | dev->hard_header_len = 0; |
37 | dev->header_ops = NULL; | 36 | dev->header_ops = NULL; |
38 | dev->addr_len = 0; | 37 | dev->addr_len = 0; |
diff --git a/arch/um/include/asm/dma-mapping.h b/arch/um/include/asm/dma-mapping.h index 90fc708b320e..378de4bbf49f 100644 --- a/arch/um/include/asm/dma-mapping.h +++ b/arch/um/include/asm/dma-mapping.h | |||
@@ -79,14 +79,14 @@ dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, | |||
79 | } | 79 | } |
80 | 80 | ||
81 | static inline void | 81 | static inline void |
82 | dma_sync_single(struct device *dev, dma_addr_t dma_handle, size_t size, | 82 | dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, |
83 | enum dma_data_direction direction) | 83 | enum dma_data_direction direction) |
84 | { | 84 | { |
85 | BUG(); | 85 | BUG(); |
86 | } | 86 | } |
87 | 87 | ||
88 | static inline void | 88 | static inline void |
89 | dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems, | 89 | dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, |
90 | enum dma_data_direction direction) | 90 | enum dma_data_direction direction) |
91 | { | 91 | { |
92 | BUG(); | 92 | BUG(); |
diff --git a/arch/um/include/asm/thread_info.h b/arch/um/include/asm/thread_info.h index 62274ab9471f..fd911f855367 100644 --- a/arch/um/include/asm/thread_info.h +++ b/arch/um/include/asm/thread_info.h | |||
@@ -32,7 +32,7 @@ struct thread_info { | |||
32 | .exec_domain = &default_exec_domain, \ | 32 | .exec_domain = &default_exec_domain, \ |
33 | .flags = 0, \ | 33 | .flags = 0, \ |
34 | .cpu = 0, \ | 34 | .cpu = 0, \ |
35 | .preempt_count = 1, \ | 35 | .preempt_count = INIT_PREEMPT_COUNT, \ |
36 | .addr_limit = KERNEL_DS, \ | 36 | .addr_limit = KERNEL_DS, \ |
37 | .restart_block = { \ | 37 | .restart_block = { \ |
38 | .fn = do_no_restart_syscall, \ | 38 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/um/kernel/sysrq.c b/arch/um/kernel/sysrq.c index 56d43d0a3960..0960de54495a 100644 --- a/arch/um/kernel/sysrq.c +++ b/arch/um/kernel/sysrq.c | |||
@@ -70,8 +70,8 @@ void show_stack(struct task_struct *task, unsigned long *esp) | |||
70 | if (kstack_end(stack)) | 70 | if (kstack_end(stack)) |
71 | break; | 71 | break; |
72 | if (i && ((i % 8) == 0)) | 72 | if (i && ((i % 8) == 0)) |
73 | printk("\n" KERN_INFO " "); | 73 | printk(KERN_INFO " "); |
74 | printk("%08lx ", *stack++); | 74 | printk(KERN_CONT "%08lx ", *stack++); |
75 | } | 75 | } |
76 | 76 | ||
77 | show_trace(task, esp); | 77 | show_trace(task, esp); |
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c index 7384d8accfe7..637c6505dc00 100644 --- a/arch/um/kernel/trap.c +++ b/arch/um/kernel/trap.c | |||
@@ -65,7 +65,7 @@ good_area: | |||
65 | do { | 65 | do { |
66 | int fault; | 66 | int fault; |
67 | 67 | ||
68 | fault = handle_mm_fault(mm, vma, address, is_write); | 68 | fault = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0); |
69 | if (unlikely(fault & VM_FAULT_ERROR)) { | 69 | if (unlikely(fault & VM_FAULT_ERROR)) { |
70 | if (fault & VM_FAULT_OOM) { | 70 | if (fault & VM_FAULT_OOM) { |
71 | goto out_of_memory; | 71 | goto out_of_memory; |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index d1430ef6b4f9..738bdc6b0f8b 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -1913,25 +1913,26 @@ config DMAR_DEFAULT_ON | |||
1913 | recommended you say N here while the DMAR code remains | 1913 | recommended you say N here while the DMAR code remains |
1914 | experimental. | 1914 | experimental. |
1915 | 1915 | ||
1916 | config DMAR_GFX_WA | 1916 | config DMAR_BROKEN_GFX_WA |
1917 | def_bool y | 1917 | def_bool n |
1918 | prompt "Support for Graphics workaround" | 1918 | prompt "Workaround broken graphics drivers (going away soon)" |
1919 | depends on DMAR | 1919 | depends on DMAR |
1920 | ---help--- | 1920 | ---help--- |
1921 | Current Graphics drivers tend to use physical address | 1921 | Current Graphics drivers tend to use physical address |
1922 | for DMA and avoid using DMA APIs. Setting this config | 1922 | for DMA and avoid using DMA APIs. Setting this config |
1923 | option permits the IOMMU driver to set a unity map for | 1923 | option permits the IOMMU driver to set a unity map for |
1924 | all the OS-visible memory. Hence the driver can continue | 1924 | all the OS-visible memory. Hence the driver can continue |
1925 | to use physical addresses for DMA. | 1925 | to use physical addresses for DMA, at least until this |
1926 | option is removed in the 2.6.32 kernel. | ||
1926 | 1927 | ||
1927 | config DMAR_FLOPPY_WA | 1928 | config DMAR_FLOPPY_WA |
1928 | def_bool y | 1929 | def_bool y |
1929 | depends on DMAR | 1930 | depends on DMAR |
1930 | ---help--- | 1931 | ---help--- |
1931 | Floppy disk drivers are know to bypass DMA API calls | 1932 | Floppy disk drivers are known to bypass DMA API calls |
1932 | thereby failing to work when IOMMU is enabled. This | 1933 | thereby failing to work when IOMMU is enabled. This |
1933 | workaround will setup a 1:1 mapping for the first | 1934 | workaround will setup a 1:1 mapping for the first |
1934 | 16M to make floppy (an ISA device) work. | 1935 | 16MiB to make floppy (an ISA device) work. |
1935 | 1936 | ||
1936 | config INTR_REMAP | 1937 | config INTR_REMAP |
1937 | bool "Support for Interrupt Remapping (EXPERIMENTAL)" | 1938 | bool "Support for Interrupt Remapping (EXPERIMENTAL)" |
diff --git a/arch/x86/boot/video-bios.c b/arch/x86/boot/video-bios.c index d660be492363..49e0c18833e0 100644 --- a/arch/x86/boot/video-bios.c +++ b/arch/x86/boot/video-bios.c | |||
@@ -37,14 +37,13 @@ static int set_bios_mode(u8 mode) | |||
37 | ireg.al = mode; /* AH=0x00 Set Video Mode */ | 37 | ireg.al = mode; /* AH=0x00 Set Video Mode */ |
38 | intcall(0x10, &ireg, NULL); | 38 | intcall(0x10, &ireg, NULL); |
39 | 39 | ||
40 | |||
41 | ireg.ah = 0x0f; /* Get Current Video Mode */ | 40 | ireg.ah = 0x0f; /* Get Current Video Mode */ |
42 | intcall(0x10, &ireg, &oreg); | 41 | intcall(0x10, &ireg, &oreg); |
43 | 42 | ||
44 | do_restore = 1; /* Assume video contents were lost */ | 43 | do_restore = 1; /* Assume video contents were lost */ |
45 | 44 | ||
46 | /* Not all BIOSes are clean with the top bit */ | 45 | /* Not all BIOSes are clean with the top bit */ |
47 | new_mode = ireg.al & 0x7f; | 46 | new_mode = oreg.al & 0x7f; |
48 | 47 | ||
49 | if (new_mode == mode) | 48 | if (new_mode == mode) |
50 | return 0; /* Mode change OK */ | 49 | return 0; /* Mode change OK */ |
diff --git a/arch/x86/boot/video-vesa.c b/arch/x86/boot/video-vesa.c index c700147d6ffb..275dd177f198 100644 --- a/arch/x86/boot/video-vesa.c +++ b/arch/x86/boot/video-vesa.c | |||
@@ -45,7 +45,7 @@ static int vesa_probe(void) | |||
45 | ireg.di = (size_t)&vginfo; | 45 | ireg.di = (size_t)&vginfo; |
46 | intcall(0x10, &ireg, &oreg); | 46 | intcall(0x10, &ireg, &oreg); |
47 | 47 | ||
48 | if (ireg.ax != 0x004f || | 48 | if (oreg.ax != 0x004f || |
49 | vginfo.signature != VESA_MAGIC || | 49 | vginfo.signature != VESA_MAGIC || |
50 | vginfo.version < 0x0102) | 50 | vginfo.version < 0x0102) |
51 | return 0; /* Not present */ | 51 | return 0; /* Not present */ |
@@ -70,7 +70,7 @@ static int vesa_probe(void) | |||
70 | ireg.di = (size_t)&vminfo; | 70 | ireg.di = (size_t)&vminfo; |
71 | intcall(0x10, &ireg, &oreg); | 71 | intcall(0x10, &ireg, &oreg); |
72 | 72 | ||
73 | if (ireg.ax != 0x004f) | 73 | if (oreg.ax != 0x004f) |
74 | continue; | 74 | continue; |
75 | 75 | ||
76 | if ((vminfo.mode_attr & 0x15) == 0x05) { | 76 | if ((vminfo.mode_attr & 0x15) == 0x05) { |
diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S index caba99601703..eb0566e83319 100644 --- a/arch/x86/crypto/aesni-intel_asm.S +++ b/arch/x86/crypto/aesni-intel_asm.S | |||
@@ -845,7 +845,7 @@ ENTRY(aesni_cbc_enc) | |||
845 | */ | 845 | */ |
846 | ENTRY(aesni_cbc_dec) | 846 | ENTRY(aesni_cbc_dec) |
847 | cmp $16, LEN | 847 | cmp $16, LEN |
848 | jb .Lcbc_dec_ret | 848 | jb .Lcbc_dec_just_ret |
849 | mov 480(KEYP), KLEN | 849 | mov 480(KEYP), KLEN |
850 | add $240, KEYP | 850 | add $240, KEYP |
851 | movups (IVP), IV | 851 | movups (IVP), IV |
@@ -891,6 +891,7 @@ ENTRY(aesni_cbc_dec) | |||
891 | add $16, OUTP | 891 | add $16, OUTP |
892 | cmp $16, LEN | 892 | cmp $16, LEN |
893 | jge .Lcbc_dec_loop1 | 893 | jge .Lcbc_dec_loop1 |
894 | movups IV, (IVP) | ||
895 | .Lcbc_dec_ret: | 894 | .Lcbc_dec_ret: |
895 | movups IV, (IVP) | ||
896 | .Lcbc_dec_just_ret: | ||
896 | ret | 897 | ret |
diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c index 4e663398f77f..c580c5ec1cad 100644 --- a/arch/x86/crypto/aesni-intel_glue.c +++ b/arch/x86/crypto/aesni-intel_glue.c | |||
@@ -198,6 +198,7 @@ static int ecb_encrypt(struct blkcipher_desc *desc, | |||
198 | 198 | ||
199 | blkcipher_walk_init(&walk, dst, src, nbytes); | 199 | blkcipher_walk_init(&walk, dst, src, nbytes); |
200 | err = blkcipher_walk_virt(desc, &walk); | 200 | err = blkcipher_walk_virt(desc, &walk); |
201 | desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP; | ||
201 | 202 | ||
202 | kernel_fpu_begin(); | 203 | kernel_fpu_begin(); |
203 | while ((nbytes = walk.nbytes)) { | 204 | while ((nbytes = walk.nbytes)) { |
@@ -221,6 +222,7 @@ static int ecb_decrypt(struct blkcipher_desc *desc, | |||
221 | 222 | ||
222 | blkcipher_walk_init(&walk, dst, src, nbytes); | 223 | blkcipher_walk_init(&walk, dst, src, nbytes); |
223 | err = blkcipher_walk_virt(desc, &walk); | 224 | err = blkcipher_walk_virt(desc, &walk); |
225 | desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP; | ||
224 | 226 | ||
225 | kernel_fpu_begin(); | 227 | kernel_fpu_begin(); |
226 | while ((nbytes = walk.nbytes)) { | 228 | while ((nbytes = walk.nbytes)) { |
@@ -266,6 +268,7 @@ static int cbc_encrypt(struct blkcipher_desc *desc, | |||
266 | 268 | ||
267 | blkcipher_walk_init(&walk, dst, src, nbytes); | 269 | blkcipher_walk_init(&walk, dst, src, nbytes); |
268 | err = blkcipher_walk_virt(desc, &walk); | 270 | err = blkcipher_walk_virt(desc, &walk); |
271 | desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP; | ||
269 | 272 | ||
270 | kernel_fpu_begin(); | 273 | kernel_fpu_begin(); |
271 | while ((nbytes = walk.nbytes)) { | 274 | while ((nbytes = walk.nbytes)) { |
@@ -289,6 +292,7 @@ static int cbc_decrypt(struct blkcipher_desc *desc, | |||
289 | 292 | ||
290 | blkcipher_walk_init(&walk, dst, src, nbytes); | 293 | blkcipher_walk_init(&walk, dst, src, nbytes); |
291 | err = blkcipher_walk_virt(desc, &walk); | 294 | err = blkcipher_walk_virt(desc, &walk); |
295 | desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP; | ||
292 | 296 | ||
293 | kernel_fpu_begin(); | 297 | kernel_fpu_begin(); |
294 | while ((nbytes = walk.nbytes)) { | 298 | while ((nbytes = walk.nbytes)) { |
diff --git a/arch/x86/crypto/fpu.c b/arch/x86/crypto/fpu.c index 5f9781a3815f..daef6cd2b45d 100644 --- a/arch/x86/crypto/fpu.c +++ b/arch/x86/crypto/fpu.c | |||
@@ -48,7 +48,7 @@ static int crypto_fpu_encrypt(struct blkcipher_desc *desc_in, | |||
48 | struct blkcipher_desc desc = { | 48 | struct blkcipher_desc desc = { |
49 | .tfm = child, | 49 | .tfm = child, |
50 | .info = desc_in->info, | 50 | .info = desc_in->info, |
51 | .flags = desc_in->flags, | 51 | .flags = desc_in->flags & ~CRYPTO_TFM_REQ_MAY_SLEEP, |
52 | }; | 52 | }; |
53 | 53 | ||
54 | kernel_fpu_begin(); | 54 | kernel_fpu_begin(); |
@@ -67,7 +67,7 @@ static int crypto_fpu_decrypt(struct blkcipher_desc *desc_in, | |||
67 | struct blkcipher_desc desc = { | 67 | struct blkcipher_desc desc = { |
68 | .tfm = child, | 68 | .tfm = child, |
69 | .info = desc_in->info, | 69 | .info = desc_in->info, |
70 | .flags = desc_in->flags, | 70 | .flags = desc_in->flags & ~CRYPTO_TFM_REQ_MAY_SLEEP, |
71 | }; | 71 | }; |
72 | 72 | ||
73 | kernel_fpu_begin(); | 73 | kernel_fpu_begin(); |
diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h index 4518dc500903..20d1465a2ab0 100644 --- a/arch/x86/include/asm/acpi.h +++ b/arch/x86/include/asm/acpi.h | |||
@@ -144,6 +144,7 @@ static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate) | |||
144 | 144 | ||
145 | #else /* !CONFIG_ACPI */ | 145 | #else /* !CONFIG_ACPI */ |
146 | 146 | ||
147 | #define acpi_disabled 1 | ||
147 | #define acpi_lapic 0 | 148 | #define acpi_lapic 0 |
148 | #define acpi_ioapic 0 | 149 | #define acpi_ioapic 0 |
149 | static inline void acpi_noirq_set(void) { } | 150 | static inline void acpi_noirq_set(void) { } |
diff --git a/arch/x86/include/asm/atomic_32.h b/arch/x86/include/asm/atomic_32.h index 2503d4e64c2a..dc5a667ff791 100644 --- a/arch/x86/include/asm/atomic_32.h +++ b/arch/x86/include/asm/atomic_32.h | |||
@@ -19,7 +19,10 @@ | |||
19 | * | 19 | * |
20 | * Atomically reads the value of @v. | 20 | * Atomically reads the value of @v. |
21 | */ | 21 | */ |
22 | #define atomic_read(v) ((v)->counter) | 22 | static inline int atomic_read(const atomic_t *v) |
23 | { | ||
24 | return v->counter; | ||
25 | } | ||
23 | 26 | ||
24 | /** | 27 | /** |
25 | * atomic_set - set atomic variable | 28 | * atomic_set - set atomic variable |
@@ -28,7 +31,10 @@ | |||
28 | * | 31 | * |
29 | * Atomically sets the value of @v to @i. | 32 | * Atomically sets the value of @v to @i. |
30 | */ | 33 | */ |
31 | #define atomic_set(v, i) (((v)->counter) = (i)) | 34 | static inline void atomic_set(atomic_t *v, int i) |
35 | { | ||
36 | v->counter = i; | ||
37 | } | ||
32 | 38 | ||
33 | /** | 39 | /** |
34 | * atomic_add - add integer to atomic variable | 40 | * atomic_add - add integer to atomic variable |
@@ -200,8 +206,15 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
200 | return atomic_add_return(-i, v); | 206 | return atomic_add_return(-i, v); |
201 | } | 207 | } |
202 | 208 | ||
203 | #define atomic_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new))) | 209 | static inline int atomic_cmpxchg(atomic_t *v, int old, int new) |
204 | #define atomic_xchg(v, new) (xchg(&((v)->counter), (new))) | 210 | { |
211 | return cmpxchg(&v->counter, old, new); | ||
212 | } | ||
213 | |||
214 | static inline int atomic_xchg(atomic_t *v, int new) | ||
215 | { | ||
216 | return xchg(&v->counter, new); | ||
217 | } | ||
205 | 218 | ||
206 | /** | 219 | /** |
207 | * atomic_add_unless - add unless the number is already a given value | 220 | * atomic_add_unless - add unless the number is already a given value |
@@ -250,45 +263,12 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u) | |||
250 | /* An 64bit atomic type */ | 263 | /* An 64bit atomic type */ |
251 | 264 | ||
252 | typedef struct { | 265 | typedef struct { |
253 | unsigned long long counter; | 266 | u64 __aligned(8) counter; |
254 | } atomic64_t; | 267 | } atomic64_t; |
255 | 268 | ||
256 | #define ATOMIC64_INIT(val) { (val) } | 269 | #define ATOMIC64_INIT(val) { (val) } |
257 | 270 | ||
258 | /** | 271 | extern u64 atomic64_cmpxchg(atomic64_t *ptr, u64 old_val, u64 new_val); |
259 | * atomic64_read - read atomic64 variable | ||
260 | * @ptr: pointer of type atomic64_t | ||
261 | * | ||
262 | * Atomically reads the value of @v. | ||
263 | * Doesn't imply a read memory barrier. | ||
264 | */ | ||
265 | #define __atomic64_read(ptr) ((ptr)->counter) | ||
266 | |||
267 | static inline unsigned long long | ||
268 | cmpxchg8b(unsigned long long *ptr, unsigned long long old, unsigned long long new) | ||
269 | { | ||
270 | asm volatile( | ||
271 | |||
272 | LOCK_PREFIX "cmpxchg8b (%[ptr])\n" | ||
273 | |||
274 | : "=A" (old) | ||
275 | |||
276 | : [ptr] "D" (ptr), | ||
277 | "A" (old), | ||
278 | "b" (ll_low(new)), | ||
279 | "c" (ll_high(new)) | ||
280 | |||
281 | : "memory"); | ||
282 | |||
283 | return old; | ||
284 | } | ||
285 | |||
286 | static inline unsigned long long | ||
287 | atomic64_cmpxchg(atomic64_t *ptr, unsigned long long old_val, | ||
288 | unsigned long long new_val) | ||
289 | { | ||
290 | return cmpxchg8b(&ptr->counter, old_val, new_val); | ||
291 | } | ||
292 | 272 | ||
293 | /** | 273 | /** |
294 | * atomic64_xchg - xchg atomic64 variable | 274 | * atomic64_xchg - xchg atomic64 variable |
@@ -298,18 +278,7 @@ atomic64_cmpxchg(atomic64_t *ptr, unsigned long long old_val, | |||
298 | * Atomically xchgs the value of @ptr to @new_val and returns | 278 | * Atomically xchgs the value of @ptr to @new_val and returns |
299 | * the old value. | 279 | * the old value. |
300 | */ | 280 | */ |
301 | 281 | extern u64 atomic64_xchg(atomic64_t *ptr, u64 new_val); | |
302 | static inline unsigned long long | ||
303 | atomic64_xchg(atomic64_t *ptr, unsigned long long new_val) | ||
304 | { | ||
305 | unsigned long long old_val; | ||
306 | |||
307 | do { | ||
308 | old_val = atomic_read(ptr); | ||
309 | } while (atomic64_cmpxchg(ptr, old_val, new_val) != old_val); | ||
310 | |||
311 | return old_val; | ||
312 | } | ||
313 | 282 | ||
314 | /** | 283 | /** |
315 | * atomic64_set - set atomic64 variable | 284 | * atomic64_set - set atomic64 variable |
@@ -318,10 +287,7 @@ atomic64_xchg(atomic64_t *ptr, unsigned long long new_val) | |||
318 | * | 287 | * |
319 | * Atomically sets the value of @ptr to @new_val. | 288 | * Atomically sets the value of @ptr to @new_val. |
320 | */ | 289 | */ |
321 | static inline void atomic64_set(atomic64_t *ptr, unsigned long long new_val) | 290 | extern void atomic64_set(atomic64_t *ptr, u64 new_val); |
322 | { | ||
323 | atomic64_xchg(ptr, new_val); | ||
324 | } | ||
325 | 291 | ||
326 | /** | 292 | /** |
327 | * atomic64_read - read atomic64 variable | 293 | * atomic64_read - read atomic64 variable |
@@ -329,17 +295,30 @@ static inline void atomic64_set(atomic64_t *ptr, unsigned long long new_val) | |||
329 | * | 295 | * |
330 | * Atomically reads the value of @ptr and returns it. | 296 | * Atomically reads the value of @ptr and returns it. |
331 | */ | 297 | */ |
332 | static inline unsigned long long atomic64_read(atomic64_t *ptr) | 298 | static inline u64 atomic64_read(atomic64_t *ptr) |
333 | { | 299 | { |
334 | unsigned long long curr_val; | 300 | u64 res; |
335 | 301 | ||
336 | do { | 302 | /* |
337 | curr_val = __atomic64_read(ptr); | 303 | * Note, we inline this atomic64_t primitive because |
338 | } while (atomic64_cmpxchg(ptr, curr_val, curr_val) != curr_val); | 304 | * it only clobbers EAX/EDX and leaves the others |
339 | 305 | * untouched. We also (somewhat subtly) rely on the | |
340 | return curr_val; | 306 | * fact that cmpxchg8b returns the current 64-bit value |
307 | * of the memory location we are touching: | ||
308 | */ | ||
309 | asm volatile( | ||
310 | "mov %%ebx, %%eax\n\t" | ||
311 | "mov %%ecx, %%edx\n\t" | ||
312 | LOCK_PREFIX "cmpxchg8b %1\n" | ||
313 | : "=&A" (res) | ||
314 | : "m" (*ptr) | ||
315 | ); | ||
316 | |||
317 | return res; | ||
341 | } | 318 | } |
342 | 319 | ||
320 | extern u64 atomic64_read(atomic64_t *ptr); | ||
321 | |||
343 | /** | 322 | /** |
344 | * atomic64_add_return - add and return | 323 | * atomic64_add_return - add and return |
345 | * @delta: integer value to add | 324 | * @delta: integer value to add |
@@ -347,34 +326,14 @@ static inline unsigned long long atomic64_read(atomic64_t *ptr) | |||
347 | * | 326 | * |
348 | * Atomically adds @delta to @ptr and returns @delta + *@ptr | 327 | * Atomically adds @delta to @ptr and returns @delta + *@ptr |
349 | */ | 328 | */ |
350 | static inline unsigned long long | 329 | extern u64 atomic64_add_return(u64 delta, atomic64_t *ptr); |
351 | atomic64_add_return(unsigned long long delta, atomic64_t *ptr) | ||
352 | { | ||
353 | unsigned long long old_val, new_val; | ||
354 | |||
355 | do { | ||
356 | old_val = atomic_read(ptr); | ||
357 | new_val = old_val + delta; | ||
358 | |||
359 | } while (atomic64_cmpxchg(ptr, old_val, new_val) != old_val); | ||
360 | |||
361 | return new_val; | ||
362 | } | ||
363 | |||
364 | static inline long atomic64_sub_return(unsigned long long delta, atomic64_t *ptr) | ||
365 | { | ||
366 | return atomic64_add_return(-delta, ptr); | ||
367 | } | ||
368 | 330 | ||
369 | static inline long atomic64_inc_return(atomic64_t *ptr) | 331 | /* |
370 | { | 332 | * Other variants with different arithmetic operators: |
371 | return atomic64_add_return(1, ptr); | 333 | */ |
372 | } | 334 | extern u64 atomic64_sub_return(u64 delta, atomic64_t *ptr); |
373 | 335 | extern u64 atomic64_inc_return(atomic64_t *ptr); | |
374 | static inline long atomic64_dec_return(atomic64_t *ptr) | 336 | extern u64 atomic64_dec_return(atomic64_t *ptr); |
375 | { | ||
376 | return atomic64_sub_return(1, ptr); | ||
377 | } | ||
378 | 337 | ||
379 | /** | 338 | /** |
380 | * atomic64_add - add integer to atomic64 variable | 339 | * atomic64_add - add integer to atomic64 variable |
@@ -383,10 +342,7 @@ static inline long atomic64_dec_return(atomic64_t *ptr) | |||
383 | * | 342 | * |
384 | * Atomically adds @delta to @ptr. | 343 | * Atomically adds @delta to @ptr. |
385 | */ | 344 | */ |
386 | static inline void atomic64_add(unsigned long long delta, atomic64_t *ptr) | 345 | extern void atomic64_add(u64 delta, atomic64_t *ptr); |
387 | { | ||
388 | atomic64_add_return(delta, ptr); | ||
389 | } | ||
390 | 346 | ||
391 | /** | 347 | /** |
392 | * atomic64_sub - subtract the atomic64 variable | 348 | * atomic64_sub - subtract the atomic64 variable |
@@ -395,10 +351,7 @@ static inline void atomic64_add(unsigned long long delta, atomic64_t *ptr) | |||
395 | * | 351 | * |
396 | * Atomically subtracts @delta from @ptr. | 352 | * Atomically subtracts @delta from @ptr. |
397 | */ | 353 | */ |
398 | static inline void atomic64_sub(unsigned long long delta, atomic64_t *ptr) | 354 | extern void atomic64_sub(u64 delta, atomic64_t *ptr); |
399 | { | ||
400 | atomic64_add(-delta, ptr); | ||
401 | } | ||
402 | 355 | ||
403 | /** | 356 | /** |
404 | * atomic64_sub_and_test - subtract value from variable and test result | 357 | * atomic64_sub_and_test - subtract value from variable and test result |
@@ -409,13 +362,7 @@ static inline void atomic64_sub(unsigned long long delta, atomic64_t *ptr) | |||
409 | * true if the result is zero, or false for all | 362 | * true if the result is zero, or false for all |
410 | * other cases. | 363 | * other cases. |
411 | */ | 364 | */ |
412 | static inline int | 365 | extern int atomic64_sub_and_test(u64 delta, atomic64_t *ptr); |
413 | atomic64_sub_and_test(unsigned long long delta, atomic64_t *ptr) | ||
414 | { | ||
415 | unsigned long long old_val = atomic64_sub_return(delta, ptr); | ||
416 | |||
417 | return old_val == 0; | ||
418 | } | ||
419 | 366 | ||
420 | /** | 367 | /** |
421 | * atomic64_inc - increment atomic64 variable | 368 | * atomic64_inc - increment atomic64 variable |
@@ -423,10 +370,7 @@ atomic64_sub_and_test(unsigned long long delta, atomic64_t *ptr) | |||
423 | * | 370 | * |
424 | * Atomically increments @ptr by 1. | 371 | * Atomically increments @ptr by 1. |
425 | */ | 372 | */ |
426 | static inline void atomic64_inc(atomic64_t *ptr) | 373 | extern void atomic64_inc(atomic64_t *ptr); |
427 | { | ||
428 | atomic64_add(1, ptr); | ||
429 | } | ||
430 | 374 | ||
431 | /** | 375 | /** |
432 | * atomic64_dec - decrement atomic64 variable | 376 | * atomic64_dec - decrement atomic64 variable |
@@ -434,10 +378,7 @@ static inline void atomic64_inc(atomic64_t *ptr) | |||
434 | * | 378 | * |
435 | * Atomically decrements @ptr by 1. | 379 | * Atomically decrements @ptr by 1. |
436 | */ | 380 | */ |
437 | static inline void atomic64_dec(atomic64_t *ptr) | 381 | extern void atomic64_dec(atomic64_t *ptr); |
438 | { | ||
439 | atomic64_sub(1, ptr); | ||
440 | } | ||
441 | 382 | ||
442 | /** | 383 | /** |
443 | * atomic64_dec_and_test - decrement and test | 384 | * atomic64_dec_and_test - decrement and test |
@@ -447,10 +388,7 @@ static inline void atomic64_dec(atomic64_t *ptr) | |||
447 | * returns true if the result is 0, or false for all other | 388 | * returns true if the result is 0, or false for all other |
448 | * cases. | 389 | * cases. |
449 | */ | 390 | */ |
450 | static inline int atomic64_dec_and_test(atomic64_t *ptr) | 391 | extern int atomic64_dec_and_test(atomic64_t *ptr); |
451 | { | ||
452 | return atomic64_sub_and_test(1, ptr); | ||
453 | } | ||
454 | 392 | ||
455 | /** | 393 | /** |
456 | * atomic64_inc_and_test - increment and test | 394 | * atomic64_inc_and_test - increment and test |
@@ -460,10 +398,7 @@ static inline int atomic64_dec_and_test(atomic64_t *ptr) | |||
460 | * and returns true if the result is zero, or false for all | 398 | * and returns true if the result is zero, or false for all |
461 | * other cases. | 399 | * other cases. |
462 | */ | 400 | */ |
463 | static inline int atomic64_inc_and_test(atomic64_t *ptr) | 401 | extern int atomic64_inc_and_test(atomic64_t *ptr); |
464 | { | ||
465 | return atomic64_sub_and_test(-1, ptr); | ||
466 | } | ||
467 | 402 | ||
468 | /** | 403 | /** |
469 | * atomic64_add_negative - add and test if negative | 404 | * atomic64_add_negative - add and test if negative |
@@ -474,13 +409,7 @@ static inline int atomic64_inc_and_test(atomic64_t *ptr) | |||
474 | * if the result is negative, or false when | 409 | * if the result is negative, or false when |
475 | * result is greater than or equal to zero. | 410 | * result is greater than or equal to zero. |
476 | */ | 411 | */ |
477 | static inline int | 412 | extern int atomic64_add_negative(u64 delta, atomic64_t *ptr); |
478 | atomic64_add_negative(unsigned long long delta, atomic64_t *ptr) | ||
479 | { | ||
480 | long long old_val = atomic64_add_return(delta, ptr); | ||
481 | |||
482 | return old_val < 0; | ||
483 | } | ||
484 | 413 | ||
485 | #include <asm-generic/atomic-long.h> | 414 | #include <asm-generic/atomic-long.h> |
486 | #endif /* _ASM_X86_ATOMIC_32_H */ | 415 | #endif /* _ASM_X86_ATOMIC_32_H */ |
diff --git a/arch/x86/include/asm/atomic_64.h b/arch/x86/include/asm/atomic_64.h index 0d6360220007..d605dc268e79 100644 --- a/arch/x86/include/asm/atomic_64.h +++ b/arch/x86/include/asm/atomic_64.h | |||
@@ -18,7 +18,10 @@ | |||
18 | * | 18 | * |
19 | * Atomically reads the value of @v. | 19 | * Atomically reads the value of @v. |
20 | */ | 20 | */ |
21 | #define atomic_read(v) ((v)->counter) | 21 | static inline int atomic_read(const atomic_t *v) |
22 | { | ||
23 | return v->counter; | ||
24 | } | ||
22 | 25 | ||
23 | /** | 26 | /** |
24 | * atomic_set - set atomic variable | 27 | * atomic_set - set atomic variable |
@@ -27,7 +30,10 @@ | |||
27 | * | 30 | * |
28 | * Atomically sets the value of @v to @i. | 31 | * Atomically sets the value of @v to @i. |
29 | */ | 32 | */ |
30 | #define atomic_set(v, i) (((v)->counter) = (i)) | 33 | static inline void atomic_set(atomic_t *v, int i) |
34 | { | ||
35 | v->counter = i; | ||
36 | } | ||
31 | 37 | ||
32 | /** | 38 | /** |
33 | * atomic_add - add integer to atomic variable | 39 | * atomic_add - add integer to atomic variable |
@@ -192,7 +198,10 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
192 | * Atomically reads the value of @v. | 198 | * Atomically reads the value of @v. |
193 | * Doesn't imply a read memory barrier. | 199 | * Doesn't imply a read memory barrier. |
194 | */ | 200 | */ |
195 | #define atomic64_read(v) ((v)->counter) | 201 | static inline long atomic64_read(const atomic64_t *v) |
202 | { | ||
203 | return v->counter; | ||
204 | } | ||
196 | 205 | ||
197 | /** | 206 | /** |
198 | * atomic64_set - set atomic64 variable | 207 | * atomic64_set - set atomic64 variable |
@@ -201,7 +210,10 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
201 | * | 210 | * |
202 | * Atomically sets the value of @v to @i. | 211 | * Atomically sets the value of @v to @i. |
203 | */ | 212 | */ |
204 | #define atomic64_set(v, i) (((v)->counter) = (i)) | 213 | static inline void atomic64_set(atomic64_t *v, long i) |
214 | { | ||
215 | v->counter = i; | ||
216 | } | ||
205 | 217 | ||
206 | /** | 218 | /** |
207 | * atomic64_add - add integer to atomic64 variable | 219 | * atomic64_add - add integer to atomic64 variable |
@@ -355,11 +367,25 @@ static inline long atomic64_sub_return(long i, atomic64_t *v) | |||
355 | #define atomic64_inc_return(v) (atomic64_add_return(1, (v))) | 367 | #define atomic64_inc_return(v) (atomic64_add_return(1, (v))) |
356 | #define atomic64_dec_return(v) (atomic64_sub_return(1, (v))) | 368 | #define atomic64_dec_return(v) (atomic64_sub_return(1, (v))) |
357 | 369 | ||
358 | #define atomic64_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new))) | 370 | static inline long atomic64_cmpxchg(atomic64_t *v, long old, long new) |
359 | #define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) | 371 | { |
372 | return cmpxchg(&v->counter, old, new); | ||
373 | } | ||
374 | |||
375 | static inline long atomic64_xchg(atomic64_t *v, long new) | ||
376 | { | ||
377 | return xchg(&v->counter, new); | ||
378 | } | ||
360 | 379 | ||
361 | #define atomic_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new))) | 380 | static inline long atomic_cmpxchg(atomic_t *v, int old, int new) |
362 | #define atomic_xchg(v, new) (xchg(&((v)->counter), (new))) | 381 | { |
382 | return cmpxchg(&v->counter, old, new); | ||
383 | } | ||
384 | |||
385 | static inline long atomic_xchg(atomic_t *v, int new) | ||
386 | { | ||
387 | return xchg(&v->counter, new); | ||
388 | } | ||
363 | 389 | ||
364 | /** | 390 | /** |
365 | * atomic_add_unless - add unless the number is a given value | 391 | * atomic_add_unless - add unless the number is a given value |
diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h index 418e632d4a80..7a1065958ba9 100644 --- a/arch/x86/include/asm/boot.h +++ b/arch/x86/include/asm/boot.h | |||
@@ -8,7 +8,7 @@ | |||
8 | 8 | ||
9 | #ifdef __KERNEL__ | 9 | #ifdef __KERNEL__ |
10 | 10 | ||
11 | #include <asm/page_types.h> | 11 | #include <asm/pgtable_types.h> |
12 | 12 | ||
13 | /* Physical address where kernel should be loaded. */ | 13 | /* Physical address where kernel should be loaded. */ |
14 | #define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \ | 14 | #define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \ |
@@ -16,10 +16,10 @@ | |||
16 | & ~(CONFIG_PHYSICAL_ALIGN - 1)) | 16 | & ~(CONFIG_PHYSICAL_ALIGN - 1)) |
17 | 17 | ||
18 | /* Minimum kernel alignment, as a power of two */ | 18 | /* Minimum kernel alignment, as a power of two */ |
19 | #ifdef CONFIG_x86_64 | 19 | #ifdef CONFIG_X86_64 |
20 | #define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT | 20 | #define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT |
21 | #else | 21 | #else |
22 | #define MIN_KERNEL_ALIGN_LG2 (PAGE_SHIFT+1) | 22 | #define MIN_KERNEL_ALIGN_LG2 (PAGE_SHIFT + THREAD_ORDER) |
23 | #endif | 23 | #endif |
24 | #define MIN_KERNEL_ALIGN (_AC(1, UL) << MIN_KERNEL_ALIGN_LG2) | 24 | #define MIN_KERNEL_ALIGN (_AC(1, UL) << MIN_KERNEL_ALIGN_LG2) |
25 | 25 | ||
diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h index 2d81af3974a0..7b2d71df39a6 100644 --- a/arch/x86/include/asm/fixmap.h +++ b/arch/x86/include/asm/fixmap.h | |||
@@ -111,12 +111,9 @@ enum fixed_addresses { | |||
111 | #ifdef CONFIG_PARAVIRT | 111 | #ifdef CONFIG_PARAVIRT |
112 | FIX_PARAVIRT_BOOTMAP, | 112 | FIX_PARAVIRT_BOOTMAP, |
113 | #endif | 113 | #endif |
114 | FIX_TEXT_POKE0, /* reserve 2 pages for text_poke() */ | 114 | FIX_TEXT_POKE1, /* reserve 2 pages for text_poke() */ |
115 | FIX_TEXT_POKE1, | 115 | FIX_TEXT_POKE0, /* first page is last, because allocation is backward */ |
116 | __end_of_permanent_fixed_addresses, | 116 | __end_of_permanent_fixed_addresses, |
117 | #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT | ||
118 | FIX_OHCI1394_BASE, | ||
119 | #endif | ||
120 | /* | 117 | /* |
121 | * 256 temporary boot-time mappings, used by early_ioremap(), | 118 | * 256 temporary boot-time mappings, used by early_ioremap(), |
122 | * before ioremap() is functional. | 119 | * before ioremap() is functional. |
@@ -129,6 +126,9 @@ enum fixed_addresses { | |||
129 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 256 - | 126 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 256 - |
130 | (__end_of_permanent_fixed_addresses & 255), | 127 | (__end_of_permanent_fixed_addresses & 255), |
131 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_SLOTS - 1, | 128 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_SLOTS - 1, |
129 | #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT | ||
130 | FIX_OHCI1394_BASE, | ||
131 | #endif | ||
132 | #ifdef CONFIG_X86_32 | 132 | #ifdef CONFIG_X86_32 |
133 | FIX_WP_TEST, | 133 | FIX_WP_TEST, |
134 | #endif | 134 | #endif |
diff --git a/arch/x86/include/asm/iommu.h b/arch/x86/include/asm/iommu.h index af326a2975b5..fd6d21bbee6c 100644 --- a/arch/x86/include/asm/iommu.h +++ b/arch/x86/include/asm/iommu.h | |||
@@ -6,6 +6,7 @@ extern void no_iommu_init(void); | |||
6 | extern struct dma_map_ops nommu_dma_ops; | 6 | extern struct dma_map_ops nommu_dma_ops; |
7 | extern int force_iommu, no_iommu; | 7 | extern int force_iommu, no_iommu; |
8 | extern int iommu_detected; | 8 | extern int iommu_detected; |
9 | extern int iommu_pass_through; | ||
9 | 10 | ||
10 | /* 10 seconds */ | 11 | /* 10 seconds */ |
11 | #define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000) | 12 | #define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000) |
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index 1692fb5050e3..6be7fc254b59 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h | |||
@@ -246,10 +246,6 @@ | |||
246 | #define MSR_IA32_MISC_ENABLE_TURBO_DISABLE (1ULL << 38) | 246 | #define MSR_IA32_MISC_ENABLE_TURBO_DISABLE (1ULL << 38) |
247 | #define MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE (1ULL << 39) | 247 | #define MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE (1ULL << 39) |
248 | 248 | ||
249 | /* Intel Model 6 */ | ||
250 | #define MSR_P6_EVNTSEL0 0x00000186 | ||
251 | #define MSR_P6_EVNTSEL1 0x00000187 | ||
252 | |||
253 | /* P4/Xeon+ specific */ | 249 | /* P4/Xeon+ specific */ |
254 | #define MSR_IA32_MCG_EAX 0x00000180 | 250 | #define MSR_IA32_MCG_EAX 0x00000180 |
255 | #define MSR_IA32_MCG_EBX 0x00000181 | 251 | #define MSR_IA32_MCG_EBX 0x00000181 |
diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h index c97264409934..c86e5ed4af51 100644 --- a/arch/x86/include/asm/nmi.h +++ b/arch/x86/include/asm/nmi.h | |||
@@ -72,7 +72,6 @@ void lapic_watchdog_stop(void); | |||
72 | int lapic_watchdog_init(unsigned nmi_hz); | 72 | int lapic_watchdog_init(unsigned nmi_hz); |
73 | int lapic_wd_event(unsigned nmi_hz); | 73 | int lapic_wd_event(unsigned nmi_hz); |
74 | unsigned lapic_adjust_nmi_hz(unsigned hz); | 74 | unsigned lapic_adjust_nmi_hz(unsigned hz); |
75 | int lapic_watchdog_ok(void); | ||
76 | void disable_lapic_nmi_watchdog(void); | 75 | void disable_lapic_nmi_watchdog(void); |
77 | void enable_lapic_nmi_watchdog(void); | 76 | void enable_lapic_nmi_watchdog(void); |
78 | void stop_nmi(void); | 77 | void stop_nmi(void); |
diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h index b51a1e8b0baf..1ff685ca221c 100644 --- a/arch/x86/include/asm/pci.h +++ b/arch/x86/include/asm/pci.h | |||
@@ -91,7 +91,7 @@ extern void pci_iommu_alloc(void); | |||
91 | 91 | ||
92 | #define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys) | 92 | #define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys) |
93 | 93 | ||
94 | #if defined(CONFIG_X86_64) || defined(CONFIG_DMA_API_DEBUG) | 94 | #if defined(CONFIG_X86_64) || defined(CONFIG_DMAR) || defined(CONFIG_DMA_API_DEBUG) |
95 | 95 | ||
96 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ | 96 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ |
97 | dma_addr_t ADDR_NAME; | 97 | dma_addr_t ADDR_NAME; |
@@ -130,6 +130,7 @@ extern void pci_iommu_alloc(void); | |||
130 | 130 | ||
131 | /* generic pci stuff */ | 131 | /* generic pci stuff */ |
132 | #include <asm-generic/pci.h> | 132 | #include <asm-generic/pci.h> |
133 | #define PCIBIOS_MAX_MEM_32 0xffffffff | ||
133 | 134 | ||
134 | #ifdef CONFIG_NUMA | 135 | #ifdef CONFIG_NUMA |
135 | /* Returns the node based on pci bus */ | 136 | /* Returns the node based on pci bus */ |
diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h index e60fd3e14bdf..b399988eee3a 100644 --- a/arch/x86/include/asm/pci_x86.h +++ b/arch/x86/include/asm/pci_x86.h | |||
@@ -121,6 +121,9 @@ extern int __init pcibios_init(void); | |||
121 | extern int __init pci_mmcfg_arch_init(void); | 121 | extern int __init pci_mmcfg_arch_init(void); |
122 | extern void __init pci_mmcfg_arch_free(void); | 122 | extern void __init pci_mmcfg_arch_free(void); |
123 | 123 | ||
124 | extern struct acpi_mcfg_allocation *pci_mmcfg_config; | ||
125 | extern int pci_mmcfg_config_num; | ||
126 | |||
124 | /* | 127 | /* |
125 | * AMD Fam10h CPUs are buggy, and cannot access MMIO config space | 128 | * AMD Fam10h CPUs are buggy, and cannot access MMIO config space |
126 | * on their northbrige except through the * %eax register. As such, you MUST | 129 | * on their northbrige except through the * %eax register. As such, you MUST |
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index 02ecb30982a3..103f1ddb0d85 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h | |||
@@ -42,6 +42,7 @@ | |||
42 | 42 | ||
43 | #else /* ...!ASSEMBLY */ | 43 | #else /* ...!ASSEMBLY */ |
44 | 44 | ||
45 | #include <linux/kernel.h> | ||
45 | #include <linux/stringify.h> | 46 | #include <linux/stringify.h> |
46 | 47 | ||
47 | #ifdef CONFIG_SMP | 48 | #ifdef CONFIG_SMP |
@@ -155,6 +156,15 @@ do { \ | |||
155 | /* We can use this directly for local CPU (faster). */ | 156 | /* We can use this directly for local CPU (faster). */ |
156 | DECLARE_PER_CPU(unsigned long, this_cpu_off); | 157 | DECLARE_PER_CPU(unsigned long, this_cpu_off); |
157 | 158 | ||
159 | #ifdef CONFIG_NEED_MULTIPLE_NODES | ||
160 | void *pcpu_lpage_remapped(void *kaddr); | ||
161 | #else | ||
162 | static inline void *pcpu_lpage_remapped(void *kaddr) | ||
163 | { | ||
164 | return NULL; | ||
165 | } | ||
166 | #endif | ||
167 | |||
158 | #endif /* !__ASSEMBLY__ */ | 168 | #endif /* !__ASSEMBLY__ */ |
159 | 169 | ||
160 | #ifdef CONFIG_SMP | 170 | #ifdef CONFIG_SMP |
diff --git a/arch/x86/include/asm/perf_counter.h b/arch/x86/include/asm/perf_counter.h index 5fb33e160ea0..fa64e401589d 100644 --- a/arch/x86/include/asm/perf_counter.h +++ b/arch/x86/include/asm/perf_counter.h | |||
@@ -87,6 +87,9 @@ union cpuid10_edx { | |||
87 | #ifdef CONFIG_PERF_COUNTERS | 87 | #ifdef CONFIG_PERF_COUNTERS |
88 | extern void init_hw_perf_counters(void); | 88 | extern void init_hw_perf_counters(void); |
89 | extern void perf_counters_lapic_init(void); | 89 | extern void perf_counters_lapic_init(void); |
90 | |||
91 | #define PERF_COUNTER_INDEX_OFFSET 0 | ||
92 | |||
90 | #else | 93 | #else |
91 | static inline void init_hw_perf_counters(void) { } | 94 | static inline void init_hw_perf_counters(void) { } |
92 | static inline void perf_counters_lapic_init(void) { } | 95 | static inline void perf_counters_lapic_init(void) { } |
diff --git a/arch/x86/include/asm/proto.h b/arch/x86/include/asm/proto.h index 49fb3ecf3bb3..621f56d73121 100644 --- a/arch/x86/include/asm/proto.h +++ b/arch/x86/include/asm/proto.h | |||
@@ -22,7 +22,14 @@ extern int reboot_force; | |||
22 | 22 | ||
23 | long do_arch_prctl(struct task_struct *task, int code, unsigned long addr); | 23 | long do_arch_prctl(struct task_struct *task, int code, unsigned long addr); |
24 | 24 | ||
25 | #define round_up(x, y) (((x) + (y) - 1) & ~((y) - 1)) | 25 | /* |
26 | #define round_down(x, y) ((x) & ~((y) - 1)) | 26 | * This looks more complex than it should be. But we need to |
27 | * get the type for the ~ right in round_down (it needs to be | ||
28 | * as wide as the result!), and we want to evaluate the macro | ||
29 | * arguments just once each. | ||
30 | */ | ||
31 | #define __round_mask(x,y) ((__typeof__(x))((y)-1)) | ||
32 | #define round_up(x,y) ((((x)-1) | __round_mask(x,y))+1) | ||
33 | #define round_down(x,y) ((x) & ~__round_mask(x,y)) | ||
27 | 34 | ||
28 | #endif /* _ASM_X86_PROTO_H */ | 35 | #endif /* _ASM_X86_PROTO_H */ |
diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h index b7e5db876399..4e77853321db 100644 --- a/arch/x86/include/asm/spinlock.h +++ b/arch/x86/include/asm/spinlock.h | |||
@@ -302,4 +302,8 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw) | |||
302 | #define _raw_read_relax(lock) cpu_relax() | 302 | #define _raw_read_relax(lock) cpu_relax() |
303 | #define _raw_write_relax(lock) cpu_relax() | 303 | #define _raw_write_relax(lock) cpu_relax() |
304 | 304 | ||
305 | /* The {read|write|spin}_lock() on x86 are full memory barriers. */ | ||
306 | static inline void smp_mb__after_lock(void) { } | ||
307 | #define ARCH_HAS_SMP_MB_AFTER_LOCK | ||
308 | |||
305 | #endif /* _ASM_X86_SPINLOCK_H */ | 309 | #endif /* _ASM_X86_SPINLOCK_H */ |
diff --git a/arch/x86/include/asm/stacktrace.h b/arch/x86/include/asm/stacktrace.h index f517944b2b17..cf86a5e73815 100644 --- a/arch/x86/include/asm/stacktrace.h +++ b/arch/x86/include/asm/stacktrace.h | |||
@@ -3,6 +3,8 @@ | |||
3 | 3 | ||
4 | extern int kstack_depth_to_print; | 4 | extern int kstack_depth_to_print; |
5 | 5 | ||
6 | int x86_is_stack_id(int id, char *name); | ||
7 | |||
6 | /* Generic stack tracer with callbacks */ | 8 | /* Generic stack tracer with callbacks */ |
7 | 9 | ||
8 | struct stacktrace_ops { | 10 | struct stacktrace_ops { |
diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h index b0783520988b..fad7d40b75f8 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h | |||
@@ -49,7 +49,7 @@ struct thread_info { | |||
49 | .exec_domain = &default_exec_domain, \ | 49 | .exec_domain = &default_exec_domain, \ |
50 | .flags = 0, \ | 50 | .flags = 0, \ |
51 | .cpu = 0, \ | 51 | .cpu = 0, \ |
52 | .preempt_count = 1, \ | 52 | .preempt_count = INIT_PREEMPT_COUNT, \ |
53 | .addr_limit = KERNEL_DS, \ | 53 | .addr_limit = KERNEL_DS, \ |
54 | .restart_block = { \ | 54 | .restart_block = { \ |
55 | .fn = do_no_restart_syscall, \ | 55 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 6c327b852e23..430d5b24af7b 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile | |||
@@ -26,6 +26,8 @@ CFLAGS_tsc.o := $(nostackp) | |||
26 | CFLAGS_paravirt.o := $(nostackp) | 26 | CFLAGS_paravirt.o := $(nostackp) |
27 | GCOV_PROFILE_vsyscall_64.o := n | 27 | GCOV_PROFILE_vsyscall_64.o := n |
28 | GCOV_PROFILE_hpet.o := n | 28 | GCOV_PROFILE_hpet.o := n |
29 | GCOV_PROFILE_tsc.o := n | ||
30 | GCOV_PROFILE_paravirt.o := n | ||
29 | 31 | ||
30 | obj-y := process_$(BITS).o signal.o entry_$(BITS).o | 32 | obj-y := process_$(BITS).o signal.o entry_$(BITS).o |
31 | obj-y += traps.o irq.o irq_$(BITS).o dumpstack_$(BITS).o | 33 | obj-y += traps.o irq.o irq_$(BITS).o dumpstack_$(BITS).o |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 631086159c53..6b8ca3a0285d 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -44,11 +44,7 @@ | |||
44 | 44 | ||
45 | static int __initdata acpi_force = 0; | 45 | static int __initdata acpi_force = 0; |
46 | u32 acpi_rsdt_forced; | 46 | u32 acpi_rsdt_forced; |
47 | #ifdef CONFIG_ACPI | 47 | int acpi_disabled; |
48 | int acpi_disabled = 0; | ||
49 | #else | ||
50 | int acpi_disabled = 1; | ||
51 | #endif | ||
52 | EXPORT_SYMBOL(acpi_disabled); | 48 | EXPORT_SYMBOL(acpi_disabled); |
53 | 49 | ||
54 | #ifdef CONFIG_X86_64 | 50 | #ifdef CONFIG_X86_64 |
@@ -122,72 +118,6 @@ void __init __acpi_unmap_table(char *map, unsigned long size) | |||
122 | early_iounmap(map, size); | 118 | early_iounmap(map, size); |
123 | } | 119 | } |
124 | 120 | ||
125 | #ifdef CONFIG_PCI_MMCONFIG | ||
126 | |||
127 | static int acpi_mcfg_64bit_base_addr __initdata = FALSE; | ||
128 | |||
129 | /* The physical address of the MMCONFIG aperture. Set from ACPI tables. */ | ||
130 | struct acpi_mcfg_allocation *pci_mmcfg_config; | ||
131 | int pci_mmcfg_config_num; | ||
132 | |||
133 | static int __init acpi_mcfg_oem_check(struct acpi_table_mcfg *mcfg) | ||
134 | { | ||
135 | if (!strcmp(mcfg->header.oem_id, "SGI")) | ||
136 | acpi_mcfg_64bit_base_addr = TRUE; | ||
137 | |||
138 | return 0; | ||
139 | } | ||
140 | |||
141 | int __init acpi_parse_mcfg(struct acpi_table_header *header) | ||
142 | { | ||
143 | struct acpi_table_mcfg *mcfg; | ||
144 | unsigned long i; | ||
145 | int config_size; | ||
146 | |||
147 | if (!header) | ||
148 | return -EINVAL; | ||
149 | |||
150 | mcfg = (struct acpi_table_mcfg *)header; | ||
151 | |||
152 | /* how many config structures do we have */ | ||
153 | pci_mmcfg_config_num = 0; | ||
154 | i = header->length - sizeof(struct acpi_table_mcfg); | ||
155 | while (i >= sizeof(struct acpi_mcfg_allocation)) { | ||
156 | ++pci_mmcfg_config_num; | ||
157 | i -= sizeof(struct acpi_mcfg_allocation); | ||
158 | }; | ||
159 | if (pci_mmcfg_config_num == 0) { | ||
160 | printk(KERN_ERR PREFIX "MMCONFIG has no entries\n"); | ||
161 | return -ENODEV; | ||
162 | } | ||
163 | |||
164 | config_size = pci_mmcfg_config_num * sizeof(*pci_mmcfg_config); | ||
165 | pci_mmcfg_config = kmalloc(config_size, GFP_KERNEL); | ||
166 | if (!pci_mmcfg_config) { | ||
167 | printk(KERN_WARNING PREFIX | ||
168 | "No memory for MCFG config tables\n"); | ||
169 | return -ENOMEM; | ||
170 | } | ||
171 | |||
172 | memcpy(pci_mmcfg_config, &mcfg[1], config_size); | ||
173 | |||
174 | acpi_mcfg_oem_check(mcfg); | ||
175 | |||
176 | for (i = 0; i < pci_mmcfg_config_num; ++i) { | ||
177 | if ((pci_mmcfg_config[i].address > 0xFFFFFFFF) && | ||
178 | !acpi_mcfg_64bit_base_addr) { | ||
179 | printk(KERN_ERR PREFIX | ||
180 | "MMCONFIG not in low 4GB of memory\n"); | ||
181 | kfree(pci_mmcfg_config); | ||
182 | pci_mmcfg_config_num = 0; | ||
183 | return -ENODEV; | ||
184 | } | ||
185 | } | ||
186 | |||
187 | return 0; | ||
188 | } | ||
189 | #endif /* CONFIG_PCI_MMCONFIG */ | ||
190 | |||
191 | #ifdef CONFIG_X86_LOCAL_APIC | 121 | #ifdef CONFIG_X86_LOCAL_APIC |
192 | static int __init acpi_parse_madt(struct acpi_table_header *table) | 122 | static int __init acpi_parse_madt(struct acpi_table_header *table) |
193 | { | 123 | { |
@@ -1519,14 +1449,6 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { | |||
1519 | }, | 1449 | }, |
1520 | { | 1450 | { |
1521 | .callback = force_acpi_ht, | 1451 | .callback = force_acpi_ht, |
1522 | .ident = "ASUS P4B266", | ||
1523 | .matches = { | ||
1524 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), | ||
1525 | DMI_MATCH(DMI_BOARD_NAME, "P4B266"), | ||
1526 | }, | ||
1527 | }, | ||
1528 | { | ||
1529 | .callback = force_acpi_ht, | ||
1530 | .ident = "ASUS P2B-DS", | 1452 | .ident = "ASUS P2B-DS", |
1531 | .matches = { | 1453 | .matches = { |
1532 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), | 1454 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), |
diff --git a/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c index bbbe4bbb6f34..8c44c232efcb 100644 --- a/arch/x86/kernel/acpi/cstate.c +++ b/arch/x86/kernel/acpi/cstate.c | |||
@@ -34,12 +34,22 @@ void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags, | |||
34 | flags->bm_check = 1; | 34 | flags->bm_check = 1; |
35 | else if (c->x86_vendor == X86_VENDOR_INTEL) { | 35 | else if (c->x86_vendor == X86_VENDOR_INTEL) { |
36 | /* | 36 | /* |
37 | * Today all CPUs that support C3 share cache. | 37 | * Today all MP CPUs that support C3 share cache. |
38 | * TBD: This needs to look at cache shared map, once | 38 | * And caches should not be flushed by software while |
39 | * multi-core detection patch makes to the base. | 39 | * entering C3 type state. |
40 | */ | 40 | */ |
41 | flags->bm_check = 1; | 41 | flags->bm_check = 1; |
42 | } | 42 | } |
43 | |||
44 | /* | ||
45 | * On all recent Intel platforms, ARB_DISABLE is a nop. | ||
46 | * So, set bm_control to zero to indicate that ARB_DISABLE | ||
47 | * is not required while entering C3 type state on | ||
48 | * P4, Core and beyond CPUs | ||
49 | */ | ||
50 | if (c->x86_vendor == X86_VENDOR_INTEL && | ||
51 | (c->x86 > 0x6 || (c->x86 == 6 && c->x86_model >= 14))) | ||
52 | flags->bm_control = 0; | ||
43 | } | 53 | } |
44 | EXPORT_SYMBOL(acpi_processor_power_init_bm_check); | 54 | EXPORT_SYMBOL(acpi_processor_power_init_bm_check); |
45 | 55 | ||
diff --git a/arch/x86/kernel/acpi/processor.c b/arch/x86/kernel/acpi/processor.c index 7c074eec39fb..d296f4a195c9 100644 --- a/arch/x86/kernel/acpi/processor.c +++ b/arch/x86/kernel/acpi/processor.c | |||
@@ -72,6 +72,7 @@ static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c) | |||
72 | return; | 72 | return; |
73 | } | 73 | } |
74 | 74 | ||
75 | |||
75 | /* Initialize _PDC data based on the CPU vendor */ | 76 | /* Initialize _PDC data based on the CPU vendor */ |
76 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr) | 77 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr) |
77 | { | 78 | { |
@@ -85,3 +86,15 @@ void arch_acpi_processor_init_pdc(struct acpi_processor *pr) | |||
85 | } | 86 | } |
86 | 87 | ||
87 | EXPORT_SYMBOL(arch_acpi_processor_init_pdc); | 88 | EXPORT_SYMBOL(arch_acpi_processor_init_pdc); |
89 | |||
90 | void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr) | ||
91 | { | ||
92 | if (pr->pdc) { | ||
93 | kfree(pr->pdc->pointer->buffer.pointer); | ||
94 | kfree(pr->pdc->pointer); | ||
95 | kfree(pr->pdc); | ||
96 | pr->pdc = NULL; | ||
97 | } | ||
98 | } | ||
99 | |||
100 | EXPORT_SYMBOL(arch_acpi_processor_cleanup_pdc); | ||
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c index 9372f0406ad4..6c99f5037801 100644 --- a/arch/x86/kernel/amd_iommu.c +++ b/arch/x86/kernel/amd_iommu.c | |||
@@ -1192,7 +1192,7 @@ out: | |||
1192 | return 0; | 1192 | return 0; |
1193 | } | 1193 | } |
1194 | 1194 | ||
1195 | struct notifier_block device_nb = { | 1195 | static struct notifier_block device_nb = { |
1196 | .notifier_call = device_change_notifier, | 1196 | .notifier_call = device_change_notifier, |
1197 | }; | 1197 | }; |
1198 | 1198 | ||
@@ -1763,7 +1763,7 @@ static void *alloc_coherent(struct device *dev, size_t size, | |||
1763 | flag |= __GFP_ZERO; | 1763 | flag |= __GFP_ZERO; |
1764 | virt_addr = (void *)__get_free_pages(flag, get_order(size)); | 1764 | virt_addr = (void *)__get_free_pages(flag, get_order(size)); |
1765 | if (!virt_addr) | 1765 | if (!virt_addr) |
1766 | return 0; | 1766 | return NULL; |
1767 | 1767 | ||
1768 | paddr = virt_to_phys(virt_addr); | 1768 | paddr = virt_to_phys(virt_addr); |
1769 | 1769 | ||
diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c index 10b2accd12ea..c1b17e97252e 100644 --- a/arch/x86/kernel/amd_iommu_init.c +++ b/arch/x86/kernel/amd_iommu_init.c | |||
@@ -472,6 +472,8 @@ static u8 * __init alloc_event_buffer(struct amd_iommu *iommu) | |||
472 | if (iommu->evt_buf == NULL) | 472 | if (iommu->evt_buf == NULL) |
473 | return NULL; | 473 | return NULL; |
474 | 474 | ||
475 | iommu->evt_buf_size = EVT_BUFFER_SIZE; | ||
476 | |||
475 | return iommu->evt_buf; | 477 | return iommu->evt_buf; |
476 | } | 478 | } |
477 | 479 | ||
@@ -691,6 +693,7 @@ static void __init init_iommu_from_acpi(struct amd_iommu *iommu, | |||
691 | 693 | ||
692 | devid = e->devid; | 694 | devid = e->devid; |
693 | devid_to = e->ext >> 8; | 695 | devid_to = e->ext >> 8; |
696 | set_dev_entry_from_acpi(iommu, devid , e->flags, 0); | ||
694 | set_dev_entry_from_acpi(iommu, devid_to, e->flags, 0); | 697 | set_dev_entry_from_acpi(iommu, devid_to, e->flags, 0); |
695 | amd_iommu_alias_table[devid] = devid_to; | 698 | amd_iommu_alias_table[devid] = devid_to; |
696 | break; | 699 | break; |
@@ -749,11 +752,13 @@ static void __init init_iommu_from_acpi(struct amd_iommu *iommu, | |||
749 | 752 | ||
750 | devid = e->devid; | 753 | devid = e->devid; |
751 | for (dev_i = devid_start; dev_i <= devid; ++dev_i) { | 754 | for (dev_i = devid_start; dev_i <= devid; ++dev_i) { |
752 | if (alias) | 755 | if (alias) { |
753 | amd_iommu_alias_table[dev_i] = devid_to; | 756 | amd_iommu_alias_table[dev_i] = devid_to; |
754 | set_dev_entry_from_acpi(iommu, | 757 | set_dev_entry_from_acpi(iommu, |
755 | amd_iommu_alias_table[dev_i], | 758 | devid_to, flags, ext_flags); |
756 | flags, ext_flags); | 759 | } |
760 | set_dev_entry_from_acpi(iommu, dev_i, | ||
761 | flags, ext_flags); | ||
757 | } | 762 | } |
758 | break; | 763 | break; |
759 | default: | 764 | default: |
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 8c7c042ecad1..0a1c2830ec66 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
@@ -140,7 +140,6 @@ int x2apic_mode; | |||
140 | #ifdef CONFIG_X86_X2APIC | 140 | #ifdef CONFIG_X86_X2APIC |
141 | /* x2apic enabled before OS handover */ | 141 | /* x2apic enabled before OS handover */ |
142 | static int x2apic_preenabled; | 142 | static int x2apic_preenabled; |
143 | static int disable_x2apic; | ||
144 | static __init int setup_nox2apic(char *str) | 143 | static __init int setup_nox2apic(char *str) |
145 | { | 144 | { |
146 | if (x2apic_enabled()) { | 145 | if (x2apic_enabled()) { |
@@ -149,7 +148,6 @@ static __init int setup_nox2apic(char *str) | |||
149 | return 0; | 148 | return 0; |
150 | } | 149 | } |
151 | 150 | ||
152 | disable_x2apic = 1; | ||
153 | setup_clear_cpu_cap(X86_FEATURE_X2APIC); | 151 | setup_clear_cpu_cap(X86_FEATURE_X2APIC); |
154 | return 0; | 152 | return 0; |
155 | } | 153 | } |
diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c index 69328ac8de9c..8952a5890281 100644 --- a/arch/x86/kernel/apic/es7000_32.c +++ b/arch/x86/kernel/apic/es7000_32.c | |||
@@ -652,7 +652,8 @@ static int es7000_mps_oem_check_cluster(struct mpc_table *mpc, char *oem, | |||
652 | return ret && es7000_apic_is_cluster(); | 652 | return ret && es7000_apic_is_cluster(); |
653 | } | 653 | } |
654 | 654 | ||
655 | struct apic apic_es7000_cluster = { | 655 | /* We've been warned by a false positive warning.Use __refdata to keep calm. */ |
656 | struct apic __refdata apic_es7000_cluster = { | ||
656 | 657 | ||
657 | .name = "es7000", | 658 | .name = "es7000", |
658 | .probe = probe_es7000, | 659 | .probe = probe_es7000, |
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index b7a79207295e..90b5e6efa938 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -1414,6 +1414,9 @@ int setup_ioapic_entry(int apic_id, int irq, | |||
1414 | irte.vector = vector; | 1414 | irte.vector = vector; |
1415 | irte.dest_id = IRTE_DEST(destination); | 1415 | irte.dest_id = IRTE_DEST(destination); |
1416 | 1416 | ||
1417 | /* Set source-id of interrupt request */ | ||
1418 | set_ioapic_sid(&irte, apic_id); | ||
1419 | |||
1417 | modify_irte(irq, &irte); | 1420 | modify_irte(irq, &irte); |
1418 | 1421 | ||
1419 | ir_entry->index2 = (index >> 15) & 0x1; | 1422 | ir_entry->index2 = (index >> 15) & 0x1; |
@@ -1713,25 +1716,19 @@ __apicdebuginit(void) print_IO_APIC(void) | |||
1713 | return; | 1716 | return; |
1714 | } | 1717 | } |
1715 | 1718 | ||
1716 | __apicdebuginit(void) print_APIC_bitfield(int base) | 1719 | __apicdebuginit(void) print_APIC_field(int base) |
1717 | { | 1720 | { |
1718 | unsigned int v; | 1721 | int i; |
1719 | int i, j; | ||
1720 | 1722 | ||
1721 | if (apic_verbosity == APIC_QUIET) | 1723 | if (apic_verbosity == APIC_QUIET) |
1722 | return; | 1724 | return; |
1723 | 1725 | ||
1724 | printk(KERN_DEBUG "0123456789abcdef0123456789abcdef\n" KERN_DEBUG); | 1726 | printk(KERN_DEBUG); |
1725 | for (i = 0; i < 8; i++) { | 1727 | |
1726 | v = apic_read(base + i*0x10); | 1728 | for (i = 0; i < 8; i++) |
1727 | for (j = 0; j < 32; j++) { | 1729 | printk(KERN_CONT "%08x", apic_read(base + i*0x10)); |
1728 | if (v & (1<<j)) | 1730 | |
1729 | printk("1"); | 1731 | printk(KERN_CONT "\n"); |
1730 | else | ||
1731 | printk("0"); | ||
1732 | } | ||
1733 | printk("\n"); | ||
1734 | } | ||
1735 | } | 1732 | } |
1736 | 1733 | ||
1737 | __apicdebuginit(void) print_local_APIC(void *dummy) | 1734 | __apicdebuginit(void) print_local_APIC(void *dummy) |
@@ -1742,7 +1739,7 @@ __apicdebuginit(void) print_local_APIC(void *dummy) | |||
1742 | if (apic_verbosity == APIC_QUIET) | 1739 | if (apic_verbosity == APIC_QUIET) |
1743 | return; | 1740 | return; |
1744 | 1741 | ||
1745 | printk("\n" KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n", | 1742 | printk(KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n", |
1746 | smp_processor_id(), hard_smp_processor_id()); | 1743 | smp_processor_id(), hard_smp_processor_id()); |
1747 | v = apic_read(APIC_ID); | 1744 | v = apic_read(APIC_ID); |
1748 | printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, read_apic_id()); | 1745 | printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, read_apic_id()); |
@@ -1783,11 +1780,11 @@ __apicdebuginit(void) print_local_APIC(void *dummy) | |||
1783 | printk(KERN_DEBUG "... APIC SPIV: %08x\n", v); | 1780 | printk(KERN_DEBUG "... APIC SPIV: %08x\n", v); |
1784 | 1781 | ||
1785 | printk(KERN_DEBUG "... APIC ISR field:\n"); | 1782 | printk(KERN_DEBUG "... APIC ISR field:\n"); |
1786 | print_APIC_bitfield(APIC_ISR); | 1783 | print_APIC_field(APIC_ISR); |
1787 | printk(KERN_DEBUG "... APIC TMR field:\n"); | 1784 | printk(KERN_DEBUG "... APIC TMR field:\n"); |
1788 | print_APIC_bitfield(APIC_TMR); | 1785 | print_APIC_field(APIC_TMR); |
1789 | printk(KERN_DEBUG "... APIC IRR field:\n"); | 1786 | printk(KERN_DEBUG "... APIC IRR field:\n"); |
1790 | print_APIC_bitfield(APIC_IRR); | 1787 | print_APIC_field(APIC_IRR); |
1791 | 1788 | ||
1792 | if (APIC_INTEGRATED(ver)) { /* !82489DX */ | 1789 | if (APIC_INTEGRATED(ver)) { /* !82489DX */ |
1793 | if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */ | 1790 | if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */ |
@@ -3290,6 +3287,9 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_ms | |||
3290 | irte.vector = cfg->vector; | 3287 | irte.vector = cfg->vector; |
3291 | irte.dest_id = IRTE_DEST(dest); | 3288 | irte.dest_id = IRTE_DEST(dest); |
3292 | 3289 | ||
3290 | /* Set source-id of interrupt request */ | ||
3291 | set_msi_sid(&irte, pdev); | ||
3292 | |||
3293 | modify_irte(irq, &irte); | 3293 | modify_irte(irq, &irte); |
3294 | 3294 | ||
3295 | msg->address_hi = MSI_ADDR_BASE_HI; | 3295 | msg->address_hi = MSI_ADDR_BASE_HI; |
diff --git a/arch/x86/kernel/apic/numaq_32.c b/arch/x86/kernel/apic/numaq_32.c index 533e59c6fc82..ca96e68f0d23 100644 --- a/arch/x86/kernel/apic/numaq_32.c +++ b/arch/x86/kernel/apic/numaq_32.c | |||
@@ -493,7 +493,8 @@ static void numaq_setup_portio_remap(void) | |||
493 | (u_long) xquad_portio, (u_long) num_quads*XQUAD_PORTIO_QUAD); | 493 | (u_long) xquad_portio, (u_long) num_quads*XQUAD_PORTIO_QUAD); |
494 | } | 494 | } |
495 | 495 | ||
496 | struct apic apic_numaq = { | 496 | /* Use __refdata to keep false positive warning calm. */ |
497 | struct apic __refdata apic_numaq = { | ||
497 | 498 | ||
498 | .name = "NUMAQ", | 499 | .name = "NUMAQ", |
499 | .probe = probe_numaq, | 500 | .probe = probe_numaq, |
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index e5b27d8f1b47..28e5f5956042 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c | |||
@@ -258,13 +258,15 @@ static void __cpuinit amd_detect_cmp(struct cpuinfo_x86 *c) | |||
258 | { | 258 | { |
259 | #ifdef CONFIG_X86_HT | 259 | #ifdef CONFIG_X86_HT |
260 | unsigned bits; | 260 | unsigned bits; |
261 | int cpu = smp_processor_id(); | ||
261 | 262 | ||
262 | bits = c->x86_coreid_bits; | 263 | bits = c->x86_coreid_bits; |
263 | |||
264 | /* Low order bits define the core id (index of core in socket) */ | 264 | /* Low order bits define the core id (index of core in socket) */ |
265 | c->cpu_core_id = c->initial_apicid & ((1 << bits)-1); | 265 | c->cpu_core_id = c->initial_apicid & ((1 << bits)-1); |
266 | /* Convert the initial APIC ID into the socket ID */ | 266 | /* Convert the initial APIC ID into the socket ID */ |
267 | c->phys_proc_id = c->initial_apicid >> bits; | 267 | c->phys_proc_id = c->initial_apicid >> bits; |
268 | /* use socket ID also for last level cache */ | ||
269 | per_cpu(cpu_llc_id, cpu) = c->phys_proc_id; | ||
268 | #endif | 270 | #endif |
269 | } | 271 | } |
270 | 272 | ||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 6b26d4deada0..f1961c07af9a 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -848,9 +848,6 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c) | |||
848 | #if defined(CONFIG_NUMA) && defined(CONFIG_X86_64) | 848 | #if defined(CONFIG_NUMA) && defined(CONFIG_X86_64) |
849 | numa_add_cpu(smp_processor_id()); | 849 | numa_add_cpu(smp_processor_id()); |
850 | #endif | 850 | #endif |
851 | |||
852 | /* Cap the iomem address space to what is addressable on all CPUs */ | ||
853 | iomem_resource.end &= (1ULL << c->x86_phys_bits) - 1; | ||
854 | } | 851 | } |
855 | 852 | ||
856 | #ifdef CONFIG_X86_64 | 853 | #ifdef CONFIG_X86_64 |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index 81cbe64ed6b4..2a50ef891000 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c | |||
@@ -299,7 +299,7 @@ static int transition_pstate(struct powernow_k8_data *data, u32 pstate) | |||
299 | static int transition_fid_vid(struct powernow_k8_data *data, | 299 | static int transition_fid_vid(struct powernow_k8_data *data, |
300 | u32 reqfid, u32 reqvid) | 300 | u32 reqfid, u32 reqvid) |
301 | { | 301 | { |
302 | if (core_voltage_pre_transition(data, reqvid)) | 302 | if (core_voltage_pre_transition(data, reqvid, reqfid)) |
303 | return 1; | 303 | return 1; |
304 | 304 | ||
305 | if (core_frequency_transition(data, reqfid)) | 305 | if (core_frequency_transition(data, reqfid)) |
@@ -327,17 +327,20 @@ static int transition_fid_vid(struct powernow_k8_data *data, | |||
327 | 327 | ||
328 | /* Phase 1 - core voltage transition ... setup voltage */ | 328 | /* Phase 1 - core voltage transition ... setup voltage */ |
329 | static int core_voltage_pre_transition(struct powernow_k8_data *data, | 329 | static int core_voltage_pre_transition(struct powernow_k8_data *data, |
330 | u32 reqvid) | 330 | u32 reqvid, u32 reqfid) |
331 | { | 331 | { |
332 | u32 rvosteps = data->rvo; | 332 | u32 rvosteps = data->rvo; |
333 | u32 savefid = data->currfid; | 333 | u32 savefid = data->currfid; |
334 | u32 maxvid, lo; | 334 | u32 maxvid, lo, rvomult = 1; |
335 | 335 | ||
336 | dprintk("ph1 (cpu%d): start, currfid 0x%x, currvid 0x%x, " | 336 | dprintk("ph1 (cpu%d): start, currfid 0x%x, currvid 0x%x, " |
337 | "reqvid 0x%x, rvo 0x%x\n", | 337 | "reqvid 0x%x, rvo 0x%x\n", |
338 | smp_processor_id(), | 338 | smp_processor_id(), |
339 | data->currfid, data->currvid, reqvid, data->rvo); | 339 | data->currfid, data->currvid, reqvid, data->rvo); |
340 | 340 | ||
341 | if ((savefid < LO_FID_TABLE_TOP) && (reqfid < LO_FID_TABLE_TOP)) | ||
342 | rvomult = 2; | ||
343 | rvosteps *= rvomult; | ||
341 | rdmsr(MSR_FIDVID_STATUS, lo, maxvid); | 344 | rdmsr(MSR_FIDVID_STATUS, lo, maxvid); |
342 | maxvid = 0x1f & (maxvid >> 16); | 345 | maxvid = 0x1f & (maxvid >> 16); |
343 | dprintk("ph1 maxvid=0x%x\n", maxvid); | 346 | dprintk("ph1 maxvid=0x%x\n", maxvid); |
@@ -351,7 +354,8 @@ static int core_voltage_pre_transition(struct powernow_k8_data *data, | |||
351 | return 1; | 354 | return 1; |
352 | } | 355 | } |
353 | 356 | ||
354 | while ((rvosteps > 0) && ((data->rvo + data->currvid) > reqvid)) { | 357 | while ((rvosteps > 0) && |
358 | ((rvomult * data->rvo + data->currvid) > reqvid)) { | ||
355 | if (data->currvid == maxvid) { | 359 | if (data->currvid == maxvid) { |
356 | rvosteps = 0; | 360 | rvosteps = 0; |
357 | } else { | 361 | } else { |
@@ -384,13 +388,6 @@ static int core_frequency_transition(struct powernow_k8_data *data, u32 reqfid) | |||
384 | u32 vcoreqfid, vcocurrfid, vcofiddiff; | 388 | u32 vcoreqfid, vcocurrfid, vcofiddiff; |
385 | u32 fid_interval, savevid = data->currvid; | 389 | u32 fid_interval, savevid = data->currvid; |
386 | 390 | ||
387 | if ((reqfid < HI_FID_TABLE_BOTTOM) && | ||
388 | (data->currfid < HI_FID_TABLE_BOTTOM)) { | ||
389 | printk(KERN_ERR PFX "ph2: illegal lo-lo transition " | ||
390 | "0x%x 0x%x\n", reqfid, data->currfid); | ||
391 | return 1; | ||
392 | } | ||
393 | |||
394 | if (data->currfid == reqfid) { | 391 | if (data->currfid == reqfid) { |
395 | printk(KERN_ERR PFX "ph2 null fid transition 0x%x\n", | 392 | printk(KERN_ERR PFX "ph2 null fid transition 0x%x\n", |
396 | data->currfid); | 393 | data->currfid); |
@@ -407,6 +404,9 @@ static int core_frequency_transition(struct powernow_k8_data *data, u32 reqfid) | |||
407 | vcofiddiff = vcocurrfid > vcoreqfid ? vcocurrfid - vcoreqfid | 404 | vcofiddiff = vcocurrfid > vcoreqfid ? vcocurrfid - vcoreqfid |
408 | : vcoreqfid - vcocurrfid; | 405 | : vcoreqfid - vcocurrfid; |
409 | 406 | ||
407 | if ((reqfid <= LO_FID_TABLE_TOP) && (data->currfid <= LO_FID_TABLE_TOP)) | ||
408 | vcofiddiff = 0; | ||
409 | |||
410 | while (vcofiddiff > 2) { | 410 | while (vcofiddiff > 2) { |
411 | (data->currfid & 1) ? (fid_interval = 1) : (fid_interval = 2); | 411 | (data->currfid & 1) ? (fid_interval = 1) : (fid_interval = 2); |
412 | 412 | ||
@@ -1081,14 +1081,6 @@ static int transition_frequency_fidvid(struct powernow_k8_data *data, | |||
1081 | return 0; | 1081 | return 0; |
1082 | } | 1082 | } |
1083 | 1083 | ||
1084 | if ((fid < HI_FID_TABLE_BOTTOM) && | ||
1085 | (data->currfid < HI_FID_TABLE_BOTTOM)) { | ||
1086 | printk(KERN_ERR PFX | ||
1087 | "ignoring illegal change in lo freq table-%x to 0x%x\n", | ||
1088 | data->currfid, fid); | ||
1089 | return 1; | ||
1090 | } | ||
1091 | |||
1092 | dprintk("cpu %d, changing to fid 0x%x, vid 0x%x\n", | 1084 | dprintk("cpu %d, changing to fid 0x%x, vid 0x%x\n", |
1093 | smp_processor_id(), fid, vid); | 1085 | smp_processor_id(), fid, vid); |
1094 | freqs.old = find_khz_freq_from_fid(data->currfid); | 1086 | freqs.old = find_khz_freq_from_fid(data->currfid); |
@@ -1267,7 +1259,7 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1267 | { | 1259 | { |
1268 | static const char ACPI_PSS_BIOS_BUG_MSG[] = | 1260 | static const char ACPI_PSS_BIOS_BUG_MSG[] = |
1269 | KERN_ERR FW_BUG PFX "No compatible ACPI _PSS objects found.\n" | 1261 | KERN_ERR FW_BUG PFX "No compatible ACPI _PSS objects found.\n" |
1270 | KERN_ERR FW_BUG PFX "Try again with latest BIOS.\n"; | 1262 | FW_BUG PFX "Try again with latest BIOS.\n"; |
1271 | struct powernow_k8_data *data; | 1263 | struct powernow_k8_data *data; |
1272 | struct init_on_cpu init_on_cpu; | 1264 | struct init_on_cpu init_on_cpu; |
1273 | int rc; | 1265 | int rc; |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.h b/arch/x86/kernel/cpu/cpufreq/powernow-k8.h index c9c1190b5e1f..02ce824073cb 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.h +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.h | |||
@@ -215,7 +215,8 @@ struct pst_s { | |||
215 | 215 | ||
216 | #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "powernow-k8", msg) | 216 | #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "powernow-k8", msg) |
217 | 217 | ||
218 | static int core_voltage_pre_transition(struct powernow_k8_data *data, u32 reqvid); | 218 | static int core_voltage_pre_transition(struct powernow_k8_data *data, |
219 | u32 reqvid, u32 regfid); | ||
219 | static int core_voltage_post_transition(struct powernow_k8_data *data, u32 reqvid); | 220 | static int core_voltage_post_transition(struct powernow_k8_data *data, u32 reqvid); |
220 | static int core_frequency_transition(struct powernow_k8_data *data, u32 reqfid); | 221 | static int core_frequency_transition(struct powernow_k8_data *data, u32 reqfid); |
221 | 222 | ||
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 284d1de968bc..484c1e5f658e 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -194,14 +194,14 @@ static void print_mce(struct mce *m) | |||
194 | m->cs, m->ip); | 194 | m->cs, m->ip); |
195 | if (m->cs == __KERNEL_CS) | 195 | if (m->cs == __KERNEL_CS) |
196 | print_symbol("{%s}", m->ip); | 196 | print_symbol("{%s}", m->ip); |
197 | printk("\n"); | 197 | printk(KERN_CONT "\n"); |
198 | } | 198 | } |
199 | printk(KERN_EMERG "TSC %llx ", m->tsc); | 199 | printk(KERN_EMERG "TSC %llx ", m->tsc); |
200 | if (m->addr) | 200 | if (m->addr) |
201 | printk("ADDR %llx ", m->addr); | 201 | printk(KERN_CONT "ADDR %llx ", m->addr); |
202 | if (m->misc) | 202 | if (m->misc) |
203 | printk("MISC %llx ", m->misc); | 203 | printk(KERN_CONT "MISC %llx ", m->misc); |
204 | printk("\n"); | 204 | printk(KERN_CONT "\n"); |
205 | printk(KERN_EMERG "PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n", | 205 | printk(KERN_EMERG "PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n", |
206 | m->cpuvendor, m->cpuid, m->time, m->socketid, | 206 | m->cpuvendor, m->cpuid, m->time, m->socketid, |
207 | m->apicid); | 207 | m->apicid); |
@@ -209,13 +209,13 @@ static void print_mce(struct mce *m) | |||
209 | 209 | ||
210 | static void print_mce_head(void) | 210 | static void print_mce_head(void) |
211 | { | 211 | { |
212 | printk(KERN_EMERG "\n" KERN_EMERG "HARDWARE ERROR\n"); | 212 | printk(KERN_EMERG "\nHARDWARE ERROR\n"); |
213 | } | 213 | } |
214 | 214 | ||
215 | static void print_mce_tail(void) | 215 | static void print_mce_tail(void) |
216 | { | 216 | { |
217 | printk(KERN_EMERG "This is not a software problem!\n" | 217 | printk(KERN_EMERG "This is not a software problem!\n" |
218 | KERN_EMERG "Run through mcelog --ascii to decode and contact your hardware vendor\n"); | 218 | "Run through mcelog --ascii to decode and contact your hardware vendor\n"); |
219 | } | 219 | } |
220 | 220 | ||
221 | #define PANIC_TIMEOUT 5 /* 5 seconds */ | 221 | #define PANIC_TIMEOUT 5 /* 5 seconds */ |
@@ -1117,7 +1117,7 @@ static void mcheck_timer(unsigned long data) | |||
1117 | *n = min(*n*2, (int)round_jiffies_relative(check_interval*HZ)); | 1117 | *n = min(*n*2, (int)round_jiffies_relative(check_interval*HZ)); |
1118 | 1118 | ||
1119 | t->expires = jiffies + *n; | 1119 | t->expires = jiffies + *n; |
1120 | add_timer(t); | 1120 | add_timer_on(t, smp_processor_id()); |
1121 | } | 1121 | } |
1122 | 1122 | ||
1123 | static void mce_do_trigger(struct work_struct *work) | 1123 | static void mce_do_trigger(struct work_struct *work) |
@@ -1321,7 +1321,7 @@ static void mce_init_timer(void) | |||
1321 | return; | 1321 | return; |
1322 | setup_timer(t, mcheck_timer, smp_processor_id()); | 1322 | setup_timer(t, mcheck_timer, smp_processor_id()); |
1323 | t->expires = round_jiffies(jiffies + *n); | 1323 | t->expires = round_jiffies(jiffies + *n); |
1324 | add_timer(t); | 1324 | add_timer_on(t, smp_processor_id()); |
1325 | } | 1325 | } |
1326 | 1326 | ||
1327 | /* | 1327 | /* |
diff --git a/arch/x86/kernel/cpu/perf_counter.c b/arch/x86/kernel/cpu/perf_counter.c index 76dfef23f789..36c3dc7b8991 100644 --- a/arch/x86/kernel/cpu/perf_counter.c +++ b/arch/x86/kernel/cpu/perf_counter.c | |||
@@ -401,7 +401,7 @@ static const u64 amd_hw_cache_event_ids | |||
401 | [ C(RESULT_MISS) ] = 0x0041, /* Data Cache Misses */ | 401 | [ C(RESULT_MISS) ] = 0x0041, /* Data Cache Misses */ |
402 | }, | 402 | }, |
403 | [ C(OP_WRITE) ] = { | 403 | [ C(OP_WRITE) ] = { |
404 | [ C(RESULT_ACCESS) ] = 0x0042, /* Data Cache Refills from L2 */ | 404 | [ C(RESULT_ACCESS) ] = 0x0142, /* Data Cache Refills :system */ |
405 | [ C(RESULT_MISS) ] = 0, | 405 | [ C(RESULT_MISS) ] = 0, |
406 | }, | 406 | }, |
407 | [ C(OP_PREFETCH) ] = { | 407 | [ C(OP_PREFETCH) ] = { |
@@ -912,6 +912,8 @@ x86_perf_counter_set_period(struct perf_counter *counter, | |||
912 | err = checking_wrmsrl(hwc->counter_base + idx, | 912 | err = checking_wrmsrl(hwc->counter_base + idx, |
913 | (u64)(-left) & x86_pmu.counter_mask); | 913 | (u64)(-left) & x86_pmu.counter_mask); |
914 | 914 | ||
915 | perf_counter_update_userpage(counter); | ||
916 | |||
915 | return ret; | 917 | return ret; |
916 | } | 918 | } |
917 | 919 | ||
@@ -969,13 +971,6 @@ fixed_mode_idx(struct perf_counter *counter, struct hw_perf_counter *hwc) | |||
969 | if (!x86_pmu.num_counters_fixed) | 971 | if (!x86_pmu.num_counters_fixed) |
970 | return -1; | 972 | return -1; |
971 | 973 | ||
972 | /* | ||
973 | * Quirk, IA32_FIXED_CTRs do not work on current Atom processors: | ||
974 | */ | ||
975 | if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && | ||
976 | boot_cpu_data.x86_model == 28) | ||
977 | return -1; | ||
978 | |||
979 | event = hwc->config & ARCH_PERFMON_EVENT_MASK; | 974 | event = hwc->config & ARCH_PERFMON_EVENT_MASK; |
980 | 975 | ||
981 | if (unlikely(event == x86_pmu.event_map(PERF_COUNT_HW_INSTRUCTIONS))) | 976 | if (unlikely(event == x86_pmu.event_map(PERF_COUNT_HW_INSTRUCTIONS))) |
@@ -1041,6 +1036,8 @@ try_generic: | |||
1041 | x86_perf_counter_set_period(counter, hwc, idx); | 1036 | x86_perf_counter_set_period(counter, hwc, idx); |
1042 | x86_pmu.enable(hwc, idx); | 1037 | x86_pmu.enable(hwc, idx); |
1043 | 1038 | ||
1039 | perf_counter_update_userpage(counter); | ||
1040 | |||
1044 | return 0; | 1041 | return 0; |
1045 | } | 1042 | } |
1046 | 1043 | ||
@@ -1133,6 +1130,8 @@ static void x86_pmu_disable(struct perf_counter *counter) | |||
1133 | x86_perf_counter_update(counter, hwc, idx); | 1130 | x86_perf_counter_update(counter, hwc, idx); |
1134 | cpuc->counters[idx] = NULL; | 1131 | cpuc->counters[idx] = NULL; |
1135 | clear_bit(idx, cpuc->used_mask); | 1132 | clear_bit(idx, cpuc->used_mask); |
1133 | |||
1134 | perf_counter_update_userpage(counter); | ||
1136 | } | 1135 | } |
1137 | 1136 | ||
1138 | /* | 1137 | /* |
@@ -1428,8 +1427,6 @@ static int intel_pmu_init(void) | |||
1428 | */ | 1427 | */ |
1429 | x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3); | 1428 | x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3); |
1430 | 1429 | ||
1431 | rdmsrl(MSR_CORE_PERF_GLOBAL_CTRL, x86_pmu.intel_ctrl); | ||
1432 | |||
1433 | /* | 1430 | /* |
1434 | * Install the hw-cache-events table: | 1431 | * Install the hw-cache-events table: |
1435 | */ | 1432 | */ |
@@ -1499,21 +1496,22 @@ void __init init_hw_perf_counters(void) | |||
1499 | pr_cont("%s PMU driver.\n", x86_pmu.name); | 1496 | pr_cont("%s PMU driver.\n", x86_pmu.name); |
1500 | 1497 | ||
1501 | if (x86_pmu.num_counters > X86_PMC_MAX_GENERIC) { | 1498 | if (x86_pmu.num_counters > X86_PMC_MAX_GENERIC) { |
1502 | x86_pmu.num_counters = X86_PMC_MAX_GENERIC; | ||
1503 | WARN(1, KERN_ERR "hw perf counters %d > max(%d), clipping!", | 1499 | WARN(1, KERN_ERR "hw perf counters %d > max(%d), clipping!", |
1504 | x86_pmu.num_counters, X86_PMC_MAX_GENERIC); | 1500 | x86_pmu.num_counters, X86_PMC_MAX_GENERIC); |
1501 | x86_pmu.num_counters = X86_PMC_MAX_GENERIC; | ||
1505 | } | 1502 | } |
1506 | perf_counter_mask = (1 << x86_pmu.num_counters) - 1; | 1503 | perf_counter_mask = (1 << x86_pmu.num_counters) - 1; |
1507 | perf_max_counters = x86_pmu.num_counters; | 1504 | perf_max_counters = x86_pmu.num_counters; |
1508 | 1505 | ||
1509 | if (x86_pmu.num_counters_fixed > X86_PMC_MAX_FIXED) { | 1506 | if (x86_pmu.num_counters_fixed > X86_PMC_MAX_FIXED) { |
1510 | x86_pmu.num_counters_fixed = X86_PMC_MAX_FIXED; | ||
1511 | WARN(1, KERN_ERR "hw perf counters fixed %d > max(%d), clipping!", | 1507 | WARN(1, KERN_ERR "hw perf counters fixed %d > max(%d), clipping!", |
1512 | x86_pmu.num_counters_fixed, X86_PMC_MAX_FIXED); | 1508 | x86_pmu.num_counters_fixed, X86_PMC_MAX_FIXED); |
1509 | x86_pmu.num_counters_fixed = X86_PMC_MAX_FIXED; | ||
1513 | } | 1510 | } |
1514 | 1511 | ||
1515 | perf_counter_mask |= | 1512 | perf_counter_mask |= |
1516 | ((1LL << x86_pmu.num_counters_fixed)-1) << X86_PMC_IDX_FIXED; | 1513 | ((1LL << x86_pmu.num_counters_fixed)-1) << X86_PMC_IDX_FIXED; |
1514 | x86_pmu.intel_ctrl = perf_counter_mask; | ||
1517 | 1515 | ||
1518 | perf_counters_lapic_init(); | 1516 | perf_counters_lapic_init(); |
1519 | register_die_notifier(&perf_counter_nmi_notifier); | 1517 | register_die_notifier(&perf_counter_nmi_notifier); |
@@ -1563,6 +1561,7 @@ void callchain_store(struct perf_callchain_entry *entry, u64 ip) | |||
1563 | 1561 | ||
1564 | static DEFINE_PER_CPU(struct perf_callchain_entry, irq_entry); | 1562 | static DEFINE_PER_CPU(struct perf_callchain_entry, irq_entry); |
1565 | static DEFINE_PER_CPU(struct perf_callchain_entry, nmi_entry); | 1563 | static DEFINE_PER_CPU(struct perf_callchain_entry, nmi_entry); |
1564 | static DEFINE_PER_CPU(int, in_nmi_frame); | ||
1566 | 1565 | ||
1567 | 1566 | ||
1568 | static void | 1567 | static void |
@@ -1578,7 +1577,9 @@ static void backtrace_warning(void *data, char *msg) | |||
1578 | 1577 | ||
1579 | static int backtrace_stack(void *data, char *name) | 1578 | static int backtrace_stack(void *data, char *name) |
1580 | { | 1579 | { |
1581 | /* Process all stacks: */ | 1580 | per_cpu(in_nmi_frame, smp_processor_id()) = |
1581 | x86_is_stack_id(NMI_STACK, name); | ||
1582 | |||
1582 | return 0; | 1583 | return 0; |
1583 | } | 1584 | } |
1584 | 1585 | ||
@@ -1586,6 +1587,9 @@ static void backtrace_address(void *data, unsigned long addr, int reliable) | |||
1586 | { | 1587 | { |
1587 | struct perf_callchain_entry *entry = data; | 1588 | struct perf_callchain_entry *entry = data; |
1588 | 1589 | ||
1590 | if (per_cpu(in_nmi_frame, smp_processor_id())) | ||
1591 | return; | ||
1592 | |||
1589 | if (reliable) | 1593 | if (reliable) |
1590 | callchain_store(entry, addr); | 1594 | callchain_store(entry, addr); |
1591 | } | 1595 | } |
diff --git a/arch/x86/kernel/cpu/perfctr-watchdog.c b/arch/x86/kernel/cpu/perfctr-watchdog.c index 5c481f6205bf..e60ed740d2b3 100644 --- a/arch/x86/kernel/cpu/perfctr-watchdog.c +++ b/arch/x86/kernel/cpu/perfctr-watchdog.c | |||
@@ -803,8 +803,3 @@ int __kprobes lapic_wd_event(unsigned nmi_hz) | |||
803 | wd_ops->rearm(wd, nmi_hz); | 803 | wd_ops->rearm(wd, nmi_hz); |
804 | return 1; | 804 | return 1; |
805 | } | 805 | } |
806 | |||
807 | int lapic_watchdog_ok(void) | ||
808 | { | ||
809 | return wd_ops != NULL; | ||
810 | } | ||
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c index 95ea5fa7d444..c8405718a4c3 100644 --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include "dumpstack.h" | 22 | #include "dumpstack.h" |
23 | 23 | ||
24 | int panic_on_unrecovered_nmi; | 24 | int panic_on_unrecovered_nmi; |
25 | int panic_on_io_nmi; | ||
25 | unsigned int code_bytes = 64; | 26 | unsigned int code_bytes = 64; |
26 | int kstack_depth_to_print = 3 * STACKSLOTS_PER_LINE; | 27 | int kstack_depth_to_print = 3 * STACKSLOTS_PER_LINE; |
27 | static int die_counter; | 28 | static int die_counter; |
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c index d593cd1f58dc..bca5fba91c9e 100644 --- a/arch/x86/kernel/dumpstack_32.c +++ b/arch/x86/kernel/dumpstack_32.c | |||
@@ -19,6 +19,12 @@ | |||
19 | 19 | ||
20 | #include "dumpstack.h" | 20 | #include "dumpstack.h" |
21 | 21 | ||
22 | /* Just a stub for now */ | ||
23 | int x86_is_stack_id(int id, char *name) | ||
24 | { | ||
25 | return 0; | ||
26 | } | ||
27 | |||
22 | void dump_trace(struct task_struct *task, struct pt_regs *regs, | 28 | void dump_trace(struct task_struct *task, struct pt_regs *regs, |
23 | unsigned long *stack, unsigned long bp, | 29 | unsigned long *stack, unsigned long bp, |
24 | const struct stacktrace_ops *ops, void *data) | 30 | const struct stacktrace_ops *ops, void *data) |
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index d35db5993fd6..54b0a3276766 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c | |||
@@ -19,10 +19,8 @@ | |||
19 | 19 | ||
20 | #include "dumpstack.h" | 20 | #include "dumpstack.h" |
21 | 21 | ||
22 | static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | 22 | |
23 | unsigned *usedp, char **idp) | 23 | static char x86_stack_ids[][8] = { |
24 | { | ||
25 | static char ids[][8] = { | ||
26 | [DEBUG_STACK - 1] = "#DB", | 24 | [DEBUG_STACK - 1] = "#DB", |
27 | [NMI_STACK - 1] = "NMI", | 25 | [NMI_STACK - 1] = "NMI", |
28 | [DOUBLEFAULT_STACK - 1] = "#DF", | 26 | [DOUBLEFAULT_STACK - 1] = "#DF", |
@@ -33,6 +31,15 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
33 | N_EXCEPTION_STACKS + DEBUG_STKSZ / EXCEPTION_STKSZ - 2] = "#DB[?]" | 31 | N_EXCEPTION_STACKS + DEBUG_STKSZ / EXCEPTION_STKSZ - 2] = "#DB[?]" |
34 | #endif | 32 | #endif |
35 | }; | 33 | }; |
34 | |||
35 | int x86_is_stack_id(int id, char *name) | ||
36 | { | ||
37 | return x86_stack_ids[id - 1] == name; | ||
38 | } | ||
39 | |||
40 | static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | ||
41 | unsigned *usedp, char **idp) | ||
42 | { | ||
36 | unsigned k; | 43 | unsigned k; |
37 | 44 | ||
38 | /* | 45 | /* |
@@ -61,7 +68,7 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
61 | if (*usedp & (1U << k)) | 68 | if (*usedp & (1U << k)) |
62 | break; | 69 | break; |
63 | *usedp |= 1U << k; | 70 | *usedp |= 1U << k; |
64 | *idp = ids[k]; | 71 | *idp = x86_stack_ids[k]; |
65 | return (unsigned long *)end; | 72 | return (unsigned long *)end; |
66 | } | 73 | } |
67 | /* | 74 | /* |
@@ -81,12 +88,13 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
81 | do { | 88 | do { |
82 | ++j; | 89 | ++j; |
83 | end -= EXCEPTION_STKSZ; | 90 | end -= EXCEPTION_STKSZ; |
84 | ids[j][4] = '1' + (j - N_EXCEPTION_STACKS); | 91 | x86_stack_ids[j][4] = '1' + |
92 | (j - N_EXCEPTION_STACKS); | ||
85 | } while (stack < end - EXCEPTION_STKSZ); | 93 | } while (stack < end - EXCEPTION_STKSZ); |
86 | if (*usedp & (1U << j)) | 94 | if (*usedp & (1U << j)) |
87 | break; | 95 | break; |
88 | *usedp |= 1U << j; | 96 | *usedp |= 1U << j; |
89 | *idp = ids[j]; | 97 | *idp = x86_stack_ids[j]; |
90 | return (unsigned long *)end; | 98 | return (unsigned long *)end; |
91 | } | 99 | } |
92 | #endif | 100 | #endif |
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index 7271fa33d791..5cb5725b2bae 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c | |||
@@ -627,10 +627,9 @@ __init void e820_setup_gap(void) | |||
627 | #ifdef CONFIG_X86_64 | 627 | #ifdef CONFIG_X86_64 |
628 | if (!found) { | 628 | if (!found) { |
629 | gapstart = (max_pfn << PAGE_SHIFT) + 1024*1024; | 629 | gapstart = (max_pfn << PAGE_SHIFT) + 1024*1024; |
630 | printk(KERN_ERR "PCI: Warning: Cannot find a gap in the 32bit " | 630 | printk(KERN_ERR |
631 | "address range\n" | 631 | "PCI: Warning: Cannot find a gap in the 32bit address range\n" |
632 | KERN_ERR "PCI: Unassigned devices with 32bit resource " | 632 | "PCI: Unassigned devices with 32bit resource registers may break!\n"); |
633 | "registers may break!\n"); | ||
634 | } | 633 | } |
635 | #endif | 634 | #endif |
636 | 635 | ||
@@ -1383,6 +1382,8 @@ static unsigned long ram_alignment(resource_size_t pos) | |||
1383 | return 32*1024*1024; | 1382 | return 32*1024*1024; |
1384 | } | 1383 | } |
1385 | 1384 | ||
1385 | #define MAX_RESOURCE_SIZE ((resource_size_t)-1) | ||
1386 | |||
1386 | void __init e820_reserve_resources_late(void) | 1387 | void __init e820_reserve_resources_late(void) |
1387 | { | 1388 | { |
1388 | int i; | 1389 | int i; |
@@ -1400,17 +1401,19 @@ void __init e820_reserve_resources_late(void) | |||
1400 | * avoid stolen RAM: | 1401 | * avoid stolen RAM: |
1401 | */ | 1402 | */ |
1402 | for (i = 0; i < e820.nr_map; i++) { | 1403 | for (i = 0; i < e820.nr_map; i++) { |
1403 | struct e820entry *entry = &e820_saved.map[i]; | 1404 | struct e820entry *entry = &e820.map[i]; |
1404 | resource_size_t start, end; | 1405 | u64 start, end; |
1405 | 1406 | ||
1406 | if (entry->type != E820_RAM) | 1407 | if (entry->type != E820_RAM) |
1407 | continue; | 1408 | continue; |
1408 | start = entry->addr + entry->size; | 1409 | start = entry->addr + entry->size; |
1409 | end = round_up(start, ram_alignment(start)); | 1410 | end = round_up(start, ram_alignment(start)) - 1; |
1410 | if (start == end) | 1411 | if (end > MAX_RESOURCE_SIZE) |
1412 | end = MAX_RESOURCE_SIZE; | ||
1413 | if (start >= end) | ||
1411 | continue; | 1414 | continue; |
1412 | reserve_region_with_split(&iomem_resource, start, | 1415 | reserve_region_with_split(&iomem_resource, start, end, |
1413 | end - 1, "RAM buffer"); | 1416 | "RAM buffer"); |
1414 | } | 1417 | } |
1415 | } | 1418 | } |
1416 | 1419 | ||
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index a78ecad0c900..c664d515f613 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c | |||
@@ -200,7 +200,7 @@ static void kvm_leave_lazy_mmu(void) | |||
200 | state->mode = paravirt_get_lazy_mode(); | 200 | state->mode = paravirt_get_lazy_mode(); |
201 | } | 201 | } |
202 | 202 | ||
203 | static void paravirt_ops_setup(void) | 203 | static void __init paravirt_ops_setup(void) |
204 | { | 204 | { |
205 | pv_info.name = "KVM"; | 205 | pv_info.name = "KVM"; |
206 | pv_info.paravirt_enabled = 1; | 206 | pv_info.paravirt_enabled = 1; |
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 328592fb6044..1a041bcf506b 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c | |||
@@ -32,6 +32,8 @@ int no_iommu __read_mostly; | |||
32 | /* Set this to 1 if there is a HW IOMMU in the system */ | 32 | /* Set this to 1 if there is a HW IOMMU in the system */ |
33 | int iommu_detected __read_mostly = 0; | 33 | int iommu_detected __read_mostly = 0; |
34 | 34 | ||
35 | int iommu_pass_through; | ||
36 | |||
35 | dma_addr_t bad_dma_address __read_mostly = 0; | 37 | dma_addr_t bad_dma_address __read_mostly = 0; |
36 | EXPORT_SYMBOL(bad_dma_address); | 38 | EXPORT_SYMBOL(bad_dma_address); |
37 | 39 | ||
@@ -210,6 +212,10 @@ static __init int iommu_setup(char *p) | |||
210 | if (!strncmp(p, "soft", 4)) | 212 | if (!strncmp(p, "soft", 4)) |
211 | swiotlb = 1; | 213 | swiotlb = 1; |
212 | #endif | 214 | #endif |
215 | if (!strncmp(p, "pt", 2)) { | ||
216 | iommu_pass_through = 1; | ||
217 | return 1; | ||
218 | } | ||
213 | 219 | ||
214 | gart_parse_options(p); | 220 | gart_parse_options(p); |
215 | 221 | ||
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c index cfd9f9063896..d2e56b8f48e7 100644 --- a/arch/x86/kernel/pci-gart_64.c +++ b/arch/x86/kernel/pci-gart_64.c | |||
@@ -675,7 +675,7 @@ static __init int init_k8_gatt(struct agp_kern_info *info) | |||
675 | nommu: | 675 | nommu: |
676 | /* Should not happen anymore */ | 676 | /* Should not happen anymore */ |
677 | printk(KERN_WARNING "PCI-DMA: More than 4GB of RAM and no IOMMU\n" | 677 | printk(KERN_WARNING "PCI-DMA: More than 4GB of RAM and no IOMMU\n" |
678 | KERN_WARNING "falling back to iommu=soft.\n"); | 678 | "falling back to iommu=soft.\n"); |
679 | return -1; | 679 | return -1; |
680 | } | 680 | } |
681 | 681 | ||
diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c index a1712f2b50f1..6af96ee44200 100644 --- a/arch/x86/kernel/pci-swiotlb.c +++ b/arch/x86/kernel/pci-swiotlb.c | |||
@@ -71,7 +71,8 @@ void __init pci_swiotlb_init(void) | |||
71 | { | 71 | { |
72 | /* don't initialize swiotlb if iommu=off (no_iommu=1) */ | 72 | /* don't initialize swiotlb if iommu=off (no_iommu=1) */ |
73 | #ifdef CONFIG_X86_64 | 73 | #ifdef CONFIG_X86_64 |
74 | if (!iommu_detected && !no_iommu && max_pfn > MAX_DMA32_PFN) | 74 | if ((!iommu_detected && !no_iommu && max_pfn > MAX_DMA32_PFN) || |
75 | iommu_pass_through) | ||
75 | swiotlb = 1; | 76 | swiotlb = 1; |
76 | #endif | 77 | #endif |
77 | if (swiotlb_force) | 78 | if (swiotlb_force) |
diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index 4f9c55f3a7c0..03801f2f761f 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c | |||
@@ -60,7 +60,7 @@ static inline u64 scale_delta(u64 delta, u32 mul_frac, int shift) | |||
60 | "adc %5,%%edx ; " | 60 | "adc %5,%%edx ; " |
61 | : "=A" (product), "=r" (tmp1), "=r" (tmp2) | 61 | : "=A" (product), "=r" (tmp1), "=r" (tmp2) |
62 | : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) ); | 62 | : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) ); |
63 | #elif __x86_64__ | 63 | #elif defined(__x86_64__) |
64 | __asm__ ( | 64 | __asm__ ( |
65 | "mul %%rdx ; shrd $32,%%rdx,%%rax" | 65 | "mul %%rdx ; shrd $32,%%rdx,%%rax" |
66 | : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) ); | 66 | : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) ); |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index be5ae80f897f..de2cab132844 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -289,6 +289,20 @@ void * __init extend_brk(size_t size, size_t align) | |||
289 | return ret; | 289 | return ret; |
290 | } | 290 | } |
291 | 291 | ||
292 | #ifdef CONFIG_X86_64 | ||
293 | static void __init init_gbpages(void) | ||
294 | { | ||
295 | if (direct_gbpages && cpu_has_gbpages) | ||
296 | printk(KERN_INFO "Using GB pages for direct mapping\n"); | ||
297 | else | ||
298 | direct_gbpages = 0; | ||
299 | } | ||
300 | #else | ||
301 | static inline void init_gbpages(void) | ||
302 | { | ||
303 | } | ||
304 | #endif | ||
305 | |||
292 | static void __init reserve_brk(void) | 306 | static void __init reserve_brk(void) |
293 | { | 307 | { |
294 | if (_brk_end > _brk_start) | 308 | if (_brk_end > _brk_start) |
@@ -871,6 +885,8 @@ void __init setup_arch(char **cmdline_p) | |||
871 | 885 | ||
872 | reserve_brk(); | 886 | reserve_brk(); |
873 | 887 | ||
888 | init_gbpages(); | ||
889 | |||
874 | /* max_pfn_mapped is updated here */ | 890 | /* max_pfn_mapped is updated here */ |
875 | max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT); | 891 | max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT); |
876 | max_pfn_mapped = max_low_pfn_mapped; | 892 | max_pfn_mapped = max_low_pfn_mapped; |
diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c index 9c3f0823e6aa..29a3eef7cf4a 100644 --- a/arch/x86/kernel/setup_percpu.c +++ b/arch/x86/kernel/setup_percpu.c | |||
@@ -124,7 +124,7 @@ static void * __init pcpu_alloc_bootmem(unsigned int cpu, unsigned long size, | |||
124 | } | 124 | } |
125 | 125 | ||
126 | /* | 126 | /* |
127 | * Remap allocator | 127 | * Large page remap allocator |
128 | * | 128 | * |
129 | * This allocator uses PMD page as unit. A PMD page is allocated for | 129 | * This allocator uses PMD page as unit. A PMD page is allocated for |
130 | * each cpu and each is remapped into vmalloc area using PMD mapping. | 130 | * each cpu and each is remapped into vmalloc area using PMD mapping. |
@@ -137,105 +137,185 @@ static void * __init pcpu_alloc_bootmem(unsigned int cpu, unsigned long size, | |||
137 | * better than only using 4k mappings while still being NUMA friendly. | 137 | * better than only using 4k mappings while still being NUMA friendly. |
138 | */ | 138 | */ |
139 | #ifdef CONFIG_NEED_MULTIPLE_NODES | 139 | #ifdef CONFIG_NEED_MULTIPLE_NODES |
140 | static size_t pcpur_size __initdata; | 140 | struct pcpul_ent { |
141 | static void **pcpur_ptrs __initdata; | 141 | unsigned int cpu; |
142 | void *ptr; | ||
143 | }; | ||
144 | |||
145 | static size_t pcpul_size; | ||
146 | static struct pcpul_ent *pcpul_map; | ||
147 | static struct vm_struct pcpul_vm; | ||
142 | 148 | ||
143 | static struct page * __init pcpur_get_page(unsigned int cpu, int pageno) | 149 | static struct page * __init pcpul_get_page(unsigned int cpu, int pageno) |
144 | { | 150 | { |
145 | size_t off = (size_t)pageno << PAGE_SHIFT; | 151 | size_t off = (size_t)pageno << PAGE_SHIFT; |
146 | 152 | ||
147 | if (off >= pcpur_size) | 153 | if (off >= pcpul_size) |
148 | return NULL; | 154 | return NULL; |
149 | 155 | ||
150 | return virt_to_page(pcpur_ptrs[cpu] + off); | 156 | return virt_to_page(pcpul_map[cpu].ptr + off); |
151 | } | 157 | } |
152 | 158 | ||
153 | static ssize_t __init setup_pcpu_remap(size_t static_size) | 159 | static ssize_t __init setup_pcpu_lpage(size_t static_size, bool chosen) |
154 | { | 160 | { |
155 | static struct vm_struct vm; | 161 | size_t map_size, dyn_size; |
156 | size_t ptrs_size, dyn_size; | ||
157 | unsigned int cpu; | 162 | unsigned int cpu; |
163 | int i, j; | ||
158 | ssize_t ret; | 164 | ssize_t ret; |
159 | 165 | ||
160 | /* | 166 | if (!chosen) { |
161 | * If large page isn't supported, there's no benefit in doing | 167 | size_t vm_size = VMALLOC_END - VMALLOC_START; |
162 | * this. Also, on non-NUMA, embedding is better. | 168 | size_t tot_size = num_possible_cpus() * PMD_SIZE; |
163 | * | 169 | |
164 | * NOTE: disabled for now. | 170 | /* on non-NUMA, embedding is better */ |
165 | */ | 171 | if (!pcpu_need_numa()) |
166 | if (true || !cpu_has_pse || !pcpu_need_numa()) | 172 | return -EINVAL; |
173 | |||
174 | /* don't consume more than 20% of vmalloc area */ | ||
175 | if (tot_size > vm_size / 5) { | ||
176 | pr_info("PERCPU: too large chunk size %zuMB for " | ||
177 | "large page remap\n", tot_size >> 20); | ||
178 | return -EINVAL; | ||
179 | } | ||
180 | } | ||
181 | |||
182 | /* need PSE */ | ||
183 | if (!cpu_has_pse) { | ||
184 | pr_warning("PERCPU: lpage allocator requires PSE\n"); | ||
167 | return -EINVAL; | 185 | return -EINVAL; |
186 | } | ||
168 | 187 | ||
169 | /* | 188 | /* |
170 | * Currently supports only single page. Supporting multiple | 189 | * Currently supports only single page. Supporting multiple |
171 | * pages won't be too difficult if it ever becomes necessary. | 190 | * pages won't be too difficult if it ever becomes necessary. |
172 | */ | 191 | */ |
173 | pcpur_size = PFN_ALIGN(static_size + PERCPU_MODULE_RESERVE + | 192 | pcpul_size = PFN_ALIGN(static_size + PERCPU_MODULE_RESERVE + |
174 | PERCPU_DYNAMIC_RESERVE); | 193 | PERCPU_DYNAMIC_RESERVE); |
175 | if (pcpur_size > PMD_SIZE) { | 194 | if (pcpul_size > PMD_SIZE) { |
176 | pr_warning("PERCPU: static data is larger than large page, " | 195 | pr_warning("PERCPU: static data is larger than large page, " |
177 | "can't use large page\n"); | 196 | "can't use large page\n"); |
178 | return -EINVAL; | 197 | return -EINVAL; |
179 | } | 198 | } |
180 | dyn_size = pcpur_size - static_size - PERCPU_FIRST_CHUNK_RESERVE; | 199 | dyn_size = pcpul_size - static_size - PERCPU_FIRST_CHUNK_RESERVE; |
181 | 200 | ||
182 | /* allocate pointer array and alloc large pages */ | 201 | /* allocate pointer array and alloc large pages */ |
183 | ptrs_size = PFN_ALIGN(num_possible_cpus() * sizeof(pcpur_ptrs[0])); | 202 | map_size = PFN_ALIGN(num_possible_cpus() * sizeof(pcpul_map[0])); |
184 | pcpur_ptrs = alloc_bootmem(ptrs_size); | 203 | pcpul_map = alloc_bootmem(map_size); |
185 | 204 | ||
186 | for_each_possible_cpu(cpu) { | 205 | for_each_possible_cpu(cpu) { |
187 | pcpur_ptrs[cpu] = pcpu_alloc_bootmem(cpu, PMD_SIZE, PMD_SIZE); | 206 | pcpul_map[cpu].cpu = cpu; |
188 | if (!pcpur_ptrs[cpu]) | 207 | pcpul_map[cpu].ptr = pcpu_alloc_bootmem(cpu, PMD_SIZE, |
208 | PMD_SIZE); | ||
209 | if (!pcpul_map[cpu].ptr) { | ||
210 | pr_warning("PERCPU: failed to allocate large page " | ||
211 | "for cpu%u\n", cpu); | ||
189 | goto enomem; | 212 | goto enomem; |
213 | } | ||
190 | 214 | ||
191 | /* | 215 | /* |
192 | * Only use pcpur_size bytes and give back the rest. | 216 | * Only use pcpul_size bytes and give back the rest. |
193 | * | 217 | * |
194 | * Ingo: The 2MB up-rounding bootmem is needed to make | 218 | * Ingo: The 2MB up-rounding bootmem is needed to make |
195 | * sure the partial 2MB page is still fully RAM - it's | 219 | * sure the partial 2MB page is still fully RAM - it's |
196 | * not well-specified to have a PAT-incompatible area | 220 | * not well-specified to have a PAT-incompatible area |
197 | * (unmapped RAM, device memory, etc.) in that hole. | 221 | * (unmapped RAM, device memory, etc.) in that hole. |
198 | */ | 222 | */ |
199 | free_bootmem(__pa(pcpur_ptrs[cpu] + pcpur_size), | 223 | free_bootmem(__pa(pcpul_map[cpu].ptr + pcpul_size), |
200 | PMD_SIZE - pcpur_size); | 224 | PMD_SIZE - pcpul_size); |
201 | 225 | ||
202 | memcpy(pcpur_ptrs[cpu], __per_cpu_load, static_size); | 226 | memcpy(pcpul_map[cpu].ptr, __per_cpu_load, static_size); |
203 | } | 227 | } |
204 | 228 | ||
205 | /* allocate address and map */ | 229 | /* allocate address and map */ |
206 | vm.flags = VM_ALLOC; | 230 | pcpul_vm.flags = VM_ALLOC; |
207 | vm.size = num_possible_cpus() * PMD_SIZE; | 231 | pcpul_vm.size = num_possible_cpus() * PMD_SIZE; |
208 | vm_area_register_early(&vm, PMD_SIZE); | 232 | vm_area_register_early(&pcpul_vm, PMD_SIZE); |
209 | 233 | ||
210 | for_each_possible_cpu(cpu) { | 234 | for_each_possible_cpu(cpu) { |
211 | pmd_t *pmd; | 235 | pmd_t *pmd, pmd_v; |
212 | 236 | ||
213 | pmd = populate_extra_pmd((unsigned long)vm.addr | 237 | pmd = populate_extra_pmd((unsigned long)pcpul_vm.addr + |
214 | + cpu * PMD_SIZE); | 238 | cpu * PMD_SIZE); |
215 | set_pmd(pmd, pfn_pmd(page_to_pfn(virt_to_page(pcpur_ptrs[cpu])), | 239 | pmd_v = pfn_pmd(page_to_pfn(virt_to_page(pcpul_map[cpu].ptr)), |
216 | PAGE_KERNEL_LARGE)); | 240 | PAGE_KERNEL_LARGE); |
241 | set_pmd(pmd, pmd_v); | ||
217 | } | 242 | } |
218 | 243 | ||
219 | /* we're ready, commit */ | 244 | /* we're ready, commit */ |
220 | pr_info("PERCPU: Remapped at %p with large pages, static data " | 245 | pr_info("PERCPU: Remapped at %p with large pages, static data " |
221 | "%zu bytes\n", vm.addr, static_size); | 246 | "%zu bytes\n", pcpul_vm.addr, static_size); |
222 | 247 | ||
223 | ret = pcpu_setup_first_chunk(pcpur_get_page, static_size, | 248 | ret = pcpu_setup_first_chunk(pcpul_get_page, static_size, |
224 | PERCPU_FIRST_CHUNK_RESERVE, dyn_size, | 249 | PERCPU_FIRST_CHUNK_RESERVE, dyn_size, |
225 | PMD_SIZE, vm.addr, NULL); | 250 | PMD_SIZE, pcpul_vm.addr, NULL); |
226 | goto out_free_ar; | 251 | |
252 | /* sort pcpul_map array for pcpu_lpage_remapped() */ | ||
253 | for (i = 0; i < num_possible_cpus() - 1; i++) | ||
254 | for (j = i + 1; j < num_possible_cpus(); j++) | ||
255 | if (pcpul_map[i].ptr > pcpul_map[j].ptr) { | ||
256 | struct pcpul_ent tmp = pcpul_map[i]; | ||
257 | pcpul_map[i] = pcpul_map[j]; | ||
258 | pcpul_map[j] = tmp; | ||
259 | } | ||
260 | |||
261 | return ret; | ||
227 | 262 | ||
228 | enomem: | 263 | enomem: |
229 | for_each_possible_cpu(cpu) | 264 | for_each_possible_cpu(cpu) |
230 | if (pcpur_ptrs[cpu]) | 265 | if (pcpul_map[cpu].ptr) |
231 | free_bootmem(__pa(pcpur_ptrs[cpu]), PMD_SIZE); | 266 | free_bootmem(__pa(pcpul_map[cpu].ptr), pcpul_size); |
232 | ret = -ENOMEM; | 267 | free_bootmem(__pa(pcpul_map), map_size); |
233 | out_free_ar: | 268 | return -ENOMEM; |
234 | free_bootmem(__pa(pcpur_ptrs), ptrs_size); | 269 | } |
235 | return ret; | 270 | |
271 | /** | ||
272 | * pcpu_lpage_remapped - determine whether a kaddr is in pcpul recycled area | ||
273 | * @kaddr: the kernel address in question | ||
274 | * | ||
275 | * Determine whether @kaddr falls in the pcpul recycled area. This is | ||
276 | * used by pageattr to detect VM aliases and break up the pcpu PMD | ||
277 | * mapping such that the same physical page is not mapped under | ||
278 | * different attributes. | ||
279 | * | ||
280 | * The recycled area is always at the tail of a partially used PMD | ||
281 | * page. | ||
282 | * | ||
283 | * RETURNS: | ||
284 | * Address of corresponding remapped pcpu address if match is found; | ||
285 | * otherwise, NULL. | ||
286 | */ | ||
287 | void *pcpu_lpage_remapped(void *kaddr) | ||
288 | { | ||
289 | void *pmd_addr = (void *)((unsigned long)kaddr & PMD_MASK); | ||
290 | unsigned long offset = (unsigned long)kaddr & ~PMD_MASK; | ||
291 | int left = 0, right = num_possible_cpus() - 1; | ||
292 | int pos; | ||
293 | |||
294 | /* pcpul in use at all? */ | ||
295 | if (!pcpul_map) | ||
296 | return NULL; | ||
297 | |||
298 | /* okay, perform binary search */ | ||
299 | while (left <= right) { | ||
300 | pos = (left + right) / 2; | ||
301 | |||
302 | if (pcpul_map[pos].ptr < pmd_addr) | ||
303 | left = pos + 1; | ||
304 | else if (pcpul_map[pos].ptr > pmd_addr) | ||
305 | right = pos - 1; | ||
306 | else { | ||
307 | /* it shouldn't be in the area for the first chunk */ | ||
308 | WARN_ON(offset < pcpul_size); | ||
309 | |||
310 | return pcpul_vm.addr + | ||
311 | pcpul_map[pos].cpu * PMD_SIZE + offset; | ||
312 | } | ||
313 | } | ||
314 | |||
315 | return NULL; | ||
236 | } | 316 | } |
237 | #else | 317 | #else |
238 | static ssize_t __init setup_pcpu_remap(size_t static_size) | 318 | static ssize_t __init setup_pcpu_lpage(size_t static_size, bool chosen) |
239 | { | 319 | { |
240 | return -EINVAL; | 320 | return -EINVAL; |
241 | } | 321 | } |
@@ -249,7 +329,7 @@ static ssize_t __init setup_pcpu_remap(size_t static_size) | |||
249 | * mapping so that it can use PMD mapping without additional TLB | 329 | * mapping so that it can use PMD mapping without additional TLB |
250 | * pressure. | 330 | * pressure. |
251 | */ | 331 | */ |
252 | static ssize_t __init setup_pcpu_embed(size_t static_size) | 332 | static ssize_t __init setup_pcpu_embed(size_t static_size, bool chosen) |
253 | { | 333 | { |
254 | size_t reserve = PERCPU_MODULE_RESERVE + PERCPU_DYNAMIC_RESERVE; | 334 | size_t reserve = PERCPU_MODULE_RESERVE + PERCPU_DYNAMIC_RESERVE; |
255 | 335 | ||
@@ -258,7 +338,7 @@ static ssize_t __init setup_pcpu_embed(size_t static_size) | |||
258 | * this. Also, embedding allocation doesn't play well with | 338 | * this. Also, embedding allocation doesn't play well with |
259 | * NUMA. | 339 | * NUMA. |
260 | */ | 340 | */ |
261 | if (!cpu_has_pse || pcpu_need_numa()) | 341 | if (!chosen && (!cpu_has_pse || pcpu_need_numa())) |
262 | return -EINVAL; | 342 | return -EINVAL; |
263 | 343 | ||
264 | return pcpu_embed_first_chunk(static_size, PERCPU_FIRST_CHUNK_RESERVE, | 344 | return pcpu_embed_first_chunk(static_size, PERCPU_FIRST_CHUNK_RESERVE, |
@@ -308,8 +388,11 @@ static ssize_t __init setup_pcpu_4k(size_t static_size) | |||
308 | void *ptr; | 388 | void *ptr; |
309 | 389 | ||
310 | ptr = pcpu_alloc_bootmem(cpu, PAGE_SIZE, PAGE_SIZE); | 390 | ptr = pcpu_alloc_bootmem(cpu, PAGE_SIZE, PAGE_SIZE); |
311 | if (!ptr) | 391 | if (!ptr) { |
392 | pr_warning("PERCPU: failed to allocate " | ||
393 | "4k page for cpu%u\n", cpu); | ||
312 | goto enomem; | 394 | goto enomem; |
395 | } | ||
313 | 396 | ||
314 | memcpy(ptr, __per_cpu_load + i * PAGE_SIZE, PAGE_SIZE); | 397 | memcpy(ptr, __per_cpu_load + i * PAGE_SIZE, PAGE_SIZE); |
315 | pcpu4k_pages[j++] = virt_to_page(ptr); | 398 | pcpu4k_pages[j++] = virt_to_page(ptr); |
@@ -333,6 +416,16 @@ out_free_ar: | |||
333 | return ret; | 416 | return ret; |
334 | } | 417 | } |
335 | 418 | ||
419 | /* for explicit first chunk allocator selection */ | ||
420 | static char pcpu_chosen_alloc[16] __initdata; | ||
421 | |||
422 | static int __init percpu_alloc_setup(char *str) | ||
423 | { | ||
424 | strncpy(pcpu_chosen_alloc, str, sizeof(pcpu_chosen_alloc) - 1); | ||
425 | return 0; | ||
426 | } | ||
427 | early_param("percpu_alloc", percpu_alloc_setup); | ||
428 | |||
336 | static inline void setup_percpu_segment(int cpu) | 429 | static inline void setup_percpu_segment(int cpu) |
337 | { | 430 | { |
338 | #ifdef CONFIG_X86_32 | 431 | #ifdef CONFIG_X86_32 |
@@ -346,11 +439,6 @@ static inline void setup_percpu_segment(int cpu) | |||
346 | #endif | 439 | #endif |
347 | } | 440 | } |
348 | 441 | ||
349 | /* | ||
350 | * Great future plan: | ||
351 | * Declare PDA itself and support (irqstack,tss,pgd) as per cpu data. | ||
352 | * Always point %gs to its beginning | ||
353 | */ | ||
354 | void __init setup_per_cpu_areas(void) | 442 | void __init setup_per_cpu_areas(void) |
355 | { | 443 | { |
356 | size_t static_size = __per_cpu_end - __per_cpu_start; | 444 | size_t static_size = __per_cpu_end - __per_cpu_start; |
@@ -367,9 +455,26 @@ void __init setup_per_cpu_areas(void) | |||
367 | * of large page mappings. Please read comments on top of | 455 | * of large page mappings. Please read comments on top of |
368 | * each allocator for details. | 456 | * each allocator for details. |
369 | */ | 457 | */ |
370 | ret = setup_pcpu_remap(static_size); | 458 | ret = -EINVAL; |
371 | if (ret < 0) | 459 | if (strlen(pcpu_chosen_alloc)) { |
372 | ret = setup_pcpu_embed(static_size); | 460 | if (strcmp(pcpu_chosen_alloc, "4k")) { |
461 | if (!strcmp(pcpu_chosen_alloc, "lpage")) | ||
462 | ret = setup_pcpu_lpage(static_size, true); | ||
463 | else if (!strcmp(pcpu_chosen_alloc, "embed")) | ||
464 | ret = setup_pcpu_embed(static_size, true); | ||
465 | else | ||
466 | pr_warning("PERCPU: unknown allocator %s " | ||
467 | "specified\n", pcpu_chosen_alloc); | ||
468 | if (ret < 0) | ||
469 | pr_warning("PERCPU: %s allocator failed (%zd), " | ||
470 | "falling back to 4k\n", | ||
471 | pcpu_chosen_alloc, ret); | ||
472 | } | ||
473 | } else { | ||
474 | ret = setup_pcpu_lpage(static_size, false); | ||
475 | if (ret < 0) | ||
476 | ret = setup_pcpu_embed(static_size, false); | ||
477 | } | ||
373 | if (ret < 0) | 478 | if (ret < 0) |
374 | ret = setup_pcpu_4k(static_size); | 479 | ret = setup_pcpu_4k(static_size); |
375 | if (ret < 0) | 480 | if (ret < 0) |
diff --git a/arch/x86/kernel/tlb_uv.c b/arch/x86/kernel/tlb_uv.c index 124d40c575df..8ccabb8a2f6a 100644 --- a/arch/x86/kernel/tlb_uv.c +++ b/arch/x86/kernel/tlb_uv.c | |||
@@ -711,7 +711,6 @@ uv_activation_descriptor_init(int node, int pnode) | |||
711 | unsigned long pa; | 711 | unsigned long pa; |
712 | unsigned long m; | 712 | unsigned long m; |
713 | unsigned long n; | 713 | unsigned long n; |
714 | unsigned long mmr_image; | ||
715 | struct bau_desc *adp; | 714 | struct bau_desc *adp; |
716 | struct bau_desc *ad2; | 715 | struct bau_desc *ad2; |
717 | 716 | ||
@@ -727,12 +726,8 @@ uv_activation_descriptor_init(int node, int pnode) | |||
727 | n = pa >> uv_nshift; | 726 | n = pa >> uv_nshift; |
728 | m = pa & uv_mmask; | 727 | m = pa & uv_mmask; |
729 | 728 | ||
730 | mmr_image = uv_read_global_mmr64(pnode, UVH_LB_BAU_SB_DESCRIPTOR_BASE); | 729 | uv_write_global_mmr64(pnode, UVH_LB_BAU_SB_DESCRIPTOR_BASE, |
731 | if (mmr_image) { | 730 | (n << UV_DESC_BASE_PNODE_SHIFT | m)); |
732 | uv_write_global_mmr64(pnode, (unsigned long) | ||
733 | UVH_LB_BAU_SB_DESCRIPTOR_BASE, | ||
734 | (n << UV_DESC_BASE_PNODE_SHIFT | m)); | ||
735 | } | ||
736 | 731 | ||
737 | /* | 732 | /* |
738 | * initializing all 8 (UV_ITEMS_PER_DESCRIPTOR) descriptors for each | 733 | * initializing all 8 (UV_ITEMS_PER_DESCRIPTOR) descriptors for each |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index a0f48f5671c0..5204332f475d 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -346,6 +346,9 @@ io_check_error(unsigned char reason, struct pt_regs *regs) | |||
346 | printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n"); | 346 | printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n"); |
347 | show_registers(regs); | 347 | show_registers(regs); |
348 | 348 | ||
349 | if (panic_on_io_nmi) | ||
350 | panic("NMI IOCK error: Not continuing"); | ||
351 | |||
349 | /* Re-enable the IOCK line, wait for a few seconds */ | 352 | /* Re-enable the IOCK line, wait for a few seconds */ |
350 | reason = (reason & 0xf) | 8; | 353 | reason = (reason & 0xf) | 8; |
351 | outb(reason, 0x61); | 354 | outb(reason, 0x61); |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 5c3d6e81a7dc..7030b5f911bf 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -2157,7 +2157,7 @@ static void reset_rsvds_bits_mask(struct kvm_vcpu *vcpu, int level) | |||
2157 | else | 2157 | else |
2158 | /* 32 bits PSE 4MB page */ | 2158 | /* 32 bits PSE 4MB page */ |
2159 | context->rsvd_bits_mask[1][1] = rsvd_bits(13, 21); | 2159 | context->rsvd_bits_mask[1][1] = rsvd_bits(13, 21); |
2160 | context->rsvd_bits_mask[1][0] = ~0ull; | 2160 | context->rsvd_bits_mask[1][0] = context->rsvd_bits_mask[1][0]; |
2161 | break; | 2161 | break; |
2162 | case PT32E_ROOT_LEVEL: | 2162 | case PT32E_ROOT_LEVEL: |
2163 | context->rsvd_bits_mask[0][2] = | 2163 | context->rsvd_bits_mask[0][2] = |
@@ -2170,7 +2170,7 @@ static void reset_rsvds_bits_mask(struct kvm_vcpu *vcpu, int level) | |||
2170 | context->rsvd_bits_mask[1][1] = exb_bit_rsvd | | 2170 | context->rsvd_bits_mask[1][1] = exb_bit_rsvd | |
2171 | rsvd_bits(maxphyaddr, 62) | | 2171 | rsvd_bits(maxphyaddr, 62) | |
2172 | rsvd_bits(13, 20); /* large page */ | 2172 | rsvd_bits(13, 20); /* large page */ |
2173 | context->rsvd_bits_mask[1][0] = ~0ull; | 2173 | context->rsvd_bits_mask[1][0] = context->rsvd_bits_mask[1][0]; |
2174 | break; | 2174 | break; |
2175 | case PT64_ROOT_LEVEL: | 2175 | case PT64_ROOT_LEVEL: |
2176 | context->rsvd_bits_mask[0][3] = exb_bit_rsvd | | 2176 | context->rsvd_bits_mask[0][3] = exb_bit_rsvd | |
@@ -2186,7 +2186,7 @@ static void reset_rsvds_bits_mask(struct kvm_vcpu *vcpu, int level) | |||
2186 | context->rsvd_bits_mask[1][1] = exb_bit_rsvd | | 2186 | context->rsvd_bits_mask[1][1] = exb_bit_rsvd | |
2187 | rsvd_bits(maxphyaddr, 51) | | 2187 | rsvd_bits(maxphyaddr, 51) | |
2188 | rsvd_bits(13, 20); /* large page */ | 2188 | rsvd_bits(13, 20); /* large page */ |
2189 | context->rsvd_bits_mask[1][0] = ~0ull; | 2189 | context->rsvd_bits_mask[1][0] = context->rsvd_bits_mask[1][0]; |
2190 | break; | 2190 | break; |
2191 | } | 2191 | } |
2192 | } | 2192 | } |
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h index 258e4591e1ca..67785f635399 100644 --- a/arch/x86/kvm/paging_tmpl.h +++ b/arch/x86/kvm/paging_tmpl.h | |||
@@ -281,7 +281,7 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr, | |||
281 | { | 281 | { |
282 | unsigned access = gw->pt_access; | 282 | unsigned access = gw->pt_access; |
283 | struct kvm_mmu_page *shadow_page; | 283 | struct kvm_mmu_page *shadow_page; |
284 | u64 spte, *sptep; | 284 | u64 spte, *sptep = NULL; |
285 | int direct; | 285 | int direct; |
286 | gfn_t table_gfn; | 286 | gfn_t table_gfn; |
287 | int r; | 287 | int r; |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index e770bf349ec4..356a0ce85c68 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -3012,6 +3012,12 @@ static int handle_vmcall(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | |||
3012 | return 1; | 3012 | return 1; |
3013 | } | 3013 | } |
3014 | 3014 | ||
3015 | static int handle_vmx_insn(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | ||
3016 | { | ||
3017 | kvm_queue_exception(vcpu, UD_VECTOR); | ||
3018 | return 1; | ||
3019 | } | ||
3020 | |||
3015 | static int handle_invlpg(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | 3021 | static int handle_invlpg(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) |
3016 | { | 3022 | { |
3017 | unsigned long exit_qualification = vmcs_readl(EXIT_QUALIFICATION); | 3023 | unsigned long exit_qualification = vmcs_readl(EXIT_QUALIFICATION); |
@@ -3198,6 +3204,15 @@ static int (*kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu, | |||
3198 | [EXIT_REASON_HLT] = handle_halt, | 3204 | [EXIT_REASON_HLT] = handle_halt, |
3199 | [EXIT_REASON_INVLPG] = handle_invlpg, | 3205 | [EXIT_REASON_INVLPG] = handle_invlpg, |
3200 | [EXIT_REASON_VMCALL] = handle_vmcall, | 3206 | [EXIT_REASON_VMCALL] = handle_vmcall, |
3207 | [EXIT_REASON_VMCLEAR] = handle_vmx_insn, | ||
3208 | [EXIT_REASON_VMLAUNCH] = handle_vmx_insn, | ||
3209 | [EXIT_REASON_VMPTRLD] = handle_vmx_insn, | ||
3210 | [EXIT_REASON_VMPTRST] = handle_vmx_insn, | ||
3211 | [EXIT_REASON_VMREAD] = handle_vmx_insn, | ||
3212 | [EXIT_REASON_VMRESUME] = handle_vmx_insn, | ||
3213 | [EXIT_REASON_VMWRITE] = handle_vmx_insn, | ||
3214 | [EXIT_REASON_VMOFF] = handle_vmx_insn, | ||
3215 | [EXIT_REASON_VMON] = handle_vmx_insn, | ||
3201 | [EXIT_REASON_TPR_BELOW_THRESHOLD] = handle_tpr_below_threshold, | 3216 | [EXIT_REASON_TPR_BELOW_THRESHOLD] = handle_tpr_below_threshold, |
3202 | [EXIT_REASON_APIC_ACCESS] = handle_apic_access, | 3217 | [EXIT_REASON_APIC_ACCESS] = handle_apic_access, |
3203 | [EXIT_REASON_WBINVD] = handle_wbinvd, | 3218 | [EXIT_REASON_WBINVD] = handle_wbinvd, |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 249540f98513..fe5474aec41a 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -898,6 +898,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) | |||
898 | case MSR_VM_HSAVE_PA: | 898 | case MSR_VM_HSAVE_PA: |
899 | case MSR_P6_EVNTSEL0: | 899 | case MSR_P6_EVNTSEL0: |
900 | case MSR_P6_EVNTSEL1: | 900 | case MSR_P6_EVNTSEL1: |
901 | case MSR_K7_EVNTSEL0: | ||
901 | data = 0; | 902 | data = 0; |
902 | break; | 903 | break; |
903 | case MSR_MTRRcap: | 904 | case MSR_MTRRcap: |
diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c index c1b6c232e02b..616de4628d60 100644 --- a/arch/x86/kvm/x86_emulate.c +++ b/arch/x86/kvm/x86_emulate.c | |||
@@ -1361,7 +1361,7 @@ static inline int writeback(struct x86_emulate_ctxt *ctxt, | |||
1361 | return 0; | 1361 | return 0; |
1362 | } | 1362 | } |
1363 | 1363 | ||
1364 | void toggle_interruptibility(struct x86_emulate_ctxt *ctxt, u32 mask) | 1364 | static void toggle_interruptibility(struct x86_emulate_ctxt *ctxt, u32 mask) |
1365 | { | 1365 | { |
1366 | u32 int_shadow = kvm_x86_ops->get_interrupt_shadow(ctxt->vcpu, mask); | 1366 | u32 int_shadow = kvm_x86_ops->get_interrupt_shadow(ctxt->vcpu, mask); |
1367 | /* | 1367 | /* |
diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile index f9d35632666b..07c31899c9c2 100644 --- a/arch/x86/lib/Makefile +++ b/arch/x86/lib/Makefile | |||
@@ -10,6 +10,7 @@ lib-y += usercopy_$(BITS).o getuser.o putuser.o | |||
10 | lib-y += memcpy_$(BITS).o | 10 | lib-y += memcpy_$(BITS).o |
11 | 11 | ||
12 | ifeq ($(CONFIG_X86_32),y) | 12 | ifeq ($(CONFIG_X86_32),y) |
13 | obj-y += atomic64_32.o | ||
13 | lib-y += checksum_32.o | 14 | lib-y += checksum_32.o |
14 | lib-y += strstr_32.o | 15 | lib-y += strstr_32.o |
15 | lib-y += semaphore_32.o string_32.o | 16 | lib-y += semaphore_32.o string_32.o |
diff --git a/arch/x86/lib/atomic64_32.c b/arch/x86/lib/atomic64_32.c new file mode 100644 index 000000000000..824fa0be55a3 --- /dev/null +++ b/arch/x86/lib/atomic64_32.c | |||
@@ -0,0 +1,230 @@ | |||
1 | #include <linux/compiler.h> | ||
2 | #include <linux/module.h> | ||
3 | #include <linux/types.h> | ||
4 | |||
5 | #include <asm/processor.h> | ||
6 | #include <asm/cmpxchg.h> | ||
7 | #include <asm/atomic.h> | ||
8 | |||
9 | static noinline u64 cmpxchg8b(u64 *ptr, u64 old, u64 new) | ||
10 | { | ||
11 | u32 low = new; | ||
12 | u32 high = new >> 32; | ||
13 | |||
14 | asm volatile( | ||
15 | LOCK_PREFIX "cmpxchg8b %1\n" | ||
16 | : "+A" (old), "+m" (*ptr) | ||
17 | : "b" (low), "c" (high) | ||
18 | ); | ||
19 | return old; | ||
20 | } | ||
21 | |||
22 | u64 atomic64_cmpxchg(atomic64_t *ptr, u64 old_val, u64 new_val) | ||
23 | { | ||
24 | return cmpxchg8b(&ptr->counter, old_val, new_val); | ||
25 | } | ||
26 | EXPORT_SYMBOL(atomic64_cmpxchg); | ||
27 | |||
28 | /** | ||
29 | * atomic64_xchg - xchg atomic64 variable | ||
30 | * @ptr: pointer to type atomic64_t | ||
31 | * @new_val: value to assign | ||
32 | * | ||
33 | * Atomically xchgs the value of @ptr to @new_val and returns | ||
34 | * the old value. | ||
35 | */ | ||
36 | u64 atomic64_xchg(atomic64_t *ptr, u64 new_val) | ||
37 | { | ||
38 | /* | ||
39 | * Try first with a (possibly incorrect) assumption about | ||
40 | * what we have there. We'll do two loops most likely, | ||
41 | * but we'll get an ownership MESI transaction straight away | ||
42 | * instead of a read transaction followed by a | ||
43 | * flush-for-ownership transaction: | ||
44 | */ | ||
45 | u64 old_val, real_val = 0; | ||
46 | |||
47 | do { | ||
48 | old_val = real_val; | ||
49 | |||
50 | real_val = atomic64_cmpxchg(ptr, old_val, new_val); | ||
51 | |||
52 | } while (real_val != old_val); | ||
53 | |||
54 | return old_val; | ||
55 | } | ||
56 | EXPORT_SYMBOL(atomic64_xchg); | ||
57 | |||
58 | /** | ||
59 | * atomic64_set - set atomic64 variable | ||
60 | * @ptr: pointer to type atomic64_t | ||
61 | * @new_val: value to assign | ||
62 | * | ||
63 | * Atomically sets the value of @ptr to @new_val. | ||
64 | */ | ||
65 | void atomic64_set(atomic64_t *ptr, u64 new_val) | ||
66 | { | ||
67 | atomic64_xchg(ptr, new_val); | ||
68 | } | ||
69 | EXPORT_SYMBOL(atomic64_set); | ||
70 | |||
71 | /** | ||
72 | EXPORT_SYMBOL(atomic64_read); | ||
73 | * atomic64_add_return - add and return | ||
74 | * @delta: integer value to add | ||
75 | * @ptr: pointer to type atomic64_t | ||
76 | * | ||
77 | * Atomically adds @delta to @ptr and returns @delta + *@ptr | ||
78 | */ | ||
79 | noinline u64 atomic64_add_return(u64 delta, atomic64_t *ptr) | ||
80 | { | ||
81 | /* | ||
82 | * Try first with a (possibly incorrect) assumption about | ||
83 | * what we have there. We'll do two loops most likely, | ||
84 | * but we'll get an ownership MESI transaction straight away | ||
85 | * instead of a read transaction followed by a | ||
86 | * flush-for-ownership transaction: | ||
87 | */ | ||
88 | u64 old_val, new_val, real_val = 0; | ||
89 | |||
90 | do { | ||
91 | old_val = real_val; | ||
92 | new_val = old_val + delta; | ||
93 | |||
94 | real_val = atomic64_cmpxchg(ptr, old_val, new_val); | ||
95 | |||
96 | } while (real_val != old_val); | ||
97 | |||
98 | return new_val; | ||
99 | } | ||
100 | EXPORT_SYMBOL(atomic64_add_return); | ||
101 | |||
102 | u64 atomic64_sub_return(u64 delta, atomic64_t *ptr) | ||
103 | { | ||
104 | return atomic64_add_return(-delta, ptr); | ||
105 | } | ||
106 | EXPORT_SYMBOL(atomic64_sub_return); | ||
107 | |||
108 | u64 atomic64_inc_return(atomic64_t *ptr) | ||
109 | { | ||
110 | return atomic64_add_return(1, ptr); | ||
111 | } | ||
112 | EXPORT_SYMBOL(atomic64_inc_return); | ||
113 | |||
114 | u64 atomic64_dec_return(atomic64_t *ptr) | ||
115 | { | ||
116 | return atomic64_sub_return(1, ptr); | ||
117 | } | ||
118 | EXPORT_SYMBOL(atomic64_dec_return); | ||
119 | |||
120 | /** | ||
121 | * atomic64_add - add integer to atomic64 variable | ||
122 | * @delta: integer value to add | ||
123 | * @ptr: pointer to type atomic64_t | ||
124 | * | ||
125 | * Atomically adds @delta to @ptr. | ||
126 | */ | ||
127 | void atomic64_add(u64 delta, atomic64_t *ptr) | ||
128 | { | ||
129 | atomic64_add_return(delta, ptr); | ||
130 | } | ||
131 | EXPORT_SYMBOL(atomic64_add); | ||
132 | |||
133 | /** | ||
134 | * atomic64_sub - subtract the atomic64 variable | ||
135 | * @delta: integer value to subtract | ||
136 | * @ptr: pointer to type atomic64_t | ||
137 | * | ||
138 | * Atomically subtracts @delta from @ptr. | ||
139 | */ | ||
140 | void atomic64_sub(u64 delta, atomic64_t *ptr) | ||
141 | { | ||
142 | atomic64_add(-delta, ptr); | ||
143 | } | ||
144 | EXPORT_SYMBOL(atomic64_sub); | ||
145 | |||
146 | /** | ||
147 | * atomic64_sub_and_test - subtract value from variable and test result | ||
148 | * @delta: integer value to subtract | ||
149 | * @ptr: pointer to type atomic64_t | ||
150 | * | ||
151 | * Atomically subtracts @delta from @ptr and returns | ||
152 | * true if the result is zero, or false for all | ||
153 | * other cases. | ||
154 | */ | ||
155 | int atomic64_sub_and_test(u64 delta, atomic64_t *ptr) | ||
156 | { | ||
157 | u64 new_val = atomic64_sub_return(delta, ptr); | ||
158 | |||
159 | return new_val == 0; | ||
160 | } | ||
161 | EXPORT_SYMBOL(atomic64_sub_and_test); | ||
162 | |||
163 | /** | ||
164 | * atomic64_inc - increment atomic64 variable | ||
165 | * @ptr: pointer to type atomic64_t | ||
166 | * | ||
167 | * Atomically increments @ptr by 1. | ||
168 | */ | ||
169 | void atomic64_inc(atomic64_t *ptr) | ||
170 | { | ||
171 | atomic64_add(1, ptr); | ||
172 | } | ||
173 | EXPORT_SYMBOL(atomic64_inc); | ||
174 | |||
175 | /** | ||
176 | * atomic64_dec - decrement atomic64 variable | ||
177 | * @ptr: pointer to type atomic64_t | ||
178 | * | ||
179 | * Atomically decrements @ptr by 1. | ||
180 | */ | ||
181 | void atomic64_dec(atomic64_t *ptr) | ||
182 | { | ||
183 | atomic64_sub(1, ptr); | ||
184 | } | ||
185 | EXPORT_SYMBOL(atomic64_dec); | ||
186 | |||
187 | /** | ||
188 | * atomic64_dec_and_test - decrement and test | ||
189 | * @ptr: pointer to type atomic64_t | ||
190 | * | ||
191 | * Atomically decrements @ptr by 1 and | ||
192 | * returns true if the result is 0, or false for all other | ||
193 | * cases. | ||
194 | */ | ||
195 | int atomic64_dec_and_test(atomic64_t *ptr) | ||
196 | { | ||
197 | return atomic64_sub_and_test(1, ptr); | ||
198 | } | ||
199 | EXPORT_SYMBOL(atomic64_dec_and_test); | ||
200 | |||
201 | /** | ||
202 | * atomic64_inc_and_test - increment and test | ||
203 | * @ptr: pointer to type atomic64_t | ||
204 | * | ||
205 | * Atomically increments @ptr by 1 | ||
206 | * and returns true if the result is zero, or false for all | ||
207 | * other cases. | ||
208 | */ | ||
209 | int atomic64_inc_and_test(atomic64_t *ptr) | ||
210 | { | ||
211 | return atomic64_sub_and_test(-1, ptr); | ||
212 | } | ||
213 | EXPORT_SYMBOL(atomic64_inc_and_test); | ||
214 | |||
215 | /** | ||
216 | * atomic64_add_negative - add and test if negative | ||
217 | * @delta: integer value to add | ||
218 | * @ptr: pointer to type atomic64_t | ||
219 | * | ||
220 | * Atomically adds @delta to @ptr and returns true | ||
221 | * if the result is negative, or false when | ||
222 | * result is greater than or equal to zero. | ||
223 | */ | ||
224 | int atomic64_add_negative(u64 delta, atomic64_t *ptr) | ||
225 | { | ||
226 | s64 new_val = atomic64_add_return(delta, ptr); | ||
227 | |||
228 | return new_val < 0; | ||
229 | } | ||
230 | EXPORT_SYMBOL(atomic64_add_negative); | ||
diff --git a/arch/x86/lib/clear_page_64.S b/arch/x86/lib/clear_page_64.S index 9a10a78bb4a4..ebeafcce04a9 100644 --- a/arch/x86/lib/clear_page_64.S +++ b/arch/x86/lib/clear_page_64.S | |||
@@ -5,15 +5,14 @@ | |||
5 | * Zero a page. | 5 | * Zero a page. |
6 | * rdi page | 6 | * rdi page |
7 | */ | 7 | */ |
8 | ALIGN | 8 | ENTRY(clear_page_c) |
9 | clear_page_c: | ||
10 | CFI_STARTPROC | 9 | CFI_STARTPROC |
11 | movl $4096/8,%ecx | 10 | movl $4096/8,%ecx |
12 | xorl %eax,%eax | 11 | xorl %eax,%eax |
13 | rep stosq | 12 | rep stosq |
14 | ret | 13 | ret |
15 | CFI_ENDPROC | 14 | CFI_ENDPROC |
16 | ENDPROC(clear_page) | 15 | ENDPROC(clear_page_c) |
17 | 16 | ||
18 | ENTRY(clear_page) | 17 | ENTRY(clear_page) |
19 | CFI_STARTPROC | 18 | CFI_STARTPROC |
diff --git a/arch/x86/lib/copy_user_64.S b/arch/x86/lib/copy_user_64.S index f118c110af32..6ba0f7bb85ea 100644 --- a/arch/x86/lib/copy_user_64.S +++ b/arch/x86/lib/copy_user_64.S | |||
@@ -75,6 +75,7 @@ ENTRY(copy_to_user) | |||
75 | jae bad_to_user | 75 | jae bad_to_user |
76 | ALTERNATIVE_JUMP X86_FEATURE_REP_GOOD,copy_user_generic_unrolled,copy_user_generic_string | 76 | ALTERNATIVE_JUMP X86_FEATURE_REP_GOOD,copy_user_generic_unrolled,copy_user_generic_string |
77 | CFI_ENDPROC | 77 | CFI_ENDPROC |
78 | ENDPROC(copy_to_user) | ||
78 | 79 | ||
79 | /* Standard copy_from_user with segment limit checking */ | 80 | /* Standard copy_from_user with segment limit checking */ |
80 | ENTRY(copy_from_user) | 81 | ENTRY(copy_from_user) |
diff --git a/arch/x86/lib/delay.c b/arch/x86/lib/delay.c index f4568605d7d5..ff485d361182 100644 --- a/arch/x86/lib/delay.c +++ b/arch/x86/lib/delay.c | |||
@@ -55,8 +55,10 @@ static void delay_tsc(unsigned long loops) | |||
55 | 55 | ||
56 | preempt_disable(); | 56 | preempt_disable(); |
57 | cpu = smp_processor_id(); | 57 | cpu = smp_processor_id(); |
58 | rdtsc_barrier(); | ||
58 | rdtscl(bclock); | 59 | rdtscl(bclock); |
59 | for (;;) { | 60 | for (;;) { |
61 | rdtsc_barrier(); | ||
60 | rdtscl(now); | 62 | rdtscl(now); |
61 | if ((now - bclock) >= loops) | 63 | if ((now - bclock) >= loops) |
62 | break; | 64 | break; |
@@ -78,6 +80,7 @@ static void delay_tsc(unsigned long loops) | |||
78 | if (unlikely(cpu != smp_processor_id())) { | 80 | if (unlikely(cpu != smp_processor_id())) { |
79 | loops -= (now - bclock); | 81 | loops -= (now - bclock); |
80 | cpu = smp_processor_id(); | 82 | cpu = smp_processor_id(); |
83 | rdtsc_barrier(); | ||
81 | rdtscl(bclock); | 84 | rdtscl(bclock); |
82 | } | 85 | } |
83 | } | 86 | } |
diff --git a/arch/x86/lib/usercopy_32.c b/arch/x86/lib/usercopy_32.c index 7c8ca91bb9ec..1f118d462acc 100644 --- a/arch/x86/lib/usercopy_32.c +++ b/arch/x86/lib/usercopy_32.c | |||
@@ -751,7 +751,7 @@ survive: | |||
751 | 751 | ||
752 | if (retval == -ENOMEM && is_global_init(current)) { | 752 | if (retval == -ENOMEM && is_global_init(current)) { |
753 | up_read(¤t->mm->mmap_sem); | 753 | up_read(¤t->mm->mmap_sem); |
754 | congestion_wait(WRITE, HZ/50); | 754 | congestion_wait(BLK_RW_ASYNC, HZ/50); |
755 | goto survive; | 755 | goto survive; |
756 | } | 756 | } |
757 | 757 | ||
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index c403526d5d15..bfae139182ff 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
@@ -426,10 +426,11 @@ static noinline int vmalloc_fault(unsigned long address) | |||
426 | } | 426 | } |
427 | 427 | ||
428 | static const char errata93_warning[] = | 428 | static const char errata93_warning[] = |
429 | KERN_ERR "******* Your BIOS seems to not contain a fix for K8 errata #93\n" | 429 | KERN_ERR |
430 | KERN_ERR "******* Working around it, but it may cause SEGVs or burn power.\n" | 430 | "******* Your BIOS seems to not contain a fix for K8 errata #93\n" |
431 | KERN_ERR "******* Please consider a BIOS update.\n" | 431 | "******* Working around it, but it may cause SEGVs or burn power.\n" |
432 | KERN_ERR "******* Disabling USB legacy in the BIOS may also help.\n"; | 432 | "******* Please consider a BIOS update.\n" |
433 | "******* Disabling USB legacy in the BIOS may also help.\n"; | ||
433 | 434 | ||
434 | /* | 435 | /* |
435 | * No vm86 mode in 64-bit mode: | 436 | * No vm86 mode in 64-bit mode: |
@@ -696,7 +697,7 @@ show_signal_msg(struct pt_regs *regs, unsigned long error_code, | |||
696 | if (!printk_ratelimit()) | 697 | if (!printk_ratelimit()) |
697 | return; | 698 | return; |
698 | 699 | ||
699 | printk(KERN_CONT "%s%s[%d]: segfault at %lx ip %p sp %p error %lx", | 700 | printk("%s%s[%d]: segfault at %lx ip %p sp %p error %lx", |
700 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, | 701 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, |
701 | tsk->comm, task_pid_nr(tsk), address, | 702 | tsk->comm, task_pid_nr(tsk), address, |
702 | (void *)regs->ip, (void *)regs->sp, error_code); | 703 | (void *)regs->ip, (void *)regs->sp, error_code); |
@@ -1113,7 +1114,7 @@ good_area: | |||
1113 | * make sure we exit gracefully rather than endlessly redo | 1114 | * make sure we exit gracefully rather than endlessly redo |
1114 | * the fault: | 1115 | * the fault: |
1115 | */ | 1116 | */ |
1116 | fault = handle_mm_fault(mm, vma, address, write); | 1117 | fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); |
1117 | 1118 | ||
1118 | if (unlikely(fault & VM_FAULT_ERROR)) { | 1119 | if (unlikely(fault & VM_FAULT_ERROR)) { |
1119 | mm_fault_error(regs, error_code, address, fault); | 1120 | mm_fault_error(regs, error_code, address, fault); |
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index f53b57e4086f..0607119cef94 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <asm/system.h> | 12 | #include <asm/system.h> |
13 | #include <asm/tlbflush.h> | 13 | #include <asm/tlbflush.h> |
14 | #include <asm/tlb.h> | 14 | #include <asm/tlb.h> |
15 | #include <asm/proto.h> | ||
15 | 16 | ||
16 | DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); | 17 | DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); |
17 | 18 | ||
@@ -177,20 +178,6 @@ static int __meminit save_mr(struct map_range *mr, int nr_range, | |||
177 | return nr_range; | 178 | return nr_range; |
178 | } | 179 | } |
179 | 180 | ||
180 | #ifdef CONFIG_X86_64 | ||
181 | static void __init init_gbpages(void) | ||
182 | { | ||
183 | if (direct_gbpages && cpu_has_gbpages) | ||
184 | printk(KERN_INFO "Using GB pages for direct mapping\n"); | ||
185 | else | ||
186 | direct_gbpages = 0; | ||
187 | } | ||
188 | #else | ||
189 | static inline void init_gbpages(void) | ||
190 | { | ||
191 | } | ||
192 | #endif | ||
193 | |||
194 | /* | 181 | /* |
195 | * Setup the direct mapping of the physical memory at PAGE_OFFSET. | 182 | * Setup the direct mapping of the physical memory at PAGE_OFFSET. |
196 | * This runs before bootmem is initialized and gets pages directly from | 183 | * This runs before bootmem is initialized and gets pages directly from |
@@ -210,9 +197,6 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, | |||
210 | 197 | ||
211 | printk(KERN_INFO "init_memory_mapping: %016lx-%016lx\n", start, end); | 198 | printk(KERN_INFO "init_memory_mapping: %016lx-%016lx\n", start, end); |
212 | 199 | ||
213 | if (!after_bootmem) | ||
214 | init_gbpages(); | ||
215 | |||
216 | #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KMEMCHECK) | 200 | #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KMEMCHECK) |
217 | /* | 201 | /* |
218 | * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages. | 202 | * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages. |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index c4378f4fd4a5..6176fe8f29e0 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -598,6 +598,15 @@ void __init paging_init(void) | |||
598 | 598 | ||
599 | sparse_memory_present_with_active_regions(MAX_NUMNODES); | 599 | sparse_memory_present_with_active_regions(MAX_NUMNODES); |
600 | sparse_init(); | 600 | sparse_init(); |
601 | |||
602 | /* | ||
603 | * clear the default setting with node 0 | ||
604 | * note: don't use nodes_clear here, that is really clearing when | ||
605 | * numa support is not compiled in, and later node_set_state | ||
606 | * will not set it back. | ||
607 | */ | ||
608 | node_clear_state(0, N_NORMAL_MEMORY); | ||
609 | |||
601 | free_area_init_nodes(max_zone_pfns); | 610 | free_area_init_nodes(max_zone_pfns); |
602 | } | 611 | } |
603 | 612 | ||
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 3cfe9ced8a4c..1b734d7a8966 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/interrupt.h> | 11 | #include <linux/interrupt.h> |
12 | #include <linux/seq_file.h> | 12 | #include <linux/seq_file.h> |
13 | #include <linux/debugfs.h> | 13 | #include <linux/debugfs.h> |
14 | #include <linux/pfn.h> | ||
14 | 15 | ||
15 | #include <asm/e820.h> | 16 | #include <asm/e820.h> |
16 | #include <asm/processor.h> | 17 | #include <asm/processor.h> |
@@ -681,8 +682,9 @@ static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias); | |||
681 | static int cpa_process_alias(struct cpa_data *cpa) | 682 | static int cpa_process_alias(struct cpa_data *cpa) |
682 | { | 683 | { |
683 | struct cpa_data alias_cpa; | 684 | struct cpa_data alias_cpa; |
684 | int ret = 0; | 685 | unsigned long laddr = (unsigned long)__va(cpa->pfn << PAGE_SHIFT); |
685 | unsigned long temp_cpa_vaddr, vaddr; | 686 | unsigned long vaddr, remapped; |
687 | int ret; | ||
686 | 688 | ||
687 | if (cpa->pfn >= max_pfn_mapped) | 689 | if (cpa->pfn >= max_pfn_mapped) |
688 | return 0; | 690 | return 0; |
@@ -706,42 +708,55 @@ static int cpa_process_alias(struct cpa_data *cpa) | |||
706 | PAGE_OFFSET + (max_pfn_mapped << PAGE_SHIFT)))) { | 708 | PAGE_OFFSET + (max_pfn_mapped << PAGE_SHIFT)))) { |
707 | 709 | ||
708 | alias_cpa = *cpa; | 710 | alias_cpa = *cpa; |
709 | temp_cpa_vaddr = (unsigned long) __va(cpa->pfn << PAGE_SHIFT); | 711 | alias_cpa.vaddr = &laddr; |
710 | alias_cpa.vaddr = &temp_cpa_vaddr; | ||
711 | alias_cpa.flags &= ~(CPA_PAGES_ARRAY | CPA_ARRAY); | 712 | alias_cpa.flags &= ~(CPA_PAGES_ARRAY | CPA_ARRAY); |
712 | 713 | ||
713 | |||
714 | ret = __change_page_attr_set_clr(&alias_cpa, 0); | 714 | ret = __change_page_attr_set_clr(&alias_cpa, 0); |
715 | if (ret) | ||
716 | return ret; | ||
715 | } | 717 | } |
716 | 718 | ||
717 | #ifdef CONFIG_X86_64 | 719 | #ifdef CONFIG_X86_64 |
718 | if (ret) | ||
719 | return ret; | ||
720 | /* | 720 | /* |
721 | * No need to redo, when the primary call touched the high | 721 | * If the primary call didn't touch the high mapping already |
722 | * mapping already: | 722 | * and the physical address is inside the kernel map, we need |
723 | */ | ||
724 | if (within(vaddr, (unsigned long) _text, _brk_end)) | ||
725 | return 0; | ||
726 | |||
727 | /* | ||
728 | * If the physical address is inside the kernel map, we need | ||
729 | * to touch the high mapped kernel as well: | 723 | * to touch the high mapped kernel as well: |
730 | */ | 724 | */ |
731 | if (!within(cpa->pfn, highmap_start_pfn(), highmap_end_pfn())) | 725 | if (!within(vaddr, (unsigned long)_text, _brk_end) && |
732 | return 0; | 726 | within(cpa->pfn, highmap_start_pfn(), highmap_end_pfn())) { |
727 | unsigned long temp_cpa_vaddr = (cpa->pfn << PAGE_SHIFT) + | ||
728 | __START_KERNEL_map - phys_base; | ||
729 | alias_cpa = *cpa; | ||
730 | alias_cpa.vaddr = &temp_cpa_vaddr; | ||
731 | alias_cpa.flags &= ~(CPA_PAGES_ARRAY | CPA_ARRAY); | ||
733 | 732 | ||
734 | alias_cpa = *cpa; | 733 | /* |
735 | temp_cpa_vaddr = (cpa->pfn << PAGE_SHIFT) + __START_KERNEL_map - phys_base; | 734 | * The high mapping range is imprecise, so ignore the |
736 | alias_cpa.vaddr = &temp_cpa_vaddr; | 735 | * return value. |
737 | alias_cpa.flags &= ~(CPA_PAGES_ARRAY | CPA_ARRAY); | 736 | */ |
737 | __change_page_attr_set_clr(&alias_cpa, 0); | ||
738 | } | ||
739 | #endif | ||
738 | 740 | ||
739 | /* | 741 | /* |
740 | * The high mapping range is imprecise, so ignore the return value. | 742 | * If the PMD page was partially used for per-cpu remapping, |
743 | * the recycled area needs to be split and modified. Because | ||
744 | * the area is always proper subset of a PMD page | ||
745 | * cpa->numpages is guaranteed to be 1 for these areas, so | ||
746 | * there's no need to loop over and check for further remaps. | ||
741 | */ | 747 | */ |
742 | __change_page_attr_set_clr(&alias_cpa, 0); | 748 | remapped = (unsigned long)pcpu_lpage_remapped((void *)laddr); |
743 | #endif | 749 | if (remapped) { |
744 | return ret; | 750 | WARN_ON(cpa->numpages > 1); |
751 | alias_cpa = *cpa; | ||
752 | alias_cpa.vaddr = &remapped; | ||
753 | alias_cpa.flags &= ~(CPA_PAGES_ARRAY | CPA_ARRAY); | ||
754 | ret = __change_page_attr_set_clr(&alias_cpa, 0); | ||
755 | if (ret) | ||
756 | return ret; | ||
757 | } | ||
758 | |||
759 | return 0; | ||
745 | } | 760 | } |
746 | 761 | ||
747 | static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias) | 762 | static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias) |
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index b07dd8d0b321..89b9a5cd63da 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c | |||
@@ -390,7 +390,7 @@ static int __init p4_init(char **cpu_type) | |||
390 | static int force_arch_perfmon; | 390 | static int force_arch_perfmon; |
391 | static int force_cpu_type(const char *str, struct kernel_param *kp) | 391 | static int force_cpu_type(const char *str, struct kernel_param *kp) |
392 | { | 392 | { |
393 | if (!strcmp(str, "archperfmon")) { | 393 | if (!strcmp(str, "arch_perfmon")) { |
394 | force_arch_perfmon = 1; | 394 | force_arch_perfmon = 1; |
395 | printk(KERN_INFO "oprofile: forcing architectural perfmon\n"); | 395 | printk(KERN_INFO "oprofile: forcing architectural perfmon\n"); |
396 | } | 396 | } |
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index c0ecf250fe51..1014eb4bfc37 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c | |||
@@ -38,15 +38,26 @@ count_resource(struct acpi_resource *acpi_res, void *data) | |||
38 | struct acpi_resource_address64 addr; | 38 | struct acpi_resource_address64 addr; |
39 | acpi_status status; | 39 | acpi_status status; |
40 | 40 | ||
41 | if (info->res_num >= PCI_BUS_NUM_RESOURCES) | ||
42 | return AE_OK; | ||
43 | |||
44 | status = resource_to_addr(acpi_res, &addr); | 41 | status = resource_to_addr(acpi_res, &addr); |
45 | if (ACPI_SUCCESS(status)) | 42 | if (ACPI_SUCCESS(status)) |
46 | info->res_num++; | 43 | info->res_num++; |
47 | return AE_OK; | 44 | return AE_OK; |
48 | } | 45 | } |
49 | 46 | ||
47 | static int | ||
48 | bus_has_transparent_bridge(struct pci_bus *bus) | ||
49 | { | ||
50 | struct pci_dev *dev; | ||
51 | |||
52 | list_for_each_entry(dev, &bus->devices, bus_list) { | ||
53 | u16 class = dev->class >> 8; | ||
54 | |||
55 | if (class == PCI_CLASS_BRIDGE_PCI && dev->transparent) | ||
56 | return true; | ||
57 | } | ||
58 | return false; | ||
59 | } | ||
60 | |||
50 | static acpi_status | 61 | static acpi_status |
51 | setup_resource(struct acpi_resource *acpi_res, void *data) | 62 | setup_resource(struct acpi_resource *acpi_res, void *data) |
52 | { | 63 | { |
@@ -56,9 +67,11 @@ setup_resource(struct acpi_resource *acpi_res, void *data) | |||
56 | acpi_status status; | 67 | acpi_status status; |
57 | unsigned long flags; | 68 | unsigned long flags; |
58 | struct resource *root; | 69 | struct resource *root; |
70 | int max_root_bus_resources = PCI_BUS_NUM_RESOURCES; | ||
71 | u64 start, end; | ||
59 | 72 | ||
60 | if (info->res_num >= PCI_BUS_NUM_RESOURCES) | 73 | if (bus_has_transparent_bridge(info->bus)) |
61 | return AE_OK; | 74 | max_root_bus_resources -= 3; |
62 | 75 | ||
63 | status = resource_to_addr(acpi_res, &addr); | 76 | status = resource_to_addr(acpi_res, &addr); |
64 | if (!ACPI_SUCCESS(status)) | 77 | if (!ACPI_SUCCESS(status)) |
@@ -75,11 +88,22 @@ setup_resource(struct acpi_resource *acpi_res, void *data) | |||
75 | } else | 88 | } else |
76 | return AE_OK; | 89 | return AE_OK; |
77 | 90 | ||
91 | start = addr.minimum + addr.translation_offset; | ||
92 | end = start + addr.address_length - 1; | ||
93 | if (info->res_num >= max_root_bus_resources) { | ||
94 | printk(KERN_WARNING "PCI: Failed to allocate 0x%lx-0x%lx " | ||
95 | "from %s for %s due to _CRS returning more than " | ||
96 | "%d resource descriptors\n", (unsigned long) start, | ||
97 | (unsigned long) end, root->name, info->name, | ||
98 | max_root_bus_resources); | ||
99 | return AE_OK; | ||
100 | } | ||
101 | |||
78 | res = &info->res[info->res_num]; | 102 | res = &info->res[info->res_num]; |
79 | res->name = info->name; | 103 | res->name = info->name; |
80 | res->flags = flags; | 104 | res->flags = flags; |
81 | res->start = addr.minimum + addr.translation_offset; | 105 | res->start = start; |
82 | res->end = res->start + addr.address_length - 1; | 106 | res->end = end; |
83 | res->child = NULL; | 107 | res->child = NULL; |
84 | 108 | ||
85 | if (insert_resource(root, res)) { | 109 | if (insert_resource(root, res)) { |
@@ -94,23 +118,6 @@ setup_resource(struct acpi_resource *acpi_res, void *data) | |||
94 | } | 118 | } |
95 | 119 | ||
96 | static void | 120 | static void |
97 | adjust_transparent_bridge_resources(struct pci_bus *bus) | ||
98 | { | ||
99 | struct pci_dev *dev; | ||
100 | |||
101 | list_for_each_entry(dev, &bus->devices, bus_list) { | ||
102 | int i; | ||
103 | u16 class = dev->class >> 8; | ||
104 | |||
105 | if (class == PCI_CLASS_BRIDGE_PCI && dev->transparent) { | ||
106 | for(i = 3; i < PCI_BUS_NUM_RESOURCES; i++) | ||
107 | dev->subordinate->resource[i] = | ||
108 | dev->bus->resource[i - 3]; | ||
109 | } | ||
110 | } | ||
111 | } | ||
112 | |||
113 | static void | ||
114 | get_current_resources(struct acpi_device *device, int busnum, | 121 | get_current_resources(struct acpi_device *device, int busnum, |
115 | int domain, struct pci_bus *bus) | 122 | int domain, struct pci_bus *bus) |
116 | { | 123 | { |
@@ -137,8 +144,6 @@ get_current_resources(struct acpi_device *device, int busnum, | |||
137 | info.res_num = 0; | 144 | info.res_num = 0; |
138 | acpi_walk_resources(device->handle, METHOD_NAME__CRS, setup_resource, | 145 | acpi_walk_resources(device->handle, METHOD_NAME__CRS, setup_resource, |
139 | &info); | 146 | &info); |
140 | if (info.res_num) | ||
141 | adjust_transparent_bridge_resources(bus); | ||
142 | 147 | ||
143 | return; | 148 | return; |
144 | 149 | ||
@@ -201,8 +206,15 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do | |||
201 | */ | 206 | */ |
202 | memcpy(bus->sysdata, sd, sizeof(*sd)); | 207 | memcpy(bus->sysdata, sd, sizeof(*sd)); |
203 | kfree(sd); | 208 | kfree(sd); |
204 | } else | 209 | } else { |
205 | bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd); | 210 | bus = pci_create_bus(NULL, busnum, &pci_root_ops, sd); |
211 | if (bus) { | ||
212 | if (pci_probe & PCI_USE__CRS) | ||
213 | get_current_resources(device, busnum, domain, | ||
214 | bus); | ||
215 | bus->subordinate = pci_scan_child_bus(bus); | ||
216 | } | ||
217 | } | ||
206 | 218 | ||
207 | if (!bus) | 219 | if (!bus) |
208 | kfree(sd); | 220 | kfree(sd); |
@@ -217,8 +229,6 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do | |||
217 | #endif | 229 | #endif |
218 | } | 230 | } |
219 | 231 | ||
220 | if (bus && (pci_probe & PCI_USE__CRS)) | ||
221 | get_current_resources(device, busnum, domain, bus); | ||
222 | return bus; | 232 | return bus; |
223 | } | 233 | } |
224 | 234 | ||
diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c index f893d6a6e803..3ffa10df20b9 100644 --- a/arch/x86/pci/amd_bus.c +++ b/arch/x86/pci/amd_bus.c | |||
@@ -100,8 +100,9 @@ void x86_pci_root_bus_res_quirks(struct pci_bus *b) | |||
100 | int j; | 100 | int j; |
101 | struct pci_root_info *info; | 101 | struct pci_root_info *info; |
102 | 102 | ||
103 | /* don't go for it if _CRS is used */ | 103 | /* don't go for it if _CRS is used already */ |
104 | if (pci_probe & PCI_USE__CRS) | 104 | if (b->resource[0] != &ioport_resource || |
105 | b->resource[1] != &iomem_resource) | ||
105 | return; | 106 | return; |
106 | 107 | ||
107 | /* if only one root bus, don't need to anything */ | 108 | /* if only one root bus, don't need to anything */ |
@@ -116,6 +117,9 @@ void x86_pci_root_bus_res_quirks(struct pci_bus *b) | |||
116 | if (i == pci_root_num) | 117 | if (i == pci_root_num) |
117 | return; | 118 | return; |
118 | 119 | ||
120 | printk(KERN_DEBUG "PCI: peer root bus %02x res updated from pci conf\n", | ||
121 | b->number); | ||
122 | |||
119 | info = &pci_root_info[i]; | 123 | info = &pci_root_info[i]; |
120 | for (j = 0; j < info->res_num; j++) { | 124 | for (j = 0; j < info->res_num; j++) { |
121 | struct resource *res; | 125 | struct resource *res; |
diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c index 8766b0e216c5..712443ec6d43 100644 --- a/arch/x86/pci/mmconfig-shared.c +++ b/arch/x86/pci/mmconfig-shared.c | |||
@@ -523,6 +523,69 @@ reject: | |||
523 | 523 | ||
524 | static int __initdata known_bridge; | 524 | static int __initdata known_bridge; |
525 | 525 | ||
526 | static int acpi_mcfg_64bit_base_addr __initdata = FALSE; | ||
527 | |||
528 | /* The physical address of the MMCONFIG aperture. Set from ACPI tables. */ | ||
529 | struct acpi_mcfg_allocation *pci_mmcfg_config; | ||
530 | int pci_mmcfg_config_num; | ||
531 | |||
532 | static int __init acpi_mcfg_oem_check(struct acpi_table_mcfg *mcfg) | ||
533 | { | ||
534 | if (!strcmp(mcfg->header.oem_id, "SGI")) | ||
535 | acpi_mcfg_64bit_base_addr = TRUE; | ||
536 | |||
537 | return 0; | ||
538 | } | ||
539 | |||
540 | static int __init pci_parse_mcfg(struct acpi_table_header *header) | ||
541 | { | ||
542 | struct acpi_table_mcfg *mcfg; | ||
543 | unsigned long i; | ||
544 | int config_size; | ||
545 | |||
546 | if (!header) | ||
547 | return -EINVAL; | ||
548 | |||
549 | mcfg = (struct acpi_table_mcfg *)header; | ||
550 | |||
551 | /* how many config structures do we have */ | ||
552 | pci_mmcfg_config_num = 0; | ||
553 | i = header->length - sizeof(struct acpi_table_mcfg); | ||
554 | while (i >= sizeof(struct acpi_mcfg_allocation)) { | ||
555 | ++pci_mmcfg_config_num; | ||
556 | i -= sizeof(struct acpi_mcfg_allocation); | ||
557 | }; | ||
558 | if (pci_mmcfg_config_num == 0) { | ||
559 | printk(KERN_ERR PREFIX "MMCONFIG has no entries\n"); | ||
560 | return -ENODEV; | ||
561 | } | ||
562 | |||
563 | config_size = pci_mmcfg_config_num * sizeof(*pci_mmcfg_config); | ||
564 | pci_mmcfg_config = kmalloc(config_size, GFP_KERNEL); | ||
565 | if (!pci_mmcfg_config) { | ||
566 | printk(KERN_WARNING PREFIX | ||
567 | "No memory for MCFG config tables\n"); | ||
568 | return -ENOMEM; | ||
569 | } | ||
570 | |||
571 | memcpy(pci_mmcfg_config, &mcfg[1], config_size); | ||
572 | |||
573 | acpi_mcfg_oem_check(mcfg); | ||
574 | |||
575 | for (i = 0; i < pci_mmcfg_config_num; ++i) { | ||
576 | if ((pci_mmcfg_config[i].address > 0xFFFFFFFF) && | ||
577 | !acpi_mcfg_64bit_base_addr) { | ||
578 | printk(KERN_ERR PREFIX | ||
579 | "MMCONFIG not in low 4GB of memory\n"); | ||
580 | kfree(pci_mmcfg_config); | ||
581 | pci_mmcfg_config_num = 0; | ||
582 | return -ENODEV; | ||
583 | } | ||
584 | } | ||
585 | |||
586 | return 0; | ||
587 | } | ||
588 | |||
526 | static void __init __pci_mmcfg_init(int early) | 589 | static void __init __pci_mmcfg_init(int early) |
527 | { | 590 | { |
528 | /* MMCONFIG disabled */ | 591 | /* MMCONFIG disabled */ |
@@ -543,7 +606,7 @@ static void __init __pci_mmcfg_init(int early) | |||
543 | } | 606 | } |
544 | 607 | ||
545 | if (!known_bridge) | 608 | if (!known_bridge) |
546 | acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg); | 609 | acpi_table_parse(ACPI_SIG_MCFG, pci_parse_mcfg); |
547 | 610 | ||
548 | pci_mmcfg_reject_broken(early); | 611 | pci_mmcfg_reject_broken(early); |
549 | 612 | ||
diff --git a/arch/x86/power/Makefile b/arch/x86/power/Makefile index de2abbd07544..a6a198c33623 100644 --- a/arch/x86/power/Makefile +++ b/arch/x86/power/Makefile | |||
@@ -1,7 +1,7 @@ | |||
1 | # __restore_processor_state() restores %gs after S3 resume and so should not | 1 | # __restore_processor_state() restores %gs after S3 resume and so should not |
2 | # itself be stack-protected | 2 | # itself be stack-protected |
3 | nostackp := $(call cc-option, -fno-stack-protector) | 3 | nostackp := $(call cc-option, -fno-stack-protector) |
4 | CFLAGS_cpu_$(BITS).o := $(nostackp) | 4 | CFLAGS_cpu.o := $(nostackp) |
5 | 5 | ||
6 | obj-$(CONFIG_PM_SLEEP) += cpu.o | 6 | obj-$(CONFIG_PM_SLEEP) += cpu.o |
7 | obj-$(CONFIG_HIBERNATION) += hibernate_$(BITS).o hibernate_asm_$(BITS).o | 7 | obj-$(CONFIG_HIBERNATION) += hibernate_$(BITS).o hibernate_asm_$(BITS).o |
diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c index d277ef1eea51..b3d20b9cac63 100644 --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c | |||
@@ -244,7 +244,7 @@ static void __restore_processor_state(struct saved_context *ctxt) | |||
244 | do_fpu_end(); | 244 | do_fpu_end(); |
245 | mtrr_ap_init(); | 245 | mtrr_ap_init(); |
246 | 246 | ||
247 | #ifdef CONFIG_X86_32 | 247 | #ifdef CONFIG_X86_OLD_MCE |
248 | mcheck_init(&boot_cpu_data); | 248 | mcheck_init(&boot_cpu_data); |
249 | #endif | 249 | #endif |
250 | } | 250 | } |
diff --git a/arch/xtensa/configs/s6105_defconfig b/arch/xtensa/configs/s6105_defconfig index 768bee006037..bb84fbc9921f 100644 --- a/arch/xtensa/configs/s6105_defconfig +++ b/arch/xtensa/configs/s6105_defconfig | |||
@@ -263,7 +263,54 @@ CONFIG_HAVE_IDE=y | |||
263 | # CONFIG_SCSI_NETLINK is not set | 263 | # CONFIG_SCSI_NETLINK is not set |
264 | # CONFIG_ATA is not set | 264 | # CONFIG_ATA is not set |
265 | # CONFIG_MD is not set | 265 | # CONFIG_MD is not set |
266 | # CONFIG_NETDEVICES is not set | 266 | CONFIG_NETDEVICES=y |
267 | # CONFIG_DUMMY is not set | ||
268 | # CONFIG_BONDING is not set | ||
269 | # CONFIG_MACVLAN is not set | ||
270 | # CONFIG_EQUALIZER is not set | ||
271 | # CONFIG_TUN is not set | ||
272 | # CONFIG_VETH is not set | ||
273 | CONFIG_PHYLIB=y | ||
274 | |||
275 | # | ||
276 | # MII PHY device drivers | ||
277 | # | ||
278 | # CONFIG_MARVELL_PHY is not set | ||
279 | # CONFIG_DAVICOM_PHY is not set | ||
280 | # CONFIG_QSEMI_PHY is not set | ||
281 | # CONFIG_LXT_PHY is not set | ||
282 | # CONFIG_CICADA_PHY is not set | ||
283 | # CONFIG_VITESSE_PHY is not set | ||
284 | CONFIG_SMSC_PHY=y | ||
285 | # CONFIG_BROADCOM_PHY is not set | ||
286 | # CONFIG_ICPLUS_PHY is not set | ||
287 | # CONFIG_REALTEK_PHY is not set | ||
288 | # CONFIG_NATIONAL_PHY is not set | ||
289 | # CONFIG_STE10XP is not set | ||
290 | # CONFIG_LSI_ET1011C_PHY is not set | ||
291 | # CONFIG_FIXED_PHY is not set | ||
292 | # CONFIG_MDIO_BITBANG is not set | ||
293 | # CONFIG_NET_ETHERNET is not set | ||
294 | CONFIG_NETDEV_1000=y | ||
295 | CONFIG_S6GMAC=y | ||
296 | # CONFIG_NETDEV_10000 is not set | ||
297 | |||
298 | # | ||
299 | # Wireless LAN | ||
300 | # | ||
301 | # CONFIG_WLAN_PRE80211 is not set | ||
302 | # CONFIG_WLAN_80211 is not set | ||
303 | # CONFIG_IWLWIFI_LEDS is not set | ||
304 | |||
305 | # | ||
306 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
307 | # | ||
308 | # CONFIG_WAN is not set | ||
309 | # CONFIG_PPP is not set | ||
310 | # CONFIG_SLIP is not set | ||
311 | # CONFIG_NETCONSOLE is not set | ||
312 | # CONFIG_NETPOLL is not set | ||
313 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
267 | # CONFIG_ISDN is not set | 314 | # CONFIG_ISDN is not set |
268 | # CONFIG_PHONE is not set | 315 | # CONFIG_PHONE is not set |
269 | 316 | ||
@@ -304,8 +351,6 @@ CONFIG_UNIX98_PTYS=y | |||
304 | # CONFIG_LEGACY_PTYS is not set | 351 | # CONFIG_LEGACY_PTYS is not set |
305 | # CONFIG_IPMI_HANDLER is not set | 352 | # CONFIG_IPMI_HANDLER is not set |
306 | # CONFIG_HW_RANDOM is not set | 353 | # CONFIG_HW_RANDOM is not set |
307 | # CONFIG_RTC is not set | ||
308 | # CONFIG_GEN_RTC is not set | ||
309 | # CONFIG_R3964 is not set | 354 | # CONFIG_R3964 is not set |
310 | # CONFIG_RAW_DRIVER is not set | 355 | # CONFIG_RAW_DRIVER is not set |
311 | # CONFIG_TCG_TPM is not set | 356 | # CONFIG_TCG_TPM is not set |
@@ -387,7 +432,59 @@ CONFIG_SSB_POSSIBLE=y | |||
387 | # CONFIG_MEMSTICK is not set | 432 | # CONFIG_MEMSTICK is not set |
388 | # CONFIG_NEW_LEDS is not set | 433 | # CONFIG_NEW_LEDS is not set |
389 | # CONFIG_ACCESSIBILITY is not set | 434 | # CONFIG_ACCESSIBILITY is not set |
390 | # CONFIG_RTC_CLASS is not set | 435 | CONFIG_RTC_LIB=y |
436 | CONFIG_RTC_CLASS=y | ||
437 | CONFIG_RTC_HCTOSYS=y | ||
438 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
439 | # CONFIG_RTC_DEBUG is not set | ||
440 | |||
441 | # | ||
442 | # RTC interfaces | ||
443 | # | ||
444 | # CONFIG_RTC_INTF_SYSFS is not set | ||
445 | # CONFIG_RTC_INTF_PROC is not set | ||
446 | # CONFIG_RTC_INTF_DEV is not set | ||
447 | # CONFIG_RTC_DRV_TEST is not set | ||
448 | |||
449 | # | ||
450 | # I2C RTC drivers | ||
451 | # | ||
452 | # CONFIG_RTC_DRV_DS1307 is not set | ||
453 | # CONFIG_RTC_DRV_DS1374 is not set | ||
454 | # CONFIG_RTC_DRV_DS1672 is not set | ||
455 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
456 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
457 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
458 | # CONFIG_RTC_DRV_X1205 is not set | ||
459 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
460 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
461 | CONFIG_RTC_DRV_M41T80=y | ||
462 | # CONFIG_RTC_DRV_M41T80_WDT is not set | ||
463 | # CONFIG_RTC_DRV_S35390A is not set | ||
464 | # CONFIG_RTC_DRV_FM3130 is not set | ||
465 | # CONFIG_RTC_DRV_RX8581 is not set | ||
466 | |||
467 | # | ||
468 | # SPI RTC drivers | ||
469 | # | ||
470 | |||
471 | # | ||
472 | # Platform RTC drivers | ||
473 | # | ||
474 | # CONFIG_RTC_DRV_DS1286 is not set | ||
475 | # CONFIG_RTC_DRV_DS1511 is not set | ||
476 | # CONFIG_RTC_DRV_DS1553 is not set | ||
477 | # CONFIG_RTC_DRV_DS1742 is not set | ||
478 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
479 | # CONFIG_RTC_DRV_M48T86 is not set | ||
480 | # CONFIG_RTC_DRV_M48T35 is not set | ||
481 | # CONFIG_RTC_DRV_M48T59 is not set | ||
482 | # CONFIG_RTC_DRV_BQ4802 is not set | ||
483 | # CONFIG_RTC_DRV_V3020 is not set | ||
484 | |||
485 | # | ||
486 | # on-CPU RTC drivers | ||
487 | # | ||
391 | # CONFIG_DMADEVICES is not set | 488 | # CONFIG_DMADEVICES is not set |
392 | # CONFIG_UIO is not set | 489 | # CONFIG_UIO is not set |
393 | # CONFIG_STAGING is not set | 490 | # CONFIG_STAGING is not set |
diff --git a/arch/xtensa/include/asm/cacheflush.h b/arch/xtensa/include/asm/cacheflush.h index 8fc1c0c8de07..b7b8fbe47c77 100644 --- a/arch/xtensa/include/asm/cacheflush.h +++ b/arch/xtensa/include/asm/cacheflush.h | |||
@@ -155,5 +155,100 @@ extern void copy_from_user_page(struct vm_area_struct*, struct page*, | |||
155 | 155 | ||
156 | #endif | 156 | #endif |
157 | 157 | ||
158 | #define XTENSA_CACHEBLK_LOG2 29 | ||
159 | #define XTENSA_CACHEBLK_SIZE (1 << XTENSA_CACHEBLK_LOG2) | ||
160 | #define XTENSA_CACHEBLK_MASK (7 << XTENSA_CACHEBLK_LOG2) | ||
161 | |||
162 | #if XCHAL_HAVE_CACHEATTR | ||
163 | static inline u32 xtensa_get_cacheattr(void) | ||
164 | { | ||
165 | u32 r; | ||
166 | asm volatile(" rsr %0, CACHEATTR" : "=a"(r)); | ||
167 | return r; | ||
168 | } | ||
169 | |||
170 | static inline u32 xtensa_get_dtlb1(u32 addr) | ||
171 | { | ||
172 | u32 r = addr & XTENSA_CACHEBLK_MASK; | ||
173 | return r | ((xtensa_get_cacheattr() >> (r >> (XTENSA_CACHEBLK_LOG2-2))) | ||
174 | & 0xF); | ||
175 | } | ||
176 | #else | ||
177 | static inline u32 xtensa_get_dtlb1(u32 addr) | ||
178 | { | ||
179 | u32 r; | ||
180 | asm volatile(" rdtlb1 %0, %1" : "=a"(r) : "a"(addr)); | ||
181 | asm volatile(" dsync"); | ||
182 | return r; | ||
183 | } | ||
184 | |||
185 | static inline u32 xtensa_get_cacheattr(void) | ||
186 | { | ||
187 | u32 r = 0; | ||
188 | u32 a = 0; | ||
189 | do { | ||
190 | a -= XTENSA_CACHEBLK_SIZE; | ||
191 | r = (r << 4) | (xtensa_get_dtlb1(a) & 0xF); | ||
192 | } while (a); | ||
193 | return r; | ||
194 | } | ||
195 | #endif | ||
196 | |||
197 | static inline int xtensa_need_flush_dma_source(u32 addr) | ||
198 | { | ||
199 | return (xtensa_get_dtlb1(addr) & ((1 << XCHAL_CA_BITS) - 1)) >= 4; | ||
200 | } | ||
201 | |||
202 | static inline int xtensa_need_invalidate_dma_destination(u32 addr) | ||
203 | { | ||
204 | return (xtensa_get_dtlb1(addr) & ((1 << XCHAL_CA_BITS) - 1)) != 2; | ||
205 | } | ||
206 | |||
207 | static inline void flush_dcache_unaligned(u32 addr, u32 size) | ||
208 | { | ||
209 | u32 cnt; | ||
210 | if (size) { | ||
211 | cnt = (size + ((XCHAL_DCACHE_LINESIZE - 1) & addr) | ||
212 | + XCHAL_DCACHE_LINESIZE - 1) / XCHAL_DCACHE_LINESIZE; | ||
213 | while (cnt--) { | ||
214 | asm volatile(" dhwb %0, 0" : : "a"(addr)); | ||
215 | addr += XCHAL_DCACHE_LINESIZE; | ||
216 | } | ||
217 | asm volatile(" dsync"); | ||
218 | } | ||
219 | } | ||
220 | |||
221 | static inline void invalidate_dcache_unaligned(u32 addr, u32 size) | ||
222 | { | ||
223 | int cnt; | ||
224 | if (size) { | ||
225 | asm volatile(" dhwbi %0, 0 ;" : : "a"(addr)); | ||
226 | cnt = (size + ((XCHAL_DCACHE_LINESIZE - 1) & addr) | ||
227 | - XCHAL_DCACHE_LINESIZE - 1) / XCHAL_DCACHE_LINESIZE; | ||
228 | while (cnt-- > 0) { | ||
229 | asm volatile(" dhi %0, %1" : : "a"(addr), | ||
230 | "n"(XCHAL_DCACHE_LINESIZE)); | ||
231 | addr += XCHAL_DCACHE_LINESIZE; | ||
232 | } | ||
233 | asm volatile(" dhwbi %0, %1" : : "a"(addr), | ||
234 | "n"(XCHAL_DCACHE_LINESIZE)); | ||
235 | asm volatile(" dsync"); | ||
236 | } | ||
237 | } | ||
238 | |||
239 | static inline void flush_invalidate_dcache_unaligned(u32 addr, u32 size) | ||
240 | { | ||
241 | u32 cnt; | ||
242 | if (size) { | ||
243 | cnt = (size + ((XCHAL_DCACHE_LINESIZE - 1) & addr) | ||
244 | + XCHAL_DCACHE_LINESIZE - 1) / XCHAL_DCACHE_LINESIZE; | ||
245 | while (cnt--) { | ||
246 | asm volatile(" dhwbi %0, 0" : : "a"(addr)); | ||
247 | addr += XCHAL_DCACHE_LINESIZE; | ||
248 | } | ||
249 | asm volatile(" dsync"); | ||
250 | } | ||
251 | } | ||
252 | |||
158 | #endif /* __KERNEL__ */ | 253 | #endif /* __KERNEL__ */ |
159 | #endif /* _XTENSA_CACHEFLUSH_H */ | 254 | #endif /* _XTENSA_CACHEFLUSH_H */ |
diff --git a/arch/xtensa/include/asm/gpio.h b/arch/xtensa/include/asm/gpio.h index 0763b0763960..a8c9fc46c790 100644 --- a/arch/xtensa/include/asm/gpio.h +++ b/arch/xtensa/include/asm/gpio.h | |||
@@ -38,14 +38,14 @@ static inline int gpio_cansleep(unsigned int gpio) | |||
38 | return __gpio_cansleep(gpio); | 38 | return __gpio_cansleep(gpio); |
39 | } | 39 | } |
40 | 40 | ||
41 | /* | ||
42 | * Not implemented, yet. | ||
43 | */ | ||
44 | static inline int gpio_to_irq(unsigned int gpio) | 41 | static inline int gpio_to_irq(unsigned int gpio) |
45 | { | 42 | { |
46 | return -ENOSYS; | 43 | return __gpio_to_irq(gpio); |
47 | } | 44 | } |
48 | 45 | ||
46 | /* | ||
47 | * Not implemented, yet. | ||
48 | */ | ||
49 | static inline int irq_to_gpio(unsigned int irq) | 49 | static inline int irq_to_gpio(unsigned int irq) |
50 | { | 50 | { |
51 | return -EINVAL; | 51 | return -EINVAL; |
diff --git a/arch/xtensa/include/asm/irq.h b/arch/xtensa/include/asm/irq.h index dfac82dc52ad..4c0ccc9c4f4c 100644 --- a/arch/xtensa/include/asm/irq.h +++ b/arch/xtensa/include/asm/irq.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #ifndef _XTENSA_IRQ_H | 11 | #ifndef _XTENSA_IRQ_H |
12 | #define _XTENSA_IRQ_H | 12 | #define _XTENSA_IRQ_H |
13 | 13 | ||
14 | #include <linux/init.h> | ||
14 | #include <platform/hardware.h> | 15 | #include <platform/hardware.h> |
15 | #include <variant/core.h> | 16 | #include <variant/core.h> |
16 | 17 | ||
@@ -21,11 +22,20 @@ static inline void variant_irq_enable(unsigned int irq) { } | |||
21 | static inline void variant_irq_disable(unsigned int irq) { } | 22 | static inline void variant_irq_disable(unsigned int irq) { } |
22 | #endif | 23 | #endif |
23 | 24 | ||
25 | #ifndef VARIANT_NR_IRQS | ||
26 | # define VARIANT_NR_IRQS 0 | ||
27 | #endif | ||
24 | #ifndef PLATFORM_NR_IRQS | 28 | #ifndef PLATFORM_NR_IRQS |
25 | # define PLATFORM_NR_IRQS 0 | 29 | # define PLATFORM_NR_IRQS 0 |
26 | #endif | 30 | #endif |
27 | #define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS | 31 | #define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS |
28 | #define NR_IRQS (XTENSA_NR_IRQS + PLATFORM_NR_IRQS) | 32 | #define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS) |
33 | |||
34 | #if VARIANT_NR_IRQS == 0 | ||
35 | static inline void variant_init_irq(void) { } | ||
36 | #else | ||
37 | void variant_init_irq(void) __init; | ||
38 | #endif | ||
29 | 39 | ||
30 | static __inline__ int irq_canonicalize(int irq) | 40 | static __inline__ int irq_canonicalize(int irq) |
31 | { | 41 | { |
diff --git a/arch/xtensa/include/asm/thread_info.h b/arch/xtensa/include/asm/thread_info.h index 0f4fe1faf9ba..13165641cc51 100644 --- a/arch/xtensa/include/asm/thread_info.h +++ b/arch/xtensa/include/asm/thread_info.h | |||
@@ -80,8 +80,6 @@ struct thread_info { | |||
80 | 80 | ||
81 | /* | 81 | /* |
82 | * macros/functions for gaining access to the thread information structure | 82 | * macros/functions for gaining access to the thread information structure |
83 | * | ||
84 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
85 | */ | 83 | */ |
86 | 84 | ||
87 | #ifndef __ASSEMBLY__ | 85 | #ifndef __ASSEMBLY__ |
@@ -92,7 +90,7 @@ struct thread_info { | |||
92 | .exec_domain = &default_exec_domain, \ | 90 | .exec_domain = &default_exec_domain, \ |
93 | .flags = 0, \ | 91 | .flags = 0, \ |
94 | .cpu = 0, \ | 92 | .cpu = 0, \ |
95 | .preempt_count = 1, \ | 93 | .preempt_count = INIT_PREEMPT_COUNT, \ |
96 | .addr_limit = KERNEL_DS, \ | 94 | .addr_limit = KERNEL_DS, \ |
97 | .restart_block = { \ | 95 | .restart_block = { \ |
98 | .fn = do_no_restart_syscall, \ | 96 | .fn = do_no_restart_syscall, \ |
diff --git a/arch/xtensa/kernel/irq.c b/arch/xtensa/kernel/irq.c index a36c85edd045..a1badb32fcda 100644 --- a/arch/xtensa/kernel/irq.c +++ b/arch/xtensa/kernel/irq.c | |||
@@ -197,4 +197,6 @@ void __init init_IRQ(void) | |||
197 | } | 197 | } |
198 | 198 | ||
199 | cached_irq_mask = 0; | 199 | cached_irq_mask = 0; |
200 | |||
201 | variant_init_irq(); | ||
200 | } | 202 | } |
diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c index ba9ab9349782..e64efac3b9db 100644 --- a/arch/xtensa/kernel/traps.c +++ b/arch/xtensa/kernel/traps.c | |||
@@ -354,10 +354,10 @@ void show_regs(struct pt_regs * regs) | |||
354 | 354 | ||
355 | for (i = 0; i < 16; i++) { | 355 | for (i = 0; i < 16; i++) { |
356 | if ((i % 8) == 0) | 356 | if ((i % 8) == 0) |
357 | printk ("\n" KERN_INFO "a%02d: ", i); | 357 | printk(KERN_INFO "a%02d:", i); |
358 | printk("%08lx ", regs->areg[i]); | 358 | printk(KERN_CONT " %08lx", regs->areg[i]); |
359 | } | 359 | } |
360 | printk("\n"); | 360 | printk(KERN_CONT "\n"); |
361 | 361 | ||
362 | printk("pc: %08lx, ps: %08lx, depc: %08lx, excvaddr: %08lx\n", | 362 | printk("pc: %08lx, ps: %08lx, depc: %08lx, excvaddr: %08lx\n", |
363 | regs->pc, regs->ps, regs->depc, regs->excvaddr); | 363 | regs->pc, regs->ps, regs->depc, regs->excvaddr); |
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index bdd860d93f72..bc0733359a88 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c | |||
@@ -106,7 +106,7 @@ good_area: | |||
106 | * the fault. | 106 | * the fault. |
107 | */ | 107 | */ |
108 | survive: | 108 | survive: |
109 | fault = handle_mm_fault(mm, vma, address, is_write); | 109 | fault = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0); |
110 | if (unlikely(fault & VM_FAULT_ERROR)) { | 110 | if (unlikely(fault & VM_FAULT_ERROR)) { |
111 | if (fault & VM_FAULT_OOM) | 111 | if (fault & VM_FAULT_OOM) |
112 | goto out_of_memory; | 112 | goto out_of_memory; |
diff --git a/arch/xtensa/platforms/s6105/device.c b/arch/xtensa/platforms/s6105/device.c index 78b08be5a92d..65333ffefb07 100644 --- a/arch/xtensa/platforms/s6105/device.c +++ b/arch/xtensa/platforms/s6105/device.c | |||
@@ -5,14 +5,27 @@ | |||
5 | */ | 5 | */ |
6 | 6 | ||
7 | #include <linux/kernel.h> | 7 | #include <linux/kernel.h> |
8 | #include <linux/gpio.h> | ||
8 | #include <linux/init.h> | 9 | #include <linux/init.h> |
10 | #include <linux/irq.h> | ||
11 | #include <linux/phy.h> | ||
9 | #include <linux/platform_device.h> | 12 | #include <linux/platform_device.h> |
10 | #include <linux/serial.h> | 13 | #include <linux/serial.h> |
11 | #include <linux/serial_8250.h> | 14 | #include <linux/serial_8250.h> |
12 | 15 | ||
13 | #include <variant/hardware.h> | 16 | #include <variant/hardware.h> |
17 | #include <variant/dmac.h> | ||
14 | 18 | ||
19 | #include <platform/gpio.h> | ||
20 | |||
21 | #define GPIO3_INTNUM 3 | ||
15 | #define UART_INTNUM 4 | 22 | #define UART_INTNUM 4 |
23 | #define GMAC_INTNUM 5 | ||
24 | |||
25 | static const signed char gpio3_irq_mappings[] = { | ||
26 | S6_INTC_GPIO(3), | ||
27 | -1 | ||
28 | }; | ||
16 | 29 | ||
17 | static const signed char uart_irq_mappings[] = { | 30 | static const signed char uart_irq_mappings[] = { |
18 | S6_INTC_UART(0), | 31 | S6_INTC_UART(0), |
@@ -20,8 +33,18 @@ static const signed char uart_irq_mappings[] = { | |||
20 | -1, | 33 | -1, |
21 | }; | 34 | }; |
22 | 35 | ||
36 | static const signed char gmac_irq_mappings[] = { | ||
37 | S6_INTC_GMAC_STAT, | ||
38 | S6_INTC_GMAC_ERR, | ||
39 | S6_INTC_DMA_HOSTTERMCNT(0), | ||
40 | S6_INTC_DMA_HOSTTERMCNT(1), | ||
41 | -1 | ||
42 | }; | ||
43 | |||
23 | const signed char *platform_irq_mappings[NR_IRQS] = { | 44 | const signed char *platform_irq_mappings[NR_IRQS] = { |
45 | [GPIO3_INTNUM] = gpio3_irq_mappings, | ||
24 | [UART_INTNUM] = uart_irq_mappings, | 46 | [UART_INTNUM] = uart_irq_mappings, |
47 | [GMAC_INTNUM] = gmac_irq_mappings, | ||
25 | }; | 48 | }; |
26 | 49 | ||
27 | static struct plat_serial8250_port serial_platform_data[] = { | 50 | static struct plat_serial8250_port serial_platform_data[] = { |
@@ -46,6 +69,66 @@ static struct plat_serial8250_port serial_platform_data[] = { | |||
46 | { }, | 69 | { }, |
47 | }; | 70 | }; |
48 | 71 | ||
72 | static struct resource s6_gmac_resource[] = { | ||
73 | { | ||
74 | .name = "mem", | ||
75 | .start = (resource_size_t)S6_REG_GMAC, | ||
76 | .end = (resource_size_t)S6_REG_GMAC + 0x10000 - 1, | ||
77 | .flags = IORESOURCE_MEM, | ||
78 | }, | ||
79 | { | ||
80 | .name = "dma", | ||
81 | .start = (resource_size_t) | ||
82 | DMA_CHNL(S6_REG_HIFDMA, S6_HIFDMA_GMACTX), | ||
83 | .end = (resource_size_t) | ||
84 | DMA_CHNL(S6_REG_HIFDMA, S6_HIFDMA_GMACTX) + 0x100 - 1, | ||
85 | .flags = IORESOURCE_DMA, | ||
86 | }, | ||
87 | { | ||
88 | .name = "dma", | ||
89 | .start = (resource_size_t) | ||
90 | DMA_CHNL(S6_REG_HIFDMA, S6_HIFDMA_GMACRX), | ||
91 | .end = (resource_size_t) | ||
92 | DMA_CHNL(S6_REG_HIFDMA, S6_HIFDMA_GMACRX) + 0x100 - 1, | ||
93 | .flags = IORESOURCE_DMA, | ||
94 | }, | ||
95 | { | ||
96 | .name = "io", | ||
97 | .start = (resource_size_t)S6_MEM_GMAC, | ||
98 | .end = (resource_size_t)S6_MEM_GMAC + 0x2000000 - 1, | ||
99 | .flags = IORESOURCE_IO, | ||
100 | }, | ||
101 | { | ||
102 | .name = "irq", | ||
103 | .start = (resource_size_t)GMAC_INTNUM, | ||
104 | .flags = IORESOURCE_IRQ, | ||
105 | }, | ||
106 | { | ||
107 | .name = "irq", | ||
108 | .start = (resource_size_t)PHY_POLL, | ||
109 | .flags = IORESOURCE_IRQ, | ||
110 | }, | ||
111 | }; | ||
112 | |||
113 | static int __init prepare_phy_irq(int pin) | ||
114 | { | ||
115 | int irq; | ||
116 | if (gpio_request(pin, "s6gmac_phy") < 0) | ||
117 | goto fail; | ||
118 | if (gpio_direction_input(pin) < 0) | ||
119 | goto free; | ||
120 | irq = gpio_to_irq(pin); | ||
121 | if (irq < 0) | ||
122 | goto free; | ||
123 | if (set_irq_type(irq, IRQ_TYPE_LEVEL_LOW) < 0) | ||
124 | goto free; | ||
125 | return irq; | ||
126 | free: | ||
127 | gpio_free(pin); | ||
128 | fail: | ||
129 | return PHY_POLL; | ||
130 | } | ||
131 | |||
49 | static struct platform_device platform_devices[] = { | 132 | static struct platform_device platform_devices[] = { |
50 | { | 133 | { |
51 | .name = "serial8250", | 134 | .name = "serial8250", |
@@ -54,12 +137,23 @@ static struct platform_device platform_devices[] = { | |||
54 | .platform_data = serial_platform_data, | 137 | .platform_data = serial_platform_data, |
55 | }, | 138 | }, |
56 | }, | 139 | }, |
140 | { | ||
141 | .name = "s6gmac", | ||
142 | .id = 0, | ||
143 | .resource = s6_gmac_resource, | ||
144 | .num_resources = ARRAY_SIZE(s6_gmac_resource), | ||
145 | }, | ||
146 | { | ||
147 | I2C_BOARD_INFO("m41t62", S6I2C_ADDR_M41T62), | ||
148 | }, | ||
57 | }; | 149 | }; |
58 | 150 | ||
59 | static int __init device_init(void) | 151 | static int __init device_init(void) |
60 | { | 152 | { |
61 | int i; | 153 | int i; |
62 | 154 | ||
155 | s6_gmac_resource[5].start = prepare_phy_irq(GPIO_PHY_IRQ); | ||
156 | |||
63 | for (i = 0; i < ARRAY_SIZE(platform_devices); i++) | 157 | for (i = 0; i < ARRAY_SIZE(platform_devices); i++) |
64 | platform_device_register(&platform_devices[i]); | 158 | platform_device_register(&platform_devices[i]); |
65 | return 0; | 159 | return 0; |
diff --git a/arch/xtensa/platforms/s6105/setup.c b/arch/xtensa/platforms/s6105/setup.c index 855ddeadc43d..86ce730f7913 100644 --- a/arch/xtensa/platforms/s6105/setup.c +++ b/arch/xtensa/platforms/s6105/setup.c | |||
@@ -35,12 +35,21 @@ void __init platform_setup(char **cmdline) | |||
35 | { | 35 | { |
36 | unsigned long reg; | 36 | unsigned long reg; |
37 | 37 | ||
38 | reg = readl(S6_REG_GREG1 + S6_GREG1_PLLSEL); | ||
39 | reg &= ~(S6_GREG1_PLLSEL_GMAC_MASK << S6_GREG1_PLLSEL_GMAC | | ||
40 | S6_GREG1_PLLSEL_GMII_MASK << S6_GREG1_PLLSEL_GMII); | ||
41 | reg |= S6_GREG1_PLLSEL_GMAC_125MHZ << S6_GREG1_PLLSEL_GMAC | | ||
42 | S6_GREG1_PLLSEL_GMII_125MHZ << S6_GREG1_PLLSEL_GMII; | ||
43 | writel(reg, S6_REG_GREG1 + S6_GREG1_PLLSEL); | ||
44 | |||
38 | reg = readl(S6_REG_GREG1 + S6_GREG1_CLKGATE); | 45 | reg = readl(S6_REG_GREG1 + S6_GREG1_CLKGATE); |
39 | reg &= ~(1 << S6_GREG1_BLOCK_SB); | 46 | reg &= ~(1 << S6_GREG1_BLOCK_SB); |
47 | reg &= ~(1 << S6_GREG1_BLOCK_GMAC); | ||
40 | writel(reg, S6_REG_GREG1 + S6_GREG1_CLKGATE); | 48 | writel(reg, S6_REG_GREG1 + S6_GREG1_CLKGATE); |
41 | 49 | ||
42 | reg = readl(S6_REG_GREG1 + S6_GREG1_BLOCKENA); | 50 | reg = readl(S6_REG_GREG1 + S6_GREG1_BLOCKENA); |
43 | reg |= 1 << S6_GREG1_BLOCK_SB; | 51 | reg |= 1 << S6_GREG1_BLOCK_SB; |
52 | reg |= 1 << S6_GREG1_BLOCK_GMAC; | ||
44 | writel(reg, S6_REG_GREG1 + S6_GREG1_BLOCKENA); | 53 | writel(reg, S6_REG_GREG1 + S6_GREG1_BLOCKENA); |
45 | 54 | ||
46 | printk(KERN_NOTICE "S6105 on Stretch S6000 - " | 55 | printk(KERN_NOTICE "S6105 on Stretch S6000 - " |
@@ -49,7 +58,7 @@ void __init platform_setup(char **cmdline) | |||
49 | 58 | ||
50 | void __init platform_init(bp_tag_t *first) | 59 | void __init platform_init(bp_tag_t *first) |
51 | { | 60 | { |
52 | s6_gpio_init(); | 61 | s6_gpio_init(0); |
53 | gpio_request(GPIO_LED1_NGREEN, "led1_green"); | 62 | gpio_request(GPIO_LED1_NGREEN, "led1_green"); |
54 | gpio_request(GPIO_LED1_RED, "led1_red"); | 63 | gpio_request(GPIO_LED1_RED, "led1_red"); |
55 | gpio_direction_output(GPIO_LED1_NGREEN, 1); | 64 | gpio_direction_output(GPIO_LED1_NGREEN, 1); |
diff --git a/arch/xtensa/variants/s6000/Makefile b/arch/xtensa/variants/s6000/Makefile index d83f3805130c..3e7ef0a0c498 100644 --- a/arch/xtensa/variants/s6000/Makefile +++ b/arch/xtensa/variants/s6000/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | # s6000 Makefile | 1 | # s6000 Makefile |
2 | 2 | ||
3 | obj-y += irq.o gpio.o | 3 | obj-y += irq.o gpio.o dmac.o |
4 | obj-$(CONFIG_XTENSA_CALIBRATE_CCOUNT) += delay.o | 4 | obj-$(CONFIG_XTENSA_CALIBRATE_CCOUNT) += delay.o |
diff --git a/arch/xtensa/variants/s6000/dmac.c b/arch/xtensa/variants/s6000/dmac.c new file mode 100644 index 000000000000..dc7f7c573518 --- /dev/null +++ b/arch/xtensa/variants/s6000/dmac.c | |||
@@ -0,0 +1,173 @@ | |||
1 | /* | ||
2 | * Authors: Oskar Schirmer <os@emlix.com> | ||
3 | * Daniel Gloeckner <dg@emlix.com> | ||
4 | * (c) 2008 emlix GmbH http://www.emlix.com | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | */ | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/io.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <linux/errno.h> | ||
16 | #include <linux/spinlock.h> | ||
17 | #include <asm/cacheflush.h> | ||
18 | #include <variant/dmac.h> | ||
19 | |||
20 | /* DMA engine lookup */ | ||
21 | |||
22 | struct s6dmac_ctrl s6dmac_ctrl[S6_DMAC_NB]; | ||
23 | |||
24 | |||
25 | /* DMA control, per engine */ | ||
26 | |||
27 | void s6dmac_put_fifo_cache(u32 dmac, int chan, u32 src, u32 dst, u32 size) | ||
28 | { | ||
29 | if (xtensa_need_flush_dma_source(src)) { | ||
30 | u32 base = src; | ||
31 | u32 span = size; | ||
32 | u32 chunk = readl(DMA_CHNL(dmac, chan) + S6_DMA_CMONCHUNK); | ||
33 | if (chunk && (size > chunk)) { | ||
34 | s32 skip = | ||
35 | readl(DMA_CHNL(dmac, chan) + S6_DMA_SRCSKIP); | ||
36 | u32 gaps = (size+chunk-1)/chunk - 1; | ||
37 | if (skip >= 0) { | ||
38 | span += gaps * skip; | ||
39 | } else if (-skip > chunk) { | ||
40 | s32 decr = gaps * (chunk + skip); | ||
41 | base += decr; | ||
42 | span = chunk - decr; | ||
43 | } else { | ||
44 | span = max(span + gaps * skip, | ||
45 | (chunk + skip) * gaps - skip); | ||
46 | } | ||
47 | } | ||
48 | flush_dcache_unaligned(base, span); | ||
49 | } | ||
50 | if (xtensa_need_invalidate_dma_destination(dst)) { | ||
51 | u32 base = dst; | ||
52 | u32 span = size; | ||
53 | u32 chunk = readl(DMA_CHNL(dmac, chan) + S6_DMA_CMONCHUNK); | ||
54 | if (chunk && (size > chunk)) { | ||
55 | s32 skip = | ||
56 | readl(DMA_CHNL(dmac, chan) + S6_DMA_DSTSKIP); | ||
57 | u32 gaps = (size+chunk-1)/chunk - 1; | ||
58 | if (skip >= 0) { | ||
59 | span += gaps * skip; | ||
60 | } else if (-skip > chunk) { | ||
61 | s32 decr = gaps * (chunk + skip); | ||
62 | base += decr; | ||
63 | span = chunk - decr; | ||
64 | } else { | ||
65 | span = max(span + gaps * skip, | ||
66 | (chunk + skip) * gaps - skip); | ||
67 | } | ||
68 | } | ||
69 | invalidate_dcache_unaligned(base, span); | ||
70 | } | ||
71 | s6dmac_put_fifo(dmac, chan, src, dst, size); | ||
72 | } | ||
73 | |||
74 | void s6dmac_disable_error_irqs(u32 dmac, u32 mask) | ||
75 | { | ||
76 | unsigned long flags; | ||
77 | spinlock_t *spinl = &s6dmac_ctrl[_dmac_addr_index(dmac)].lock; | ||
78 | spin_lock_irqsave(spinl, flags); | ||
79 | _s6dmac_disable_error_irqs(dmac, mask); | ||
80 | spin_unlock_irqrestore(spinl, flags); | ||
81 | } | ||
82 | |||
83 | u32 s6dmac_int_sources(u32 dmac, u32 channel) | ||
84 | { | ||
85 | u32 mask, ret, tmp; | ||
86 | mask = 1 << channel; | ||
87 | |||
88 | tmp = readl(dmac + S6_DMA_TERMCNTIRQSTAT); | ||
89 | tmp &= mask; | ||
90 | writel(tmp, dmac + S6_DMA_TERMCNTIRQCLR); | ||
91 | ret = tmp >> channel; | ||
92 | |||
93 | tmp = readl(dmac + S6_DMA_PENDCNTIRQSTAT); | ||
94 | tmp &= mask; | ||
95 | writel(tmp, dmac + S6_DMA_PENDCNTIRQCLR); | ||
96 | ret |= (tmp >> channel) << 1; | ||
97 | |||
98 | tmp = readl(dmac + S6_DMA_LOWWMRKIRQSTAT); | ||
99 | tmp &= mask; | ||
100 | writel(tmp, dmac + S6_DMA_LOWWMRKIRQCLR); | ||
101 | ret |= (tmp >> channel) << 2; | ||
102 | |||
103 | tmp = readl(dmac + S6_DMA_INTRAW0); | ||
104 | tmp &= (mask << S6_DMA_INT0_OVER) | (mask << S6_DMA_INT0_UNDER); | ||
105 | writel(tmp, dmac + S6_DMA_INTCLEAR0); | ||
106 | |||
107 | if (tmp & (mask << S6_DMA_INT0_UNDER)) | ||
108 | ret |= 1 << 3; | ||
109 | if (tmp & (mask << S6_DMA_INT0_OVER)) | ||
110 | ret |= 1 << 4; | ||
111 | |||
112 | tmp = readl(dmac + S6_DMA_MASTERERRINFO); | ||
113 | mask <<= S6_DMA_INT1_CHANNEL; | ||
114 | if (((tmp >> S6_DMA_MASTERERR_CHAN(0)) & S6_DMA_MASTERERR_CHAN_MASK) | ||
115 | == channel) | ||
116 | mask |= 1 << S6_DMA_INT1_MASTER; | ||
117 | if (((tmp >> S6_DMA_MASTERERR_CHAN(1)) & S6_DMA_MASTERERR_CHAN_MASK) | ||
118 | == channel) | ||
119 | mask |= 1 << (S6_DMA_INT1_MASTER + 1); | ||
120 | if (((tmp >> S6_DMA_MASTERERR_CHAN(2)) & S6_DMA_MASTERERR_CHAN_MASK) | ||
121 | == channel) | ||
122 | mask |= 1 << (S6_DMA_INT1_MASTER + 2); | ||
123 | |||
124 | tmp = readl(dmac + S6_DMA_INTRAW1) & mask; | ||
125 | writel(tmp, dmac + S6_DMA_INTCLEAR1); | ||
126 | ret |= ((tmp >> channel) & 1) << 5; | ||
127 | ret |= ((tmp >> S6_DMA_INT1_MASTER) & S6_DMA_INT1_MASTER_MASK) << 6; | ||
128 | |||
129 | return ret; | ||
130 | } | ||
131 | |||
132 | void s6dmac_release_chan(u32 dmac, int chan) | ||
133 | { | ||
134 | if (chan >= 0) | ||
135 | s6dmac_disable_chan(dmac, chan); | ||
136 | } | ||
137 | |||
138 | |||
139 | /* global init */ | ||
140 | |||
141 | static inline void __init dmac_init(u32 dmac, u8 chan_nb) | ||
142 | { | ||
143 | s6dmac_ctrl[S6_DMAC_INDEX(dmac)].dmac = dmac; | ||
144 | spin_lock_init(&s6dmac_ctrl[S6_DMAC_INDEX(dmac)].lock); | ||
145 | s6dmac_ctrl[S6_DMAC_INDEX(dmac)].chan_nb = chan_nb; | ||
146 | writel(S6_DMA_INT1_MASTER_MASK << S6_DMA_INT1_MASTER, | ||
147 | dmac + S6_DMA_INTCLEAR1); | ||
148 | } | ||
149 | |||
150 | static inline void __init dmac_master(u32 dmac, | ||
151 | u32 m0start, u32 m0end, u32 m1start, u32 m1end) | ||
152 | { | ||
153 | writel(m0start, dmac + S6_DMA_MASTER0START); | ||
154 | writel(m0end - 1, dmac + S6_DMA_MASTER0END); | ||
155 | writel(m1start, dmac + S6_DMA_MASTER1START); | ||
156 | writel(m1end - 1, dmac + S6_DMA_MASTER1END); | ||
157 | } | ||
158 | |||
159 | static void __init s6_dmac_init(void) | ||
160 | { | ||
161 | dmac_init(S6_REG_LMSDMA, S6_LMSDMA_NB); | ||
162 | dmac_master(S6_REG_LMSDMA, | ||
163 | S6_MEM_DDR, S6_MEM_PCIE_APER, S6_MEM_EFI, S6_MEM_GMAC); | ||
164 | dmac_init(S6_REG_NIDMA, S6_NIDMA_NB); | ||
165 | dmac_init(S6_REG_DPDMA, S6_DPDMA_NB); | ||
166 | dmac_master(S6_REG_DPDMA, | ||
167 | S6_MEM_DDR, S6_MEM_PCIE_APER, S6_REG_DP, S6_REG_DPDMA); | ||
168 | dmac_init(S6_REG_HIFDMA, S6_HIFDMA_NB); | ||
169 | dmac_master(S6_REG_HIFDMA, | ||
170 | S6_MEM_GMAC, S6_MEM_PCIE_CFG, S6_MEM_PCIE_APER, S6_MEM_AUX); | ||
171 | } | ||
172 | |||
173 | arch_initcall(s6_dmac_init); | ||
diff --git a/arch/xtensa/variants/s6000/gpio.c b/arch/xtensa/variants/s6000/gpio.c index 79317fdcf14c..380a70fff756 100644 --- a/arch/xtensa/variants/s6000/gpio.c +++ b/arch/xtensa/variants/s6000/gpio.c | |||
@@ -4,15 +4,20 @@ | |||
4 | * Copyright (c) 2009 emlix GmbH | 4 | * Copyright (c) 2009 emlix GmbH |
5 | * Authors: Oskar Schirmer <os@emlix.com> | 5 | * Authors: Oskar Schirmer <os@emlix.com> |
6 | * Johannes Weiner <jw@emlix.com> | 6 | * Johannes Weiner <jw@emlix.com> |
7 | * Daniel Gloeckner <dg@emlix.com> | ||
7 | */ | 8 | */ |
9 | #include <linux/bitops.h> | ||
8 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
9 | #include <linux/module.h> | 11 | #include <linux/module.h> |
10 | #include <linux/init.h> | 12 | #include <linux/init.h> |
11 | #include <linux/io.h> | 13 | #include <linux/io.h> |
14 | #include <linux/irq.h> | ||
12 | #include <linux/gpio.h> | 15 | #include <linux/gpio.h> |
13 | 16 | ||
14 | #include <variant/hardware.h> | 17 | #include <variant/hardware.h> |
15 | 18 | ||
19 | #define IRQ_BASE XTENSA_NR_IRQS | ||
20 | |||
16 | #define S6_GPIO_DATA 0x000 | 21 | #define S6_GPIO_DATA 0x000 |
17 | #define S6_GPIO_IS 0x404 | 22 | #define S6_GPIO_IS 0x404 |
18 | #define S6_GPIO_IBE 0x408 | 23 | #define S6_GPIO_IBE 0x408 |
@@ -52,19 +57,175 @@ static void set(struct gpio_chip *chip, unsigned int off, int val) | |||
52 | writeb(val ? ~0 : 0, S6_REG_GPIO + S6_GPIO_DATA + S6_GPIO_OFFSET(off)); | 57 | writeb(val ? ~0 : 0, S6_REG_GPIO + S6_GPIO_DATA + S6_GPIO_OFFSET(off)); |
53 | } | 58 | } |
54 | 59 | ||
60 | static int to_irq(struct gpio_chip *chip, unsigned offset) | ||
61 | { | ||
62 | if (offset < 8) | ||
63 | return offset + IRQ_BASE; | ||
64 | return -EINVAL; | ||
65 | } | ||
66 | |||
55 | static struct gpio_chip gpiochip = { | 67 | static struct gpio_chip gpiochip = { |
56 | .owner = THIS_MODULE, | 68 | .owner = THIS_MODULE, |
57 | .direction_input = direction_input, | 69 | .direction_input = direction_input, |
58 | .get = get, | 70 | .get = get, |
59 | .direction_output = direction_output, | 71 | .direction_output = direction_output, |
60 | .set = set, | 72 | .set = set, |
73 | .to_irq = to_irq, | ||
61 | .base = 0, | 74 | .base = 0, |
62 | .ngpio = 24, | 75 | .ngpio = 24, |
63 | .can_sleep = 0, /* no blocking io needed */ | 76 | .can_sleep = 0, /* no blocking io needed */ |
64 | .exported = 0, /* no exporting to userspace */ | 77 | .exported = 0, /* no exporting to userspace */ |
65 | }; | 78 | }; |
66 | 79 | ||
67 | int s6_gpio_init(void) | 80 | int s6_gpio_init(u32 afsel) |
68 | { | 81 | { |
82 | writeb(afsel, S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_AFSEL); | ||
83 | writeb(afsel >> 8, S6_REG_GPIO + S6_GPIO_BANK(1) + S6_GPIO_AFSEL); | ||
84 | writeb(afsel >> 16, S6_REG_GPIO + S6_GPIO_BANK(2) + S6_GPIO_AFSEL); | ||
69 | return gpiochip_add(&gpiochip); | 85 | return gpiochip_add(&gpiochip); |
70 | } | 86 | } |
87 | |||
88 | static void ack(unsigned int irq) | ||
89 | { | ||
90 | writeb(1 << (irq - IRQ_BASE), S6_REG_GPIO + S6_GPIO_IC); | ||
91 | } | ||
92 | |||
93 | static void mask(unsigned int irq) | ||
94 | { | ||
95 | u8 r = readb(S6_REG_GPIO + S6_GPIO_IE); | ||
96 | r &= ~(1 << (irq - IRQ_BASE)); | ||
97 | writeb(r, S6_REG_GPIO + S6_GPIO_IE); | ||
98 | } | ||
99 | |||
100 | static void unmask(unsigned int irq) | ||
101 | { | ||
102 | u8 m = readb(S6_REG_GPIO + S6_GPIO_IE); | ||
103 | m |= 1 << (irq - IRQ_BASE); | ||
104 | writeb(m, S6_REG_GPIO + S6_GPIO_IE); | ||
105 | } | ||
106 | |||
107 | static int set_type(unsigned int irq, unsigned int type) | ||
108 | { | ||
109 | const u8 m = 1 << (irq - IRQ_BASE); | ||
110 | irq_flow_handler_t handler; | ||
111 | struct irq_desc *desc; | ||
112 | u8 reg; | ||
113 | |||
114 | if (type == IRQ_TYPE_PROBE) { | ||
115 | if ((readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_AFSEL) & m) | ||
116 | || (readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IE) & m) | ||
117 | || readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_DIR | ||
118 | + S6_GPIO_MASK(irq - IRQ_BASE))) | ||
119 | return 0; | ||
120 | type = IRQ_TYPE_EDGE_BOTH; | ||
121 | } | ||
122 | |||
123 | reg = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IS); | ||
124 | if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) { | ||
125 | reg |= m; | ||
126 | handler = handle_level_irq; | ||
127 | } else { | ||
128 | reg &= ~m; | ||
129 | handler = handle_edge_irq; | ||
130 | } | ||
131 | writeb(reg, S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IS); | ||
132 | desc = irq_to_desc(irq); | ||
133 | desc->handle_irq = handler; | ||
134 | |||
135 | reg = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IEV); | ||
136 | if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING)) | ||
137 | reg |= m; | ||
138 | else | ||
139 | reg &= ~m; | ||
140 | writeb(reg, S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IEV); | ||
141 | |||
142 | reg = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IBE); | ||
143 | if ((type & IRQ_TYPE_EDGE_BOTH) == IRQ_TYPE_EDGE_BOTH) | ||
144 | reg |= m; | ||
145 | else | ||
146 | reg &= ~m; | ||
147 | writeb(reg, S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IBE); | ||
148 | return 0; | ||
149 | } | ||
150 | |||
151 | static struct irq_chip gpioirqs = { | ||
152 | .name = "GPIO", | ||
153 | .ack = ack, | ||
154 | .mask = mask, | ||
155 | .unmask = unmask, | ||
156 | .set_type = set_type, | ||
157 | }; | ||
158 | |||
159 | static u8 demux_masks[4]; | ||
160 | |||
161 | static void demux_irqs(unsigned int irq, struct irq_desc *desc) | ||
162 | { | ||
163 | u8 *mask = get_irq_desc_data(desc); | ||
164 | u8 pending; | ||
165 | int cirq; | ||
166 | |||
167 | desc->chip->mask(irq); | ||
168 | desc->chip->ack(irq); | ||
169 | pending = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_MIS) & *mask; | ||
170 | cirq = IRQ_BASE - 1; | ||
171 | while (pending) { | ||
172 | int n = ffs(pending); | ||
173 | cirq += n; | ||
174 | pending >>= n; | ||
175 | generic_handle_irq(cirq); | ||
176 | } | ||
177 | desc->chip->unmask(irq); | ||
178 | } | ||
179 | |||
180 | extern const signed char *platform_irq_mappings[XTENSA_NR_IRQS]; | ||
181 | |||
182 | void __init variant_init_irq(void) | ||
183 | { | ||
184 | int irq, n; | ||
185 | writeb(0, S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IE); | ||
186 | for (irq = n = 0; irq < XTENSA_NR_IRQS; irq++) { | ||
187 | const signed char *mapping = platform_irq_mappings[irq]; | ||
188 | int alone = 1; | ||
189 | u8 mask; | ||
190 | if (!mapping) | ||
191 | continue; | ||
192 | for(mask = 0; *mapping != -1; mapping++) | ||
193 | switch (*mapping) { | ||
194 | case S6_INTC_GPIO(0): | ||
195 | mask |= 1 << 0; | ||
196 | break; | ||
197 | case S6_INTC_GPIO(1): | ||
198 | mask |= 1 << 1; | ||
199 | break; | ||
200 | case S6_INTC_GPIO(2): | ||
201 | mask |= 1 << 2; | ||
202 | break; | ||
203 | case S6_INTC_GPIO(3): | ||
204 | mask |= 0x1f << 3; | ||
205 | break; | ||
206 | default: | ||
207 | alone = 0; | ||
208 | } | ||
209 | if (mask) { | ||
210 | int cirq, i; | ||
211 | if (!alone) { | ||
212 | printk(KERN_ERR "chained irq chips can't share" | ||
213 | " parent irq %i\n", irq); | ||
214 | continue; | ||
215 | } | ||
216 | demux_masks[n] = mask; | ||
217 | cirq = IRQ_BASE - 1; | ||
218 | do { | ||
219 | i = ffs(mask); | ||
220 | cirq += i; | ||
221 | mask >>= i; | ||
222 | set_irq_chip(cirq, &gpioirqs); | ||
223 | set_irq_type(irq, IRQ_TYPE_LEVEL_LOW); | ||
224 | } while (mask); | ||
225 | set_irq_data(irq, demux_masks + n); | ||
226 | set_irq_chained_handler(irq, demux_irqs); | ||
227 | if (++n == ARRAY_SIZE(demux_masks)) | ||
228 | break; | ||
229 | } | ||
230 | } | ||
231 | } | ||
diff --git a/arch/xtensa/variants/s6000/include/variant/dmac.h b/arch/xtensa/variants/s6000/include/variant/dmac.h new file mode 100644 index 000000000000..89ab9484fb71 --- /dev/null +++ b/arch/xtensa/variants/s6000/include/variant/dmac.h | |||
@@ -0,0 +1,387 @@ | |||
1 | /* | ||
2 | * include/asm-xtensa/variant-s6000/dmac.h | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | * | ||
8 | * Copyright (C) 2006 Tensilica Inc. | ||
9 | * Copyright (C) 2008 Emlix GmbH <info@emlix.com> | ||
10 | * Authors: Fabian Godehardt <fg@emlix.com> | ||
11 | * Oskar Schirmer <os@emlix.com> | ||
12 | * Daniel Gloeckner <dg@emlix.com> | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_XTENSA_S6000_DMAC_H | ||
16 | #define __ASM_XTENSA_S6000_DMAC_H | ||
17 | #include <linux/io.h> | ||
18 | #include <variant/hardware.h> | ||
19 | |||
20 | /* DMA global */ | ||
21 | |||
22 | #define S6_DMA_INTSTAT0 0x000 | ||
23 | #define S6_DMA_INTSTAT1 0x004 | ||
24 | #define S6_DMA_INTENABLE0 0x008 | ||
25 | #define S6_DMA_INTENABLE1 0x00C | ||
26 | #define S6_DMA_INTRAW0 0x010 | ||
27 | #define S6_DMA_INTRAW1 0x014 | ||
28 | #define S6_DMA_INTCLEAR0 0x018 | ||
29 | #define S6_DMA_INTCLEAR1 0x01C | ||
30 | #define S6_DMA_INTSET0 0x020 | ||
31 | #define S6_DMA_INTSET1 0x024 | ||
32 | #define S6_DMA_INT0_UNDER 0 | ||
33 | #define S6_DMA_INT0_OVER 16 | ||
34 | #define S6_DMA_INT1_CHANNEL 0 | ||
35 | #define S6_DMA_INT1_MASTER 16 | ||
36 | #define S6_DMA_INT1_MASTER_MASK 7 | ||
37 | #define S6_DMA_TERMCNTIRQSTAT 0x028 | ||
38 | #define S6_DMA_TERMCNTIRQCLR 0x02C | ||
39 | #define S6_DMA_TERMCNTIRQSET 0x030 | ||
40 | #define S6_DMA_PENDCNTIRQSTAT 0x034 | ||
41 | #define S6_DMA_PENDCNTIRQCLR 0x038 | ||
42 | #define S6_DMA_PENDCNTIRQSET 0x03C | ||
43 | #define S6_DMA_LOWWMRKIRQSTAT 0x040 | ||
44 | #define S6_DMA_LOWWMRKIRQCLR 0x044 | ||
45 | #define S6_DMA_LOWWMRKIRQSET 0x048 | ||
46 | #define S6_DMA_MASTERERRINFO 0x04C | ||
47 | #define S6_DMA_MASTERERR_CHAN(n) (4*(n)) | ||
48 | #define S6_DMA_MASTERERR_CHAN_MASK 0xF | ||
49 | #define S6_DMA_DESCRFIFO0 0x050 | ||
50 | #define S6_DMA_DESCRFIFO1 0x054 | ||
51 | #define S6_DMA_DESCRFIFO2 0x058 | ||
52 | #define S6_DMA_DESCRFIFO2_AUTODISABLE 24 | ||
53 | #define S6_DMA_DESCRFIFO3 0x05C | ||
54 | #define S6_DMA_MASTER0START 0x060 | ||
55 | #define S6_DMA_MASTER0END 0x064 | ||
56 | #define S6_DMA_MASTER1START 0x068 | ||
57 | #define S6_DMA_MASTER1END 0x06C | ||
58 | #define S6_DMA_NEXTFREE 0x070 | ||
59 | #define S6_DMA_NEXTFREE_CHAN 0 | ||
60 | #define S6_DMA_NEXTFREE_CHAN_MASK 0x1F | ||
61 | #define S6_DMA_NEXTFREE_ENA 16 | ||
62 | #define S6_DMA_NEXTFREE_ENA_MASK ((1 << 16) - 1) | ||
63 | #define S6_DMA_DPORTCTRLGRP(p) ((p) * 4 + 0x074) | ||
64 | #define S6_DMA_DPORTCTRLGRP_FRAMEREP 0 | ||
65 | #define S6_DMA_DPORTCTRLGRP_NRCHANS 1 | ||
66 | #define S6_DMA_DPORTCTRLGRP_NRCHANS_1 0 | ||
67 | #define S6_DMA_DPORTCTRLGRP_NRCHANS_3 1 | ||
68 | #define S6_DMA_DPORTCTRLGRP_NRCHANS_4 2 | ||
69 | #define S6_DMA_DPORTCTRLGRP_NRCHANS_2 3 | ||
70 | #define S6_DMA_DPORTCTRLGRP_ENA 31 | ||
71 | |||
72 | |||
73 | /* DMA per channel */ | ||
74 | |||
75 | #define DMA_CHNL(dmac, n) ((dmac) + 0x1000 + (n) * 0x100) | ||
76 | #define DMA_INDEX_CHNL(addr) (((addr) >> 8) & 0xF) | ||
77 | #define DMA_MASK_DMAC(addr) ((addr) & 0xFFFF0000) | ||
78 | #define S6_DMA_CHNCTRL 0x000 | ||
79 | #define S6_DMA_CHNCTRL_ENABLE 0 | ||
80 | #define S6_DMA_CHNCTRL_PAUSE 1 | ||
81 | #define S6_DMA_CHNCTRL_PRIO 2 | ||
82 | #define S6_DMA_CHNCTRL_PRIO_MASK 3 | ||
83 | #define S6_DMA_CHNCTRL_PERIPHXFER 4 | ||
84 | #define S6_DMA_CHNCTRL_PERIPHENA 5 | ||
85 | #define S6_DMA_CHNCTRL_SRCINC 6 | ||
86 | #define S6_DMA_CHNCTRL_DSTINC 7 | ||
87 | #define S6_DMA_CHNCTRL_BURSTLOG 8 | ||
88 | #define S6_DMA_CHNCTRL_BURSTLOG_MASK 7 | ||
89 | #define S6_DMA_CHNCTRL_DESCFIFODEPTH 12 | ||
90 | #define S6_DMA_CHNCTRL_DESCFIFODEPTH_MASK 0x1F | ||
91 | #define S6_DMA_CHNCTRL_DESCFIFOFULL 17 | ||
92 | #define S6_DMA_CHNCTRL_BWCONSEL 18 | ||
93 | #define S6_DMA_CHNCTRL_BWCONENA 19 | ||
94 | #define S6_DMA_CHNCTRL_PENDGCNTSTAT 20 | ||
95 | #define S6_DMA_CHNCTRL_PENDGCNTSTAT_MASK 0x3F | ||
96 | #define S6_DMA_CHNCTRL_LOWWMARK 26 | ||
97 | #define S6_DMA_CHNCTRL_LOWWMARK_MASK 0xF | ||
98 | #define S6_DMA_CHNCTRL_TSTAMP 30 | ||
99 | #define S6_DMA_TERMCNTNB 0x004 | ||
100 | #define S6_DMA_TERMCNTNB_MASK 0xFFFF | ||
101 | #define S6_DMA_TERMCNTTMO 0x008 | ||
102 | #define S6_DMA_TERMCNTSTAT 0x00C | ||
103 | #define S6_DMA_TERMCNTSTAT_MASK 0xFF | ||
104 | #define S6_DMA_CMONCHUNK 0x010 | ||
105 | #define S6_DMA_SRCSKIP 0x014 | ||
106 | #define S6_DMA_DSTSKIP 0x018 | ||
107 | #define S6_DMA_CUR_SRC 0x024 | ||
108 | #define S6_DMA_CUR_DST 0x028 | ||
109 | #define S6_DMA_TIMESTAMP 0x030 | ||
110 | |||
111 | /* DMA channel lists */ | ||
112 | |||
113 | #define S6_DPDMA_CHAN(stream, channel) (4 * (stream) + (channel)) | ||
114 | #define S6_DPDMA_NB 16 | ||
115 | |||
116 | #define S6_HIFDMA_GMACTX 0 | ||
117 | #define S6_HIFDMA_GMACRX 1 | ||
118 | #define S6_HIFDMA_I2S0 2 | ||
119 | #define S6_HIFDMA_I2S1 3 | ||
120 | #define S6_HIFDMA_EGIB 4 | ||
121 | #define S6_HIFDMA_PCITX 5 | ||
122 | #define S6_HIFDMA_PCIRX 6 | ||
123 | #define S6_HIFDMA_NB 7 | ||
124 | |||
125 | #define S6_NIDMA_NB 4 | ||
126 | |||
127 | #define S6_LMSDMA_NB 12 | ||
128 | |||
129 | /* controller access */ | ||
130 | |||
131 | #define S6_DMAC_NB 4 | ||
132 | #define S6_DMAC_INDEX(dmac) (((unsigned)(dmac) >> 18) % S6_DMAC_NB) | ||
133 | |||
134 | struct s6dmac_ctrl { | ||
135 | u32 dmac; | ||
136 | spinlock_t lock; | ||
137 | u8 chan_nb; | ||
138 | }; | ||
139 | |||
140 | extern struct s6dmac_ctrl s6dmac_ctrl[S6_DMAC_NB]; | ||
141 | |||
142 | |||
143 | /* DMA control, per channel */ | ||
144 | |||
145 | static inline int s6dmac_fifo_full(u32 dmac, int chan) | ||
146 | { | ||
147 | return (readl(DMA_CHNL(dmac, chan) + S6_DMA_CHNCTRL) | ||
148 | & (1 << S6_DMA_CHNCTRL_DESCFIFOFULL)) && 1; | ||
149 | } | ||
150 | |||
151 | static inline int s6dmac_termcnt_irq(u32 dmac, int chan) | ||
152 | { | ||
153 | u32 m = 1 << chan; | ||
154 | int r = (readl(dmac + S6_DMA_TERMCNTIRQSTAT) & m) && 1; | ||
155 | if (r) | ||
156 | writel(m, dmac + S6_DMA_TERMCNTIRQCLR); | ||
157 | return r; | ||
158 | } | ||
159 | |||
160 | static inline int s6dmac_pendcnt_irq(u32 dmac, int chan) | ||
161 | { | ||
162 | u32 m = 1 << chan; | ||
163 | int r = (readl(dmac + S6_DMA_PENDCNTIRQSTAT) & m) && 1; | ||
164 | if (r) | ||
165 | writel(m, dmac + S6_DMA_PENDCNTIRQCLR); | ||
166 | return r; | ||
167 | } | ||
168 | |||
169 | static inline int s6dmac_lowwmark_irq(u32 dmac, int chan) | ||
170 | { | ||
171 | int r = (readl(dmac + S6_DMA_LOWWMRKIRQSTAT) & (1 << chan)) ? 1 : 0; | ||
172 | if (r) | ||
173 | writel(1 << chan, dmac + S6_DMA_LOWWMRKIRQCLR); | ||
174 | return r; | ||
175 | } | ||
176 | |||
177 | static inline u32 s6dmac_pending_count(u32 dmac, int chan) | ||
178 | { | ||
179 | return (readl(DMA_CHNL(dmac, chan) + S6_DMA_CHNCTRL) | ||
180 | >> S6_DMA_CHNCTRL_PENDGCNTSTAT) | ||
181 | & S6_DMA_CHNCTRL_PENDGCNTSTAT_MASK; | ||
182 | } | ||
183 | |||
184 | static inline void s6dmac_set_terminal_count(u32 dmac, int chan, u32 n) | ||
185 | { | ||
186 | n &= S6_DMA_TERMCNTNB_MASK; | ||
187 | n |= readl(DMA_CHNL(dmac, chan) + S6_DMA_TERMCNTNB) | ||
188 | & ~S6_DMA_TERMCNTNB_MASK; | ||
189 | writel(n, DMA_CHNL(dmac, chan) + S6_DMA_TERMCNTNB); | ||
190 | } | ||
191 | |||
192 | static inline u32 s6dmac_get_terminal_count(u32 dmac, int chan) | ||
193 | { | ||
194 | return (readl(DMA_CHNL(dmac, chan) + S6_DMA_TERMCNTNB)) | ||
195 | & S6_DMA_TERMCNTNB_MASK; | ||
196 | } | ||
197 | |||
198 | static inline u32 s6dmac_timestamp(u32 dmac, int chan) | ||
199 | { | ||
200 | return readl(DMA_CHNL(dmac, chan) + S6_DMA_TIMESTAMP); | ||
201 | } | ||
202 | |||
203 | static inline u32 s6dmac_cur_src(u32 dmac, int chan) | ||
204 | { | ||
205 | return readl(DMA_CHNL(dmac, chan) + S6_DMA_CUR_SRC); | ||
206 | } | ||
207 | |||
208 | static inline u32 s6dmac_cur_dst(u32 dmac, int chan) | ||
209 | { | ||
210 | return readl(DMA_CHNL(dmac, chan) + S6_DMA_CUR_DST); | ||
211 | } | ||
212 | |||
213 | static inline void s6dmac_disable_chan(u32 dmac, int chan) | ||
214 | { | ||
215 | u32 ctrl; | ||
216 | writel(readl(DMA_CHNL(dmac, chan) + S6_DMA_CHNCTRL) | ||
217 | & ~(1 << S6_DMA_CHNCTRL_ENABLE), | ||
218 | DMA_CHNL(dmac, chan) + S6_DMA_CHNCTRL); | ||
219 | do | ||
220 | ctrl = readl(DMA_CHNL(dmac, chan) + S6_DMA_CHNCTRL); | ||
221 | while (ctrl & (1 << S6_DMA_CHNCTRL_ENABLE)); | ||
222 | } | ||
223 | |||
224 | static inline void s6dmac_set_stride_skip(u32 dmac, int chan, | ||
225 | int comchunk, /* 0: disable scatter/gather */ | ||
226 | int srcskip, int dstskip) | ||
227 | { | ||
228 | writel(comchunk, DMA_CHNL(dmac, chan) + S6_DMA_CMONCHUNK); | ||
229 | writel(srcskip, DMA_CHNL(dmac, chan) + S6_DMA_SRCSKIP); | ||
230 | writel(dstskip, DMA_CHNL(dmac, chan) + S6_DMA_DSTSKIP); | ||
231 | } | ||
232 | |||
233 | static inline void s6dmac_enable_chan(u32 dmac, int chan, | ||
234 | int prio, /* 0 (highest) .. 3 (lowest) */ | ||
235 | int periphxfer, /* <0: disable p.req.line, 0..1: mode */ | ||
236 | int srcinc, int dstinc, /* 0: dont increment src/dst address */ | ||
237 | int comchunk, /* 0: disable scatter/gather */ | ||
238 | int srcskip, int dstskip, | ||
239 | int burstsize, /* 4 for I2S, 7 for everything else */ | ||
240 | int bandwidthconserve, /* <0: disable, 0..1: select */ | ||
241 | int lowwmark, /* 0..15 */ | ||
242 | int timestamp, /* 0: disable timestamp */ | ||
243 | int enable) /* 0: disable for now */ | ||
244 | { | ||
245 | writel(1, DMA_CHNL(dmac, chan) + S6_DMA_TERMCNTNB); | ||
246 | writel(0, DMA_CHNL(dmac, chan) + S6_DMA_TERMCNTTMO); | ||
247 | writel(lowwmark << S6_DMA_CHNCTRL_LOWWMARK, | ||
248 | DMA_CHNL(dmac, chan) + S6_DMA_CHNCTRL); | ||
249 | s6dmac_set_stride_skip(dmac, chan, comchunk, srcskip, dstskip); | ||
250 | writel(((enable ? 1 : 0) << S6_DMA_CHNCTRL_ENABLE) | | ||
251 | (prio << S6_DMA_CHNCTRL_PRIO) | | ||
252 | (((periphxfer > 0) ? 1 : 0) << S6_DMA_CHNCTRL_PERIPHXFER) | | ||
253 | (((periphxfer < 0) ? 0 : 1) << S6_DMA_CHNCTRL_PERIPHENA) | | ||
254 | ((srcinc ? 1 : 0) << S6_DMA_CHNCTRL_SRCINC) | | ||
255 | ((dstinc ? 1 : 0) << S6_DMA_CHNCTRL_DSTINC) | | ||
256 | (burstsize << S6_DMA_CHNCTRL_BURSTLOG) | | ||
257 | (((bandwidthconserve > 0) ? 1 : 0) << S6_DMA_CHNCTRL_BWCONSEL) | | ||
258 | (((bandwidthconserve < 0) ? 0 : 1) << S6_DMA_CHNCTRL_BWCONENA) | | ||
259 | (lowwmark << S6_DMA_CHNCTRL_LOWWMARK) | | ||
260 | ((timestamp ? 1 : 0) << S6_DMA_CHNCTRL_TSTAMP), | ||
261 | DMA_CHNL(dmac, chan) + S6_DMA_CHNCTRL); | ||
262 | } | ||
263 | |||
264 | |||
265 | /* DMA control, per engine */ | ||
266 | |||
267 | static inline unsigned _dmac_addr_index(u32 dmac) | ||
268 | { | ||
269 | unsigned i = S6_DMAC_INDEX(dmac); | ||
270 | if (s6dmac_ctrl[i].dmac != dmac) | ||
271 | BUG(); | ||
272 | return i; | ||
273 | } | ||
274 | |||
275 | static inline void _s6dmac_disable_error_irqs(u32 dmac, u32 mask) | ||
276 | { | ||
277 | writel(mask, dmac + S6_DMA_TERMCNTIRQCLR); | ||
278 | writel(mask, dmac + S6_DMA_PENDCNTIRQCLR); | ||
279 | writel(mask, dmac + S6_DMA_LOWWMRKIRQCLR); | ||
280 | writel(readl(dmac + S6_DMA_INTENABLE0) | ||
281 | & ~((mask << S6_DMA_INT0_UNDER) | (mask << S6_DMA_INT0_OVER)), | ||
282 | dmac + S6_DMA_INTENABLE0); | ||
283 | writel(readl(dmac + S6_DMA_INTENABLE1) & ~(mask << S6_DMA_INT1_CHANNEL), | ||
284 | dmac + S6_DMA_INTENABLE1); | ||
285 | writel((mask << S6_DMA_INT0_UNDER) | (mask << S6_DMA_INT0_OVER), | ||
286 | dmac + S6_DMA_INTCLEAR0); | ||
287 | writel(mask << S6_DMA_INT1_CHANNEL, dmac + S6_DMA_INTCLEAR1); | ||
288 | } | ||
289 | |||
290 | /* | ||
291 | * request channel from specified engine | ||
292 | * with chan<0, accept any channel | ||
293 | * further parameters see s6dmac_enable_chan | ||
294 | * returns < 0 upon error, channel nb otherwise | ||
295 | */ | ||
296 | static inline int s6dmac_request_chan(u32 dmac, int chan, | ||
297 | int prio, | ||
298 | int periphxfer, | ||
299 | int srcinc, int dstinc, | ||
300 | int comchunk, | ||
301 | int srcskip, int dstskip, | ||
302 | int burstsize, | ||
303 | int bandwidthconserve, | ||
304 | int lowwmark, | ||
305 | int timestamp, | ||
306 | int enable) | ||
307 | { | ||
308 | int r = chan; | ||
309 | unsigned long flags; | ||
310 | spinlock_t *spinl = &s6dmac_ctrl[_dmac_addr_index(dmac)].lock; | ||
311 | spin_lock_irqsave(spinl, flags); | ||
312 | if (r < 0) { | ||
313 | r = (readl(dmac + S6_DMA_NEXTFREE) >> S6_DMA_NEXTFREE_CHAN) | ||
314 | & S6_DMA_NEXTFREE_CHAN_MASK; | ||
315 | } | ||
316 | if (r >= s6dmac_ctrl[_dmac_addr_index(dmac)].chan_nb) { | ||
317 | if (chan < 0) | ||
318 | r = -EBUSY; | ||
319 | else | ||
320 | r = -ENXIO; | ||
321 | } else if (((readl(dmac + S6_DMA_NEXTFREE) >> S6_DMA_NEXTFREE_ENA) | ||
322 | >> r) & 1) { | ||
323 | r = -EBUSY; | ||
324 | } else { | ||
325 | s6dmac_enable_chan(dmac, r, prio, periphxfer, | ||
326 | srcinc, dstinc, comchunk, srcskip, dstskip, burstsize, | ||
327 | bandwidthconserve, lowwmark, timestamp, enable); | ||
328 | } | ||
329 | spin_unlock_irqrestore(spinl, flags); | ||
330 | return r; | ||
331 | } | ||
332 | |||
333 | static inline void s6dmac_put_fifo(u32 dmac, int chan, | ||
334 | u32 src, u32 dst, u32 size) | ||
335 | { | ||
336 | unsigned long flags; | ||
337 | spinlock_t *spinl = &s6dmac_ctrl[_dmac_addr_index(dmac)].lock; | ||
338 | spin_lock_irqsave(spinl, flags); | ||
339 | writel(src, dmac + S6_DMA_DESCRFIFO0); | ||
340 | writel(dst, dmac + S6_DMA_DESCRFIFO1); | ||
341 | writel(size, dmac + S6_DMA_DESCRFIFO2); | ||
342 | writel(chan, dmac + S6_DMA_DESCRFIFO3); | ||
343 | spin_unlock_irqrestore(spinl, flags); | ||
344 | } | ||
345 | |||
346 | static inline u32 s6dmac_channel_enabled(u32 dmac, int chan) | ||
347 | { | ||
348 | return readl(DMA_CHNL(dmac, chan) + S6_DMA_CHNCTRL) & | ||
349 | (1 << S6_DMA_CHNCTRL_ENABLE); | ||
350 | } | ||
351 | |||
352 | /* | ||
353 | * group 1-4 data port channels | ||
354 | * with port=0..3, nrch=1-4 channels, | ||
355 | * frrep=0/1 (dis- or enable frame repeat) | ||
356 | */ | ||
357 | static inline void s6dmac_dp_setup_group(u32 dmac, int port, | ||
358 | int nrch, int frrep) | ||
359 | { | ||
360 | const static u8 mask[4] = {0, 3, 1, 2}; | ||
361 | BUG_ON(dmac != S6_REG_DPDMA); | ||
362 | if ((port < 0) || (port > 3) || (nrch < 1) || (nrch > 4)) | ||
363 | return; | ||
364 | writel((mask[nrch - 1] << S6_DMA_DPORTCTRLGRP_NRCHANS) | ||
365 | | ((frrep ? 1 : 0) << S6_DMA_DPORTCTRLGRP_FRAMEREP), | ||
366 | dmac + S6_DMA_DPORTCTRLGRP(port)); | ||
367 | } | ||
368 | |||
369 | static inline void s6dmac_dp_switch_group(u32 dmac, int port, int enable) | ||
370 | { | ||
371 | u32 tmp; | ||
372 | BUG_ON(dmac != S6_REG_DPDMA); | ||
373 | tmp = readl(dmac + S6_DMA_DPORTCTRLGRP(port)); | ||
374 | if (enable) | ||
375 | tmp |= (1 << S6_DMA_DPORTCTRLGRP_ENA); | ||
376 | else | ||
377 | tmp &= ~(1 << S6_DMA_DPORTCTRLGRP_ENA); | ||
378 | writel(tmp, dmac + S6_DMA_DPORTCTRLGRP(port)); | ||
379 | } | ||
380 | |||
381 | extern void s6dmac_put_fifo_cache(u32 dmac, int chan, | ||
382 | u32 src, u32 dst, u32 size); | ||
383 | extern void s6dmac_disable_error_irqs(u32 dmac, u32 mask); | ||
384 | extern u32 s6dmac_int_sources(u32 dmac, u32 channel); | ||
385 | extern void s6dmac_release_chan(u32 dmac, int chan); | ||
386 | |||
387 | #endif /* __ASM_XTENSA_S6000_DMAC_H */ | ||
diff --git a/arch/xtensa/variants/s6000/include/variant/gpio.h b/arch/xtensa/variants/s6000/include/variant/gpio.h index 8327f62167eb..8484ab0df461 100644 --- a/arch/xtensa/variants/s6000/include/variant/gpio.h +++ b/arch/xtensa/variants/s6000/include/variant/gpio.h | |||
@@ -1,6 +1,6 @@ | |||
1 | #ifndef _XTENSA_VARIANT_S6000_GPIO_H | 1 | #ifndef _XTENSA_VARIANT_S6000_GPIO_H |
2 | #define _XTENSA_VARIANT_S6000_GPIO_H | 2 | #define _XTENSA_VARIANT_S6000_GPIO_H |
3 | 3 | ||
4 | extern int s6_gpio_init(void); | 4 | extern int s6_gpio_init(u32 afsel); |
5 | 5 | ||
6 | #endif /* _XTENSA_VARIANT_S6000_GPIO_H */ | 6 | #endif /* _XTENSA_VARIANT_S6000_GPIO_H */ |
diff --git a/arch/xtensa/variants/s6000/include/variant/irq.h b/arch/xtensa/variants/s6000/include/variant/irq.h index fa031cb0acc4..97d6fc48deff 100644 --- a/arch/xtensa/variants/s6000/include/variant/irq.h +++ b/arch/xtensa/variants/s6000/include/variant/irq.h | |||
@@ -1,9 +1,9 @@ | |||
1 | #ifndef __XTENSA_S6000_IRQ_H | 1 | #ifndef _XTENSA_S6000_IRQ_H |
2 | #define __XTENSA_S6000_IRQ_H | 2 | #define _XTENSA_S6000_IRQ_H |
3 | 3 | ||
4 | #define NO_IRQ (-1) | 4 | #define NO_IRQ (-1) |
5 | #define VARIANT_NR_IRQS 8 /* GPIO interrupts */ | ||
5 | 6 | ||
6 | extern void variant_irq_enable(unsigned int irq); | 7 | extern void variant_irq_enable(unsigned int irq); |
7 | extern void variant_irq_disable(unsigned int irq); | ||
8 | 8 | ||
9 | #endif /* __XTENSA_S6000_IRQ_H */ | 9 | #endif /* __XTENSA_S6000_IRQ_H */ |