diff options
Diffstat (limited to 'arch')
504 files changed, 5191 insertions, 2201 deletions
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index fc95ee1bcf6f..47f63d480141 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig | |||
@@ -8,6 +8,9 @@ config ALPHA | |||
8 | select HAVE_IRQ_WORK | 8 | select HAVE_IRQ_WORK |
9 | select HAVE_PERF_EVENTS | 9 | select HAVE_PERF_EVENTS |
10 | select HAVE_DMA_ATTRS | 10 | select HAVE_DMA_ATTRS |
11 | select HAVE_GENERIC_HARDIRQS | ||
12 | select GENERIC_IRQ_PROBE | ||
13 | select AUTO_IRQ_AFFINITY if SMP | ||
11 | help | 14 | help |
12 | The Alpha is a 64-bit general-purpose processor designed and | 15 | The Alpha is a 64-bit general-purpose processor designed and |
13 | marketed by the Digital Equipment Corporation of blessed memory, | 16 | marketed by the Digital Equipment Corporation of blessed memory, |
@@ -68,22 +71,6 @@ config GENERIC_IOMAP | |||
68 | bool | 71 | bool |
69 | default n | 72 | default n |
70 | 73 | ||
71 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
72 | def_bool y | ||
73 | |||
74 | config GENERIC_HARDIRQS | ||
75 | bool | ||
76 | default y | ||
77 | |||
78 | config GENERIC_IRQ_PROBE | ||
79 | bool | ||
80 | default y | ||
81 | |||
82 | config AUTO_IRQ_AFFINITY | ||
83 | bool | ||
84 | depends on SMP | ||
85 | default y | ||
86 | |||
87 | source "init/Kconfig" | 74 | source "init/Kconfig" |
88 | source "kernel/Kconfig.freezer" | 75 | source "kernel/Kconfig.freezer" |
89 | 76 | ||
diff --git a/arch/arm/configs/ag5evm_defconfig b/arch/arm/configs/ag5evm_defconfig index 2b9cf56db363..212ead354a6b 100644 --- a/arch/arm/configs/ag5evm_defconfig +++ b/arch/arm/configs/ag5evm_defconfig | |||
@@ -10,7 +10,7 @@ CONFIG_NAMESPACES=y | |||
10 | # CONFIG_PID_NS is not set | 10 | # CONFIG_PID_NS is not set |
11 | CONFIG_BLK_DEV_INITRD=y | 11 | CONFIG_BLK_DEV_INITRD=y |
12 | CONFIG_INITRAMFS_SOURCE="" | 12 | CONFIG_INITRAMFS_SOURCE="" |
13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EXPERT=y |
14 | CONFIG_SLAB=y | 14 | CONFIG_SLAB=y |
15 | # CONFIG_BLK_DEV_BSG is not set | 15 | # CONFIG_BLK_DEV_BSG is not set |
16 | # CONFIG_IOSCHED_DEADLINE is not set | 16 | # CONFIG_IOSCHED_DEADLINE is not set |
diff --git a/arch/arm/configs/am200epdkit_defconfig b/arch/arm/configs/am200epdkit_defconfig index 5536c488dd01..f0dea52e49c4 100644 --- a/arch/arm/configs/am200epdkit_defconfig +++ b/arch/arm/configs/am200epdkit_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_LOCALVERSION="gum" | |||
3 | # CONFIG_SWAP is not set | 3 | # CONFIG_SWAP is not set |
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_SYSFS_DEPRECATED_V2=y | 5 | CONFIG_SYSFS_DEPRECATED_V2=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_SYSCTL_SYSCALL is not set | 7 | # CONFIG_SYSCTL_SYSCALL is not set |
8 | # CONFIG_EPOLL is not set | 8 | # CONFIG_EPOLL is not set |
9 | # CONFIG_SHMEM is not set | 9 | # CONFIG_SHMEM is not set |
diff --git a/arch/arm/configs/at572d940hfek_defconfig b/arch/arm/configs/at572d940hfek_defconfig index 695e32d4fb58..1b1158ae8f82 100644 --- a/arch/arm/configs/at572d940hfek_defconfig +++ b/arch/arm/configs/at572d940hfek_defconfig | |||
@@ -17,7 +17,7 @@ CONFIG_SYSFS_DEPRECATED_V2=y | |||
17 | CONFIG_RELAY=y | 17 | CONFIG_RELAY=y |
18 | CONFIG_BLK_DEV_INITRD=y | 18 | CONFIG_BLK_DEV_INITRD=y |
19 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 19 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
20 | CONFIG_EMBEDDED=y | 20 | CONFIG_EXPERT=y |
21 | CONFIG_SLAB=y | 21 | CONFIG_SLAB=y |
22 | CONFIG_PROFILING=y | 22 | CONFIG_PROFILING=y |
23 | CONFIG_OPROFILE=m | 23 | CONFIG_OPROFILE=m |
diff --git a/arch/arm/configs/badge4_defconfig b/arch/arm/configs/badge4_defconfig index 3a1ad15a779f..5b54abbeb0b3 100644 --- a/arch/arm/configs/badge4_defconfig +++ b/arch/arm/configs/badge4_defconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_LOG_BUF_SHIFT=14 | 2 | CONFIG_LOG_BUF_SHIFT=14 |
3 | CONFIG_EMBEDDED=y | 3 | CONFIG_EXPERT=y |
4 | CONFIG_MODULES=y | 4 | CONFIG_MODULES=y |
5 | CONFIG_MODVERSIONS=y | 5 | CONFIG_MODVERSIONS=y |
6 | CONFIG_ARCH_SA1100=y | 6 | CONFIG_ARCH_SA1100=y |
diff --git a/arch/arm/configs/bcmring_defconfig b/arch/arm/configs/bcmring_defconfig index 75984cd1e233..795374d48f81 100644 --- a/arch/arm/configs/bcmring_defconfig +++ b/arch/arm/configs/bcmring_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | # CONFIG_LOCALVERSION_AUTO is not set | 2 | # CONFIG_LOCALVERSION_AUTO is not set |
3 | # CONFIG_SWAP is not set | 3 | # CONFIG_SWAP is not set |
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | CONFIG_KALLSYMS_EXTRA_PASS=y | 6 | CONFIG_KALLSYMS_EXTRA_PASS=y |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | # CONFIG_ELF_CORE is not set | 8 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/arm/configs/cm_x2xx_defconfig b/arch/arm/configs/cm_x2xx_defconfig index dcfbcf3b6c3e..a93ff8da5bab 100644 --- a/arch/arm/configs/cm_x2xx_defconfig +++ b/arch/arm/configs/cm_x2xx_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG_PROC=y | |||
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_SYSFS_DEPRECATED_V2=y | 7 | CONFIG_SYSFS_DEPRECATED_V2=y |
8 | CONFIG_BLK_DEV_INITRD=y | 8 | CONFIG_BLK_DEV_INITRD=y |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_VM_EVENT_COUNTERS is not set | 10 | # CONFIG_VM_EVENT_COUNTERS is not set |
11 | # CONFIG_SLUB_DEBUG is not set | 11 | # CONFIG_SLUB_DEBUG is not set |
12 | # CONFIG_COMPAT_BRK is not set | 12 | # CONFIG_COMPAT_BRK is not set |
diff --git a/arch/arm/configs/colibri_pxa270_defconfig b/arch/arm/configs/colibri_pxa270_defconfig index f52c64e36d8d..2ef2c5e8aaec 100644 --- a/arch/arm/configs/colibri_pxa270_defconfig +++ b/arch/arm/configs/colibri_pxa270_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_IKCONFIG_PROC=y | |||
8 | CONFIG_LOG_BUF_SHIFT=14 | 8 | CONFIG_LOG_BUF_SHIFT=14 |
9 | CONFIG_SYSFS_DEPRECATED_V2=y | 9 | CONFIG_SYSFS_DEPRECATED_V2=y |
10 | CONFIG_BLK_DEV_INITRD=y | 10 | CONFIG_BLK_DEV_INITRD=y |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | CONFIG_KALLSYMS_EXTRA_PASS=y | 12 | CONFIG_KALLSYMS_EXTRA_PASS=y |
13 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
14 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/collie_defconfig b/arch/arm/configs/collie_defconfig index 310f9a6270be..6c56ad086c7c 100644 --- a/arch/arm/configs/collie_defconfig +++ b/arch/arm/configs/collie_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_BASE_FULL is not set | 8 | # CONFIG_BASE_FULL is not set |
9 | # CONFIG_EPOLL is not set | 9 | # CONFIG_EPOLL is not set |
10 | CONFIG_SLOB=y | 10 | CONFIG_SLOB=y |
diff --git a/arch/arm/configs/corgi_defconfig b/arch/arm/configs/corgi_defconfig index 4a1fa81ed37d..e53c47563845 100644 --- a/arch/arm/configs/corgi_defconfig +++ b/arch/arm/configs/corgi_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_SYSFS_DEPRECATED_V2=y | 5 | CONFIG_SYSFS_DEPRECATED_V2=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_PROFILING=y | 8 | CONFIG_PROFILING=y |
9 | CONFIG_OPROFILE=m | 9 | CONFIG_OPROFILE=m |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/da8xx_omapl_defconfig b/arch/arm/configs/da8xx_omapl_defconfig index cdc40c4b8c48..88ccde058ba4 100644 --- a/arch/arm/configs/da8xx_omapl_defconfig +++ b/arch/arm/configs/da8xx_omapl_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG=y | |||
6 | CONFIG_IKCONFIG_PROC=y | 6 | CONFIG_IKCONFIG_PROC=y |
7 | CONFIG_LOG_BUF_SHIFT=14 | 7 | CONFIG_LOG_BUF_SHIFT=14 |
8 | CONFIG_BLK_DEV_INITRD=y | 8 | CONFIG_BLK_DEV_INITRD=y |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
11 | CONFIG_MODULE_UNLOAD=y | 11 | CONFIG_MODULE_UNLOAD=y |
12 | CONFIG_MODULE_FORCE_UNLOAD=y | 12 | CONFIG_MODULE_FORCE_UNLOAD=y |
diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig index 2519cc5a5f8f..889922ad229c 100644 --- a/arch/arm/configs/davinci_all_defconfig +++ b/arch/arm/configs/davinci_all_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG=y | |||
6 | CONFIG_IKCONFIG_PROC=y | 6 | CONFIG_IKCONFIG_PROC=y |
7 | CONFIG_LOG_BUF_SHIFT=14 | 7 | CONFIG_LOG_BUF_SHIFT=14 |
8 | CONFIG_BLK_DEV_INITRD=y | 8 | CONFIG_BLK_DEV_INITRD=y |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
11 | CONFIG_MODULE_UNLOAD=y | 11 | CONFIG_MODULE_UNLOAD=y |
12 | CONFIG_MODULE_FORCE_UNLOAD=y | 12 | CONFIG_MODULE_FORCE_UNLOAD=y |
diff --git a/arch/arm/configs/dove_defconfig b/arch/arm/configs/dove_defconfig index 9359e1bf32c1..54bf5eec8016 100644 --- a/arch/arm/configs/dove_defconfig +++ b/arch/arm/configs/dove_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | CONFIG_SLAB=y | 5 | CONFIG_SLAB=y |
6 | CONFIG_MODULES=y | 6 | CONFIG_MODULES=y |
7 | CONFIG_MODULE_UNLOAD=y | 7 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/arm/configs/ebsa110_defconfig b/arch/arm/configs/ebsa110_defconfig index c3194186920c..14559dbb4c2c 100644 --- a/arch/arm/configs/ebsa110_defconfig +++ b/arch/arm/configs/ebsa110_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_BSD_PROCESS_ACCT=y | 3 | CONFIG_BSD_PROCESS_ACCT=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | CONFIG_MODULES=y | 6 | CONFIG_MODULES=y |
7 | CONFIG_ARCH_EBSA110=y | 7 | CONFIG_ARCH_EBSA110=y |
8 | CONFIG_PCCARD=m | 8 | CONFIG_PCCARD=m |
diff --git a/arch/arm/configs/edb7211_defconfig b/arch/arm/configs/edb7211_defconfig index 7b62be1561ea..d52ded350a12 100644 --- a/arch/arm/configs/edb7211_defconfig +++ b/arch/arm/configs/edb7211_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_HOTPLUG is not set | 6 | # CONFIG_HOTPLUG is not set |
7 | CONFIG_ARCH_CLPS711X=y | 7 | CONFIG_ARCH_CLPS711X=y |
8 | CONFIG_ARCH_EDB7211=y | 8 | CONFIG_ARCH_EDB7211=y |
diff --git a/arch/arm/configs/em_x270_defconfig b/arch/arm/configs/em_x270_defconfig index d7db34f79702..60a21e01eb70 100644 --- a/arch/arm/configs/em_x270_defconfig +++ b/arch/arm/configs/em_x270_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG_PROC=y | |||
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_SYSFS_DEPRECATED_V2=y | 7 | CONFIG_SYSFS_DEPRECATED_V2=y |
8 | CONFIG_BLK_DEV_INITRD=y | 8 | CONFIG_BLK_DEV_INITRD=y |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_VM_EVENT_COUNTERS is not set | 10 | # CONFIG_VM_EVENT_COUNTERS is not set |
11 | # CONFIG_SLUB_DEBUG is not set | 11 | # CONFIG_SLUB_DEBUG is not set |
12 | # CONFIG_COMPAT_BRK is not set | 12 | # CONFIG_COMPAT_BRK is not set |
diff --git a/arch/arm/configs/ep93xx_defconfig b/arch/arm/configs/ep93xx_defconfig index 6d6689cdf398..8e97b2f7ceec 100644 --- a/arch/arm/configs/ep93xx_defconfig +++ b/arch/arm/configs/ep93xx_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_IKCONFIG=y | |||
4 | CONFIG_IKCONFIG_PROC=y | 4 | CONFIG_IKCONFIG_PROC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/arm/configs/eseries_pxa_defconfig b/arch/arm/configs/eseries_pxa_defconfig index 1691dea582fe..d68ac67c201c 100644 --- a/arch/arm/configs/eseries_pxa_defconfig +++ b/arch/arm/configs/eseries_pxa_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_KALLSYMS is not set | 6 | # CONFIG_KALLSYMS is not set |
7 | # CONFIG_COMPAT_BRK is not set | 7 | # CONFIG_COMPAT_BRK is not set |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
diff --git a/arch/arm/configs/ezx_defconfig b/arch/arm/configs/ezx_defconfig index c4eeb6d1cbf0..227a477346ed 100644 --- a/arch/arm/configs/ezx_defconfig +++ b/arch/arm/configs/ezx_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_SYSFS_DEPRECATED_V2=y | |||
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | CONFIG_RD_BZIP2=y | 8 | CONFIG_RD_BZIP2=y |
9 | CONFIG_RD_LZMA=y | 9 | CONFIG_RD_LZMA=y |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | # CONFIG_COMPAT_BRK is not set | 11 | # CONFIG_COMPAT_BRK is not set |
12 | CONFIG_SLAB=y | 12 | CONFIG_SLAB=y |
13 | CONFIG_MODULES=y | 13 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/footbridge_defconfig b/arch/arm/configs/footbridge_defconfig index 4f925ead2617..038518ab39a8 100644 --- a/arch/arm/configs/footbridge_defconfig +++ b/arch/arm/configs/footbridge_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_BSD_PROCESS_ACCT=y | 3 | CONFIG_BSD_PROCESS_ACCT=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_ARCH_FOOTBRIDGE=y | 9 | CONFIG_ARCH_FOOTBRIDGE=y |
diff --git a/arch/arm/configs/fortunet_defconfig b/arch/arm/configs/fortunet_defconfig index e11c7eab8ed0..840fced7529f 100644 --- a/arch/arm/configs/fortunet_defconfig +++ b/arch/arm/configs/fortunet_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_HOTPLUG is not set | 6 | # CONFIG_HOTPLUG is not set |
7 | CONFIG_ARCH_CLPS711X=y | 7 | CONFIG_ARCH_CLPS711X=y |
8 | CONFIG_ARCH_FORTUNET=y | 8 | CONFIG_ARCH_FORTUNET=y |
diff --git a/arch/arm/configs/h5000_defconfig b/arch/arm/configs/h5000_defconfig index ac336f10000c..37903e3f0efc 100644 --- a/arch/arm/configs/h5000_defconfig +++ b/arch/arm/configs/h5000_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_IKCONFIG=y | |||
4 | CONFIG_IKCONFIG_PROC=y | 4 | CONFIG_IKCONFIG_PROC=y |
5 | CONFIG_LOG_BUF_SHIFT=16 | 5 | CONFIG_LOG_BUF_SHIFT=16 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_UID16 is not set | 8 | # CONFIG_UID16 is not set |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/imote2_defconfig b/arch/arm/configs/imote2_defconfig index ade55c8c408b..176ec22af034 100644 --- a/arch/arm/configs/imote2_defconfig +++ b/arch/arm/configs/imote2_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_SYSFS_DEPRECATED_V2=y | |||
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | CONFIG_RD_BZIP2=y | 7 | CONFIG_RD_BZIP2=y |
8 | CONFIG_RD_LZMA=y | 8 | CONFIG_RD_LZMA=y |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_COMPAT_BRK is not set | 10 | # CONFIG_COMPAT_BRK is not set |
11 | CONFIG_SLAB=y | 11 | CONFIG_SLAB=y |
12 | CONFIG_MODULES=y | 12 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/ixp2000_defconfig b/arch/arm/configs/ixp2000_defconfig index 908324684549..8405aded97a3 100644 --- a/arch/arm/configs/ixp2000_defconfig +++ b/arch/arm/configs/ixp2000_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_BSD_PROCESS_ACCT=y | 3 | CONFIG_BSD_PROCESS_ACCT=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/ixp23xx_defconfig b/arch/arm/configs/ixp23xx_defconfig index 7fc056a8569c..688717612e91 100644 --- a/arch/arm/configs/ixp23xx_defconfig +++ b/arch/arm/configs/ixp23xx_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_BSD_PROCESS_ACCT=y | 3 | CONFIG_BSD_PROCESS_ACCT=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | CONFIG_SLAB=y | 7 | CONFIG_SLAB=y |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/arm/configs/ixp4xx_defconfig b/arch/arm/configs/ixp4xx_defconfig index 5c5023934001..063e2ab2c8f1 100644 --- a/arch/arm/configs/ixp4xx_defconfig +++ b/arch/arm/configs/ixp4xx_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_BSD_PROCESS_ACCT=y | 3 | CONFIG_BSD_PROCESS_ACCT=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | CONFIG_MODULES=y | 7 | CONFIG_MODULES=y |
8 | CONFIG_MODVERSIONS=y | 8 | CONFIG_MODVERSIONS=y |
9 | # CONFIG_BLK_DEV_BSG is not set | 9 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/arm/configs/loki_defconfig b/arch/arm/configs/loki_defconfig index e1eaff7f5536..1ba752b2dc6d 100644 --- a/arch/arm/configs/loki_defconfig +++ b/arch/arm/configs/loki_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | CONFIG_SLAB=y | 5 | CONFIG_SLAB=y |
6 | CONFIG_MODULES=y | 6 | CONFIG_MODULES=y |
7 | CONFIG_MODULE_UNLOAD=y | 7 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/arm/configs/lpd7a400_defconfig b/arch/arm/configs/lpd7a400_defconfig index 20caaaba4a04..5a48f171204c 100644 --- a/arch/arm/configs/lpd7a400_defconfig +++ b/arch/arm/configs/lpd7a400_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_EXPERIMENTAL=y | |||
3 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
4 | CONFIG_IKCONFIG=y | 4 | CONFIG_IKCONFIG=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | # CONFIG_EPOLL is not set | 8 | # CONFIG_EPOLL is not set |
9 | # CONFIG_IOSCHED_DEADLINE is not set | 9 | # CONFIG_IOSCHED_DEADLINE is not set |
diff --git a/arch/arm/configs/lpd7a404_defconfig b/arch/arm/configs/lpd7a404_defconfig index 1efcce97b4a7..22d0631de009 100644 --- a/arch/arm/configs/lpd7a404_defconfig +++ b/arch/arm/configs/lpd7a404_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_EXPERIMENTAL=y | |||
3 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
4 | CONFIG_IKCONFIG=y | 4 | CONFIG_IKCONFIG=y |
5 | CONFIG_LOG_BUF_SHIFT=16 | 5 | CONFIG_LOG_BUF_SHIFT=16 |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | # CONFIG_EPOLL is not set | 8 | # CONFIG_EPOLL is not set |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
diff --git a/arch/arm/configs/magician_defconfig b/arch/arm/configs/magician_defconfig index af805e8fd03d..a88e64d4e9a5 100644 --- a/arch/arm/configs/magician_defconfig +++ b/arch/arm/configs/magician_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_IKCONFIG=y | |||
4 | CONFIG_IKCONFIG_PROC=y | 4 | CONFIG_IKCONFIG_PROC=y |
5 | CONFIG_LOG_BUF_SHIFT=16 | 5 | CONFIG_LOG_BUF_SHIFT=16 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_UID16 is not set | 8 | # CONFIG_UID16 is not set |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/mv78xx0_defconfig b/arch/arm/configs/mv78xx0_defconfig index b0d082422d46..7305ebddb510 100644 --- a/arch/arm/configs/mv78xx0_defconfig +++ b/arch/arm/configs/mv78xx0_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_SYSFS_DEPRECATED_V2=y | 4 | CONFIG_SYSFS_DEPRECATED_V2=y |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | CONFIG_KALLSYMS_ALL=y | 6 | CONFIG_KALLSYMS_ALL=y |
7 | # CONFIG_SLUB_DEBUG is not set | 7 | # CONFIG_SLUB_DEBUG is not set |
8 | CONFIG_PROFILING=y | 8 | CONFIG_PROFILING=y |
diff --git a/arch/arm/configs/mx1_defconfig b/arch/arm/configs/mx1_defconfig index 2f38d9715437..b39b5ced8a10 100644 --- a/arch/arm/configs/mx1_defconfig +++ b/arch/arm/configs/mx1_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_IKCONFIG=y | |||
4 | CONFIG_IKCONFIG_PROC=y | 4 | CONFIG_IKCONFIG_PROC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/arm/configs/mx21_defconfig b/arch/arm/configs/mx21_defconfig index 6454e18e2abe..411f88dd4402 100644 --- a/arch/arm/configs/mx21_defconfig +++ b/arch/arm/configs/mx21_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_SYSFS_DEPRECATED_V2=y | 5 | CONFIG_SYSFS_DEPRECATED_V2=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_KALLSYMS_EXTRA_PASS=y | 8 | CONFIG_KALLSYMS_EXTRA_PASS=y |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/mx27_defconfig b/arch/arm/configs/mx27_defconfig index 813cfb366c18..9ad4c656c9bd 100644 --- a/arch/arm/configs/mx27_defconfig +++ b/arch/arm/configs/mx27_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_POSIX_MQUEUE=y | 4 | CONFIG_POSIX_MQUEUE=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_KALLSYMS_EXTRA_PASS=y | 8 | CONFIG_KALLSYMS_EXTRA_PASS=y |
9 | # CONFIG_COMPAT_BRK is not set | 9 | # CONFIG_COMPAT_BRK is not set |
10 | CONFIG_SLAB=y | 10 | CONFIG_SLAB=y |
diff --git a/arch/arm/configs/mx3_defconfig b/arch/arm/configs/mx3_defconfig index e648ea3429be..7c4b30b34952 100644 --- a/arch/arm/configs/mx3_defconfig +++ b/arch/arm/configs/mx3_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_IKCONFIG=y | |||
4 | CONFIG_IKCONFIG_PROC=y | 4 | CONFIG_IKCONFIG_PROC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/arm/configs/mx51_defconfig b/arch/arm/configs/mx51_defconfig index 5c7a87260fab..9cba68cfa51a 100644 --- a/arch/arm/configs/mx51_defconfig +++ b/arch/arm/configs/mx51_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_EXPERIMENTAL=y | |||
3 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
4 | CONFIG_LOG_BUF_SHIFT=18 | 4 | CONFIG_LOG_BUF_SHIFT=18 |
5 | CONFIG_RELAY=y | 5 | CONFIG_RELAY=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_SLUB_DEBUG is not set | 7 | # CONFIG_SLUB_DEBUG is not set |
8 | # CONFIG_COMPAT_BRK is not set | 8 | # CONFIG_COMPAT_BRK is not set |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/nhk8815_defconfig b/arch/arm/configs/nhk8815_defconfig index 0e2dc26ebe66..37207d1bf44b 100644 --- a/arch/arm/configs/nhk8815_defconfig +++ b/arch/arm/configs/nhk8815_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_IKCONFIG_PROC=y | |||
7 | CONFIG_LOG_BUF_SHIFT=14 | 7 | CONFIG_LOG_BUF_SHIFT=14 |
8 | CONFIG_SYSFS_DEPRECATED_V2=y | 8 | CONFIG_SYSFS_DEPRECATED_V2=y |
9 | CONFIG_BLK_DEV_INITRD=y | 9 | CONFIG_BLK_DEV_INITRD=y |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | CONFIG_KALLSYMS_ALL=y | 11 | CONFIG_KALLSYMS_ALL=y |
12 | CONFIG_SLAB=y | 12 | CONFIG_SLAB=y |
13 | CONFIG_MODULES=y | 13 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/omap1_defconfig b/arch/arm/configs/omap1_defconfig index a350cc6bfe6a..7b63462b349d 100644 --- a/arch/arm/configs/omap1_defconfig +++ b/arch/arm/configs/omap1_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
6 | CONFIG_IKCONFIG=y | 6 | CONFIG_IKCONFIG=y |
7 | CONFIG_LOG_BUF_SHIFT=14 | 7 | CONFIG_LOG_BUF_SHIFT=14 |
8 | CONFIG_BLK_DEV_INITRD=y | 8 | CONFIG_BLK_DEV_INITRD=y |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_KALLSYMS is not set | 10 | # CONFIG_KALLSYMS is not set |
11 | # CONFIG_ELF_CORE is not set | 11 | # CONFIG_ELF_CORE is not set |
12 | # CONFIG_BASE_FULL is not set | 12 | # CONFIG_BASE_FULL is not set |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index ccedde1371c3..ae890caa17a7 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG=y | |||
6 | CONFIG_IKCONFIG_PROC=y | 6 | CONFIG_IKCONFIG_PROC=y |
7 | CONFIG_LOG_BUF_SHIFT=16 | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | CONFIG_BLK_DEV_INITRD=y | 8 | CONFIG_BLK_DEV_INITRD=y |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_SYSCTL_SYSCALL is not set | 10 | # CONFIG_SYSCTL_SYSCALL is not set |
11 | CONFIG_KALLSYMS_EXTRA_PASS=y | 11 | CONFIG_KALLSYMS_EXTRA_PASS=y |
12 | CONFIG_SLAB=y | 12 | CONFIG_SLAB=y |
diff --git a/arch/arm/configs/orion5x_defconfig b/arch/arm/configs/orion5x_defconfig index 439323b3b0ed..a288d7033950 100644 --- a/arch/arm/configs/orion5x_defconfig +++ b/arch/arm/configs/orion5x_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_SYSFS_DEPRECATED_V2=y | 4 | CONFIG_SYSFS_DEPRECATED_V2=y |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_SLUB_DEBUG is not set | 6 | # CONFIG_SLUB_DEBUG is not set |
7 | CONFIG_PROFILING=y | 7 | CONFIG_PROFILING=y |
8 | CONFIG_OPROFILE=y | 8 | CONFIG_OPROFILE=y |
diff --git a/arch/arm/configs/pcm027_defconfig b/arch/arm/configs/pcm027_defconfig index 583a0610bd00..2f136c30a989 100644 --- a/arch/arm/configs/pcm027_defconfig +++ b/arch/arm/configs/pcm027_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_IKCONFIG=y | |||
7 | CONFIG_IKCONFIG_PROC=y | 7 | CONFIG_IKCONFIG_PROC=y |
8 | CONFIG_LOG_BUF_SHIFT=14 | 8 | CONFIG_LOG_BUF_SHIFT=14 |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | # CONFIG_KALLSYMS is not set | 11 | # CONFIG_KALLSYMS is not set |
12 | CONFIG_SLAB=y | 12 | CONFIG_SLAB=y |
13 | CONFIG_MODULES=y | 13 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/pcontrol_g20_defconfig b/arch/arm/configs/pcontrol_g20_defconfig index b42ee62c4d77..c75c9fcede58 100644 --- a/arch/arm/configs/pcontrol_g20_defconfig +++ b/arch/arm/configs/pcontrol_g20_defconfig | |||
@@ -10,7 +10,7 @@ CONFIG_IKCONFIG_PROC=y | |||
10 | CONFIG_LOG_BUF_SHIFT=14 | 10 | CONFIG_LOG_BUF_SHIFT=14 |
11 | CONFIG_NAMESPACES=y | 11 | CONFIG_NAMESPACES=y |
12 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EXPERT=y |
14 | # CONFIG_SYSCTL_SYSCALL is not set | 14 | # CONFIG_SYSCTL_SYSCALL is not set |
15 | # CONFIG_KALLSYMS is not set | 15 | # CONFIG_KALLSYMS is not set |
16 | # CONFIG_VM_EVENT_COUNTERS is not set | 16 | # CONFIG_VM_EVENT_COUNTERS is not set |
diff --git a/arch/arm/configs/pleb_defconfig b/arch/arm/configs/pleb_defconfig index d1efbdc1e6dc..cb08cc561da5 100644 --- a/arch/arm/configs/pleb_defconfig +++ b/arch/arm/configs/pleb_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_EXPERIMENTAL=y | |||
3 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | # CONFIG_SHMEM is not set | 8 | # CONFIG_SHMEM is not set |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/pnx4008_defconfig b/arch/arm/configs/pnx4008_defconfig index bd481f04276f..35a31ccacc32 100644 --- a/arch/arm/configs/pnx4008_defconfig +++ b/arch/arm/configs/pnx4008_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
5 | CONFIG_AUDIT=y | 5 | CONFIG_AUDIT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
11 | CONFIG_MODULE_UNLOAD=y | 11 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/arm/configs/simpad_defconfig b/arch/arm/configs/simpad_defconfig index af3b12e3b464..d3358155bf8a 100644 --- a/arch/arm/configs/simpad_defconfig +++ b/arch/arm/configs/simpad_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_LOCALVERSION="oe1" | 2 | CONFIG_LOCALVERSION="oe1" |
3 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | CONFIG_KALLSYMS_ALL=y | 6 | CONFIG_KALLSYMS_ALL=y |
7 | CONFIG_KALLSYMS_EXTRA_PASS=y | 7 | CONFIG_KALLSYMS_EXTRA_PASS=y |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/spitz_defconfig b/arch/arm/configs/spitz_defconfig index aebd4bb0ad01..70158273c6dd 100644 --- a/arch/arm/configs/spitz_defconfig +++ b/arch/arm/configs/spitz_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_SYSFS_DEPRECATED_V2=y | 5 | CONFIG_SYSFS_DEPRECATED_V2=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_PROFILING=y | 8 | CONFIG_PROFILING=y |
9 | CONFIG_OPROFILE=m | 9 | CONFIG_OPROFILE=m |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/stmp378x_defconfig b/arch/arm/configs/stmp378x_defconfig index 94a2d904bf94..1079c2b6eb3a 100644 --- a/arch/arm/configs/stmp378x_defconfig +++ b/arch/arm/configs/stmp378x_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
11 | CONFIG_MODULE_UNLOAD=y | 11 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/arm/configs/stmp37xx_defconfig b/arch/arm/configs/stmp37xx_defconfig index d8ee58cfa872..564a5cc44085 100644 --- a/arch/arm/configs/stmp37xx_defconfig +++ b/arch/arm/configs/stmp37xx_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
11 | CONFIG_MODULE_UNLOAD=y | 11 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/arm/configs/tct_hammer_defconfig b/arch/arm/configs/tct_hammer_defconfig index e89ca19489c2..95c0f0d63db6 100644 --- a/arch/arm/configs/tct_hammer_defconfig +++ b/arch/arm/configs/tct_hammer_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_SYSVIPC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_KALLSYMS is not set | 9 | # CONFIG_KALLSYMS is not set |
10 | # CONFIG_BUG is not set | 10 | # CONFIG_BUG is not set |
11 | # CONFIG_ELF_CORE is not set | 11 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/arm/configs/trizeps4_defconfig b/arch/arm/configs/trizeps4_defconfig index 37f48342827c..3162173fa75a 100644 --- a/arch/arm/configs/trizeps4_defconfig +++ b/arch/arm/configs/trizeps4_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_IKCONFIG=y | |||
7 | CONFIG_IKCONFIG_PROC=y | 7 | CONFIG_IKCONFIG_PROC=y |
8 | CONFIG_LOG_BUF_SHIFT=14 | 8 | CONFIG_LOG_BUF_SHIFT=14 |
9 | CONFIG_BLK_DEV_INITRD=y | 9 | CONFIG_BLK_DEV_INITRD=y |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | CONFIG_KALLSYMS_EXTRA_PASS=y | 11 | CONFIG_KALLSYMS_EXTRA_PASS=y |
12 | CONFIG_SLAB=y | 12 | CONFIG_SLAB=y |
13 | CONFIG_MODULES=y | 13 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/u300_defconfig b/arch/arm/configs/u300_defconfig index c1c252cdca60..4a5a12681be2 100644 --- a/arch/arm/configs/u300_defconfig +++ b/arch/arm/configs/u300_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_EXPERIMENTAL=y | |||
3 | # CONFIG_SWAP is not set | 3 | # CONFIG_SWAP is not set |
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_AIO is not set | 7 | # CONFIG_AIO is not set |
8 | # CONFIG_VM_EVENT_COUNTERS is not set | 8 | # CONFIG_VM_EVENT_COUNTERS is not set |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
diff --git a/arch/arm/configs/viper_defconfig b/arch/arm/configs/viper_defconfig index 9d7bf5e0d0f5..8b0c717378fa 100644 --- a/arch/arm/configs/viper_defconfig +++ b/arch/arm/configs/viper_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_EXPERIMENTAL=y | |||
3 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
4 | CONFIG_LOG_BUF_SHIFT=13 | 4 | CONFIG_LOG_BUF_SHIFT=13 |
5 | CONFIG_SYSFS_DEPRECATED_V2=y | 5 | CONFIG_SYSFS_DEPRECATED_V2=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_ELF_CORE is not set | 7 | # CONFIG_ELF_CORE is not set |
8 | # CONFIG_SHMEM is not set | 8 | # CONFIG_SHMEM is not set |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
diff --git a/arch/arm/configs/xcep_defconfig b/arch/arm/configs/xcep_defconfig index 70d47dbae6db..5b5504143647 100644 --- a/arch/arm/configs/xcep_defconfig +++ b/arch/arm/configs/xcep_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_IKCONFIG_PROC=y | |||
8 | CONFIG_LOG_BUF_SHIFT=16 | 8 | CONFIG_LOG_BUF_SHIFT=16 |
9 | CONFIG_SYSFS_DEPRECATED_V2=y | 9 | CONFIG_SYSFS_DEPRECATED_V2=y |
10 | CONFIG_BLK_DEV_INITRD=y | 10 | CONFIG_BLK_DEV_INITRD=y |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_UID16 is not set | 12 | # CONFIG_UID16 is not set |
13 | # CONFIG_SHMEM is not set | 13 | # CONFIG_SHMEM is not set |
14 | # CONFIG_VM_EVENT_COUNTERS is not set | 14 | # CONFIG_VM_EVENT_COUNTERS is not set |
diff --git a/arch/arm/include/asm/hardware/sp810.h b/arch/arm/include/asm/hardware/sp810.h index a101f10bb5b1..721847dc68ab 100644 --- a/arch/arm/include/asm/hardware/sp810.h +++ b/arch/arm/include/asm/hardware/sp810.h | |||
@@ -50,6 +50,12 @@ | |||
50 | #define SCPCELLID2 0xFF8 | 50 | #define SCPCELLID2 0xFF8 |
51 | #define SCPCELLID3 0xFFC | 51 | #define SCPCELLID3 0xFFC |
52 | 52 | ||
53 | #define SCCTRL_TIMEREN0SEL_REFCLK (0 << 15) | ||
54 | #define SCCTRL_TIMEREN0SEL_TIMCLK (1 << 15) | ||
55 | |||
56 | #define SCCTRL_TIMEREN1SEL_REFCLK (0 << 17) | ||
57 | #define SCCTRL_TIMEREN1SEL_TIMCLK (1 << 17) | ||
58 | |||
53 | static inline void sysctl_soft_reset(void __iomem *base) | 59 | static inline void sysctl_soft_reset(void __iomem *base) |
54 | { | 60 | { |
55 | /* writing any value to SCSYSSTAT reg will reset system */ | 61 | /* writing any value to SCSYSSTAT reg will reset system */ |
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h index 20e0f7c9e03e..d66605dea55a 100644 --- a/arch/arm/include/asm/io.h +++ b/arch/arm/include/asm/io.h | |||
@@ -95,6 +95,15 @@ static inline void __iomem *__typesafe_io(unsigned long addr) | |||
95 | return (void __iomem *)addr; | 95 | return (void __iomem *)addr; |
96 | } | 96 | } |
97 | 97 | ||
98 | /* IO barriers */ | ||
99 | #ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE | ||
100 | #define __iormb() rmb() | ||
101 | #define __iowmb() wmb() | ||
102 | #else | ||
103 | #define __iormb() do { } while (0) | ||
104 | #define __iowmb() do { } while (0) | ||
105 | #endif | ||
106 | |||
98 | /* | 107 | /* |
99 | * Now, pick up the machine-defined IO definitions | 108 | * Now, pick up the machine-defined IO definitions |
100 | */ | 109 | */ |
@@ -125,17 +134,17 @@ static inline void __iomem *__typesafe_io(unsigned long addr) | |||
125 | * The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space. | 134 | * The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space. |
126 | */ | 135 | */ |
127 | #ifdef __io | 136 | #ifdef __io |
128 | #define outb(v,p) __raw_writeb(v,__io(p)) | 137 | #define outb(v,p) ({ __iowmb(); __raw_writeb(v,__io(p)); }) |
129 | #define outw(v,p) __raw_writew((__force __u16) \ | 138 | #define outw(v,p) ({ __iowmb(); __raw_writew((__force __u16) \ |
130 | cpu_to_le16(v),__io(p)) | 139 | cpu_to_le16(v),__io(p)); }) |
131 | #define outl(v,p) __raw_writel((__force __u32) \ | 140 | #define outl(v,p) ({ __iowmb(); __raw_writel((__force __u32) \ |
132 | cpu_to_le32(v),__io(p)) | 141 | cpu_to_le32(v),__io(p)); }) |
133 | 142 | ||
134 | #define inb(p) ({ __u8 __v = __raw_readb(__io(p)); __v; }) | 143 | #define inb(p) ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; }) |
135 | #define inw(p) ({ __u16 __v = le16_to_cpu((__force __le16) \ | 144 | #define inw(p) ({ __u16 __v = le16_to_cpu((__force __le16) \ |
136 | __raw_readw(__io(p))); __v; }) | 145 | __raw_readw(__io(p))); __iormb(); __v; }) |
137 | #define inl(p) ({ __u32 __v = le32_to_cpu((__force __le32) \ | 146 | #define inl(p) ({ __u32 __v = le32_to_cpu((__force __le32) \ |
138 | __raw_readl(__io(p))); __v; }) | 147 | __raw_readl(__io(p))); __iormb(); __v; }) |
139 | 148 | ||
140 | #define outsb(p,d,l) __raw_writesb(__io(p),d,l) | 149 | #define outsb(p,d,l) __raw_writesb(__io(p),d,l) |
141 | #define outsw(p,d,l) __raw_writesw(__io(p),d,l) | 150 | #define outsw(p,d,l) __raw_writesw(__io(p),d,l) |
@@ -192,14 +201,6 @@ extern void _memset_io(volatile void __iomem *, int, size_t); | |||
192 | #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \ | 201 | #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \ |
193 | cpu_to_le32(v),__mem_pci(c))) | 202 | cpu_to_le32(v),__mem_pci(c))) |
194 | 203 | ||
195 | #ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE | ||
196 | #define __iormb() rmb() | ||
197 | #define __iowmb() wmb() | ||
198 | #else | ||
199 | #define __iormb() do { } while (0) | ||
200 | #define __iowmb() do { } while (0) | ||
201 | #endif | ||
202 | |||
203 | #define readb(c) ({ u8 __v = readb_relaxed(c); __iormb(); __v; }) | 204 | #define readb(c) ({ u8 __v = readb_relaxed(c); __iormb(); __v; }) |
204 | #define readw(c) ({ u16 __v = readw_relaxed(c); __iormb(); __v; }) | 205 | #define readw(c) ({ u16 __v = readw_relaxed(c); __iormb(); __v; }) |
205 | #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) | 206 | #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) |
diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index 23c2e8e5c0fa..d0ee74b7cf86 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h | |||
@@ -188,7 +188,7 @@ | |||
188 | * translation for translating DMA addresses. Use the driver | 188 | * translation for translating DMA addresses. Use the driver |
189 | * DMA support - see dma-mapping.h. | 189 | * DMA support - see dma-mapping.h. |
190 | */ | 190 | */ |
191 | static inline unsigned long virt_to_phys(void *x) | 191 | static inline unsigned long virt_to_phys(const volatile void *x) |
192 | { | 192 | { |
193 | return __virt_to_phys((unsigned long)(x)); | 193 | return __virt_to_phys((unsigned long)(x)); |
194 | } | 194 | } |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index f17d9a09e8fb..c0225da3fb21 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -392,24 +392,22 @@ ENDPROC(__turn_mmu_on) | |||
392 | 392 | ||
393 | #ifdef CONFIG_SMP_ON_UP | 393 | #ifdef CONFIG_SMP_ON_UP |
394 | __fixup_smp: | 394 | __fixup_smp: |
395 | mov r4, #0x00070000 | 395 | and r3, r9, #0x000f0000 @ architecture version |
396 | orr r3, r4, #0xff000000 @ mask 0xff070000 | 396 | teq r3, #0x000f0000 @ CPU ID supported? |
397 | orr r4, r4, #0x41000000 @ val 0x41070000 | ||
398 | and r0, r9, r3 | ||
399 | teq r0, r4 @ ARM CPU and ARMv6/v7? | ||
400 | bne __fixup_smp_on_up @ no, assume UP | 397 | bne __fixup_smp_on_up @ no, assume UP |
401 | 398 | ||
402 | orr r3, r3, #0x0000ff00 | 399 | bic r3, r9, #0x00ff0000 |
403 | orr r3, r3, #0x000000f0 @ mask 0xff07fff0 | 400 | bic r3, r3, #0x0000000f @ mask 0xff00fff0 |
401 | mov r4, #0x41000000 | ||
404 | orr r4, r4, #0x0000b000 | 402 | orr r4, r4, #0x0000b000 |
405 | orr r4, r4, #0x00000020 @ val 0x4107b020 | 403 | orr r4, r4, #0x00000020 @ val 0x4100b020 |
406 | and r0, r9, r3 | 404 | teq r3, r4 @ ARM 11MPCore? |
407 | teq r0, r4 @ ARM 11MPCore? | ||
408 | moveq pc, lr @ yes, assume SMP | 405 | moveq pc, lr @ yes, assume SMP |
409 | 406 | ||
410 | mrc p15, 0, r0, c0, c0, 5 @ read MPIDR | 407 | mrc p15, 0, r0, c0, c0, 5 @ read MPIDR |
411 | tst r0, #1 << 31 | 408 | and r0, r0, #0xc0000000 @ multiprocessing extensions and |
412 | movne pc, lr @ bit 31 => SMP | 409 | teq r0, #0x80000000 @ not part of a uniprocessor system? |
410 | moveq pc, lr @ yes, assume SMP | ||
413 | 411 | ||
414 | __fixup_smp_on_up: | 412 | __fixup_smp_on_up: |
415 | adr r0, 1f | 413 | adr r0, 1f |
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index fd9156698ab9..60636f499cb3 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
@@ -36,6 +36,7 @@ static void twd_set_mode(enum clock_event_mode mode, | |||
36 | /* timer load already set up */ | 36 | /* timer load already set up */ |
37 | ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE | 37 | ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE |
38 | | TWD_TIMER_CONTROL_PERIODIC; | 38 | | TWD_TIMER_CONTROL_PERIODIC; |
39 | __raw_writel(twd_timer_rate / HZ, twd_base + TWD_TIMER_LOAD); | ||
39 | break; | 40 | break; |
40 | case CLOCK_EVT_MODE_ONESHOT: | 41 | case CLOCK_EVT_MODE_ONESHOT: |
41 | /* period set, and timer enabled in 'next_event' hook */ | 42 | /* period set, and timer enabled in 'next_event' hook */ |
@@ -81,7 +82,7 @@ int twd_timer_ack(void) | |||
81 | 82 | ||
82 | static void __cpuinit twd_calibrate_rate(void) | 83 | static void __cpuinit twd_calibrate_rate(void) |
83 | { | 84 | { |
84 | unsigned long load, count; | 85 | unsigned long count; |
85 | u64 waitjiffies; | 86 | u64 waitjiffies; |
86 | 87 | ||
87 | /* | 88 | /* |
@@ -116,10 +117,6 @@ static void __cpuinit twd_calibrate_rate(void) | |||
116 | printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000, | 117 | printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000, |
117 | (twd_timer_rate / 1000000) % 100); | 118 | (twd_timer_rate / 1000000) % 100); |
118 | } | 119 | } |
119 | |||
120 | load = twd_timer_rate / HZ; | ||
121 | |||
122 | __raw_writel(load, twd_base + TWD_TIMER_LOAD); | ||
123 | } | 120 | } |
124 | 121 | ||
125 | /* | 122 | /* |
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index ffdf87be2958..82079545adc4 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c | |||
@@ -838,7 +838,7 @@ EXPORT_SYMBOL(ep93xx_i2s_release); | |||
838 | static struct resource ep93xx_ac97_resources[] = { | 838 | static struct resource ep93xx_ac97_resources[] = { |
839 | { | 839 | { |
840 | .start = EP93XX_AAC_PHYS_BASE, | 840 | .start = EP93XX_AAC_PHYS_BASE, |
841 | .end = EP93XX_AAC_PHYS_BASE + 0xb0 - 1, | 841 | .end = EP93XX_AAC_PHYS_BASE + 0xac - 1, |
842 | .flags = IORESOURCE_MEM, | 842 | .flags = IORESOURCE_MEM, |
843 | }, | 843 | }, |
844 | { | 844 | { |
diff --git a/arch/arm/mach-ep93xx/gpio.c b/arch/arm/mach-ep93xx/gpio.c index f3dc76fdcea8..bec34b834958 100644 --- a/arch/arm/mach-ep93xx/gpio.c +++ b/arch/arm/mach-ep93xx/gpio.c | |||
@@ -427,6 +427,13 @@ void __init ep93xx_gpio_init(void) | |||
427 | { | 427 | { |
428 | int i; | 428 | int i; |
429 | 429 | ||
430 | /* Set Ports C, D, E, G, and H for GPIO use */ | ||
431 | ep93xx_devcfg_set_bits(EP93XX_SYSCON_DEVCFG_KEYS | | ||
432 | EP93XX_SYSCON_DEVCFG_GONK | | ||
433 | EP93XX_SYSCON_DEVCFG_EONIDE | | ||
434 | EP93XX_SYSCON_DEVCFG_GONIDE | | ||
435 | EP93XX_SYSCON_DEVCFG_HONIDE); | ||
436 | |||
430 | for (i = 0; i < ARRAY_SIZE(ep93xx_gpio_banks); i++) | 437 | for (i = 0; i < ARRAY_SIZE(ep93xx_gpio_banks); i++) |
431 | gpiochip_add(&ep93xx_gpio_banks[i].chip); | 438 | gpiochip_add(&ep93xx_gpio_banks[i].chip); |
432 | } | 439 | } |
diff --git a/arch/arm/mach-footbridge/include/mach/debug-macro.S b/arch/arm/mach-footbridge/include/mach/debug-macro.S index 3c9e0c40c679..30b971d65815 100644 --- a/arch/arm/mach-footbridge/include/mach/debug-macro.S +++ b/arch/arm/mach-footbridge/include/mach/debug-macro.S | |||
@@ -17,8 +17,8 @@ | |||
17 | /* For NetWinder debugging */ | 17 | /* For NetWinder debugging */ |
18 | .macro addruart, rp, rv | 18 | .macro addruart, rp, rv |
19 | mov \rp, #0x000003f8 | 19 | mov \rp, #0x000003f8 |
20 | orr \rv, \rp, #0x7c000000 @ physical | 20 | orr \rv, \rp, #0xff000000 @ virtual |
21 | orr \rp, \rp, #0xff000000 @ virtual | 21 | orr \rp, \rp, #0x7c000000 @ physical |
22 | .endm | 22 | .endm |
23 | 23 | ||
24 | #define UART_SHIFT 0 | 24 | #define UART_SHIFT 0 |
diff --git a/arch/arm/mach-imx/mach-mx25_3ds.c b/arch/arm/mach-imx/mach-mx25_3ds.c index 0c92a80eac46..cd18a0c91b83 100644 --- a/arch/arm/mach-imx/mach-mx25_3ds.c +++ b/arch/arm/mach-imx/mach-mx25_3ds.c | |||
@@ -180,7 +180,7 @@ static const uint32_t mx25pdk_keymap[] = { | |||
180 | KEY(3, 3, KEY_POWER), | 180 | KEY(3, 3, KEY_POWER), |
181 | }; | 181 | }; |
182 | 182 | ||
183 | static const struct matrix_keymap_data mx25pdk_keymap_data __initdata = { | 183 | static const struct matrix_keymap_data mx25pdk_keymap_data __initconst = { |
184 | .keymap = mx25pdk_keymap, | 184 | .keymap = mx25pdk_keymap, |
185 | .keymap_size = ARRAY_SIZE(mx25pdk_keymap), | 185 | .keymap_size = ARRAY_SIZE(mx25pdk_keymap), |
186 | }; | 186 | }; |
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 4dc68d6bb6be..9fd894271d5d 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
@@ -432,7 +432,7 @@ static struct clocksource clocksource_ixp4xx = { | |||
432 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 432 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
433 | }; | 433 | }; |
434 | 434 | ||
435 | unsigned long ixp4xx_timer_freq = FREQ; | 435 | unsigned long ixp4xx_timer_freq = IXP4XX_TIMER_FREQ; |
436 | EXPORT_SYMBOL(ixp4xx_timer_freq); | 436 | EXPORT_SYMBOL(ixp4xx_timer_freq); |
437 | static void __init ixp4xx_clocksource_init(void) | 437 | static void __init ixp4xx_clocksource_init(void) |
438 | { | 438 | { |
@@ -496,7 +496,7 @@ static struct clock_event_device clockevent_ixp4xx = { | |||
496 | 496 | ||
497 | static void __init ixp4xx_clockevent_init(void) | 497 | static void __init ixp4xx_clockevent_init(void) |
498 | { | 498 | { |
499 | clockevent_ixp4xx.mult = div_sc(FREQ, NSEC_PER_SEC, | 499 | clockevent_ixp4xx.mult = div_sc(IXP4XX_TIMER_FREQ, NSEC_PER_SEC, |
500 | clockevent_ixp4xx.shift); | 500 | clockevent_ixp4xx.shift); |
501 | clockevent_ixp4xx.max_delta_ns = | 501 | clockevent_ixp4xx.max_delta_ns = |
502 | clockevent_delta2ns(0xfffffffe, &clockevent_ixp4xx); | 502 | clockevent_delta2ns(0xfffffffe, &clockevent_ixp4xx); |
diff --git a/arch/arm/mach-ixp4xx/include/mach/timex.h b/arch/arm/mach-ixp4xx/include/mach/timex.h index 2c3f93c3eb79..c9e930f29339 100644 --- a/arch/arm/mach-ixp4xx/include/mach/timex.h +++ b/arch/arm/mach-ixp4xx/include/mach/timex.h | |||
@@ -10,6 +10,7 @@ | |||
10 | * 66.66... MHz. We do a convulted calculation of CLOCK_TICK_RATE b/c the | 10 | * 66.66... MHz. We do a convulted calculation of CLOCK_TICK_RATE b/c the |
11 | * timer register ignores the bottom 2 bits of the LATCH value. | 11 | * timer register ignores the bottom 2 bits of the LATCH value. |
12 | */ | 12 | */ |
13 | #define FREQ 66666000 | 13 | #define IXP4XX_TIMER_FREQ 66666000 |
14 | #define CLOCK_TICK_RATE (((FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ) | 14 | #define CLOCK_TICK_RATE \ |
15 | (((IXP4XX_TIMER_FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ) | ||
15 | 16 | ||
diff --git a/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c b/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c index bfdbe4b5a3cc..852f7c9f87d0 100644 --- a/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c +++ b/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c | |||
@@ -265,6 +265,11 @@ void qmgr_release_queue(unsigned int queue) | |||
265 | qmgr_queue_descs[queue], queue); | 265 | qmgr_queue_descs[queue], queue); |
266 | qmgr_queue_descs[queue][0] = '\x0'; | 266 | qmgr_queue_descs[queue][0] = '\x0'; |
267 | #endif | 267 | #endif |
268 | |||
269 | while ((addr = qmgr_get_entry(queue))) | ||
270 | printk(KERN_ERR "qmgr: released queue %i not empty: 0x%08X\n", | ||
271 | queue, addr); | ||
272 | |||
268 | __raw_writel(0, &qmgr_regs->sram[queue]); | 273 | __raw_writel(0, &qmgr_regs->sram[queue]); |
269 | 274 | ||
270 | used_sram_bitmap[0] &= ~mask[0]; | 275 | used_sram_bitmap[0] &= ~mask[0]; |
@@ -275,10 +280,6 @@ void qmgr_release_queue(unsigned int queue) | |||
275 | spin_unlock_irq(&qmgr_lock); | 280 | spin_unlock_irq(&qmgr_lock); |
276 | 281 | ||
277 | module_put(THIS_MODULE); | 282 | module_put(THIS_MODULE); |
278 | |||
279 | while ((addr = qmgr_get_entry(queue))) | ||
280 | printk(KERN_ERR "qmgr: released queue %i not empty: 0x%08X\n", | ||
281 | queue, addr); | ||
282 | } | 283 | } |
283 | 284 | ||
284 | static int qmgr_init(void) | 285 | static int qmgr_init(void) |
diff --git a/arch/arm/mach-msm/board-qsd8x50.c b/arch/arm/mach-msm/board-qsd8x50.c index 2e8391307f55..6dde8185205f 100644 --- a/arch/arm/mach-msm/board-qsd8x50.c +++ b/arch/arm/mach-msm/board-qsd8x50.c | |||
@@ -43,7 +43,7 @@ static const unsigned qsd8x50_surf_smc91x_gpio __initdata = 156; | |||
43 | * at run-time: they vary from board to board, and the true | 43 | * at run-time: they vary from board to board, and the true |
44 | * configuration won't be known until boot. | 44 | * configuration won't be known until boot. |
45 | */ | 45 | */ |
46 | static struct resource smc91x_resources[] __initdata = { | 46 | static struct resource smc91x_resources[] = { |
47 | [0] = { | 47 | [0] = { |
48 | .flags = IORESOURCE_MEM, | 48 | .flags = IORESOURCE_MEM, |
49 | }, | 49 | }, |
@@ -52,7 +52,7 @@ static struct resource smc91x_resources[] __initdata = { | |||
52 | }, | 52 | }, |
53 | }; | 53 | }; |
54 | 54 | ||
55 | static struct platform_device smc91x_device __initdata = { | 55 | static struct platform_device smc91x_device = { |
56 | .name = "smc91x", | 56 | .name = "smc91x", |
57 | .id = 0, | 57 | .id = 0, |
58 | .num_resources = ARRAY_SIZE(smc91x_resources), | 58 | .num_resources = ARRAY_SIZE(smc91x_resources), |
diff --git a/arch/arm/mach-mxs/clock-mx23.c b/arch/arm/mach-mxs/clock-mx23.c index b1a362ebfded..ca72a05ed9c1 100644 --- a/arch/arm/mach-mxs/clock-mx23.c +++ b/arch/arm/mach-mxs/clock-mx23.c | |||
@@ -304,7 +304,7 @@ static int name##_set_rate(struct clk *clk, unsigned long rate) \ | |||
304 | reg = __raw_readl(CLKCTRL_BASE_ADDR + HW_CLKCTRL_##dr); \ | 304 | reg = __raw_readl(CLKCTRL_BASE_ADDR + HW_CLKCTRL_##dr); \ |
305 | reg &= ~BM_CLKCTRL_##dr##_DIV; \ | 305 | reg &= ~BM_CLKCTRL_##dr##_DIV; \ |
306 | reg |= div << BP_CLKCTRL_##dr##_DIV; \ | 306 | reg |= div << BP_CLKCTRL_##dr##_DIV; \ |
307 | if (reg | (1 << clk->enable_shift)) { \ | 307 | if (reg & (1 << clk->enable_shift)) { \ |
308 | pr_err("%s: clock is gated\n", __func__); \ | 308 | pr_err("%s: clock is gated\n", __func__); \ |
309 | return -EINVAL; \ | 309 | return -EINVAL; \ |
310 | } \ | 310 | } \ |
@@ -347,7 +347,7 @@ static int name##_set_parent(struct clk *clk, struct clk *parent) \ | |||
347 | { \ | 347 | { \ |
348 | if (parent != clk->parent) { \ | 348 | if (parent != clk->parent) { \ |
349 | __raw_writel(BM_CLKCTRL_CLKSEQ_BYPASS_##bit, \ | 349 | __raw_writel(BM_CLKCTRL_CLKSEQ_BYPASS_##bit, \ |
350 | HW_CLKCTRL_CLKSEQ_TOG); \ | 350 | CLKCTRL_BASE_ADDR + HW_CLKCTRL_CLKSEQ_TOG); \ |
351 | clk->parent = parent; \ | 351 | clk->parent = parent; \ |
352 | } \ | 352 | } \ |
353 | \ | 353 | \ |
diff --git a/arch/arm/mach-mxs/clock-mx28.c b/arch/arm/mach-mxs/clock-mx28.c index c9d7951e8bfb..febd787f054f 100644 --- a/arch/arm/mach-mxs/clock-mx28.c +++ b/arch/arm/mach-mxs/clock-mx28.c | |||
@@ -355,12 +355,12 @@ static int name##_set_rate(struct clk *clk, unsigned long rate) \ | |||
355 | } else { \ | 355 | } else { \ |
356 | reg &= ~BM_CLKCTRL_##dr##_DIV; \ | 356 | reg &= ~BM_CLKCTRL_##dr##_DIV; \ |
357 | reg |= div << BP_CLKCTRL_##dr##_DIV; \ | 357 | reg |= div << BP_CLKCTRL_##dr##_DIV; \ |
358 | if (reg | (1 << clk->enable_shift)) { \ | 358 | if (reg & (1 << clk->enable_shift)) { \ |
359 | pr_err("%s: clock is gated\n", __func__); \ | 359 | pr_err("%s: clock is gated\n", __func__); \ |
360 | return -EINVAL; \ | 360 | return -EINVAL; \ |
361 | } \ | 361 | } \ |
362 | } \ | 362 | } \ |
363 | __raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_CPU); \ | 363 | __raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##dr); \ |
364 | \ | 364 | \ |
365 | for (i = 10000; i; i--) \ | 365 | for (i = 10000; i; i--) \ |
366 | if (!(__raw_readl(CLKCTRL_BASE_ADDR + \ | 366 | if (!(__raw_readl(CLKCTRL_BASE_ADDR + \ |
@@ -483,7 +483,7 @@ static int name##_set_parent(struct clk *clk, struct clk *parent) \ | |||
483 | { \ | 483 | { \ |
484 | if (parent != clk->parent) { \ | 484 | if (parent != clk->parent) { \ |
485 | __raw_writel(BM_CLKCTRL_CLKSEQ_BYPASS_##bit, \ | 485 | __raw_writel(BM_CLKCTRL_CLKSEQ_BYPASS_##bit, \ |
486 | HW_CLKCTRL_CLKSEQ_TOG); \ | 486 | CLKCTRL_BASE_ADDR + HW_CLKCTRL_CLKSEQ_TOG); \ |
487 | clk->parent = parent; \ | 487 | clk->parent = parent; \ |
488 | } \ | 488 | } \ |
489 | \ | 489 | \ |
@@ -614,7 +614,6 @@ static struct clk_lookup lookups[] = { | |||
614 | _REGISTER_CLOCK("mxs-auart.2", NULL, uart_clk) | 614 | _REGISTER_CLOCK("mxs-auart.2", NULL, uart_clk) |
615 | _REGISTER_CLOCK("mxs-auart.3", NULL, uart_clk) | 615 | _REGISTER_CLOCK("mxs-auart.3", NULL, uart_clk) |
616 | _REGISTER_CLOCK("mxs-auart.4", NULL, uart_clk) | 616 | _REGISTER_CLOCK("mxs-auart.4", NULL, uart_clk) |
617 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | ||
618 | _REGISTER_CLOCK("rtc", NULL, rtc_clk) | 617 | _REGISTER_CLOCK("rtc", NULL, rtc_clk) |
619 | _REGISTER_CLOCK("pll2", NULL, pll2_clk) | 618 | _REGISTER_CLOCK("pll2", NULL, pll2_clk) |
620 | _REGISTER_CLOCK(NULL, "hclk", hbus_clk) | 619 | _REGISTER_CLOCK(NULL, "hclk", hbus_clk) |
diff --git a/arch/arm/mach-mxs/clock.c b/arch/arm/mach-mxs/clock.c index e7d2269cf70e..a7093c88e6a6 100644 --- a/arch/arm/mach-mxs/clock.c +++ b/arch/arm/mach-mxs/clock.c | |||
@@ -57,7 +57,6 @@ static void __clk_disable(struct clk *clk) | |||
57 | if (clk->disable) | 57 | if (clk->disable) |
58 | clk->disable(clk); | 58 | clk->disable(clk); |
59 | __clk_disable(clk->parent); | 59 | __clk_disable(clk->parent); |
60 | __clk_disable(clk->secondary); | ||
61 | } | 60 | } |
62 | } | 61 | } |
63 | 62 | ||
@@ -68,7 +67,6 @@ static int __clk_enable(struct clk *clk) | |||
68 | 67 | ||
69 | if (clk->usecount++ == 0) { | 68 | if (clk->usecount++ == 0) { |
70 | __clk_enable(clk->parent); | 69 | __clk_enable(clk->parent); |
71 | __clk_enable(clk->secondary); | ||
72 | 70 | ||
73 | if (clk->enable) | 71 | if (clk->enable) |
74 | clk->enable(clk); | 72 | clk->enable(clk); |
diff --git a/arch/arm/mach-mxs/gpio.c b/arch/arm/mach-mxs/gpio.c index 8bcb34042252..64848fa3af3b 100644 --- a/arch/arm/mach-mxs/gpio.c +++ b/arch/arm/mach-mxs/gpio.c | |||
@@ -139,6 +139,8 @@ static void mxs_gpio_irq_handler(u32 irq, struct irq_desc *desc) | |||
139 | struct mxs_gpio_port *port = (struct mxs_gpio_port *)get_irq_data(irq); | 139 | struct mxs_gpio_port *port = (struct mxs_gpio_port *)get_irq_data(irq); |
140 | u32 gpio_irq_no_base = port->virtual_irq_start; | 140 | u32 gpio_irq_no_base = port->virtual_irq_start; |
141 | 141 | ||
142 | desc->irq_data.chip->irq_ack(&desc->irq_data); | ||
143 | |||
142 | irq_stat = __raw_readl(port->base + PINCTRL_IRQSTAT(port->id)) & | 144 | irq_stat = __raw_readl(port->base + PINCTRL_IRQSTAT(port->id)) & |
143 | __raw_readl(port->base + PINCTRL_IRQEN(port->id)); | 145 | __raw_readl(port->base + PINCTRL_IRQEN(port->id)); |
144 | 146 | ||
diff --git a/arch/arm/mach-mxs/include/mach/clock.h b/arch/arm/mach-mxs/include/mach/clock.h index 041e276d8a32..592c9ab5d760 100644 --- a/arch/arm/mach-mxs/include/mach/clock.h +++ b/arch/arm/mach-mxs/include/mach/clock.h | |||
@@ -29,8 +29,6 @@ struct clk { | |||
29 | int id; | 29 | int id; |
30 | /* Source clock this clk depends on */ | 30 | /* Source clock this clk depends on */ |
31 | struct clk *parent; | 31 | struct clk *parent; |
32 | /* Secondary clock to enable/disable with this clock */ | ||
33 | struct clk *secondary; | ||
34 | /* Reference count of clock enable/disable */ | 32 | /* Reference count of clock enable/disable */ |
35 | __s8 usecount; | 33 | __s8 usecount; |
36 | /* Register bit position for clock's enable/disable control. */ | 34 | /* Register bit position for clock's enable/disable control. */ |
diff --git a/arch/arm/mach-omap1/Kconfig b/arch/arm/mach-omap1/Kconfig index 8d2f2daba0c0..e0a028161dde 100644 --- a/arch/arm/mach-omap1/Kconfig +++ b/arch/arm/mach-omap1/Kconfig | |||
@@ -9,6 +9,7 @@ config ARCH_OMAP730 | |||
9 | depends on ARCH_OMAP1 | 9 | depends on ARCH_OMAP1 |
10 | bool "OMAP730 Based System" | 10 | bool "OMAP730 Based System" |
11 | select CPU_ARM926T | 11 | select CPU_ARM926T |
12 | select OMAP_MPU_TIMER | ||
12 | select ARCH_OMAP_OTG | 13 | select ARCH_OMAP_OTG |
13 | 14 | ||
14 | config ARCH_OMAP850 | 15 | config ARCH_OMAP850 |
@@ -22,6 +23,7 @@ config ARCH_OMAP15XX | |||
22 | default y | 23 | default y |
23 | bool "OMAP15xx Based System" | 24 | bool "OMAP15xx Based System" |
24 | select CPU_ARM925T | 25 | select CPU_ARM925T |
26 | select OMAP_MPU_TIMER | ||
25 | 27 | ||
26 | config ARCH_OMAP16XX | 28 | config ARCH_OMAP16XX |
27 | depends on ARCH_OMAP1 | 29 | depends on ARCH_OMAP1 |
diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile index 6ee19504845f..ba6009f27677 100644 --- a/arch/arm/mach-omap1/Makefile +++ b/arch/arm/mach-omap1/Makefile | |||
@@ -3,12 +3,11 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | # Common support | 5 | # Common support |
6 | obj-y := io.o id.o sram.o irq.o mux.o flash.o serial.o devices.o dma.o | 6 | obj-y := io.o id.o sram.o time.o irq.o mux.o flash.o serial.o devices.o dma.o |
7 | obj-y += clock.o clock_data.o opp_data.o | 7 | obj-y += clock.o clock_data.o opp_data.o |
8 | 8 | ||
9 | obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o | 9 | obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o |
10 | 10 | ||
11 | obj-$(CONFIG_OMAP_MPU_TIMER) += time.o | ||
12 | obj-$(CONFIG_OMAP_32K_TIMER) += timer32k.o | 11 | obj-$(CONFIG_OMAP_32K_TIMER) += timer32k.o |
13 | 12 | ||
14 | # Power Management | 13 | # Power Management |
diff --git a/arch/arm/mach-omap1/include/mach/entry-macro.S b/arch/arm/mach-omap1/include/mach/entry-macro.S index c9be6d4d83e2..bfb4fb1d7382 100644 --- a/arch/arm/mach-omap1/include/mach/entry-macro.S +++ b/arch/arm/mach-omap1/include/mach/entry-macro.S | |||
@@ -14,19 +14,6 @@ | |||
14 | #include <mach/irqs.h> | 14 | #include <mach/irqs.h> |
15 | #include <asm/hardware/gic.h> | 15 | #include <asm/hardware/gic.h> |
16 | 16 | ||
17 | /* | ||
18 | * We use __glue to avoid errors with multiple definitions of | ||
19 | * .globl omap_irq_flags as it's included from entry-armv.S but not | ||
20 | * from entry-common.S. | ||
21 | */ | ||
22 | #ifdef __glue | ||
23 | .pushsection .data | ||
24 | .globl omap_irq_flags | ||
25 | omap_irq_flags: | ||
26 | .word 0 | ||
27 | .popsection | ||
28 | #endif | ||
29 | |||
30 | .macro disable_fiq | 17 | .macro disable_fiq |
31 | .endm | 18 | .endm |
32 | 19 | ||
diff --git a/arch/arm/mach-omap1/irq.c b/arch/arm/mach-omap1/irq.c index 47701584df35..731dd33bff51 100644 --- a/arch/arm/mach-omap1/irq.c +++ b/arch/arm/mach-omap1/irq.c | |||
@@ -57,6 +57,7 @@ struct omap_irq_bank { | |||
57 | unsigned long wake_enable; | 57 | unsigned long wake_enable; |
58 | }; | 58 | }; |
59 | 59 | ||
60 | u32 omap_irq_flags; | ||
60 | static unsigned int irq_bank_count; | 61 | static unsigned int irq_bank_count; |
61 | static struct omap_irq_bank *irq_banks; | 62 | static struct omap_irq_bank *irq_banks; |
62 | 63 | ||
@@ -176,7 +177,6 @@ static struct irq_chip omap_irq_chip = { | |||
176 | 177 | ||
177 | void __init omap_init_irq(void) | 178 | void __init omap_init_irq(void) |
178 | { | 179 | { |
179 | extern unsigned int omap_irq_flags; | ||
180 | int i, j; | 180 | int i, j; |
181 | 181 | ||
182 | #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) | 182 | #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) |
diff --git a/arch/arm/mach-omap1/lcd_dma.c b/arch/arm/mach-omap1/lcd_dma.c index c9088d85da04..453809359ba6 100644 --- a/arch/arm/mach-omap1/lcd_dma.c +++ b/arch/arm/mach-omap1/lcd_dma.c | |||
@@ -37,7 +37,7 @@ int omap_lcd_dma_running(void) | |||
37 | * On OMAP1510, internal LCD controller will start the transfer | 37 | * On OMAP1510, internal LCD controller will start the transfer |
38 | * when it gets enabled, so assume DMA running if LCD enabled. | 38 | * when it gets enabled, so assume DMA running if LCD enabled. |
39 | */ | 39 | */ |
40 | if (cpu_is_omap1510()) | 40 | if (cpu_is_omap15xx()) |
41 | if (omap_readw(OMAP_LCDC_CONTROL) & OMAP_LCDC_CTRL_LCD_EN) | 41 | if (omap_readw(OMAP_LCDC_CONTROL) & OMAP_LCDC_CTRL_LCD_EN) |
42 | return 1; | 42 | return 1; |
43 | 43 | ||
@@ -95,7 +95,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_single_transfer); | |||
95 | 95 | ||
96 | void omap_set_lcd_dma_b1_rotation(int rotate) | 96 | void omap_set_lcd_dma_b1_rotation(int rotate) |
97 | { | 97 | { |
98 | if (cpu_is_omap1510()) { | 98 | if (cpu_is_omap15xx()) { |
99 | printk(KERN_ERR "DMA rotation is not supported in 1510 mode\n"); | 99 | printk(KERN_ERR "DMA rotation is not supported in 1510 mode\n"); |
100 | BUG(); | 100 | BUG(); |
101 | return; | 101 | return; |
@@ -106,7 +106,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_b1_rotation); | |||
106 | 106 | ||
107 | void omap_set_lcd_dma_b1_mirror(int mirror) | 107 | void omap_set_lcd_dma_b1_mirror(int mirror) |
108 | { | 108 | { |
109 | if (cpu_is_omap1510()) { | 109 | if (cpu_is_omap15xx()) { |
110 | printk(KERN_ERR "DMA mirror is not supported in 1510 mode\n"); | 110 | printk(KERN_ERR "DMA mirror is not supported in 1510 mode\n"); |
111 | BUG(); | 111 | BUG(); |
112 | } | 112 | } |
@@ -116,7 +116,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_b1_mirror); | |||
116 | 116 | ||
117 | void omap_set_lcd_dma_b1_vxres(unsigned long vxres) | 117 | void omap_set_lcd_dma_b1_vxres(unsigned long vxres) |
118 | { | 118 | { |
119 | if (cpu_is_omap1510()) { | 119 | if (cpu_is_omap15xx()) { |
120 | printk(KERN_ERR "DMA virtual resulotion is not supported " | 120 | printk(KERN_ERR "DMA virtual resulotion is not supported " |
121 | "in 1510 mode\n"); | 121 | "in 1510 mode\n"); |
122 | BUG(); | 122 | BUG(); |
@@ -127,7 +127,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_b1_vxres); | |||
127 | 127 | ||
128 | void omap_set_lcd_dma_b1_scale(unsigned int xscale, unsigned int yscale) | 128 | void omap_set_lcd_dma_b1_scale(unsigned int xscale, unsigned int yscale) |
129 | { | 129 | { |
130 | if (cpu_is_omap1510()) { | 130 | if (cpu_is_omap15xx()) { |
131 | printk(KERN_ERR "DMA scale is not supported in 1510 mode\n"); | 131 | printk(KERN_ERR "DMA scale is not supported in 1510 mode\n"); |
132 | BUG(); | 132 | BUG(); |
133 | } | 133 | } |
@@ -177,7 +177,7 @@ static void set_b1_regs(void) | |||
177 | bottom = PIXADDR(lcd_dma.xres - 1, lcd_dma.yres - 1); | 177 | bottom = PIXADDR(lcd_dma.xres - 1, lcd_dma.yres - 1); |
178 | /* 1510 DMA requires the bottom address to be 2 more | 178 | /* 1510 DMA requires the bottom address to be 2 more |
179 | * than the actual last memory access location. */ | 179 | * than the actual last memory access location. */ |
180 | if (cpu_is_omap1510() && | 180 | if (cpu_is_omap15xx() && |
181 | lcd_dma.data_type == OMAP_DMA_DATA_TYPE_S32) | 181 | lcd_dma.data_type == OMAP_DMA_DATA_TYPE_S32) |
182 | bottom += 2; | 182 | bottom += 2; |
183 | ei = PIXSTEP(0, 0, 1, 0); | 183 | ei = PIXSTEP(0, 0, 1, 0); |
@@ -241,7 +241,7 @@ static void set_b1_regs(void) | |||
241 | return; /* Suppress warning about uninitialized vars */ | 241 | return; /* Suppress warning about uninitialized vars */ |
242 | } | 242 | } |
243 | 243 | ||
244 | if (cpu_is_omap1510()) { | 244 | if (cpu_is_omap15xx()) { |
245 | omap_writew(top >> 16, OMAP1510_DMA_LCD_TOP_F1_U); | 245 | omap_writew(top >> 16, OMAP1510_DMA_LCD_TOP_F1_U); |
246 | omap_writew(top, OMAP1510_DMA_LCD_TOP_F1_L); | 246 | omap_writew(top, OMAP1510_DMA_LCD_TOP_F1_L); |
247 | omap_writew(bottom >> 16, OMAP1510_DMA_LCD_BOT_F1_U); | 247 | omap_writew(bottom >> 16, OMAP1510_DMA_LCD_BOT_F1_U); |
@@ -343,7 +343,7 @@ void omap_free_lcd_dma(void) | |||
343 | BUG(); | 343 | BUG(); |
344 | return; | 344 | return; |
345 | } | 345 | } |
346 | if (!cpu_is_omap1510()) | 346 | if (!cpu_is_omap15xx()) |
347 | omap_writew(omap_readw(OMAP1610_DMA_LCD_CCR) & ~1, | 347 | omap_writew(omap_readw(OMAP1610_DMA_LCD_CCR) & ~1, |
348 | OMAP1610_DMA_LCD_CCR); | 348 | OMAP1610_DMA_LCD_CCR); |
349 | lcd_dma.reserved = 0; | 349 | lcd_dma.reserved = 0; |
@@ -360,7 +360,7 @@ void omap_enable_lcd_dma(void) | |||
360 | * connected. Otherwise the OMAP internal controller will | 360 | * connected. Otherwise the OMAP internal controller will |
361 | * start the transfer when it gets enabled. | 361 | * start the transfer when it gets enabled. |
362 | */ | 362 | */ |
363 | if (cpu_is_omap1510() || !lcd_dma.ext_ctrl) | 363 | if (cpu_is_omap15xx() || !lcd_dma.ext_ctrl) |
364 | return; | 364 | return; |
365 | 365 | ||
366 | w = omap_readw(OMAP1610_DMA_LCD_CTRL); | 366 | w = omap_readw(OMAP1610_DMA_LCD_CTRL); |
@@ -378,14 +378,14 @@ EXPORT_SYMBOL(omap_enable_lcd_dma); | |||
378 | void omap_setup_lcd_dma(void) | 378 | void omap_setup_lcd_dma(void) |
379 | { | 379 | { |
380 | BUG_ON(lcd_dma.active); | 380 | BUG_ON(lcd_dma.active); |
381 | if (!cpu_is_omap1510()) { | 381 | if (!cpu_is_omap15xx()) { |
382 | /* Set some reasonable defaults */ | 382 | /* Set some reasonable defaults */ |
383 | omap_writew(0x5440, OMAP1610_DMA_LCD_CCR); | 383 | omap_writew(0x5440, OMAP1610_DMA_LCD_CCR); |
384 | omap_writew(0x9102, OMAP1610_DMA_LCD_CSDP); | 384 | omap_writew(0x9102, OMAP1610_DMA_LCD_CSDP); |
385 | omap_writew(0x0004, OMAP1610_DMA_LCD_LCH_CTRL); | 385 | omap_writew(0x0004, OMAP1610_DMA_LCD_LCH_CTRL); |
386 | } | 386 | } |
387 | set_b1_regs(); | 387 | set_b1_regs(); |
388 | if (!cpu_is_omap1510()) { | 388 | if (!cpu_is_omap15xx()) { |
389 | u16 w; | 389 | u16 w; |
390 | 390 | ||
391 | w = omap_readw(OMAP1610_DMA_LCD_CCR); | 391 | w = omap_readw(OMAP1610_DMA_LCD_CCR); |
@@ -407,7 +407,7 @@ void omap_stop_lcd_dma(void) | |||
407 | u16 w; | 407 | u16 w; |
408 | 408 | ||
409 | lcd_dma.active = 0; | 409 | lcd_dma.active = 0; |
410 | if (cpu_is_omap1510() || !lcd_dma.ext_ctrl) | 410 | if (cpu_is_omap15xx() || !lcd_dma.ext_ctrl) |
411 | return; | 411 | return; |
412 | 412 | ||
413 | w = omap_readw(OMAP1610_DMA_LCD_CCR); | 413 | w = omap_readw(OMAP1610_DMA_LCD_CCR); |
diff --git a/arch/arm/mach-omap1/time.c b/arch/arm/mach-omap1/time.c index ed7a61ff916a..6885d2fac183 100644 --- a/arch/arm/mach-omap1/time.c +++ b/arch/arm/mach-omap1/time.c | |||
@@ -49,11 +49,15 @@ | |||
49 | #include <mach/hardware.h> | 49 | #include <mach/hardware.h> |
50 | #include <asm/leds.h> | 50 | #include <asm/leds.h> |
51 | #include <asm/irq.h> | 51 | #include <asm/irq.h> |
52 | #include <asm/sched_clock.h> | ||
53 | |||
52 | #include <asm/mach/irq.h> | 54 | #include <asm/mach/irq.h> |
53 | #include <asm/mach/time.h> | 55 | #include <asm/mach/time.h> |
54 | 56 | ||
55 | #include <plat/common.h> | 57 | #include <plat/common.h> |
56 | 58 | ||
59 | #ifdef CONFIG_OMAP_MPU_TIMER | ||
60 | |||
57 | #define OMAP_MPU_TIMER_BASE OMAP_MPU_TIMER1_BASE | 61 | #define OMAP_MPU_TIMER_BASE OMAP_MPU_TIMER1_BASE |
58 | #define OMAP_MPU_TIMER_OFFSET 0x100 | 62 | #define OMAP_MPU_TIMER_OFFSET 0x100 |
59 | 63 | ||
@@ -67,7 +71,7 @@ typedef struct { | |||
67 | ((volatile omap_mpu_timer_regs_t*)OMAP1_IO_ADDRESS(OMAP_MPU_TIMER_BASE + \ | 71 | ((volatile omap_mpu_timer_regs_t*)OMAP1_IO_ADDRESS(OMAP_MPU_TIMER_BASE + \ |
68 | (n)*OMAP_MPU_TIMER_OFFSET)) | 72 | (n)*OMAP_MPU_TIMER_OFFSET)) |
69 | 73 | ||
70 | static inline unsigned long omap_mpu_timer_read(int nr) | 74 | static inline unsigned long notrace omap_mpu_timer_read(int nr) |
71 | { | 75 | { |
72 | volatile omap_mpu_timer_regs_t* timer = omap_mpu_timer_base(nr); | 76 | volatile omap_mpu_timer_regs_t* timer = omap_mpu_timer_base(nr); |
73 | return timer->read_tim; | 77 | return timer->read_tim; |
@@ -212,6 +216,32 @@ static struct clocksource clocksource_mpu = { | |||
212 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 216 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
213 | }; | 217 | }; |
214 | 218 | ||
219 | static DEFINE_CLOCK_DATA(cd); | ||
220 | |||
221 | static inline unsigned long long notrace _omap_mpu_sched_clock(void) | ||
222 | { | ||
223 | u32 cyc = mpu_read(&clocksource_mpu); | ||
224 | return cyc_to_sched_clock(&cd, cyc, (u32)~0); | ||
225 | } | ||
226 | |||
227 | #ifndef CONFIG_OMAP_32K_TIMER | ||
228 | unsigned long long notrace sched_clock(void) | ||
229 | { | ||
230 | return _omap_mpu_sched_clock(); | ||
231 | } | ||
232 | #else | ||
233 | static unsigned long long notrace omap_mpu_sched_clock(void) | ||
234 | { | ||
235 | return _omap_mpu_sched_clock(); | ||
236 | } | ||
237 | #endif | ||
238 | |||
239 | static void notrace mpu_update_sched_clock(void) | ||
240 | { | ||
241 | u32 cyc = mpu_read(&clocksource_mpu); | ||
242 | update_sched_clock(&cd, cyc, (u32)~0); | ||
243 | } | ||
244 | |||
215 | static void __init omap_init_clocksource(unsigned long rate) | 245 | static void __init omap_init_clocksource(unsigned long rate) |
216 | { | 246 | { |
217 | static char err[] __initdata = KERN_ERR | 247 | static char err[] __initdata = KERN_ERR |
@@ -219,17 +249,13 @@ static void __init omap_init_clocksource(unsigned long rate) | |||
219 | 249 | ||
220 | setup_irq(INT_TIMER2, &omap_mpu_timer2_irq); | 250 | setup_irq(INT_TIMER2, &omap_mpu_timer2_irq); |
221 | omap_mpu_timer_start(1, ~0, 1); | 251 | omap_mpu_timer_start(1, ~0, 1); |
252 | init_sched_clock(&cd, mpu_update_sched_clock, 32, rate); | ||
222 | 253 | ||
223 | if (clocksource_register_hz(&clocksource_mpu, rate)) | 254 | if (clocksource_register_hz(&clocksource_mpu, rate)) |
224 | printk(err, clocksource_mpu.name); | 255 | printk(err, clocksource_mpu.name); |
225 | } | 256 | } |
226 | 257 | ||
227 | /* | 258 | static void __init omap_mpu_timer_init(void) |
228 | * --------------------------------------------------------------------------- | ||
229 | * Timer initialization | ||
230 | * --------------------------------------------------------------------------- | ||
231 | */ | ||
232 | static void __init omap_timer_init(void) | ||
233 | { | 259 | { |
234 | struct clk *ck_ref = clk_get(NULL, "ck_ref"); | 260 | struct clk *ck_ref = clk_get(NULL, "ck_ref"); |
235 | unsigned long rate; | 261 | unsigned long rate; |
@@ -246,6 +272,66 @@ static void __init omap_timer_init(void) | |||
246 | omap_init_clocksource(rate); | 272 | omap_init_clocksource(rate); |
247 | } | 273 | } |
248 | 274 | ||
275 | #else | ||
276 | static inline void omap_mpu_timer_init(void) | ||
277 | { | ||
278 | pr_err("Bogus timer, should not happen\n"); | ||
279 | } | ||
280 | #endif /* CONFIG_OMAP_MPU_TIMER */ | ||
281 | |||
282 | #if defined(CONFIG_OMAP_MPU_TIMER) && defined(CONFIG_OMAP_32K_TIMER) | ||
283 | static unsigned long long (*preferred_sched_clock)(void); | ||
284 | |||
285 | unsigned long long notrace sched_clock(void) | ||
286 | { | ||
287 | if (!preferred_sched_clock) | ||
288 | return 0; | ||
289 | |||
290 | return preferred_sched_clock(); | ||
291 | } | ||
292 | |||
293 | static inline void preferred_sched_clock_init(bool use_32k_sched_clock) | ||
294 | { | ||
295 | if (use_32k_sched_clock) | ||
296 | preferred_sched_clock = omap_32k_sched_clock; | ||
297 | else | ||
298 | preferred_sched_clock = omap_mpu_sched_clock; | ||
299 | } | ||
300 | #else | ||
301 | static inline void preferred_sched_clock_init(bool use_32k_sched_clcok) | ||
302 | { | ||
303 | } | ||
304 | #endif | ||
305 | |||
306 | static inline int omap_32k_timer_usable(void) | ||
307 | { | ||
308 | int res = false; | ||
309 | |||
310 | if (cpu_is_omap730() || cpu_is_omap15xx()) | ||
311 | return res; | ||
312 | |||
313 | #ifdef CONFIG_OMAP_32K_TIMER | ||
314 | res = omap_32k_timer_init(); | ||
315 | #endif | ||
316 | |||
317 | return res; | ||
318 | } | ||
319 | |||
320 | /* | ||
321 | * --------------------------------------------------------------------------- | ||
322 | * Timer initialization | ||
323 | * --------------------------------------------------------------------------- | ||
324 | */ | ||
325 | static void __init omap_timer_init(void) | ||
326 | { | ||
327 | if (omap_32k_timer_usable()) { | ||
328 | preferred_sched_clock_init(1); | ||
329 | } else { | ||
330 | omap_mpu_timer_init(); | ||
331 | preferred_sched_clock_init(0); | ||
332 | } | ||
333 | } | ||
334 | |||
249 | struct sys_timer omap_timer = { | 335 | struct sys_timer omap_timer = { |
250 | .init = omap_timer_init, | 336 | .init = omap_timer_init, |
251 | }; | 337 | }; |
diff --git a/arch/arm/mach-omap1/timer32k.c b/arch/arm/mach-omap1/timer32k.c index 20cfbcc6c60c..13d7b8f145bd 100644 --- a/arch/arm/mach-omap1/timer32k.c +++ b/arch/arm/mach-omap1/timer32k.c | |||
@@ -52,10 +52,9 @@ | |||
52 | #include <asm/irq.h> | 52 | #include <asm/irq.h> |
53 | #include <asm/mach/irq.h> | 53 | #include <asm/mach/irq.h> |
54 | #include <asm/mach/time.h> | 54 | #include <asm/mach/time.h> |
55 | #include <plat/common.h> | ||
55 | #include <plat/dmtimer.h> | 56 | #include <plat/dmtimer.h> |
56 | 57 | ||
57 | struct sys_timer omap_timer; | ||
58 | |||
59 | /* | 58 | /* |
60 | * --------------------------------------------------------------------------- | 59 | * --------------------------------------------------------------------------- |
61 | * 32KHz OS timer | 60 | * 32KHz OS timer |
@@ -181,14 +180,14 @@ static __init void omap_init_32k_timer(void) | |||
181 | * Timer initialization | 180 | * Timer initialization |
182 | * --------------------------------------------------------------------------- | 181 | * --------------------------------------------------------------------------- |
183 | */ | 182 | */ |
184 | static void __init omap_timer_init(void) | 183 | bool __init omap_32k_timer_init(void) |
185 | { | 184 | { |
185 | omap_init_clocksource_32k(); | ||
186 | |||
186 | #ifdef CONFIG_OMAP_DM_TIMER | 187 | #ifdef CONFIG_OMAP_DM_TIMER |
187 | omap_dm_timer_init(); | 188 | omap_dm_timer_init(); |
188 | #endif | 189 | #endif |
189 | omap_init_32k_timer(); | 190 | omap_init_32k_timer(); |
190 | } | ||
191 | 191 | ||
192 | struct sys_timer omap_timer = { | 192 | return true; |
193 | .init = omap_timer_init, | 193 | } |
194 | }; | ||
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c index 5b0c77732dfc..8f9a64d650ee 100644 --- a/arch/arm/mach-omap2/board-cm-t3517.c +++ b/arch/arm/mach-omap2/board-cm-t3517.c | |||
@@ -124,8 +124,9 @@ static inline void cm_t3517_init_hecc(void) {} | |||
124 | #if defined(CONFIG_RTC_DRV_V3020) || defined(CONFIG_RTC_DRV_V3020_MODULE) | 124 | #if defined(CONFIG_RTC_DRV_V3020) || defined(CONFIG_RTC_DRV_V3020_MODULE) |
125 | #define RTC_IO_GPIO (153) | 125 | #define RTC_IO_GPIO (153) |
126 | #define RTC_WR_GPIO (154) | 126 | #define RTC_WR_GPIO (154) |
127 | #define RTC_RD_GPIO (160) | 127 | #define RTC_RD_GPIO (53) |
128 | #define RTC_CS_GPIO (163) | 128 | #define RTC_CS_GPIO (163) |
129 | #define RTC_CS_EN_GPIO (160) | ||
129 | 130 | ||
130 | struct v3020_platform_data cm_t3517_v3020_pdata = { | 131 | struct v3020_platform_data cm_t3517_v3020_pdata = { |
131 | .use_gpio = 1, | 132 | .use_gpio = 1, |
@@ -145,6 +146,16 @@ static struct platform_device cm_t3517_rtc_device = { | |||
145 | 146 | ||
146 | static void __init cm_t3517_init_rtc(void) | 147 | static void __init cm_t3517_init_rtc(void) |
147 | { | 148 | { |
149 | int err; | ||
150 | |||
151 | err = gpio_request(RTC_CS_EN_GPIO, "rtc cs en"); | ||
152 | if (err) { | ||
153 | pr_err("CM-T3517: rtc cs en gpio request failed: %d\n", err); | ||
154 | return; | ||
155 | } | ||
156 | |||
157 | gpio_direction_output(RTC_CS_EN_GPIO, 1); | ||
158 | |||
148 | platform_device_register(&cm_t3517_rtc_device); | 159 | platform_device_register(&cm_t3517_rtc_device); |
149 | } | 160 | } |
150 | #else | 161 | #else |
@@ -214,12 +225,12 @@ static struct mtd_partition cm_t3517_nand_partitions[] = { | |||
214 | }, | 225 | }, |
215 | { | 226 | { |
216 | .name = "linux", | 227 | .name = "linux", |
217 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ | 228 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x2A0000 */ |
218 | .size = 32 * NAND_BLOCK_SIZE, | 229 | .size = 32 * NAND_BLOCK_SIZE, |
219 | }, | 230 | }, |
220 | { | 231 | { |
221 | .name = "rootfs", | 232 | .name = "rootfs", |
222 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x680000 */ | 233 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x6A0000 */ |
223 | .size = MTDPART_SIZ_FULL, | 234 | .size = MTDPART_SIZ_FULL, |
224 | }, | 235 | }, |
225 | }; | 236 | }; |
@@ -256,11 +267,19 @@ static void __init cm_t3517_init_irq(void) | |||
256 | static struct omap_board_mux board_mux[] __initdata = { | 267 | static struct omap_board_mux board_mux[] __initdata = { |
257 | /* GPIO186 - Green LED */ | 268 | /* GPIO186 - Green LED */ |
258 | OMAP3_MUX(SYS_CLKOUT2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), | 269 | OMAP3_MUX(SYS_CLKOUT2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), |
259 | /* RTC GPIOs: IO, WR#, RD#, CS# */ | 270 | |
271 | /* RTC GPIOs: */ | ||
272 | /* IO - GPIO153 */ | ||
260 | OMAP3_MUX(MCBSP4_DR, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), | 273 | OMAP3_MUX(MCBSP4_DR, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), |
274 | /* WR# - GPIO154 */ | ||
261 | OMAP3_MUX(MCBSP4_DX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), | 275 | OMAP3_MUX(MCBSP4_DX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), |
262 | OMAP3_MUX(MCBSP_CLKS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), | 276 | /* RD# - GPIO53 */ |
277 | OMAP3_MUX(GPMC_NCS2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), | ||
278 | /* CS# - GPIO163 */ | ||
263 | OMAP3_MUX(UART3_CTS_RCTX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), | 279 | OMAP3_MUX(UART3_CTS_RCTX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), |
280 | /* CS EN - GPIO160 */ | ||
281 | OMAP3_MUX(MCBSP_CLKS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), | ||
282 | |||
264 | /* HSUSB1 RESET */ | 283 | /* HSUSB1 RESET */ |
265 | OMAP3_MUX(UART2_TX, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), | 284 | OMAP3_MUX(UART2_TX, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), |
266 | /* HSUSB2 RESET */ | 285 | /* HSUSB2 RESET */ |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 00bb1fc5e017..9a2a31e011ce 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
@@ -115,9 +115,6 @@ static struct omap2_hsmmc_info mmc[] = { | |||
115 | 115 | ||
116 | static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev) | 116 | static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev) |
117 | { | 117 | { |
118 | twl_i2c_write_u8(TWL4030_MODULE_GPIO, 0x80, REG_GPIODATADIR1); | ||
119 | twl_i2c_write_u8(TWL4030_MODULE_LED, 0x0, 0x0); | ||
120 | |||
121 | if (gpio_is_valid(dssdev->reset_gpio)) | 118 | if (gpio_is_valid(dssdev->reset_gpio)) |
122 | gpio_set_value_cansleep(dssdev->reset_gpio, 1); | 119 | gpio_set_value_cansleep(dssdev->reset_gpio, 1); |
123 | return 0; | 120 | return 0; |
@@ -247,6 +244,8 @@ static struct gpio_led gpio_leds[]; | |||
247 | static int devkit8000_twl_gpio_setup(struct device *dev, | 244 | static int devkit8000_twl_gpio_setup(struct device *dev, |
248 | unsigned gpio, unsigned ngpio) | 245 | unsigned gpio, unsigned ngpio) |
249 | { | 246 | { |
247 | int ret; | ||
248 | |||
250 | omap_mux_init_gpio(29, OMAP_PIN_INPUT); | 249 | omap_mux_init_gpio(29, OMAP_PIN_INPUT); |
251 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 250 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
252 | mmc[0].gpio_cd = gpio + 0; | 251 | mmc[0].gpio_cd = gpio + 0; |
@@ -255,17 +254,23 @@ static int devkit8000_twl_gpio_setup(struct device *dev, | |||
255 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ | 254 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ |
256 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; | 255 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; |
257 | 256 | ||
258 | /* gpio + 1 is "LCD_PWREN" (out, active high) */ | 257 | /* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */ |
259 | devkit8000_lcd_device.reset_gpio = gpio + 1; | 258 | devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0; |
260 | gpio_request(devkit8000_lcd_device.reset_gpio, "LCD_PWREN"); | 259 | ret = gpio_request_one(devkit8000_lcd_device.reset_gpio, |
261 | /* Disable until needed */ | 260 | GPIOF_DIR_OUT | GPIOF_INIT_LOW, "LCD_PWREN"); |
262 | gpio_direction_output(devkit8000_lcd_device.reset_gpio, 0); | 261 | if (ret < 0) { |
262 | devkit8000_lcd_device.reset_gpio = -EINVAL; | ||
263 | printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n"); | ||
264 | } | ||
263 | 265 | ||
264 | /* gpio + 7 is "DVI_PD" (out, active low) */ | 266 | /* gpio + 7 is "DVI_PD" (out, active low) */ |
265 | devkit8000_dvi_device.reset_gpio = gpio + 7; | 267 | devkit8000_dvi_device.reset_gpio = gpio + 7; |
266 | gpio_request(devkit8000_dvi_device.reset_gpio, "DVI PowerDown"); | 268 | ret = gpio_request_one(devkit8000_dvi_device.reset_gpio, |
267 | /* Disable until needed */ | 269 | GPIOF_DIR_OUT | GPIOF_INIT_LOW, "DVI PowerDown"); |
268 | gpio_direction_output(devkit8000_dvi_device.reset_gpio, 0); | 270 | if (ret < 0) { |
271 | devkit8000_dvi_device.reset_gpio = -EINVAL; | ||
272 | printk(KERN_ERR "Failed to request GPIO for DVI PowerDown\n"); | ||
273 | } | ||
269 | 274 | ||
270 | return 0; | 275 | return 0; |
271 | } | 276 | } |
@@ -275,8 +280,7 @@ static struct twl4030_gpio_platform_data devkit8000_gpio_data = { | |||
275 | .irq_base = TWL4030_GPIO_IRQ_BASE, | 280 | .irq_base = TWL4030_GPIO_IRQ_BASE, |
276 | .irq_end = TWL4030_GPIO_IRQ_END, | 281 | .irq_end = TWL4030_GPIO_IRQ_END, |
277 | .use_leds = true, | 282 | .use_leds = true, |
278 | .pullups = BIT(1), | 283 | .pulldowns = BIT(1) | BIT(2) | BIT(6) | BIT(8) | BIT(13) |
279 | .pulldowns = BIT(2) | BIT(6) | BIT(7) | BIT(8) | BIT(13) | ||
280 | | BIT(15) | BIT(16) | BIT(17), | 284 | | BIT(15) | BIT(16) | BIT(17), |
281 | .setup = devkit8000_twl_gpio_setup, | 285 | .setup = devkit8000_twl_gpio_setup, |
282 | }; | 286 | }; |
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index e001a048dc0c..e944025d5ef8 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c | |||
@@ -409,8 +409,6 @@ static void __init omap4_panda_init(void) | |||
409 | platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices)); | 409 | platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices)); |
410 | omap_serial_init(); | 410 | omap_serial_init(); |
411 | omap4_twl6030_hsmmc_init(mmc); | 411 | omap4_twl6030_hsmmc_init(mmc); |
412 | /* OMAP4 Panda uses internal transceiver so register nop transceiver */ | ||
413 | usb_nop_xceiv_register(); | ||
414 | omap4_ehci_init(); | 412 | omap4_ehci_init(); |
415 | usb_musb_init(&musb_board_data); | 413 | usb_musb_init(&musb_board_data); |
416 | } | 414 | } |
diff --git a/arch/arm/mach-omap2/board-rm680.c b/arch/arm/mach-omap2/board-rm680.c index cb77be7ac44f..39a71bb8a308 100644 --- a/arch/arm/mach-omap2/board-rm680.c +++ b/arch/arm/mach-omap2/board-rm680.c | |||
@@ -40,9 +40,6 @@ static struct regulator_consumer_supply rm680_vemmc_consumers[] = { | |||
40 | static struct regulator_init_data rm680_vemmc = { | 40 | static struct regulator_init_data rm680_vemmc = { |
41 | .constraints = { | 41 | .constraints = { |
42 | .name = "rm680_vemmc", | 42 | .name = "rm680_vemmc", |
43 | .min_uV = 2900000, | ||
44 | .max_uV = 2900000, | ||
45 | .apply_uV = 1, | ||
46 | .valid_modes_mask = REGULATOR_MODE_NORMAL | 43 | .valid_modes_mask = REGULATOR_MODE_NORMAL |
47 | | REGULATOR_MODE_STANDBY, | 44 | | REGULATOR_MODE_STANDBY, |
48 | .valid_ops_mask = REGULATOR_CHANGE_STATUS | 45 | .valid_ops_mask = REGULATOR_CHANGE_STATUS |
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c index e8cb32fd7f13..de9ec8ddd2ae 100644 --- a/arch/arm/mach-omap2/clock44xx_data.c +++ b/arch/arm/mach-omap2/clock44xx_data.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include "cm2_44xx.h" | 34 | #include "cm2_44xx.h" |
35 | #include "cm-regbits-44xx.h" | 35 | #include "cm-regbits-44xx.h" |
36 | #include "prm44xx.h" | 36 | #include "prm44xx.h" |
37 | #include "prm44xx.h" | ||
38 | #include "prm-regbits-44xx.h" | 37 | #include "prm-regbits-44xx.h" |
39 | #include "control.h" | 38 | #include "control.h" |
40 | #include "scrm44xx.h" | 39 | #include "scrm44xx.h" |
diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c index e20b98636ab4..58e42f76603f 100644 --- a/arch/arm/mach-omap2/clockdomain.c +++ b/arch/arm/mach-omap2/clockdomain.c | |||
@@ -423,6 +423,12 @@ int clkdm_add_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2) | |||
423 | { | 423 | { |
424 | struct clkdm_dep *cd; | 424 | struct clkdm_dep *cd; |
425 | 425 | ||
426 | if (!cpu_is_omap24xx() && !cpu_is_omap34xx()) { | ||
427 | pr_err("clockdomain: %s/%s: %s: not yet implemented\n", | ||
428 | clkdm1->name, clkdm2->name, __func__); | ||
429 | return -EINVAL; | ||
430 | } | ||
431 | |||
426 | if (!clkdm1 || !clkdm2) | 432 | if (!clkdm1 || !clkdm2) |
427 | return -EINVAL; | 433 | return -EINVAL; |
428 | 434 | ||
@@ -458,6 +464,12 @@ int clkdm_del_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2) | |||
458 | { | 464 | { |
459 | struct clkdm_dep *cd; | 465 | struct clkdm_dep *cd; |
460 | 466 | ||
467 | if (!cpu_is_omap24xx() && !cpu_is_omap34xx()) { | ||
468 | pr_err("clockdomain: %s/%s: %s: not yet implemented\n", | ||
469 | clkdm1->name, clkdm2->name, __func__); | ||
470 | return -EINVAL; | ||
471 | } | ||
472 | |||
461 | if (!clkdm1 || !clkdm2) | 473 | if (!clkdm1 || !clkdm2) |
462 | return -EINVAL; | 474 | return -EINVAL; |
463 | 475 | ||
@@ -500,6 +512,12 @@ int clkdm_read_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2) | |||
500 | if (!clkdm1 || !clkdm2) | 512 | if (!clkdm1 || !clkdm2) |
501 | return -EINVAL; | 513 | return -EINVAL; |
502 | 514 | ||
515 | if (!cpu_is_omap24xx() && !cpu_is_omap34xx()) { | ||
516 | pr_err("clockdomain: %s/%s: %s: not yet implemented\n", | ||
517 | clkdm1->name, clkdm2->name, __func__); | ||
518 | return -EINVAL; | ||
519 | } | ||
520 | |||
503 | cd = _clkdm_deps_lookup(clkdm2, clkdm1->wkdep_srcs); | 521 | cd = _clkdm_deps_lookup(clkdm2, clkdm1->wkdep_srcs); |
504 | if (IS_ERR(cd)) { | 522 | if (IS_ERR(cd)) { |
505 | pr_debug("clockdomain: hardware cannot set/clear wake up of " | 523 | pr_debug("clockdomain: hardware cannot set/clear wake up of " |
@@ -527,6 +545,12 @@ int clkdm_clear_all_wkdeps(struct clockdomain *clkdm) | |||
527 | struct clkdm_dep *cd; | 545 | struct clkdm_dep *cd; |
528 | u32 mask = 0; | 546 | u32 mask = 0; |
529 | 547 | ||
548 | if (!cpu_is_omap24xx() && !cpu_is_omap34xx()) { | ||
549 | pr_err("clockdomain: %s: %s: not yet implemented\n", | ||
550 | clkdm->name, __func__); | ||
551 | return -EINVAL; | ||
552 | } | ||
553 | |||
530 | if (!clkdm) | 554 | if (!clkdm) |
531 | return -EINVAL; | 555 | return -EINVAL; |
532 | 556 | ||
@@ -830,8 +854,7 @@ void omap2_clkdm_allow_idle(struct clockdomain *clkdm) | |||
830 | * dependency code and data for OMAP4. | 854 | * dependency code and data for OMAP4. |
831 | */ | 855 | */ |
832 | if (cpu_is_omap44xx()) { | 856 | if (cpu_is_omap44xx()) { |
833 | WARN_ONCE(1, "clockdomain: OMAP4 wakeup/sleep dependency " | 857 | pr_err("clockdomain: %s: OMAP4 wakeup/sleep dependency support: not yet implemented\n", clkdm->name); |
834 | "support is not yet implemented\n"); | ||
835 | } else { | 858 | } else { |
836 | if (atomic_read(&clkdm->usecount) > 0) | 859 | if (atomic_read(&clkdm->usecount) > 0) |
837 | _clkdm_add_autodeps(clkdm); | 860 | _clkdm_add_autodeps(clkdm); |
@@ -872,8 +895,7 @@ void omap2_clkdm_deny_idle(struct clockdomain *clkdm) | |||
872 | * dependency code and data for OMAP4. | 895 | * dependency code and data for OMAP4. |
873 | */ | 896 | */ |
874 | if (cpu_is_omap44xx()) { | 897 | if (cpu_is_omap44xx()) { |
875 | WARN_ONCE(1, "clockdomain: OMAP4 wakeup/sleep dependency " | 898 | pr_err("clockdomain: %s: OMAP4 wakeup/sleep dependency support: not yet implemented\n", clkdm->name); |
876 | "support is not yet implemented\n"); | ||
877 | } else { | 899 | } else { |
878 | if (atomic_read(&clkdm->usecount) > 0) | 900 | if (atomic_read(&clkdm->usecount) > 0) |
879 | _clkdm_del_autodeps(clkdm); | 901 | _clkdm_del_autodeps(clkdm); |
diff --git a/arch/arm/mach-omap2/clockdomains44xx_data.c b/arch/arm/mach-omap2/clockdomains44xx_data.c index 51920fc7fc52..10622c914abc 100644 --- a/arch/arm/mach-omap2/clockdomains44xx_data.c +++ b/arch/arm/mach-omap2/clockdomains44xx_data.c | |||
@@ -30,8 +30,6 @@ | |||
30 | #include "cm1_44xx.h" | 30 | #include "cm1_44xx.h" |
31 | #include "cm2_44xx.h" | 31 | #include "cm2_44xx.h" |
32 | 32 | ||
33 | #include "cm1_44xx.h" | ||
34 | #include "cm2_44xx.h" | ||
35 | #include "cm-regbits-44xx.h" | 33 | #include "cm-regbits-44xx.h" |
36 | #include "prm44xx.h" | 34 | #include "prm44xx.h" |
37 | #include "prcm44xx.h" | 35 | #include "prcm44xx.h" |
diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c index d2f15f5cfd36..34922b2d2e3f 100644 --- a/arch/arm/mach-omap2/dma.c +++ b/arch/arm/mach-omap2/dma.c | |||
@@ -264,7 +264,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) | |||
264 | if (IS_ERR(od)) { | 264 | if (IS_ERR(od)) { |
265 | pr_err("%s: Cant build omap_device for %s:%s.\n", | 265 | pr_err("%s: Cant build omap_device for %s:%s.\n", |
266 | __func__, name, oh->name); | 266 | __func__, name, oh->name); |
267 | return IS_ERR(od); | 267 | return PTR_ERR(od); |
268 | } | 268 | } |
269 | 269 | ||
270 | mem = platform_get_resource(&od->pdev, IORESOURCE_MEM, 0); | 270 | mem = platform_get_resource(&od->pdev, IORESOURCE_MEM, 0); |
diff --git a/arch/arm/mach-omap2/include/mach/entry-macro.S b/arch/arm/mach-omap2/include/mach/entry-macro.S index befa321c4c13..81985a665cb3 100644 --- a/arch/arm/mach-omap2/include/mach/entry-macro.S +++ b/arch/arm/mach-omap2/include/mach/entry-macro.S | |||
@@ -38,20 +38,6 @@ | |||
38 | */ | 38 | */ |
39 | 39 | ||
40 | #ifdef MULTI_OMAP2 | 40 | #ifdef MULTI_OMAP2 |
41 | |||
42 | /* | ||
43 | * We use __glue to avoid errors with multiple definitions of | ||
44 | * .globl omap_irq_base as it's included from entry-armv.S but not | ||
45 | * from entry-common.S. | ||
46 | */ | ||
47 | #ifdef __glue | ||
48 | .pushsection .data | ||
49 | .globl omap_irq_base | ||
50 | omap_irq_base: | ||
51 | .word 0 | ||
52 | .popsection | ||
53 | #endif | ||
54 | |||
55 | /* | 41 | /* |
56 | * Configure the interrupt base on the first interrupt. | 42 | * Configure the interrupt base on the first interrupt. |
57 | * See also omap_irq_base_init for setting omap_irq_base. | 43 | * See also omap_irq_base_init for setting omap_irq_base. |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index e66687b0b9de..c2032041d26f 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -314,14 +314,13 @@ static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data) | |||
314 | return omap_hwmod_set_postsetup_state(oh, *(u8 *)data); | 314 | return omap_hwmod_set_postsetup_state(oh, *(u8 *)data); |
315 | } | 315 | } |
316 | 316 | ||
317 | void __iomem *omap_irq_base; | ||
318 | |||
317 | /* | 319 | /* |
318 | * Initialize asm_irq_base for entry-macro.S | 320 | * Initialize asm_irq_base for entry-macro.S |
319 | */ | 321 | */ |
320 | static inline void omap_irq_base_init(void) | 322 | static inline void omap_irq_base_init(void) |
321 | { | 323 | { |
322 | extern void __iomem *omap_irq_base; | ||
323 | |||
324 | #ifdef MULTI_OMAP2 | ||
325 | if (cpu_is_omap24xx()) | 324 | if (cpu_is_omap24xx()) |
326 | omap_irq_base = OMAP2_L4_IO_ADDRESS(OMAP24XX_IC_BASE); | 325 | omap_irq_base = OMAP2_L4_IO_ADDRESS(OMAP24XX_IC_BASE); |
327 | else if (cpu_is_omap34xx()) | 326 | else if (cpu_is_omap34xx()) |
@@ -330,7 +329,6 @@ static inline void omap_irq_base_init(void) | |||
330 | omap_irq_base = OMAP2_L4_IO_ADDRESS(OMAP44XX_GIC_CPU_BASE); | 329 | omap_irq_base = OMAP2_L4_IO_ADDRESS(OMAP44XX_GIC_CPU_BASE); |
331 | else | 330 | else |
332 | pr_err("Could not initialize omap_irq_base\n"); | 331 | pr_err("Could not initialize omap_irq_base\n"); |
333 | #endif | ||
334 | } | 332 | } |
335 | 333 | ||
336 | void __init omap2_init_common_infrastructure(void) | 334 | void __init omap2_init_common_infrastructure(void) |
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index df8d2f2872c6..98148b6c36e9 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
@@ -160,7 +160,7 @@ static int __init _omap_mux_get_by_name(struct omap_mux_partition *partition, | |||
160 | struct omap_mux *mux = NULL; | 160 | struct omap_mux *mux = NULL; |
161 | struct omap_mux_entry *e; | 161 | struct omap_mux_entry *e; |
162 | const char *mode_name; | 162 | const char *mode_name; |
163 | int found = 0, found_mode, mode0_len = 0; | 163 | int found = 0, found_mode = 0, mode0_len = 0; |
164 | struct list_head *muxmodes = &partition->muxmodes; | 164 | struct list_head *muxmodes = &partition->muxmodes; |
165 | 165 | ||
166 | mode_name = strchr(muxname, '.'); | 166 | mode_name = strchr(muxname, '.'); |
@@ -1000,6 +1000,7 @@ int __init omap_mux_init(const char *name, u32 flags, | |||
1000 | if (!partition->base) { | 1000 | if (!partition->base) { |
1001 | pr_err("%s: Could not ioremap mux partition at 0x%08x\n", | 1001 | pr_err("%s: Could not ioremap mux partition at 0x%08x\n", |
1002 | __func__, partition->phys); | 1002 | __func__, partition->phys); |
1003 | kfree(partition); | ||
1003 | return -ENODEV; | 1004 | return -ENODEV; |
1004 | } | 1005 | } |
1005 | 1006 | ||
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c index 9e5dc8ed51e9..97feb3ab6a69 100644 --- a/arch/arm/mach-omap2/pm24xx.c +++ b/arch/arm/mach-omap2/pm24xx.c | |||
@@ -134,7 +134,7 @@ static void omap2_enter_full_retention(void) | |||
134 | 134 | ||
135 | /* Block console output in case it is on one of the OMAP UARTs */ | 135 | /* Block console output in case it is on one of the OMAP UARTs */ |
136 | if (!is_suspending()) | 136 | if (!is_suspending()) |
137 | if (try_acquire_console_sem()) | 137 | if (!console_trylock()) |
138 | goto no_sleep; | 138 | goto no_sleep; |
139 | 139 | ||
140 | omap_uart_prepare_idle(0); | 140 | omap_uart_prepare_idle(0); |
@@ -151,7 +151,7 @@ static void omap2_enter_full_retention(void) | |||
151 | omap_uart_resume_idle(0); | 151 | omap_uart_resume_idle(0); |
152 | 152 | ||
153 | if (!is_suspending()) | 153 | if (!is_suspending()) |
154 | release_console_sem(); | 154 | console_unlock(); |
155 | 155 | ||
156 | no_sleep: | 156 | no_sleep: |
157 | if (omap2_pm_debug) { | 157 | if (omap2_pm_debug) { |
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 8cbbeade4b8a..2f864e4b085d 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -168,9 +168,10 @@ static void omap3_core_restore_context(void) | |||
168 | * once during boot sequence, but this works as we are not using secure | 168 | * once during boot sequence, but this works as we are not using secure |
169 | * services. | 169 | * services. |
170 | */ | 170 | */ |
171 | static void omap3_save_secure_ram_context(u32 target_mpu_state) | 171 | static void omap3_save_secure_ram_context(void) |
172 | { | 172 | { |
173 | u32 ret; | 173 | u32 ret; |
174 | int mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm); | ||
174 | 175 | ||
175 | if (omap_type() != OMAP2_DEVICE_TYPE_GP) { | 176 | if (omap_type() != OMAP2_DEVICE_TYPE_GP) { |
176 | /* | 177 | /* |
@@ -181,7 +182,7 @@ static void omap3_save_secure_ram_context(u32 target_mpu_state) | |||
181 | pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON); | 182 | pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON); |
182 | ret = _omap_save_secure_sram((u32 *) | 183 | ret = _omap_save_secure_sram((u32 *) |
183 | __pa(omap3_secure_ram_storage)); | 184 | __pa(omap3_secure_ram_storage)); |
184 | pwrdm_set_next_pwrst(mpu_pwrdm, target_mpu_state); | 185 | pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state); |
185 | /* Following is for error tracking, it should not happen */ | 186 | /* Following is for error tracking, it should not happen */ |
186 | if (ret) { | 187 | if (ret) { |
187 | printk(KERN_ERR "save_secure_sram() returns %08x\n", | 188 | printk(KERN_ERR "save_secure_sram() returns %08x\n", |
@@ -398,7 +399,7 @@ void omap_sram_idle(void) | |||
398 | if (!is_suspending()) | 399 | if (!is_suspending()) |
399 | if (per_next_state < PWRDM_POWER_ON || | 400 | if (per_next_state < PWRDM_POWER_ON || |
400 | core_next_state < PWRDM_POWER_ON) | 401 | core_next_state < PWRDM_POWER_ON) |
401 | if (try_acquire_console_sem()) | 402 | if (!console_trylock()) |
402 | goto console_still_active; | 403 | goto console_still_active; |
403 | 404 | ||
404 | /* PER */ | 405 | /* PER */ |
@@ -481,7 +482,7 @@ void omap_sram_idle(void) | |||
481 | } | 482 | } |
482 | 483 | ||
483 | if (!is_suspending()) | 484 | if (!is_suspending()) |
484 | release_console_sem(); | 485 | console_unlock(); |
485 | 486 | ||
486 | console_still_active: | 487 | console_still_active: |
487 | /* Disable IO-PAD and IO-CHAIN wakeup */ | 488 | /* Disable IO-PAD and IO-CHAIN wakeup */ |
@@ -1094,7 +1095,7 @@ static int __init omap3_pm_init(void) | |||
1094 | local_fiq_disable(); | 1095 | local_fiq_disable(); |
1095 | 1096 | ||
1096 | omap_dma_global_context_save(); | 1097 | omap_dma_global_context_save(); |
1097 | omap3_save_secure_ram_context(PWRDM_POWER_ON); | 1098 | omap3_save_secure_ram_context(); |
1098 | omap_dma_global_context_restore(); | 1099 | omap_dma_global_context_restore(); |
1099 | 1100 | ||
1100 | local_irq_enable(); | 1101 | local_irq_enable(); |
diff --git a/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c b/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c index d5233890370c..cf600e22bf8e 100644 --- a/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c +++ b/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <plat/prcm.h> | 19 | #include <plat/prcm.h> |
20 | 20 | ||
21 | #include "powerdomain.h" | 21 | #include "powerdomain.h" |
22 | #include "prm-regbits-34xx.h" | ||
23 | #include "prm.h" | 22 | #include "prm.h" |
24 | #include "prm-regbits-24xx.h" | 23 | #include "prm-regbits-24xx.h" |
25 | #include "prm-regbits-34xx.h" | 24 | #include "prm-regbits-34xx.h" |
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index 302da7403a10..32e91a9c8b6b 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
@@ -812,7 +812,7 @@ void __init omap_serial_init_port(struct omap_board_data *bdata) | |||
812 | 812 | ||
813 | oh->dev_attr = uart; | 813 | oh->dev_attr = uart; |
814 | 814 | ||
815 | acquire_console_sem(); /* in case the earlycon is on the UART */ | 815 | console_lock(); /* in case the earlycon is on the UART */ |
816 | 816 | ||
817 | /* | 817 | /* |
818 | * Because of early UART probing, UART did not get idled | 818 | * Because of early UART probing, UART did not get idled |
@@ -838,7 +838,7 @@ void __init omap_serial_init_port(struct omap_board_data *bdata) | |||
838 | omap_uart_block_sleep(uart); | 838 | omap_uart_block_sleep(uart); |
839 | uart->timeout = DEFAULT_TIMEOUT; | 839 | uart->timeout = DEFAULT_TIMEOUT; |
840 | 840 | ||
841 | release_console_sem(); | 841 | console_unlock(); |
842 | 842 | ||
843 | if ((cpu_is_omap34xx() && uart->padconf) || | 843 | if ((cpu_is_omap34xx() && uart->padconf) || |
844 | (uart->wk_en && uart->wk_mask)) { | 844 | (uart->wk_en && uart->wk_mask)) { |
diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index 77ecebf3fae2..c37e823266d3 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c | |||
@@ -780,8 +780,7 @@ static int omap_sr_autocomp_show(void *data, u64 *val) | |||
780 | struct omap_sr *sr_info = (struct omap_sr *) data; | 780 | struct omap_sr *sr_info = (struct omap_sr *) data; |
781 | 781 | ||
782 | if (!sr_info) { | 782 | if (!sr_info) { |
783 | pr_warning("%s: omap_sr struct for sr_%s not found\n", | 783 | pr_warning("%s: omap_sr struct not found\n", __func__); |
784 | __func__, sr_info->voltdm->name); | ||
785 | return -EINVAL; | 784 | return -EINVAL; |
786 | } | 785 | } |
787 | 786 | ||
@@ -795,8 +794,7 @@ static int omap_sr_autocomp_store(void *data, u64 val) | |||
795 | struct omap_sr *sr_info = (struct omap_sr *) data; | 794 | struct omap_sr *sr_info = (struct omap_sr *) data; |
796 | 795 | ||
797 | if (!sr_info) { | 796 | if (!sr_info) { |
798 | pr_warning("%s: omap_sr struct for sr_%s not found\n", | 797 | pr_warning("%s: omap_sr struct not found\n", __func__); |
799 | __func__, sr_info->voltdm->name); | ||
800 | return -EINVAL; | 798 | return -EINVAL; |
801 | } | 799 | } |
802 | 800 | ||
@@ -834,7 +832,8 @@ static int __init omap_sr_probe(struct platform_device *pdev) | |||
834 | 832 | ||
835 | if (!pdata) { | 833 | if (!pdata) { |
836 | dev_err(&pdev->dev, "%s: platform data missing\n", __func__); | 834 | dev_err(&pdev->dev, "%s: platform data missing\n", __func__); |
837 | return -EINVAL; | 835 | ret = -EINVAL; |
836 | goto err_free_devinfo; | ||
838 | } | 837 | } |
839 | 838 | ||
840 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 839 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
@@ -966,7 +965,7 @@ static int __devexit omap_sr_remove(struct platform_device *pdev) | |||
966 | } | 965 | } |
967 | 966 | ||
968 | sr_info = _sr_lookup(pdata->voltdm); | 967 | sr_info = _sr_lookup(pdata->voltdm); |
969 | if (!sr_info) { | 968 | if (IS_ERR(sr_info)) { |
970 | dev_warn(&pdev->dev, "%s: omap_sr struct not found\n", | 969 | dev_warn(&pdev->dev, "%s: omap_sr struct not found\n", |
971 | __func__); | 970 | __func__); |
972 | return -EINVAL; | 971 | return -EINVAL; |
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c index 4e48e786bec7..7b7c2683ae7b 100644 --- a/arch/arm/mach-omap2/timer-gp.c +++ b/arch/arm/mach-omap2/timer-gp.c | |||
@@ -42,6 +42,8 @@ | |||
42 | 42 | ||
43 | #include "timer-gp.h" | 43 | #include "timer-gp.h" |
44 | 44 | ||
45 | #include <plat/common.h> | ||
46 | |||
45 | /* MAX_GPTIMER_ID: number of GPTIMERs on the chip */ | 47 | /* MAX_GPTIMER_ID: number of GPTIMERs on the chip */ |
46 | #define MAX_GPTIMER_ID 12 | 48 | #define MAX_GPTIMER_ID 12 |
47 | 49 | ||
@@ -176,10 +178,14 @@ static void __init omap2_gp_clockevent_init(void) | |||
176 | /* | 178 | /* |
177 | * When 32k-timer is enabled, don't use GPTimer for clocksource | 179 | * When 32k-timer is enabled, don't use GPTimer for clocksource |
178 | * instead, just leave default clocksource which uses the 32k | 180 | * instead, just leave default clocksource which uses the 32k |
179 | * sync counter. See clocksource setup in see plat-omap/common.c. | 181 | * sync counter. See clocksource setup in plat-omap/counter_32k.c |
180 | */ | 182 | */ |
181 | 183 | ||
182 | static inline void __init omap2_gp_clocksource_init(void) {} | 184 | static void __init omap2_gp_clocksource_init(void) |
185 | { | ||
186 | omap_init_clocksource_32k(); | ||
187 | } | ||
188 | |||
183 | #else | 189 | #else |
184 | /* | 190 | /* |
185 | * clocksource | 191 | * clocksource |
diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c index ed6079c94c57..12be525b8df4 100644 --- a/arch/arm/mach-omap2/voltage.c +++ b/arch/arm/mach-omap2/voltage.c | |||
@@ -471,6 +471,7 @@ static void __init vdd_debugfs_init(struct omap_vdd_info *vdd) | |||
471 | strcat(name, vdd->voltdm.name); | 471 | strcat(name, vdd->voltdm.name); |
472 | 472 | ||
473 | vdd->debug_dir = debugfs_create_dir(name, voltage_dir); | 473 | vdd->debug_dir = debugfs_create_dir(name, voltage_dir); |
474 | kfree(name); | ||
474 | if (IS_ERR(vdd->debug_dir)) { | 475 | if (IS_ERR(vdd->debug_dir)) { |
475 | pr_warning("%s: Unable to create debugfs directory for" | 476 | pr_warning("%s: Unable to create debugfs directory for" |
476 | " vdd_%s\n", __func__, vdd->voltdm.name); | 477 | " vdd_%s\n", __func__, vdd->voltdm.name); |
diff --git a/arch/arm/mach-realview/Kconfig b/arch/arm/mach-realview/Kconfig index b4575ae9648e..7ca138a943a9 100644 --- a/arch/arm/mach-realview/Kconfig +++ b/arch/arm/mach-realview/Kconfig | |||
@@ -2,52 +2,56 @@ menu "RealView platform type" | |||
2 | depends on ARCH_REALVIEW | 2 | depends on ARCH_REALVIEW |
3 | 3 | ||
4 | config MACH_REALVIEW_EB | 4 | config MACH_REALVIEW_EB |
5 | bool "Support RealView/EB platform" | 5 | bool "Support RealView(R) Emulation Baseboard" |
6 | select ARM_GIC | 6 | select ARM_GIC |
7 | help | 7 | help |
8 | Include support for the ARM(R) RealView Emulation Baseboard platform. | 8 | Include support for the ARM(R) RealView(R) Emulation Baseboard |
9 | platform. | ||
9 | 10 | ||
10 | config REALVIEW_EB_A9MP | 11 | config REALVIEW_EB_A9MP |
11 | bool "Support Multicore Cortex-A9" | 12 | bool "Support Multicore Cortex-A9 Tile" |
12 | depends on MACH_REALVIEW_EB | 13 | depends on MACH_REALVIEW_EB |
13 | select CPU_V7 | 14 | select CPU_V7 |
14 | help | 15 | help |
15 | Enable support for the Cortex-A9MPCore tile on the Realview platform. | 16 | Enable support for the Cortex-A9MPCore tile fitted to the |
17 | Realview(R) Emulation Baseboard platform. | ||
16 | 18 | ||
17 | config REALVIEW_EB_ARM11MP | 19 | config REALVIEW_EB_ARM11MP |
18 | bool "Support ARM11MPCore tile" | 20 | bool "Support ARM11MPCore Tile" |
19 | depends on MACH_REALVIEW_EB | 21 | depends on MACH_REALVIEW_EB |
20 | select CPU_V6 | 22 | select CPU_V6 |
21 | select ARCH_HAS_BARRIERS if SMP | 23 | select ARCH_HAS_BARRIERS if SMP |
22 | help | 24 | help |
23 | Enable support for the ARM11MPCore tile on the Realview platform. | 25 | Enable support for the ARM11MPCore tile fitted to the Realview(R) |
26 | Emulation Baseboard platform. | ||
24 | 27 | ||
25 | config REALVIEW_EB_ARM11MP_REVB | 28 | config REALVIEW_EB_ARM11MP_REVB |
26 | bool "Support ARM11MPCore RevB tile" | 29 | bool "Support ARM11MPCore RevB Tile" |
27 | depends on REALVIEW_EB_ARM11MP | 30 | depends on REALVIEW_EB_ARM11MP |
28 | help | 31 | help |
29 | Enable support for the ARM11MPCore RevB tile on the Realview | 32 | Enable support for the ARM11MPCore Revision B tile on the |
30 | platform. Since there are device address differences, a | 33 | Realview(R) Emulation Baseboard platform. Since there are device |
31 | kernel built with this option enabled is not compatible with | 34 | address differences, a kernel built with this option enabled is |
32 | other revisions of the ARM11MPCore tile. | 35 | not compatible with other revisions of the ARM11MPCore tile. |
33 | 36 | ||
34 | config MACH_REALVIEW_PB11MP | 37 | config MACH_REALVIEW_PB11MP |
35 | bool "Support RealView/PB11MPCore platform" | 38 | bool "Support RealView(R) Platform Baseboard for ARM11MPCore" |
36 | select CPU_V6 | 39 | select CPU_V6 |
37 | select ARM_GIC | 40 | select ARM_GIC |
38 | select HAVE_PATA_PLATFORM | 41 | select HAVE_PATA_PLATFORM |
39 | select ARCH_HAS_BARRIERS if SMP | 42 | select ARCH_HAS_BARRIERS if SMP |
40 | help | 43 | help |
41 | Include support for the ARM(R) RealView MPCore Platform Baseboard. | 44 | Include support for the ARM(R) RealView(R) Platform Baseboard for |
42 | PB11MPCore is a platform with an on-board ARM11MPCore and has | 45 | the ARM11MPCore. This platform has an on-board ARM11MPCore and has |
43 | support for PCI-E and Compact Flash. | 46 | support for PCI-E and Compact Flash. |
44 | 47 | ||
45 | config MACH_REALVIEW_PB1176 | 48 | config MACH_REALVIEW_PB1176 |
46 | bool "Support RealView/PB1176 platform" | 49 | bool "Support RealView(R) Platform Baseboard for ARM1176JZF-S" |
47 | select CPU_V6 | 50 | select CPU_V6 |
48 | select ARM_GIC | 51 | select ARM_GIC |
49 | help | 52 | help |
50 | Include support for the ARM(R) RealView ARM1176 Platform Baseboard. | 53 | Include support for the ARM(R) RealView(R) Platform Baseboard for |
54 | ARM1176JZF-S. | ||
51 | 55 | ||
52 | config REALVIEW_PB1176_SECURE_FLASH | 56 | config REALVIEW_PB1176_SECURE_FLASH |
53 | bool "Allow access to the secure flash memory block" | 57 | bool "Allow access to the secure flash memory block" |
@@ -59,23 +63,24 @@ config REALVIEW_PB1176_SECURE_FLASH | |||
59 | block (64MB @ 0x3c000000) is required. | 63 | block (64MB @ 0x3c000000) is required. |
60 | 64 | ||
61 | config MACH_REALVIEW_PBA8 | 65 | config MACH_REALVIEW_PBA8 |
62 | bool "Support RealView/PB-A8 platform" | 66 | bool "Support RealView(R) Platform Baseboard for Cortex(tm)-A8 platform" |
63 | select CPU_V7 | 67 | select CPU_V7 |
64 | select ARM_GIC | 68 | select ARM_GIC |
65 | select HAVE_PATA_PLATFORM | 69 | select HAVE_PATA_PLATFORM |
66 | help | 70 | help |
67 | Include support for the ARM(R) RealView Cortex-A8 Platform Baseboard. | 71 | Include support for the ARM(R) RealView Platform Baseboard for |
68 | PB-A8 is a platform with an on-board Cortex-A8 and has support for | 72 | Cortex(tm)-A8. This platform has an on-board Cortex-A8 and has |
69 | PCI-E and Compact Flash. | 73 | support for PCI-E and Compact Flash. |
70 | 74 | ||
71 | config MACH_REALVIEW_PBX | 75 | config MACH_REALVIEW_PBX |
72 | bool "Support RealView/PBX platform" | 76 | bool "Support RealView(R) Platform Baseboard Explore" |
73 | select ARM_GIC | 77 | select ARM_GIC |
74 | select HAVE_PATA_PLATFORM | 78 | select HAVE_PATA_PLATFORM |
75 | select ARCH_SPARSEMEM_ENABLE if CPU_V7 && !REALVIEW_HIGH_PHYS_OFFSET | 79 | select ARCH_SPARSEMEM_ENABLE if CPU_V7 && !REALVIEW_HIGH_PHYS_OFFSET |
76 | select ZONE_DMA if SPARSEMEM | 80 | select ZONE_DMA if SPARSEMEM |
77 | help | 81 | help |
78 | Include support for the ARM(R) RealView PBX platform. | 82 | Include support for the ARM(R) RealView(R) Platform Baseboard |
83 | Explore. | ||
79 | 84 | ||
80 | config REALVIEW_HIGH_PHYS_OFFSET | 85 | config REALVIEW_HIGH_PHYS_OFFSET |
81 | bool "High physical base address for the RealView platform" | 86 | bool "High physical base address for the RealView platform" |
diff --git a/arch/arm/mach-realview/platsmp.c b/arch/arm/mach-realview/platsmp.c index a22bf67f2f78..6959d13d908a 100644 --- a/arch/arm/mach-realview/platsmp.c +++ b/arch/arm/mach-realview/platsmp.c | |||
@@ -41,7 +41,7 @@ volatile int __cpuinitdata pen_release = -1; | |||
41 | * observers, irrespective of whether they're taking part in coherency | 41 | * observers, irrespective of whether they're taking part in coherency |
42 | * or not. This is necessary for the hotplug code to work reliably. | 42 | * or not. This is necessary for the hotplug code to work reliably. |
43 | */ | 43 | */ |
44 | static void write_pen_release(int val) | 44 | static void __cpuinit write_pen_release(int val) |
45 | { | 45 | { |
46 | pen_release = val; | 46 | pen_release = val; |
47 | smp_wmb(); | 47 | smp_wmb(); |
diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig index 4d1b4c5c9389..0c8f6cf3e948 100644 --- a/arch/arm/mach-shmobile/Kconfig +++ b/arch/arm/mach-shmobile/Kconfig | |||
@@ -60,6 +60,8 @@ endchoice | |||
60 | 60 | ||
61 | config MACH_AG5EVM | 61 | config MACH_AG5EVM |
62 | bool "AG5EVM board" | 62 | bool "AG5EVM board" |
63 | select ARCH_REQUIRE_GPIOLIB | ||
64 | select SH_LCD_MIPI_DSI | ||
63 | depends on ARCH_SH73A0 | 65 | depends on ARCH_SH73A0 |
64 | 66 | ||
65 | config MACH_MACKEREL | 67 | config MACH_MACKEREL |
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index c18a740a4159..2123b96b5638 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c | |||
@@ -34,9 +34,10 @@ | |||
34 | #include <linux/input/sh_keysc.h> | 34 | #include <linux/input/sh_keysc.h> |
35 | #include <linux/mmc/host.h> | 35 | #include <linux/mmc/host.h> |
36 | #include <linux/mmc/sh_mmcif.h> | 36 | #include <linux/mmc/sh_mmcif.h> |
37 | 37 | #include <linux/sh_clk.h> | |
38 | #include <video/sh_mobile_lcdc.h> | ||
39 | #include <video/sh_mipi_dsi.h> | ||
38 | #include <sound/sh_fsi.h> | 40 | #include <sound/sh_fsi.h> |
39 | |||
40 | #include <mach/hardware.h> | 41 | #include <mach/hardware.h> |
41 | #include <mach/sh73a0.h> | 42 | #include <mach/sh73a0.h> |
42 | #include <mach/common.h> | 43 | #include <mach/common.h> |
@@ -183,11 +184,165 @@ static struct platform_device mmc_device = { | |||
183 | .resource = sh_mmcif_resources, | 184 | .resource = sh_mmcif_resources, |
184 | }; | 185 | }; |
185 | 186 | ||
187 | /* IrDA */ | ||
188 | static struct resource irda_resources[] = { | ||
189 | [0] = { | ||
190 | .start = 0xE6D00000, | ||
191 | .end = 0xE6D01FD4 - 1, | ||
192 | .flags = IORESOURCE_MEM, | ||
193 | }, | ||
194 | [1] = { | ||
195 | .start = gic_spi(95), | ||
196 | .flags = IORESOURCE_IRQ, | ||
197 | }, | ||
198 | }; | ||
199 | |||
200 | static struct platform_device irda_device = { | ||
201 | .name = "sh_irda", | ||
202 | .id = 0, | ||
203 | .resource = irda_resources, | ||
204 | .num_resources = ARRAY_SIZE(irda_resources), | ||
205 | }; | ||
206 | |||
207 | static unsigned char lcd_backlight_seq[3][2] = { | ||
208 | { 0x04, 0x07 }, | ||
209 | { 0x23, 0x80 }, | ||
210 | { 0x03, 0x01 }, | ||
211 | }; | ||
212 | |||
213 | static void lcd_backlight_on(void) | ||
214 | { | ||
215 | struct i2c_adapter *a; | ||
216 | struct i2c_msg msg; | ||
217 | int k; | ||
218 | |||
219 | a = i2c_get_adapter(1); | ||
220 | for (k = 0; a && k < 3; k++) { | ||
221 | msg.addr = 0x6d; | ||
222 | msg.buf = &lcd_backlight_seq[k][0]; | ||
223 | msg.len = 2; | ||
224 | msg.flags = 0; | ||
225 | if (i2c_transfer(a, &msg, 1) != 1) | ||
226 | break; | ||
227 | } | ||
228 | } | ||
229 | |||
230 | static void lcd_backlight_reset(void) | ||
231 | { | ||
232 | gpio_set_value(GPIO_PORT235, 0); | ||
233 | mdelay(24); | ||
234 | gpio_set_value(GPIO_PORT235, 1); | ||
235 | } | ||
236 | |||
237 | static void lcd_on(void *board_data, struct fb_info *info) | ||
238 | { | ||
239 | lcd_backlight_on(); | ||
240 | } | ||
241 | |||
242 | static void lcd_off(void *board_data) | ||
243 | { | ||
244 | lcd_backlight_reset(); | ||
245 | } | ||
246 | |||
247 | /* LCDC0 */ | ||
248 | static const struct fb_videomode lcdc0_modes[] = { | ||
249 | { | ||
250 | .name = "R63302(QHD)", | ||
251 | .xres = 544, | ||
252 | .yres = 961, | ||
253 | .left_margin = 72, | ||
254 | .right_margin = 600, | ||
255 | .hsync_len = 16, | ||
256 | .upper_margin = 8, | ||
257 | .lower_margin = 8, | ||
258 | .vsync_len = 2, | ||
259 | .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_HOR_HIGH_ACT, | ||
260 | }, | ||
261 | }; | ||
262 | |||
263 | static struct sh_mobile_lcdc_info lcdc0_info = { | ||
264 | .clock_source = LCDC_CLK_PERIPHERAL, | ||
265 | .ch[0] = { | ||
266 | .chan = LCDC_CHAN_MAINLCD, | ||
267 | .interface_type = RGB24, | ||
268 | .clock_divider = 1, | ||
269 | .flags = LCDC_FLAGS_DWPOL, | ||
270 | .lcd_size_cfg.width = 44, | ||
271 | .lcd_size_cfg.height = 79, | ||
272 | .bpp = 16, | ||
273 | .lcd_cfg = lcdc0_modes, | ||
274 | .num_cfg = ARRAY_SIZE(lcdc0_modes), | ||
275 | .board_cfg = { | ||
276 | .display_on = lcd_on, | ||
277 | .display_off = lcd_off, | ||
278 | }, | ||
279 | } | ||
280 | }; | ||
281 | |||
282 | static struct resource lcdc0_resources[] = { | ||
283 | [0] = { | ||
284 | .name = "LCDC0", | ||
285 | .start = 0xfe940000, /* P4-only space */ | ||
286 | .end = 0xfe943fff, | ||
287 | .flags = IORESOURCE_MEM, | ||
288 | }, | ||
289 | [1] = { | ||
290 | .start = intcs_evt2irq(0x580), | ||
291 | .flags = IORESOURCE_IRQ, | ||
292 | }, | ||
293 | }; | ||
294 | |||
295 | static struct platform_device lcdc0_device = { | ||
296 | .name = "sh_mobile_lcdc_fb", | ||
297 | .num_resources = ARRAY_SIZE(lcdc0_resources), | ||
298 | .resource = lcdc0_resources, | ||
299 | .id = 0, | ||
300 | .dev = { | ||
301 | .platform_data = &lcdc0_info, | ||
302 | .coherent_dma_mask = ~0, | ||
303 | }, | ||
304 | }; | ||
305 | |||
306 | /* MIPI-DSI */ | ||
307 | static struct resource mipidsi0_resources[] = { | ||
308 | [0] = { | ||
309 | .start = 0xfeab0000, | ||
310 | .end = 0xfeab3fff, | ||
311 | .flags = IORESOURCE_MEM, | ||
312 | }, | ||
313 | [1] = { | ||
314 | .start = 0xfeab4000, | ||
315 | .end = 0xfeab7fff, | ||
316 | .flags = IORESOURCE_MEM, | ||
317 | }, | ||
318 | }; | ||
319 | |||
320 | static struct sh_mipi_dsi_info mipidsi0_info = { | ||
321 | .data_format = MIPI_RGB888, | ||
322 | .lcd_chan = &lcdc0_info.ch[0], | ||
323 | .vsynw_offset = 20, | ||
324 | .clksrc = 1, | ||
325 | .flags = SH_MIPI_DSI_HSABM, | ||
326 | }; | ||
327 | |||
328 | static struct platform_device mipidsi0_device = { | ||
329 | .name = "sh-mipi-dsi", | ||
330 | .num_resources = ARRAY_SIZE(mipidsi0_resources), | ||
331 | .resource = mipidsi0_resources, | ||
332 | .id = 0, | ||
333 | .dev = { | ||
334 | .platform_data = &mipidsi0_info, | ||
335 | }, | ||
336 | }; | ||
337 | |||
186 | static struct platform_device *ag5evm_devices[] __initdata = { | 338 | static struct platform_device *ag5evm_devices[] __initdata = { |
187 | ð_device, | 339 | ð_device, |
188 | &keysc_device, | 340 | &keysc_device, |
189 | &fsi_device, | 341 | &fsi_device, |
190 | &mmc_device, | 342 | &mmc_device, |
343 | &irda_device, | ||
344 | &lcdc0_device, | ||
345 | &mipidsi0_device, | ||
191 | }; | 346 | }; |
192 | 347 | ||
193 | static struct map_desc ag5evm_io_desc[] __initdata = { | 348 | static struct map_desc ag5evm_io_desc[] __initdata = { |
@@ -224,6 +379,8 @@ void __init ag5evm_init_irq(void) | |||
224 | __raw_writew(__raw_readw(PINTCR0A) | (2<<10), PINTCR0A); | 379 | __raw_writew(__raw_readw(PINTCR0A) | (2<<10), PINTCR0A); |
225 | } | 380 | } |
226 | 381 | ||
382 | #define DSI0PHYCR 0xe615006c | ||
383 | |||
227 | static void __init ag5evm_init(void) | 384 | static void __init ag5evm_init(void) |
228 | { | 385 | { |
229 | sh73a0_pinmux_init(); | 386 | sh73a0_pinmux_init(); |
@@ -287,6 +444,25 @@ static void __init ag5evm_init(void) | |||
287 | gpio_request(GPIO_FN_FSIAISLD, NULL); | 444 | gpio_request(GPIO_FN_FSIAISLD, NULL); |
288 | gpio_request(GPIO_FN_FSIAOSLD, NULL); | 445 | gpio_request(GPIO_FN_FSIAOSLD, NULL); |
289 | 446 | ||
447 | /* IrDA */ | ||
448 | gpio_request(GPIO_FN_PORT241_IRDA_OUT, NULL); | ||
449 | gpio_request(GPIO_FN_PORT242_IRDA_IN, NULL); | ||
450 | gpio_request(GPIO_FN_PORT243_IRDA_FIRSEL, NULL); | ||
451 | |||
452 | /* LCD panel */ | ||
453 | gpio_request(GPIO_PORT217, NULL); /* RESET */ | ||
454 | gpio_direction_output(GPIO_PORT217, 0); | ||
455 | mdelay(1); | ||
456 | gpio_set_value(GPIO_PORT217, 1); | ||
457 | |||
458 | /* LCD backlight controller */ | ||
459 | gpio_request(GPIO_PORT235, NULL); /* RESET */ | ||
460 | gpio_direction_output(GPIO_PORT235, 0); | ||
461 | lcd_backlight_reset(); | ||
462 | |||
463 | /* MIPI-DSI clock setup */ | ||
464 | __raw_writel(0x2a809010, DSI0PHYCR); | ||
465 | |||
290 | #ifdef CONFIG_CACHE_L2X0 | 466 | #ifdef CONFIG_CACHE_L2X0 |
291 | /* Shared attribute override enable, 64K*8way */ | 467 | /* Shared attribute override enable, 64K*8way */ |
292 | l2x0_init(__io(0xf0100000), 0x00460000, 0xc2000fff); | 468 | l2x0_init(__io(0xf0100000), 0x00460000, 0xc2000fff); |
diff --git a/arch/arm/mach-shmobile/board-g3evm.c b/arch/arm/mach-shmobile/board-g3evm.c index 686b304a7708..ef4613b993a2 100644 --- a/arch/arm/mach-shmobile/board-g3evm.c +++ b/arch/arm/mach-shmobile/board-g3evm.c | |||
@@ -347,7 +347,6 @@ static void __init g3evm_init(void) | |||
347 | gpio_request(GPIO_FN_IRDA_OUT, NULL); | 347 | gpio_request(GPIO_FN_IRDA_OUT, NULL); |
348 | gpio_request(GPIO_FN_IRDA_IN, NULL); | 348 | gpio_request(GPIO_FN_IRDA_IN, NULL); |
349 | gpio_request(GPIO_FN_IRDA_FIRSEL, NULL); | 349 | gpio_request(GPIO_FN_IRDA_FIRSEL, NULL); |
350 | set_irq_type(evt2irq(0x480), IRQ_TYPE_LEVEL_LOW); | ||
351 | 350 | ||
352 | sh7367_add_standard_devices(); | 351 | sh7367_add_standard_devices(); |
353 | 352 | ||
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index 7b15d21f0f68..fb4213a4e15a 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
@@ -169,9 +169,8 @@ | |||
169 | * SW1 | SW33 | 169 | * SW1 | SW33 |
170 | * | bit1 | bit2 | bit3 | bit4 | 170 | * | bit1 | bit2 | bit3 | bit4 |
171 | * -------------+------+------+------+------- | 171 | * -------------+------+------+------+------- |
172 | * MMC0 OFF | OFF | ON | ON | X | 172 | * MMC0 OFF | OFF | X | ON | X (Use MMCIF) |
173 | * MMC1 ON | OFF | ON | X | ON | 173 | * SDHI1 OFF | ON | X | OFF | X (Use MFD_SH_MOBILE_SDHI) |
174 | * SDHI1 OFF | ON | X | OFF | ON | ||
175 | * | 174 | * |
176 | */ | 175 | */ |
177 | 176 | ||
diff --git a/arch/arm/mach-shmobile/clock-sh7372.c b/arch/arm/mach-shmobile/clock-sh7372.c index 9aa8d68d1a9c..e9731b5a73ed 100644 --- a/arch/arm/mach-shmobile/clock-sh7372.c +++ b/arch/arm/mach-shmobile/clock-sh7372.c | |||
@@ -234,7 +234,9 @@ static int pllc2_set_rate(struct clk *clk, unsigned long rate) | |||
234 | 234 | ||
235 | value = __raw_readl(PLLC2CR) & ~(0x3f << 24); | 235 | value = __raw_readl(PLLC2CR) & ~(0x3f << 24); |
236 | 236 | ||
237 | __raw_writel((value & ~0x80000000) | ((idx + 19) << 24), PLLC2CR); | 237 | __raw_writel(value | ((idx + 19) << 24), PLLC2CR); |
238 | |||
239 | clk->rate = clk->freq_table[idx].frequency; | ||
238 | 240 | ||
239 | return 0; | 241 | return 0; |
240 | } | 242 | } |
diff --git a/arch/arm/mach-shmobile/clock-sh73a0.c b/arch/arm/mach-shmobile/clock-sh73a0.c index 720a71433be6..ddd4a1b775f0 100644 --- a/arch/arm/mach-shmobile/clock-sh73a0.c +++ b/arch/arm/mach-shmobile/clock-sh73a0.c | |||
@@ -118,8 +118,16 @@ static unsigned long pll_recalc(struct clk *clk) | |||
118 | { | 118 | { |
119 | unsigned long mult = 1; | 119 | unsigned long mult = 1; |
120 | 120 | ||
121 | if (__raw_readl(PLLECR) & (1 << clk->enable_bit)) | 121 | if (__raw_readl(PLLECR) & (1 << clk->enable_bit)) { |
122 | mult = (((__raw_readl(clk->enable_reg) >> 24) & 0x3f) + 1); | 122 | mult = (((__raw_readl(clk->enable_reg) >> 24) & 0x3f) + 1); |
123 | /* handle CFG bit for PLL1 and PLL2 */ | ||
124 | switch (clk->enable_bit) { | ||
125 | case 1: | ||
126 | case 2: | ||
127 | if (__raw_readl(clk->enable_reg) & (1 << 20)) | ||
128 | mult *= 2; | ||
129 | } | ||
130 | } | ||
123 | 131 | ||
124 | return clk->parent->rate * mult; | 132 | return clk->parent->rate * mult; |
125 | } | 133 | } |
@@ -212,7 +220,7 @@ enum { DIV4_I, DIV4_ZG, DIV4_M3, DIV4_B, DIV4_M1, DIV4_M2, | |||
212 | static struct clk div4_clks[DIV4_NR] = { | 220 | static struct clk div4_clks[DIV4_NR] = { |
213 | [DIV4_I] = DIV4(FRQCRA, 20, 0xfff, CLK_ENABLE_ON_INIT), | 221 | [DIV4_I] = DIV4(FRQCRA, 20, 0xfff, CLK_ENABLE_ON_INIT), |
214 | [DIV4_ZG] = DIV4(FRQCRA, 16, 0xbff, CLK_ENABLE_ON_INIT), | 222 | [DIV4_ZG] = DIV4(FRQCRA, 16, 0xbff, CLK_ENABLE_ON_INIT), |
215 | [DIV4_M3] = DIV4(FRQCRA, 8, 0xfff, CLK_ENABLE_ON_INIT), | 223 | [DIV4_M3] = DIV4(FRQCRA, 12, 0xfff, CLK_ENABLE_ON_INIT), |
216 | [DIV4_B] = DIV4(FRQCRA, 8, 0xfff, CLK_ENABLE_ON_INIT), | 224 | [DIV4_B] = DIV4(FRQCRA, 8, 0xfff, CLK_ENABLE_ON_INIT), |
217 | [DIV4_M1] = DIV4(FRQCRA, 4, 0xfff, 0), | 225 | [DIV4_M1] = DIV4(FRQCRA, 4, 0xfff, 0), |
218 | [DIV4_M2] = DIV4(FRQCRA, 0, 0xfff, 0), | 226 | [DIV4_M2] = DIV4(FRQCRA, 0, 0xfff, 0), |
@@ -255,10 +263,10 @@ static struct clk div6_clks[DIV6_NR] = { | |||
255 | }; | 263 | }; |
256 | 264 | ||
257 | enum { MSTP001, | 265 | enum { MSTP001, |
258 | MSTP125, MSTP116, | 266 | MSTP125, MSTP118, MSTP116, MSTP100, |
259 | MSTP219, | 267 | MSTP219, |
260 | MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200, | 268 | MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200, |
261 | MSTP331, MSTP329, MSTP323, MSTP312, | 269 | MSTP331, MSTP329, MSTP325, MSTP323, MSTP312, |
262 | MSTP411, MSTP410, MSTP403, | 270 | MSTP411, MSTP410, MSTP403, |
263 | MSTP_NR }; | 271 | MSTP_NR }; |
264 | 272 | ||
@@ -268,7 +276,9 @@ enum { MSTP001, | |||
268 | static struct clk mstp_clks[MSTP_NR] = { | 276 | static struct clk mstp_clks[MSTP_NR] = { |
269 | [MSTP001] = MSTP(&div4_clks[DIV4_HP], SMSTPCR0, 1, 0), /* IIC2 */ | 277 | [MSTP001] = MSTP(&div4_clks[DIV4_HP], SMSTPCR0, 1, 0), /* IIC2 */ |
270 | [MSTP125] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR1, 25, 0), /* TMU0 */ | 278 | [MSTP125] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR1, 25, 0), /* TMU0 */ |
279 | [MSTP118] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 18, 0), /* DSITX0 */ | ||
271 | [MSTP116] = MSTP(&div4_clks[DIV4_HP], SMSTPCR1, 16, 0), /* IIC0 */ | 280 | [MSTP116] = MSTP(&div4_clks[DIV4_HP], SMSTPCR1, 16, 0), /* IIC0 */ |
281 | [MSTP100] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 0, 0), /* LCDC0 */ | ||
272 | [MSTP219] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 19, 0), /* SCIFA7 */ | 282 | [MSTP219] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 19, 0), /* SCIFA7 */ |
273 | [MSTP207] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 7, 0), /* SCIFA5 */ | 283 | [MSTP207] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 7, 0), /* SCIFA5 */ |
274 | [MSTP206] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 6, 0), /* SCIFB */ | 284 | [MSTP206] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 6, 0), /* SCIFB */ |
@@ -279,6 +289,7 @@ static struct clk mstp_clks[MSTP_NR] = { | |||
279 | [MSTP200] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 0, 0), /* SCIFA4 */ | 289 | [MSTP200] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 0, 0), /* SCIFA4 */ |
280 | [MSTP331] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 31, 0), /* SCIFA6 */ | 290 | [MSTP331] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 31, 0), /* SCIFA6 */ |
281 | [MSTP329] = MSTP(&r_clk, SMSTPCR3, 29, 0), /* CMT10 */ | 291 | [MSTP329] = MSTP(&r_clk, SMSTPCR3, 29, 0), /* CMT10 */ |
292 | [MSTP325] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 25, 0), /* IrDA */ | ||
282 | [MSTP323] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 23, 0), /* IIC1 */ | 293 | [MSTP323] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 23, 0), /* IIC1 */ |
283 | [MSTP312] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMCIF0 */ | 294 | [MSTP312] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMCIF0 */ |
284 | [MSTP411] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 11, 0), /* IIC3 */ | 295 | [MSTP411] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 11, 0), /* IIC3 */ |
@@ -288,16 +299,25 @@ static struct clk mstp_clks[MSTP_NR] = { | |||
288 | 299 | ||
289 | #define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } | 300 | #define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } |
290 | #define CLKDEV_DEV_ID(_id, _clk) { .dev_id = _id, .clk = _clk } | 301 | #define CLKDEV_DEV_ID(_id, _clk) { .dev_id = _id, .clk = _clk } |
302 | #define CLKDEV_ICK_ID(_cid, _did, _clk) { .con_id = _cid, .dev_id = _did, .clk = _clk } | ||
291 | 303 | ||
292 | static struct clk_lookup lookups[] = { | 304 | static struct clk_lookup lookups[] = { |
293 | /* main clocks */ | 305 | /* main clocks */ |
294 | CLKDEV_CON_ID("r_clk", &r_clk), | 306 | CLKDEV_CON_ID("r_clk", &r_clk), |
295 | 307 | ||
308 | /* DIV6 clocks */ | ||
309 | CLKDEV_ICK_ID("dsit_clk", "sh-mipi-dsi.0", &div6_clks[DIV6_DSIT]), | ||
310 | CLKDEV_ICK_ID("dsit_clk", "sh-mipi-dsi.1", &div6_clks[DIV6_DSIT]), | ||
311 | CLKDEV_ICK_ID("dsi0p_clk", "sh-mipi-dsi.0", &div6_clks[DIV6_DSI0P]), | ||
312 | CLKDEV_ICK_ID("dsi1p_clk", "sh-mipi-dsi.1", &div6_clks[DIV6_DSI1P]), | ||
313 | |||
296 | /* MSTP32 clocks */ | 314 | /* MSTP32 clocks */ |
297 | CLKDEV_DEV_ID("i2c-sh_mobile.2", &mstp_clks[MSTP001]), /* I2C2 */ | 315 | CLKDEV_DEV_ID("i2c-sh_mobile.2", &mstp_clks[MSTP001]), /* I2C2 */ |
316 | CLKDEV_DEV_ID("sh_mobile_lcdc_fb.0", &mstp_clks[MSTP100]), /* LCDC0 */ | ||
298 | CLKDEV_DEV_ID("sh_tmu.0", &mstp_clks[MSTP125]), /* TMU00 */ | 317 | CLKDEV_DEV_ID("sh_tmu.0", &mstp_clks[MSTP125]), /* TMU00 */ |
299 | CLKDEV_DEV_ID("sh_tmu.1", &mstp_clks[MSTP125]), /* TMU01 */ | 318 | CLKDEV_DEV_ID("sh_tmu.1", &mstp_clks[MSTP125]), /* TMU01 */ |
300 | CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP116]), /* I2C0 */ | 319 | CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP116]), /* I2C0 */ |
320 | CLKDEV_DEV_ID("sh-mipi-dsi.0", &mstp_clks[MSTP118]), /* DSITX */ | ||
301 | CLKDEV_DEV_ID("sh-sci.7", &mstp_clks[MSTP219]), /* SCIFA7 */ | 321 | CLKDEV_DEV_ID("sh-sci.7", &mstp_clks[MSTP219]), /* SCIFA7 */ |
302 | CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP207]), /* SCIFA5 */ | 322 | CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP207]), /* SCIFA5 */ |
303 | CLKDEV_DEV_ID("sh-sci.8", &mstp_clks[MSTP206]), /* SCIFB */ | 323 | CLKDEV_DEV_ID("sh-sci.8", &mstp_clks[MSTP206]), /* SCIFB */ |
@@ -308,6 +328,7 @@ static struct clk_lookup lookups[] = { | |||
308 | CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP200]), /* SCIFA4 */ | 328 | CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP200]), /* SCIFA4 */ |
309 | CLKDEV_DEV_ID("sh-sci.6", &mstp_clks[MSTP331]), /* SCIFA6 */ | 329 | CLKDEV_DEV_ID("sh-sci.6", &mstp_clks[MSTP331]), /* SCIFA6 */ |
310 | CLKDEV_DEV_ID("sh_cmt.10", &mstp_clks[MSTP329]), /* CMT10 */ | 330 | CLKDEV_DEV_ID("sh_cmt.10", &mstp_clks[MSTP329]), /* CMT10 */ |
331 | CLKDEV_DEV_ID("sh_irda.0", &mstp_clks[MSTP325]), /* IrDA */ | ||
311 | CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP323]), /* I2C1 */ | 332 | CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP323]), /* I2C1 */ |
312 | CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMCIF0 */ | 333 | CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMCIF0 */ |
313 | CLKDEV_DEV_ID("i2c-sh_mobile.3", &mstp_clks[MSTP411]), /* I2C3 */ | 334 | CLKDEV_DEV_ID("i2c-sh_mobile.3", &mstp_clks[MSTP411]), /* I2C3 */ |
diff --git a/arch/arm/mach-shmobile/intc-sh7372.c b/arch/arm/mach-shmobile/intc-sh7372.c index f78a1ead71a5..ca5f9d17b39a 100644 --- a/arch/arm/mach-shmobile/intc-sh7372.c +++ b/arch/arm/mach-shmobile/intc-sh7372.c | |||
@@ -365,6 +365,7 @@ static struct intc_desc intca_desc __initdata = { | |||
365 | 365 | ||
366 | enum { | 366 | enum { |
367 | UNUSED_INTCS = 0, | 367 | UNUSED_INTCS = 0, |
368 | ENABLED_INTCS, | ||
368 | 369 | ||
369 | INTCS, | 370 | INTCS, |
370 | 371 | ||
@@ -413,7 +414,7 @@ enum { | |||
413 | CMT4, | 414 | CMT4, |
414 | DSITX1_DSITX1_0, | 415 | DSITX1_DSITX1_0, |
415 | DSITX1_DSITX1_1, | 416 | DSITX1_DSITX1_1, |
416 | /* MFIS2 */ | 417 | MFIS2_INTCS, /* Priority always enabled using ENABLED_INTCS */ |
417 | CPORTS2R, | 418 | CPORTS2R, |
418 | /* CEC */ | 419 | /* CEC */ |
419 | JPU6E, | 420 | JPU6E, |
@@ -477,7 +478,7 @@ static struct intc_vect intcs_vectors[] = { | |||
477 | INTCS_VECT(CMT4, 0x1980), | 478 | INTCS_VECT(CMT4, 0x1980), |
478 | INTCS_VECT(DSITX1_DSITX1_0, 0x19a0), | 479 | INTCS_VECT(DSITX1_DSITX1_0, 0x19a0), |
479 | INTCS_VECT(DSITX1_DSITX1_1, 0x19c0), | 480 | INTCS_VECT(DSITX1_DSITX1_1, 0x19c0), |
480 | /* MFIS2 */ | 481 | INTCS_VECT(MFIS2_INTCS, 0x1a00), |
481 | INTCS_VECT(CPORTS2R, 0x1a20), | 482 | INTCS_VECT(CPORTS2R, 0x1a20), |
482 | /* CEC */ | 483 | /* CEC */ |
483 | INTCS_VECT(JPU6E, 0x1a80), | 484 | INTCS_VECT(JPU6E, 0x1a80), |
@@ -543,7 +544,7 @@ static struct intc_mask_reg intcs_mask_registers[] = { | |||
543 | { 0, TMU1_TUNI2, TMU1_TUNI1, TMU1_TUNI0, | 544 | { 0, TMU1_TUNI2, TMU1_TUNI1, TMU1_TUNI0, |
544 | CMT4, DSITX1_DSITX1_0, DSITX1_DSITX1_1, 0 } }, | 545 | CMT4, DSITX1_DSITX1_0, DSITX1_DSITX1_1, 0 } }, |
545 | { 0xffd5019c, 0xffd501dc, 8, /* IMR7SA3 / IMCR7SA3 */ | 546 | { 0xffd5019c, 0xffd501dc, 8, /* IMR7SA3 / IMCR7SA3 */ |
546 | { 0, CPORTS2R, 0, 0, | 547 | { MFIS2_INTCS, CPORTS2R, 0, 0, |
547 | JPU6E, 0, 0, 0 } }, | 548 | JPU6E, 0, 0, 0 } }, |
548 | { 0xffd20104, 0, 16, /* INTAMASK */ | 549 | { 0xffd20104, 0, 16, /* INTAMASK */ |
549 | { 0, 0, 0, 0, 0, 0, 0, 0, | 550 | { 0, 0, 0, 0, 0, 0, 0, 0, |
@@ -571,7 +572,8 @@ static struct intc_prio_reg intcs_prio_registers[] = { | |||
571 | { 0xffd50030, 0, 16, 4, /* IPRMS3 */ { TMU1, 0, 0, 0 } }, | 572 | { 0xffd50030, 0, 16, 4, /* IPRMS3 */ { TMU1, 0, 0, 0 } }, |
572 | { 0xffd50034, 0, 16, 4, /* IPRNS3 */ { CMT4, DSITX1_DSITX1_0, | 573 | { 0xffd50034, 0, 16, 4, /* IPRNS3 */ { CMT4, DSITX1_DSITX1_0, |
573 | DSITX1_DSITX1_1, 0 } }, | 574 | DSITX1_DSITX1_1, 0 } }, |
574 | { 0xffd50038, 0, 16, 4, /* IPROS3 */ { 0, CPORTS2R, 0, 0 } }, | 575 | { 0xffd50038, 0, 16, 4, /* IPROS3 */ { ENABLED_INTCS, CPORTS2R, |
576 | 0, 0 } }, | ||
575 | { 0xffd5003c, 0, 16, 4, /* IPRPS3 */ { JPU6E, 0, 0, 0 } }, | 577 | { 0xffd5003c, 0, 16, 4, /* IPRPS3 */ { JPU6E, 0, 0, 0 } }, |
576 | }; | 578 | }; |
577 | 579 | ||
@@ -590,6 +592,7 @@ static struct resource intcs_resources[] __initdata = { | |||
590 | 592 | ||
591 | static struct intc_desc intcs_desc __initdata = { | 593 | static struct intc_desc intcs_desc __initdata = { |
592 | .name = "sh7372-intcs", | 594 | .name = "sh7372-intcs", |
595 | .force_enable = ENABLED_INTCS, | ||
593 | .resource = intcs_resources, | 596 | .resource = intcs_resources, |
594 | .num_resources = ARRAY_SIZE(intcs_resources), | 597 | .num_resources = ARRAY_SIZE(intcs_resources), |
595 | .hw = INTC_HW_DESC(intcs_vectors, intcs_groups, intcs_mask_registers, | 598 | .hw = INTC_HW_DESC(intcs_vectors, intcs_groups, intcs_mask_registers, |
diff --git a/arch/arm/mach-shmobile/intc-sh73a0.c b/arch/arm/mach-shmobile/intc-sh73a0.c index 322d8d57cbcf..5d0e1503ece6 100644 --- a/arch/arm/mach-shmobile/intc-sh73a0.c +++ b/arch/arm/mach-shmobile/intc-sh73a0.c | |||
@@ -252,10 +252,11 @@ static irqreturn_t sh73a0_intcs_demux(int irq, void *dev_id) | |||
252 | 252 | ||
253 | void __init sh73a0_init_irq(void) | 253 | void __init sh73a0_init_irq(void) |
254 | { | 254 | { |
255 | void __iomem *gic_base = __io(0xf0001000); | 255 | void __iomem *gic_dist_base = __io(0xf0001000); |
256 | void __iomem *gic_cpu_base = __io(0xf0000100); | ||
256 | void __iomem *intevtsa = ioremap_nocache(0xffd20100, PAGE_SIZE); | 257 | void __iomem *intevtsa = ioremap_nocache(0xffd20100, PAGE_SIZE); |
257 | 258 | ||
258 | gic_init(0, 29, gic_base, gic_base); | 259 | gic_init(0, 29, gic_dist_base, gic_cpu_base); |
259 | 260 | ||
260 | register_intc_controller(&intcs_desc); | 261 | register_intc_controller(&intcs_desc); |
261 | 262 | ||
diff --git a/arch/arm/mach-tegra/gpio.c b/arch/arm/mach-tegra/gpio.c index bd066206e110..ad8048801513 100644 --- a/arch/arm/mach-tegra/gpio.c +++ b/arch/arm/mach-tegra/gpio.c | |||
@@ -207,9 +207,9 @@ static int tegra_gpio_irq_set_type(struct irq_data *d, unsigned int type) | |||
207 | spin_unlock_irqrestore(&bank->lvl_lock[port], flags); | 207 | spin_unlock_irqrestore(&bank->lvl_lock[port], flags); |
208 | 208 | ||
209 | if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) | 209 | if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) |
210 | __set_irq_handler_unlocked(irq, handle_level_irq); | 210 | __set_irq_handler_unlocked(d->irq, handle_level_irq); |
211 | else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) | 211 | else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) |
212 | __set_irq_handler_unlocked(irq, handle_edge_irq); | 212 | __set_irq_handler_unlocked(d->irq, handle_edge_irq); |
213 | 213 | ||
214 | return 0; | 214 | return 0; |
215 | } | 215 | } |
diff --git a/arch/arm/mach-tegra/include/mach/clk.h b/arch/arm/mach-tegra/include/mach/clk.h index d7723955dac7..a217f68ba57c 100644 --- a/arch/arm/mach-tegra/include/mach/clk.h +++ b/arch/arm/mach-tegra/include/mach/clk.h | |||
@@ -20,6 +20,8 @@ | |||
20 | #ifndef __MACH_CLK_H | 20 | #ifndef __MACH_CLK_H |
21 | #define __MACH_CLK_H | 21 | #define __MACH_CLK_H |
22 | 22 | ||
23 | struct clk; | ||
24 | |||
23 | void tegra_periph_reset_deassert(struct clk *c); | 25 | void tegra_periph_reset_deassert(struct clk *c); |
24 | void tegra_periph_reset_assert(struct clk *c); | 26 | void tegra_periph_reset_assert(struct clk *c); |
25 | 27 | ||
diff --git a/arch/arm/mach-tegra/include/mach/clkdev.h b/arch/arm/mach-tegra/include/mach/clkdev.h index 412f5c63e65a..66cd3f4fc896 100644 --- a/arch/arm/mach-tegra/include/mach/clkdev.h +++ b/arch/arm/mach-tegra/include/mach/clkdev.h | |||
@@ -20,6 +20,8 @@ | |||
20 | #ifndef __MACH_CLKDEV_H | 20 | #ifndef __MACH_CLKDEV_H |
21 | #define __MACH_CLKDEV_H | 21 | #define __MACH_CLKDEV_H |
22 | 22 | ||
23 | struct clk; | ||
24 | |||
23 | static inline int __clk_get(struct clk *clk) | 25 | static inline int __clk_get(struct clk *clk) |
24 | { | 26 | { |
25 | return 1; | 27 | return 1; |
diff --git a/arch/arm/mach-tegra/include/mach/kbc.h b/arch/arm/mach-tegra/include/mach/kbc.h new file mode 100644 index 000000000000..66ad2760c621 --- /dev/null +++ b/arch/arm/mach-tegra/include/mach/kbc.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | * Platform definitions for tegra-kbc keyboard input driver | ||
3 | * | ||
4 | * Copyright (c) 2010-2011, NVIDIA Corporation. | ||
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 as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
14 | * more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef ASMARM_ARCH_TEGRA_KBC_H | ||
22 | #define ASMARM_ARCH_TEGRA_KBC_H | ||
23 | |||
24 | #include <linux/types.h> | ||
25 | #include <linux/input/matrix_keypad.h> | ||
26 | |||
27 | #ifdef CONFIG_ARCH_TEGRA_2x_SOC | ||
28 | #define KBC_MAX_GPIO 24 | ||
29 | #define KBC_MAX_KPENT 8 | ||
30 | #else | ||
31 | #define KBC_MAX_GPIO 20 | ||
32 | #define KBC_MAX_KPENT 7 | ||
33 | #endif | ||
34 | |||
35 | #define KBC_MAX_ROW 16 | ||
36 | #define KBC_MAX_COL 8 | ||
37 | #define KBC_MAX_KEY (KBC_MAX_ROW * KBC_MAX_COL) | ||
38 | |||
39 | struct tegra_kbc_pin_cfg { | ||
40 | bool is_row; | ||
41 | unsigned char num; | ||
42 | }; | ||
43 | |||
44 | struct tegra_kbc_wake_key { | ||
45 | u8 row:4; | ||
46 | u8 col:4; | ||
47 | }; | ||
48 | |||
49 | struct tegra_kbc_platform_data { | ||
50 | unsigned int debounce_cnt; | ||
51 | unsigned int repeat_cnt; | ||
52 | |||
53 | unsigned int wake_cnt; /* 0:wake on any key >1:wake on wake_cfg */ | ||
54 | const struct tegra_kbc_wake_key *wake_cfg; | ||
55 | |||
56 | struct tegra_kbc_pin_cfg pin_cfg[KBC_MAX_GPIO]; | ||
57 | const struct matrix_keymap_data *keymap_data; | ||
58 | |||
59 | bool wakeup; | ||
60 | }; | ||
61 | #endif | ||
diff --git a/arch/arm/mach-tegra/irq.c b/arch/arm/mach-tegra/irq.c index de7dfad6f769..17c74d21077c 100644 --- a/arch/arm/mach-tegra/irq.c +++ b/arch/arm/mach-tegra/irq.c | |||
@@ -46,24 +46,24 @@ | |||
46 | #define ICTLR_COP_IER_CLR 0x38 | 46 | #define ICTLR_COP_IER_CLR 0x38 |
47 | #define ICTLR_COP_IEP_CLASS 0x3c | 47 | #define ICTLR_COP_IEP_CLASS 0x3c |
48 | 48 | ||
49 | static void (*gic_mask_irq)(struct irq_data *d); | 49 | static void (*tegra_gic_mask_irq)(struct irq_data *d); |
50 | static void (*gic_unmask_irq)(struct irq_data *d); | 50 | static void (*tegra_gic_unmask_irq)(struct irq_data *d); |
51 | 51 | ||
52 | #define irq_to_ictlr(irq) (((irq)-32) >> 5) | 52 | #define irq_to_ictlr(irq) (((irq) - 32) >> 5) |
53 | static void __iomem *tegra_ictlr_base = IO_ADDRESS(TEGRA_PRIMARY_ICTLR_BASE); | 53 | static void __iomem *tegra_ictlr_base = IO_ADDRESS(TEGRA_PRIMARY_ICTLR_BASE); |
54 | #define ictlr_to_virt(ictlr) (tegra_ictlr_base + (ictlr)*0x100) | 54 | #define ictlr_to_virt(ictlr) (tegra_ictlr_base + (ictlr) * 0x100) |
55 | 55 | ||
56 | static void tegra_mask(struct irq_data *d) | 56 | static void tegra_mask(struct irq_data *d) |
57 | { | 57 | { |
58 | void __iomem *addr = ictlr_to_virt(irq_to_ictlr(d->irq)); | 58 | void __iomem *addr = ictlr_to_virt(irq_to_ictlr(d->irq)); |
59 | gic_mask_irq(d); | 59 | tegra_gic_mask_irq(d); |
60 | writel(1<<(d->irq&31), addr+ICTLR_CPU_IER_CLR); | 60 | writel(1 << (d->irq & 31), addr+ICTLR_CPU_IER_CLR); |
61 | } | 61 | } |
62 | 62 | ||
63 | static void tegra_unmask(struct irq_data *d) | 63 | static void tegra_unmask(struct irq_data *d) |
64 | { | 64 | { |
65 | void __iomem *addr = ictlr_to_virt(irq_to_ictlr(d->irq)); | 65 | void __iomem *addr = ictlr_to_virt(irq_to_ictlr(d->irq)); |
66 | gic_unmask_irq(d); | 66 | tegra_gic_unmask_irq(d); |
67 | writel(1<<(d->irq&31), addr+ICTLR_CPU_IER_SET); | 67 | writel(1<<(d->irq&31), addr+ICTLR_CPU_IER_SET); |
68 | } | 68 | } |
69 | 69 | ||
@@ -98,8 +98,8 @@ void __init tegra_init_irq(void) | |||
98 | IO_ADDRESS(TEGRA_ARM_PERIF_BASE + 0x100)); | 98 | IO_ADDRESS(TEGRA_ARM_PERIF_BASE + 0x100)); |
99 | 99 | ||
100 | gic = get_irq_chip(29); | 100 | gic = get_irq_chip(29); |
101 | gic_unmask_irq = gic->irq_unmask; | 101 | tegra_gic_unmask_irq = gic->irq_unmask; |
102 | gic_mask_irq = gic->irq_mask; | 102 | tegra_gic_mask_irq = gic->irq_mask; |
103 | tegra_irq.irq_ack = gic->irq_ack; | 103 | tegra_irq.irq_ack = gic->irq_ack; |
104 | #ifdef CONFIG_SMP | 104 | #ifdef CONFIG_SMP |
105 | tegra_irq.irq_set_affinity = gic->irq_set_affinity; | 105 | tegra_irq.irq_set_affinity = gic->irq_set_affinity; |
diff --git a/arch/arm/mach-versatile/Kconfig b/arch/arm/mach-versatile/Kconfig index 3f7b5e9d83c5..9cdec5aa04a0 100644 --- a/arch/arm/mach-versatile/Kconfig +++ b/arch/arm/mach-versatile/Kconfig | |||
@@ -2,17 +2,19 @@ menu "Versatile platform type" | |||
2 | depends on ARCH_VERSATILE | 2 | depends on ARCH_VERSATILE |
3 | 3 | ||
4 | config ARCH_VERSATILE_PB | 4 | config ARCH_VERSATILE_PB |
5 | bool "Support Versatile/PB platform" | 5 | bool "Support Versatile Platform Baseboard for ARM926EJ-S" |
6 | select CPU_ARM926T | 6 | select CPU_ARM926T |
7 | select MIGHT_HAVE_PCI | 7 | select MIGHT_HAVE_PCI |
8 | default y | 8 | default y |
9 | help | 9 | help |
10 | Include support for the ARM(R) Versatile/PB platform. | 10 | Include support for the ARM(R) Versatile Platform Baseboard |
11 | for the ARM926EJ-S. | ||
11 | 12 | ||
12 | config MACH_VERSATILE_AB | 13 | config MACH_VERSATILE_AB |
13 | bool "Support Versatile/AB platform" | 14 | bool "Support Versatile Application Baseboard for ARM926EJ-S" |
14 | select CPU_ARM926T | 15 | select CPU_ARM926T |
15 | help | 16 | help |
16 | Include support for the ARM(R) Versatile/AP platform. | 17 | Include support for the ARM(R) Versatile Application Baseboard |
18 | for the ARM926EJ-S. | ||
17 | 19 | ||
18 | endmenu | 20 | endmenu |
diff --git a/arch/arm/mach-vexpress/platsmp.c b/arch/arm/mach-vexpress/platsmp.c index b1687b6abe63..634bf1d3a311 100644 --- a/arch/arm/mach-vexpress/platsmp.c +++ b/arch/arm/mach-vexpress/platsmp.c | |||
@@ -39,7 +39,7 @@ volatile int __cpuinitdata pen_release = -1; | |||
39 | * observers, irrespective of whether they're taking part in coherency | 39 | * observers, irrespective of whether they're taking part in coherency |
40 | * or not. This is necessary for the hotplug code to work reliably. | 40 | * or not. This is necessary for the hotplug code to work reliably. |
41 | */ | 41 | */ |
42 | static void write_pen_release(int val) | 42 | static void __cpuinit write_pen_release(int val) |
43 | { | 43 | { |
44 | pen_release = val; | 44 | pen_release = val; |
45 | smp_wmb(); | 45 | smp_wmb(); |
diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index a9ed3428a2fa..1edae65a0e72 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <asm/mach/time.h> | 19 | #include <asm/mach/time.h> |
20 | #include <asm/hardware/arm_timer.h> | 20 | #include <asm/hardware/arm_timer.h> |
21 | #include <asm/hardware/timer-sp.h> | 21 | #include <asm/hardware/timer-sp.h> |
22 | #include <asm/hardware/sp810.h> | ||
22 | 23 | ||
23 | #include <mach/motherboard.h> | 24 | #include <mach/motherboard.h> |
24 | 25 | ||
@@ -50,8 +51,16 @@ void __init v2m_map_io(struct map_desc *tile, size_t num) | |||
50 | 51 | ||
51 | static void __init v2m_timer_init(void) | 52 | static void __init v2m_timer_init(void) |
52 | { | 53 | { |
54 | u32 scctrl; | ||
55 | |||
53 | versatile_sched_clock_init(MMIO_P2V(V2M_SYS_24MHZ), 24000000); | 56 | versatile_sched_clock_init(MMIO_P2V(V2M_SYS_24MHZ), 24000000); |
54 | 57 | ||
58 | /* Select 1MHz TIMCLK as the reference clock for SP804 timers */ | ||
59 | scctrl = readl(MMIO_P2V(V2M_SYSCTL + SCCTRL)); | ||
60 | scctrl |= SCCTRL_TIMEREN0SEL_TIMCLK; | ||
61 | scctrl |= SCCTRL_TIMEREN1SEL_TIMCLK; | ||
62 | writel(scctrl, MMIO_P2V(V2M_SYSCTL + SCCTRL)); | ||
63 | |||
55 | writel(0, MMIO_P2V(V2M_TIMER0) + TIMER_CTRL); | 64 | writel(0, MMIO_P2V(V2M_TIMER0) + TIMER_CTRL); |
56 | writel(0, MMIO_P2V(V2M_TIMER1) + TIMER_CTRL); | 65 | writel(0, MMIO_P2V(V2M_TIMER1) + TIMER_CTRL); |
57 | 66 | ||
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 5164069ced42..cddd684364da 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
@@ -297,6 +297,12 @@ void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc) | |||
297 | memblock_reserve(__pa(_stext), _end - _stext); | 297 | memblock_reserve(__pa(_stext), _end - _stext); |
298 | #endif | 298 | #endif |
299 | #ifdef CONFIG_BLK_DEV_INITRD | 299 | #ifdef CONFIG_BLK_DEV_INITRD |
300 | if (phys_initrd_size && | ||
301 | memblock_is_region_reserved(phys_initrd_start, phys_initrd_size)) { | ||
302 | pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region - disabling initrd\n", | ||
303 | phys_initrd_start, phys_initrd_size); | ||
304 | phys_initrd_start = phys_initrd_size = 0; | ||
305 | } | ||
300 | if (phys_initrd_size) { | 306 | if (phys_initrd_size) { |
301 | memblock_reserve(phys_initrd_start, phys_initrd_size); | 307 | memblock_reserve(phys_initrd_start, phys_initrd_size); |
302 | 308 | ||
diff --git a/arch/arm/plat-mxc/include/mach/uncompress.h b/arch/arm/plat-mxc/include/mach/uncompress.h index 2315541ac29d..e634d6c2e7b9 100644 --- a/arch/arm/plat-mxc/include/mach/uncompress.h +++ b/arch/arm/plat-mxc/include/mach/uncompress.h | |||
@@ -96,6 +96,7 @@ static __inline__ void __arch_decomp_setup(unsigned long arch_id) | |||
96 | case MACH_TYPE_MX35_3DS: | 96 | case MACH_TYPE_MX35_3DS: |
97 | case MACH_TYPE_PCM043: | 97 | case MACH_TYPE_PCM043: |
98 | case MACH_TYPE_LILLY1131: | 98 | case MACH_TYPE_LILLY1131: |
99 | case MACH_TYPE_VPR200: | ||
99 | uart_base = MX3X_UART1_BASE_ADDR; | 100 | uart_base = MX3X_UART1_BASE_ADDR; |
100 | break; | 101 | break; |
101 | case MACH_TYPE_MAGX_ZN5: | 102 | case MACH_TYPE_MAGX_ZN5: |
@@ -103,6 +104,7 @@ static __inline__ void __arch_decomp_setup(unsigned long arch_id) | |||
103 | break; | 104 | break; |
104 | case MACH_TYPE_MX51_BABBAGE: | 105 | case MACH_TYPE_MX51_BABBAGE: |
105 | case MACH_TYPE_EUKREA_CPUIMX51SD: | 106 | case MACH_TYPE_EUKREA_CPUIMX51SD: |
107 | case MACH_TYPE_MX51_3DS: | ||
106 | uart_base = MX51_UART1_BASE_ADDR; | 108 | uart_base = MX51_UART1_BASE_ADDR; |
107 | break; | 109 | break; |
108 | case MACH_TYPE_MX50_RDP: | 110 | case MACH_TYPE_MX50_RDP: |
diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig index 18fe3cb195dc..b6333ae3f92a 100644 --- a/arch/arm/plat-omap/Kconfig +++ b/arch/arm/plat-omap/Kconfig | |||
@@ -144,12 +144,9 @@ config OMAP_IOMMU_DEBUG | |||
144 | config OMAP_IOMMU_IVA2 | 144 | config OMAP_IOMMU_IVA2 |
145 | bool | 145 | bool |
146 | 146 | ||
147 | choice | ||
148 | prompt "System timer" | ||
149 | default OMAP_32K_TIMER if !ARCH_OMAP15XX | ||
150 | |||
151 | config OMAP_MPU_TIMER | 147 | config OMAP_MPU_TIMER |
152 | bool "Use mpu timer" | 148 | bool "Use mpu timer" |
149 | depends on ARCH_OMAP1 | ||
153 | help | 150 | help |
154 | Select this option if you want to use the OMAP mpu timer. This | 151 | Select this option if you want to use the OMAP mpu timer. This |
155 | timer provides more intra-tick resolution than the 32KHz timer, | 152 | timer provides more intra-tick resolution than the 32KHz timer, |
@@ -158,6 +155,7 @@ config OMAP_MPU_TIMER | |||
158 | config OMAP_32K_TIMER | 155 | config OMAP_32K_TIMER |
159 | bool "Use 32KHz timer" | 156 | bool "Use 32KHz timer" |
160 | depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS | 157 | depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS |
158 | default y if (ARCH_OMAP16XX || ARCH_OMAP2PLUS) | ||
161 | help | 159 | help |
162 | Select this option if you want to enable the OMAP 32KHz timer. | 160 | Select this option if you want to enable the OMAP 32KHz timer. |
163 | This timer saves power compared to the OMAP_MPU_TIMER, and has | 161 | This timer saves power compared to the OMAP_MPU_TIMER, and has |
@@ -165,8 +163,6 @@ config OMAP_32K_TIMER | |||
165 | intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is | 163 | intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is |
166 | currently only available for OMAP16XX, 24XX, 34XX and OMAP4. | 164 | currently only available for OMAP16XX, 24XX, 34XX and OMAP4. |
167 | 165 | ||
168 | endchoice | ||
169 | |||
170 | config OMAP3_L2_AUX_SECURE_SAVE_RESTORE | 166 | config OMAP3_L2_AUX_SECURE_SAVE_RESTORE |
171 | bool "OMAP3 HS/EMU save and restore for L2 AUX control register" | 167 | bool "OMAP3 HS/EMU save and restore for L2 AUX control register" |
172 | depends on ARCH_OMAP3 && PM | 168 | depends on ARCH_OMAP3 && PM |
diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c index ea4644021fb9..862dda95d61d 100644 --- a/arch/arm/plat-omap/counter_32k.c +++ b/arch/arm/plat-omap/counter_32k.c | |||
@@ -36,8 +36,6 @@ | |||
36 | 36 | ||
37 | #define OMAP16XX_TIMER_32K_SYNCHRONIZED 0xfffbc410 | 37 | #define OMAP16XX_TIMER_32K_SYNCHRONIZED 0xfffbc410 |
38 | 38 | ||
39 | #if !(defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP15XX)) | ||
40 | |||
41 | #include <linux/clocksource.h> | 39 | #include <linux/clocksource.h> |
42 | 40 | ||
43 | /* | 41 | /* |
@@ -122,12 +120,24 @@ static DEFINE_CLOCK_DATA(cd); | |||
122 | #define SC_MULT 4000000000u | 120 | #define SC_MULT 4000000000u |
123 | #define SC_SHIFT 17 | 121 | #define SC_SHIFT 17 |
124 | 122 | ||
125 | unsigned long long notrace sched_clock(void) | 123 | static inline unsigned long long notrace _omap_32k_sched_clock(void) |
126 | { | 124 | { |
127 | u32 cyc = clocksource_32k.read(&clocksource_32k); | 125 | u32 cyc = clocksource_32k.read(&clocksource_32k); |
128 | return cyc_to_fixed_sched_clock(&cd, cyc, (u32)~0, SC_MULT, SC_SHIFT); | 126 | return cyc_to_fixed_sched_clock(&cd, cyc, (u32)~0, SC_MULT, SC_SHIFT); |
129 | } | 127 | } |
130 | 128 | ||
129 | #ifndef CONFIG_OMAP_MPU_TIMER | ||
130 | unsigned long long notrace sched_clock(void) | ||
131 | { | ||
132 | return _omap_32k_sched_clock(); | ||
133 | } | ||
134 | #else | ||
135 | unsigned long long notrace omap_32k_sched_clock(void) | ||
136 | { | ||
137 | return _omap_32k_sched_clock(); | ||
138 | } | ||
139 | #endif | ||
140 | |||
131 | static void notrace omap_update_sched_clock(void) | 141 | static void notrace omap_update_sched_clock(void) |
132 | { | 142 | { |
133 | u32 cyc = clocksource_32k.read(&clocksource_32k); | 143 | u32 cyc = clocksource_32k.read(&clocksource_32k); |
@@ -160,7 +170,7 @@ void read_persistent_clock(struct timespec *ts) | |||
160 | *ts = *tsp; | 170 | *ts = *tsp; |
161 | } | 171 | } |
162 | 172 | ||
163 | static int __init omap_init_clocksource_32k(void) | 173 | int __init omap_init_clocksource_32k(void) |
164 | { | 174 | { |
165 | static char err[] __initdata = KERN_ERR | 175 | static char err[] __initdata = KERN_ERR |
166 | "%s: can't register clocksource!\n"; | 176 | "%s: can't register clocksource!\n"; |
@@ -195,7 +205,3 @@ static int __init omap_init_clocksource_32k(void) | |||
195 | } | 205 | } |
196 | return 0; | 206 | return 0; |
197 | } | 207 | } |
198 | arch_initcall(omap_init_clocksource_32k); | ||
199 | |||
200 | #endif /* !(defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP15XX)) */ | ||
201 | |||
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index c4b2b478b1a5..85363084cc1a 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -53,7 +53,7 @@ enum { DMA_CHAIN_STARTED, DMA_CHAIN_NOTSTARTED }; | |||
53 | #endif | 53 | #endif |
54 | 54 | ||
55 | #define OMAP_DMA_ACTIVE 0x01 | 55 | #define OMAP_DMA_ACTIVE 0x01 |
56 | #define OMAP2_DMA_CSR_CLEAR_MASK 0xffe | 56 | #define OMAP2_DMA_CSR_CLEAR_MASK 0xffffffff |
57 | 57 | ||
58 | #define OMAP_FUNC_MUX_ARM_BASE (0xfffe1000 + 0xec) | 58 | #define OMAP_FUNC_MUX_ARM_BASE (0xfffe1000 + 0xec) |
59 | 59 | ||
@@ -1873,7 +1873,7 @@ static int omap2_dma_handle_ch(int ch) | |||
1873 | printk(KERN_INFO "DMA misaligned error with device %d\n", | 1873 | printk(KERN_INFO "DMA misaligned error with device %d\n", |
1874 | dma_chan[ch].dev_id); | 1874 | dma_chan[ch].dev_id); |
1875 | 1875 | ||
1876 | p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, ch); | 1876 | p->dma_write(status, CSR, ch); |
1877 | p->dma_write(1 << ch, IRQSTATUS_L0, ch); | 1877 | p->dma_write(1 << ch, IRQSTATUS_L0, ch); |
1878 | /* read back the register to flush the write */ | 1878 | /* read back the register to flush the write */ |
1879 | p->dma_read(IRQSTATUS_L0, ch); | 1879 | p->dma_read(IRQSTATUS_L0, ch); |
@@ -1893,10 +1893,9 @@ static int omap2_dma_handle_ch(int ch) | |||
1893 | OMAP_DMA_CHAIN_INCQHEAD(chain_id); | 1893 | OMAP_DMA_CHAIN_INCQHEAD(chain_id); |
1894 | 1894 | ||
1895 | status = p->dma_read(CSR, ch); | 1895 | status = p->dma_read(CSR, ch); |
1896 | p->dma_write(status, CSR, ch); | ||
1896 | } | 1897 | } |
1897 | 1898 | ||
1898 | p->dma_write(status, CSR, ch); | ||
1899 | |||
1900 | if (likely(dma_chan[ch].callback != NULL)) | 1899 | if (likely(dma_chan[ch].callback != NULL)) |
1901 | dma_chan[ch].callback(ch, status, dma_chan[ch].data); | 1900 | dma_chan[ch].callback(ch, status, dma_chan[ch].data); |
1902 | 1901 | ||
diff --git a/arch/arm/plat-omap/include/plat/common.h b/arch/arm/plat-omap/include/plat/common.h index 6b8088ec74af..29b2afb4288f 100644 --- a/arch/arm/plat-omap/include/plat/common.h +++ b/arch/arm/plat-omap/include/plat/common.h | |||
@@ -35,6 +35,9 @@ struct sys_timer; | |||
35 | 35 | ||
36 | extern void omap_map_common_io(void); | 36 | extern void omap_map_common_io(void); |
37 | extern struct sys_timer omap_timer; | 37 | extern struct sys_timer omap_timer; |
38 | extern bool omap_32k_timer_init(void); | ||
39 | extern int __init omap_init_clocksource_32k(void); | ||
40 | extern unsigned long long notrace omap_32k_sched_clock(void); | ||
38 | 41 | ||
39 | extern void omap_reserve(void); | 42 | extern void omap_reserve(void); |
40 | 43 | ||
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index 2fea897ebeb1..9d6feaabbe7d 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: Sun Dec 12 23:24:27 2010 | 15 | # Last update: Mon Feb 7 08:59:27 2011 |
16 | # | 16 | # |
17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number | 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number |
18 | # | 18 | # |
@@ -2240,7 +2240,7 @@ arm_ultimator2 MACH_ARM_ULTIMATOR2 ARM_ULTIMATOR2 2250 | |||
2240 | vs_v210 MACH_VS_V210 VS_V210 2252 | 2240 | vs_v210 MACH_VS_V210 VS_V210 2252 |
2241 | vs_v212 MACH_VS_V212 VS_V212 2253 | 2241 | vs_v212 MACH_VS_V212 VS_V212 2253 |
2242 | hmt MACH_HMT HMT 2254 | 2242 | hmt MACH_HMT HMT 2254 |
2243 | suen3 MACH_SUEN3 SUEN3 2255 | 2243 | km_kirkwood MACH_KM_KIRKWOOD KM_KIRKWOOD 2255 |
2244 | vesper MACH_VESPER VESPER 2256 | 2244 | vesper MACH_VESPER VESPER 2256 |
2245 | str9 MACH_STR9 STR9 2257 | 2245 | str9 MACH_STR9 STR9 2257 |
2246 | omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258 | 2246 | omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258 |
@@ -2987,7 +2987,7 @@ pxwnas_500_1000 MACH_PXWNAS_500_1000 PXWNAS_500_1000 3001 | |||
2987 | ea20 MACH_EA20 EA20 3002 | 2987 | ea20 MACH_EA20 EA20 3002 |
2988 | awm2 MACH_AWM2 AWM2 3003 | 2988 | awm2 MACH_AWM2 AWM2 3003 |
2989 | ti8148evm MACH_TI8148EVM TI8148EVM 3004 | 2989 | ti8148evm MACH_TI8148EVM TI8148EVM 3004 |
2990 | tegra_seaboard MACH_TEGRA_SEABOARD TEGRA_SEABOARD 3005 | 2990 | seaboard MACH_SEABOARD SEABOARD 3005 |
2991 | linkstation_chlv2 MACH_LINKSTATION_CHLV2 LINKSTATION_CHLV2 3006 | 2991 | linkstation_chlv2 MACH_LINKSTATION_CHLV2 LINKSTATION_CHLV2 3006 |
2992 | tera_pro2_rack MACH_TERA_PRO2_RACK TERA_PRO2_RACK 3007 | 2992 | tera_pro2_rack MACH_TERA_PRO2_RACK TERA_PRO2_RACK 3007 |
2993 | rubys MACH_RUBYS RUBYS 3008 | 2993 | rubys MACH_RUBYS RUBYS 3008 |
@@ -3190,7 +3190,7 @@ synergy MACH_SYNERGY SYNERGY 3205 | |||
3190 | ics_if_voip MACH_ICS_IF_VOIP ICS_IF_VOIP 3206 | 3190 | ics_if_voip MACH_ICS_IF_VOIP ICS_IF_VOIP 3206 |
3191 | wlf_cragg_6410 MACH_WLF_CRAGG_6410 WLF_CRAGG_6410 3207 | 3191 | wlf_cragg_6410 MACH_WLF_CRAGG_6410 WLF_CRAGG_6410 3207 |
3192 | punica MACH_PUNICA PUNICA 3208 | 3192 | punica MACH_PUNICA PUNICA 3208 |
3193 | sbc_nt250 MACH_SBC_NT250 SBC_NT250 3209 | 3193 | trimslice MACH_TRIMSLICE TRIMSLICE 3209 |
3194 | mx27_wmultra MACH_MX27_WMULTRA MX27_WMULTRA 3210 | 3194 | mx27_wmultra MACH_MX27_WMULTRA MX27_WMULTRA 3210 |
3195 | mackerel MACH_MACKEREL MACKEREL 3211 | 3195 | mackerel MACH_MACKEREL MACKEREL 3211 |
3196 | fa9x27 MACH_FA9X27 FA9X27 3213 | 3196 | fa9x27 MACH_FA9X27 FA9X27 3213 |
@@ -3219,3 +3219,100 @@ pivicc MACH_PIVICC PIVICC 3235 | |||
3219 | pcm048 MACH_PCM048 PCM048 3236 | 3219 | pcm048 MACH_PCM048 PCM048 3236 |
3220 | dds MACH_DDS DDS 3237 | 3220 | dds MACH_DDS DDS 3237 |
3221 | chalten_xa1 MACH_CHALTEN_XA1 CHALTEN_XA1 3238 | 3221 | chalten_xa1 MACH_CHALTEN_XA1 CHALTEN_XA1 3238 |
3222 | ts48xx MACH_TS48XX TS48XX 3239 | ||
3223 | tonga2_tfttimer MACH_TONGA2_TFTTIMER TONGA2_TFTTIMER 3240 | ||
3224 | whistler MACH_WHISTLER WHISTLER 3241 | ||
3225 | asl_phoenix MACH_ASL_PHOENIX ASL_PHOENIX 3242 | ||
3226 | at91sam9263otlite MACH_AT91SAM9263OTLITE AT91SAM9263OTLITE 3243 | ||
3227 | ddplug MACH_DDPLUG DDPLUG 3244 | ||
3228 | d2plug MACH_D2PLUG D2PLUG 3245 | ||
3229 | kzm9d MACH_KZM9D KZM9D 3246 | ||
3230 | verdi_lte MACH_VERDI_LTE VERDI_LTE 3247 | ||
3231 | nanozoom MACH_NANOZOOM NANOZOOM 3248 | ||
3232 | dm3730_som_lv MACH_DM3730_SOM_LV DM3730_SOM_LV 3249 | ||
3233 | dm3730_torpedo MACH_DM3730_TORPEDO DM3730_TORPEDO 3250 | ||
3234 | anchovy MACH_ANCHOVY ANCHOVY 3251 | ||
3235 | re2rev20 MACH_RE2REV20 RE2REV20 3253 | ||
3236 | re2rev21 MACH_RE2REV21 RE2REV21 3254 | ||
3237 | cns21xx MACH_CNS21XX CNS21XX 3255 | ||
3238 | rider MACH_RIDER RIDER 3257 | ||
3239 | nsk330 MACH_NSK330 NSK330 3258 | ||
3240 | cns2133evb MACH_CNS2133EVB CNS2133EVB 3259 | ||
3241 | z3_816x_mod MACH_Z3_816X_MOD Z3_816X_MOD 3260 | ||
3242 | z3_814x_mod MACH_Z3_814X_MOD Z3_814X_MOD 3261 | ||
3243 | beect MACH_BEECT BEECT 3262 | ||
3244 | dma_thunderbug MACH_DMA_THUNDERBUG DMA_THUNDERBUG 3263 | ||
3245 | omn_at91sam9g20 MACH_OMN_AT91SAM9G20 OMN_AT91SAM9G20 3264 | ||
3246 | mx25_e2s_uc MACH_MX25_E2S_UC MX25_E2S_UC 3265 | ||
3247 | mione MACH_MIONE MIONE 3266 | ||
3248 | top9000_tcu MACH_TOP9000_TCU TOP9000_TCU 3267 | ||
3249 | top9000_bsl MACH_TOP9000_BSL TOP9000_BSL 3268 | ||
3250 | kingdom MACH_KINGDOM KINGDOM 3269 | ||
3251 | armadillo460 MACH_ARMADILLO460 ARMADILLO460 3270 | ||
3252 | lq2 MACH_LQ2 LQ2 3271 | ||
3253 | sweda_tms2 MACH_SWEDA_TMS2 SWEDA_TMS2 3272 | ||
3254 | mx53_loco MACH_MX53_LOCO MX53_LOCO 3273 | ||
3255 | acer_a8 MACH_ACER_A8 ACER_A8 3275 | ||
3256 | acer_gauguin MACH_ACER_GAUGUIN ACER_GAUGUIN 3276 | ||
3257 | guppy MACH_GUPPY GUPPY 3277 | ||
3258 | mx61_ard MACH_MX61_ARD MX61_ARD 3278 | ||
3259 | tx53 MACH_TX53 TX53 3279 | ||
3260 | omapl138_case_a3 MACH_OMAPL138_CASE_A3 OMAPL138_CASE_A3 3280 | ||
3261 | uemd MACH_UEMD UEMD 3281 | ||
3262 | ccwmx51mut MACH_CCWMX51MUT CCWMX51MUT 3282 | ||
3263 | rockhopper MACH_ROCKHOPPER ROCKHOPPER 3283 | ||
3264 | nookcolor MACH_NOOKCOLOR NOOKCOLOR 3284 | ||
3265 | hkdkc100 MACH_HKDKC100 HKDKC100 3285 | ||
3266 | ts42xx MACH_TS42XX TS42XX 3286 | ||
3267 | aebl MACH_AEBL AEBL 3287 | ||
3268 | wario MACH_WARIO WARIO 3288 | ||
3269 | gfs_spm MACH_GFS_SPM GFS_SPM 3289 | ||
3270 | cm_t3730 MACH_CM_T3730 CM_T3730 3290 | ||
3271 | isc3 MACH_ISC3 ISC3 3291 | ||
3272 | rascal MACH_RASCAL RASCAL 3292 | ||
3273 | hrefv60 MACH_HREFV60 HREFV60 3293 | ||
3274 | tpt_2_0 MACH_TPT_2_0 TPT_2_0 3294 | ||
3275 | pyramid_td MACH_PYRAMID_TD PYRAMID_TD 3295 | ||
3276 | splendor MACH_SPLENDOR SPLENDOR 3296 | ||
3277 | guf_planet MACH_GUF_PLANET GUF_PLANET 3297 | ||
3278 | msm8x60_qt MACH_MSM8X60_QT MSM8X60_QT 3298 | ||
3279 | htc_hd_mini MACH_HTC_HD_MINI HTC_HD_MINI 3299 | ||
3280 | athene MACH_ATHENE ATHENE 3300 | ||
3281 | deep_r_ek_1 MACH_DEEP_R_EK_1 DEEP_R_EK_1 3301 | ||
3282 | vivow_ct MACH_VIVOW_CT VIVOW_CT 3302 | ||
3283 | nery_1000 MACH_NERY_1000 NERY_1000 3303 | ||
3284 | rfl109145_ssrv MACH_RFL109145_SSRV RFL109145_SSRV 3304 | ||
3285 | nmh MACH_NMH NMH 3305 | ||
3286 | wn802t MACH_WN802T WN802T 3306 | ||
3287 | dragonet MACH_DRAGONET DRAGONET 3307 | ||
3288 | geneva_b MACH_GENEVA_B GENEVA_B 3308 | ||
3289 | at91sam9263desk16l MACH_AT91SAM9263DESK16L AT91SAM9263DESK16L 3309 | ||
3290 | bcmhana_sv MACH_BCMHANA_SV BCMHANA_SV 3310 | ||
3291 | bcmhana_tablet MACH_BCMHANA_TABLET BCMHANA_TABLET 3311 | ||
3292 | koi MACH_KOI KOI 3312 | ||
3293 | ts4800 MACH_TS4800 TS4800 3313 | ||
3294 | tqma9263 MACH_TQMA9263 TQMA9263 3314 | ||
3295 | holiday MACH_HOLIDAY HOLIDAY 3315 | ||
3296 | dma_6410 MACH_DMA6410 DMA6410 3316 | ||
3297 | pcats_overlay MACH_PCATS_OVERLAY PCATS_OVERLAY 3317 | ||
3298 | hwgw6410 MACH_HWGW6410 HWGW6410 3318 | ||
3299 | shenzhou MACH_SHENZHOU SHENZHOU 3319 | ||
3300 | cwme9210 MACH_CWME9210 CWME9210 3320 | ||
3301 | cwme9210js MACH_CWME9210JS CWME9210JS 3321 | ||
3302 | pgs_v1 MACH_PGS_SITARA PGS_SITARA 3322 | ||
3303 | colibri_tegra2 MACH_COLIBRI_TEGRA2 COLIBRI_TEGRA2 3323 | ||
3304 | w21 MACH_W21 W21 3324 | ||
3305 | polysat1 MACH_POLYSAT1 POLYSAT1 3325 | ||
3306 | dataway MACH_DATAWAY DATAWAY 3326 | ||
3307 | cobral138 MACH_COBRAL138 COBRAL138 3327 | ||
3308 | roverpcs8 MACH_ROVERPCS8 ROVERPCS8 3328 | ||
3309 | marvelc MACH_MARVELC MARVELC 3329 | ||
3310 | navefihid MACH_NAVEFIHID NAVEFIHID 3330 | ||
3311 | dm365_cv100 MACH_DM365_CV100 DM365_CV100 3331 | ||
3312 | able MACH_ABLE ABLE 3332 | ||
3313 | legacy MACH_LEGACY LEGACY 3333 | ||
3314 | icong MACH_ICONG ICONG 3334 | ||
3315 | rover_g8 MACH_ROVER_G8 ROVER_G8 3335 | ||
3316 | t5388p MACH_T5388P T5388P 3336 | ||
3317 | dingo MACH_DINGO DINGO 3337 | ||
3318 | goflexhome MACH_GOFLEXHOME GOFLEXHOME 3338 | ||
diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig index 313b13073c54..cd2062fe0f61 100644 --- a/arch/avr32/Kconfig +++ b/arch/avr32/Kconfig | |||
@@ -1,8 +1,8 @@ | |||
1 | config AVR32 | 1 | config AVR32 |
2 | def_bool y | 2 | def_bool y |
3 | # With EMBEDDED=n, we get lots of stuff automatically selected | 3 | # With EXPERT=n, we get lots of stuff automatically selected |
4 | # that we usually don't need on AVR32. | 4 | # that we usually don't need on AVR32. |
5 | select EMBEDDED | 5 | select EXPERT |
6 | select HAVE_CLK | 6 | select HAVE_CLK |
7 | select HAVE_OPROFILE | 7 | select HAVE_OPROFILE |
8 | select HAVE_KPROBES | 8 | select HAVE_KPROBES |
diff --git a/arch/avr32/include/asm/pgalloc.h b/arch/avr32/include/asm/pgalloc.h index 92ecd8446ef8..bc7e8ae479ee 100644 --- a/arch/avr32/include/asm/pgalloc.h +++ b/arch/avr32/include/asm/pgalloc.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #ifndef __ASM_AVR32_PGALLOC_H | 8 | #ifndef __ASM_AVR32_PGALLOC_H |
9 | #define __ASM_AVR32_PGALLOC_H | 9 | #define __ASM_AVR32_PGALLOC_H |
10 | 10 | ||
11 | #include <linux/mm.h> | ||
11 | #include <linux/quicklist.h> | 12 | #include <linux/quicklist.h> |
12 | #include <asm/page.h> | 13 | #include <asm/page.h> |
13 | #include <asm/pgtable.h> | 14 | #include <asm/pgtable.h> |
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 0a221d48152d..c09577ddc3c5 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig | |||
@@ -30,6 +30,9 @@ config BLACKFIN | |||
30 | select HAVE_KERNEL_LZO if RAMKERNEL | 30 | select HAVE_KERNEL_LZO if RAMKERNEL |
31 | select HAVE_OPROFILE | 31 | select HAVE_OPROFILE |
32 | select ARCH_WANT_OPTIONAL_GPIOLIB | 32 | select ARCH_WANT_OPTIONAL_GPIOLIB |
33 | select HAVE_GENERIC_HARDIRQS | ||
34 | select GENERIC_IRQ_PROBE | ||
35 | select IRQ_PER_CPU if SMP | ||
33 | 36 | ||
34 | config GENERIC_CSUM | 37 | config GENERIC_CSUM |
35 | def_bool y | 38 | def_bool y |
@@ -44,15 +47,6 @@ config ZONE_DMA | |||
44 | config GENERIC_FIND_NEXT_BIT | 47 | config GENERIC_FIND_NEXT_BIT |
45 | def_bool y | 48 | def_bool y |
46 | 49 | ||
47 | config GENERIC_HARDIRQS | ||
48 | def_bool y | ||
49 | |||
50 | config GENERIC_IRQ_PROBE | ||
51 | def_bool y | ||
52 | |||
53 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
54 | def_bool y | ||
55 | |||
56 | config GENERIC_GPIO | 50 | config GENERIC_GPIO |
57 | def_bool y | 51 | def_bool y |
58 | 52 | ||
@@ -254,11 +248,6 @@ config HOTPLUG_CPU | |||
254 | depends on SMP && HOTPLUG | 248 | depends on SMP && HOTPLUG |
255 | default y | 249 | default y |
256 | 250 | ||
257 | config IRQ_PER_CPU | ||
258 | bool | ||
259 | depends on SMP | ||
260 | default y | ||
261 | |||
262 | config HAVE_LEGACY_PER_CPU_AREA | 251 | config HAVE_LEGACY_PER_CPU_AREA |
263 | def_bool y | 252 | def_bool y |
264 | depends on SMP | 253 | depends on SMP |
diff --git a/arch/blackfin/configs/BF518F-EZBRD_defconfig b/arch/blackfin/configs/BF518F-EZBRD_defconfig index c0b988ee30df..db8d38a12a9a 100644 --- a/arch/blackfin/configs/BF518F-EZBRD_defconfig +++ b/arch/blackfin/configs/BF518F-EZBRD_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF526-EZBRD_defconfig b/arch/blackfin/configs/BF526-EZBRD_defconfig index 864af5b68874..3e50d7857c27 100644 --- a/arch/blackfin/configs/BF526-EZBRD_defconfig +++ b/arch/blackfin/configs/BF526-EZBRD_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF527-AD7160-EVAL_defconfig b/arch/blackfin/configs/BF527-AD7160-EVAL_defconfig index 7b6a3370dbe2..362f59dd5228 100644 --- a/arch/blackfin/configs/BF527-AD7160-EVAL_defconfig +++ b/arch/blackfin/configs/BF527-AD7160-EVAL_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_ELF_CORE is not set | 9 | # CONFIG_ELF_CORE is not set |
10 | # CONFIG_AIO is not set | 10 | # CONFIG_AIO is not set |
11 | CONFIG_SLAB=y | 11 | CONFIG_SLAB=y |
diff --git a/arch/blackfin/configs/BF527-EZKIT-V2_defconfig b/arch/blackfin/configs/BF527-EZKIT-V2_defconfig index 4faa6b46a352..023ff0df2692 100644 --- a/arch/blackfin/configs/BF527-EZKIT-V2_defconfig +++ b/arch/blackfin/configs/BF527-EZKIT-V2_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF527-EZKIT_defconfig b/arch/blackfin/configs/BF527-EZKIT_defconfig index 9d893eb68243..4e5a121b3c56 100644 --- a/arch/blackfin/configs/BF527-EZKIT_defconfig +++ b/arch/blackfin/configs/BF527-EZKIT_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF527-TLL6527M_defconfig b/arch/blackfin/configs/BF527-TLL6527M_defconfig index 97a2767c80f8..cd0636bb24a0 100644 --- a/arch/blackfin/configs/BF527-TLL6527M_defconfig +++ b/arch/blackfin/configs/BF527-TLL6527M_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG_PROC=y | |||
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_SYSCTL_SYSCALL is not set | 10 | # CONFIG_SYSCTL_SYSCALL is not set |
11 | # CONFIG_ELF_CORE is not set | 11 | # CONFIG_ELF_CORE is not set |
12 | # CONFIG_FUTEX is not set | 12 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF533-EZKIT_defconfig b/arch/blackfin/configs/BF533-EZKIT_defconfig index f84774360c5b..9f8fc84e4ac9 100644 --- a/arch/blackfin/configs/BF533-EZKIT_defconfig +++ b/arch/blackfin/configs/BF533-EZKIT_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF533-STAMP_defconfig b/arch/blackfin/configs/BF533-STAMP_defconfig index 0e7262c04cc2..ccc432b722a0 100644 --- a/arch/blackfin/configs/BF533-STAMP_defconfig +++ b/arch/blackfin/configs/BF533-STAMP_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF537-STAMP_defconfig b/arch/blackfin/configs/BF537-STAMP_defconfig index 4d14a002e7bd..566695472a84 100644 --- a/arch/blackfin/configs/BF537-STAMP_defconfig +++ b/arch/blackfin/configs/BF537-STAMP_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF538-EZKIT_defconfig b/arch/blackfin/configs/BF538-EZKIT_defconfig index fbee9d776f56..ac22124ccb6c 100644 --- a/arch/blackfin/configs/BF538-EZKIT_defconfig +++ b/arch/blackfin/configs/BF538-EZKIT_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF548-EZKIT_defconfig b/arch/blackfin/configs/BF548-EZKIT_defconfig index 05dd11db2f7d..944404b6ff08 100644 --- a/arch/blackfin/configs/BF548-EZKIT_defconfig +++ b/arch/blackfin/configs/BF548-EZKIT_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF561-ACVILON_defconfig b/arch/blackfin/configs/BF561-ACVILON_defconfig index bcb14d1c5664..b7c8451f26ac 100644 --- a/arch/blackfin/configs/BF561-ACVILON_defconfig +++ b/arch/blackfin/configs/BF561-ACVILON_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF561-EZKIT-SMP_defconfig b/arch/blackfin/configs/BF561-EZKIT-SMP_defconfig index 4cf451024fd8..7e67ba31e991 100644 --- a/arch/blackfin/configs/BF561-EZKIT-SMP_defconfig +++ b/arch/blackfin/configs/BF561-EZKIT-SMP_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BF561-EZKIT_defconfig b/arch/blackfin/configs/BF561-EZKIT_defconfig index 843aaa54a9e3..141e5933e1aa 100644 --- a/arch/blackfin/configs/BF561-EZKIT_defconfig +++ b/arch/blackfin/configs/BF561-EZKIT_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_FUTEX is not set | 11 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/BlackStamp_defconfig b/arch/blackfin/configs/BlackStamp_defconfig index dae7adf3b2a2..97ebe09a7370 100644 --- a/arch/blackfin/configs/BlackStamp_defconfig +++ b/arch/blackfin/configs/BlackStamp_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_SYSCTL_SYSCALL is not set | 10 | # CONFIG_SYSCTL_SYSCALL is not set |
11 | # CONFIG_ELF_CORE is not set | 11 | # CONFIG_ELF_CORE is not set |
12 | # CONFIG_FUTEX is not set | 12 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/CM-BF527_defconfig b/arch/blackfin/configs/CM-BF527_defconfig index f3414244bfed..c2457543e58c 100644 --- a/arch/blackfin/configs/CM-BF527_defconfig +++ b/arch/blackfin/configs/CM-BF527_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
8 | # CONFIG_RD_GZIP is not set | 8 | # CONFIG_RD_GZIP is not set |
9 | CONFIG_RD_LZMA=y | 9 | CONFIG_RD_LZMA=y |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_SYSCTL_SYSCALL is not set | 12 | # CONFIG_SYSCTL_SYSCALL is not set |
13 | # CONFIG_ELF_CORE is not set | 13 | # CONFIG_ELF_CORE is not set |
14 | # CONFIG_FUTEX is not set | 14 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/CM-BF533_defconfig b/arch/blackfin/configs/CM-BF533_defconfig index 8c7e08f173d4..baf1c1573e5e 100644 --- a/arch/blackfin/configs/CM-BF533_defconfig +++ b/arch/blackfin/configs/CM-BF533_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_RD_GZIP is not set | 8 | # CONFIG_RD_GZIP is not set |
9 | CONFIG_RD_LZMA=y | 9 | CONFIG_RD_LZMA=y |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | # CONFIG_UID16 is not set | 11 | # CONFIG_UID16 is not set |
12 | # CONFIG_SYSCTL_SYSCALL is not set | 12 | # CONFIG_SYSCTL_SYSCALL is not set |
13 | # CONFIG_ELF_CORE is not set | 13 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/blackfin/configs/CM-BF537E_defconfig b/arch/blackfin/configs/CM-BF537E_defconfig index bd3cb766d078..707cbf8a2590 100644 --- a/arch/blackfin/configs/CM-BF537E_defconfig +++ b/arch/blackfin/configs/CM-BF537E_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
8 | # CONFIG_RD_GZIP is not set | 8 | # CONFIG_RD_GZIP is not set |
9 | CONFIG_RD_LZMA=y | 9 | CONFIG_RD_LZMA=y |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_UID16 is not set | 12 | # CONFIG_UID16 is not set |
13 | # CONFIG_SYSCTL_SYSCALL is not set | 13 | # CONFIG_SYSCTL_SYSCALL is not set |
14 | # CONFIG_ELF_CORE is not set | 14 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/blackfin/configs/CM-BF537U_defconfig b/arch/blackfin/configs/CM-BF537U_defconfig index 82224f37c04e..4596935eadac 100644 --- a/arch/blackfin/configs/CM-BF537U_defconfig +++ b/arch/blackfin/configs/CM-BF537U_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
8 | # CONFIG_RD_GZIP is not set | 8 | # CONFIG_RD_GZIP is not set |
9 | CONFIG_RD_LZMA=y | 9 | CONFIG_RD_LZMA=y |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_UID16 is not set | 12 | # CONFIG_UID16 is not set |
13 | # CONFIG_SYSCTL_SYSCALL is not set | 13 | # CONFIG_SYSCTL_SYSCALL is not set |
14 | # CONFIG_ELF_CORE is not set | 14 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/blackfin/configs/CM-BF548_defconfig b/arch/blackfin/configs/CM-BF548_defconfig index 433598c6e773..df267588efec 100644 --- a/arch/blackfin/configs/CM-BF548_defconfig +++ b/arch/blackfin/configs/CM-BF548_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
8 | # CONFIG_RD_GZIP is not set | 8 | # CONFIG_RD_GZIP is not set |
9 | CONFIG_RD_LZMA=y | 9 | CONFIG_RD_LZMA=y |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_UID16 is not set | 12 | # CONFIG_UID16 is not set |
13 | # CONFIG_SYSCTL_SYSCALL is not set | 13 | # CONFIG_SYSCTL_SYSCALL is not set |
14 | # CONFIG_ELF_CORE is not set | 14 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/blackfin/configs/CM-BF561_defconfig b/arch/blackfin/configs/CM-BF561_defconfig index ded7d845cb39..6c7b21585a43 100644 --- a/arch/blackfin/configs/CM-BF561_defconfig +++ b/arch/blackfin/configs/CM-BF561_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
8 | # CONFIG_RD_GZIP is not set | 8 | # CONFIG_RD_GZIP is not set |
9 | CONFIG_RD_LZMA=y | 9 | CONFIG_RD_LZMA=y |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_UID16 is not set | 12 | # CONFIG_UID16 is not set |
13 | # CONFIG_SYSCTL_SYSCALL is not set | 13 | # CONFIG_SYSCTL_SYSCALL is not set |
14 | # CONFIG_ELF_CORE is not set | 14 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/blackfin/configs/DNP5370_defconfig b/arch/blackfin/configs/DNP5370_defconfig index 0ebc7d9aa426..f50313657f3e 100644 --- a/arch/blackfin/configs/DNP5370_defconfig +++ b/arch/blackfin/configs/DNP5370_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG=y | |||
5 | CONFIG_IKCONFIG_PROC=y | 5 | CONFIG_IKCONFIG_PROC=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_SLOB=y | 9 | CONFIG_SLOB=y |
10 | # CONFIG_BLK_DEV_BSG is not set | 10 | # CONFIG_BLK_DEV_BSG is not set |
11 | # CONFIG_IOSCHED_CFQ is not set | 11 | # CONFIG_IOSCHED_CFQ is not set |
diff --git a/arch/blackfin/configs/H8606_defconfig b/arch/blackfin/configs/H8606_defconfig index 700fb701c121..7450127b6455 100644 --- a/arch/blackfin/configs/H8606_defconfig +++ b/arch/blackfin/configs/H8606_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_SYSCTL_SYSCALL is not set | 6 | # CONFIG_SYSCTL_SYSCALL is not set |
7 | # CONFIG_ELF_CORE is not set | 7 | # CONFIG_ELF_CORE is not set |
8 | # CONFIG_FUTEX is not set | 8 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/IP0X_defconfig b/arch/blackfin/configs/IP0X_defconfig index b40156d217e3..5e797cf72043 100644 --- a/arch/blackfin/configs/IP0X_defconfig +++ b/arch/blackfin/configs/IP0X_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_SYSCTL_SYSCALL is not set | 7 | # CONFIG_SYSCTL_SYSCALL is not set |
8 | # CONFIG_HOTPLUG is not set | 8 | # CONFIG_HOTPLUG is not set |
9 | # CONFIG_ELF_CORE is not set | 9 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/blackfin/configs/PNAV-10_defconfig b/arch/blackfin/configs/PNAV-10_defconfig index be866d95ed76..a566a2fe6b9b 100644 --- a/arch/blackfin/configs/PNAV-10_defconfig +++ b/arch/blackfin/configs/PNAV-10_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_SYSCTL_SYSCALL is not set | 6 | # CONFIG_SYSCTL_SYSCALL is not set |
7 | # CONFIG_ELF_CORE is not set | 7 | # CONFIG_ELF_CORE is not set |
8 | # CONFIG_FUTEX is not set | 8 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/SRV1_defconfig b/arch/blackfin/configs/SRV1_defconfig index b64bdf759b82..853809510ee9 100644 --- a/arch/blackfin/configs/SRV1_defconfig +++ b/arch/blackfin/configs/SRV1_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_SYSCTL_SYSCALL is not set | 7 | # CONFIG_SYSCTL_SYSCALL is not set |
8 | CONFIG_KALLSYMS_ALL=y | 8 | CONFIG_KALLSYMS_ALL=y |
9 | # CONFIG_ELF_CORE is not set | 9 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/blackfin/configs/TCM-BF518_defconfig b/arch/blackfin/configs/TCM-BF518_defconfig index 1bccd9a50986..d496ae9a39b0 100644 --- a/arch/blackfin/configs/TCM-BF518_defconfig +++ b/arch/blackfin/configs/TCM-BF518_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_RD_GZIP is not set | 8 | # CONFIG_RD_GZIP is not set |
9 | CONFIG_RD_LZMA=y | 9 | CONFIG_RD_LZMA=y |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | # CONFIG_SYSCTL_SYSCALL is not set | 11 | # CONFIG_SYSCTL_SYSCALL is not set |
12 | # CONFIG_ELF_CORE is not set | 12 | # CONFIG_ELF_CORE is not set |
13 | # CONFIG_FUTEX is not set | 13 | # CONFIG_FUTEX is not set |
diff --git a/arch/blackfin/configs/TCM-BF537_defconfig b/arch/blackfin/configs/TCM-BF537_defconfig index 00ce899e9e5d..65f642167a50 100644 --- a/arch/blackfin/configs/TCM-BF537_defconfig +++ b/arch/blackfin/configs/TCM-BF537_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
8 | # CONFIG_RD_GZIP is not set | 8 | # CONFIG_RD_GZIP is not set |
9 | CONFIG_RD_LZMA=y | 9 | CONFIG_RD_LZMA=y |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_UID16 is not set | 12 | # CONFIG_UID16 is not set |
13 | # CONFIG_SYSCTL_SYSCALL is not set | 13 | # CONFIG_SYSCTL_SYSCALL is not set |
14 | # CONFIG_ELF_CORE is not set | 14 | # CONFIG_ELF_CORE is not set |
diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig index 613e62831c55..0a7a4c11d8b1 100644 --- a/arch/cris/Kconfig +++ b/arch/cris/Kconfig | |||
@@ -54,6 +54,8 @@ config CRIS | |||
54 | bool | 54 | bool |
55 | default y | 55 | default y |
56 | select HAVE_IDE | 56 | select HAVE_IDE |
57 | select HAVE_GENERIC_HARDIRQS | ||
58 | select GENERIC_HARDIRQS_NO_DEPRECATED | ||
57 | 59 | ||
58 | config HZ | 60 | config HZ |
59 | int | 61 | int |
@@ -67,10 +69,6 @@ menu "General setup" | |||
67 | 69 | ||
68 | source "fs/Kconfig.binfmt" | 70 | source "fs/Kconfig.binfmt" |
69 | 71 | ||
70 | config GENERIC_HARDIRQS | ||
71 | bool | ||
72 | default y | ||
73 | |||
74 | config ETRAX_CMDLINE | 72 | config ETRAX_CMDLINE |
75 | string "Kernel command line" | 73 | string "Kernel command line" |
76 | default "root=/dev/mtdblock3" | 74 | default "root=/dev/mtdblock3" |
diff --git a/arch/cris/arch-v10/kernel/irq.c b/arch/cris/arch-v10/kernel/irq.c index a0c0df8be9c8..7328a7cf7449 100644 --- a/arch/cris/arch-v10/kernel/irq.c +++ b/arch/cris/arch-v10/kernel/irq.c | |||
@@ -104,43 +104,21 @@ static void (*interrupt[NR_IRQS])(void) = { | |||
104 | IRQ31_interrupt | 104 | IRQ31_interrupt |
105 | }; | 105 | }; |
106 | 106 | ||
107 | static void enable_crisv10_irq(unsigned int irq); | 107 | static void enable_crisv10_irq(struct irq_data *data) |
108 | |||
109 | static unsigned int startup_crisv10_irq(unsigned int irq) | ||
110 | { | ||
111 | enable_crisv10_irq(irq); | ||
112 | return 0; | ||
113 | } | ||
114 | |||
115 | #define shutdown_crisv10_irq disable_crisv10_irq | ||
116 | |||
117 | static void enable_crisv10_irq(unsigned int irq) | ||
118 | { | ||
119 | crisv10_unmask_irq(irq); | ||
120 | } | ||
121 | |||
122 | static void disable_crisv10_irq(unsigned int irq) | ||
123 | { | ||
124 | crisv10_mask_irq(irq); | ||
125 | } | ||
126 | |||
127 | static void ack_crisv10_irq(unsigned int irq) | ||
128 | { | 108 | { |
109 | crisv10_unmask_irq(data->irq); | ||
129 | } | 110 | } |
130 | 111 | ||
131 | static void end_crisv10_irq(unsigned int irq) | 112 | static void disable_crisv10_irq(struct irq_data *data) |
132 | { | 113 | { |
114 | crisv10_mask_irq(data->irq); | ||
133 | } | 115 | } |
134 | 116 | ||
135 | static struct irq_chip crisv10_irq_type = { | 117 | static struct irq_chip crisv10_irq_type = { |
136 | .name = "CRISv10", | 118 | .name = "CRISv10", |
137 | .startup = startup_crisv10_irq, | 119 | .irq_shutdown = disable_crisv10_irq, |
138 | .shutdown = shutdown_crisv10_irq, | 120 | .irq_enable = enable_crisv10_irq, |
139 | .enable = enable_crisv10_irq, | 121 | .irq_disable = disable_crisv10_irq, |
140 | .disable = disable_crisv10_irq, | ||
141 | .ack = ack_crisv10_irq, | ||
142 | .end = end_crisv10_irq, | ||
143 | .set_affinity = NULL | ||
144 | }; | 122 | }; |
145 | 123 | ||
146 | void weird_irq(void); | 124 | void weird_irq(void); |
@@ -221,7 +199,8 @@ init_IRQ(void) | |||
221 | 199 | ||
222 | /* Initialize IRQ handler descriptors. */ | 200 | /* Initialize IRQ handler descriptors. */ |
223 | for(i = 2; i < NR_IRQS; i++) { | 201 | for(i = 2; i < NR_IRQS; i++) { |
224 | irq_desc[i].chip = &crisv10_irq_type; | 202 | set_irq_desc_and_handler(i, &crisv10_irq_type, |
203 | handle_simple_irq); | ||
225 | set_int_vector(i, interrupt[i]); | 204 | set_int_vector(i, interrupt[i]); |
226 | } | 205 | } |
227 | 206 | ||
diff --git a/arch/cris/arch-v32/kernel/irq.c b/arch/cris/arch-v32/kernel/irq.c index 2ed48ae3d313..0ad9db5126c7 100644 --- a/arch/cris/arch-v32/kernel/irq.c +++ b/arch/cris/arch-v32/kernel/irq.c | |||
@@ -291,54 +291,33 @@ void crisv32_unmask_irq(int irq) | |||
291 | } | 291 | } |
292 | 292 | ||
293 | 293 | ||
294 | static unsigned int startup_crisv32_irq(unsigned int irq) | 294 | static void enable_crisv32_irq(struct irq_data *data) |
295 | { | 295 | { |
296 | crisv32_unmask_irq(irq); | 296 | crisv32_unmask_irq(data->irq); |
297 | return 0; | ||
298 | } | ||
299 | |||
300 | static void shutdown_crisv32_irq(unsigned int irq) | ||
301 | { | ||
302 | crisv32_mask_irq(irq); | ||
303 | } | 297 | } |
304 | 298 | ||
305 | static void enable_crisv32_irq(unsigned int irq) | 299 | static void disable_crisv32_irq(struct irq_data *data) |
306 | { | 300 | { |
307 | crisv32_unmask_irq(irq); | 301 | crisv32_mask_irq(data->irq); |
308 | } | 302 | } |
309 | 303 | ||
310 | static void disable_crisv32_irq(unsigned int irq) | 304 | static int set_affinity_crisv32_irq(struct irq_data *data, |
311 | { | 305 | const struct cpumask *dest, bool force) |
312 | crisv32_mask_irq(irq); | ||
313 | } | ||
314 | |||
315 | static void ack_crisv32_irq(unsigned int irq) | ||
316 | { | ||
317 | } | ||
318 | |||
319 | static void end_crisv32_irq(unsigned int irq) | ||
320 | { | ||
321 | } | ||
322 | |||
323 | int set_affinity_crisv32_irq(unsigned int irq, const struct cpumask *dest) | ||
324 | { | 306 | { |
325 | unsigned long flags; | 307 | unsigned long flags; |
308 | |||
326 | spin_lock_irqsave(&irq_lock, flags); | 309 | spin_lock_irqsave(&irq_lock, flags); |
327 | irq_allocations[irq - FIRST_IRQ].mask = *dest; | 310 | irq_allocations[data->irq - FIRST_IRQ].mask = *dest; |
328 | spin_unlock_irqrestore(&irq_lock, flags); | 311 | spin_unlock_irqrestore(&irq_lock, flags); |
329 | |||
330 | return 0; | 312 | return 0; |
331 | } | 313 | } |
332 | 314 | ||
333 | static struct irq_chip crisv32_irq_type = { | 315 | static struct irq_chip crisv32_irq_type = { |
334 | .name = "CRISv32", | 316 | .name = "CRISv32", |
335 | .startup = startup_crisv32_irq, | 317 | .irq_shutdown = disable_crisv32_irq, |
336 | .shutdown = shutdown_crisv32_irq, | 318 | .irq_enable = enable_crisv32_irq, |
337 | .enable = enable_crisv32_irq, | 319 | .irq_disable = disable_crisv32_irq, |
338 | .disable = disable_crisv32_irq, | 320 | .irq_set_affinity = set_affinity_crisv32_irq, |
339 | .ack = ack_crisv32_irq, | ||
340 | .end = end_crisv32_irq, | ||
341 | .set_affinity = set_affinity_crisv32_irq | ||
342 | }; | 321 | }; |
343 | 322 | ||
344 | void | 323 | void |
@@ -472,7 +451,8 @@ init_IRQ(void) | |||
472 | 451 | ||
473 | /* Point all IRQ's to bad handlers. */ | 452 | /* Point all IRQ's to bad handlers. */ |
474 | for (i = FIRST_IRQ, j = 0; j < NR_IRQS; i++, j++) { | 453 | for (i = FIRST_IRQ, j = 0; j < NR_IRQS; i++, j++) { |
475 | irq_desc[j].chip = &crisv32_irq_type; | 454 | set_irq_chip_and_handler(j, &crisv32_irq_type, |
455 | handle_simple_irq); | ||
476 | set_exception_vector(i, interrupt[j]); | 456 | set_exception_vector(i, interrupt[j]); |
477 | } | 457 | } |
478 | 458 | ||
diff --git a/arch/cris/configs/artpec_3_defconfig b/arch/cris/configs/artpec_3_defconfig index 590f72c9455d..71854d41c5a0 100644 --- a/arch/cris/configs/artpec_3_defconfig +++ b/arch/cris/configs/artpec_3_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | # CONFIG_SWAP is not set | 2 | # CONFIG_SWAP is not set |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_KALLSYMS is not set | 6 | # CONFIG_KALLSYMS is not set |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/cris/configs/etrax-100lx_v2_defconfig b/arch/cris/configs/etrax-100lx_v2_defconfig index 1b2853e39801..a85aabf92be5 100644 --- a/arch/cris/configs/etrax-100lx_v2_defconfig +++ b/arch/cris/configs/etrax-100lx_v2_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | # CONFIG_SWAP is not set | 2 | # CONFIG_SWAP is not set |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_KALLSYMS is not set | 6 | # CONFIG_KALLSYMS is not set |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/cris/configs/etraxfs_defconfig b/arch/cris/configs/etraxfs_defconfig index f73d38cc9c66..87c7227fecb2 100644 --- a/arch/cris/configs/etraxfs_defconfig +++ b/arch/cris/configs/etraxfs_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | # CONFIG_SWAP is not set | 2 | # CONFIG_SWAP is not set |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_KALLSYMS is not set | 6 | # CONFIG_KALLSYMS is not set |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/cris/kernel/irq.c b/arch/cris/kernel/irq.c index 469f7f9d62e0..c346952f06dc 100644 --- a/arch/cris/kernel/irq.c +++ b/arch/cris/kernel/irq.c | |||
@@ -62,7 +62,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
62 | for_each_online_cpu(j) | 62 | for_each_online_cpu(j) |
63 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); | 63 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); |
64 | #endif | 64 | #endif |
65 | seq_printf(p, " %14s", irq_desc[i].chip->name); | 65 | seq_printf(p, " %14s", irq_desc[i].irq_data.chip->name); |
66 | seq_printf(p, " %s", action->name); | 66 | seq_printf(p, " %s", action->name); |
67 | 67 | ||
68 | for (action=action->next; action; action = action->next) | 68 | for (action=action->next; action; action = action->next) |
@@ -93,8 +93,8 @@ asmlinkage void do_IRQ(int irq, struct pt_regs * regs) | |||
93 | printk("do_IRQ: stack overflow: %lX\n", sp); | 93 | printk("do_IRQ: stack overflow: %lX\n", sp); |
94 | show_stack(NULL, (unsigned long *)sp); | 94 | show_stack(NULL, (unsigned long *)sp); |
95 | } | 95 | } |
96 | __do_IRQ(irq); | 96 | generic_handle_irq(irq); |
97 | irq_exit(); | 97 | irq_exit(); |
98 | set_irq_regs(old_regs); | 98 | set_irq_regs(old_regs); |
99 | } | 99 | } |
100 | 100 | ||
diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig index f6bcb039cd6d..747499a1b31e 100644 --- a/arch/frv/Kconfig +++ b/arch/frv/Kconfig | |||
@@ -5,6 +5,7 @@ config FRV | |||
5 | select HAVE_ARCH_TRACEHOOK | 5 | select HAVE_ARCH_TRACEHOOK |
6 | select HAVE_IRQ_WORK | 6 | select HAVE_IRQ_WORK |
7 | select HAVE_PERF_EVENTS | 7 | select HAVE_PERF_EVENTS |
8 | select HAVE_GENERIC_HARDIRQS | ||
8 | 9 | ||
9 | config ZONE_DMA | 10 | config ZONE_DMA |
10 | bool | 11 | bool |
@@ -29,14 +30,6 @@ config GENERIC_CALIBRATE_DELAY | |||
29 | bool | 30 | bool |
30 | default n | 31 | default n |
31 | 32 | ||
32 | config GENERIC_HARDIRQS | ||
33 | bool | ||
34 | default y | ||
35 | |||
36 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
37 | bool | ||
38 | default y | ||
39 | |||
40 | config TIME_LOW_RES | 33 | config TIME_LOW_RES |
41 | bool | 34 | bool |
42 | default y | 35 | default y |
diff --git a/arch/frv/defconfig b/arch/frv/defconfig index b8ebe9e8a493..b1b792610fdf 100644 --- a/arch/frv/defconfig +++ b/arch/frv/defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | CONFIG_MMU=y | 8 | CONFIG_MMU=y |
9 | CONFIG_FRV_OUTOFLINE_ATOMIC_OPS=y | 9 | CONFIG_FRV_OUTOFLINE_ATOMIC_OPS=y |
diff --git a/arch/h8300/Kconfig b/arch/h8300/Kconfig index 65f897d8c1e9..6df692d1475f 100644 --- a/arch/h8300/Kconfig +++ b/arch/h8300/Kconfig | |||
@@ -2,6 +2,8 @@ config H8300 | |||
2 | bool | 2 | bool |
3 | default y | 3 | default y |
4 | select HAVE_IDE | 4 | select HAVE_IDE |
5 | select HAVE_GENERIC_HARDIRQS | ||
6 | select GENERIC_HARDIRQS_NO_DEPRECATED | ||
5 | 7 | ||
6 | config SYMBOL_PREFIX | 8 | config SYMBOL_PREFIX |
7 | string | 9 | string |
@@ -47,10 +49,6 @@ config GENERIC_HWEIGHT | |||
47 | bool | 49 | bool |
48 | default y | 50 | default y |
49 | 51 | ||
50 | config GENERIC_HARDIRQS | ||
51 | bool | ||
52 | default y | ||
53 | |||
54 | config GENERIC_CALIBRATE_DELAY | 52 | config GENERIC_CALIBRATE_DELAY |
55 | bool | 53 | bool |
56 | default y | 54 | default y |
diff --git a/arch/h8300/defconfig b/arch/h8300/defconfig index 342f77765f02..042425a02645 100644 --- a/arch/h8300/defconfig +++ b/arch/h8300/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | # CONFIG_LOCALVERSION_AUTO is not set | 2 | # CONFIG_LOCALVERSION_AUTO is not set |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | # CONFIG_UID16 is not set | 5 | # CONFIG_UID16 is not set |
6 | # CONFIG_SYSCTL_SYSCALL is not set | 6 | # CONFIG_SYSCTL_SYSCALL is not set |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
diff --git a/arch/h8300/kernel/irq.c b/arch/h8300/kernel/irq.c index c25dc2c2b1da..7643d39925d6 100644 --- a/arch/h8300/kernel/irq.c +++ b/arch/h8300/kernel/irq.c | |||
@@ -38,34 +38,30 @@ static inline int is_ext_irq(unsigned int irq) | |||
38 | return (irq >= EXT_IRQ0 && irq <= (EXT_IRQ0 + EXT_IRQS)); | 38 | return (irq >= EXT_IRQ0 && irq <= (EXT_IRQ0 + EXT_IRQS)); |
39 | } | 39 | } |
40 | 40 | ||
41 | static void h8300_enable_irq(unsigned int irq) | 41 | static void h8300_enable_irq(struct irq_data *data) |
42 | { | 42 | { |
43 | if (is_ext_irq(irq)) | 43 | if (is_ext_irq(data->irq)) |
44 | IER_REGS |= 1 << (irq - EXT_IRQ0); | 44 | IER_REGS |= 1 << (data->irq - EXT_IRQ0); |
45 | } | 45 | } |
46 | 46 | ||
47 | static void h8300_disable_irq(unsigned int irq) | 47 | static void h8300_disable_irq(struct irq_data *data) |
48 | { | 48 | { |
49 | if (is_ext_irq(irq)) | 49 | if (is_ext_irq(data->irq)) |
50 | IER_REGS &= ~(1 << (irq - EXT_IRQ0)); | 50 | IER_REGS &= ~(1 << (data->irq - EXT_IRQ0)); |
51 | } | 51 | } |
52 | 52 | ||
53 | static void h8300_end_irq(unsigned int irq) | 53 | static unsigned int h8300_startup_irq(struct irq_data *data) |
54 | { | 54 | { |
55 | } | 55 | if (is_ext_irq(data->irq)) |
56 | 56 | return h8300_enable_irq_pin(data->irq); | |
57 | static unsigned int h8300_startup_irq(unsigned int irq) | ||
58 | { | ||
59 | if (is_ext_irq(irq)) | ||
60 | return h8300_enable_irq_pin(irq); | ||
61 | else | 57 | else |
62 | return 0; | 58 | return 0; |
63 | } | 59 | } |
64 | 60 | ||
65 | static void h8300_shutdown_irq(unsigned int irq) | 61 | static void h8300_shutdown_irq(struct irq_data *data) |
66 | { | 62 | { |
67 | if (is_ext_irq(irq)) | 63 | if (is_ext_irq(data->irq)) |
68 | h8300_disable_irq_pin(irq); | 64 | h8300_disable_irq_pin(data->irq); |
69 | } | 65 | } |
70 | 66 | ||
71 | /* | 67 | /* |
@@ -73,12 +69,10 @@ static void h8300_shutdown_irq(unsigned int irq) | |||
73 | */ | 69 | */ |
74 | struct irq_chip h8300irq_chip = { | 70 | struct irq_chip h8300irq_chip = { |
75 | .name = "H8300-INTC", | 71 | .name = "H8300-INTC", |
76 | .startup = h8300_startup_irq, | 72 | .irq_startup = h8300_startup_irq, |
77 | .shutdown = h8300_shutdown_irq, | 73 | .irq_shutdown = h8300_shutdown_irq, |
78 | .enable = h8300_enable_irq, | 74 | .irq_enable = h8300_enable_irq, |
79 | .disable = h8300_disable_irq, | 75 | .irq_disable = h8300_disable_irq, |
80 | .ack = NULL, | ||
81 | .end = h8300_end_irq, | ||
82 | }; | 76 | }; |
83 | 77 | ||
84 | #if defined(CONFIG_RAMKERNEL) | 78 | #if defined(CONFIG_RAMKERNEL) |
@@ -160,18 +154,14 @@ void __init init_IRQ(void) | |||
160 | 154 | ||
161 | setup_vector(); | 155 | setup_vector(); |
162 | 156 | ||
163 | for (c = 0; c < NR_IRQS; c++) { | 157 | for (c = 0; c < NR_IRQS; c++) |
164 | irq_desc[c].status = IRQ_DISABLED; | 158 | set_irq_chip_and_handler(c, &h8300irq_chip, handle_simple_irq); |
165 | irq_desc[c].action = NULL; | ||
166 | irq_desc[c].depth = 1; | ||
167 | irq_desc[c].chip = &h8300irq_chip; | ||
168 | } | ||
169 | } | 159 | } |
170 | 160 | ||
171 | asmlinkage void do_IRQ(int irq) | 161 | asmlinkage void do_IRQ(int irq) |
172 | { | 162 | { |
173 | irq_enter(); | 163 | irq_enter(); |
174 | __do_IRQ(irq); | 164 | generic_handle_irq(irq); |
175 | irq_exit(); | 165 | irq_exit(); |
176 | } | 166 | } |
177 | 167 | ||
@@ -192,7 +182,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
192 | goto unlock; | 182 | goto unlock; |
193 | seq_printf(p, "%3d: ",i); | 183 | seq_printf(p, "%3d: ",i); |
194 | seq_printf(p, "%10u ", kstat_irqs(i)); | 184 | seq_printf(p, "%10u ", kstat_irqs(i)); |
195 | seq_printf(p, " %14s", irq_desc[i].chip->name); | 185 | seq_printf(p, " %14s", irq_desc[i].irq_data.chip->name); |
196 | seq_printf(p, "-%-8s", irq_desc[i].name); | 186 | seq_printf(p, "-%-8s", irq_desc[i].name); |
197 | seq_printf(p, " %s", action->name); | 187 | seq_printf(p, " %s", action->name); |
198 | 188 | ||
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index e0f5b6d7f849..fcf3b437a2d9 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -22,6 +22,10 @@ config IA64 | |||
22 | select HAVE_KVM | 22 | select HAVE_KVM |
23 | select HAVE_ARCH_TRACEHOOK | 23 | select HAVE_ARCH_TRACEHOOK |
24 | select HAVE_DMA_API_DEBUG | 24 | select HAVE_DMA_API_DEBUG |
25 | select HAVE_GENERIC_HARDIRQS | ||
26 | select GENERIC_IRQ_PROBE | ||
27 | select GENERIC_PENDING_IRQ if SMP | ||
28 | select IRQ_PER_CPU | ||
25 | default y | 29 | default y |
26 | help | 30 | help |
27 | The Itanium Processor Family is Intel's 64-bit successor to | 31 | The Itanium Processor Family is Intel's 64-bit successor to |
@@ -678,28 +682,6 @@ source "arch/ia64/kvm/Kconfig" | |||
678 | 682 | ||
679 | source "lib/Kconfig" | 683 | source "lib/Kconfig" |
680 | 684 | ||
681 | # | ||
682 | # Use the generic interrupt handling code in kernel/irq/: | ||
683 | # | ||
684 | config GENERIC_HARDIRQS | ||
685 | def_bool y | ||
686 | |||
687 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
688 | def_bool y | ||
689 | |||
690 | config GENERIC_IRQ_PROBE | ||
691 | bool | ||
692 | default y | ||
693 | |||
694 | config GENERIC_PENDING_IRQ | ||
695 | bool | ||
696 | depends on GENERIC_HARDIRQS && SMP | ||
697 | default y | ||
698 | |||
699 | config IRQ_PER_CPU | ||
700 | bool | ||
701 | default y | ||
702 | |||
703 | config IOMMU_HELPER | 685 | config IOMMU_HELPER |
704 | def_bool (IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB || IA64_GENERIC || SWIOTLB) | 686 | def_bool (IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB || IA64_GENERIC || SWIOTLB) |
705 | 687 | ||
diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig index 5c291d65196b..ef4c1e442be3 100644 --- a/arch/m32r/Kconfig +++ b/arch/m32r/Kconfig | |||
@@ -7,6 +7,9 @@ config M32R | |||
7 | select HAVE_KERNEL_GZIP | 7 | select HAVE_KERNEL_GZIP |
8 | select HAVE_KERNEL_BZIP2 | 8 | select HAVE_KERNEL_BZIP2 |
9 | select HAVE_KERNEL_LZMA | 9 | select HAVE_KERNEL_LZMA |
10 | select HAVE_GENERIC_HARDIRQS | ||
11 | select GENERIC_HARDIRQS_NO_DEPRECATED | ||
12 | select GENERIC_IRQ_PROBE | ||
10 | 13 | ||
11 | config SBUS | 14 | config SBUS |
12 | bool | 15 | bool |
@@ -19,14 +22,6 @@ config ZONE_DMA | |||
19 | bool | 22 | bool |
20 | default y | 23 | default y |
21 | 24 | ||
22 | config GENERIC_HARDIRQS | ||
23 | bool | ||
24 | default y | ||
25 | |||
26 | config GENERIC_IRQ_PROBE | ||
27 | bool | ||
28 | default y | ||
29 | |||
30 | config NO_IOPORT | 25 | config NO_IOPORT |
31 | def_bool y | 26 | def_bool y |
32 | 27 | ||
diff --git a/arch/m32r/configs/m32700ut.smp_defconfig b/arch/m32r/configs/m32700ut.smp_defconfig index 816c3ecaa2aa..a3d727ed6a16 100644 --- a/arch/m32r/configs/m32700ut.smp_defconfig +++ b/arch/m32r/configs/m32700ut.smp_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG=y | |||
5 | CONFIG_IKCONFIG_PROC=y | 5 | CONFIG_IKCONFIG_PROC=y |
6 | CONFIG_LOG_BUF_SHIFT=15 | 6 | CONFIG_LOG_BUF_SHIFT=15 |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_KALLSYMS is not set | 9 | # CONFIG_KALLSYMS is not set |
10 | # CONFIG_FUTEX is not set | 10 | # CONFIG_FUTEX is not set |
11 | # CONFIG_EPOLL is not set | 11 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/m32700ut.up_defconfig b/arch/m32r/configs/m32700ut.up_defconfig index 84785686640a..b8334163099d 100644 --- a/arch/m32r/configs/m32700ut.up_defconfig +++ b/arch/m32r/configs/m32700ut.up_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG=y | |||
5 | CONFIG_IKCONFIG_PROC=y | 5 | CONFIG_IKCONFIG_PROC=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_KALLSYMS is not set | 9 | # CONFIG_KALLSYMS is not set |
10 | # CONFIG_FUTEX is not set | 10 | # CONFIG_FUTEX is not set |
11 | # CONFIG_EPOLL is not set | 11 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/mappi.nommu_defconfig b/arch/m32r/configs/mappi.nommu_defconfig index 354a964d084d..7c90ce2fc42b 100644 --- a/arch/m32r/configs/mappi.nommu_defconfig +++ b/arch/m32r/configs/mappi.nommu_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
3 | CONFIG_IKCONFIG=y | 3 | CONFIG_IKCONFIG=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | # CONFIG_FUTEX is not set | 8 | # CONFIG_FUTEX is not set |
9 | # CONFIG_EPOLL is not set | 9 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/mappi.smp_defconfig b/arch/m32r/configs/mappi.smp_defconfig index 9022307bd073..367d07cebcd3 100644 --- a/arch/m32r/configs/mappi.smp_defconfig +++ b/arch/m32r/configs/mappi.smp_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=15 | 5 | CONFIG_LOG_BUF_SHIFT=15 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_KALLSYMS is not set | 9 | # CONFIG_KALLSYMS is not set |
10 | # CONFIG_FUTEX is not set | 10 | # CONFIG_FUTEX is not set |
11 | # CONFIG_EPOLL is not set | 11 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/mappi.up_defconfig b/arch/m32r/configs/mappi.up_defconfig index 3726068721a5..cb11384386ce 100644 --- a/arch/m32r/configs/mappi.up_defconfig +++ b/arch/m32r/configs/mappi.up_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_KALLSYMS is not set | 9 | # CONFIG_KALLSYMS is not set |
10 | # CONFIG_FUTEX is not set | 10 | # CONFIG_FUTEX is not set |
11 | # CONFIG_EPOLL is not set | 11 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/mappi2.opsp_defconfig b/arch/m32r/configs/mappi2.opsp_defconfig index 6136fad048e4..3bff779259b4 100644 --- a/arch/m32r/configs/mappi2.opsp_defconfig +++ b/arch/m32r/configs/mappi2.opsp_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
4 | CONFIG_IKCONFIG=y | 4 | CONFIG_IKCONFIG=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_FUTEX is not set | 9 | # CONFIG_FUTEX is not set |
10 | # CONFIG_EPOLL is not set | 10 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/mappi2.vdec2_defconfig b/arch/m32r/configs/mappi2.vdec2_defconfig index dce1fc7d67ed..75246c9c1af8 100644 --- a/arch/m32r/configs/mappi2.vdec2_defconfig +++ b/arch/m32r/configs/mappi2.vdec2_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
4 | CONFIG_IKCONFIG=y | 4 | CONFIG_IKCONFIG=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_FUTEX is not set | 9 | # CONFIG_FUTEX is not set |
10 | # CONFIG_EPOLL is not set | 10 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/mappi3.smp_defconfig b/arch/m32r/configs/mappi3.smp_defconfig index b204e2ecd0f1..27cefd41ac1f 100644 --- a/arch/m32r/configs/mappi3.smp_defconfig +++ b/arch/m32r/configs/mappi3.smp_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_IKCONFIG_PROC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=15 | 5 | CONFIG_LOG_BUF_SHIFT=15 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_KALLSYMS is not set | 9 | # CONFIG_KALLSYMS is not set |
10 | # CONFIG_FUTEX is not set | 10 | # CONFIG_FUTEX is not set |
11 | # CONFIG_EPOLL is not set | 11 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/oaks32r_defconfig b/arch/m32r/configs/oaks32r_defconfig index 5aa4ea9ebb10..5087a510ca4f 100644 --- a/arch/m32r/configs/oaks32r_defconfig +++ b/arch/m32r/configs/oaks32r_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y | |||
2 | CONFIG_BSD_PROCESS_ACCT=y | 2 | CONFIG_BSD_PROCESS_ACCT=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 4 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | # CONFIG_KALLSYMS is not set | 6 | # CONFIG_KALLSYMS is not set |
7 | # CONFIG_FUTEX is not set | 7 | # CONFIG_FUTEX is not set |
8 | # CONFIG_EPOLL is not set | 8 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/opsput_defconfig b/arch/m32r/configs/opsput_defconfig index 8494c6a276e8..50c6f525db20 100644 --- a/arch/m32r/configs/opsput_defconfig +++ b/arch/m32r/configs/opsput_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
4 | CONFIG_IKCONFIG=y | 4 | CONFIG_IKCONFIG=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_FUTEX is not set | 9 | # CONFIG_FUTEX is not set |
10 | # CONFIG_EPOLL is not set | 10 | # CONFIG_EPOLL is not set |
diff --git a/arch/m32r/configs/usrv_defconfig b/arch/m32r/configs/usrv_defconfig index 1df293bc2ab9..a3cfaaedab60 100644 --- a/arch/m32r/configs/usrv_defconfig +++ b/arch/m32r/configs/usrv_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
5 | CONFIG_LOG_BUF_SHIFT=15 | 5 | CONFIG_LOG_BUF_SHIFT=15 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_EXTRA_PASS=y | 9 | CONFIG_KALLSYMS_EXTRA_PASS=y |
10 | CONFIG_SLAB=y | 10 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/m32r/kernel/irq.c b/arch/m32r/kernel/irq.c index 7db26f1f082d..76eaf3883fbd 100644 --- a/arch/m32r/kernel/irq.c +++ b/arch/m32r/kernel/irq.c | |||
@@ -40,8 +40,10 @@ int show_interrupts(struct seq_file *p, void *v) | |||
40 | } | 40 | } |
41 | 41 | ||
42 | if (i < NR_IRQS) { | 42 | if (i < NR_IRQS) { |
43 | raw_spin_lock_irqsave(&irq_desc[i].lock, flags); | 43 | struct irq_desc *desc = irq_to_desc(i); |
44 | action = irq_desc[i].action; | 44 | |
45 | raw_spin_lock_irqsave(&desc->lock, flags); | ||
46 | action = desc->action; | ||
45 | if (!action) | 47 | if (!action) |
46 | goto skip; | 48 | goto skip; |
47 | seq_printf(p, "%3d: ",i); | 49 | seq_printf(p, "%3d: ",i); |
@@ -51,7 +53,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
51 | for_each_online_cpu(j) | 53 | for_each_online_cpu(j) |
52 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); | 54 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); |
53 | #endif | 55 | #endif |
54 | seq_printf(p, " %14s", irq_desc[i].chip->name); | 56 | seq_printf(p, " %14s", desc->irq_data.chip->name); |
55 | seq_printf(p, " %s", action->name); | 57 | seq_printf(p, " %s", action->name); |
56 | 58 | ||
57 | for (action=action->next; action; action = action->next) | 59 | for (action=action->next; action; action = action->next) |
@@ -59,7 +61,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
59 | 61 | ||
60 | seq_putc(p, '\n'); | 62 | seq_putc(p, '\n'); |
61 | skip: | 63 | skip: |
62 | raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); | 64 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
63 | } | 65 | } |
64 | return 0; | 66 | return 0; |
65 | } | 67 | } |
@@ -78,7 +80,7 @@ asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs) | |||
78 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | 80 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
79 | /* FIXME M32R */ | 81 | /* FIXME M32R */ |
80 | #endif | 82 | #endif |
81 | __do_IRQ(irq); | 83 | generic_handle_irq(irq); |
82 | irq_exit(); | 84 | irq_exit(); |
83 | set_irq_regs(old_regs); | 85 | set_irq_regs(old_regs); |
84 | 86 | ||
diff --git a/arch/m32r/platforms/m32104ut/setup.c b/arch/m32r/platforms/m32104ut/setup.c index 402a59d7219b..4a693d02c1e1 100644 --- a/arch/m32r/platforms/m32104ut/setup.c +++ b/arch/m32r/platforms/m32104ut/setup.c | |||
@@ -39,39 +39,30 @@ static void enable_m32104ut_irq(unsigned int irq) | |||
39 | outl(data, port); | 39 | outl(data, port); |
40 | } | 40 | } |
41 | 41 | ||
42 | static void mask_and_ack_m32104ut(unsigned int irq) | 42 | static void mask_m32104ut_irq(struct irq_data *data) |
43 | { | 43 | { |
44 | disable_m32104ut_irq(irq); | 44 | disable_m32104ut_irq(data->irq); |
45 | } | 45 | } |
46 | 46 | ||
47 | static void end_m32104ut_irq(unsigned int irq) | 47 | static void unmask_m32104ut_irq(struct irq_data *data) |
48 | { | 48 | { |
49 | enable_m32104ut_irq(irq); | 49 | enable_m32104ut_irq(data->irq); |
50 | } | 50 | } |
51 | 51 | ||
52 | static unsigned int startup_m32104ut_irq(unsigned int irq) | 52 | static void shutdown_m32104ut_irq(struct irq_data *data) |
53 | { | 53 | { |
54 | enable_m32104ut_irq(irq); | 54 | unsigned int irq = data->irq; |
55 | return (0); | 55 | unsigned long port = irq2port(irq); |
56 | } | ||
57 | |||
58 | static void shutdown_m32104ut_irq(unsigned int irq) | ||
59 | { | ||
60 | unsigned long port; | ||
61 | 56 | ||
62 | port = irq2port(irq); | ||
63 | outl(M32R_ICUCR_ILEVEL7, port); | 57 | outl(M32R_ICUCR_ILEVEL7, port); |
64 | } | 58 | } |
65 | 59 | ||
66 | static struct irq_chip m32104ut_irq_type = | 60 | static struct irq_chip m32104ut_irq_type = |
67 | { | 61 | { |
68 | .name = "M32104UT-IRQ", | 62 | .name = "M32104UT-IRQ", |
69 | .startup = startup_m32104ut_irq, | 63 | .irq_shutdown = shutdown_m32104ut_irq, |
70 | .shutdown = shutdown_m32104ut_irq, | 64 | .irq_unmask = unmask_m32104ut_irq, |
71 | .enable = enable_m32104ut_irq, | 65 | .irq_mask = mask_m32104ut_irq, |
72 | .disable = disable_m32104ut_irq, | ||
73 | .ack = mask_and_ack_m32104ut, | ||
74 | .end = end_m32104ut_irq | ||
75 | }; | 66 | }; |
76 | 67 | ||
77 | void __init init_IRQ(void) | 68 | void __init init_IRQ(void) |
@@ -85,36 +76,29 @@ void __init init_IRQ(void) | |||
85 | 76 | ||
86 | #if defined(CONFIG_SMC91X) | 77 | #if defined(CONFIG_SMC91X) |
87 | /* INT#0: LAN controller on M32104UT-LAN (SMC91C111)*/ | 78 | /* INT#0: LAN controller on M32104UT-LAN (SMC91C111)*/ |
88 | irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED; | 79 | set_irq_chip_and_handler(M32R_IRQ_INT0, &m32104ut_irq_type, |
89 | irq_desc[M32R_IRQ_INT0].chip = &m32104ut_irq_type; | 80 | handle_level_irq); |
90 | irq_desc[M32R_IRQ_INT0].action = 0; | 81 | /* "H" level sense */ |
91 | irq_desc[M32R_IRQ_INT0].depth = 1; | 82 | cu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD11; |
92 | icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD11; /* "H" level sense */ | ||
93 | disable_m32104ut_irq(M32R_IRQ_INT0); | 83 | disable_m32104ut_irq(M32R_IRQ_INT0); |
94 | #endif /* CONFIG_SMC91X */ | 84 | #endif /* CONFIG_SMC91X */ |
95 | 85 | ||
96 | /* MFT2 : system timer */ | 86 | /* MFT2 : system timer */ |
97 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; | 87 | set_irq_chip_and_handler(M32R_IRQ_MFT2, &m32104ut_irq_type, |
98 | irq_desc[M32R_IRQ_MFT2].chip = &m32104ut_irq_type; | 88 | handle_level_irq); |
99 | irq_desc[M32R_IRQ_MFT2].action = 0; | ||
100 | irq_desc[M32R_IRQ_MFT2].depth = 1; | ||
101 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; | 89 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; |
102 | disable_m32104ut_irq(M32R_IRQ_MFT2); | 90 | disable_m32104ut_irq(M32R_IRQ_MFT2); |
103 | 91 | ||
104 | #ifdef CONFIG_SERIAL_M32R_SIO | 92 | #ifdef CONFIG_SERIAL_M32R_SIO |
105 | /* SIO0_R : uart receive data */ | 93 | /* SIO0_R : uart receive data */ |
106 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; | 94 | set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &m32104ut_irq_type, |
107 | irq_desc[M32R_IRQ_SIO0_R].chip = &m32104ut_irq_type; | 95 | handle_level_irq); |
108 | irq_desc[M32R_IRQ_SIO0_R].action = 0; | ||
109 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; | ||
110 | icu_data[M32R_IRQ_SIO0_R].icucr = M32R_ICUCR_IEN; | 96 | icu_data[M32R_IRQ_SIO0_R].icucr = M32R_ICUCR_IEN; |
111 | disable_m32104ut_irq(M32R_IRQ_SIO0_R); | 97 | disable_m32104ut_irq(M32R_IRQ_SIO0_R); |
112 | 98 | ||
113 | /* SIO0_S : uart send data */ | 99 | /* SIO0_S : uart send data */ |
114 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; | 100 | set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &m32104ut_irq_type, |
115 | irq_desc[M32R_IRQ_SIO0_S].chip = &m32104ut_irq_type; | 101 | handle_level_irq); |
116 | irq_desc[M32R_IRQ_SIO0_S].action = 0; | ||
117 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; | ||
118 | icu_data[M32R_IRQ_SIO0_S].icucr = M32R_ICUCR_IEN; | 102 | icu_data[M32R_IRQ_SIO0_S].icucr = M32R_ICUCR_IEN; |
119 | disable_m32104ut_irq(M32R_IRQ_SIO0_S); | 103 | disable_m32104ut_irq(M32R_IRQ_SIO0_S); |
120 | #endif /* CONFIG_SERIAL_M32R_SIO */ | 104 | #endif /* CONFIG_SERIAL_M32R_SIO */ |
diff --git a/arch/m32r/platforms/m32700ut/setup.c b/arch/m32r/platforms/m32700ut/setup.c index 80b1a026795a..2074bcc841eb 100644 --- a/arch/m32r/platforms/m32700ut/setup.c +++ b/arch/m32r/platforms/m32700ut/setup.c | |||
@@ -45,39 +45,30 @@ static void enable_m32700ut_irq(unsigned int irq) | |||
45 | outl(data, port); | 45 | outl(data, port); |
46 | } | 46 | } |
47 | 47 | ||
48 | static void mask_and_ack_m32700ut(unsigned int irq) | 48 | static void mask_m32700ut(struct irq_data *data) |
49 | { | 49 | { |
50 | disable_m32700ut_irq(irq); | 50 | disable_m32700ut_irq(data->irq); |
51 | } | 51 | } |
52 | 52 | ||
53 | static void end_m32700ut_irq(unsigned int irq) | 53 | static void unmask_m32700ut(struct irq_data *data) |
54 | { | 54 | { |
55 | enable_m32700ut_irq(irq); | 55 | enable_m32700ut_irq(data->irq); |
56 | } | 56 | } |
57 | 57 | ||
58 | static unsigned int startup_m32700ut_irq(unsigned int irq) | 58 | static void shutdown_m32700ut(struct irq_data *data) |
59 | { | ||
60 | enable_m32700ut_irq(irq); | ||
61 | return (0); | ||
62 | } | ||
63 | |||
64 | static void shutdown_m32700ut_irq(unsigned int irq) | ||
65 | { | 59 | { |
66 | unsigned long port; | 60 | unsigned long port; |
67 | 61 | ||
68 | port = irq2port(irq); | 62 | port = irq2port(data->irq); |
69 | outl(M32R_ICUCR_ILEVEL7, port); | 63 | outl(M32R_ICUCR_ILEVEL7, port); |
70 | } | 64 | } |
71 | 65 | ||
72 | static struct irq_chip m32700ut_irq_type = | 66 | static struct irq_chip m32700ut_irq_type = |
73 | { | 67 | { |
74 | .name = "M32700UT-IRQ", | 68 | .name = "M32700UT-IRQ", |
75 | .startup = startup_m32700ut_irq, | 69 | .irq_shutdown = shutdown_m32700ut, |
76 | .shutdown = shutdown_m32700ut_irq, | 70 | .irq_mask = mask_m32700ut, |
77 | .enable = enable_m32700ut_irq, | 71 | .irq_unmask = unmask_m32700ut |
78 | .disable = disable_m32700ut_irq, | ||
79 | .ack = mask_and_ack_m32700ut, | ||
80 | .end = end_m32700ut_irq | ||
81 | }; | 72 | }; |
82 | 73 | ||
83 | /* | 74 | /* |
@@ -99,7 +90,6 @@ static void disable_m32700ut_pld_irq(unsigned int irq) | |||
99 | unsigned int pldirq; | 90 | unsigned int pldirq; |
100 | 91 | ||
101 | pldirq = irq2pldirq(irq); | 92 | pldirq = irq2pldirq(irq); |
102 | // disable_m32700ut_irq(M32R_IRQ_INT1); | ||
103 | port = pldirq2port(pldirq); | 93 | port = pldirq2port(pldirq); |
104 | data = pld_icu_data[pldirq].icucr|PLD_ICUCR_ILEVEL7; | 94 | data = pld_icu_data[pldirq].icucr|PLD_ICUCR_ILEVEL7; |
105 | outw(data, port); | 95 | outw(data, port); |
@@ -111,50 +101,38 @@ static void enable_m32700ut_pld_irq(unsigned int irq) | |||
111 | unsigned int pldirq; | 101 | unsigned int pldirq; |
112 | 102 | ||
113 | pldirq = irq2pldirq(irq); | 103 | pldirq = irq2pldirq(irq); |
114 | // enable_m32700ut_irq(M32R_IRQ_INT1); | ||
115 | port = pldirq2port(pldirq); | 104 | port = pldirq2port(pldirq); |
116 | data = pld_icu_data[pldirq].icucr|PLD_ICUCR_IEN|PLD_ICUCR_ILEVEL6; | 105 | data = pld_icu_data[pldirq].icucr|PLD_ICUCR_IEN|PLD_ICUCR_ILEVEL6; |
117 | outw(data, port); | 106 | outw(data, port); |
118 | } | 107 | } |
119 | 108 | ||
120 | static void mask_and_ack_m32700ut_pld(unsigned int irq) | 109 | static void mask_m32700ut_pld(struct irq_data *data) |
121 | { | ||
122 | disable_m32700ut_pld_irq(irq); | ||
123 | // mask_and_ack_m32700ut(M32R_IRQ_INT1); | ||
124 | } | ||
125 | |||
126 | static void end_m32700ut_pld_irq(unsigned int irq) | ||
127 | { | 110 | { |
128 | enable_m32700ut_pld_irq(irq); | 111 | disable_m32700ut_pld_irq(data->irq); |
129 | end_m32700ut_irq(M32R_IRQ_INT1); | ||
130 | } | 112 | } |
131 | 113 | ||
132 | static unsigned int startup_m32700ut_pld_irq(unsigned int irq) | 114 | static void unmask_m32700ut_pld(struct irq_data *data) |
133 | { | 115 | { |
134 | enable_m32700ut_pld_irq(irq); | 116 | enable_m32700ut_pld_irq(data->irq); |
135 | return (0); | 117 | enable_m32700ut_irq(M32R_IRQ_INT1); |
136 | } | 118 | } |
137 | 119 | ||
138 | static void shutdown_m32700ut_pld_irq(unsigned int irq) | 120 | static void shutdown_m32700ut_pld_irq(struct irq_data *data) |
139 | { | 121 | { |
140 | unsigned long port; | 122 | unsigned long port; |
141 | unsigned int pldirq; | 123 | unsigned int pldirq; |
142 | 124 | ||
143 | pldirq = irq2pldirq(irq); | 125 | pldirq = irq2pldirq(data->irq); |
144 | // shutdown_m32700ut_irq(M32R_IRQ_INT1); | ||
145 | port = pldirq2port(pldirq); | 126 | port = pldirq2port(pldirq); |
146 | outw(PLD_ICUCR_ILEVEL7, port); | 127 | outw(PLD_ICUCR_ILEVEL7, port); |
147 | } | 128 | } |
148 | 129 | ||
149 | static struct irq_chip m32700ut_pld_irq_type = | 130 | static struct irq_chip m32700ut_pld_irq_type = |
150 | { | 131 | { |
151 | .name = "M32700UT-PLD-IRQ", | 132 | .name = "M32700UT-PLD-IRQ", |
152 | .startup = startup_m32700ut_pld_irq, | 133 | .irq_shutdown = shutdown_m32700ut_pld_irq, |
153 | .shutdown = shutdown_m32700ut_pld_irq, | 134 | .irq_mask = mask_m32700ut_pld, |
154 | .enable = enable_m32700ut_pld_irq, | 135 | .irq_unmask = unmask_m32700ut_pld, |
155 | .disable = disable_m32700ut_pld_irq, | ||
156 | .ack = mask_and_ack_m32700ut_pld, | ||
157 | .end = end_m32700ut_pld_irq | ||
158 | }; | 136 | }; |
159 | 137 | ||
160 | /* | 138 | /* |
@@ -188,42 +166,33 @@ static void enable_m32700ut_lanpld_irq(unsigned int irq) | |||
188 | outw(data, port); | 166 | outw(data, port); |
189 | } | 167 | } |
190 | 168 | ||
191 | static void mask_and_ack_m32700ut_lanpld(unsigned int irq) | 169 | static void mask_m32700ut_lanpld(struct irq_data *data) |
192 | { | 170 | { |
193 | disable_m32700ut_lanpld_irq(irq); | 171 | disable_m32700ut_lanpld_irq(data->irq); |
194 | } | 172 | } |
195 | 173 | ||
196 | static void end_m32700ut_lanpld_irq(unsigned int irq) | 174 | static void unmask_m32700ut_lanpld(struct irq_data *data) |
197 | { | 175 | { |
198 | enable_m32700ut_lanpld_irq(irq); | 176 | enable_m32700ut_lanpld_irq(data->irq); |
199 | end_m32700ut_irq(M32R_IRQ_INT0); | 177 | enable_m32700ut_irq(M32R_IRQ_INT0); |
200 | } | ||
201 | |||
202 | static unsigned int startup_m32700ut_lanpld_irq(unsigned int irq) | ||
203 | { | ||
204 | enable_m32700ut_lanpld_irq(irq); | ||
205 | return (0); | ||
206 | } | 178 | } |
207 | 179 | ||
208 | static void shutdown_m32700ut_lanpld_irq(unsigned int irq) | 180 | static void shutdown_m32700ut_lanpld(struct irq_data *data) |
209 | { | 181 | { |
210 | unsigned long port; | 182 | unsigned long port; |
211 | unsigned int pldirq; | 183 | unsigned int pldirq; |
212 | 184 | ||
213 | pldirq = irq2lanpldirq(irq); | 185 | pldirq = irq2lanpldirq(data->irq); |
214 | port = lanpldirq2port(pldirq); | 186 | port = lanpldirq2port(pldirq); |
215 | outw(PLD_ICUCR_ILEVEL7, port); | 187 | outw(PLD_ICUCR_ILEVEL7, port); |
216 | } | 188 | } |
217 | 189 | ||
218 | static struct irq_chip m32700ut_lanpld_irq_type = | 190 | static struct irq_chip m32700ut_lanpld_irq_type = |
219 | { | 191 | { |
220 | .name = "M32700UT-PLD-LAN-IRQ", | 192 | .name = "M32700UT-PLD-LAN-IRQ", |
221 | .startup = startup_m32700ut_lanpld_irq, | 193 | .irq_shutdown = shutdown_m32700ut_lanpld, |
222 | .shutdown = shutdown_m32700ut_lanpld_irq, | 194 | .irq_mask = mask_m32700ut_lanpld, |
223 | .enable = enable_m32700ut_lanpld_irq, | 195 | .irq_unmask = unmask_m32700ut_lanpld, |
224 | .disable = disable_m32700ut_lanpld_irq, | ||
225 | .ack = mask_and_ack_m32700ut_lanpld, | ||
226 | .end = end_m32700ut_lanpld_irq | ||
227 | }; | 196 | }; |
228 | 197 | ||
229 | /* | 198 | /* |
@@ -257,143 +226,110 @@ static void enable_m32700ut_lcdpld_irq(unsigned int irq) | |||
257 | outw(data, port); | 226 | outw(data, port); |
258 | } | 227 | } |
259 | 228 | ||
260 | static void mask_and_ack_m32700ut_lcdpld(unsigned int irq) | 229 | static void mask_m32700ut_lcdpld(struct irq_data *data) |
261 | { | 230 | { |
262 | disable_m32700ut_lcdpld_irq(irq); | 231 | disable_m32700ut_lcdpld_irq(data->irq); |
263 | } | 232 | } |
264 | 233 | ||
265 | static void end_m32700ut_lcdpld_irq(unsigned int irq) | 234 | static void unmask_m32700ut_lcdpld(struct irq_data *data) |
266 | { | 235 | { |
267 | enable_m32700ut_lcdpld_irq(irq); | 236 | enable_m32700ut_lcdpld_irq(data->irq); |
268 | end_m32700ut_irq(M32R_IRQ_INT2); | 237 | enable_m32700ut_irq(M32R_IRQ_INT2); |
269 | } | ||
270 | |||
271 | static unsigned int startup_m32700ut_lcdpld_irq(unsigned int irq) | ||
272 | { | ||
273 | enable_m32700ut_lcdpld_irq(irq); | ||
274 | return (0); | ||
275 | } | 238 | } |
276 | 239 | ||
277 | static void shutdown_m32700ut_lcdpld_irq(unsigned int irq) | 240 | static void shutdown_m32700ut_lcdpld(struct irq_data *data) |
278 | { | 241 | { |
279 | unsigned long port; | 242 | unsigned long port; |
280 | unsigned int pldirq; | 243 | unsigned int pldirq; |
281 | 244 | ||
282 | pldirq = irq2lcdpldirq(irq); | 245 | pldirq = irq2lcdpldirq(data->irq); |
283 | port = lcdpldirq2port(pldirq); | 246 | port = lcdpldirq2port(pldirq); |
284 | outw(PLD_ICUCR_ILEVEL7, port); | 247 | outw(PLD_ICUCR_ILEVEL7, port); |
285 | } | 248 | } |
286 | 249 | ||
287 | static struct irq_chip m32700ut_lcdpld_irq_type = | 250 | static struct irq_chip m32700ut_lcdpld_irq_type = |
288 | { | 251 | { |
289 | .name = "M32700UT-PLD-LCD-IRQ", | 252 | .name = "M32700UT-PLD-LCD-IRQ", |
290 | .startup = startup_m32700ut_lcdpld_irq, | 253 | .irq_shutdown = shutdown_m32700ut_lcdpld, |
291 | .shutdown = shutdown_m32700ut_lcdpld_irq, | 254 | .irq_mask = mask_m32700ut_lcdpld, |
292 | .enable = enable_m32700ut_lcdpld_irq, | 255 | .irq_unmask = unmask_m32700ut_lcdpld, |
293 | .disable = disable_m32700ut_lcdpld_irq, | ||
294 | .ack = mask_and_ack_m32700ut_lcdpld, | ||
295 | .end = end_m32700ut_lcdpld_irq | ||
296 | }; | 256 | }; |
297 | 257 | ||
298 | void __init init_IRQ(void) | 258 | void __init init_IRQ(void) |
299 | { | 259 | { |
300 | #if defined(CONFIG_SMC91X) | 260 | #if defined(CONFIG_SMC91X) |
301 | /* INT#0: LAN controller on M32700UT-LAN (SMC91C111)*/ | 261 | /* INT#0: LAN controller on M32700UT-LAN (SMC91C111)*/ |
302 | irq_desc[M32700UT_LAN_IRQ_LAN].status = IRQ_DISABLED; | 262 | set_irq_chip_and_handler(M32700UT_LAN_IRQ_LAN, |
303 | irq_desc[M32700UT_LAN_IRQ_LAN].chip = &m32700ut_lanpld_irq_type; | 263 | &m32700ut_lanpld_irq_type, handle_level_irq); |
304 | irq_desc[M32700UT_LAN_IRQ_LAN].action = 0; | ||
305 | irq_desc[M32700UT_LAN_IRQ_LAN].depth = 1; /* disable nested irq */ | ||
306 | lanpld_icu_data[irq2lanpldirq(M32700UT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */ | 264 | lanpld_icu_data[irq2lanpldirq(M32700UT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */ |
307 | disable_m32700ut_lanpld_irq(M32700UT_LAN_IRQ_LAN); | 265 | disable_m32700ut_lanpld_irq(M32700UT_LAN_IRQ_LAN); |
308 | #endif /* CONFIG_SMC91X */ | 266 | #endif /* CONFIG_SMC91X */ |
309 | 267 | ||
310 | /* MFT2 : system timer */ | 268 | /* MFT2 : system timer */ |
311 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; | 269 | set_irq_chip_and_handler(M32R_IRQ_MFT2, &m32700ut_irq_type, |
312 | irq_desc[M32R_IRQ_MFT2].chip = &m32700ut_irq_type; | 270 | handle_level_irq); |
313 | irq_desc[M32R_IRQ_MFT2].action = 0; | ||
314 | irq_desc[M32R_IRQ_MFT2].depth = 1; | ||
315 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; | 271 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; |
316 | disable_m32700ut_irq(M32R_IRQ_MFT2); | 272 | disable_m32700ut_irq(M32R_IRQ_MFT2); |
317 | 273 | ||
318 | /* SIO0 : receive */ | 274 | /* SIO0 : receive */ |
319 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; | 275 | set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &m32700ut_irq_type, |
320 | irq_desc[M32R_IRQ_SIO0_R].chip = &m32700ut_irq_type; | 276 | handle_level_irq); |
321 | irq_desc[M32R_IRQ_SIO0_R].action = 0; | ||
322 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; | ||
323 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; | 277 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; |
324 | disable_m32700ut_irq(M32R_IRQ_SIO0_R); | 278 | disable_m32700ut_irq(M32R_IRQ_SIO0_R); |
325 | 279 | ||
326 | /* SIO0 : send */ | 280 | /* SIO0 : send */ |
327 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; | 281 | set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &m32700ut_irq_type, |
328 | irq_desc[M32R_IRQ_SIO0_S].chip = &m32700ut_irq_type; | 282 | handle_level_irq); |
329 | irq_desc[M32R_IRQ_SIO0_S].action = 0; | ||
330 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; | ||
331 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; | 283 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; |
332 | disable_m32700ut_irq(M32R_IRQ_SIO0_S); | 284 | disable_m32700ut_irq(M32R_IRQ_SIO0_S); |
333 | 285 | ||
334 | /* SIO1 : receive */ | 286 | /* SIO1 : receive */ |
335 | irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED; | 287 | set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &m32700ut_irq_type, |
336 | irq_desc[M32R_IRQ_SIO1_R].chip = &m32700ut_irq_type; | 288 | handle_level_irq); |
337 | irq_desc[M32R_IRQ_SIO1_R].action = 0; | ||
338 | irq_desc[M32R_IRQ_SIO1_R].depth = 1; | ||
339 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; | 289 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; |
340 | disable_m32700ut_irq(M32R_IRQ_SIO1_R); | 290 | disable_m32700ut_irq(M32R_IRQ_SIO1_R); |
341 | 291 | ||
342 | /* SIO1 : send */ | 292 | /* SIO1 : send */ |
343 | irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED; | 293 | set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &m32700ut_irq_type, |
344 | irq_desc[M32R_IRQ_SIO1_S].chip = &m32700ut_irq_type; | 294 | handle_level_irq); |
345 | irq_desc[M32R_IRQ_SIO1_S].action = 0; | ||
346 | irq_desc[M32R_IRQ_SIO1_S].depth = 1; | ||
347 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; | 295 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; |
348 | disable_m32700ut_irq(M32R_IRQ_SIO1_S); | 296 | disable_m32700ut_irq(M32R_IRQ_SIO1_S); |
349 | 297 | ||
350 | /* DMA1 : */ | 298 | /* DMA1 : */ |
351 | irq_desc[M32R_IRQ_DMA1].status = IRQ_DISABLED; | 299 | set_irq_chip_and_handler(M32R_IRQ_DMA1, &m32700ut_irq_type, |
352 | irq_desc[M32R_IRQ_DMA1].chip = &m32700ut_irq_type; | 300 | handle_level_irq); |
353 | irq_desc[M32R_IRQ_DMA1].action = 0; | ||
354 | irq_desc[M32R_IRQ_DMA1].depth = 1; | ||
355 | icu_data[M32R_IRQ_DMA1].icucr = 0; | 301 | icu_data[M32R_IRQ_DMA1].icucr = 0; |
356 | disable_m32700ut_irq(M32R_IRQ_DMA1); | 302 | disable_m32700ut_irq(M32R_IRQ_DMA1); |
357 | 303 | ||
358 | #ifdef CONFIG_SERIAL_M32R_PLDSIO | 304 | #ifdef CONFIG_SERIAL_M32R_PLDSIO |
359 | /* INT#1: SIO0 Receive on PLD */ | 305 | /* INT#1: SIO0 Receive on PLD */ |
360 | irq_desc[PLD_IRQ_SIO0_RCV].status = IRQ_DISABLED; | 306 | set_irq_chip_and_handler(PLD_IRQ_SIO0_RCV, &m32700ut_pld_irq_type, |
361 | irq_desc[PLD_IRQ_SIO0_RCV].chip = &m32700ut_pld_irq_type; | 307 | handle_level_irq); |
362 | irq_desc[PLD_IRQ_SIO0_RCV].action = 0; | ||
363 | irq_desc[PLD_IRQ_SIO0_RCV].depth = 1; /* disable nested irq */ | ||
364 | pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; | 308 | pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; |
365 | disable_m32700ut_pld_irq(PLD_IRQ_SIO0_RCV); | 309 | disable_m32700ut_pld_irq(PLD_IRQ_SIO0_RCV); |
366 | 310 | ||
367 | /* INT#1: SIO0 Send on PLD */ | 311 | /* INT#1: SIO0 Send on PLD */ |
368 | irq_desc[PLD_IRQ_SIO0_SND].status = IRQ_DISABLED; | 312 | set_irq_chip_and_handler(PLD_IRQ_SIO0_SND, &m32700ut_pld_irq_type, |
369 | irq_desc[PLD_IRQ_SIO0_SND].chip = &m32700ut_pld_irq_type; | 313 | handle_level_irq); |
370 | irq_desc[PLD_IRQ_SIO0_SND].action = 0; | ||
371 | irq_desc[PLD_IRQ_SIO0_SND].depth = 1; /* disable nested irq */ | ||
372 | pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; | 314 | pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; |
373 | disable_m32700ut_pld_irq(PLD_IRQ_SIO0_SND); | 315 | disable_m32700ut_pld_irq(PLD_IRQ_SIO0_SND); |
374 | #endif /* CONFIG_SERIAL_M32R_PLDSIO */ | 316 | #endif /* CONFIG_SERIAL_M32R_PLDSIO */ |
375 | 317 | ||
376 | /* INT#1: CFC IREQ on PLD */ | 318 | /* INT#1: CFC IREQ on PLD */ |
377 | irq_desc[PLD_IRQ_CFIREQ].status = IRQ_DISABLED; | 319 | set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &m32700ut_pld_irq_type, |
378 | irq_desc[PLD_IRQ_CFIREQ].chip = &m32700ut_pld_irq_type; | 320 | handle_level_irq); |
379 | irq_desc[PLD_IRQ_CFIREQ].action = 0; | ||
380 | irq_desc[PLD_IRQ_CFIREQ].depth = 1; /* disable nested irq */ | ||
381 | pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */ | 321 | pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */ |
382 | disable_m32700ut_pld_irq(PLD_IRQ_CFIREQ); | 322 | disable_m32700ut_pld_irq(PLD_IRQ_CFIREQ); |
383 | 323 | ||
384 | /* INT#1: CFC Insert on PLD */ | 324 | /* INT#1: CFC Insert on PLD */ |
385 | irq_desc[PLD_IRQ_CFC_INSERT].status = IRQ_DISABLED; | 325 | set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &m32700ut_pld_irq_type, |
386 | irq_desc[PLD_IRQ_CFC_INSERT].chip = &m32700ut_pld_irq_type; | 326 | handle_level_irq); |
387 | irq_desc[PLD_IRQ_CFC_INSERT].action = 0; | ||
388 | irq_desc[PLD_IRQ_CFC_INSERT].depth = 1; /* disable nested irq */ | ||
389 | pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */ | 327 | pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */ |
390 | disable_m32700ut_pld_irq(PLD_IRQ_CFC_INSERT); | 328 | disable_m32700ut_pld_irq(PLD_IRQ_CFC_INSERT); |
391 | 329 | ||
392 | /* INT#1: CFC Eject on PLD */ | 330 | /* INT#1: CFC Eject on PLD */ |
393 | irq_desc[PLD_IRQ_CFC_EJECT].status = IRQ_DISABLED; | 331 | set_irq_chip_and_handler(PLD_IRQ_CFC_EJECT, &m32700ut_pld_irq_type, |
394 | irq_desc[PLD_IRQ_CFC_EJECT].chip = &m32700ut_pld_irq_type; | 332 | handle_level_irq); |
395 | irq_desc[PLD_IRQ_CFC_EJECT].action = 0; | ||
396 | irq_desc[PLD_IRQ_CFC_EJECT].depth = 1; /* disable nested irq */ | ||
397 | pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */ | 333 | pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */ |
398 | disable_m32700ut_pld_irq(PLD_IRQ_CFC_EJECT); | 334 | disable_m32700ut_pld_irq(PLD_IRQ_CFC_EJECT); |
399 | 335 | ||
@@ -413,13 +349,11 @@ void __init init_IRQ(void) | |||
413 | 349 | ||
414 | #if defined(CONFIG_USB) | 350 | #if defined(CONFIG_USB) |
415 | outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */ | 351 | outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */ |
352 | set_irq_chip_and_handler(M32700UT_LCD_IRQ_USB_INT1, | ||
353 | &m32700ut_lcdpld_irq_type, handle_level_irq); | ||
416 | 354 | ||
417 | irq_desc[M32700UT_LCD_IRQ_USB_INT1].status = IRQ_DISABLED; | 355 | lcdpld_icu_data[irq2lcdpldirq(M32700UT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */ |
418 | irq_desc[M32700UT_LCD_IRQ_USB_INT1].chip = &m32700ut_lcdpld_irq_type; | 356 | disable_m32700ut_lcdpld_irq(M32700UT_LCD_IRQ_USB_INT1); |
419 | irq_desc[M32700UT_LCD_IRQ_USB_INT1].action = 0; | ||
420 | irq_desc[M32700UT_LCD_IRQ_USB_INT1].depth = 1; | ||
421 | lcdpld_icu_data[irq2lcdpldirq(M32700UT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */ | ||
422 | disable_m32700ut_lcdpld_irq(M32700UT_LCD_IRQ_USB_INT1); | ||
423 | #endif | 357 | #endif |
424 | /* | 358 | /* |
425 | * INT2# is used for BAT, USB, AUDIO | 359 | * INT2# is used for BAT, USB, AUDIO |
@@ -432,10 +366,8 @@ void __init init_IRQ(void) | |||
432 | /* | 366 | /* |
433 | * INT3# is used for AR | 367 | * INT3# is used for AR |
434 | */ | 368 | */ |
435 | irq_desc[M32R_IRQ_INT3].status = IRQ_DISABLED; | 369 | set_irq_chip_and_handler(M32R_IRQ_INT3, &m32700ut_irq_type, |
436 | irq_desc[M32R_IRQ_INT3].chip = &m32700ut_irq_type; | 370 | handle_level_irq); |
437 | irq_desc[M32R_IRQ_INT3].action = 0; | ||
438 | irq_desc[M32R_IRQ_INT3].depth = 1; | ||
439 | icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; | 371 | icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; |
440 | disable_m32700ut_irq(M32R_IRQ_INT3); | 372 | disable_m32700ut_irq(M32R_IRQ_INT3); |
441 | #endif /* CONFIG_VIDEO_M32R_AR */ | 373 | #endif /* CONFIG_VIDEO_M32R_AR */ |
diff --git a/arch/m32r/platforms/mappi/setup.c b/arch/m32r/platforms/mappi/setup.c index ea00c84d6b1b..cdd8c4574027 100644 --- a/arch/m32r/platforms/mappi/setup.c +++ b/arch/m32r/platforms/mappi/setup.c | |||
@@ -38,40 +38,30 @@ static void enable_mappi_irq(unsigned int irq) | |||
38 | outl(data, port); | 38 | outl(data, port); |
39 | } | 39 | } |
40 | 40 | ||
41 | static void mask_and_ack_mappi(unsigned int irq) | 41 | static void mask_mappi(struct irq_data *data) |
42 | { | 42 | { |
43 | disable_mappi_irq(irq); | 43 | disable_mappi_irq(data->irq); |
44 | } | 44 | } |
45 | 45 | ||
46 | static void end_mappi_irq(unsigned int irq) | 46 | static void unmask_mappi(struct irq_data *data) |
47 | { | 47 | { |
48 | if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) | 48 | enable_mappi_irq(data->irq); |
49 | enable_mappi_irq(irq); | ||
50 | } | 49 | } |
51 | 50 | ||
52 | static unsigned int startup_mappi_irq(unsigned int irq) | 51 | static void shutdown_mappi(struct irq_data *data) |
53 | { | ||
54 | enable_mappi_irq(irq); | ||
55 | return (0); | ||
56 | } | ||
57 | |||
58 | static void shutdown_mappi_irq(unsigned int irq) | ||
59 | { | 52 | { |
60 | unsigned long port; | 53 | unsigned long port; |
61 | 54 | ||
62 | port = irq2port(irq); | 55 | port = irq2port(data->irq); |
63 | outl(M32R_ICUCR_ILEVEL7, port); | 56 | outl(M32R_ICUCR_ILEVEL7, port); |
64 | } | 57 | } |
65 | 58 | ||
66 | static struct irq_chip mappi_irq_type = | 59 | static struct irq_chip mappi_irq_type = |
67 | { | 60 | { |
68 | .name = "MAPPI-IRQ", | 61 | .name = "MAPPI-IRQ", |
69 | .startup = startup_mappi_irq, | 62 | .irq_shutdown = shutdown_mappi, |
70 | .shutdown = shutdown_mappi_irq, | 63 | .irq_mask = mask_mappi, |
71 | .enable = enable_mappi_irq, | 64 | .irq_unmask = unmask_mappi, |
72 | .disable = disable_mappi_irq, | ||
73 | .ack = mask_and_ack_mappi, | ||
74 | .end = end_mappi_irq | ||
75 | }; | 65 | }; |
76 | 66 | ||
77 | void __init init_IRQ(void) | 67 | void __init init_IRQ(void) |
@@ -85,70 +75,54 @@ void __init init_IRQ(void) | |||
85 | 75 | ||
86 | #ifdef CONFIG_NE2000 | 76 | #ifdef CONFIG_NE2000 |
87 | /* INT0 : LAN controller (RTL8019AS) */ | 77 | /* INT0 : LAN controller (RTL8019AS) */ |
88 | irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED; | 78 | set_irq_chip_and_handler(M32R_IRQ_INT0, &mappi_irq_type, |
89 | irq_desc[M32R_IRQ_INT0].chip = &mappi_irq_type; | 79 | handle_level_irq); |
90 | irq_desc[M32R_IRQ_INT0].action = NULL; | ||
91 | irq_desc[M32R_IRQ_INT0].depth = 1; | ||
92 | icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD11; | 80 | icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD11; |
93 | disable_mappi_irq(M32R_IRQ_INT0); | 81 | disable_mappi_irq(M32R_IRQ_INT0); |
94 | #endif /* CONFIG_M32R_NE2000 */ | 82 | #endif /* CONFIG_M32R_NE2000 */ |
95 | 83 | ||
96 | /* MFT2 : system timer */ | 84 | /* MFT2 : system timer */ |
97 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; | 85 | set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi_irq_type, |
98 | irq_desc[M32R_IRQ_MFT2].chip = &mappi_irq_type; | 86 | handle_level_irq); |
99 | irq_desc[M32R_IRQ_MFT2].action = NULL; | ||
100 | irq_desc[M32R_IRQ_MFT2].depth = 1; | ||
101 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; | 87 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; |
102 | disable_mappi_irq(M32R_IRQ_MFT2); | 88 | disable_mappi_irq(M32R_IRQ_MFT2); |
103 | 89 | ||
104 | #ifdef CONFIG_SERIAL_M32R_SIO | 90 | #ifdef CONFIG_SERIAL_M32R_SIO |
105 | /* SIO0_R : uart receive data */ | 91 | /* SIO0_R : uart receive data */ |
106 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; | 92 | set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi_irq_type, |
107 | irq_desc[M32R_IRQ_SIO0_R].chip = &mappi_irq_type; | 93 | handle_level_irq); |
108 | irq_desc[M32R_IRQ_SIO0_R].action = NULL; | ||
109 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; | ||
110 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; | 94 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; |
111 | disable_mappi_irq(M32R_IRQ_SIO0_R); | 95 | disable_mappi_irq(M32R_IRQ_SIO0_R); |
112 | 96 | ||
113 | /* SIO0_S : uart send data */ | 97 | /* SIO0_S : uart send data */ |
114 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; | 98 | set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi_irq_type, |
115 | irq_desc[M32R_IRQ_SIO0_S].chip = &mappi_irq_type; | 99 | handle_level_irq); |
116 | irq_desc[M32R_IRQ_SIO0_S].action = NULL; | ||
117 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; | ||
118 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; | 100 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; |
119 | disable_mappi_irq(M32R_IRQ_SIO0_S); | 101 | disable_mappi_irq(M32R_IRQ_SIO0_S); |
120 | 102 | ||
121 | /* SIO1_R : uart receive data */ | 103 | /* SIO1_R : uart receive data */ |
122 | irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED; | 104 | set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi_irq_type, |
123 | irq_desc[M32R_IRQ_SIO1_R].chip = &mappi_irq_type; | 105 | handle_level_irq); |
124 | irq_desc[M32R_IRQ_SIO1_R].action = NULL; | ||
125 | irq_desc[M32R_IRQ_SIO1_R].depth = 1; | ||
126 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; | 106 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; |
127 | disable_mappi_irq(M32R_IRQ_SIO1_R); | 107 | disable_mappi_irq(M32R_IRQ_SIO1_R); |
128 | 108 | ||
129 | /* SIO1_S : uart send data */ | 109 | /* SIO1_S : uart send data */ |
130 | irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED; | 110 | set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi_irq_type, |
131 | irq_desc[M32R_IRQ_SIO1_S].chip = &mappi_irq_type; | 111 | handle_level_irq); |
132 | irq_desc[M32R_IRQ_SIO1_S].action = NULL; | ||
133 | irq_desc[M32R_IRQ_SIO1_S].depth = 1; | ||
134 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; | 112 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; |
135 | disable_mappi_irq(M32R_IRQ_SIO1_S); | 113 | disable_mappi_irq(M32R_IRQ_SIO1_S); |
136 | #endif /* CONFIG_SERIAL_M32R_SIO */ | 114 | #endif /* CONFIG_SERIAL_M32R_SIO */ |
137 | 115 | ||
138 | #if defined(CONFIG_M32R_PCC) | 116 | #if defined(CONFIG_M32R_PCC) |
139 | /* INT1 : pccard0 interrupt */ | 117 | /* INT1 : pccard0 interrupt */ |
140 | irq_desc[M32R_IRQ_INT1].status = IRQ_DISABLED; | 118 | set_irq_chip_and_handler(M32R_IRQ_INT1, &mappi_irq_type, |
141 | irq_desc[M32R_IRQ_INT1].chip = &mappi_irq_type; | 119 | handle_level_irq); |
142 | irq_desc[M32R_IRQ_INT1].action = NULL; | ||
143 | irq_desc[M32R_IRQ_INT1].depth = 1; | ||
144 | icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; | 120 | icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; |
145 | disable_mappi_irq(M32R_IRQ_INT1); | 121 | disable_mappi_irq(M32R_IRQ_INT1); |
146 | 122 | ||
147 | /* INT2 : pccard1 interrupt */ | 123 | /* INT2 : pccard1 interrupt */ |
148 | irq_desc[M32R_IRQ_INT2].status = IRQ_DISABLED; | 124 | set_irq_chip_and_handler(M32R_IRQ_INT2, &mappi_irq_type, |
149 | irq_desc[M32R_IRQ_INT2].chip = &mappi_irq_type; | 125 | handle_level_irq); |
150 | irq_desc[M32R_IRQ_INT2].action = NULL; | ||
151 | irq_desc[M32R_IRQ_INT2].depth = 1; | ||
152 | icu_data[M32R_IRQ_INT2].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; | 126 | icu_data[M32R_IRQ_INT2].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; |
153 | disable_mappi_irq(M32R_IRQ_INT2); | 127 | disable_mappi_irq(M32R_IRQ_INT2); |
154 | #endif /* CONFIG_M32RPCC */ | 128 | #endif /* CONFIG_M32RPCC */ |
diff --git a/arch/m32r/platforms/mappi2/setup.c b/arch/m32r/platforms/mappi2/setup.c index c049376d0270..9117c30ea365 100644 --- a/arch/m32r/platforms/mappi2/setup.c +++ b/arch/m32r/platforms/mappi2/setup.c | |||
@@ -46,126 +46,97 @@ static void enable_mappi2_irq(unsigned int irq) | |||
46 | outl(data, port); | 46 | outl(data, port); |
47 | } | 47 | } |
48 | 48 | ||
49 | static void mask_and_ack_mappi2(unsigned int irq) | 49 | static void mask_mappi2(struct irq_data *data) |
50 | { | 50 | { |
51 | disable_mappi2_irq(irq); | 51 | disable_mappi2_irq(data->irq); |
52 | } | 52 | } |
53 | 53 | ||
54 | static void end_mappi2_irq(unsigned int irq) | 54 | static void unmask_mappi2(struct irq_data *data) |
55 | { | 55 | { |
56 | enable_mappi2_irq(irq); | 56 | enable_mappi2_irq(data->irq); |
57 | } | 57 | } |
58 | 58 | ||
59 | static unsigned int startup_mappi2_irq(unsigned int irq) | 59 | static void shutdown_mappi2(struct irq_data *data) |
60 | { | ||
61 | enable_mappi2_irq(irq); | ||
62 | return (0); | ||
63 | } | ||
64 | |||
65 | static void shutdown_mappi2_irq(unsigned int irq) | ||
66 | { | 60 | { |
67 | unsigned long port; | 61 | unsigned long port; |
68 | 62 | ||
69 | port = irq2port(irq); | 63 | port = irq2port(data->irq); |
70 | outl(M32R_ICUCR_ILEVEL7, port); | 64 | outl(M32R_ICUCR_ILEVEL7, port); |
71 | } | 65 | } |
72 | 66 | ||
73 | static struct irq_chip mappi2_irq_type = | 67 | static struct irq_chip mappi2_irq_type = |
74 | { | 68 | { |
75 | .name = "MAPPI2-IRQ", | 69 | .name = "MAPPI2-IRQ", |
76 | .startup = startup_mappi2_irq, | 70 | .irq_shutdown = shutdown_mappi2, |
77 | .shutdown = shutdown_mappi2_irq, | 71 | .irq_mask = mask_mappi2, |
78 | .enable = enable_mappi2_irq, | 72 | .irq_unmask = unmask_mappi2, |
79 | .disable = disable_mappi2_irq, | ||
80 | .ack = mask_and_ack_mappi2, | ||
81 | .end = end_mappi2_irq | ||
82 | }; | 73 | }; |
83 | 74 | ||
84 | void __init init_IRQ(void) | 75 | void __init init_IRQ(void) |
85 | { | 76 | { |
86 | #if defined(CONFIG_SMC91X) | 77 | #if defined(CONFIG_SMC91X) |
87 | /* INT0 : LAN controller (SMC91111) */ | 78 | /* INT0 : LAN controller (SMC91111) */ |
88 | irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED; | 79 | set_irq_chip_and_handler(M32R_IRQ_INT0, &mappi2_irq_type, |
89 | irq_desc[M32R_IRQ_INT0].chip = &mappi2_irq_type; | 80 | handle_level_irq); |
90 | irq_desc[M32R_IRQ_INT0].action = 0; | ||
91 | irq_desc[M32R_IRQ_INT0].depth = 1; | ||
92 | icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; | 81 | icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; |
93 | disable_mappi2_irq(M32R_IRQ_INT0); | 82 | disable_mappi2_irq(M32R_IRQ_INT0); |
94 | #endif /* CONFIG_SMC91X */ | 83 | #endif /* CONFIG_SMC91X */ |
95 | 84 | ||
96 | /* MFT2 : system timer */ | 85 | /* MFT2 : system timer */ |
97 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; | 86 | set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi2_irq_type, |
98 | irq_desc[M32R_IRQ_MFT2].chip = &mappi2_irq_type; | 87 | handle_level_irq); |
99 | irq_desc[M32R_IRQ_MFT2].action = 0; | ||
100 | irq_desc[M32R_IRQ_MFT2].depth = 1; | ||
101 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; | 88 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; |
102 | disable_mappi2_irq(M32R_IRQ_MFT2); | 89 | disable_mappi2_irq(M32R_IRQ_MFT2); |
103 | 90 | ||
104 | #ifdef CONFIG_SERIAL_M32R_SIO | 91 | #ifdef CONFIG_SERIAL_M32R_SIO |
105 | /* SIO0_R : uart receive data */ | 92 | /* SIO0_R : uart receive data */ |
106 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; | 93 | set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi2_irq_type, |
107 | irq_desc[M32R_IRQ_SIO0_R].chip = &mappi2_irq_type; | 94 | handle_level_irq); |
108 | irq_desc[M32R_IRQ_SIO0_R].action = 0; | ||
109 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; | ||
110 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; | 95 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; |
111 | disable_mappi2_irq(M32R_IRQ_SIO0_R); | 96 | disable_mappi2_irq(M32R_IRQ_SIO0_R); |
112 | 97 | ||
113 | /* SIO0_S : uart send data */ | 98 | /* SIO0_S : uart send data */ |
114 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; | 99 | set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi2_irq_type, |
115 | irq_desc[M32R_IRQ_SIO0_S].chip = &mappi2_irq_type; | 100 | handle_level_irq); |
116 | irq_desc[M32R_IRQ_SIO0_S].action = 0; | ||
117 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; | ||
118 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; | 101 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; |
119 | disable_mappi2_irq(M32R_IRQ_SIO0_S); | 102 | disable_mappi2_irq(M32R_IRQ_SIO0_S); |
120 | /* SIO1_R : uart receive data */ | 103 | /* SIO1_R : uart receive data */ |
121 | irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED; | 104 | set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi2_irq_type, |
122 | irq_desc[M32R_IRQ_SIO1_R].chip = &mappi2_irq_type; | 105 | handle_level_irq); |
123 | irq_desc[M32R_IRQ_SIO1_R].action = 0; | ||
124 | irq_desc[M32R_IRQ_SIO1_R].depth = 1; | ||
125 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; | 106 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; |
126 | disable_mappi2_irq(M32R_IRQ_SIO1_R); | 107 | disable_mappi2_irq(M32R_IRQ_SIO1_R); |
127 | 108 | ||
128 | /* SIO1_S : uart send data */ | 109 | /* SIO1_S : uart send data */ |
129 | irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED; | 110 | set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi2_irq_type, |
130 | irq_desc[M32R_IRQ_SIO1_S].chip = &mappi2_irq_type; | 111 | handle_level_irq); |
131 | irq_desc[M32R_IRQ_SIO1_S].action = 0; | ||
132 | irq_desc[M32R_IRQ_SIO1_S].depth = 1; | ||
133 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; | 112 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; |
134 | disable_mappi2_irq(M32R_IRQ_SIO1_S); | 113 | disable_mappi2_irq(M32R_IRQ_SIO1_S); |
135 | #endif /* CONFIG_M32R_USE_DBG_CONSOLE */ | 114 | #endif /* CONFIG_M32R_USE_DBG_CONSOLE */ |
136 | 115 | ||
137 | #if defined(CONFIG_USB) | 116 | #if defined(CONFIG_USB) |
138 | /* INT1 : USB Host controller interrupt */ | 117 | /* INT1 : USB Host controller interrupt */ |
139 | irq_desc[M32R_IRQ_INT1].status = IRQ_DISABLED; | 118 | set_irq_chip_and_handler(M32R_IRQ_INT1, &mappi2_irq_type, |
140 | irq_desc[M32R_IRQ_INT1].chip = &mappi2_irq_type; | 119 | handle_level_irq); |
141 | irq_desc[M32R_IRQ_INT1].action = 0; | ||
142 | irq_desc[M32R_IRQ_INT1].depth = 1; | ||
143 | icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01; | 120 | icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01; |
144 | disable_mappi2_irq(M32R_IRQ_INT1); | 121 | disable_mappi2_irq(M32R_IRQ_INT1); |
145 | #endif /* CONFIG_USB */ | 122 | #endif /* CONFIG_USB */ |
146 | 123 | ||
147 | /* ICUCR40: CFC IREQ */ | 124 | /* ICUCR40: CFC IREQ */ |
148 | irq_desc[PLD_IRQ_CFIREQ].status = IRQ_DISABLED; | 125 | set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &mappi2_irq_type, |
149 | irq_desc[PLD_IRQ_CFIREQ].chip = &mappi2_irq_type; | 126 | handle_level_irq); |
150 | irq_desc[PLD_IRQ_CFIREQ].action = 0; | ||
151 | irq_desc[PLD_IRQ_CFIREQ].depth = 1; /* disable nested irq */ | ||
152 | icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01; | 127 | icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01; |
153 | disable_mappi2_irq(PLD_IRQ_CFIREQ); | 128 | disable_mappi2_irq(PLD_IRQ_CFIREQ); |
154 | 129 | ||
155 | #if defined(CONFIG_M32R_CFC) | 130 | #if defined(CONFIG_M32R_CFC) |
156 | /* ICUCR41: CFC Insert */ | 131 | /* ICUCR41: CFC Insert */ |
157 | irq_desc[PLD_IRQ_CFC_INSERT].status = IRQ_DISABLED; | 132 | set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &mappi2_irq_type, |
158 | irq_desc[PLD_IRQ_CFC_INSERT].chip = &mappi2_irq_type; | 133 | handle_level_irq); |
159 | irq_desc[PLD_IRQ_CFC_INSERT].action = 0; | ||
160 | irq_desc[PLD_IRQ_CFC_INSERT].depth = 1; /* disable nested irq */ | ||
161 | icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00; | 134 | icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00; |
162 | disable_mappi2_irq(PLD_IRQ_CFC_INSERT); | 135 | disable_mappi2_irq(PLD_IRQ_CFC_INSERT); |
163 | 136 | ||
164 | /* ICUCR42: CFC Eject */ | 137 | /* ICUCR42: CFC Eject */ |
165 | irq_desc[PLD_IRQ_CFC_EJECT].status = IRQ_DISABLED; | 138 | set_irq_chip_and_handler(PLD_IRQ_CFC_EJECT, &mappi2_irq_type, |
166 | irq_desc[PLD_IRQ_CFC_EJECT].chip = &mappi2_irq_type; | 139 | handle_level_irq); |
167 | irq_desc[PLD_IRQ_CFC_EJECT].action = 0; | ||
168 | irq_desc[PLD_IRQ_CFC_EJECT].depth = 1; /* disable nested irq */ | ||
169 | icu_data[PLD_IRQ_CFC_EJECT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; | 140 | icu_data[PLD_IRQ_CFC_EJECT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; |
170 | disable_mappi2_irq(PLD_IRQ_CFC_EJECT); | 141 | disable_mappi2_irq(PLD_IRQ_CFC_EJECT); |
171 | #endif /* CONFIG_MAPPI2_CFC */ | 142 | #endif /* CONFIG_MAPPI2_CFC */ |
diff --git a/arch/m32r/platforms/mappi3/setup.c b/arch/m32r/platforms/mappi3/setup.c index 882de25c6e8c..b44f5ded2bbe 100644 --- a/arch/m32r/platforms/mappi3/setup.c +++ b/arch/m32r/platforms/mappi3/setup.c | |||
@@ -46,128 +46,98 @@ static void enable_mappi3_irq(unsigned int irq) | |||
46 | outl(data, port); | 46 | outl(data, port); |
47 | } | 47 | } |
48 | 48 | ||
49 | static void mask_and_ack_mappi3(unsigned int irq) | 49 | static void mask_mappi3(struct irq_data *data) |
50 | { | 50 | { |
51 | disable_mappi3_irq(irq); | 51 | disable_mappi3_irq(data->irq); |
52 | } | 52 | } |
53 | 53 | ||
54 | static void end_mappi3_irq(unsigned int irq) | 54 | static void unmask_mappi3(struct irq_data *data) |
55 | { | 55 | { |
56 | enable_mappi3_irq(irq); | 56 | enable_mappi3_irq(data->irq); |
57 | } | 57 | } |
58 | 58 | ||
59 | static unsigned int startup_mappi3_irq(unsigned int irq) | 59 | static void shutdown_mappi3(struct irq_data *data) |
60 | { | ||
61 | enable_mappi3_irq(irq); | ||
62 | return (0); | ||
63 | } | ||
64 | |||
65 | static void shutdown_mappi3_irq(unsigned int irq) | ||
66 | { | 60 | { |
67 | unsigned long port; | 61 | unsigned long port; |
68 | 62 | ||
69 | port = irq2port(irq); | 63 | port = irq2port(data->irq); |
70 | outl(M32R_ICUCR_ILEVEL7, port); | 64 | outl(M32R_ICUCR_ILEVEL7, port); |
71 | } | 65 | } |
72 | 66 | ||
73 | static struct irq_chip mappi3_irq_type = | 67 | static struct irq_chip mappi3_irq_type = { |
74 | { | 68 | .name = "MAPPI3-IRQ", |
75 | .name = "MAPPI3-IRQ", | 69 | .irq_shutdown = shutdown_mappi3, |
76 | .startup = startup_mappi3_irq, | 70 | .irq_mask = mask_mappi3, |
77 | .shutdown = shutdown_mappi3_irq, | 71 | .irq_unmask = unmask_mappi3, |
78 | .enable = enable_mappi3_irq, | ||
79 | .disable = disable_mappi3_irq, | ||
80 | .ack = mask_and_ack_mappi3, | ||
81 | .end = end_mappi3_irq | ||
82 | }; | 72 | }; |
83 | 73 | ||
84 | void __init init_IRQ(void) | 74 | void __init init_IRQ(void) |
85 | { | 75 | { |
86 | #if defined(CONFIG_SMC91X) | 76 | #if defined(CONFIG_SMC91X) |
87 | /* INT0 : LAN controller (SMC91111) */ | 77 | /* INT0 : LAN controller (SMC91111) */ |
88 | irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED; | 78 | set_irq_chip_and_handler(M32R_IRQ_INT0, &mappi3_irq_type, |
89 | irq_desc[M32R_IRQ_INT0].chip = &mappi3_irq_type; | 79 | handle_level_irq); |
90 | irq_desc[M32R_IRQ_INT0].action = 0; | ||
91 | irq_desc[M32R_IRQ_INT0].depth = 1; | ||
92 | icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; | 80 | icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; |
93 | disable_mappi3_irq(M32R_IRQ_INT0); | 81 | disable_mappi3_irq(M32R_IRQ_INT0); |
94 | #endif /* CONFIG_SMC91X */ | 82 | #endif /* CONFIG_SMC91X */ |
95 | 83 | ||
96 | /* MFT2 : system timer */ | 84 | /* MFT2 : system timer */ |
97 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; | 85 | set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi3_irq_type, |
98 | irq_desc[M32R_IRQ_MFT2].chip = &mappi3_irq_type; | 86 | handle_level_irq); |
99 | irq_desc[M32R_IRQ_MFT2].action = 0; | ||
100 | irq_desc[M32R_IRQ_MFT2].depth = 1; | ||
101 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; | 87 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; |
102 | disable_mappi3_irq(M32R_IRQ_MFT2); | 88 | disable_mappi3_irq(M32R_IRQ_MFT2); |
103 | 89 | ||
104 | #ifdef CONFIG_SERIAL_M32R_SIO | 90 | #ifdef CONFIG_SERIAL_M32R_SIO |
105 | /* SIO0_R : uart receive data */ | 91 | /* SIO0_R : uart receive data */ |
106 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; | 92 | set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi3_irq_type, |
107 | irq_desc[M32R_IRQ_SIO0_R].chip = &mappi3_irq_type; | 93 | handle_level_irq); |
108 | irq_desc[M32R_IRQ_SIO0_R].action = 0; | ||
109 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; | ||
110 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; | 94 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; |
111 | disable_mappi3_irq(M32R_IRQ_SIO0_R); | 95 | disable_mappi3_irq(M32R_IRQ_SIO0_R); |
112 | 96 | ||
113 | /* SIO0_S : uart send data */ | 97 | /* SIO0_S : uart send data */ |
114 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; | 98 | set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi3_irq_type, |
115 | irq_desc[M32R_IRQ_SIO0_S].chip = &mappi3_irq_type; | 99 | handle_level_irq); |
116 | irq_desc[M32R_IRQ_SIO0_S].action = 0; | ||
117 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; | ||
118 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; | 100 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; |
119 | disable_mappi3_irq(M32R_IRQ_SIO0_S); | 101 | disable_mappi3_irq(M32R_IRQ_SIO0_S); |
120 | /* SIO1_R : uart receive data */ | 102 | /* SIO1_R : uart receive data */ |
121 | irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED; | 103 | set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi3_irq_type, |
122 | irq_desc[M32R_IRQ_SIO1_R].chip = &mappi3_irq_type; | 104 | handle_level_irq); |
123 | irq_desc[M32R_IRQ_SIO1_R].action = 0; | ||
124 | irq_desc[M32R_IRQ_SIO1_R].depth = 1; | ||
125 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; | 105 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; |
126 | disable_mappi3_irq(M32R_IRQ_SIO1_R); | 106 | disable_mappi3_irq(M32R_IRQ_SIO1_R); |
127 | 107 | ||
128 | /* SIO1_S : uart send data */ | 108 | /* SIO1_S : uart send data */ |
129 | irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED; | 109 | set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi3_irq_type, |
130 | irq_desc[M32R_IRQ_SIO1_S].chip = &mappi3_irq_type; | 110 | handle_level_irq); |
131 | irq_desc[M32R_IRQ_SIO1_S].action = 0; | ||
132 | irq_desc[M32R_IRQ_SIO1_S].depth = 1; | ||
133 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; | 111 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; |
134 | disable_mappi3_irq(M32R_IRQ_SIO1_S); | 112 | disable_mappi3_irq(M32R_IRQ_SIO1_S); |
135 | #endif /* CONFIG_M32R_USE_DBG_CONSOLE */ | 113 | #endif /* CONFIG_M32R_USE_DBG_CONSOLE */ |
136 | 114 | ||
137 | #if defined(CONFIG_USB) | 115 | #if defined(CONFIG_USB) |
138 | /* INT1 : USB Host controller interrupt */ | 116 | /* INT1 : USB Host controller interrupt */ |
139 | irq_desc[M32R_IRQ_INT1].status = IRQ_DISABLED; | 117 | set_irq_chip_and_handler(M32R_IRQ_INT1, &mappi3_irq_type, |
140 | irq_desc[M32R_IRQ_INT1].chip = &mappi3_irq_type; | 118 | handle_level_irq); |
141 | irq_desc[M32R_IRQ_INT1].action = 0; | ||
142 | irq_desc[M32R_IRQ_INT1].depth = 1; | ||
143 | icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01; | 119 | icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01; |
144 | disable_mappi3_irq(M32R_IRQ_INT1); | 120 | disable_mappi3_irq(M32R_IRQ_INT1); |
145 | #endif /* CONFIG_USB */ | 121 | #endif /* CONFIG_USB */ |
146 | 122 | ||
147 | /* CFC IREQ */ | 123 | /* CFC IREQ */ |
148 | irq_desc[PLD_IRQ_CFIREQ].status = IRQ_DISABLED; | 124 | set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &mappi3_irq_type, |
149 | irq_desc[PLD_IRQ_CFIREQ].chip = &mappi3_irq_type; | 125 | handle_level_irq); |
150 | irq_desc[PLD_IRQ_CFIREQ].action = 0; | ||
151 | irq_desc[PLD_IRQ_CFIREQ].depth = 1; /* disable nested irq */ | ||
152 | icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01; | 126 | icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01; |
153 | disable_mappi3_irq(PLD_IRQ_CFIREQ); | 127 | disable_mappi3_irq(PLD_IRQ_CFIREQ); |
154 | 128 | ||
155 | #if defined(CONFIG_M32R_CFC) | 129 | #if defined(CONFIG_M32R_CFC) |
156 | /* ICUCR41: CFC Insert & eject */ | 130 | /* ICUCR41: CFC Insert & eject */ |
157 | irq_desc[PLD_IRQ_CFC_INSERT].status = IRQ_DISABLED; | 131 | set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &mappi3_irq_type, |
158 | irq_desc[PLD_IRQ_CFC_INSERT].chip = &mappi3_irq_type; | 132 | handle_level_irq); |
159 | irq_desc[PLD_IRQ_CFC_INSERT].action = 0; | ||
160 | irq_desc[PLD_IRQ_CFC_INSERT].depth = 1; /* disable nested irq */ | ||
161 | icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00; | 133 | icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00; |
162 | disable_mappi3_irq(PLD_IRQ_CFC_INSERT); | 134 | disable_mappi3_irq(PLD_IRQ_CFC_INSERT); |
163 | 135 | ||
164 | #endif /* CONFIG_M32R_CFC */ | 136 | #endif /* CONFIG_M32R_CFC */ |
165 | 137 | ||
166 | /* IDE IREQ */ | 138 | /* IDE IREQ */ |
167 | irq_desc[PLD_IRQ_IDEIREQ].status = IRQ_DISABLED; | 139 | set_irq_chip_and_handler(PLD_IRQ_IDEIREQ, &mappi3_irq_type, |
168 | irq_desc[PLD_IRQ_IDEIREQ].chip = &mappi3_irq_type; | 140 | handle_level_irq); |
169 | irq_desc[PLD_IRQ_IDEIREQ].action = 0; | ||
170 | irq_desc[PLD_IRQ_IDEIREQ].depth = 1; /* disable nested irq */ | ||
171 | icu_data[PLD_IRQ_IDEIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; | 141 | icu_data[PLD_IRQ_IDEIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; |
172 | disable_mappi3_irq(PLD_IRQ_IDEIREQ); | 142 | disable_mappi3_irq(PLD_IRQ_IDEIREQ); |
173 | 143 | ||
diff --git a/arch/m32r/platforms/oaks32r/setup.c b/arch/m32r/platforms/oaks32r/setup.c index d11d93bf74f5..19a02db7b818 100644 --- a/arch/m32r/platforms/oaks32r/setup.c +++ b/arch/m32r/platforms/oaks32r/setup.c | |||
@@ -37,39 +37,30 @@ static void enable_oaks32r_irq(unsigned int irq) | |||
37 | outl(data, port); | 37 | outl(data, port); |
38 | } | 38 | } |
39 | 39 | ||
40 | static void mask_and_ack_mappi(unsigned int irq) | 40 | static void mask_oaks32r(struct irq_data *data) |
41 | { | 41 | { |
42 | disable_oaks32r_irq(irq); | 42 | disable_oaks32r_irq(data->irq); |
43 | } | 43 | } |
44 | 44 | ||
45 | static void end_oaks32r_irq(unsigned int irq) | 45 | static void unmask_oaks32r(struct irq_data *data) |
46 | { | 46 | { |
47 | enable_oaks32r_irq(irq); | 47 | enable_oaks32r_irq(data->irq); |
48 | } | 48 | } |
49 | 49 | ||
50 | static unsigned int startup_oaks32r_irq(unsigned int irq) | 50 | static void shutdown_oaks32r(struct irq_data *data) |
51 | { | ||
52 | enable_oaks32r_irq(irq); | ||
53 | return (0); | ||
54 | } | ||
55 | |||
56 | static void shutdown_oaks32r_irq(unsigned int irq) | ||
57 | { | 51 | { |
58 | unsigned long port; | 52 | unsigned long port; |
59 | 53 | ||
60 | port = irq2port(irq); | 54 | port = irq2port(data->irq); |
61 | outl(M32R_ICUCR_ILEVEL7, port); | 55 | outl(M32R_ICUCR_ILEVEL7, port); |
62 | } | 56 | } |
63 | 57 | ||
64 | static struct irq_chip oaks32r_irq_type = | 58 | static struct irq_chip oaks32r_irq_type = |
65 | { | 59 | { |
66 | .name = "OAKS32R-IRQ", | 60 | .name = "OAKS32R-IRQ", |
67 | .startup = startup_oaks32r_irq, | 61 | .irq_shutdown = shutdown_oaks32r, |
68 | .shutdown = shutdown_oaks32r_irq, | 62 | .irq_mask = mask_oaks32r, |
69 | .enable = enable_oaks32r_irq, | 63 | .irq_unmask = unmask_oaks32r, |
70 | .disable = disable_oaks32r_irq, | ||
71 | .ack = mask_and_ack_mappi, | ||
72 | .end = end_oaks32r_irq | ||
73 | }; | 64 | }; |
74 | 65 | ||
75 | void __init init_IRQ(void) | 66 | void __init init_IRQ(void) |
@@ -83,52 +74,40 @@ void __init init_IRQ(void) | |||
83 | 74 | ||
84 | #ifdef CONFIG_NE2000 | 75 | #ifdef CONFIG_NE2000 |
85 | /* INT3 : LAN controller (RTL8019AS) */ | 76 | /* INT3 : LAN controller (RTL8019AS) */ |
86 | irq_desc[M32R_IRQ_INT3].status = IRQ_DISABLED; | 77 | set_irq_chip_and_handler(M32R_IRQ_INT3, &oaks32r_irq_type, |
87 | irq_desc[M32R_IRQ_INT3].chip = &oaks32r_irq_type; | 78 | handle_level_irq); |
88 | irq_desc[M32R_IRQ_INT3].action = 0; | ||
89 | irq_desc[M32R_IRQ_INT3].depth = 1; | ||
90 | icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; | 79 | icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; |
91 | disable_oaks32r_irq(M32R_IRQ_INT3); | 80 | disable_oaks32r_irq(M32R_IRQ_INT3); |
92 | #endif /* CONFIG_M32R_NE2000 */ | 81 | #endif /* CONFIG_M32R_NE2000 */ |
93 | 82 | ||
94 | /* MFT2 : system timer */ | 83 | /* MFT2 : system timer */ |
95 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; | 84 | set_irq_chip_and_handler(M32R_IRQ_MFT2, &oaks32r_irq_type, |
96 | irq_desc[M32R_IRQ_MFT2].chip = &oaks32r_irq_type; | 85 | handle_level_irq); |
97 | irq_desc[M32R_IRQ_MFT2].action = 0; | ||
98 | irq_desc[M32R_IRQ_MFT2].depth = 1; | ||
99 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; | 86 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; |
100 | disable_oaks32r_irq(M32R_IRQ_MFT2); | 87 | disable_oaks32r_irq(M32R_IRQ_MFT2); |
101 | 88 | ||
102 | #ifdef CONFIG_SERIAL_M32R_SIO | 89 | #ifdef CONFIG_SERIAL_M32R_SIO |
103 | /* SIO0_R : uart receive data */ | 90 | /* SIO0_R : uart receive data */ |
104 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; | 91 | set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &oaks32r_irq_type, |
105 | irq_desc[M32R_IRQ_SIO0_R].chip = &oaks32r_irq_type; | 92 | handle_level_irq); |
106 | irq_desc[M32R_IRQ_SIO0_R].action = 0; | ||
107 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; | ||
108 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; | 93 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; |
109 | disable_oaks32r_irq(M32R_IRQ_SIO0_R); | 94 | disable_oaks32r_irq(M32R_IRQ_SIO0_R); |
110 | 95 | ||
111 | /* SIO0_S : uart send data */ | 96 | /* SIO0_S : uart send data */ |
112 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; | 97 | set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &oaks32r_irq_type, |
113 | irq_desc[M32R_IRQ_SIO0_S].chip = &oaks32r_irq_type; | 98 | handle_level_irq); |
114 | irq_desc[M32R_IRQ_SIO0_S].action = 0; | ||
115 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; | ||
116 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; | 99 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; |
117 | disable_oaks32r_irq(M32R_IRQ_SIO0_S); | 100 | disable_oaks32r_irq(M32R_IRQ_SIO0_S); |
118 | 101 | ||
119 | /* SIO1_R : uart receive data */ | 102 | /* SIO1_R : uart receive data */ |
120 | irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED; | 103 | set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &oaks32r_irq_type, |
121 | irq_desc[M32R_IRQ_SIO1_R].chip = &oaks32r_irq_type; | 104 | handle_level_irq); |
122 | irq_desc[M32R_IRQ_SIO1_R].action = 0; | ||
123 | irq_desc[M32R_IRQ_SIO1_R].depth = 1; | ||
124 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; | 105 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; |
125 | disable_oaks32r_irq(M32R_IRQ_SIO1_R); | 106 | disable_oaks32r_irq(M32R_IRQ_SIO1_R); |
126 | 107 | ||
127 | /* SIO1_S : uart send data */ | 108 | /* SIO1_S : uart send data */ |
128 | irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED; | 109 | set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &oaks32r_irq_type, |
129 | irq_desc[M32R_IRQ_SIO1_S].chip = &oaks32r_irq_type; | 110 | handle_level_irq); |
130 | irq_desc[M32R_IRQ_SIO1_S].action = 0; | ||
131 | irq_desc[M32R_IRQ_SIO1_S].depth = 1; | ||
132 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; | 111 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; |
133 | disable_oaks32r_irq(M32R_IRQ_SIO1_S); | 112 | disable_oaks32r_irq(M32R_IRQ_SIO1_S); |
134 | #endif /* CONFIG_SERIAL_M32R_SIO */ | 113 | #endif /* CONFIG_SERIAL_M32R_SIO */ |
diff --git a/arch/m32r/platforms/opsput/setup.c b/arch/m32r/platforms/opsput/setup.c index 5f3402a2fbaf..12731547e8bf 100644 --- a/arch/m32r/platforms/opsput/setup.c +++ b/arch/m32r/platforms/opsput/setup.c | |||
@@ -46,39 +46,30 @@ static void enable_opsput_irq(unsigned int irq) | |||
46 | outl(data, port); | 46 | outl(data, port); |
47 | } | 47 | } |
48 | 48 | ||
49 | static void mask_and_ack_opsput(unsigned int irq) | 49 | static void mask_opsput(struct irq_data *data) |
50 | { | 50 | { |
51 | disable_opsput_irq(irq); | 51 | disable_opsput_irq(data->irq); |
52 | } | 52 | } |
53 | 53 | ||
54 | static void end_opsput_irq(unsigned int irq) | 54 | static void unmask_opsput(struct irq_data *data) |
55 | { | 55 | { |
56 | enable_opsput_irq(irq); | 56 | enable_opsput_irq(data->irq); |
57 | } | 57 | } |
58 | 58 | ||
59 | static unsigned int startup_opsput_irq(unsigned int irq) | 59 | static void shutdown_opsput(struct irq_data *data) |
60 | { | ||
61 | enable_opsput_irq(irq); | ||
62 | return (0); | ||
63 | } | ||
64 | |||
65 | static void shutdown_opsput_irq(unsigned int irq) | ||
66 | { | 60 | { |
67 | unsigned long port; | 61 | unsigned long port; |
68 | 62 | ||
69 | port = irq2port(irq); | 63 | port = irq2port(data->irq); |
70 | outl(M32R_ICUCR_ILEVEL7, port); | 64 | outl(M32R_ICUCR_ILEVEL7, port); |
71 | } | 65 | } |
72 | 66 | ||
73 | static struct irq_chip opsput_irq_type = | 67 | static struct irq_chip opsput_irq_type = |
74 | { | 68 | { |
75 | .name = "OPSPUT-IRQ", | 69 | .name = "OPSPUT-IRQ", |
76 | .startup = startup_opsput_irq, | 70 | .irq_shutdown = shutdown_opsput, |
77 | .shutdown = shutdown_opsput_irq, | 71 | .irq_mask = mask_opsput, |
78 | .enable = enable_opsput_irq, | 72 | .irq_unmask = unmask_opsput, |
79 | .disable = disable_opsput_irq, | ||
80 | .ack = mask_and_ack_opsput, | ||
81 | .end = end_opsput_irq | ||
82 | }; | 73 | }; |
83 | 74 | ||
84 | /* | 75 | /* |
@@ -100,7 +91,6 @@ static void disable_opsput_pld_irq(unsigned int irq) | |||
100 | unsigned int pldirq; | 91 | unsigned int pldirq; |
101 | 92 | ||
102 | pldirq = irq2pldirq(irq); | 93 | pldirq = irq2pldirq(irq); |
103 | // disable_opsput_irq(M32R_IRQ_INT1); | ||
104 | port = pldirq2port(pldirq); | 94 | port = pldirq2port(pldirq); |
105 | data = pld_icu_data[pldirq].icucr|PLD_ICUCR_ILEVEL7; | 95 | data = pld_icu_data[pldirq].icucr|PLD_ICUCR_ILEVEL7; |
106 | outw(data, port); | 96 | outw(data, port); |
@@ -112,50 +102,38 @@ static void enable_opsput_pld_irq(unsigned int irq) | |||
112 | unsigned int pldirq; | 102 | unsigned int pldirq; |
113 | 103 | ||
114 | pldirq = irq2pldirq(irq); | 104 | pldirq = irq2pldirq(irq); |
115 | // enable_opsput_irq(M32R_IRQ_INT1); | ||
116 | port = pldirq2port(pldirq); | 105 | port = pldirq2port(pldirq); |
117 | data = pld_icu_data[pldirq].icucr|PLD_ICUCR_IEN|PLD_ICUCR_ILEVEL6; | 106 | data = pld_icu_data[pldirq].icucr|PLD_ICUCR_IEN|PLD_ICUCR_ILEVEL6; |
118 | outw(data, port); | 107 | outw(data, port); |
119 | } | 108 | } |
120 | 109 | ||
121 | static void mask_and_ack_opsput_pld(unsigned int irq) | 110 | static void mask_opsput_pld(struct irq_data *data) |
122 | { | ||
123 | disable_opsput_pld_irq(irq); | ||
124 | // mask_and_ack_opsput(M32R_IRQ_INT1); | ||
125 | } | ||
126 | |||
127 | static void end_opsput_pld_irq(unsigned int irq) | ||
128 | { | 111 | { |
129 | enable_opsput_pld_irq(irq); | 112 | disable_opsput_pld_irq(data->irq); |
130 | end_opsput_irq(M32R_IRQ_INT1); | ||
131 | } | 113 | } |
132 | 114 | ||
133 | static unsigned int startup_opsput_pld_irq(unsigned int irq) | 115 | static void unmask_opsput_pld(struct irq_data *data) |
134 | { | 116 | { |
135 | enable_opsput_pld_irq(irq); | 117 | enable_opsput_pld_irq(data->irq); |
136 | return (0); | 118 | enable_opsput_irq(M32R_IRQ_INT1); |
137 | } | 119 | } |
138 | 120 | ||
139 | static void shutdown_opsput_pld_irq(unsigned int irq) | 121 | static void shutdown_opsput_pld(struct irq_data *data) |
140 | { | 122 | { |
141 | unsigned long port; | 123 | unsigned long port; |
142 | unsigned int pldirq; | 124 | unsigned int pldirq; |
143 | 125 | ||
144 | pldirq = irq2pldirq(irq); | 126 | pldirq = irq2pldirq(data->irq); |
145 | // shutdown_opsput_irq(M32R_IRQ_INT1); | ||
146 | port = pldirq2port(pldirq); | 127 | port = pldirq2port(pldirq); |
147 | outw(PLD_ICUCR_ILEVEL7, port); | 128 | outw(PLD_ICUCR_ILEVEL7, port); |
148 | } | 129 | } |
149 | 130 | ||
150 | static struct irq_chip opsput_pld_irq_type = | 131 | static struct irq_chip opsput_pld_irq_type = |
151 | { | 132 | { |
152 | .name = "OPSPUT-PLD-IRQ", | 133 | .name = "OPSPUT-PLD-IRQ", |
153 | .startup = startup_opsput_pld_irq, | 134 | .irq_shutdown = shutdown_opsput_pld, |
154 | .shutdown = shutdown_opsput_pld_irq, | 135 | .irq_mask = mask_opsput_pld, |
155 | .enable = enable_opsput_pld_irq, | 136 | .irq_unmask = unmask_opsput_pld, |
156 | .disable = disable_opsput_pld_irq, | ||
157 | .ack = mask_and_ack_opsput_pld, | ||
158 | .end = end_opsput_pld_irq | ||
159 | }; | 137 | }; |
160 | 138 | ||
161 | /* | 139 | /* |
@@ -189,42 +167,33 @@ static void enable_opsput_lanpld_irq(unsigned int irq) | |||
189 | outw(data, port); | 167 | outw(data, port); |
190 | } | 168 | } |
191 | 169 | ||
192 | static void mask_and_ack_opsput_lanpld(unsigned int irq) | 170 | static void mask_opsput_lanpld(struct irq_data *data) |
193 | { | ||
194 | disable_opsput_lanpld_irq(irq); | ||
195 | } | ||
196 | |||
197 | static void end_opsput_lanpld_irq(unsigned int irq) | ||
198 | { | 171 | { |
199 | enable_opsput_lanpld_irq(irq); | 172 | disable_opsput_lanpld_irq(data->irq); |
200 | end_opsput_irq(M32R_IRQ_INT0); | ||
201 | } | 173 | } |
202 | 174 | ||
203 | static unsigned int startup_opsput_lanpld_irq(unsigned int irq) | 175 | static void unmask_opsput_lanpld(struct irq_data *data) |
204 | { | 176 | { |
205 | enable_opsput_lanpld_irq(irq); | 177 | enable_opsput_lanpld_irq(data->irq); |
206 | return (0); | 178 | enable_opsput_irq(M32R_IRQ_INT0); |
207 | } | 179 | } |
208 | 180 | ||
209 | static void shutdown_opsput_lanpld_irq(unsigned int irq) | 181 | static void shutdown_opsput_lanpld(struct irq_data *data) |
210 | { | 182 | { |
211 | unsigned long port; | 183 | unsigned long port; |
212 | unsigned int pldirq; | 184 | unsigned int pldirq; |
213 | 185 | ||
214 | pldirq = irq2lanpldirq(irq); | 186 | pldirq = irq2lanpldirq(data->irq); |
215 | port = lanpldirq2port(pldirq); | 187 | port = lanpldirq2port(pldirq); |
216 | outw(PLD_ICUCR_ILEVEL7, port); | 188 | outw(PLD_ICUCR_ILEVEL7, port); |
217 | } | 189 | } |
218 | 190 | ||
219 | static struct irq_chip opsput_lanpld_irq_type = | 191 | static struct irq_chip opsput_lanpld_irq_type = |
220 | { | 192 | { |
221 | .name = "OPSPUT-PLD-LAN-IRQ", | 193 | .name = "OPSPUT-PLD-LAN-IRQ", |
222 | .startup = startup_opsput_lanpld_irq, | 194 | .irq_shutdown = shutdown_opsput_lanpld, |
223 | .shutdown = shutdown_opsput_lanpld_irq, | 195 | .irq_mask = mask_opsput_lanpld, |
224 | .enable = enable_opsput_lanpld_irq, | 196 | .irq_unmask = unmask_opsput_lanpld, |
225 | .disable = disable_opsput_lanpld_irq, | ||
226 | .ack = mask_and_ack_opsput_lanpld, | ||
227 | .end = end_opsput_lanpld_irq | ||
228 | }; | 197 | }; |
229 | 198 | ||
230 | /* | 199 | /* |
@@ -258,143 +227,109 @@ static void enable_opsput_lcdpld_irq(unsigned int irq) | |||
258 | outw(data, port); | 227 | outw(data, port); |
259 | } | 228 | } |
260 | 229 | ||
261 | static void mask_and_ack_opsput_lcdpld(unsigned int irq) | 230 | static void mask_opsput_lcdpld(struct irq_data *data) |
262 | { | ||
263 | disable_opsput_lcdpld_irq(irq); | ||
264 | } | ||
265 | |||
266 | static void end_opsput_lcdpld_irq(unsigned int irq) | ||
267 | { | 231 | { |
268 | enable_opsput_lcdpld_irq(irq); | 232 | disable_opsput_lcdpld_irq(data->irq); |
269 | end_opsput_irq(M32R_IRQ_INT2); | ||
270 | } | 233 | } |
271 | 234 | ||
272 | static unsigned int startup_opsput_lcdpld_irq(unsigned int irq) | 235 | static void unmask_opsput_lcdpld(struct irq_data *data) |
273 | { | 236 | { |
274 | enable_opsput_lcdpld_irq(irq); | 237 | enable_opsput_lcdpld_irq(data->irq); |
275 | return (0); | 238 | enable_opsput_irq(M32R_IRQ_INT2); |
276 | } | 239 | } |
277 | 240 | ||
278 | static void shutdown_opsput_lcdpld_irq(unsigned int irq) | 241 | static void shutdown_opsput_lcdpld(struct irq_data *data) |
279 | { | 242 | { |
280 | unsigned long port; | 243 | unsigned long port; |
281 | unsigned int pldirq; | 244 | unsigned int pldirq; |
282 | 245 | ||
283 | pldirq = irq2lcdpldirq(irq); | 246 | pldirq = irq2lcdpldirq(data->irq); |
284 | port = lcdpldirq2port(pldirq); | 247 | port = lcdpldirq2port(pldirq); |
285 | outw(PLD_ICUCR_ILEVEL7, port); | 248 | outw(PLD_ICUCR_ILEVEL7, port); |
286 | } | 249 | } |
287 | 250 | ||
288 | static struct irq_chip opsput_lcdpld_irq_type = | 251 | static struct irq_chip opsput_lcdpld_irq_type = { |
289 | { | 252 | .name = "OPSPUT-PLD-LCD-IRQ", |
290 | "OPSPUT-PLD-LCD-IRQ", | 253 | .irq_shutdown = shutdown_opsput_lcdpld, |
291 | startup_opsput_lcdpld_irq, | 254 | .irq_mask = mask_opsput_lcdpld, |
292 | shutdown_opsput_lcdpld_irq, | 255 | .irq_unmask = unmask_opsput_lcdpld, |
293 | enable_opsput_lcdpld_irq, | ||
294 | disable_opsput_lcdpld_irq, | ||
295 | mask_and_ack_opsput_lcdpld, | ||
296 | end_opsput_lcdpld_irq | ||
297 | }; | 256 | }; |
298 | 257 | ||
299 | void __init init_IRQ(void) | 258 | void __init init_IRQ(void) |
300 | { | 259 | { |
301 | #if defined(CONFIG_SMC91X) | 260 | #if defined(CONFIG_SMC91X) |
302 | /* INT#0: LAN controller on OPSPUT-LAN (SMC91C111)*/ | 261 | /* INT#0: LAN controller on OPSPUT-LAN (SMC91C111)*/ |
303 | irq_desc[OPSPUT_LAN_IRQ_LAN].status = IRQ_DISABLED; | 262 | set_irq_chip_and_handler(OPSPUT_LAN_IRQ_LAN, &opsput_lanpld_irq_type, |
304 | irq_desc[OPSPUT_LAN_IRQ_LAN].chip = &opsput_lanpld_irq_type; | 263 | handle_level_irq); |
305 | irq_desc[OPSPUT_LAN_IRQ_LAN].action = 0; | ||
306 | irq_desc[OPSPUT_LAN_IRQ_LAN].depth = 1; /* disable nested irq */ | ||
307 | lanpld_icu_data[irq2lanpldirq(OPSPUT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */ | 264 | lanpld_icu_data[irq2lanpldirq(OPSPUT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */ |
308 | disable_opsput_lanpld_irq(OPSPUT_LAN_IRQ_LAN); | 265 | disable_opsput_lanpld_irq(OPSPUT_LAN_IRQ_LAN); |
309 | #endif /* CONFIG_SMC91X */ | 266 | #endif /* CONFIG_SMC91X */ |
310 | 267 | ||
311 | /* MFT2 : system timer */ | 268 | /* MFT2 : system timer */ |
312 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; | 269 | set_irq_chip_and_handler(M32R_IRQ_MFT2, &opsput_irq_type, |
313 | irq_desc[M32R_IRQ_MFT2].chip = &opsput_irq_type; | 270 | handle_level_irq); |
314 | irq_desc[M32R_IRQ_MFT2].action = 0; | ||
315 | irq_desc[M32R_IRQ_MFT2].depth = 1; | ||
316 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; | 271 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; |
317 | disable_opsput_irq(M32R_IRQ_MFT2); | 272 | disable_opsput_irq(M32R_IRQ_MFT2); |
318 | 273 | ||
319 | /* SIO0 : receive */ | 274 | /* SIO0 : receive */ |
320 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; | 275 | set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &opsput_irq_type, |
321 | irq_desc[M32R_IRQ_SIO0_R].chip = &opsput_irq_type; | 276 | handle_level_irq); |
322 | irq_desc[M32R_IRQ_SIO0_R].action = 0; | ||
323 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; | ||
324 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; | 277 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; |
325 | disable_opsput_irq(M32R_IRQ_SIO0_R); | 278 | disable_opsput_irq(M32R_IRQ_SIO0_R); |
326 | 279 | ||
327 | /* SIO0 : send */ | 280 | /* SIO0 : send */ |
328 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; | 281 | set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &opsput_irq_type, |
329 | irq_desc[M32R_IRQ_SIO0_S].chip = &opsput_irq_type; | 282 | handle_level_irq); |
330 | irq_desc[M32R_IRQ_SIO0_S].action = 0; | ||
331 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; | ||
332 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; | 283 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; |
333 | disable_opsput_irq(M32R_IRQ_SIO0_S); | 284 | disable_opsput_irq(M32R_IRQ_SIO0_S); |
334 | 285 | ||
335 | /* SIO1 : receive */ | 286 | /* SIO1 : receive */ |
336 | irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED; | 287 | set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &opsput_irq_type, |
337 | irq_desc[M32R_IRQ_SIO1_R].chip = &opsput_irq_type; | 288 | handle_level_irq); |
338 | irq_desc[M32R_IRQ_SIO1_R].action = 0; | ||
339 | irq_desc[M32R_IRQ_SIO1_R].depth = 1; | ||
340 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; | 289 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; |
341 | disable_opsput_irq(M32R_IRQ_SIO1_R); | 290 | disable_opsput_irq(M32R_IRQ_SIO1_R); |
342 | 291 | ||
343 | /* SIO1 : send */ | 292 | /* SIO1 : send */ |
344 | irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED; | 293 | set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &opsput_irq_type, |
345 | irq_desc[M32R_IRQ_SIO1_S].chip = &opsput_irq_type; | 294 | handle_level_irq); |
346 | irq_desc[M32R_IRQ_SIO1_S].action = 0; | ||
347 | irq_desc[M32R_IRQ_SIO1_S].depth = 1; | ||
348 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; | 295 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; |
349 | disable_opsput_irq(M32R_IRQ_SIO1_S); | 296 | disable_opsput_irq(M32R_IRQ_SIO1_S); |
350 | 297 | ||
351 | /* DMA1 : */ | 298 | /* DMA1 : */ |
352 | irq_desc[M32R_IRQ_DMA1].status = IRQ_DISABLED; | 299 | set_irq_chip_and_handler(M32R_IRQ_DMA1, &opsput_irq_type, |
353 | irq_desc[M32R_IRQ_DMA1].chip = &opsput_irq_type; | 300 | handle_level_irq); |
354 | irq_desc[M32R_IRQ_DMA1].action = 0; | ||
355 | irq_desc[M32R_IRQ_DMA1].depth = 1; | ||
356 | icu_data[M32R_IRQ_DMA1].icucr = 0; | 301 | icu_data[M32R_IRQ_DMA1].icucr = 0; |
357 | disable_opsput_irq(M32R_IRQ_DMA1); | 302 | disable_opsput_irq(M32R_IRQ_DMA1); |
358 | 303 | ||
359 | #ifdef CONFIG_SERIAL_M32R_PLDSIO | 304 | #ifdef CONFIG_SERIAL_M32R_PLDSIO |
360 | /* INT#1: SIO0 Receive on PLD */ | 305 | /* INT#1: SIO0 Receive on PLD */ |
361 | irq_desc[PLD_IRQ_SIO0_RCV].status = IRQ_DISABLED; | 306 | set_irq_chip_and_handler(PLD_IRQ_SIO0_RCV, &opsput_pld_irq_type, |
362 | irq_desc[PLD_IRQ_SIO0_RCV].chip = &opsput_pld_irq_type; | 307 | handle_level_irq); |
363 | irq_desc[PLD_IRQ_SIO0_RCV].action = 0; | ||
364 | irq_desc[PLD_IRQ_SIO0_RCV].depth = 1; /* disable nested irq */ | ||
365 | pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; | 308 | pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; |
366 | disable_opsput_pld_irq(PLD_IRQ_SIO0_RCV); | 309 | disable_opsput_pld_irq(PLD_IRQ_SIO0_RCV); |
367 | 310 | ||
368 | /* INT#1: SIO0 Send on PLD */ | 311 | /* INT#1: SIO0 Send on PLD */ |
369 | irq_desc[PLD_IRQ_SIO0_SND].status = IRQ_DISABLED; | 312 | set_irq_chip_and_handler(PLD_IRQ_SIO0_SND, &opsput_pld_irq_type, |
370 | irq_desc[PLD_IRQ_SIO0_SND].chip = &opsput_pld_irq_type; | 313 | handle_level_irq); |
371 | irq_desc[PLD_IRQ_SIO0_SND].action = 0; | ||
372 | irq_desc[PLD_IRQ_SIO0_SND].depth = 1; /* disable nested irq */ | ||
373 | pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; | 314 | pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; |
374 | disable_opsput_pld_irq(PLD_IRQ_SIO0_SND); | 315 | disable_opsput_pld_irq(PLD_IRQ_SIO0_SND); |
375 | #endif /* CONFIG_SERIAL_M32R_PLDSIO */ | 316 | #endif /* CONFIG_SERIAL_M32R_PLDSIO */ |
376 | 317 | ||
377 | /* INT#1: CFC IREQ on PLD */ | 318 | /* INT#1: CFC IREQ on PLD */ |
378 | irq_desc[PLD_IRQ_CFIREQ].status = IRQ_DISABLED; | 319 | set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &opsput_pld_irq_type, |
379 | irq_desc[PLD_IRQ_CFIREQ].chip = &opsput_pld_irq_type; | 320 | handle_level_irq); |
380 | irq_desc[PLD_IRQ_CFIREQ].action = 0; | ||
381 | irq_desc[PLD_IRQ_CFIREQ].depth = 1; /* disable nested irq */ | ||
382 | pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */ | 321 | pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */ |
383 | disable_opsput_pld_irq(PLD_IRQ_CFIREQ); | 322 | disable_opsput_pld_irq(PLD_IRQ_CFIREQ); |
384 | 323 | ||
385 | /* INT#1: CFC Insert on PLD */ | 324 | /* INT#1: CFC Insert on PLD */ |
386 | irq_desc[PLD_IRQ_CFC_INSERT].status = IRQ_DISABLED; | 325 | set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &opsput_pld_irq_type, |
387 | irq_desc[PLD_IRQ_CFC_INSERT].chip = &opsput_pld_irq_type; | 326 | handle_level_irq); |
388 | irq_desc[PLD_IRQ_CFC_INSERT].action = 0; | ||
389 | irq_desc[PLD_IRQ_CFC_INSERT].depth = 1; /* disable nested irq */ | ||
390 | pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */ | 327 | pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */ |
391 | disable_opsput_pld_irq(PLD_IRQ_CFC_INSERT); | 328 | disable_opsput_pld_irq(PLD_IRQ_CFC_INSERT); |
392 | 329 | ||
393 | /* INT#1: CFC Eject on PLD */ | 330 | /* INT#1: CFC Eject on PLD */ |
394 | irq_desc[PLD_IRQ_CFC_EJECT].status = IRQ_DISABLED; | 331 | set_irq_chip_and_handler(PLD_IRQ_CFC_EJECT, &opsput_pld_irq_type, |
395 | irq_desc[PLD_IRQ_CFC_EJECT].chip = &opsput_pld_irq_type; | 332 | handle_level_irq); |
396 | irq_desc[PLD_IRQ_CFC_EJECT].action = 0; | ||
397 | irq_desc[PLD_IRQ_CFC_EJECT].depth = 1; /* disable nested irq */ | ||
398 | pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */ | 333 | pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */ |
399 | disable_opsput_pld_irq(PLD_IRQ_CFC_EJECT); | 334 | disable_opsput_pld_irq(PLD_IRQ_CFC_EJECT); |
400 | 335 | ||
@@ -413,14 +348,11 @@ void __init init_IRQ(void) | |||
413 | enable_opsput_irq(M32R_IRQ_INT1); | 348 | enable_opsput_irq(M32R_IRQ_INT1); |
414 | 349 | ||
415 | #if defined(CONFIG_USB) | 350 | #if defined(CONFIG_USB) |
416 | outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */ | 351 | outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */ |
417 | 352 | set_irq_chip_and_handler(OPSPUT_LCD_IRQ_USB_INT1, | |
418 | irq_desc[OPSPUT_LCD_IRQ_USB_INT1].status = IRQ_DISABLED; | 353 | &opsput_lcdpld_irq_type, handle_level_irq); |
419 | irq_desc[OPSPUT_LCD_IRQ_USB_INT1].chip = &opsput_lcdpld_irq_type; | 354 | lcdpld_icu_data[irq2lcdpldirq(OPSPUT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */ |
420 | irq_desc[OPSPUT_LCD_IRQ_USB_INT1].action = 0; | 355 | disable_opsput_lcdpld_irq(OPSPUT_LCD_IRQ_USB_INT1); |
421 | irq_desc[OPSPUT_LCD_IRQ_USB_INT1].depth = 1; | ||
422 | lcdpld_icu_data[irq2lcdpldirq(OPSPUT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */ | ||
423 | disable_opsput_lcdpld_irq(OPSPUT_LCD_IRQ_USB_INT1); | ||
424 | #endif | 356 | #endif |
425 | /* | 357 | /* |
426 | * INT2# is used for BAT, USB, AUDIO | 358 | * INT2# is used for BAT, USB, AUDIO |
@@ -433,10 +365,8 @@ void __init init_IRQ(void) | |||
433 | /* | 365 | /* |
434 | * INT3# is used for AR | 366 | * INT3# is used for AR |
435 | */ | 367 | */ |
436 | irq_desc[M32R_IRQ_INT3].status = IRQ_DISABLED; | 368 | set_irq_chip_and_handler(M32R_IRQ_INT3, &opsput_irq_type, |
437 | irq_desc[M32R_IRQ_INT3].chip = &opsput_irq_type; | 369 | handle_level_irq); |
438 | irq_desc[M32R_IRQ_INT3].action = 0; | ||
439 | irq_desc[M32R_IRQ_INT3].depth = 1; | ||
440 | icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; | 370 | icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; |
441 | disable_opsput_irq(M32R_IRQ_INT3); | 371 | disable_opsput_irq(M32R_IRQ_INT3); |
442 | #endif /* CONFIG_VIDEO_M32R_AR */ | 372 | #endif /* CONFIG_VIDEO_M32R_AR */ |
diff --git a/arch/m32r/platforms/usrv/setup.c b/arch/m32r/platforms/usrv/setup.c index 1beac7a51ed4..f3cff26d6e74 100644 --- a/arch/m32r/platforms/usrv/setup.c +++ b/arch/m32r/platforms/usrv/setup.c | |||
@@ -37,39 +37,30 @@ static void enable_mappi_irq(unsigned int irq) | |||
37 | outl(data, port); | 37 | outl(data, port); |
38 | } | 38 | } |
39 | 39 | ||
40 | static void mask_and_ack_mappi(unsigned int irq) | 40 | static void mask_mappi(struct irq_data *data) |
41 | { | 41 | { |
42 | disable_mappi_irq(irq); | 42 | disable_mappi_irq(data->irq); |
43 | } | 43 | } |
44 | 44 | ||
45 | static void end_mappi_irq(unsigned int irq) | 45 | static void unmask_mappi(struct irq_data *data) |
46 | { | 46 | { |
47 | enable_mappi_irq(irq); | 47 | enable_mappi_irq(data->irq); |
48 | } | 48 | } |
49 | 49 | ||
50 | static unsigned int startup_mappi_irq(unsigned int irq) | 50 | static void shutdown_mappi(struct irq_data *data) |
51 | { | ||
52 | enable_mappi_irq(irq); | ||
53 | return 0; | ||
54 | } | ||
55 | |||
56 | static void shutdown_mappi_irq(unsigned int irq) | ||
57 | { | 51 | { |
58 | unsigned long port; | 52 | unsigned long port; |
59 | 53 | ||
60 | port = irq2port(irq); | 54 | port = irq2port(data->irq); |
61 | outl(M32R_ICUCR_ILEVEL7, port); | 55 | outl(M32R_ICUCR_ILEVEL7, port); |
62 | } | 56 | } |
63 | 57 | ||
64 | static struct irq_chip mappi_irq_type = | 58 | static struct irq_chip mappi_irq_type = |
65 | { | 59 | { |
66 | .name = "M32700-IRQ", | 60 | .name = "M32700-IRQ", |
67 | .startup = startup_mappi_irq, | 61 | .irq_shutdown = shutdown_mappi, |
68 | .shutdown = shutdown_mappi_irq, | 62 | .irq_mask = mask_mappi, |
69 | .enable = enable_mappi_irq, | 63 | .irq_unmask = unmask_mappi, |
70 | .disable = disable_mappi_irq, | ||
71 | .ack = mask_and_ack_mappi, | ||
72 | .end = end_mappi_irq | ||
73 | }; | 64 | }; |
74 | 65 | ||
75 | /* | 66 | /* |
@@ -107,42 +98,33 @@ static void enable_m32700ut_pld_irq(unsigned int irq) | |||
107 | outw(data, port); | 98 | outw(data, port); |
108 | } | 99 | } |
109 | 100 | ||
110 | static void mask_and_ack_m32700ut_pld(unsigned int irq) | 101 | static void mask_m32700ut_pld(struct irq_data *data) |
111 | { | 102 | { |
112 | disable_m32700ut_pld_irq(irq); | 103 | disable_m32700ut_pld_irq(data->irq); |
113 | } | 104 | } |
114 | 105 | ||
115 | static void end_m32700ut_pld_irq(unsigned int irq) | 106 | static void unmask_m32700ut_pld(struct irq_data *data) |
116 | { | 107 | { |
117 | enable_m32700ut_pld_irq(irq); | 108 | enable_m32700ut_pld_irq(data->irq); |
118 | end_mappi_irq(M32R_IRQ_INT1); | 109 | enable_mappi_irq(M32R_IRQ_INT1); |
119 | } | ||
120 | |||
121 | static unsigned int startup_m32700ut_pld_irq(unsigned int irq) | ||
122 | { | ||
123 | enable_m32700ut_pld_irq(irq); | ||
124 | return 0; | ||
125 | } | 110 | } |
126 | 111 | ||
127 | static void shutdown_m32700ut_pld_irq(unsigned int irq) | 112 | static void shutdown_m32700ut_pld(struct irq_data *data) |
128 | { | 113 | { |
129 | unsigned long port; | 114 | unsigned long port; |
130 | unsigned int pldirq; | 115 | unsigned int pldirq; |
131 | 116 | ||
132 | pldirq = irq2pldirq(irq); | 117 | pldirq = irq2pldirq(data->irq); |
133 | port = pldirq2port(pldirq); | 118 | port = pldirq2port(pldirq); |
134 | outw(PLD_ICUCR_ILEVEL7, port); | 119 | outw(PLD_ICUCR_ILEVEL7, port); |
135 | } | 120 | } |
136 | 121 | ||
137 | static struct irq_chip m32700ut_pld_irq_type = | 122 | static struct irq_chip m32700ut_pld_irq_type = |
138 | { | 123 | { |
139 | .name = "USRV-PLD-IRQ", | 124 | .name = "USRV-PLD-IRQ", |
140 | .startup = startup_m32700ut_pld_irq, | 125 | .irq_shutdown = shutdown_m32700ut_pld, |
141 | .shutdown = shutdown_m32700ut_pld_irq, | 126 | .irq_mask = mask_m32700ut_pld, |
142 | .enable = enable_m32700ut_pld_irq, | 127 | .irq_unmask = unmask_m32700ut_pld, |
143 | .disable = disable_m32700ut_pld_irq, | ||
144 | .ack = mask_and_ack_m32700ut_pld, | ||
145 | .end = end_m32700ut_pld_irq | ||
146 | }; | 128 | }; |
147 | 129 | ||
148 | void __init init_IRQ(void) | 130 | void __init init_IRQ(void) |
@@ -156,53 +138,42 @@ void __init init_IRQ(void) | |||
156 | once++; | 138 | once++; |
157 | 139 | ||
158 | /* MFT2 : system timer */ | 140 | /* MFT2 : system timer */ |
159 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; | 141 | set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi_irq_type, |
160 | irq_desc[M32R_IRQ_MFT2].chip = &mappi_irq_type; | 142 | handle_level_irq); |
161 | irq_desc[M32R_IRQ_MFT2].action = 0; | ||
162 | irq_desc[M32R_IRQ_MFT2].depth = 1; | ||
163 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; | 143 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; |
164 | disable_mappi_irq(M32R_IRQ_MFT2); | 144 | disable_mappi_irq(M32R_IRQ_MFT2); |
165 | 145 | ||
166 | #if defined(CONFIG_SERIAL_M32R_SIO) | 146 | #if defined(CONFIG_SERIAL_M32R_SIO) |
167 | /* SIO0_R : uart receive data */ | 147 | /* SIO0_R : uart receive data */ |
168 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; | 148 | set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi_irq_type, |
169 | irq_desc[M32R_IRQ_SIO0_R].chip = &mappi_irq_type; | 149 | handle_level_irq); |
170 | irq_desc[M32R_IRQ_SIO0_R].action = 0; | ||
171 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; | ||
172 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; | 150 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; |
173 | disable_mappi_irq(M32R_IRQ_SIO0_R); | 151 | disable_mappi_irq(M32R_IRQ_SIO0_R); |
174 | 152 | ||
175 | /* SIO0_S : uart send data */ | 153 | /* SIO0_S : uart send data */ |
176 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; | 154 | set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi_irq_type, |
177 | irq_desc[M32R_IRQ_SIO0_S].chip = &mappi_irq_type; | 155 | handle_level_irq); |
178 | irq_desc[M32R_IRQ_SIO0_S].action = 0; | ||
179 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; | ||
180 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; | 156 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; |
181 | disable_mappi_irq(M32R_IRQ_SIO0_S); | 157 | disable_mappi_irq(M32R_IRQ_SIO0_S); |
182 | 158 | ||
183 | /* SIO1_R : uart receive data */ | 159 | /* SIO1_R : uart receive data */ |
184 | irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED; | 160 | set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi_irq_type, |
185 | irq_desc[M32R_IRQ_SIO1_R].chip = &mappi_irq_type; | 161 | handle_level_irq); |
186 | irq_desc[M32R_IRQ_SIO1_R].action = 0; | ||
187 | irq_desc[M32R_IRQ_SIO1_R].depth = 1; | ||
188 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; | 162 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; |
189 | disable_mappi_irq(M32R_IRQ_SIO1_R); | 163 | disable_mappi_irq(M32R_IRQ_SIO1_R); |
190 | 164 | ||
191 | /* SIO1_S : uart send data */ | 165 | /* SIO1_S : uart send data */ |
192 | irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED; | 166 | set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi_irq_type, |
193 | irq_desc[M32R_IRQ_SIO1_S].chip = &mappi_irq_type; | 167 | handle_level_irq); |
194 | irq_desc[M32R_IRQ_SIO1_S].action = 0; | ||
195 | irq_desc[M32R_IRQ_SIO1_S].depth = 1; | ||
196 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; | 168 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; |
197 | disable_mappi_irq(M32R_IRQ_SIO1_S); | 169 | disable_mappi_irq(M32R_IRQ_SIO1_S); |
198 | #endif /* CONFIG_SERIAL_M32R_SIO */ | 170 | #endif /* CONFIG_SERIAL_M32R_SIO */ |
199 | 171 | ||
200 | /* INT#67-#71: CFC#0 IREQ on PLD */ | 172 | /* INT#67-#71: CFC#0 IREQ on PLD */ |
201 | for (i = 0 ; i < CONFIG_M32R_CFC_NUM ; i++ ) { | 173 | for (i = 0 ; i < CONFIG_M32R_CFC_NUM ; i++ ) { |
202 | irq_desc[PLD_IRQ_CF0 + i].status = IRQ_DISABLED; | 174 | set_irq_chip_and_handler(PLD_IRQ_CF0 + i, |
203 | irq_desc[PLD_IRQ_CF0 + i].chip = &m32700ut_pld_irq_type; | 175 | &m32700ut_pld_irq_type, |
204 | irq_desc[PLD_IRQ_CF0 + i].action = 0; | 176 | handle_level_irq); |
205 | irq_desc[PLD_IRQ_CF0 + i].depth = 1; /* disable nested irq */ | ||
206 | pld_icu_data[irq2pldirq(PLD_IRQ_CF0 + i)].icucr | 177 | pld_icu_data[irq2pldirq(PLD_IRQ_CF0 + i)].icucr |
207 | = PLD_ICUCR_ISMOD01; /* 'L' level sense */ | 178 | = PLD_ICUCR_ISMOD01; /* 'L' level sense */ |
208 | disable_m32700ut_pld_irq(PLD_IRQ_CF0 + i); | 179 | disable_m32700ut_pld_irq(PLD_IRQ_CF0 + i); |
@@ -210,19 +181,15 @@ void __init init_IRQ(void) | |||
210 | 181 | ||
211 | #if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) | 182 | #if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) |
212 | /* INT#76: 16552D#0 IREQ on PLD */ | 183 | /* INT#76: 16552D#0 IREQ on PLD */ |
213 | irq_desc[PLD_IRQ_UART0].status = IRQ_DISABLED; | 184 | set_irq_chip_and_handler(PLD_IRQ_UART0, &m32700ut_pld_irq_type, |
214 | irq_desc[PLD_IRQ_UART0].chip = &m32700ut_pld_irq_type; | 185 | handle_level_irq); |
215 | irq_desc[PLD_IRQ_UART0].action = 0; | ||
216 | irq_desc[PLD_IRQ_UART0].depth = 1; /* disable nested irq */ | ||
217 | pld_icu_data[irq2pldirq(PLD_IRQ_UART0)].icucr | 186 | pld_icu_data[irq2pldirq(PLD_IRQ_UART0)].icucr |
218 | = PLD_ICUCR_ISMOD03; /* 'H' level sense */ | 187 | = PLD_ICUCR_ISMOD03; /* 'H' level sense */ |
219 | disable_m32700ut_pld_irq(PLD_IRQ_UART0); | 188 | disable_m32700ut_pld_irq(PLD_IRQ_UART0); |
220 | 189 | ||
221 | /* INT#77: 16552D#1 IREQ on PLD */ | 190 | /* INT#77: 16552D#1 IREQ on PLD */ |
222 | irq_desc[PLD_IRQ_UART1].status = IRQ_DISABLED; | 191 | set_irq_chip_and_handler(PLD_IRQ_UART1, &m32700ut_pld_irq_type, |
223 | irq_desc[PLD_IRQ_UART1].chip = &m32700ut_pld_irq_type; | 192 | handle_level_irq); |
224 | irq_desc[PLD_IRQ_UART1].action = 0; | ||
225 | irq_desc[PLD_IRQ_UART1].depth = 1; /* disable nested irq */ | ||
226 | pld_icu_data[irq2pldirq(PLD_IRQ_UART1)].icucr | 193 | pld_icu_data[irq2pldirq(PLD_IRQ_UART1)].icucr |
227 | = PLD_ICUCR_ISMOD03; /* 'H' level sense */ | 194 | = PLD_ICUCR_ISMOD03; /* 'H' level sense */ |
228 | disable_m32700ut_pld_irq(PLD_IRQ_UART1); | 195 | disable_m32700ut_pld_irq(PLD_IRQ_UART1); |
@@ -230,10 +197,8 @@ void __init init_IRQ(void) | |||
230 | 197 | ||
231 | #if defined(CONFIG_IDC_AK4524) || defined(CONFIG_IDC_AK4524_MODULE) | 198 | #if defined(CONFIG_IDC_AK4524) || defined(CONFIG_IDC_AK4524_MODULE) |
232 | /* INT#80: AK4524 IREQ on PLD */ | 199 | /* INT#80: AK4524 IREQ on PLD */ |
233 | irq_desc[PLD_IRQ_SNDINT].status = IRQ_DISABLED; | 200 | set_irq_chip_and_handler(PLD_IRQ_SNDINT, &m32700ut_pld_irq_type, |
234 | irq_desc[PLD_IRQ_SNDINT].chip = &m32700ut_pld_irq_type; | 201 | handle_level_irq); |
235 | irq_desc[PLD_IRQ_SNDINT].action = 0; | ||
236 | irq_desc[PLD_IRQ_SNDINT].depth = 1; /* disable nested irq */ | ||
237 | pld_icu_data[irq2pldirq(PLD_IRQ_SNDINT)].icucr | 202 | pld_icu_data[irq2pldirq(PLD_IRQ_SNDINT)].icucr |
238 | = PLD_ICUCR_ISMOD01; /* 'L' level sense */ | 203 | = PLD_ICUCR_ISMOD01; /* 'L' level sense */ |
239 | disable_m32700ut_pld_irq(PLD_IRQ_SNDINT); | 204 | disable_m32700ut_pld_irq(PLD_IRQ_SNDINT); |
diff --git a/arch/m68k/amiga/config.c b/arch/m68k/amiga/config.c index b1577f741fa8..82a4bb51d5d8 100644 --- a/arch/m68k/amiga/config.c +++ b/arch/m68k/amiga/config.c | |||
@@ -610,17 +610,17 @@ static void amiga_mem_console_write(struct console *co, const char *s, | |||
610 | 610 | ||
611 | static int __init amiga_savekmsg_setup(char *arg) | 611 | static int __init amiga_savekmsg_setup(char *arg) |
612 | { | 612 | { |
613 | static struct resource debug_res = { .name = "Debug" }; | ||
614 | |||
615 | if (!MACH_IS_AMIGA || strcmp(arg, "mem")) | 613 | if (!MACH_IS_AMIGA || strcmp(arg, "mem")) |
616 | goto done; | 614 | return 0; |
617 | 615 | ||
618 | if (!AMIGAHW_PRESENT(CHIP_RAM)) { | 616 | if (amiga_chip_size < SAVEKMSG_MAXMEM) { |
619 | printk("Warning: no chipram present for debugging\n"); | 617 | pr_err("Not enough chipram for debugging\n"); |
620 | goto done; | 618 | return -ENOMEM; |
621 | } | 619 | } |
622 | 620 | ||
623 | savekmsg = amiga_chip_alloc_res(SAVEKMSG_MAXMEM, &debug_res); | 621 | /* Just steal the block, the chipram allocator isn't functional yet */ |
622 | amiga_chip_size -= SAVEKMSG_MAXMEM; | ||
623 | savekmsg = (void *)ZTWO_VADDR(CHIP_PHYSADDR + amiga_chip_size); | ||
624 | savekmsg->magic1 = SAVEKMSG_MAGIC1; | 624 | savekmsg->magic1 = SAVEKMSG_MAGIC1; |
625 | savekmsg->magic2 = SAVEKMSG_MAGIC2; | 625 | savekmsg->magic2 = SAVEKMSG_MAGIC2; |
626 | savekmsg->magicptr = ZTWO_PADDR(savekmsg); | 626 | savekmsg->magicptr = ZTWO_PADDR(savekmsg); |
@@ -628,8 +628,6 @@ static int __init amiga_savekmsg_setup(char *arg) | |||
628 | 628 | ||
629 | amiga_console_driver.write = amiga_mem_console_write; | 629 | amiga_console_driver.write = amiga_mem_console_write; |
630 | register_console(&amiga_console_driver); | 630 | register_console(&amiga_console_driver); |
631 | |||
632 | done: | ||
633 | return 0; | 631 | return 0; |
634 | } | 632 | } |
635 | 633 | ||
diff --git a/arch/m68k/atari/ataints.c b/arch/m68k/atari/ataints.c index 39478dd08e67..26a804e67bce 100644 --- a/arch/m68k/atari/ataints.c +++ b/arch/m68k/atari/ataints.c | |||
@@ -388,9 +388,9 @@ void __init atari_init_IRQ(void) | |||
388 | } | 388 | } |
389 | 389 | ||
390 | if (ATARIHW_PRESENT(SCC) && !atari_SCC_reset_done) { | 390 | if (ATARIHW_PRESENT(SCC) && !atari_SCC_reset_done) { |
391 | scc.cha_a_ctrl = 9; | 391 | atari_scc.cha_a_ctrl = 9; |
392 | MFPDELAY(); | 392 | MFPDELAY(); |
393 | scc.cha_a_ctrl = (char) 0xc0; /* hardware reset */ | 393 | atari_scc.cha_a_ctrl = (char) 0xc0; /* hardware reset */ |
394 | } | 394 | } |
395 | 395 | ||
396 | if (ATARIHW_PRESENT(SCU)) { | 396 | if (ATARIHW_PRESENT(SCU)) { |
diff --git a/arch/m68k/atari/config.c b/arch/m68k/atari/config.c index ae2d96e5d618..4203d101363c 100644 --- a/arch/m68k/atari/config.c +++ b/arch/m68k/atari/config.c | |||
@@ -315,7 +315,7 @@ void __init config_atari(void) | |||
315 | ATARIHW_SET(SCC_DMA); | 315 | ATARIHW_SET(SCC_DMA); |
316 | printk("SCC_DMA "); | 316 | printk("SCC_DMA "); |
317 | } | 317 | } |
318 | if (scc_test(&scc.cha_a_ctrl)) { | 318 | if (scc_test(&atari_scc.cha_a_ctrl)) { |
319 | ATARIHW_SET(SCC); | 319 | ATARIHW_SET(SCC); |
320 | printk("SCC "); | 320 | printk("SCC "); |
321 | } | 321 | } |
diff --git a/arch/m68k/atari/debug.c b/arch/m68k/atari/debug.c index 28efdc33c1ae..5a484247e493 100644 --- a/arch/m68k/atari/debug.c +++ b/arch/m68k/atari/debug.c | |||
@@ -53,9 +53,9 @@ static inline void ata_scc_out(char c) | |||
53 | { | 53 | { |
54 | do { | 54 | do { |
55 | MFPDELAY(); | 55 | MFPDELAY(); |
56 | } while (!(scc.cha_b_ctrl & 0x04)); /* wait for tx buf empty */ | 56 | } while (!(atari_scc.cha_b_ctrl & 0x04)); /* wait for tx buf empty */ |
57 | MFPDELAY(); | 57 | MFPDELAY(); |
58 | scc.cha_b_data = c; | 58 | atari_scc.cha_b_data = c; |
59 | } | 59 | } |
60 | 60 | ||
61 | static void atari_scc_console_write(struct console *co, const char *str, | 61 | static void atari_scc_console_write(struct console *co, const char *str, |
@@ -140,9 +140,9 @@ int atari_scc_console_wait_key(struct console *co) | |||
140 | { | 140 | { |
141 | do { | 141 | do { |
142 | MFPDELAY(); | 142 | MFPDELAY(); |
143 | } while (!(scc.cha_b_ctrl & 0x01)); /* wait for rx buf filled */ | 143 | } while (!(atari_scc.cha_b_ctrl & 0x01)); /* wait for rx buf filled */ |
144 | MFPDELAY(); | 144 | MFPDELAY(); |
145 | return scc.cha_b_data; | 145 | return atari_scc.cha_b_data; |
146 | } | 146 | } |
147 | 147 | ||
148 | int atari_midi_console_wait_key(struct console *co) | 148 | int atari_midi_console_wait_key(struct console *co) |
@@ -185,9 +185,9 @@ static void __init atari_init_mfp_port(int cflag) | |||
185 | 185 | ||
186 | #define SCC_WRITE(reg, val) \ | 186 | #define SCC_WRITE(reg, val) \ |
187 | do { \ | 187 | do { \ |
188 | scc.cha_b_ctrl = (reg); \ | 188 | atari_scc.cha_b_ctrl = (reg); \ |
189 | MFPDELAY(); \ | 189 | MFPDELAY(); \ |
190 | scc.cha_b_ctrl = (val); \ | 190 | atari_scc.cha_b_ctrl = (val); \ |
191 | MFPDELAY(); \ | 191 | MFPDELAY(); \ |
192 | } while (0) | 192 | } while (0) |
193 | 193 | ||
@@ -240,7 +240,7 @@ static void __init atari_init_scc_port(int cflag) | |||
240 | reg3 = (cflag & CSIZE) == CS8 ? 0xc0 : 0x40; | 240 | reg3 = (cflag & CSIZE) == CS8 ? 0xc0 : 0x40; |
241 | reg5 = (cflag & CSIZE) == CS8 ? 0x60 : 0x20 | 0x82 /* assert DTR/RTS */; | 241 | reg5 = (cflag & CSIZE) == CS8 ? 0x60 : 0x20 | 0x82 /* assert DTR/RTS */; |
242 | 242 | ||
243 | (void)scc.cha_b_ctrl; /* reset reg pointer */ | 243 | (void)atari_scc.cha_b_ctrl; /* reset reg pointer */ |
244 | SCC_WRITE(9, 0xc0); /* reset */ | 244 | SCC_WRITE(9, 0xc0); /* reset */ |
245 | LONG_DELAY(); /* extra delay after WR9 access */ | 245 | LONG_DELAY(); /* extra delay after WR9 access */ |
246 | SCC_WRITE(4, (cflag & PARENB) ? ((cflag & PARODD) ? 0x01 : 0x03) | 246 | SCC_WRITE(4, (cflag & PARENB) ? ((cflag & PARODD) ? 0x01 : 0x03) |
diff --git a/arch/m68k/include/asm/atarihw.h b/arch/m68k/include/asm/atarihw.h index a714e1aa072a..f51f709bbf30 100644 --- a/arch/m68k/include/asm/atarihw.h +++ b/arch/m68k/include/asm/atarihw.h | |||
@@ -449,7 +449,7 @@ struct SCC | |||
449 | u_char char_dummy3; | 449 | u_char char_dummy3; |
450 | u_char cha_b_data; | 450 | u_char cha_b_data; |
451 | }; | 451 | }; |
452 | # define scc ((*(volatile struct SCC*)SCC_BAS)) | 452 | # define atari_scc ((*(volatile struct SCC*)SCC_BAS)) |
453 | 453 | ||
454 | /* The ESCC (Z85230) in an Atari ST. The channels are reversed! */ | 454 | /* The ESCC (Z85230) in an Atari ST. The channels are reversed! */ |
455 | # define st_escc ((*(volatile struct SCC*)0xfffffa31)) | 455 | # define st_escc ((*(volatile struct SCC*)0xfffffa31)) |
diff --git a/arch/m68k/include/asm/string.h b/arch/m68k/include/asm/string.h index 2936dda938d7..65b131282837 100644 --- a/arch/m68k/include/asm/string.h +++ b/arch/m68k/include/asm/string.h | |||
@@ -81,18 +81,6 @@ static inline char *strncpy(char *dest, const char *src, size_t n) | |||
81 | strcpy(__d + strlen(__d), (s)); \ | 81 | strcpy(__d + strlen(__d), (s)); \ |
82 | }) | 82 | }) |
83 | 83 | ||
84 | #define __HAVE_ARCH_STRCHR | ||
85 | static inline char *strchr(const char *s, int c) | ||
86 | { | ||
87 | char sc, ch = c; | ||
88 | |||
89 | for (; (sc = *s++) != ch; ) { | ||
90 | if (!sc) | ||
91 | return NULL; | ||
92 | } | ||
93 | return (char *)s - 1; | ||
94 | } | ||
95 | |||
96 | #ifndef CONFIG_COLDFIRE | 84 | #ifndef CONFIG_COLDFIRE |
97 | #define __HAVE_ARCH_STRCMP | 85 | #define __HAVE_ARCH_STRCMP |
98 | static inline int strcmp(const char *cs, const char *ct) | 86 | static inline int strcmp(const char *cs, const char *ct) |
diff --git a/arch/m68knommu/Kconfig b/arch/m68knommu/Kconfig index 704e7b92334c..8b9dacaa0f6e 100644 --- a/arch/m68knommu/Kconfig +++ b/arch/m68knommu/Kconfig | |||
@@ -2,6 +2,7 @@ config M68K | |||
2 | bool | 2 | bool |
3 | default y | 3 | default y |
4 | select HAVE_IDE | 4 | select HAVE_IDE |
5 | select HAVE_GENERIC_HARDIRQS | ||
5 | 6 | ||
6 | config MMU | 7 | config MMU |
7 | bool | 8 | bool |
@@ -48,14 +49,6 @@ config GENERIC_HWEIGHT | |||
48 | bool | 49 | bool |
49 | default y | 50 | default y |
50 | 51 | ||
51 | config GENERIC_HARDIRQS | ||
52 | bool | ||
53 | default y | ||
54 | |||
55 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
56 | bool | ||
57 | default y | ||
58 | |||
59 | config GENERIC_CALIBRATE_DELAY | 52 | config GENERIC_CALIBRATE_DELAY |
60 | bool | 53 | bool |
61 | default y | 54 | default y |
diff --git a/arch/m68knommu/configs/m5208evb_defconfig b/arch/m68knommu/configs/m5208evb_defconfig index 6ac2981a2cdf..2f5655c577af 100644 --- a/arch/m68knommu/configs/m5208evb_defconfig +++ b/arch/m68knommu/configs/m5208evb_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_LOG_BUF_SHIFT=14 | 2 | CONFIG_LOG_BUF_SHIFT=14 |
3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | # CONFIG_KALLSYMS is not set | 5 | # CONFIG_KALLSYMS is not set |
6 | # CONFIG_HOTPLUG is not set | 6 | # CONFIG_HOTPLUG is not set |
7 | # CONFIG_FUTEX is not set | 7 | # CONFIG_FUTEX is not set |
diff --git a/arch/m68knommu/configs/m5249evb_defconfig b/arch/m68knommu/configs/m5249evb_defconfig index 14934ff8d5c3..16df72bfbd45 100644 --- a/arch/m68knommu/configs/m5249evb_defconfig +++ b/arch/m68knommu/configs/m5249evb_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_LOG_BUF_SHIFT=14 | 2 | CONFIG_LOG_BUF_SHIFT=14 |
3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | # CONFIG_KALLSYMS is not set | 5 | # CONFIG_KALLSYMS is not set |
6 | # CONFIG_HOTPLUG is not set | 6 | # CONFIG_HOTPLUG is not set |
7 | # CONFIG_FUTEX is not set | 7 | # CONFIG_FUTEX is not set |
diff --git a/arch/m68knommu/configs/m5272c3_defconfig b/arch/m68knommu/configs/m5272c3_defconfig index 5985a3b593d8..4e6ea50c7f33 100644 --- a/arch/m68knommu/configs/m5272c3_defconfig +++ b/arch/m68knommu/configs/m5272c3_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_LOG_BUF_SHIFT=14 | 2 | CONFIG_LOG_BUF_SHIFT=14 |
3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | # CONFIG_KALLSYMS is not set | 5 | # CONFIG_KALLSYMS is not set |
6 | # CONFIG_HOTPLUG is not set | 6 | # CONFIG_HOTPLUG is not set |
7 | # CONFIG_FUTEX is not set | 7 | # CONFIG_FUTEX is not set |
diff --git a/arch/m68knommu/configs/m5275evb_defconfig b/arch/m68knommu/configs/m5275evb_defconfig index 5a7857efb45d..f3dd74115a34 100644 --- a/arch/m68knommu/configs/m5275evb_defconfig +++ b/arch/m68knommu/configs/m5275evb_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_LOG_BUF_SHIFT=14 | 2 | CONFIG_LOG_BUF_SHIFT=14 |
3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | # CONFIG_KALLSYMS is not set | 5 | # CONFIG_KALLSYMS is not set |
6 | # CONFIG_HOTPLUG is not set | 6 | # CONFIG_HOTPLUG is not set |
7 | # CONFIG_FUTEX is not set | 7 | # CONFIG_FUTEX is not set |
diff --git a/arch/m68knommu/configs/m5307c3_defconfig b/arch/m68knommu/configs/m5307c3_defconfig index e8102018c8d4..bce0a20c3737 100644 --- a/arch/m68knommu/configs/m5307c3_defconfig +++ b/arch/m68knommu/configs/m5307c3_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_LOG_BUF_SHIFT=14 | 2 | CONFIG_LOG_BUF_SHIFT=14 |
3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | # CONFIG_KALLSYMS is not set | 5 | # CONFIG_KALLSYMS is not set |
6 | # CONFIG_HOTPLUG is not set | 6 | # CONFIG_HOTPLUG is not set |
7 | # CONFIG_FUTEX is not set | 7 | # CONFIG_FUTEX is not set |
diff --git a/arch/m68knommu/configs/m5407c3_defconfig b/arch/m68knommu/configs/m5407c3_defconfig index 5c124a7ba2a7..618cc32691f2 100644 --- a/arch/m68knommu/configs/m5407c3_defconfig +++ b/arch/m68knommu/configs/m5407c3_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_LOG_BUF_SHIFT=14 | 2 | CONFIG_LOG_BUF_SHIFT=14 |
3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | # CONFIG_KALLSYMS is not set | 5 | # CONFIG_KALLSYMS is not set |
6 | # CONFIG_HOTPLUG is not set | 6 | # CONFIG_HOTPLUG is not set |
7 | # CONFIG_FUTEX is not set | 7 | # CONFIG_FUTEX is not set |
diff --git a/arch/m68knommu/defconfig b/arch/m68knommu/defconfig index 6ac2981a2cdf..2f5655c577af 100644 --- a/arch/m68knommu/defconfig +++ b/arch/m68knommu/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_LOG_BUF_SHIFT=14 | 2 | CONFIG_LOG_BUF_SHIFT=14 |
3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 3 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | # CONFIG_KALLSYMS is not set | 5 | # CONFIG_KALLSYMS is not set |
6 | # CONFIG_HOTPLUG is not set | 6 | # CONFIG_HOTPLUG is not set |
7 | # CONFIG_FUTEX is not set | 7 | # CONFIG_FUTEX is not set |
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 5f5018a71a3d..31680032053e 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig | |||
@@ -15,6 +15,8 @@ config MICROBLAZE | |||
15 | select TRACING_SUPPORT | 15 | select TRACING_SUPPORT |
16 | select OF | 16 | select OF |
17 | select OF_EARLY_FLATTREE | 17 | select OF_EARLY_FLATTREE |
18 | select HAVE_GENERIC_HARDIRQS | ||
19 | select GENERIC_IRQ_PROBE | ||
18 | 20 | ||
19 | config SWAP | 21 | config SWAP |
20 | def_bool n | 22 | def_bool n |
@@ -37,12 +39,6 @@ config GENERIC_FIND_NEXT_BIT | |||
37 | config GENERIC_HWEIGHT | 39 | config GENERIC_HWEIGHT |
38 | def_bool y | 40 | def_bool y |
39 | 41 | ||
40 | config GENERIC_HARDIRQS | ||
41 | def_bool y | ||
42 | |||
43 | config GENERIC_IRQ_PROBE | ||
44 | def_bool y | ||
45 | |||
46 | config GENERIC_CALIBRATE_DELAY | 42 | config GENERIC_CALIBRATE_DELAY |
47 | def_bool y | 43 | def_bool y |
48 | 44 | ||
@@ -52,9 +48,6 @@ config GENERIC_TIME_VSYSCALL | |||
52 | config GENERIC_CLOCKEVENTS | 48 | config GENERIC_CLOCKEVENTS |
53 | def_bool y | 49 | def_bool y |
54 | 50 | ||
55 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
56 | def_bool y | ||
57 | |||
58 | config GENERIC_GPIO | 51 | config GENERIC_GPIO |
59 | def_bool y | 52 | def_bool y |
60 | 53 | ||
diff --git a/arch/microblaze/configs/mmu_defconfig b/arch/microblaze/configs/mmu_defconfig index ab8fbe7ad90b..b3f5eecff2a7 100644 --- a/arch/microblaze/configs/mmu_defconfig +++ b/arch/microblaze/configs/mmu_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
7 | CONFIG_INITRAMFS_SOURCE="rootfs.cpio" | 7 | CONFIG_INITRAMFS_SOURCE="rootfs.cpio" |
8 | CONFIG_INITRAMFS_COMPRESSION_GZIP=y | 8 | CONFIG_INITRAMFS_COMPRESSION_GZIP=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | CONFIG_KALLSYMS_ALL=y | 11 | CONFIG_KALLSYMS_ALL=y |
12 | CONFIG_KALLSYMS_EXTRA_PASS=y | 12 | CONFIG_KALLSYMS_EXTRA_PASS=y |
13 | # CONFIG_HOTPLUG is not set | 13 | # CONFIG_HOTPLUG is not set |
diff --git a/arch/microblaze/configs/nommu_defconfig b/arch/microblaze/configs/nommu_defconfig index ebc143c5368e..0249e4b7e1d3 100644 --- a/arch/microblaze/configs/nommu_defconfig +++ b/arch/microblaze/configs/nommu_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_BSD_PROCESS_ACCT_V3=y | |||
6 | CONFIG_IKCONFIG=y | 6 | CONFIG_IKCONFIG=y |
7 | CONFIG_IKCONFIG_PROC=y | 7 | CONFIG_IKCONFIG_PROC=y |
8 | CONFIG_SYSFS_DEPRECATED_V2=y | 8 | CONFIG_SYSFS_DEPRECATED_V2=y |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | CONFIG_KALLSYMS_ALL=y | 10 | CONFIG_KALLSYMS_ALL=y |
11 | CONFIG_KALLSYMS_EXTRA_PASS=y | 11 | CONFIG_KALLSYMS_EXTRA_PASS=y |
12 | # CONFIG_HOTPLUG is not set | 12 | # CONFIG_HOTPLUG is not set |
diff --git a/arch/microblaze/kernel/head.S b/arch/microblaze/kernel/head.S index 42434008209e..0db20b5abb54 100644 --- a/arch/microblaze/kernel/head.S +++ b/arch/microblaze/kernel/head.S | |||
@@ -77,8 +77,18 @@ real_start: | |||
77 | We ensure r7 points to a valid FDT, just in case the bootloader | 77 | We ensure r7 points to a valid FDT, just in case the bootloader |
78 | is broken or non-existent */ | 78 | is broken or non-existent */ |
79 | beqi r7, no_fdt_arg /* NULL pointer? don't copy */ | 79 | beqi r7, no_fdt_arg /* NULL pointer? don't copy */ |
80 | lw r11, r0, r7 /* Does r7 point to a */ | 80 | /* Does r7 point to a valid FDT? Load HEADER magic number */ |
81 | rsubi r11, r11, OF_DT_HEADER /* valid FDT? */ | 81 | /* Run time Big/Little endian platform */ |
82 | /* Save 1 as word and load byte - 0 - BIG, 1 - LITTLE */ | ||
83 | addik r11, r0, 0x1 /* BIG/LITTLE checking value */ | ||
84 | /* __bss_start will be zeroed later - it is just temp location */ | ||
85 | swi r11, r0, TOPHYS(__bss_start) | ||
86 | lbui r11, r0, TOPHYS(__bss_start) | ||
87 | beqid r11, big_endian /* DO NOT break delay stop dependency */ | ||
88 | lw r11, r0, r7 /* Big endian load in delay slot */ | ||
89 | lwr r11, r0, r7 /* Little endian load */ | ||
90 | big_endian: | ||
91 | rsubi r11, r11, OF_DT_HEADER /* Check FDT header */ | ||
82 | beqi r11, _prepare_copy_fdt | 92 | beqi r11, _prepare_copy_fdt |
83 | or r7, r0, r0 /* clear R7 when not valid DTB */ | 93 | or r7, r0, r0 /* clear R7 when not valid DTB */ |
84 | bnei r11, no_fdt_arg /* No - get out of here */ | 94 | bnei r11, no_fdt_arg /* No - get out of here */ |
diff --git a/arch/microblaze/kernel/hw_exception_handler.S b/arch/microblaze/kernel/hw_exception_handler.S index 25f6e07d8de8..782680de3121 100644 --- a/arch/microblaze/kernel/hw_exception_handler.S +++ b/arch/microblaze/kernel/hw_exception_handler.S | |||
@@ -147,10 +147,6 @@ | |||
147 | #if CONFIG_XILINX_MICROBLAZE0_USE_BARREL > 0 | 147 | #if CONFIG_XILINX_MICROBLAZE0_USE_BARREL > 0 |
148 | #define BSRLI(rD, rA, imm) \ | 148 | #define BSRLI(rD, rA, imm) \ |
149 | bsrli rD, rA, imm | 149 | bsrli rD, rA, imm |
150 | #elif CONFIG_XILINX_MICROBLAZE0_USE_DIV > 0 | ||
151 | #define BSRLI(rD, rA, imm) \ | ||
152 | ori rD, r0, (1 << imm); \ | ||
153 | idivu rD, rD, rA | ||
154 | #else | 150 | #else |
155 | #define BSRLI(rD, rA, imm) BSRLI ## imm (rD, rA) | 151 | #define BSRLI(rD, rA, imm) BSRLI ## imm (rD, rA) |
156 | /* Only the used shift constants defined here - add more if needed */ | 152 | /* Only the used shift constants defined here - add more if needed */ |
diff --git a/arch/microblaze/lib/fastcopy.S b/arch/microblaze/lib/fastcopy.S index fdc48bb065d8..62021d7e249e 100644 --- a/arch/microblaze/lib/fastcopy.S +++ b/arch/microblaze/lib/fastcopy.S | |||
@@ -29,6 +29,10 @@ | |||
29 | * between mem locations with size of xfer spec'd in bytes | 29 | * between mem locations with size of xfer spec'd in bytes |
30 | */ | 30 | */ |
31 | 31 | ||
32 | #ifdef __MICROBLAZEEL__ | ||
33 | #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM. | ||
34 | #endif | ||
35 | |||
32 | #include <linux/linkage.h> | 36 | #include <linux/linkage.h> |
33 | .text | 37 | .text |
34 | .globl memcpy | 38 | .globl memcpy |
diff --git a/arch/mips/Kbuild.platforms b/arch/mips/Kbuild.platforms index 78439b8a83c4..7ff9b5492041 100644 --- a/arch/mips/Kbuild.platforms +++ b/arch/mips/Kbuild.platforms | |||
@@ -2,6 +2,7 @@ | |||
2 | 2 | ||
3 | platforms += alchemy | 3 | platforms += alchemy |
4 | platforms += ar7 | 4 | platforms += ar7 |
5 | platforms += ath79 | ||
5 | platforms += bcm47xx | 6 | platforms += bcm47xx |
6 | platforms += bcm63xx | 7 | platforms += bcm63xx |
7 | platforms += cavium-octeon | 8 | platforms += cavium-octeon |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index f489ec30e071..f5ecc0566bc2 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -21,6 +21,7 @@ config MIPS | |||
21 | select HAVE_DMA_API_DEBUG | 21 | select HAVE_DMA_API_DEBUG |
22 | select HAVE_GENERIC_HARDIRQS | 22 | select HAVE_GENERIC_HARDIRQS |
23 | select GENERIC_IRQ_PROBE | 23 | select GENERIC_IRQ_PROBE |
24 | select HAVE_ARCH_JUMP_LABEL | ||
24 | 25 | ||
25 | menu "Machine selection" | 26 | menu "Machine selection" |
26 | 27 | ||
@@ -65,6 +66,22 @@ config AR7 | |||
65 | Support for the Texas Instruments AR7 System-on-a-Chip | 66 | Support for the Texas Instruments AR7 System-on-a-Chip |
66 | family: TNETD7100, 7200 and 7300. | 67 | family: TNETD7100, 7200 and 7300. |
67 | 68 | ||
69 | config ATH79 | ||
70 | bool "Atheros AR71XX/AR724X/AR913X based boards" | ||
71 | select ARCH_REQUIRE_GPIOLIB | ||
72 | select BOOT_RAW | ||
73 | select CEVT_R4K | ||
74 | select CSRC_R4K | ||
75 | select DMA_NONCOHERENT | ||
76 | select IRQ_CPU | ||
77 | select MIPS_MACHINE | ||
78 | select SYS_HAS_CPU_MIPS32_R2 | ||
79 | select SYS_HAS_EARLY_PRINTK | ||
80 | select SYS_SUPPORTS_32BIT_KERNEL | ||
81 | select SYS_SUPPORTS_BIG_ENDIAN | ||
82 | help | ||
83 | Support for the Atheros AR71XX/AR724X/AR913X SoCs. | ||
84 | |||
68 | config BCM47XX | 85 | config BCM47XX |
69 | bool "Broadcom BCM47XX based boards" | 86 | bool "Broadcom BCM47XX based boards" |
70 | select CEVT_R4K | 87 | select CEVT_R4K |
@@ -717,6 +734,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD | |||
717 | endchoice | 734 | endchoice |
718 | 735 | ||
719 | source "arch/mips/alchemy/Kconfig" | 736 | source "arch/mips/alchemy/Kconfig" |
737 | source "arch/mips/ath79/Kconfig" | ||
720 | source "arch/mips/bcm63xx/Kconfig" | 738 | source "arch/mips/bcm63xx/Kconfig" |
721 | source "arch/mips/jazz/Kconfig" | 739 | source "arch/mips/jazz/Kconfig" |
722 | source "arch/mips/jz4740/Kconfig" | 740 | source "arch/mips/jz4740/Kconfig" |
@@ -775,9 +793,6 @@ config SCHED_OMIT_FRAME_POINTER | |||
775 | bool | 793 | bool |
776 | default y | 794 | default y |
777 | 795 | ||
778 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
779 | def_bool y | ||
780 | |||
781 | # | 796 | # |
782 | # Select some configuration options automatically based on user selections. | 797 | # Select some configuration options automatically based on user selections. |
783 | # | 798 | # |
@@ -883,6 +898,9 @@ config MIPS_DISABLE_OBSOLETE_IDE | |||
883 | config SYNC_R4K | 898 | config SYNC_R4K |
884 | bool | 899 | bool |
885 | 900 | ||
901 | config MIPS_MACHINE | ||
902 | def_bool n | ||
903 | |||
886 | config NO_IOPORT | 904 | config NO_IOPORT |
887 | def_bool n | 905 | def_bool n |
888 | 906 | ||
@@ -2400,4 +2418,20 @@ source "security/Kconfig" | |||
2400 | 2418 | ||
2401 | source "crypto/Kconfig" | 2419 | source "crypto/Kconfig" |
2402 | 2420 | ||
2421 | menuconfig VIRTUALIZATION | ||
2422 | bool "Virtualization" | ||
2423 | default n | ||
2424 | ---help--- | ||
2425 | Say Y here to get to see options for using your Linux host to run other | ||
2426 | operating systems inside virtual machines (guests). | ||
2427 | This option alone does not add any kernel code. | ||
2428 | |||
2429 | If you say N, all options in this submenu will be skipped and disabled. | ||
2430 | |||
2431 | if VIRTUALIZATION | ||
2432 | |||
2433 | source drivers/virtio/Kconfig | ||
2434 | |||
2435 | endif # VIRTUALIZATION | ||
2436 | |||
2403 | source "lib/Kconfig" | 2437 | source "lib/Kconfig" |
diff --git a/arch/mips/Kconfig.debug b/arch/mips/Kconfig.debug index f437cd1fafb8..5358f90b4dd2 100644 --- a/arch/mips/Kconfig.debug +++ b/arch/mips/Kconfig.debug | |||
@@ -7,7 +7,7 @@ config TRACE_IRQFLAGS_SUPPORT | |||
7 | source "lib/Kconfig.debug" | 7 | source "lib/Kconfig.debug" |
8 | 8 | ||
9 | config EARLY_PRINTK | 9 | config EARLY_PRINTK |
10 | bool "Early printk" if EMBEDDED | 10 | bool "Early printk" if EXPERT |
11 | depends on SYS_HAS_EARLY_PRINTK | 11 | depends on SYS_HAS_EARLY_PRINTK |
12 | default y | 12 | default y |
13 | help | 13 | help |
diff --git a/arch/mips/ath79/Kconfig b/arch/mips/ath79/Kconfig new file mode 100644 index 000000000000..b05828260f7f --- /dev/null +++ b/arch/mips/ath79/Kconfig | |||
@@ -0,0 +1,50 @@ | |||
1 | if ATH79 | ||
2 | |||
3 | menu "Atheros AR71XX/AR724X/AR913X machine selection" | ||
4 | |||
5 | config ATH79_MACH_AP81 | ||
6 | bool "Atheros AP81 reference board" | ||
7 | select SOC_AR913X | ||
8 | select ATH79_DEV_AR913X_WMAC | ||
9 | select ATH79_DEV_GPIO_BUTTONS | ||
10 | select ATH79_DEV_LEDS_GPIO | ||
11 | select ATH79_DEV_SPI | ||
12 | help | ||
13 | Say 'Y' here if you want your kernel to support the | ||
14 | Atheros AP81 reference board. | ||
15 | |||
16 | config ATH79_MACH_PB44 | ||
17 | bool "Atheros PB44 reference board" | ||
18 | select SOC_AR71XX | ||
19 | select ATH79_DEV_GPIO_BUTTONS | ||
20 | select ATH79_DEV_LEDS_GPIO | ||
21 | select ATH79_DEV_SPI | ||
22 | help | ||
23 | Say 'Y' here if you want your kernel to support the | ||
24 | Atheros PB44 reference board. | ||
25 | |||
26 | endmenu | ||
27 | |||
28 | config SOC_AR71XX | ||
29 | def_bool n | ||
30 | |||
31 | config SOC_AR724X | ||
32 | def_bool n | ||
33 | |||
34 | config SOC_AR913X | ||
35 | def_bool n | ||
36 | |||
37 | config ATH79_DEV_AR913X_WMAC | ||
38 | depends on SOC_AR913X | ||
39 | def_bool n | ||
40 | |||
41 | config ATH79_DEV_GPIO_BUTTONS | ||
42 | def_bool n | ||
43 | |||
44 | config ATH79_DEV_LEDS_GPIO | ||
45 | def_bool n | ||
46 | |||
47 | config ATH79_DEV_SPI | ||
48 | def_bool n | ||
49 | |||
50 | endif | ||
diff --git a/arch/mips/ath79/Makefile b/arch/mips/ath79/Makefile new file mode 100644 index 000000000000..c33d4653007c --- /dev/null +++ b/arch/mips/ath79/Makefile | |||
@@ -0,0 +1,28 @@ | |||
1 | # | ||
2 | # Makefile for the Atheros AR71XX/AR724X/AR913X specific parts of the kernel | ||
3 | # | ||
4 | # Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> | ||
5 | # Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | # | ||
7 | # This program is free software; you can redistribute it and/or modify it | ||
8 | # under the terms of the GNU General Public License version 2 as published | ||
9 | # by the Free Software Foundation. | ||
10 | |||
11 | obj-y := prom.o setup.o irq.o common.o clock.o gpio.o | ||
12 | |||
13 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | ||
14 | |||
15 | # | ||
16 | # Devices | ||
17 | # | ||
18 | obj-y += dev-common.o | ||
19 | obj-$(CONFIG_ATH79_DEV_AR913X_WMAC) += dev-ar913x-wmac.o | ||
20 | obj-$(CONFIG_ATH79_DEV_GPIO_BUTTONS) += dev-gpio-buttons.o | ||
21 | obj-$(CONFIG_ATH79_DEV_LEDS_GPIO) += dev-leds-gpio.o | ||
22 | obj-$(CONFIG_ATH79_DEV_SPI) += dev-spi.o | ||
23 | |||
24 | # | ||
25 | # Machines | ||
26 | # | ||
27 | obj-$(CONFIG_ATH79_MACH_AP81) += mach-ap81.o | ||
28 | obj-$(CONFIG_ATH79_MACH_PB44) += mach-pb44.o | ||
diff --git a/arch/mips/ath79/Platform b/arch/mips/ath79/Platform new file mode 100644 index 000000000000..2bd663647d27 --- /dev/null +++ b/arch/mips/ath79/Platform | |||
@@ -0,0 +1,7 @@ | |||
1 | # | ||
2 | # Atheros AR71xx/AR724x/AR913x | ||
3 | # | ||
4 | |||
5 | platform-$(CONFIG_ATH79) += ath79/ | ||
6 | cflags-$(CONFIG_ATH79) += -I$(srctree)/arch/mips/include/asm/mach-ath79 | ||
7 | load-$(CONFIG_ATH79) = 0xffffffff80060000 | ||
diff --git a/arch/mips/ath79/clock.c b/arch/mips/ath79/clock.c new file mode 100644 index 000000000000..680bde99a26c --- /dev/null +++ b/arch/mips/ath79/clock.c | |||
@@ -0,0 +1,183 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X common routines | ||
3 | * | ||
4 | * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||
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 version 2 as published | ||
8 | * by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/module.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/err.h> | ||
15 | #include <linux/clk.h> | ||
16 | |||
17 | #include <asm/mach-ath79/ath79.h> | ||
18 | #include <asm/mach-ath79/ar71xx_regs.h> | ||
19 | #include "common.h" | ||
20 | |||
21 | #define AR71XX_BASE_FREQ 40000000 | ||
22 | #define AR724X_BASE_FREQ 5000000 | ||
23 | #define AR913X_BASE_FREQ 5000000 | ||
24 | |||
25 | struct clk { | ||
26 | unsigned long rate; | ||
27 | }; | ||
28 | |||
29 | static struct clk ath79_ref_clk; | ||
30 | static struct clk ath79_cpu_clk; | ||
31 | static struct clk ath79_ddr_clk; | ||
32 | static struct clk ath79_ahb_clk; | ||
33 | static struct clk ath79_wdt_clk; | ||
34 | static struct clk ath79_uart_clk; | ||
35 | |||
36 | static void __init ar71xx_clocks_init(void) | ||
37 | { | ||
38 | u32 pll; | ||
39 | u32 freq; | ||
40 | u32 div; | ||
41 | |||
42 | ath79_ref_clk.rate = AR71XX_BASE_FREQ; | ||
43 | |||
44 | pll = ath79_pll_rr(AR71XX_PLL_REG_CPU_CONFIG); | ||
45 | |||
46 | div = ((pll >> AR71XX_PLL_DIV_SHIFT) & AR71XX_PLL_DIV_MASK) + 1; | ||
47 | freq = div * ath79_ref_clk.rate; | ||
48 | |||
49 | div = ((pll >> AR71XX_CPU_DIV_SHIFT) & AR71XX_CPU_DIV_MASK) + 1; | ||
50 | ath79_cpu_clk.rate = freq / div; | ||
51 | |||
52 | div = ((pll >> AR71XX_DDR_DIV_SHIFT) & AR71XX_DDR_DIV_MASK) + 1; | ||
53 | ath79_ddr_clk.rate = freq / div; | ||
54 | |||
55 | div = (((pll >> AR71XX_AHB_DIV_SHIFT) & AR71XX_AHB_DIV_MASK) + 1) * 2; | ||
56 | ath79_ahb_clk.rate = ath79_cpu_clk.rate / div; | ||
57 | |||
58 | ath79_wdt_clk.rate = ath79_ahb_clk.rate; | ||
59 | ath79_uart_clk.rate = ath79_ahb_clk.rate; | ||
60 | } | ||
61 | |||
62 | static void __init ar724x_clocks_init(void) | ||
63 | { | ||
64 | u32 pll; | ||
65 | u32 freq; | ||
66 | u32 div; | ||
67 | |||
68 | ath79_ref_clk.rate = AR724X_BASE_FREQ; | ||
69 | pll = ath79_pll_rr(AR724X_PLL_REG_CPU_CONFIG); | ||
70 | |||
71 | div = ((pll >> AR724X_PLL_DIV_SHIFT) & AR724X_PLL_DIV_MASK); | ||
72 | freq = div * ath79_ref_clk.rate; | ||
73 | |||
74 | div = ((pll >> AR724X_PLL_REF_DIV_SHIFT) & AR724X_PLL_REF_DIV_MASK); | ||
75 | freq *= div; | ||
76 | |||
77 | ath79_cpu_clk.rate = freq; | ||
78 | |||
79 | div = ((pll >> AR724X_DDR_DIV_SHIFT) & AR724X_DDR_DIV_MASK) + 1; | ||
80 | ath79_ddr_clk.rate = freq / div; | ||
81 | |||
82 | div = (((pll >> AR724X_AHB_DIV_SHIFT) & AR724X_AHB_DIV_MASK) + 1) * 2; | ||
83 | ath79_ahb_clk.rate = ath79_cpu_clk.rate / div; | ||
84 | |||
85 | ath79_wdt_clk.rate = ath79_ahb_clk.rate; | ||
86 | ath79_uart_clk.rate = ath79_ahb_clk.rate; | ||
87 | } | ||
88 | |||
89 | static void __init ar913x_clocks_init(void) | ||
90 | { | ||
91 | u32 pll; | ||
92 | u32 freq; | ||
93 | u32 div; | ||
94 | |||
95 | ath79_ref_clk.rate = AR913X_BASE_FREQ; | ||
96 | pll = ath79_pll_rr(AR913X_PLL_REG_CPU_CONFIG); | ||
97 | |||
98 | div = ((pll >> AR913X_PLL_DIV_SHIFT) & AR913X_PLL_DIV_MASK); | ||
99 | freq = div * ath79_ref_clk.rate; | ||
100 | |||
101 | ath79_cpu_clk.rate = freq; | ||
102 | |||
103 | div = ((pll >> AR913X_DDR_DIV_SHIFT) & AR913X_DDR_DIV_MASK) + 1; | ||
104 | ath79_ddr_clk.rate = freq / div; | ||
105 | |||
106 | div = (((pll >> AR913X_AHB_DIV_SHIFT) & AR913X_AHB_DIV_MASK) + 1) * 2; | ||
107 | ath79_ahb_clk.rate = ath79_cpu_clk.rate / div; | ||
108 | |||
109 | ath79_wdt_clk.rate = ath79_ahb_clk.rate; | ||
110 | ath79_uart_clk.rate = ath79_ahb_clk.rate; | ||
111 | } | ||
112 | |||
113 | void __init ath79_clocks_init(void) | ||
114 | { | ||
115 | if (soc_is_ar71xx()) | ||
116 | ar71xx_clocks_init(); | ||
117 | else if (soc_is_ar724x()) | ||
118 | ar724x_clocks_init(); | ||
119 | else if (soc_is_ar913x()) | ||
120 | ar913x_clocks_init(); | ||
121 | else | ||
122 | BUG(); | ||
123 | |||
124 | pr_info("Clocks: CPU:%lu.%03luMHz, DDR:%lu.%03luMHz, AHB:%lu.%03luMHz, " | ||
125 | "Ref:%lu.%03luMHz", | ||
126 | ath79_cpu_clk.rate / 1000000, | ||
127 | (ath79_cpu_clk.rate / 1000) % 1000, | ||
128 | ath79_ddr_clk.rate / 1000000, | ||
129 | (ath79_ddr_clk.rate / 1000) % 1000, | ||
130 | ath79_ahb_clk.rate / 1000000, | ||
131 | (ath79_ahb_clk.rate / 1000) % 1000, | ||
132 | ath79_ref_clk.rate / 1000000, | ||
133 | (ath79_ref_clk.rate / 1000) % 1000); | ||
134 | } | ||
135 | |||
136 | /* | ||
137 | * Linux clock API | ||
138 | */ | ||
139 | struct clk *clk_get(struct device *dev, const char *id) | ||
140 | { | ||
141 | if (!strcmp(id, "ref")) | ||
142 | return &ath79_ref_clk; | ||
143 | |||
144 | if (!strcmp(id, "cpu")) | ||
145 | return &ath79_cpu_clk; | ||
146 | |||
147 | if (!strcmp(id, "ddr")) | ||
148 | return &ath79_ddr_clk; | ||
149 | |||
150 | if (!strcmp(id, "ahb")) | ||
151 | return &ath79_ahb_clk; | ||
152 | |||
153 | if (!strcmp(id, "wdt")) | ||
154 | return &ath79_wdt_clk; | ||
155 | |||
156 | if (!strcmp(id, "uart")) | ||
157 | return &ath79_uart_clk; | ||
158 | |||
159 | return ERR_PTR(-ENOENT); | ||
160 | } | ||
161 | EXPORT_SYMBOL(clk_get); | ||
162 | |||
163 | int clk_enable(struct clk *clk) | ||
164 | { | ||
165 | return 0; | ||
166 | } | ||
167 | EXPORT_SYMBOL(clk_enable); | ||
168 | |||
169 | void clk_disable(struct clk *clk) | ||
170 | { | ||
171 | } | ||
172 | EXPORT_SYMBOL(clk_disable); | ||
173 | |||
174 | unsigned long clk_get_rate(struct clk *clk) | ||
175 | { | ||
176 | return clk->rate; | ||
177 | } | ||
178 | EXPORT_SYMBOL(clk_get_rate); | ||
179 | |||
180 | void clk_put(struct clk *clk) | ||
181 | { | ||
182 | } | ||
183 | EXPORT_SYMBOL(clk_put); | ||
diff --git a/arch/mips/ath79/common.c b/arch/mips/ath79/common.c new file mode 100644 index 000000000000..58f60e722a03 --- /dev/null +++ b/arch/mips/ath79/common.c | |||
@@ -0,0 +1,97 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X common routines | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/module.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <linux/spinlock.h> | ||
16 | |||
17 | #include <asm/mach-ath79/ath79.h> | ||
18 | #include <asm/mach-ath79/ar71xx_regs.h> | ||
19 | #include "common.h" | ||
20 | |||
21 | static DEFINE_SPINLOCK(ath79_device_reset_lock); | ||
22 | |||
23 | u32 ath79_cpu_freq; | ||
24 | EXPORT_SYMBOL_GPL(ath79_cpu_freq); | ||
25 | |||
26 | u32 ath79_ahb_freq; | ||
27 | EXPORT_SYMBOL_GPL(ath79_ahb_freq); | ||
28 | |||
29 | u32 ath79_ddr_freq; | ||
30 | EXPORT_SYMBOL_GPL(ath79_ddr_freq); | ||
31 | |||
32 | enum ath79_soc_type ath79_soc; | ||
33 | |||
34 | void __iomem *ath79_pll_base; | ||
35 | void __iomem *ath79_reset_base; | ||
36 | EXPORT_SYMBOL_GPL(ath79_reset_base); | ||
37 | void __iomem *ath79_ddr_base; | ||
38 | |||
39 | void ath79_ddr_wb_flush(u32 reg) | ||
40 | { | ||
41 | void __iomem *flush_reg = ath79_ddr_base + reg; | ||
42 | |||
43 | /* Flush the DDR write buffer. */ | ||
44 | __raw_writel(0x1, flush_reg); | ||
45 | while (__raw_readl(flush_reg) & 0x1) | ||
46 | ; | ||
47 | |||
48 | /* It must be run twice. */ | ||
49 | __raw_writel(0x1, flush_reg); | ||
50 | while (__raw_readl(flush_reg) & 0x1) | ||
51 | ; | ||
52 | } | ||
53 | EXPORT_SYMBOL_GPL(ath79_ddr_wb_flush); | ||
54 | |||
55 | void ath79_device_reset_set(u32 mask) | ||
56 | { | ||
57 | unsigned long flags; | ||
58 | u32 reg; | ||
59 | u32 t; | ||
60 | |||
61 | if (soc_is_ar71xx()) | ||
62 | reg = AR71XX_RESET_REG_RESET_MODULE; | ||
63 | else if (soc_is_ar724x()) | ||
64 | reg = AR724X_RESET_REG_RESET_MODULE; | ||
65 | else if (soc_is_ar913x()) | ||
66 | reg = AR913X_RESET_REG_RESET_MODULE; | ||
67 | else | ||
68 | BUG(); | ||
69 | |||
70 | spin_lock_irqsave(&ath79_device_reset_lock, flags); | ||
71 | t = ath79_reset_rr(reg); | ||
72 | ath79_reset_wr(reg, t | mask); | ||
73 | spin_unlock_irqrestore(&ath79_device_reset_lock, flags); | ||
74 | } | ||
75 | EXPORT_SYMBOL_GPL(ath79_device_reset_set); | ||
76 | |||
77 | void ath79_device_reset_clear(u32 mask) | ||
78 | { | ||
79 | unsigned long flags; | ||
80 | u32 reg; | ||
81 | u32 t; | ||
82 | |||
83 | if (soc_is_ar71xx()) | ||
84 | reg = AR71XX_RESET_REG_RESET_MODULE; | ||
85 | else if (soc_is_ar724x()) | ||
86 | reg = AR724X_RESET_REG_RESET_MODULE; | ||
87 | else if (soc_is_ar913x()) | ||
88 | reg = AR913X_RESET_REG_RESET_MODULE; | ||
89 | else | ||
90 | BUG(); | ||
91 | |||
92 | spin_lock_irqsave(&ath79_device_reset_lock, flags); | ||
93 | t = ath79_reset_rr(reg); | ||
94 | ath79_reset_wr(reg, t & ~mask); | ||
95 | spin_unlock_irqrestore(&ath79_device_reset_lock, flags); | ||
96 | } | ||
97 | EXPORT_SYMBOL_GPL(ath79_device_reset_clear); | ||
diff --git a/arch/mips/ath79/common.h b/arch/mips/ath79/common.h new file mode 100644 index 000000000000..561906c2345e --- /dev/null +++ b/arch/mips/ath79/common.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X common definitions | ||
3 | * | ||
4 | * Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * Parts of this file are based on Atheros' 2.6.15 BSP | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License version 2 as published | ||
11 | * by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __ATH79_COMMON_H | ||
15 | #define __ATH79_COMMON_H | ||
16 | |||
17 | #include <linux/types.h> | ||
18 | #include <linux/init.h> | ||
19 | |||
20 | #define ATH79_MEM_SIZE_MIN (2 * 1024 * 1024) | ||
21 | #define ATH79_MEM_SIZE_MAX (128 * 1024 * 1024) | ||
22 | |||
23 | void ath79_clocks_init(void); | ||
24 | void ath79_ddr_wb_flush(unsigned int reg); | ||
25 | |||
26 | void ath79_gpio_function_enable(u32 mask); | ||
27 | void ath79_gpio_function_disable(u32 mask); | ||
28 | void ath79_gpio_function_setup(u32 set, u32 clear); | ||
29 | void ath79_gpio_init(void); | ||
30 | |||
31 | #endif /* __ATH79_COMMON_H */ | ||
diff --git a/arch/mips/ath79/dev-ar913x-wmac.c b/arch/mips/ath79/dev-ar913x-wmac.c new file mode 100644 index 000000000000..48f425a5ba28 --- /dev/null +++ b/arch/mips/ath79/dev-ar913x-wmac.c | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * Atheros AR913X SoC built-in WMAC device support | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/init.h> | ||
13 | #include <linux/delay.h> | ||
14 | #include <linux/irq.h> | ||
15 | #include <linux/platform_device.h> | ||
16 | #include <linux/ath9k_platform.h> | ||
17 | |||
18 | #include <asm/mach-ath79/ath79.h> | ||
19 | #include <asm/mach-ath79/ar71xx_regs.h> | ||
20 | #include "dev-ar913x-wmac.h" | ||
21 | |||
22 | static struct ath9k_platform_data ar913x_wmac_data; | ||
23 | |||
24 | static struct resource ar913x_wmac_resources[] = { | ||
25 | { | ||
26 | .start = AR913X_WMAC_BASE, | ||
27 | .end = AR913X_WMAC_BASE + AR913X_WMAC_SIZE - 1, | ||
28 | .flags = IORESOURCE_MEM, | ||
29 | }, { | ||
30 | .start = ATH79_CPU_IRQ_IP2, | ||
31 | .end = ATH79_CPU_IRQ_IP2, | ||
32 | .flags = IORESOURCE_IRQ, | ||
33 | }, | ||
34 | }; | ||
35 | |||
36 | static struct platform_device ar913x_wmac_device = { | ||
37 | .name = "ath9k", | ||
38 | .id = -1, | ||
39 | .resource = ar913x_wmac_resources, | ||
40 | .num_resources = ARRAY_SIZE(ar913x_wmac_resources), | ||
41 | .dev = { | ||
42 | .platform_data = &ar913x_wmac_data, | ||
43 | }, | ||
44 | }; | ||
45 | |||
46 | void __init ath79_register_ar913x_wmac(u8 *cal_data) | ||
47 | { | ||
48 | if (cal_data) | ||
49 | memcpy(ar913x_wmac_data.eeprom_data, cal_data, | ||
50 | sizeof(ar913x_wmac_data.eeprom_data)); | ||
51 | |||
52 | /* reset the WMAC */ | ||
53 | ath79_device_reset_set(AR913X_RESET_AMBA2WMAC); | ||
54 | mdelay(10); | ||
55 | |||
56 | ath79_device_reset_clear(AR913X_RESET_AMBA2WMAC); | ||
57 | mdelay(10); | ||
58 | |||
59 | platform_device_register(&ar913x_wmac_device); | ||
60 | } | ||
diff --git a/arch/mips/ath79/dev-ar913x-wmac.h b/arch/mips/ath79/dev-ar913x-wmac.h new file mode 100644 index 000000000000..579d562bbda8 --- /dev/null +++ b/arch/mips/ath79/dev-ar913x-wmac.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * Atheros AR913X SoC built-in WMAC device support | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef _ATH79_DEV_AR913X_WMAC_H | ||
13 | #define _ATH79_DEV_AR913X_WMAC_H | ||
14 | |||
15 | void ath79_register_ar913x_wmac(u8 *cal_data); | ||
16 | |||
17 | #endif /* _ATH79_DEV_AR913X_WMAC_H */ | ||
diff --git a/arch/mips/ath79/dev-common.c b/arch/mips/ath79/dev-common.c new file mode 100644 index 000000000000..3b82e325bebf --- /dev/null +++ b/arch/mips/ath79/dev-common.c | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X common devices | ||
3 | * | ||
4 | * Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * Parts of this file are based on Atheros' 2.6.15 BSP | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License version 2 as published | ||
11 | * by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/init.h> | ||
16 | #include <linux/platform_device.h> | ||
17 | #include <linux/serial_8250.h> | ||
18 | #include <linux/clk.h> | ||
19 | #include <linux/err.h> | ||
20 | |||
21 | #include <asm/mach-ath79/ath79.h> | ||
22 | #include <asm/mach-ath79/ar71xx_regs.h> | ||
23 | #include "common.h" | ||
24 | #include "dev-common.h" | ||
25 | |||
26 | static struct resource ath79_uart_resources[] = { | ||
27 | { | ||
28 | .start = AR71XX_UART_BASE, | ||
29 | .end = AR71XX_UART_BASE + AR71XX_UART_SIZE - 1, | ||
30 | .flags = IORESOURCE_MEM, | ||
31 | }, | ||
32 | }; | ||
33 | |||
34 | #define AR71XX_UART_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP) | ||
35 | static struct plat_serial8250_port ath79_uart_data[] = { | ||
36 | { | ||
37 | .mapbase = AR71XX_UART_BASE, | ||
38 | .irq = ATH79_MISC_IRQ_UART, | ||
39 | .flags = AR71XX_UART_FLAGS, | ||
40 | .iotype = UPIO_MEM32, | ||
41 | .regshift = 2, | ||
42 | }, { | ||
43 | /* terminating entry */ | ||
44 | } | ||
45 | }; | ||
46 | |||
47 | static struct platform_device ath79_uart_device = { | ||
48 | .name = "serial8250", | ||
49 | .id = PLAT8250_DEV_PLATFORM, | ||
50 | .resource = ath79_uart_resources, | ||
51 | .num_resources = ARRAY_SIZE(ath79_uart_resources), | ||
52 | .dev = { | ||
53 | .platform_data = ath79_uart_data | ||
54 | }, | ||
55 | }; | ||
56 | |||
57 | void __init ath79_register_uart(void) | ||
58 | { | ||
59 | struct clk *clk; | ||
60 | |||
61 | clk = clk_get(NULL, "uart"); | ||
62 | if (IS_ERR(clk)) | ||
63 | panic("unable to get UART clock, err=%ld", PTR_ERR(clk)); | ||
64 | |||
65 | ath79_uart_data[0].uartclk = clk_get_rate(clk); | ||
66 | platform_device_register(&ath79_uart_device); | ||
67 | } | ||
68 | |||
69 | static struct platform_device ath79_wdt_device = { | ||
70 | .name = "ath79-wdt", | ||
71 | .id = -1, | ||
72 | }; | ||
73 | |||
74 | void __init ath79_register_wdt(void) | ||
75 | { | ||
76 | platform_device_register(&ath79_wdt_device); | ||
77 | } | ||
diff --git a/arch/mips/ath79/dev-common.h b/arch/mips/ath79/dev-common.h new file mode 100644 index 000000000000..0f514e1affce --- /dev/null +++ b/arch/mips/ath79/dev-common.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X common devices | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef _ATH79_DEV_COMMON_H | ||
13 | #define _ATH79_DEV_COMMON_H | ||
14 | |||
15 | void ath79_register_uart(void); | ||
16 | void ath79_register_wdt(void); | ||
17 | |||
18 | #endif /* _ATH79_DEV_COMMON_H */ | ||
diff --git a/arch/mips/ath79/dev-gpio-buttons.c b/arch/mips/ath79/dev-gpio-buttons.c new file mode 100644 index 000000000000..4b0168a11c01 --- /dev/null +++ b/arch/mips/ath79/dev-gpio-buttons.c | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X GPIO button support | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include "linux/init.h" | ||
13 | #include "linux/slab.h" | ||
14 | #include <linux/platform_device.h> | ||
15 | |||
16 | #include "dev-gpio-buttons.h" | ||
17 | |||
18 | void __init ath79_register_gpio_keys_polled(int id, | ||
19 | unsigned poll_interval, | ||
20 | unsigned nbuttons, | ||
21 | struct gpio_keys_button *buttons) | ||
22 | { | ||
23 | struct platform_device *pdev; | ||
24 | struct gpio_keys_platform_data pdata; | ||
25 | struct gpio_keys_button *p; | ||
26 | int err; | ||
27 | |||
28 | p = kmalloc(nbuttons * sizeof(*p), GFP_KERNEL); | ||
29 | if (!p) | ||
30 | return; | ||
31 | |||
32 | memcpy(p, buttons, nbuttons * sizeof(*p)); | ||
33 | |||
34 | pdev = platform_device_alloc("gpio-keys-polled", id); | ||
35 | if (!pdev) | ||
36 | goto err_free_buttons; | ||
37 | |||
38 | memset(&pdata, 0, sizeof(pdata)); | ||
39 | pdata.poll_interval = poll_interval; | ||
40 | pdata.nbuttons = nbuttons; | ||
41 | pdata.buttons = p; | ||
42 | |||
43 | err = platform_device_add_data(pdev, &pdata, sizeof(pdata)); | ||
44 | if (err) | ||
45 | goto err_put_pdev; | ||
46 | |||
47 | err = platform_device_add(pdev); | ||
48 | if (err) | ||
49 | goto err_put_pdev; | ||
50 | |||
51 | return; | ||
52 | |||
53 | err_put_pdev: | ||
54 | platform_device_put(pdev); | ||
55 | |||
56 | err_free_buttons: | ||
57 | kfree(p); | ||
58 | } | ||
diff --git a/arch/mips/ath79/dev-gpio-buttons.h b/arch/mips/ath79/dev-gpio-buttons.h new file mode 100644 index 000000000000..481847ac1cba --- /dev/null +++ b/arch/mips/ath79/dev-gpio-buttons.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X GPIO button support | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef _ATH79_DEV_GPIO_BUTTONS_H | ||
13 | #define _ATH79_DEV_GPIO_BUTTONS_H | ||
14 | |||
15 | #include <linux/input.h> | ||
16 | #include <linux/gpio_keys.h> | ||
17 | |||
18 | void ath79_register_gpio_keys_polled(int id, | ||
19 | unsigned poll_interval, | ||
20 | unsigned nbuttons, | ||
21 | struct gpio_keys_button *buttons); | ||
22 | |||
23 | #endif /* _ATH79_DEV_GPIO_BUTTONS_H */ | ||
diff --git a/arch/mips/ath79/dev-leds-gpio.c b/arch/mips/ath79/dev-leds-gpio.c new file mode 100644 index 000000000000..cdade68dcd17 --- /dev/null +++ b/arch/mips/ath79/dev-leds-gpio.c | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X common GPIO LEDs support | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/init.h> | ||
13 | #include <linux/slab.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | |||
16 | #include "dev-leds-gpio.h" | ||
17 | |||
18 | void __init ath79_register_leds_gpio(int id, | ||
19 | unsigned num_leds, | ||
20 | struct gpio_led *leds) | ||
21 | { | ||
22 | struct platform_device *pdev; | ||
23 | struct gpio_led_platform_data pdata; | ||
24 | struct gpio_led *p; | ||
25 | int err; | ||
26 | |||
27 | p = kmalloc(num_leds * sizeof(*p), GFP_KERNEL); | ||
28 | if (!p) | ||
29 | return; | ||
30 | |||
31 | memcpy(p, leds, num_leds * sizeof(*p)); | ||
32 | |||
33 | pdev = platform_device_alloc("leds-gpio", id); | ||
34 | if (!pdev) | ||
35 | goto err_free_leds; | ||
36 | |||
37 | memset(&pdata, 0, sizeof(pdata)); | ||
38 | pdata.num_leds = num_leds; | ||
39 | pdata.leds = p; | ||
40 | |||
41 | err = platform_device_add_data(pdev, &pdata, sizeof(pdata)); | ||
42 | if (err) | ||
43 | goto err_put_pdev; | ||
44 | |||
45 | err = platform_device_add(pdev); | ||
46 | if (err) | ||
47 | goto err_put_pdev; | ||
48 | |||
49 | return; | ||
50 | |||
51 | err_put_pdev: | ||
52 | platform_device_put(pdev); | ||
53 | |||
54 | err_free_leds: | ||
55 | kfree(p); | ||
56 | } | ||
diff --git a/arch/mips/ath79/dev-leds-gpio.h b/arch/mips/ath79/dev-leds-gpio.h new file mode 100644 index 000000000000..6e5d8851ebcf --- /dev/null +++ b/arch/mips/ath79/dev-leds-gpio.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X common GPIO LEDs support | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef _ATH79_DEV_LEDS_GPIO_H | ||
13 | #define _ATH79_DEV_LEDS_GPIO_H | ||
14 | |||
15 | #include <linux/leds.h> | ||
16 | |||
17 | void ath79_register_leds_gpio(int id, | ||
18 | unsigned num_leds, | ||
19 | struct gpio_led *leds); | ||
20 | |||
21 | #endif /* _ATH79_DEV_LEDS_GPIO_H */ | ||
diff --git a/arch/mips/ath79/dev-spi.c b/arch/mips/ath79/dev-spi.c new file mode 100644 index 000000000000..aa30163efbfd --- /dev/null +++ b/arch/mips/ath79/dev-spi.c | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X SPI controller device | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/platform_device.h> | ||
13 | #include <asm/mach-ath79/ar71xx_regs.h> | ||
14 | #include "dev-spi.h" | ||
15 | |||
16 | static struct resource ath79_spi_resources[] = { | ||
17 | { | ||
18 | .start = AR71XX_SPI_BASE, | ||
19 | .end = AR71XX_SPI_BASE + AR71XX_SPI_SIZE - 1, | ||
20 | .flags = IORESOURCE_MEM, | ||
21 | }, | ||
22 | }; | ||
23 | |||
24 | static struct platform_device ath79_spi_device = { | ||
25 | .name = "ath79-spi", | ||
26 | .id = -1, | ||
27 | .resource = ath79_spi_resources, | ||
28 | .num_resources = ARRAY_SIZE(ath79_spi_resources), | ||
29 | }; | ||
30 | |||
31 | void __init ath79_register_spi(struct ath79_spi_platform_data *pdata, | ||
32 | struct spi_board_info const *info, | ||
33 | unsigned n) | ||
34 | { | ||
35 | spi_register_board_info(info, n); | ||
36 | ath79_spi_device.dev.platform_data = pdata; | ||
37 | platform_device_register(&ath79_spi_device); | ||
38 | } | ||
diff --git a/arch/mips/ath79/dev-spi.h b/arch/mips/ath79/dev-spi.h new file mode 100644 index 000000000000..d732565ca736 --- /dev/null +++ b/arch/mips/ath79/dev-spi.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X SPI controller device | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef _ATH79_DEV_SPI_H | ||
13 | #define _ATH79_DEV_SPI_H | ||
14 | |||
15 | #include <linux/spi/spi.h> | ||
16 | #include <asm/mach-ath79/ath79_spi_platform.h> | ||
17 | |||
18 | void ath79_register_spi(struct ath79_spi_platform_data *pdata, | ||
19 | struct spi_board_info const *info, | ||
20 | unsigned n); | ||
21 | |||
22 | #endif /* _ATH79_DEV_SPI_H */ | ||
diff --git a/arch/mips/ath79/early_printk.c b/arch/mips/ath79/early_printk.c new file mode 100644 index 000000000000..7499b0e9df26 --- /dev/null +++ b/arch/mips/ath79/early_printk.c | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X SoC early printk support | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/io.h> | ||
13 | #include <linux/serial_reg.h> | ||
14 | #include <asm/addrspace.h> | ||
15 | |||
16 | #include <asm/mach-ath79/ar71xx_regs.h> | ||
17 | |||
18 | static inline void prom_wait_thre(void __iomem *base) | ||
19 | { | ||
20 | u32 lsr; | ||
21 | |||
22 | do { | ||
23 | lsr = __raw_readl(base + UART_LSR * 4); | ||
24 | if (lsr & UART_LSR_THRE) | ||
25 | break; | ||
26 | } while (1); | ||
27 | } | ||
28 | |||
29 | void prom_putchar(unsigned char ch) | ||
30 | { | ||
31 | void __iomem *base = (void __iomem *)(KSEG1ADDR(AR71XX_UART_BASE)); | ||
32 | |||
33 | prom_wait_thre(base); | ||
34 | __raw_writel(ch, base + UART_TX * 4); | ||
35 | prom_wait_thre(base); | ||
36 | } | ||
diff --git a/arch/mips/ath79/gpio.c b/arch/mips/ath79/gpio.c new file mode 100644 index 000000000000..a0c426b82123 --- /dev/null +++ b/arch/mips/ath79/gpio.c | |||
@@ -0,0 +1,197 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X GPIO API support | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/module.h> | ||
15 | #include <linux/types.h> | ||
16 | #include <linux/spinlock.h> | ||
17 | #include <linux/io.h> | ||
18 | #include <linux/ioport.h> | ||
19 | #include <linux/gpio.h> | ||
20 | |||
21 | #include <asm/mach-ath79/ar71xx_regs.h> | ||
22 | #include <asm/mach-ath79/ath79.h> | ||
23 | #include "common.h" | ||
24 | |||
25 | static void __iomem *ath79_gpio_base; | ||
26 | static unsigned long ath79_gpio_count; | ||
27 | static DEFINE_SPINLOCK(ath79_gpio_lock); | ||
28 | |||
29 | static void __ath79_gpio_set_value(unsigned gpio, int value) | ||
30 | { | ||
31 | void __iomem *base = ath79_gpio_base; | ||
32 | |||
33 | if (value) | ||
34 | __raw_writel(1 << gpio, base + AR71XX_GPIO_REG_SET); | ||
35 | else | ||
36 | __raw_writel(1 << gpio, base + AR71XX_GPIO_REG_CLEAR); | ||
37 | } | ||
38 | |||
39 | static int __ath79_gpio_get_value(unsigned gpio) | ||
40 | { | ||
41 | return (__raw_readl(ath79_gpio_base + AR71XX_GPIO_REG_IN) >> gpio) & 1; | ||
42 | } | ||
43 | |||
44 | static int ath79_gpio_get_value(struct gpio_chip *chip, unsigned offset) | ||
45 | { | ||
46 | return __ath79_gpio_get_value(offset); | ||
47 | } | ||
48 | |||
49 | static void ath79_gpio_set_value(struct gpio_chip *chip, | ||
50 | unsigned offset, int value) | ||
51 | { | ||
52 | __ath79_gpio_set_value(offset, value); | ||
53 | } | ||
54 | |||
55 | static int ath79_gpio_direction_input(struct gpio_chip *chip, | ||
56 | unsigned offset) | ||
57 | { | ||
58 | void __iomem *base = ath79_gpio_base; | ||
59 | unsigned long flags; | ||
60 | |||
61 | spin_lock_irqsave(&ath79_gpio_lock, flags); | ||
62 | |||
63 | __raw_writel(__raw_readl(base + AR71XX_GPIO_REG_OE) & ~(1 << offset), | ||
64 | base + AR71XX_GPIO_REG_OE); | ||
65 | |||
66 | spin_unlock_irqrestore(&ath79_gpio_lock, flags); | ||
67 | |||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | static int ath79_gpio_direction_output(struct gpio_chip *chip, | ||
72 | unsigned offset, int value) | ||
73 | { | ||
74 | void __iomem *base = ath79_gpio_base; | ||
75 | unsigned long flags; | ||
76 | |||
77 | spin_lock_irqsave(&ath79_gpio_lock, flags); | ||
78 | |||
79 | if (value) | ||
80 | __raw_writel(1 << offset, base + AR71XX_GPIO_REG_SET); | ||
81 | else | ||
82 | __raw_writel(1 << offset, base + AR71XX_GPIO_REG_CLEAR); | ||
83 | |||
84 | __raw_writel(__raw_readl(base + AR71XX_GPIO_REG_OE) | (1 << offset), | ||
85 | base + AR71XX_GPIO_REG_OE); | ||
86 | |||
87 | spin_unlock_irqrestore(&ath79_gpio_lock, flags); | ||
88 | |||
89 | return 0; | ||
90 | } | ||
91 | |||
92 | static struct gpio_chip ath79_gpio_chip = { | ||
93 | .label = "ath79", | ||
94 | .get = ath79_gpio_get_value, | ||
95 | .set = ath79_gpio_set_value, | ||
96 | .direction_input = ath79_gpio_direction_input, | ||
97 | .direction_output = ath79_gpio_direction_output, | ||
98 | .base = 0, | ||
99 | }; | ||
100 | |||
101 | void ath79_gpio_function_enable(u32 mask) | ||
102 | { | ||
103 | void __iomem *base = ath79_gpio_base; | ||
104 | unsigned long flags; | ||
105 | |||
106 | spin_lock_irqsave(&ath79_gpio_lock, flags); | ||
107 | |||
108 | __raw_writel(__raw_readl(base + AR71XX_GPIO_REG_FUNC) | mask, | ||
109 | base + AR71XX_GPIO_REG_FUNC); | ||
110 | /* flush write */ | ||
111 | __raw_readl(base + AR71XX_GPIO_REG_FUNC); | ||
112 | |||
113 | spin_unlock_irqrestore(&ath79_gpio_lock, flags); | ||
114 | } | ||
115 | |||
116 | void ath79_gpio_function_disable(u32 mask) | ||
117 | { | ||
118 | void __iomem *base = ath79_gpio_base; | ||
119 | unsigned long flags; | ||
120 | |||
121 | spin_lock_irqsave(&ath79_gpio_lock, flags); | ||
122 | |||
123 | __raw_writel(__raw_readl(base + AR71XX_GPIO_REG_FUNC) & ~mask, | ||
124 | base + AR71XX_GPIO_REG_FUNC); | ||
125 | /* flush write */ | ||
126 | __raw_readl(base + AR71XX_GPIO_REG_FUNC); | ||
127 | |||
128 | spin_unlock_irqrestore(&ath79_gpio_lock, flags); | ||
129 | } | ||
130 | |||
131 | void ath79_gpio_function_setup(u32 set, u32 clear) | ||
132 | { | ||
133 | void __iomem *base = ath79_gpio_base; | ||
134 | unsigned long flags; | ||
135 | |||
136 | spin_lock_irqsave(&ath79_gpio_lock, flags); | ||
137 | |||
138 | __raw_writel((__raw_readl(base + AR71XX_GPIO_REG_FUNC) & ~clear) | set, | ||
139 | base + AR71XX_GPIO_REG_FUNC); | ||
140 | /* flush write */ | ||
141 | __raw_readl(base + AR71XX_GPIO_REG_FUNC); | ||
142 | |||
143 | spin_unlock_irqrestore(&ath79_gpio_lock, flags); | ||
144 | } | ||
145 | |||
146 | void __init ath79_gpio_init(void) | ||
147 | { | ||
148 | int err; | ||
149 | |||
150 | if (soc_is_ar71xx()) | ||
151 | ath79_gpio_count = AR71XX_GPIO_COUNT; | ||
152 | else if (soc_is_ar724x()) | ||
153 | ath79_gpio_count = AR724X_GPIO_COUNT; | ||
154 | else if (soc_is_ar913x()) | ||
155 | ath79_gpio_count = AR913X_GPIO_COUNT; | ||
156 | else | ||
157 | BUG(); | ||
158 | |||
159 | ath79_gpio_base = ioremap_nocache(AR71XX_GPIO_BASE, AR71XX_GPIO_SIZE); | ||
160 | ath79_gpio_chip.ngpio = ath79_gpio_count; | ||
161 | |||
162 | err = gpiochip_add(&ath79_gpio_chip); | ||
163 | if (err) | ||
164 | panic("cannot add AR71xx GPIO chip, error=%d", err); | ||
165 | } | ||
166 | |||
167 | int gpio_get_value(unsigned gpio) | ||
168 | { | ||
169 | if (gpio < ath79_gpio_count) | ||
170 | return __ath79_gpio_get_value(gpio); | ||
171 | |||
172 | return __gpio_get_value(gpio); | ||
173 | } | ||
174 | EXPORT_SYMBOL(gpio_get_value); | ||
175 | |||
176 | void gpio_set_value(unsigned gpio, int value) | ||
177 | { | ||
178 | if (gpio < ath79_gpio_count) | ||
179 | __ath79_gpio_set_value(gpio, value); | ||
180 | else | ||
181 | __gpio_set_value(gpio, value); | ||
182 | } | ||
183 | EXPORT_SYMBOL(gpio_set_value); | ||
184 | |||
185 | int gpio_to_irq(unsigned gpio) | ||
186 | { | ||
187 | /* FIXME */ | ||
188 | return -EINVAL; | ||
189 | } | ||
190 | EXPORT_SYMBOL(gpio_to_irq); | ||
191 | |||
192 | int irq_to_gpio(unsigned irq) | ||
193 | { | ||
194 | /* FIXME */ | ||
195 | return -EINVAL; | ||
196 | } | ||
197 | EXPORT_SYMBOL(irq_to_gpio); | ||
diff --git a/arch/mips/ath79/irq.c b/arch/mips/ath79/irq.c new file mode 100644 index 000000000000..1bf7f719ba53 --- /dev/null +++ b/arch/mips/ath79/irq.c | |||
@@ -0,0 +1,187 @@ | |||
1 | /* | ||
2 | * Atheros AR71xx/AR724x/AR913x specific interrupt handling | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * Parts of this file are based on Atheros' 2.6.15 BSP | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License version 2 as published | ||
11 | * by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/init.h> | ||
16 | #include <linux/interrupt.h> | ||
17 | #include <linux/irq.h> | ||
18 | |||
19 | #include <asm/irq_cpu.h> | ||
20 | #include <asm/mipsregs.h> | ||
21 | |||
22 | #include <asm/mach-ath79/ath79.h> | ||
23 | #include <asm/mach-ath79/ar71xx_regs.h> | ||
24 | #include "common.h" | ||
25 | |||
26 | static unsigned int ath79_ip2_flush_reg; | ||
27 | static unsigned int ath79_ip3_flush_reg; | ||
28 | |||
29 | static void ath79_misc_irq_handler(unsigned int irq, struct irq_desc *desc) | ||
30 | { | ||
31 | void __iomem *base = ath79_reset_base; | ||
32 | u32 pending; | ||
33 | |||
34 | pending = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_STATUS) & | ||
35 | __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); | ||
36 | |||
37 | if (pending & MISC_INT_UART) | ||
38 | generic_handle_irq(ATH79_MISC_IRQ_UART); | ||
39 | |||
40 | else if (pending & MISC_INT_DMA) | ||
41 | generic_handle_irq(ATH79_MISC_IRQ_DMA); | ||
42 | |||
43 | else if (pending & MISC_INT_PERFC) | ||
44 | generic_handle_irq(ATH79_MISC_IRQ_PERFC); | ||
45 | |||
46 | else if (pending & MISC_INT_TIMER) | ||
47 | generic_handle_irq(ATH79_MISC_IRQ_TIMER); | ||
48 | |||
49 | else if (pending & MISC_INT_OHCI) | ||
50 | generic_handle_irq(ATH79_MISC_IRQ_OHCI); | ||
51 | |||
52 | else if (pending & MISC_INT_ERROR) | ||
53 | generic_handle_irq(ATH79_MISC_IRQ_ERROR); | ||
54 | |||
55 | else if (pending & MISC_INT_GPIO) | ||
56 | generic_handle_irq(ATH79_MISC_IRQ_GPIO); | ||
57 | |||
58 | else if (pending & MISC_INT_WDOG) | ||
59 | generic_handle_irq(ATH79_MISC_IRQ_WDOG); | ||
60 | |||
61 | else | ||
62 | spurious_interrupt(); | ||
63 | } | ||
64 | |||
65 | static void ar71xx_misc_irq_unmask(unsigned int irq) | ||
66 | { | ||
67 | void __iomem *base = ath79_reset_base; | ||
68 | u32 t; | ||
69 | |||
70 | irq -= ATH79_MISC_IRQ_BASE; | ||
71 | |||
72 | t = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); | ||
73 | __raw_writel(t | (1 << irq), base + AR71XX_RESET_REG_MISC_INT_ENABLE); | ||
74 | |||
75 | /* flush write */ | ||
76 | __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); | ||
77 | } | ||
78 | |||
79 | static void ar71xx_misc_irq_mask(unsigned int irq) | ||
80 | { | ||
81 | void __iomem *base = ath79_reset_base; | ||
82 | u32 t; | ||
83 | |||
84 | irq -= ATH79_MISC_IRQ_BASE; | ||
85 | |||
86 | t = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); | ||
87 | __raw_writel(t & ~(1 << irq), base + AR71XX_RESET_REG_MISC_INT_ENABLE); | ||
88 | |||
89 | /* flush write */ | ||
90 | __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); | ||
91 | } | ||
92 | |||
93 | static void ar724x_misc_irq_ack(unsigned int irq) | ||
94 | { | ||
95 | void __iomem *base = ath79_reset_base; | ||
96 | u32 t; | ||
97 | |||
98 | irq -= ATH79_MISC_IRQ_BASE; | ||
99 | |||
100 | t = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_STATUS); | ||
101 | __raw_writel(t & ~(1 << irq), base + AR71XX_RESET_REG_MISC_INT_STATUS); | ||
102 | |||
103 | /* flush write */ | ||
104 | __raw_readl(base + AR71XX_RESET_REG_MISC_INT_STATUS); | ||
105 | } | ||
106 | |||
107 | static struct irq_chip ath79_misc_irq_chip = { | ||
108 | .name = "MISC", | ||
109 | .unmask = ar71xx_misc_irq_unmask, | ||
110 | .mask = ar71xx_misc_irq_mask, | ||
111 | }; | ||
112 | |||
113 | static void __init ath79_misc_irq_init(void) | ||
114 | { | ||
115 | void __iomem *base = ath79_reset_base; | ||
116 | int i; | ||
117 | |||
118 | __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_ENABLE); | ||
119 | __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS); | ||
120 | |||
121 | if (soc_is_ar71xx() || soc_is_ar913x()) | ||
122 | ath79_misc_irq_chip.mask_ack = ar71xx_misc_irq_mask; | ||
123 | else if (soc_is_ar724x()) | ||
124 | ath79_misc_irq_chip.ack = ar724x_misc_irq_ack; | ||
125 | else | ||
126 | BUG(); | ||
127 | |||
128 | for (i = ATH79_MISC_IRQ_BASE; | ||
129 | i < ATH79_MISC_IRQ_BASE + ATH79_MISC_IRQ_COUNT; i++) { | ||
130 | irq_desc[i].status = IRQ_DISABLED; | ||
131 | set_irq_chip_and_handler(i, &ath79_misc_irq_chip, | ||
132 | handle_level_irq); | ||
133 | } | ||
134 | |||
135 | set_irq_chained_handler(ATH79_CPU_IRQ_MISC, ath79_misc_irq_handler); | ||
136 | } | ||
137 | |||
138 | asmlinkage void plat_irq_dispatch(void) | ||
139 | { | ||
140 | unsigned long pending; | ||
141 | |||
142 | pending = read_c0_status() & read_c0_cause() & ST0_IM; | ||
143 | |||
144 | if (pending & STATUSF_IP7) | ||
145 | do_IRQ(ATH79_CPU_IRQ_TIMER); | ||
146 | |||
147 | else if (pending & STATUSF_IP2) { | ||
148 | ath79_ddr_wb_flush(ath79_ip2_flush_reg); | ||
149 | do_IRQ(ATH79_CPU_IRQ_IP2); | ||
150 | } | ||
151 | |||
152 | else if (pending & STATUSF_IP4) | ||
153 | do_IRQ(ATH79_CPU_IRQ_GE0); | ||
154 | |||
155 | else if (pending & STATUSF_IP5) | ||
156 | do_IRQ(ATH79_CPU_IRQ_GE1); | ||
157 | |||
158 | else if (pending & STATUSF_IP3) { | ||
159 | ath79_ddr_wb_flush(ath79_ip3_flush_reg); | ||
160 | do_IRQ(ATH79_CPU_IRQ_USB); | ||
161 | } | ||
162 | |||
163 | else if (pending & STATUSF_IP6) | ||
164 | do_IRQ(ATH79_CPU_IRQ_MISC); | ||
165 | |||
166 | else | ||
167 | spurious_interrupt(); | ||
168 | } | ||
169 | |||
170 | void __init arch_init_irq(void) | ||
171 | { | ||
172 | if (soc_is_ar71xx()) { | ||
173 | ath79_ip2_flush_reg = AR71XX_DDR_REG_FLUSH_PCI; | ||
174 | ath79_ip3_flush_reg = AR71XX_DDR_REG_FLUSH_USB; | ||
175 | } else if (soc_is_ar724x()) { | ||
176 | ath79_ip2_flush_reg = AR724X_DDR_REG_FLUSH_PCIE; | ||
177 | ath79_ip3_flush_reg = AR724X_DDR_REG_FLUSH_USB; | ||
178 | } else if (soc_is_ar913x()) { | ||
179 | ath79_ip2_flush_reg = AR913X_DDR_REG_FLUSH_WMAC; | ||
180 | ath79_ip3_flush_reg = AR913X_DDR_REG_FLUSH_USB; | ||
181 | } else | ||
182 | BUG(); | ||
183 | |||
184 | cp0_perfcount_irq = ATH79_MISC_IRQ_PERFC; | ||
185 | mips_cpu_irq_init(); | ||
186 | ath79_misc_irq_init(); | ||
187 | } | ||
diff --git a/arch/mips/ath79/mach-ap81.c b/arch/mips/ath79/mach-ap81.c new file mode 100644 index 000000000000..eee4c121deb4 --- /dev/null +++ b/arch/mips/ath79/mach-ap81.c | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * Atheros AP81 board support | ||
3 | * | ||
4 | * Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2009 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include "machtypes.h" | ||
13 | #include "dev-ar913x-wmac.h" | ||
14 | #include "dev-gpio-buttons.h" | ||
15 | #include "dev-leds-gpio.h" | ||
16 | #include "dev-spi.h" | ||
17 | |||
18 | #define AP81_GPIO_LED_STATUS 1 | ||
19 | #define AP81_GPIO_LED_AOSS 3 | ||
20 | #define AP81_GPIO_LED_WLAN 6 | ||
21 | #define AP81_GPIO_LED_POWER 14 | ||
22 | |||
23 | #define AP81_GPIO_BTN_SW4 12 | ||
24 | #define AP81_GPIO_BTN_SW1 21 | ||
25 | |||
26 | #define AP81_KEYS_POLL_INTERVAL 20 /* msecs */ | ||
27 | #define AP81_KEYS_DEBOUNCE_INTERVAL (3 * AP81_KEYS_POLL_INTERVAL) | ||
28 | |||
29 | #define AP81_CAL_DATA_ADDR 0x1fff1000 | ||
30 | |||
31 | static struct gpio_led ap81_leds_gpio[] __initdata = { | ||
32 | { | ||
33 | .name = "ap81:green:status", | ||
34 | .gpio = AP81_GPIO_LED_STATUS, | ||
35 | .active_low = 1, | ||
36 | }, { | ||
37 | .name = "ap81:amber:aoss", | ||
38 | .gpio = AP81_GPIO_LED_AOSS, | ||
39 | .active_low = 1, | ||
40 | }, { | ||
41 | .name = "ap81:green:wlan", | ||
42 | .gpio = AP81_GPIO_LED_WLAN, | ||
43 | .active_low = 1, | ||
44 | }, { | ||
45 | .name = "ap81:green:power", | ||
46 | .gpio = AP81_GPIO_LED_POWER, | ||
47 | .active_low = 1, | ||
48 | } | ||
49 | }; | ||
50 | |||
51 | static struct gpio_keys_button ap81_gpio_keys[] __initdata = { | ||
52 | { | ||
53 | .desc = "sw1", | ||
54 | .type = EV_KEY, | ||
55 | .code = BTN_0, | ||
56 | .debounce_interval = AP81_KEYS_DEBOUNCE_INTERVAL, | ||
57 | .gpio = AP81_GPIO_BTN_SW1, | ||
58 | .active_low = 1, | ||
59 | } , { | ||
60 | .desc = "sw4", | ||
61 | .type = EV_KEY, | ||
62 | .code = BTN_1, | ||
63 | .debounce_interval = AP81_KEYS_DEBOUNCE_INTERVAL, | ||
64 | .gpio = AP81_GPIO_BTN_SW4, | ||
65 | .active_low = 1, | ||
66 | } | ||
67 | }; | ||
68 | |||
69 | static struct spi_board_info ap81_spi_info[] = { | ||
70 | { | ||
71 | .bus_num = 0, | ||
72 | .chip_select = 0, | ||
73 | .max_speed_hz = 25000000, | ||
74 | .modalias = "m25p64", | ||
75 | } | ||
76 | }; | ||
77 | |||
78 | static struct ath79_spi_platform_data ap81_spi_data = { | ||
79 | .bus_num = 0, | ||
80 | .num_chipselect = 1, | ||
81 | }; | ||
82 | |||
83 | static void __init ap81_setup(void) | ||
84 | { | ||
85 | u8 *cal_data = (u8 *) KSEG1ADDR(AP81_CAL_DATA_ADDR); | ||
86 | |||
87 | ath79_register_leds_gpio(-1, ARRAY_SIZE(ap81_leds_gpio), | ||
88 | ap81_leds_gpio); | ||
89 | ath79_register_gpio_keys_polled(-1, AP81_KEYS_POLL_INTERVAL, | ||
90 | ARRAY_SIZE(ap81_gpio_keys), | ||
91 | ap81_gpio_keys); | ||
92 | ath79_register_spi(&ap81_spi_data, ap81_spi_info, | ||
93 | ARRAY_SIZE(ap81_spi_info)); | ||
94 | ath79_register_ar913x_wmac(cal_data); | ||
95 | } | ||
96 | |||
97 | MIPS_MACHINE(ATH79_MACH_AP81, "AP81", "Atheros AP81 reference board", | ||
98 | ap81_setup); | ||
diff --git a/arch/mips/ath79/mach-pb44.c b/arch/mips/ath79/mach-pb44.c new file mode 100644 index 000000000000..ec7b7a135d53 --- /dev/null +++ b/arch/mips/ath79/mach-pb44.c | |||
@@ -0,0 +1,118 @@ | |||
1 | /* | ||
2 | * Atheros PB44 reference board support | ||
3 | * | ||
4 | * Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org> | ||
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 version 2 as published | ||
8 | * by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #include <linux/init.h> | ||
12 | #include <linux/platform_device.h> | ||
13 | #include <linux/i2c.h> | ||
14 | #include <linux/i2c-gpio.h> | ||
15 | #include <linux/i2c/pcf857x.h> | ||
16 | |||
17 | #include "machtypes.h" | ||
18 | #include "dev-gpio-buttons.h" | ||
19 | #include "dev-leds-gpio.h" | ||
20 | #include "dev-spi.h" | ||
21 | |||
22 | #define PB44_GPIO_I2C_SCL 0 | ||
23 | #define PB44_GPIO_I2C_SDA 1 | ||
24 | |||
25 | #define PB44_GPIO_EXP_BASE 16 | ||
26 | #define PB44_GPIO_SW_RESET (PB44_GPIO_EXP_BASE + 6) | ||
27 | #define PB44_GPIO_SW_JUMP (PB44_GPIO_EXP_BASE + 8) | ||
28 | #define PB44_GPIO_LED_JUMP1 (PB44_GPIO_EXP_BASE + 9) | ||
29 | #define PB44_GPIO_LED_JUMP2 (PB44_GPIO_EXP_BASE + 10) | ||
30 | |||
31 | #define PB44_KEYS_POLL_INTERVAL 20 /* msecs */ | ||
32 | #define PB44_KEYS_DEBOUNCE_INTERVAL (3 * PB44_KEYS_POLL_INTERVAL) | ||
33 | |||
34 | static struct i2c_gpio_platform_data pb44_i2c_gpio_data = { | ||
35 | .sda_pin = PB44_GPIO_I2C_SDA, | ||
36 | .scl_pin = PB44_GPIO_I2C_SCL, | ||
37 | }; | ||
38 | |||
39 | static struct platform_device pb44_i2c_gpio_device = { | ||
40 | .name = "i2c-gpio", | ||
41 | .id = 0, | ||
42 | .dev = { | ||
43 | .platform_data = &pb44_i2c_gpio_data, | ||
44 | } | ||
45 | }; | ||
46 | |||
47 | static struct pcf857x_platform_data pb44_pcf857x_data = { | ||
48 | .gpio_base = PB44_GPIO_EXP_BASE, | ||
49 | }; | ||
50 | |||
51 | static struct i2c_board_info pb44_i2c_board_info[] __initdata = { | ||
52 | { | ||
53 | I2C_BOARD_INFO("pcf8575", 0x20), | ||
54 | .platform_data = &pb44_pcf857x_data, | ||
55 | }, | ||
56 | }; | ||
57 | |||
58 | static struct gpio_led pb44_leds_gpio[] __initdata = { | ||
59 | { | ||
60 | .name = "pb44:amber:jump1", | ||
61 | .gpio = PB44_GPIO_LED_JUMP1, | ||
62 | .active_low = 1, | ||
63 | }, { | ||
64 | .name = "pb44:green:jump2", | ||
65 | .gpio = PB44_GPIO_LED_JUMP2, | ||
66 | .active_low = 1, | ||
67 | }, | ||
68 | }; | ||
69 | |||
70 | static struct gpio_keys_button pb44_gpio_keys[] __initdata = { | ||
71 | { | ||
72 | .desc = "soft_reset", | ||
73 | .type = EV_KEY, | ||
74 | .code = KEY_RESTART, | ||
75 | .debounce_interval = PB44_KEYS_DEBOUNCE_INTERVAL, | ||
76 | .gpio = PB44_GPIO_SW_RESET, | ||
77 | .active_low = 1, | ||
78 | } , { | ||
79 | .desc = "jumpstart", | ||
80 | .type = EV_KEY, | ||
81 | .code = KEY_WPS_BUTTON, | ||
82 | .debounce_interval = PB44_KEYS_DEBOUNCE_INTERVAL, | ||
83 | .gpio = PB44_GPIO_SW_JUMP, | ||
84 | .active_low = 1, | ||
85 | } | ||
86 | }; | ||
87 | |||
88 | static struct spi_board_info pb44_spi_info[] = { | ||
89 | { | ||
90 | .bus_num = 0, | ||
91 | .chip_select = 0, | ||
92 | .max_speed_hz = 25000000, | ||
93 | .modalias = "m25p64", | ||
94 | }, | ||
95 | }; | ||
96 | |||
97 | static struct ath79_spi_platform_data pb44_spi_data = { | ||
98 | .bus_num = 0, | ||
99 | .num_chipselect = 1, | ||
100 | }; | ||
101 | |||
102 | static void __init pb44_init(void) | ||
103 | { | ||
104 | i2c_register_board_info(0, pb44_i2c_board_info, | ||
105 | ARRAY_SIZE(pb44_i2c_board_info)); | ||
106 | platform_device_register(&pb44_i2c_gpio_device); | ||
107 | |||
108 | ath79_register_leds_gpio(-1, ARRAY_SIZE(pb44_leds_gpio), | ||
109 | pb44_leds_gpio); | ||
110 | ath79_register_gpio_keys_polled(-1, PB44_KEYS_POLL_INTERVAL, | ||
111 | ARRAY_SIZE(pb44_gpio_keys), | ||
112 | pb44_gpio_keys); | ||
113 | ath79_register_spi(&pb44_spi_data, pb44_spi_info, | ||
114 | ARRAY_SIZE(pb44_spi_info)); | ||
115 | } | ||
116 | |||
117 | MIPS_MACHINE(ATH79_MACH_PB44, "PB44", "Atheros PB44 reference board", | ||
118 | pb44_init); | ||
diff --git a/arch/mips/ath79/machtypes.h b/arch/mips/ath79/machtypes.h new file mode 100644 index 000000000000..3940fe470b2d --- /dev/null +++ b/arch/mips/ath79/machtypes.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X machine type definitions | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef _ATH79_MACHTYPE_H | ||
13 | #define _ATH79_MACHTYPE_H | ||
14 | |||
15 | #include <asm/mips_machine.h> | ||
16 | |||
17 | enum ath79_mach_type { | ||
18 | ATH79_MACH_GENERIC = 0, | ||
19 | ATH79_MACH_AP81, /* Atheros AP81 reference board */ | ||
20 | ATH79_MACH_PB44, /* Atheros PB44 reference board */ | ||
21 | }; | ||
22 | |||
23 | #endif /* _ATH79_MACHTYPE_H */ | ||
diff --git a/arch/mips/ath79/prom.c b/arch/mips/ath79/prom.c new file mode 100644 index 000000000000..e9cbd7c2918f --- /dev/null +++ b/arch/mips/ath79/prom.c | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X specific prom routines | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <linux/string.h> | ||
16 | |||
17 | #include <asm/bootinfo.h> | ||
18 | #include <asm/addrspace.h> | ||
19 | |||
20 | #include "common.h" | ||
21 | |||
22 | static inline int is_valid_ram_addr(void *addr) | ||
23 | { | ||
24 | if (((u32) addr > KSEG0) && | ||
25 | ((u32) addr < (KSEG0 + ATH79_MEM_SIZE_MAX))) | ||
26 | return 1; | ||
27 | |||
28 | if (((u32) addr > KSEG1) && | ||
29 | ((u32) addr < (KSEG1 + ATH79_MEM_SIZE_MAX))) | ||
30 | return 1; | ||
31 | |||
32 | return 0; | ||
33 | } | ||
34 | |||
35 | static __init void ath79_prom_init_cmdline(int argc, char **argv) | ||
36 | { | ||
37 | int i; | ||
38 | |||
39 | if (!is_valid_ram_addr(argv)) | ||
40 | return; | ||
41 | |||
42 | for (i = 0; i < argc; i++) | ||
43 | if (is_valid_ram_addr(argv[i])) { | ||
44 | strlcat(arcs_cmdline, " ", sizeof(arcs_cmdline)); | ||
45 | strlcat(arcs_cmdline, argv[i], sizeof(arcs_cmdline)); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | void __init prom_init(void) | ||
50 | { | ||
51 | ath79_prom_init_cmdline(fw_arg0, (char **)fw_arg1); | ||
52 | } | ||
53 | |||
54 | void __init prom_free_prom_memory(void) | ||
55 | { | ||
56 | /* We do not have to prom memory to free */ | ||
57 | } | ||
diff --git a/arch/mips/ath79/setup.c b/arch/mips/ath79/setup.c new file mode 100644 index 000000000000..159b42f106b0 --- /dev/null +++ b/arch/mips/ath79/setup.c | |||
@@ -0,0 +1,206 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X specific setup | ||
3 | * | ||
4 | * Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * Parts of this file are based on Atheros' 2.6.15 BSP | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License version 2 as published | ||
11 | * by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/init.h> | ||
16 | #include <linux/bootmem.h> | ||
17 | #include <linux/err.h> | ||
18 | #include <linux/clk.h> | ||
19 | |||
20 | #include <asm/bootinfo.h> | ||
21 | #include <asm/time.h> /* for mips_hpt_frequency */ | ||
22 | #include <asm/reboot.h> /* for _machine_{restart,halt} */ | ||
23 | #include <asm/mips_machine.h> | ||
24 | |||
25 | #include <asm/mach-ath79/ath79.h> | ||
26 | #include <asm/mach-ath79/ar71xx_regs.h> | ||
27 | #include "common.h" | ||
28 | #include "dev-common.h" | ||
29 | #include "machtypes.h" | ||
30 | |||
31 | #define ATH79_SYS_TYPE_LEN 64 | ||
32 | |||
33 | #define AR71XX_BASE_FREQ 40000000 | ||
34 | #define AR724X_BASE_FREQ 5000000 | ||
35 | #define AR913X_BASE_FREQ 5000000 | ||
36 | |||
37 | static char ath79_sys_type[ATH79_SYS_TYPE_LEN]; | ||
38 | |||
39 | static void ath79_restart(char *command) | ||
40 | { | ||
41 | ath79_device_reset_set(AR71XX_RESET_FULL_CHIP); | ||
42 | for (;;) | ||
43 | if (cpu_wait) | ||
44 | cpu_wait(); | ||
45 | } | ||
46 | |||
47 | static void ath79_halt(void) | ||
48 | { | ||
49 | while (1) | ||
50 | cpu_wait(); | ||
51 | } | ||
52 | |||
53 | static void __init ath79_detect_mem_size(void) | ||
54 | { | ||
55 | unsigned long size; | ||
56 | |||
57 | for (size = ATH79_MEM_SIZE_MIN; size < ATH79_MEM_SIZE_MAX; | ||
58 | size <<= 1) { | ||
59 | if (!memcmp(ath79_detect_mem_size, | ||
60 | ath79_detect_mem_size + size, 1024)) | ||
61 | break; | ||
62 | } | ||
63 | |||
64 | add_memory_region(0, size, BOOT_MEM_RAM); | ||
65 | } | ||
66 | |||
67 | static void __init ath79_detect_sys_type(void) | ||
68 | { | ||
69 | char *chip = "????"; | ||
70 | u32 id; | ||
71 | u32 major; | ||
72 | u32 minor; | ||
73 | u32 rev = 0; | ||
74 | |||
75 | id = ath79_reset_rr(AR71XX_RESET_REG_REV_ID); | ||
76 | major = id & REV_ID_MAJOR_MASK; | ||
77 | |||
78 | switch (major) { | ||
79 | case REV_ID_MAJOR_AR71XX: | ||
80 | minor = id & AR71XX_REV_ID_MINOR_MASK; | ||
81 | rev = id >> AR71XX_REV_ID_REVISION_SHIFT; | ||
82 | rev &= AR71XX_REV_ID_REVISION_MASK; | ||
83 | switch (minor) { | ||
84 | case AR71XX_REV_ID_MINOR_AR7130: | ||
85 | ath79_soc = ATH79_SOC_AR7130; | ||
86 | chip = "7130"; | ||
87 | break; | ||
88 | |||
89 | case AR71XX_REV_ID_MINOR_AR7141: | ||
90 | ath79_soc = ATH79_SOC_AR7141; | ||
91 | chip = "7141"; | ||
92 | break; | ||
93 | |||
94 | case AR71XX_REV_ID_MINOR_AR7161: | ||
95 | ath79_soc = ATH79_SOC_AR7161; | ||
96 | chip = "7161"; | ||
97 | break; | ||
98 | } | ||
99 | break; | ||
100 | |||
101 | case REV_ID_MAJOR_AR7240: | ||
102 | ath79_soc = ATH79_SOC_AR7240; | ||
103 | chip = "7240"; | ||
104 | rev = (id & AR724X_REV_ID_REVISION_MASK); | ||
105 | break; | ||
106 | |||
107 | case REV_ID_MAJOR_AR7241: | ||
108 | ath79_soc = ATH79_SOC_AR7241; | ||
109 | chip = "7241"; | ||
110 | rev = (id & AR724X_REV_ID_REVISION_MASK); | ||
111 | break; | ||
112 | |||
113 | case REV_ID_MAJOR_AR7242: | ||
114 | ath79_soc = ATH79_SOC_AR7242; | ||
115 | chip = "7242"; | ||
116 | rev = (id & AR724X_REV_ID_REVISION_MASK); | ||
117 | break; | ||
118 | |||
119 | case REV_ID_MAJOR_AR913X: | ||
120 | minor = id & AR913X_REV_ID_MINOR_MASK; | ||
121 | rev = id >> AR913X_REV_ID_REVISION_SHIFT; | ||
122 | rev &= AR913X_REV_ID_REVISION_MASK; | ||
123 | switch (minor) { | ||
124 | case AR913X_REV_ID_MINOR_AR9130: | ||
125 | ath79_soc = ATH79_SOC_AR9130; | ||
126 | chip = "9130"; | ||
127 | break; | ||
128 | |||
129 | case AR913X_REV_ID_MINOR_AR9132: | ||
130 | ath79_soc = ATH79_SOC_AR9132; | ||
131 | chip = "9132"; | ||
132 | break; | ||
133 | } | ||
134 | break; | ||
135 | |||
136 | default: | ||
137 | panic("ath79: unknown SoC, id:0x%08x\n", id); | ||
138 | } | ||
139 | |||
140 | sprintf(ath79_sys_type, "Atheros AR%s rev %u", chip, rev); | ||
141 | pr_info("SoC: %s\n", ath79_sys_type); | ||
142 | } | ||
143 | |||
144 | const char *get_system_type(void) | ||
145 | { | ||
146 | return ath79_sys_type; | ||
147 | } | ||
148 | |||
149 | unsigned int __cpuinit get_c0_compare_int(void) | ||
150 | { | ||
151 | return CP0_LEGACY_COMPARE_IRQ; | ||
152 | } | ||
153 | |||
154 | void __init plat_mem_setup(void) | ||
155 | { | ||
156 | set_io_port_base(KSEG1); | ||
157 | |||
158 | ath79_reset_base = ioremap_nocache(AR71XX_RESET_BASE, | ||
159 | AR71XX_RESET_SIZE); | ||
160 | ath79_pll_base = ioremap_nocache(AR71XX_PLL_BASE, | ||
161 | AR71XX_PLL_SIZE); | ||
162 | ath79_ddr_base = ioremap_nocache(AR71XX_DDR_CTRL_BASE, | ||
163 | AR71XX_DDR_CTRL_SIZE); | ||
164 | |||
165 | ath79_detect_sys_type(); | ||
166 | ath79_detect_mem_size(); | ||
167 | ath79_clocks_init(); | ||
168 | |||
169 | _machine_restart = ath79_restart; | ||
170 | _machine_halt = ath79_halt; | ||
171 | pm_power_off = ath79_halt; | ||
172 | } | ||
173 | |||
174 | void __init plat_time_init(void) | ||
175 | { | ||
176 | struct clk *clk; | ||
177 | |||
178 | clk = clk_get(NULL, "cpu"); | ||
179 | if (IS_ERR(clk)) | ||
180 | panic("unable to get CPU clock, err=%ld", PTR_ERR(clk)); | ||
181 | |||
182 | mips_hpt_frequency = clk_get_rate(clk) / 2; | ||
183 | } | ||
184 | |||
185 | static int __init ath79_setup(void) | ||
186 | { | ||
187 | ath79_gpio_init(); | ||
188 | ath79_register_uart(); | ||
189 | ath79_register_wdt(); | ||
190 | |||
191 | mips_machine_setup(); | ||
192 | |||
193 | return 0; | ||
194 | } | ||
195 | |||
196 | arch_initcall(ath79_setup); | ||
197 | |||
198 | static void __init ath79_generic_init(void) | ||
199 | { | ||
200 | /* Nothing to do */ | ||
201 | } | ||
202 | |||
203 | MIPS_MACHINE(ATH79_MACH_GENERIC, | ||
204 | "Generic", | ||
205 | "Generic AR71XX/AR724X/AR913X based board", | ||
206 | ath79_generic_init); | ||
diff --git a/arch/mips/configs/ar7_defconfig b/arch/mips/configs/ar7_defconfig index c78c7e7e41df..6cd5a519ce5c 100644 --- a/arch/mips/configs/ar7_defconfig +++ b/arch/mips/configs/ar7_defconfig | |||
@@ -14,7 +14,7 @@ CONFIG_SYSFS_DEPRECATED_V2=y | |||
14 | CONFIG_RELAY=y | 14 | CONFIG_RELAY=y |
15 | CONFIG_BLK_DEV_INITRD=y | 15 | CONFIG_BLK_DEV_INITRD=y |
16 | CONFIG_RD_LZMA=y | 16 | CONFIG_RD_LZMA=y |
17 | CONFIG_EMBEDDED=y | 17 | CONFIG_EXPERT=y |
18 | # CONFIG_KALLSYMS is not set | 18 | # CONFIG_KALLSYMS is not set |
19 | # CONFIG_ELF_CORE is not set | 19 | # CONFIG_ELF_CORE is not set |
20 | # CONFIG_PCSPKR_PLATFORM is not set | 20 | # CONFIG_PCSPKR_PLATFORM is not set |
diff --git a/arch/mips/configs/bcm47xx_defconfig b/arch/mips/configs/bcm47xx_defconfig index 927d58b2cd03..22fdf2f0cc23 100644 --- a/arch/mips/configs/bcm47xx_defconfig +++ b/arch/mips/configs/bcm47xx_defconfig | |||
@@ -21,7 +21,7 @@ CONFIG_CGROUP_CPUACCT=y | |||
21 | CONFIG_RELAY=y | 21 | CONFIG_RELAY=y |
22 | CONFIG_BLK_DEV_INITRD=y | 22 | CONFIG_BLK_DEV_INITRD=y |
23 | CONFIG_RD_LZMA=y | 23 | CONFIG_RD_LZMA=y |
24 | CONFIG_EMBEDDED=y | 24 | CONFIG_EXPERT=y |
25 | CONFIG_SLAB=y | 25 | CONFIG_SLAB=y |
26 | CONFIG_MODULES=y | 26 | CONFIG_MODULES=y |
27 | CONFIG_MODULE_UNLOAD=y | 27 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/mips/configs/bcm63xx_defconfig b/arch/mips/configs/bcm63xx_defconfig index b806a4e32896..919005139f5a 100644 --- a/arch/mips/configs/bcm63xx_defconfig +++ b/arch/mips/configs/bcm63xx_defconfig | |||
@@ -10,7 +10,7 @@ CONFIG_EXPERIMENTAL=y | |||
10 | # CONFIG_SWAP is not set | 10 | # CONFIG_SWAP is not set |
11 | CONFIG_TINY_RCU=y | 11 | CONFIG_TINY_RCU=y |
12 | CONFIG_SYSFS_DEPRECATED_V2=y | 12 | CONFIG_SYSFS_DEPRECATED_V2=y |
13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EXPERT=y |
14 | # CONFIG_PCSPKR_PLATFORM is not set | 14 | # CONFIG_PCSPKR_PLATFORM is not set |
15 | # CONFIG_FUTEX is not set | 15 | # CONFIG_FUTEX is not set |
16 | # CONFIG_EPOLL is not set | 16 | # CONFIG_EPOLL is not set |
diff --git a/arch/mips/configs/bigsur_defconfig b/arch/mips/configs/bigsur_defconfig index 9749bc8758db..1cdff6b6327d 100644 --- a/arch/mips/configs/bigsur_defconfig +++ b/arch/mips/configs/bigsur_defconfig | |||
@@ -26,7 +26,7 @@ CONFIG_PID_NS=y | |||
26 | CONFIG_NET_NS=y | 26 | CONFIG_NET_NS=y |
27 | CONFIG_BLK_DEV_INITRD=y | 27 | CONFIG_BLK_DEV_INITRD=y |
28 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 28 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
29 | CONFIG_EMBEDDED=y | 29 | CONFIG_EXPERT=y |
30 | # CONFIG_SYSCTL_SYSCALL is not set | 30 | # CONFIG_SYSCTL_SYSCALL is not set |
31 | # CONFIG_PCSPKR_PLATFORM is not set | 31 | # CONFIG_PCSPKR_PLATFORM is not set |
32 | CONFIG_SLAB=y | 32 | CONFIG_SLAB=y |
diff --git a/arch/mips/configs/capcella_defconfig b/arch/mips/configs/capcella_defconfig index 502a8e9c084b..5135dc0b950a 100644 --- a/arch/mips/configs/capcella_defconfig +++ b/arch/mips/configs/capcella_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_EXPERIMENTAL=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/mips/configs/cavium-octeon_defconfig b/arch/mips/configs/cavium-octeon_defconfig index 3567b6f07b37..75165dfa60c1 100644 --- a/arch/mips/configs/cavium-octeon_defconfig +++ b/arch/mips/configs/cavium-octeon_defconfig | |||
@@ -15,7 +15,7 @@ CONFIG_SYSFS_DEPRECATED_V2=y | |||
15 | CONFIG_RELAY=y | 15 | CONFIG_RELAY=y |
16 | CONFIG_BLK_DEV_INITRD=y | 16 | CONFIG_BLK_DEV_INITRD=y |
17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
18 | CONFIG_EMBEDDED=y | 18 | CONFIG_EXPERT=y |
19 | # CONFIG_PCSPKR_PLATFORM is not set | 19 | # CONFIG_PCSPKR_PLATFORM is not set |
20 | CONFIG_SLAB=y | 20 | CONFIG_SLAB=y |
21 | CONFIG_MODULES=y | 21 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/cobalt_defconfig b/arch/mips/configs/cobalt_defconfig index 6c4f7e9d3383..5419adb219a8 100644 --- a/arch/mips/configs/cobalt_defconfig +++ b/arch/mips/configs/cobalt_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_RELAY=y | 5 | CONFIG_RELAY=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
10 | # CONFIG_BLK_DEV_BSG is not set | 10 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/mips/configs/db1000_defconfig b/arch/mips/configs/db1000_defconfig index dda158b2c8dc..4044c9e0fb73 100644 --- a/arch/mips/configs/db1000_defconfig +++ b/arch/mips/configs/db1000_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_POSIX_MQUEUE=y | |||
11 | CONFIG_TINY_RCU=y | 11 | CONFIG_TINY_RCU=y |
12 | CONFIG_LOG_BUF_SHIFT=14 | 12 | CONFIG_LOG_BUF_SHIFT=14 |
13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | # CONFIG_KALLSYMS is not set | 15 | # CONFIG_KALLSYMS is not set |
16 | # CONFIG_PCSPKR_PLATFORM is not set | 16 | # CONFIG_PCSPKR_PLATFORM is not set |
17 | # CONFIG_VM_EVENT_COUNTERS is not set | 17 | # CONFIG_VM_EVENT_COUNTERS is not set |
diff --git a/arch/mips/configs/db1100_defconfig b/arch/mips/configs/db1100_defconfig index 7e4fc76df538..c6b49938ee84 100644 --- a/arch/mips/configs/db1100_defconfig +++ b/arch/mips/configs/db1100_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_SYSVIPC=y | |||
11 | CONFIG_POSIX_MQUEUE=y | 11 | CONFIG_POSIX_MQUEUE=y |
12 | CONFIG_TINY_RCU=y | 12 | CONFIG_TINY_RCU=y |
13 | CONFIG_LOG_BUF_SHIFT=14 | 13 | CONFIG_LOG_BUF_SHIFT=14 |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | # CONFIG_SYSCTL_SYSCALL is not set | 15 | # CONFIG_SYSCTL_SYSCALL is not set |
16 | # CONFIG_KALLSYMS is not set | 16 | # CONFIG_KALLSYMS is not set |
17 | # CONFIG_PCSPKR_PLATFORM is not set | 17 | # CONFIG_PCSPKR_PLATFORM is not set |
diff --git a/arch/mips/configs/db1200_defconfig b/arch/mips/configs/db1200_defconfig index 6fe205fa7b61..1f69249b839a 100644 --- a/arch/mips/configs/db1200_defconfig +++ b/arch/mips/configs/db1200_defconfig | |||
@@ -12,7 +12,7 @@ CONFIG_SYSVIPC=y | |||
12 | CONFIG_POSIX_MQUEUE=y | 12 | CONFIG_POSIX_MQUEUE=y |
13 | CONFIG_TINY_RCU=y | 13 | CONFIG_TINY_RCU=y |
14 | CONFIG_LOG_BUF_SHIFT=14 | 14 | CONFIG_LOG_BUF_SHIFT=14 |
15 | CONFIG_EMBEDDED=y | 15 | CONFIG_EXPERT=y |
16 | # CONFIG_SYSCTL_SYSCALL is not set | 16 | # CONFIG_SYSCTL_SYSCALL is not set |
17 | # CONFIG_KALLSYMS is not set | 17 | # CONFIG_KALLSYMS is not set |
18 | # CONFIG_PCSPKR_PLATFORM is not set | 18 | # CONFIG_PCSPKR_PLATFORM is not set |
diff --git a/arch/mips/configs/db1500_defconfig b/arch/mips/configs/db1500_defconfig index a741c55448d0..b6e21c7cb6bd 100644 --- a/arch/mips/configs/db1500_defconfig +++ b/arch/mips/configs/db1500_defconfig | |||
@@ -10,7 +10,7 @@ CONFIG_LOCALVERSION="-db1500" | |||
10 | CONFIG_KERNEL_LZMA=y | 10 | CONFIG_KERNEL_LZMA=y |
11 | CONFIG_SYSVIPC=y | 11 | CONFIG_SYSVIPC=y |
12 | CONFIG_LOG_BUF_SHIFT=14 | 12 | CONFIG_LOG_BUF_SHIFT=14 |
13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EXPERT=y |
14 | # CONFIG_KALLSYMS is not set | 14 | # CONFIG_KALLSYMS is not set |
15 | # CONFIG_PCSPKR_PLATFORM is not set | 15 | # CONFIG_PCSPKR_PLATFORM is not set |
16 | # CONFIG_VM_EVENT_COUNTERS is not set | 16 | # CONFIG_VM_EVENT_COUNTERS is not set |
diff --git a/arch/mips/configs/db1550_defconfig b/arch/mips/configs/db1550_defconfig index cd32dd8c8008..798a553c9e80 100644 --- a/arch/mips/configs/db1550_defconfig +++ b/arch/mips/configs/db1550_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_SYSVIPC=y | |||
11 | CONFIG_POSIX_MQUEUE=y | 11 | CONFIG_POSIX_MQUEUE=y |
12 | CONFIG_TINY_RCU=y | 12 | CONFIG_TINY_RCU=y |
13 | CONFIG_LOG_BUF_SHIFT=14 | 13 | CONFIG_LOG_BUF_SHIFT=14 |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | # CONFIG_SYSCTL_SYSCALL is not set | 15 | # CONFIG_SYSCTL_SYSCALL is not set |
16 | # CONFIG_KALLSYMS is not set | 16 | # CONFIG_KALLSYMS is not set |
17 | # CONFIG_PCSPKR_PLATFORM is not set | 17 | # CONFIG_PCSPKR_PLATFORM is not set |
diff --git a/arch/mips/configs/decstation_defconfig b/arch/mips/configs/decstation_defconfig index b15bfd1e69c8..87d0340837aa 100644 --- a/arch/mips/configs/decstation_defconfig +++ b/arch/mips/configs/decstation_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_EXPERIMENTAL=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_SYSCTL_SYSCALL is not set | 8 | # CONFIG_SYSCTL_SYSCALL is not set |
9 | # CONFIG_HOTPLUG is not set | 9 | # CONFIG_HOTPLUG is not set |
10 | CONFIG_SLAB=y | 10 | CONFIG_SLAB=y |
diff --git a/arch/mips/configs/e55_defconfig b/arch/mips/configs/e55_defconfig index 0b60c06a943d..0126e66d60cb 100644 --- a/arch/mips/configs/e55_defconfig +++ b/arch/mips/configs/e55_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_EXPERIMENTAL=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_HOTPLUG is not set | 8 | # CONFIG_HOTPLUG is not set |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/fuloong2e_defconfig b/arch/mips/configs/fuloong2e_defconfig index 63944a14b816..e5b73de08fc5 100644 --- a/arch/mips/configs/fuloong2e_defconfig +++ b/arch/mips/configs/fuloong2e_defconfig | |||
@@ -17,7 +17,7 @@ CONFIG_NAMESPACES=y | |||
17 | CONFIG_USER_NS=y | 17 | CONFIG_USER_NS=y |
18 | CONFIG_PID_NS=y | 18 | CONFIG_PID_NS=y |
19 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 19 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
20 | CONFIG_EMBEDDED=y | 20 | CONFIG_EXPERT=y |
21 | # CONFIG_PCSPKR_PLATFORM is not set | 21 | # CONFIG_PCSPKR_PLATFORM is not set |
22 | # CONFIG_COMPAT_BRK is not set | 22 | # CONFIG_COMPAT_BRK is not set |
23 | CONFIG_SLAB=y | 23 | CONFIG_SLAB=y |
diff --git a/arch/mips/configs/gpr_defconfig b/arch/mips/configs/gpr_defconfig index 53edc134f274..48a40aefaf58 100644 --- a/arch/mips/configs/gpr_defconfig +++ b/arch/mips/configs/gpr_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_BSD_PROCESS_ACCT_V3=y | |||
11 | CONFIG_RELAY=y | 11 | CONFIG_RELAY=y |
12 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
16 | CONFIG_PROFILING=y | 16 | CONFIG_PROFILING=y |
17 | CONFIG_MODULES=y | 17 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/ip22_defconfig b/arch/mips/configs/ip22_defconfig index 36de199f4c27..d1606569b001 100644 --- a/arch/mips/configs/ip22_defconfig +++ b/arch/mips/configs/ip22_defconfig | |||
@@ -17,7 +17,7 @@ CONFIG_IPC_NS=y | |||
17 | CONFIG_USER_NS=y | 17 | CONFIG_USER_NS=y |
18 | CONFIG_PID_NS=y | 18 | CONFIG_PID_NS=y |
19 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 19 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
20 | CONFIG_EMBEDDED=y | 20 | CONFIG_EXPERT=y |
21 | # CONFIG_HOTPLUG is not set | 21 | # CONFIG_HOTPLUG is not set |
22 | # CONFIG_PCSPKR_PLATFORM is not set | 22 | # CONFIG_PCSPKR_PLATFORM is not set |
23 | # CONFIG_COMPAT_BRK is not set | 23 | # CONFIG_COMPAT_BRK is not set |
diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig index 4b16c48b0c36..0e36abcd39cc 100644 --- a/arch/mips/configs/ip27_defconfig +++ b/arch/mips/configs/ip27_defconfig | |||
@@ -15,7 +15,7 @@ CONFIG_CGROUPS=y | |||
15 | CONFIG_CPUSETS=y | 15 | CONFIG_CPUSETS=y |
16 | CONFIG_RELAY=y | 16 | CONFIG_RELAY=y |
17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
18 | CONFIG_EMBEDDED=y | 18 | CONFIG_EXPERT=y |
19 | # CONFIG_PCSPKR_PLATFORM is not set | 19 | # CONFIG_PCSPKR_PLATFORM is not set |
20 | CONFIG_SLAB=y | 20 | CONFIG_SLAB=y |
21 | CONFIG_MODULES=y | 21 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/ip28_defconfig b/arch/mips/configs/ip28_defconfig index 98f2c7736e87..4dbf6269b3f9 100644 --- a/arch/mips/configs/ip28_defconfig +++ b/arch/mips/configs/ip28_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_IKCONFIG_PROC=y | |||
8 | CONFIG_LOG_BUF_SHIFT=14 | 8 | CONFIG_LOG_BUF_SHIFT=14 |
9 | CONFIG_RELAY=y | 9 | CONFIG_RELAY=y |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_HOTPLUG is not set | 12 | # CONFIG_HOTPLUG is not set |
13 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
14 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/ip32_defconfig b/arch/mips/configs/ip32_defconfig index 5bea99b26fa8..7bbd52194fc3 100644 --- a/arch/mips/configs/ip32_defconfig +++ b/arch/mips/configs/ip32_defconfig | |||
@@ -10,7 +10,7 @@ CONFIG_IKCONFIG_PROC=y | |||
10 | CONFIG_LOG_BUF_SHIFT=14 | 10 | CONFIG_LOG_BUF_SHIFT=14 |
11 | CONFIG_SYSFS_DEPRECATED_V2=y | 11 | CONFIG_SYSFS_DEPRECATED_V2=y |
12 | CONFIG_RELAY=y | 12 | CONFIG_RELAY=y |
13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EXPERT=y |
14 | CONFIG_SLAB=y | 14 | CONFIG_SLAB=y |
15 | CONFIG_PROFILING=y | 15 | CONFIG_PROFILING=y |
16 | CONFIG_OPROFILE=m | 16 | CONFIG_OPROFILE=m |
diff --git a/arch/mips/configs/jazz_defconfig b/arch/mips/configs/jazz_defconfig index 6ae46bcdb20b..92a60aecad5c 100644 --- a/arch/mips/configs/jazz_defconfig +++ b/arch/mips/configs/jazz_defconfig | |||
@@ -10,7 +10,7 @@ CONFIG_IKCONFIG_PROC=y | |||
10 | CONFIG_LOG_BUF_SHIFT=14 | 10 | CONFIG_LOG_BUF_SHIFT=14 |
11 | CONFIG_RELAY=y | 11 | CONFIG_RELAY=y |
12 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 12 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EXPERT=y |
14 | # CONFIG_SYSCTL_SYSCALL is not set | 14 | # CONFIG_SYSCTL_SYSCALL is not set |
15 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
16 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/jmr3927_defconfig b/arch/mips/configs/jmr3927_defconfig index bf24e9309b9c..db5705e18b36 100644 --- a/arch/mips/configs/jmr3927_defconfig +++ b/arch/mips/configs/jmr3927_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_TOSHIBA_JMR3927=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_HOTPLUG is not set | 8 | # CONFIG_HOTPLUG is not set |
9 | # CONFIG_PCSPKR_PLATFORM is not set | 9 | # CONFIG_PCSPKR_PLATFORM is not set |
10 | CONFIG_SLAB=y | 10 | CONFIG_SLAB=y |
diff --git a/arch/mips/configs/lasat_defconfig b/arch/mips/configs/lasat_defconfig index 6447261c61d0..d9f3db29ab95 100644 --- a/arch/mips/configs/lasat_defconfig +++ b/arch/mips/configs/lasat_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_HZ_1000=y | |||
8 | CONFIG_EXPERIMENTAL=y | 8 | CONFIG_EXPERIMENTAL=y |
9 | CONFIG_SYSVIPC=y | 9 | CONFIG_SYSVIPC=y |
10 | CONFIG_LOG_BUF_SHIFT=14 | 10 | CONFIG_LOG_BUF_SHIFT=14 |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_SYSCTL_SYSCALL is not set | 12 | # CONFIG_SYSCTL_SYSCALL is not set |
13 | # CONFIG_KALLSYMS is not set | 13 | # CONFIG_KALLSYMS is not set |
14 | # CONFIG_HOTPLUG is not set | 14 | # CONFIG_HOTPLUG is not set |
diff --git a/arch/mips/configs/lemote2f_defconfig b/arch/mips/configs/lemote2f_defconfig index f7033f3a5822..167c1d07b809 100644 --- a/arch/mips/configs/lemote2f_defconfig +++ b/arch/mips/configs/lemote2f_defconfig | |||
@@ -21,7 +21,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
21 | CONFIG_RD_BZIP2=y | 21 | CONFIG_RD_BZIP2=y |
22 | CONFIG_RD_LZMA=y | 22 | CONFIG_RD_LZMA=y |
23 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 23 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
24 | CONFIG_EMBEDDED=y | 24 | CONFIG_EXPERT=y |
25 | CONFIG_PROFILING=y | 25 | CONFIG_PROFILING=y |
26 | CONFIG_OPROFILE=m | 26 | CONFIG_OPROFILE=m |
27 | CONFIG_MODULES=y | 27 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig index b455d0f36486..7270f3183bda 100644 --- a/arch/mips/configs/malta_defconfig +++ b/arch/mips/configs/malta_defconfig | |||
@@ -15,7 +15,7 @@ CONFIG_UTS_NS=y | |||
15 | CONFIG_IPC_NS=y | 15 | CONFIG_IPC_NS=y |
16 | CONFIG_PID_NS=y | 16 | CONFIG_PID_NS=y |
17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
18 | CONFIG_EMBEDDED=y | 18 | CONFIG_EXPERT=y |
19 | # CONFIG_SYSCTL_SYSCALL is not set | 19 | # CONFIG_SYSCTL_SYSCALL is not set |
20 | # CONFIG_COMPAT_BRK is not set | 20 | # CONFIG_COMPAT_BRK is not set |
21 | CONFIG_SLAB=y | 21 | CONFIG_SLAB=y |
@@ -369,7 +369,10 @@ CONFIG_VT_HW_CONSOLE_BINDING=y | |||
369 | CONFIG_SERIAL_8250=y | 369 | CONFIG_SERIAL_8250=y |
370 | CONFIG_SERIAL_8250_CONSOLE=y | 370 | CONFIG_SERIAL_8250_CONSOLE=y |
371 | # CONFIG_HWMON is not set | 371 | # CONFIG_HWMON is not set |
372 | CONFIG_FB=y | ||
373 | CONFIG_FB_CIRRUS=y | ||
372 | # CONFIG_VGA_CONSOLE is not set | 374 | # CONFIG_VGA_CONSOLE is not set |
375 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
373 | CONFIG_HID=m | 376 | CONFIG_HID=m |
374 | CONFIG_LEDS_CLASS=m | 377 | CONFIG_LEDS_CLASS=m |
375 | CONFIG_LEDS_TRIGGER_TIMER=m | 378 | CONFIG_LEDS_TRIGGER_TIMER=m |
diff --git a/arch/mips/configs/markeins_defconfig b/arch/mips/configs/markeins_defconfig index 86bf001babe9..9c9a123016c0 100644 --- a/arch/mips/configs/markeins_defconfig +++ b/arch/mips/configs/markeins_defconfig | |||
@@ -9,7 +9,7 @@ CONFIG_IKCONFIG=y | |||
9 | CONFIG_IKCONFIG_PROC=y | 9 | CONFIG_IKCONFIG_PROC=y |
10 | CONFIG_LOG_BUF_SHIFT=14 | 10 | CONFIG_LOG_BUF_SHIFT=14 |
11 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 11 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
12 | CONFIG_EMBEDDED=y | 12 | CONFIG_EXPERT=y |
13 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
14 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
15 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/mips/configs/mipssim_defconfig b/arch/mips/configs/mipssim_defconfig index 4925f507dc21..b5ad7387bbb0 100644 --- a/arch/mips/configs/mipssim_defconfig +++ b/arch/mips/configs/mipssim_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_EXPERIMENTAL=y | |||
7 | CONFIG_SYSVIPC=y | 7 | CONFIG_SYSVIPC=y |
8 | CONFIG_LOG_BUF_SHIFT=14 | 8 | CONFIG_LOG_BUF_SHIFT=14 |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | CONFIG_SLAB=y | 11 | CONFIG_SLAB=y |
12 | CONFIG_MODULES=y | 12 | CONFIG_MODULES=y |
13 | CONFIG_MODULE_UNLOAD=y | 13 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/mips/configs/mpc30x_defconfig b/arch/mips/configs/mpc30x_defconfig index efb779f8f6fe..c16de9812920 100644 --- a/arch/mips/configs/mpc30x_defconfig +++ b/arch/mips/configs/mpc30x_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_SYSVIPC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_RELAY=y | 6 | CONFIG_RELAY=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_SLAB=y | 9 | CONFIG_SLAB=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
11 | CONFIG_MODULE_UNLOAD=y | 11 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/mips/configs/msp71xx_defconfig b/arch/mips/configs/msp71xx_defconfig index ab051458452b..d1142e9cd9a1 100644 --- a/arch/mips/configs/msp71xx_defconfig +++ b/arch/mips/configs/msp71xx_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_LOCALVERSION="-pmc" | |||
8 | CONFIG_SYSVIPC=y | 8 | CONFIG_SYSVIPC=y |
9 | CONFIG_LOG_BUF_SHIFT=14 | 9 | CONFIG_LOG_BUF_SHIFT=14 |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_SHMEM is not set | 12 | # CONFIG_SHMEM is not set |
13 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
14 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/mtx1_defconfig b/arch/mips/configs/mtx1_defconfig index 814699754e0d..a97a42c6b2c8 100644 --- a/arch/mips/configs/mtx1_defconfig +++ b/arch/mips/configs/mtx1_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_AUDIT=y | |||
11 | CONFIG_RELAY=y | 11 | CONFIG_RELAY=y |
12 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
16 | CONFIG_PROFILING=y | 16 | CONFIG_PROFILING=y |
17 | CONFIG_OPROFILE=m | 17 | CONFIG_OPROFILE=m |
diff --git a/arch/mips/configs/pb1100_defconfig b/arch/mips/configs/pb1100_defconfig index 1597aa1842fa..75eb1b1f316c 100644 --- a/arch/mips/configs/pb1100_defconfig +++ b/arch/mips/configs/pb1100_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_SYSVIPC=y | |||
11 | CONFIG_POSIX_MQUEUE=y | 11 | CONFIG_POSIX_MQUEUE=y |
12 | CONFIG_TINY_RCU=y | 12 | CONFIG_TINY_RCU=y |
13 | CONFIG_LOG_BUF_SHIFT=14 | 13 | CONFIG_LOG_BUF_SHIFT=14 |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | # CONFIG_SYSCTL_SYSCALL is not set | 15 | # CONFIG_SYSCTL_SYSCALL is not set |
16 | # CONFIG_KALLSYMS is not set | 16 | # CONFIG_KALLSYMS is not set |
17 | # CONFIG_PCSPKR_PLATFORM is not set | 17 | # CONFIG_PCSPKR_PLATFORM is not set |
diff --git a/arch/mips/configs/pb1200_defconfig b/arch/mips/configs/pb1200_defconfig index 96f0d43cf08b..dcbe2704e5ed 100644 --- a/arch/mips/configs/pb1200_defconfig +++ b/arch/mips/configs/pb1200_defconfig | |||
@@ -12,7 +12,7 @@ CONFIG_SYSVIPC=y | |||
12 | CONFIG_POSIX_MQUEUE=y | 12 | CONFIG_POSIX_MQUEUE=y |
13 | CONFIG_TINY_RCU=y | 13 | CONFIG_TINY_RCU=y |
14 | CONFIG_LOG_BUF_SHIFT=14 | 14 | CONFIG_LOG_BUF_SHIFT=14 |
15 | CONFIG_EMBEDDED=y | 15 | CONFIG_EXPERT=y |
16 | # CONFIG_SYSCTL_SYSCALL is not set | 16 | # CONFIG_SYSCTL_SYSCALL is not set |
17 | # CONFIG_KALLSYMS is not set | 17 | # CONFIG_KALLSYMS is not set |
18 | # CONFIG_PCSPKR_PLATFORM is not set | 18 | # CONFIG_PCSPKR_PLATFORM is not set |
diff --git a/arch/mips/configs/pb1500_defconfig b/arch/mips/configs/pb1500_defconfig index b4bfd4823458..fa00487146f8 100644 --- a/arch/mips/configs/pb1500_defconfig +++ b/arch/mips/configs/pb1500_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_SYSVIPC=y | |||
11 | CONFIG_POSIX_MQUEUE=y | 11 | CONFIG_POSIX_MQUEUE=y |
12 | CONFIG_TINY_RCU=y | 12 | CONFIG_TINY_RCU=y |
13 | CONFIG_LOG_BUF_SHIFT=14 | 13 | CONFIG_LOG_BUF_SHIFT=14 |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | # CONFIG_SYSCTL_SYSCALL is not set | 15 | # CONFIG_SYSCTL_SYSCALL is not set |
16 | # CONFIG_KALLSYMS is not set | 16 | # CONFIG_KALLSYMS is not set |
17 | # CONFIG_PCSPKR_PLATFORM is not set | 17 | # CONFIG_PCSPKR_PLATFORM is not set |
diff --git a/arch/mips/configs/pb1550_defconfig b/arch/mips/configs/pb1550_defconfig index 5a660024d22a..e83d6497e8b4 100644 --- a/arch/mips/configs/pb1550_defconfig +++ b/arch/mips/configs/pb1550_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_SYSVIPC=y | |||
11 | CONFIG_POSIX_MQUEUE=y | 11 | CONFIG_POSIX_MQUEUE=y |
12 | CONFIG_TINY_RCU=y | 12 | CONFIG_TINY_RCU=y |
13 | CONFIG_LOG_BUF_SHIFT=14 | 13 | CONFIG_LOG_BUF_SHIFT=14 |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | # CONFIG_SYSCTL_SYSCALL is not set | 15 | # CONFIG_SYSCTL_SYSCALL is not set |
16 | # CONFIG_KALLSYMS is not set | 16 | # CONFIG_KALLSYMS is not set |
17 | # CONFIG_PCSPKR_PLATFORM is not set | 17 | # CONFIG_PCSPKR_PLATFORM is not set |
diff --git a/arch/mips/configs/pnx8335-stb225_defconfig b/arch/mips/configs/pnx8335-stb225_defconfig index 39926a1a96b6..f2925769dfa3 100644 --- a/arch/mips/configs/pnx8335-stb225_defconfig +++ b/arch/mips/configs/pnx8335-stb225_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_EXPERIMENTAL=y | |||
11 | CONFIG_SYSVIPC=y | 11 | CONFIG_SYSVIPC=y |
12 | CONFIG_LOG_BUF_SHIFT=14 | 12 | CONFIG_LOG_BUF_SHIFT=14 |
13 | CONFIG_SYSFS_DEPRECATED_V2=y | 13 | CONFIG_SYSFS_DEPRECATED_V2=y |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
16 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
17 | CONFIG_MODULE_UNLOAD=y | 17 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/mips/configs/pnx8550-jbs_defconfig b/arch/mips/configs/pnx8550-jbs_defconfig index 3376bc8616cc..1d1f2067f3e6 100644 --- a/arch/mips/configs/pnx8550-jbs_defconfig +++ b/arch/mips/configs/pnx8550-jbs_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG_PROC=y | |||
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_SYSCTL_SYSCALL is not set | 10 | # CONFIG_SYSCTL_SYSCALL is not set |
11 | CONFIG_SLAB=y | 11 | CONFIG_SLAB=y |
12 | CONFIG_MODULES=y | 12 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/pnx8550-stb810_defconfig b/arch/mips/configs/pnx8550-stb810_defconfig index 6514f1bf0afb..15c66a571f99 100644 --- a/arch/mips/configs/pnx8550-stb810_defconfig +++ b/arch/mips/configs/pnx8550-stb810_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG_PROC=y | |||
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_SYSCTL_SYSCALL is not set | 10 | # CONFIG_SYSCTL_SYSCALL is not set |
11 | # CONFIG_HOTPLUG is not set | 11 | # CONFIG_HOTPLUG is not set |
12 | CONFIG_SLAB=y | 12 | CONFIG_SLAB=y |
diff --git a/arch/mips/configs/powertv_defconfig b/arch/mips/configs/powertv_defconfig index f1f58e91dd80..3b0b6e8c8533 100644 --- a/arch/mips/configs/powertv_defconfig +++ b/arch/mips/configs/powertv_defconfig | |||
@@ -14,7 +14,7 @@ CONFIG_RELAY=y | |||
14 | CONFIG_BLK_DEV_INITRD=y | 14 | CONFIG_BLK_DEV_INITRD=y |
15 | # CONFIG_RD_GZIP is not set | 15 | # CONFIG_RD_GZIP is not set |
16 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 16 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
17 | CONFIG_EMBEDDED=y | 17 | CONFIG_EXPERT=y |
18 | # CONFIG_SYSCTL_SYSCALL is not set | 18 | # CONFIG_SYSCTL_SYSCALL is not set |
19 | CONFIG_KALLSYMS_ALL=y | 19 | CONFIG_KALLSYMS_ALL=y |
20 | # CONFIG_PCSPKR_PLATFORM is not set | 20 | # CONFIG_PCSPKR_PLATFORM is not set |
diff --git a/arch/mips/configs/rb532_defconfig b/arch/mips/configs/rb532_defconfig index d6457bc38c71..55902d9cd0f2 100644 --- a/arch/mips/configs/rb532_defconfig +++ b/arch/mips/configs/rb532_defconfig | |||
@@ -13,7 +13,7 @@ CONFIG_IKCONFIG_PROC=y | |||
13 | CONFIG_LOG_BUF_SHIFT=14 | 13 | CONFIG_LOG_BUF_SHIFT=14 |
14 | CONFIG_SYSFS_DEPRECATED_V2=y | 14 | CONFIG_SYSFS_DEPRECATED_V2=y |
15 | CONFIG_BLK_DEV_INITRD=y | 15 | CONFIG_BLK_DEV_INITRD=y |
16 | CONFIG_EMBEDDED=y | 16 | CONFIG_EXPERT=y |
17 | # CONFIG_KALLSYMS is not set | 17 | # CONFIG_KALLSYMS is not set |
18 | # CONFIG_ELF_CORE is not set | 18 | # CONFIG_ELF_CORE is not set |
19 | # CONFIG_VM_EVENT_COUNTERS is not set | 19 | # CONFIG_VM_EVENT_COUNTERS is not set |
diff --git a/arch/mips/configs/rbtx49xx_defconfig b/arch/mips/configs/rbtx49xx_defconfig index 29acfab31516..9cba856277ff 100644 --- a/arch/mips/configs/rbtx49xx_defconfig +++ b/arch/mips/configs/rbtx49xx_defconfig | |||
@@ -12,7 +12,7 @@ CONFIG_IKCONFIG_PROC=y | |||
12 | CONFIG_LOG_BUF_SHIFT=14 | 12 | CONFIG_LOG_BUF_SHIFT=14 |
13 | CONFIG_SYSFS_DEPRECATED_V2=y | 13 | CONFIG_SYSFS_DEPRECATED_V2=y |
14 | CONFIG_BLK_DEV_INITRD=y | 14 | CONFIG_BLK_DEV_INITRD=y |
15 | CONFIG_EMBEDDED=y | 15 | CONFIG_EXPERT=y |
16 | # CONFIG_HOTPLUG is not set | 16 | # CONFIG_HOTPLUG is not set |
17 | # CONFIG_PCSPKR_PLATFORM is not set | 17 | # CONFIG_PCSPKR_PLATFORM is not set |
18 | # CONFIG_EPOLL is not set | 18 | # CONFIG_EPOLL is not set |
diff --git a/arch/mips/configs/rm200_defconfig b/arch/mips/configs/rm200_defconfig index 2b3e47653f60..2c0230e76d20 100644 --- a/arch/mips/configs/rm200_defconfig +++ b/arch/mips/configs/rm200_defconfig | |||
@@ -12,7 +12,7 @@ CONFIG_IKCONFIG_PROC=y | |||
12 | CONFIG_LOG_BUF_SHIFT=14 | 12 | CONFIG_LOG_BUF_SHIFT=14 |
13 | CONFIG_RELAY=y | 13 | CONFIG_RELAY=y |
14 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 14 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
15 | CONFIG_EMBEDDED=y | 15 | CONFIG_EXPERT=y |
16 | CONFIG_SLAB=y | 16 | CONFIG_SLAB=y |
17 | CONFIG_MODULES=y | 17 | CONFIG_MODULES=y |
18 | CONFIG_MODULE_UNLOAD=y | 18 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/mips/configs/sb1250-swarm_defconfig b/arch/mips/configs/sb1250-swarm_defconfig index 64840d717750..5b0463ef9389 100644 --- a/arch/mips/configs/sb1250-swarm_defconfig +++ b/arch/mips/configs/sb1250-swarm_defconfig | |||
@@ -15,7 +15,7 @@ CONFIG_RELAY=y | |||
15 | CONFIG_NAMESPACES=y | 15 | CONFIG_NAMESPACES=y |
16 | CONFIG_BLK_DEV_INITRD=y | 16 | CONFIG_BLK_DEV_INITRD=y |
17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
18 | CONFIG_EMBEDDED=y | 18 | CONFIG_EXPERT=y |
19 | # CONFIG_COMPAT_BRK is not set | 19 | # CONFIG_COMPAT_BRK is not set |
20 | CONFIG_SLAB=y | 20 | CONFIG_SLAB=y |
21 | CONFIG_MODULES=y | 21 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/tb0219_defconfig b/arch/mips/configs/tb0219_defconfig index d9be37fc9cb7..30036b4cbeb1 100644 --- a/arch/mips/configs/tb0219_defconfig +++ b/arch/mips/configs/tb0219_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_SYSVIPC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_PCSPKR_PLATFORM is not set | 9 | # CONFIG_PCSPKR_PLATFORM is not set |
10 | CONFIG_SLAB=y | 10 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/tb0226_defconfig b/arch/mips/configs/tb0226_defconfig index 3d25dd08907b..81bfa1d4d8e3 100644 --- a/arch/mips/configs/tb0226_defconfig +++ b/arch/mips/configs/tb0226_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_SYSVIPC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_PCSPKR_PLATFORM is not set | 9 | # CONFIG_PCSPKR_PLATFORM is not set |
10 | CONFIG_SLAB=y | 10 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/mips/configs/tb0287_defconfig b/arch/mips/configs/tb0287_defconfig index be697c9b23c6..c415c4f0e5c2 100644 --- a/arch/mips/configs/tb0287_defconfig +++ b/arch/mips/configs/tb0287_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_SYSFS_DEPRECATED_V2=y | 5 | CONFIG_SYSFS_DEPRECATED_V2=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_SYSCTL_SYSCALL is not set | 8 | # CONFIG_SYSCTL_SYSCALL is not set |
9 | # CONFIG_PCSPKR_PLATFORM is not set | 9 | # CONFIG_PCSPKR_PLATFORM is not set |
10 | CONFIG_SLAB=y | 10 | CONFIG_SLAB=y |
diff --git a/arch/mips/configs/workpad_defconfig b/arch/mips/configs/workpad_defconfig index 7ec9287254d8..ee4b2be43c44 100644 --- a/arch/mips/configs/workpad_defconfig +++ b/arch/mips/configs/workpad_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_EXPERIMENTAL=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/mips/configs/wrppmc_defconfig b/arch/mips/configs/wrppmc_defconfig index a231b73b1a40..44a451be359e 100644 --- a/arch/mips/configs/wrppmc_defconfig +++ b/arch/mips/configs/wrppmc_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
7 | CONFIG_LOG_BUF_SHIFT=14 | 7 | CONFIG_LOG_BUF_SHIFT=14 |
8 | CONFIG_BLK_DEV_INITRD=y | 8 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | CONFIG_KALLSYMS_EXTRA_PASS=y | 11 | CONFIG_KALLSYMS_EXTRA_PASS=y |
12 | # CONFIG_EPOLL is not set | 12 | # CONFIG_EPOLL is not set |
13 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
diff --git a/arch/mips/configs/yosemite_defconfig b/arch/mips/configs/yosemite_defconfig index ab3a3dcec04d..f72d305a3f08 100644 --- a/arch/mips/configs/yosemite_defconfig +++ b/arch/mips/configs/yosemite_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_IKCONFIG=y | |||
8 | CONFIG_IKCONFIG_PROC=y | 8 | CONFIG_IKCONFIG_PROC=y |
9 | CONFIG_LOG_BUF_SHIFT=14 | 9 | CONFIG_LOG_BUF_SHIFT=14 |
10 | CONFIG_RELAY=y | 10 | CONFIG_RELAY=y |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | CONFIG_SLAB=y | 12 | CONFIG_SLAB=y |
13 | CONFIG_MODULES=y | 13 | CONFIG_MODULES=y |
14 | CONFIG_MODULE_UNLOAD=y | 14 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/mips/include/asm/cache.h b/arch/mips/include/asm/cache.h index 37f175c42bb5..650ac9ba734c 100644 --- a/arch/mips/include/asm/cache.h +++ b/arch/mips/include/asm/cache.h | |||
@@ -17,4 +17,6 @@ | |||
17 | #define SMP_CACHE_SHIFT L1_CACHE_SHIFT | 17 | #define SMP_CACHE_SHIFT L1_CACHE_SHIFT |
18 | #define SMP_CACHE_BYTES L1_CACHE_BYTES | 18 | #define SMP_CACHE_BYTES L1_CACHE_BYTES |
19 | 19 | ||
20 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | ||
21 | |||
20 | #endif /* _ASM_CACHE_H */ | 22 | #endif /* _ASM_CACHE_H */ |
diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h index b39def3f6e03..c454550eb0c0 100644 --- a/arch/mips/include/asm/cpu-info.h +++ b/arch/mips/include/asm/cpu-info.h | |||
@@ -78,6 +78,7 @@ struct cpuinfo_mips { | |||
78 | unsigned int watch_reg_use_cnt; /* Usable by ptrace */ | 78 | unsigned int watch_reg_use_cnt; /* Usable by ptrace */ |
79 | #define NUM_WATCH_REGS 4 | 79 | #define NUM_WATCH_REGS 4 |
80 | u16 watch_reg_masks[NUM_WATCH_REGS]; | 80 | u16 watch_reg_masks[NUM_WATCH_REGS]; |
81 | unsigned int kscratch_mask; /* Usable KScratch mask. */ | ||
81 | } __attribute__((aligned(SMP_CACHE_BYTES))); | 82 | } __attribute__((aligned(SMP_CACHE_BYTES))); |
82 | 83 | ||
83 | extern struct cpuinfo_mips cpu_data[]; | 84 | extern struct cpuinfo_mips cpu_data[]; |
diff --git a/arch/mips/include/asm/inst.h b/arch/mips/include/asm/inst.h index 444ff71aa0e8..7ebfc392e58d 100644 --- a/arch/mips/include/asm/inst.h +++ b/arch/mips/include/asm/inst.h | |||
@@ -72,6 +72,7 @@ enum spec2_op { | |||
72 | enum spec3_op { | 72 | enum spec3_op { |
73 | ext_op, dextm_op, dextu_op, dext_op, | 73 | ext_op, dextm_op, dextu_op, dext_op, |
74 | ins_op, dinsm_op, dinsu_op, dins_op, | 74 | ins_op, dinsm_op, dinsu_op, dins_op, |
75 | lx_op = 0x0a, | ||
75 | bshfl_op = 0x20, | 76 | bshfl_op = 0x20, |
76 | dbshfl_op = 0x24, | 77 | dbshfl_op = 0x24, |
77 | rdhwr_op = 0x3b | 78 | rdhwr_op = 0x3b |
@@ -179,6 +180,19 @@ enum mad_func { | |||
179 | }; | 180 | }; |
180 | 181 | ||
181 | /* | 182 | /* |
183 | * func field for special3 lx opcodes (Cavium Octeon). | ||
184 | */ | ||
185 | enum lx_func { | ||
186 | lwx_op = 0x00, | ||
187 | lhx_op = 0x04, | ||
188 | lbux_op = 0x06, | ||
189 | ldx_op = 0x08, | ||
190 | lwux_op = 0x10, | ||
191 | lhux_op = 0x14, | ||
192 | lbx_op = 0x16, | ||
193 | }; | ||
194 | |||
195 | /* | ||
182 | * Damn ... bitfields depend from byteorder :-( | 196 | * Damn ... bitfields depend from byteorder :-( |
183 | */ | 197 | */ |
184 | #ifdef __MIPSEB__ | 198 | #ifdef __MIPSEB__ |
diff --git a/arch/mips/include/asm/jump_label.h b/arch/mips/include/asm/jump_label.h new file mode 100644 index 000000000000..7622ccf75076 --- /dev/null +++ b/arch/mips/include/asm/jump_label.h | |||
@@ -0,0 +1,48 @@ | |||
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) 2010 Cavium Networks, Inc. | ||
7 | */ | ||
8 | #ifndef _ASM_MIPS_JUMP_LABEL_H | ||
9 | #define _ASM_MIPS_JUMP_LABEL_H | ||
10 | |||
11 | #include <linux/types.h> | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | |||
15 | #define JUMP_LABEL_NOP_SIZE 4 | ||
16 | |||
17 | #ifdef CONFIG_64BIT | ||
18 | #define WORD_INSN ".dword" | ||
19 | #else | ||
20 | #define WORD_INSN ".word" | ||
21 | #endif | ||
22 | |||
23 | #define JUMP_LABEL(key, label) \ | ||
24 | do { \ | ||
25 | asm goto("1:\tnop\n\t" \ | ||
26 | "nop\n\t" \ | ||
27 | ".pushsection __jump_table, \"a\"\n\t" \ | ||
28 | WORD_INSN " 1b, %l[" #label "], %0\n\t" \ | ||
29 | ".popsection\n\t" \ | ||
30 | : : "i" (key) : : label); \ | ||
31 | } while (0) | ||
32 | |||
33 | |||
34 | #endif /* __KERNEL__ */ | ||
35 | |||
36 | #ifdef CONFIG_64BIT | ||
37 | typedef u64 jump_label_t; | ||
38 | #else | ||
39 | typedef u32 jump_label_t; | ||
40 | #endif | ||
41 | |||
42 | struct jump_entry { | ||
43 | jump_label_t code; | ||
44 | jump_label_t target; | ||
45 | jump_label_t key; | ||
46 | }; | ||
47 | |||
48 | #endif /* _ASM_MIPS_JUMP_LABEL_H */ | ||
diff --git a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h new file mode 100644 index 000000000000..cda1c8070b27 --- /dev/null +++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h | |||
@@ -0,0 +1,233 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X SoC register definitions | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * Parts of this file are based on Atheros' 2.6.15 BSP | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License version 2 as published | ||
11 | * by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_MACH_AR71XX_REGS_H | ||
15 | #define __ASM_MACH_AR71XX_REGS_H | ||
16 | |||
17 | #include <linux/types.h> | ||
18 | #include <linux/init.h> | ||
19 | #include <linux/io.h> | ||
20 | #include <linux/bitops.h> | ||
21 | |||
22 | #define AR71XX_APB_BASE 0x18000000 | ||
23 | #define AR71XX_SPI_BASE 0x1f000000 | ||
24 | #define AR71XX_SPI_SIZE 0x01000000 | ||
25 | |||
26 | #define AR71XX_DDR_CTRL_BASE (AR71XX_APB_BASE + 0x00000000) | ||
27 | #define AR71XX_DDR_CTRL_SIZE 0x100 | ||
28 | #define AR71XX_UART_BASE (AR71XX_APB_BASE + 0x00020000) | ||
29 | #define AR71XX_UART_SIZE 0x100 | ||
30 | #define AR71XX_GPIO_BASE (AR71XX_APB_BASE + 0x00040000) | ||
31 | #define AR71XX_GPIO_SIZE 0x100 | ||
32 | #define AR71XX_PLL_BASE (AR71XX_APB_BASE + 0x00050000) | ||
33 | #define AR71XX_PLL_SIZE 0x100 | ||
34 | #define AR71XX_RESET_BASE (AR71XX_APB_BASE + 0x00060000) | ||
35 | #define AR71XX_RESET_SIZE 0x100 | ||
36 | |||
37 | #define AR913X_WMAC_BASE (AR71XX_APB_BASE + 0x000C0000) | ||
38 | #define AR913X_WMAC_SIZE 0x30000 | ||
39 | |||
40 | /* | ||
41 | * DDR_CTRL block | ||
42 | */ | ||
43 | #define AR71XX_DDR_REG_PCI_WIN0 0x7c | ||
44 | #define AR71XX_DDR_REG_PCI_WIN1 0x80 | ||
45 | #define AR71XX_DDR_REG_PCI_WIN2 0x84 | ||
46 | #define AR71XX_DDR_REG_PCI_WIN3 0x88 | ||
47 | #define AR71XX_DDR_REG_PCI_WIN4 0x8c | ||
48 | #define AR71XX_DDR_REG_PCI_WIN5 0x90 | ||
49 | #define AR71XX_DDR_REG_PCI_WIN6 0x94 | ||
50 | #define AR71XX_DDR_REG_PCI_WIN7 0x98 | ||
51 | #define AR71XX_DDR_REG_FLUSH_GE0 0x9c | ||
52 | #define AR71XX_DDR_REG_FLUSH_GE1 0xa0 | ||
53 | #define AR71XX_DDR_REG_FLUSH_USB 0xa4 | ||
54 | #define AR71XX_DDR_REG_FLUSH_PCI 0xa8 | ||
55 | |||
56 | #define AR724X_DDR_REG_FLUSH_GE0 0x7c | ||
57 | #define AR724X_DDR_REG_FLUSH_GE1 0x80 | ||
58 | #define AR724X_DDR_REG_FLUSH_USB 0x84 | ||
59 | #define AR724X_DDR_REG_FLUSH_PCIE 0x88 | ||
60 | |||
61 | #define AR913X_DDR_REG_FLUSH_GE0 0x7c | ||
62 | #define AR913X_DDR_REG_FLUSH_GE1 0x80 | ||
63 | #define AR913X_DDR_REG_FLUSH_USB 0x84 | ||
64 | #define AR913X_DDR_REG_FLUSH_WMAC 0x88 | ||
65 | |||
66 | /* | ||
67 | * PLL block | ||
68 | */ | ||
69 | #define AR71XX_PLL_REG_CPU_CONFIG 0x00 | ||
70 | #define AR71XX_PLL_REG_SEC_CONFIG 0x04 | ||
71 | #define AR71XX_PLL_REG_ETH0_INT_CLOCK 0x10 | ||
72 | #define AR71XX_PLL_REG_ETH1_INT_CLOCK 0x14 | ||
73 | |||
74 | #define AR71XX_PLL_DIV_SHIFT 3 | ||
75 | #define AR71XX_PLL_DIV_MASK 0x1f | ||
76 | #define AR71XX_CPU_DIV_SHIFT 16 | ||
77 | #define AR71XX_CPU_DIV_MASK 0x3 | ||
78 | #define AR71XX_DDR_DIV_SHIFT 18 | ||
79 | #define AR71XX_DDR_DIV_MASK 0x3 | ||
80 | #define AR71XX_AHB_DIV_SHIFT 20 | ||
81 | #define AR71XX_AHB_DIV_MASK 0x7 | ||
82 | |||
83 | #define AR724X_PLL_REG_CPU_CONFIG 0x00 | ||
84 | #define AR724X_PLL_REG_PCIE_CONFIG 0x18 | ||
85 | |||
86 | #define AR724X_PLL_DIV_SHIFT 0 | ||
87 | #define AR724X_PLL_DIV_MASK 0x3ff | ||
88 | #define AR724X_PLL_REF_DIV_SHIFT 10 | ||
89 | #define AR724X_PLL_REF_DIV_MASK 0xf | ||
90 | #define AR724X_AHB_DIV_SHIFT 19 | ||
91 | #define AR724X_AHB_DIV_MASK 0x1 | ||
92 | #define AR724X_DDR_DIV_SHIFT 22 | ||
93 | #define AR724X_DDR_DIV_MASK 0x3 | ||
94 | |||
95 | #define AR913X_PLL_REG_CPU_CONFIG 0x00 | ||
96 | #define AR913X_PLL_REG_ETH_CONFIG 0x04 | ||
97 | #define AR913X_PLL_REG_ETH0_INT_CLOCK 0x14 | ||
98 | #define AR913X_PLL_REG_ETH1_INT_CLOCK 0x18 | ||
99 | |||
100 | #define AR913X_PLL_DIV_SHIFT 0 | ||
101 | #define AR913X_PLL_DIV_MASK 0x3ff | ||
102 | #define AR913X_DDR_DIV_SHIFT 22 | ||
103 | #define AR913X_DDR_DIV_MASK 0x3 | ||
104 | #define AR913X_AHB_DIV_SHIFT 19 | ||
105 | #define AR913X_AHB_DIV_MASK 0x1 | ||
106 | |||
107 | /* | ||
108 | * RESET block | ||
109 | */ | ||
110 | #define AR71XX_RESET_REG_TIMER 0x00 | ||
111 | #define AR71XX_RESET_REG_TIMER_RELOAD 0x04 | ||
112 | #define AR71XX_RESET_REG_WDOG_CTRL 0x08 | ||
113 | #define AR71XX_RESET_REG_WDOG 0x0c | ||
114 | #define AR71XX_RESET_REG_MISC_INT_STATUS 0x10 | ||
115 | #define AR71XX_RESET_REG_MISC_INT_ENABLE 0x14 | ||
116 | #define AR71XX_RESET_REG_PCI_INT_STATUS 0x18 | ||
117 | #define AR71XX_RESET_REG_PCI_INT_ENABLE 0x1c | ||
118 | #define AR71XX_RESET_REG_GLOBAL_INT_STATUS 0x20 | ||
119 | #define AR71XX_RESET_REG_RESET_MODULE 0x24 | ||
120 | #define AR71XX_RESET_REG_PERFC_CTRL 0x2c | ||
121 | #define AR71XX_RESET_REG_PERFC0 0x30 | ||
122 | #define AR71XX_RESET_REG_PERFC1 0x34 | ||
123 | #define AR71XX_RESET_REG_REV_ID 0x90 | ||
124 | |||
125 | #define AR913X_RESET_REG_GLOBAL_INT_STATUS 0x18 | ||
126 | #define AR913X_RESET_REG_RESET_MODULE 0x1c | ||
127 | #define AR913X_RESET_REG_PERF_CTRL 0x20 | ||
128 | #define AR913X_RESET_REG_PERFC0 0x24 | ||
129 | #define AR913X_RESET_REG_PERFC1 0x28 | ||
130 | |||
131 | #define AR724X_RESET_REG_RESET_MODULE 0x1c | ||
132 | |||
133 | #define MISC_INT_DMA BIT(7) | ||
134 | #define MISC_INT_OHCI BIT(6) | ||
135 | #define MISC_INT_PERFC BIT(5) | ||
136 | #define MISC_INT_WDOG BIT(4) | ||
137 | #define MISC_INT_UART BIT(3) | ||
138 | #define MISC_INT_GPIO BIT(2) | ||
139 | #define MISC_INT_ERROR BIT(1) | ||
140 | #define MISC_INT_TIMER BIT(0) | ||
141 | |||
142 | #define AR71XX_RESET_EXTERNAL BIT(28) | ||
143 | #define AR71XX_RESET_FULL_CHIP BIT(24) | ||
144 | #define AR71XX_RESET_CPU_NMI BIT(21) | ||
145 | #define AR71XX_RESET_CPU_COLD BIT(20) | ||
146 | #define AR71XX_RESET_DMA BIT(19) | ||
147 | #define AR71XX_RESET_SLIC BIT(18) | ||
148 | #define AR71XX_RESET_STEREO BIT(17) | ||
149 | #define AR71XX_RESET_DDR BIT(16) | ||
150 | #define AR71XX_RESET_GE1_MAC BIT(13) | ||
151 | #define AR71XX_RESET_GE1_PHY BIT(12) | ||
152 | #define AR71XX_RESET_USBSUS_OVERRIDE BIT(10) | ||
153 | #define AR71XX_RESET_GE0_MAC BIT(9) | ||
154 | #define AR71XX_RESET_GE0_PHY BIT(8) | ||
155 | #define AR71XX_RESET_USB_OHCI_DLL BIT(6) | ||
156 | #define AR71XX_RESET_USB_HOST BIT(5) | ||
157 | #define AR71XX_RESET_USB_PHY BIT(4) | ||
158 | #define AR71XX_RESET_PCI_BUS BIT(1) | ||
159 | #define AR71XX_RESET_PCI_CORE BIT(0) | ||
160 | |||
161 | #define AR724X_RESET_GE1_MDIO BIT(23) | ||
162 | #define AR724X_RESET_GE0_MDIO BIT(22) | ||
163 | #define AR724X_RESET_PCIE_PHY_SERIAL BIT(10) | ||
164 | #define AR724X_RESET_PCIE_PHY BIT(7) | ||
165 | #define AR724X_RESET_PCIE BIT(6) | ||
166 | #define AR724X_RESET_OHCI_DLL BIT(3) | ||
167 | |||
168 | #define AR913X_RESET_AMBA2WMAC BIT(22) | ||
169 | |||
170 | #define REV_ID_MAJOR_MASK 0xfff0 | ||
171 | #define REV_ID_MAJOR_AR71XX 0x00a0 | ||
172 | #define REV_ID_MAJOR_AR913X 0x00b0 | ||
173 | #define REV_ID_MAJOR_AR7240 0x00c0 | ||
174 | #define REV_ID_MAJOR_AR7241 0x0100 | ||
175 | #define REV_ID_MAJOR_AR7242 0x1100 | ||
176 | |||
177 | #define AR71XX_REV_ID_MINOR_MASK 0x3 | ||
178 | #define AR71XX_REV_ID_MINOR_AR7130 0x0 | ||
179 | #define AR71XX_REV_ID_MINOR_AR7141 0x1 | ||
180 | #define AR71XX_REV_ID_MINOR_AR7161 0x2 | ||
181 | #define AR71XX_REV_ID_REVISION_MASK 0x3 | ||
182 | #define AR71XX_REV_ID_REVISION_SHIFT 2 | ||
183 | |||
184 | #define AR913X_REV_ID_MINOR_MASK 0x3 | ||
185 | #define AR913X_REV_ID_MINOR_AR9130 0x0 | ||
186 | #define AR913X_REV_ID_MINOR_AR9132 0x1 | ||
187 | #define AR913X_REV_ID_REVISION_MASK 0x3 | ||
188 | #define AR913X_REV_ID_REVISION_SHIFT 2 | ||
189 | |||
190 | #define AR724X_REV_ID_REVISION_MASK 0x3 | ||
191 | |||
192 | /* | ||
193 | * SPI block | ||
194 | */ | ||
195 | #define AR71XX_SPI_REG_FS 0x00 /* Function Select */ | ||
196 | #define AR71XX_SPI_REG_CTRL 0x04 /* SPI Control */ | ||
197 | #define AR71XX_SPI_REG_IOC 0x08 /* SPI I/O Control */ | ||
198 | #define AR71XX_SPI_REG_RDS 0x0c /* Read Data Shift */ | ||
199 | |||
200 | #define AR71XX_SPI_FS_GPIO BIT(0) /* Enable GPIO mode */ | ||
201 | |||
202 | #define AR71XX_SPI_CTRL_RD BIT(6) /* Remap Disable */ | ||
203 | #define AR71XX_SPI_CTRL_DIV_MASK 0x3f | ||
204 | |||
205 | #define AR71XX_SPI_IOC_DO BIT(0) /* Data Out pin */ | ||
206 | #define AR71XX_SPI_IOC_CLK BIT(8) /* CLK pin */ | ||
207 | #define AR71XX_SPI_IOC_CS(n) BIT(16 + (n)) | ||
208 | #define AR71XX_SPI_IOC_CS0 AR71XX_SPI_IOC_CS(0) | ||
209 | #define AR71XX_SPI_IOC_CS1 AR71XX_SPI_IOC_CS(1) | ||
210 | #define AR71XX_SPI_IOC_CS2 AR71XX_SPI_IOC_CS(2) | ||
211 | #define AR71XX_SPI_IOC_CS_ALL (AR71XX_SPI_IOC_CS0 | AR71XX_SPI_IOC_CS1 | \ | ||
212 | AR71XX_SPI_IOC_CS2) | ||
213 | |||
214 | /* | ||
215 | * GPIO block | ||
216 | */ | ||
217 | #define AR71XX_GPIO_REG_OE 0x00 | ||
218 | #define AR71XX_GPIO_REG_IN 0x04 | ||
219 | #define AR71XX_GPIO_REG_OUT 0x08 | ||
220 | #define AR71XX_GPIO_REG_SET 0x0c | ||
221 | #define AR71XX_GPIO_REG_CLEAR 0x10 | ||
222 | #define AR71XX_GPIO_REG_INT_MODE 0x14 | ||
223 | #define AR71XX_GPIO_REG_INT_TYPE 0x18 | ||
224 | #define AR71XX_GPIO_REG_INT_POLARITY 0x1c | ||
225 | #define AR71XX_GPIO_REG_INT_PENDING 0x20 | ||
226 | #define AR71XX_GPIO_REG_INT_ENABLE 0x24 | ||
227 | #define AR71XX_GPIO_REG_FUNC 0x28 | ||
228 | |||
229 | #define AR71XX_GPIO_COUNT 16 | ||
230 | #define AR724X_GPIO_COUNT 18 | ||
231 | #define AR913X_GPIO_COUNT 22 | ||
232 | |||
233 | #endif /* __ASM_MACH_AR71XX_REGS_H */ | ||
diff --git a/arch/mips/include/asm/mach-ath79/ath79.h b/arch/mips/include/asm/mach-ath79/ath79.h new file mode 100644 index 000000000000..6a9f168506fe --- /dev/null +++ b/arch/mips/include/asm/mach-ath79/ath79.h | |||
@@ -0,0 +1,96 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X common definitions | ||
3 | * | ||
4 | * Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * Parts of this file are based on Atheros' 2.6.15 BSP | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License version 2 as published | ||
11 | * by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_MACH_ATH79_H | ||
15 | #define __ASM_MACH_ATH79_H | ||
16 | |||
17 | #include <linux/types.h> | ||
18 | #include <linux/io.h> | ||
19 | |||
20 | enum ath79_soc_type { | ||
21 | ATH79_SOC_UNKNOWN, | ||
22 | ATH79_SOC_AR7130, | ||
23 | ATH79_SOC_AR7141, | ||
24 | ATH79_SOC_AR7161, | ||
25 | ATH79_SOC_AR7240, | ||
26 | ATH79_SOC_AR7241, | ||
27 | ATH79_SOC_AR7242, | ||
28 | ATH79_SOC_AR9130, | ||
29 | ATH79_SOC_AR9132 | ||
30 | }; | ||
31 | |||
32 | extern enum ath79_soc_type ath79_soc; | ||
33 | |||
34 | static inline int soc_is_ar71xx(void) | ||
35 | { | ||
36 | return (ath79_soc == ATH79_SOC_AR7130 || | ||
37 | ath79_soc == ATH79_SOC_AR7141 || | ||
38 | ath79_soc == ATH79_SOC_AR7161); | ||
39 | } | ||
40 | |||
41 | static inline int soc_is_ar724x(void) | ||
42 | { | ||
43 | return (ath79_soc == ATH79_SOC_AR7240 || | ||
44 | ath79_soc == ATH79_SOC_AR7241 || | ||
45 | ath79_soc == ATH79_SOC_AR7242); | ||
46 | } | ||
47 | |||
48 | static inline int soc_is_ar7240(void) | ||
49 | { | ||
50 | return (ath79_soc == ATH79_SOC_AR7240); | ||
51 | } | ||
52 | |||
53 | static inline int soc_is_ar7241(void) | ||
54 | { | ||
55 | return (ath79_soc == ATH79_SOC_AR7241); | ||
56 | } | ||
57 | |||
58 | static inline int soc_is_ar7242(void) | ||
59 | { | ||
60 | return (ath79_soc == ATH79_SOC_AR7242); | ||
61 | } | ||
62 | |||
63 | static inline int soc_is_ar913x(void) | ||
64 | { | ||
65 | return (ath79_soc == ATH79_SOC_AR9130 || | ||
66 | ath79_soc == ATH79_SOC_AR9132); | ||
67 | } | ||
68 | |||
69 | extern void __iomem *ath79_ddr_base; | ||
70 | extern void __iomem *ath79_pll_base; | ||
71 | extern void __iomem *ath79_reset_base; | ||
72 | |||
73 | static inline void ath79_pll_wr(unsigned reg, u32 val) | ||
74 | { | ||
75 | __raw_writel(val, ath79_pll_base + reg); | ||
76 | } | ||
77 | |||
78 | static inline u32 ath79_pll_rr(unsigned reg) | ||
79 | { | ||
80 | return __raw_readl(ath79_pll_base + reg); | ||
81 | } | ||
82 | |||
83 | static inline void ath79_reset_wr(unsigned reg, u32 val) | ||
84 | { | ||
85 | __raw_writel(val, ath79_reset_base + reg); | ||
86 | } | ||
87 | |||
88 | static inline u32 ath79_reset_rr(unsigned reg) | ||
89 | { | ||
90 | return __raw_readl(ath79_reset_base + reg); | ||
91 | } | ||
92 | |||
93 | void ath79_device_reset_set(u32 mask); | ||
94 | void ath79_device_reset_clear(u32 mask); | ||
95 | |||
96 | #endif /* __ASM_MACH_ATH79_H */ | ||
diff --git a/arch/mips/include/asm/mach-ath79/ath79_spi_platform.h b/arch/mips/include/asm/mach-ath79/ath79_spi_platform.h new file mode 100644 index 000000000000..aa2283e602fc --- /dev/null +++ b/arch/mips/include/asm/mach-ath79/ath79_spi_platform.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * Platform data definition for Atheros AR71XX/AR724X/AR913X SPI controller | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
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 version 2 as published | ||
8 | * by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef _ATH79_SPI_PLATFORM_H | ||
12 | #define _ATH79_SPI_PLATFORM_H | ||
13 | |||
14 | struct ath79_spi_platform_data { | ||
15 | unsigned bus_num; | ||
16 | unsigned num_chipselect; | ||
17 | }; | ||
18 | |||
19 | struct ath79_spi_controller_data { | ||
20 | unsigned gpio; | ||
21 | }; | ||
22 | |||
23 | #endif /* _ATH79_SPI_PLATFORM_H */ | ||
diff --git a/arch/mips/include/asm/mach-ath79/cpu-feature-overrides.h b/arch/mips/include/asm/mach-ath79/cpu-feature-overrides.h new file mode 100644 index 000000000000..4476fa03bf36 --- /dev/null +++ b/arch/mips/include/asm/mach-ath79/cpu-feature-overrides.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X specific CPU feature overrides | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This file was derived from: include/asm-mips/cpu-features.h | ||
8 | * Copyright (C) 2003, 2004 Ralf Baechle | ||
9 | * Copyright (C) 2004 Maciej W. Rozycki | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify it | ||
12 | * under the terms of the GNU General Public License version 2 as published | ||
13 | * by the Free Software Foundation. | ||
14 | * | ||
15 | */ | ||
16 | #ifndef __ASM_MACH_ATH79_CPU_FEATURE_OVERRIDES_H | ||
17 | #define __ASM_MACH_ATH79_CPU_FEATURE_OVERRIDES_H | ||
18 | |||
19 | #define cpu_has_tlb 1 | ||
20 | #define cpu_has_4kex 1 | ||
21 | #define cpu_has_3k_cache 0 | ||
22 | #define cpu_has_4k_cache 1 | ||
23 | #define cpu_has_tx39_cache 0 | ||
24 | #define cpu_has_sb1_cache 0 | ||
25 | #define cpu_has_fpu 0 | ||
26 | #define cpu_has_32fpr 0 | ||
27 | #define cpu_has_counter 1 | ||
28 | #define cpu_has_watch 1 | ||
29 | #define cpu_has_divec 1 | ||
30 | |||
31 | #define cpu_has_prefetch 1 | ||
32 | #define cpu_has_ejtag 1 | ||
33 | #define cpu_has_llsc 1 | ||
34 | |||
35 | #define cpu_has_mips16 1 | ||
36 | #define cpu_has_mdmx 0 | ||
37 | #define cpu_has_mips3d 0 | ||
38 | #define cpu_has_smartmips 0 | ||
39 | |||
40 | #define cpu_has_mips32r1 1 | ||
41 | #define cpu_has_mips32r2 1 | ||
42 | #define cpu_has_mips64r1 0 | ||
43 | #define cpu_has_mips64r2 0 | ||
44 | |||
45 | #define cpu_has_dsp 0 | ||
46 | #define cpu_has_mipsmt 0 | ||
47 | |||
48 | #define cpu_has_64bits 0 | ||
49 | #define cpu_has_64bit_zero_reg 0 | ||
50 | #define cpu_has_64bit_gp_regs 0 | ||
51 | #define cpu_has_64bit_addresses 0 | ||
52 | |||
53 | #define cpu_dcache_line_size() 32 | ||
54 | #define cpu_icache_line_size() 32 | ||
55 | |||
56 | #endif /* __ASM_MACH_ATH79_CPU_FEATURE_OVERRIDES_H */ | ||
diff --git a/arch/mips/include/asm/mach-ath79/gpio.h b/arch/mips/include/asm/mach-ath79/gpio.h new file mode 100644 index 000000000000..60dcb62785b4 --- /dev/null +++ b/arch/mips/include/asm/mach-ath79/gpio.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X GPIO API definitions | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
5 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_MACH_ATH79_GPIO_H | ||
14 | #define __ASM_MACH_ATH79_GPIO_H | ||
15 | |||
16 | #define ARCH_NR_GPIOS 64 | ||
17 | #include <asm-generic/gpio.h> | ||
18 | |||
19 | int gpio_to_irq(unsigned gpio); | ||
20 | int irq_to_gpio(unsigned irq); | ||
21 | int gpio_get_value(unsigned gpio); | ||
22 | void gpio_set_value(unsigned gpio, int value); | ||
23 | |||
24 | #define gpio_cansleep __gpio_cansleep | ||
25 | |||
26 | #endif /* __ASM_MACH_ATH79_GPIO_H */ | ||
diff --git a/arch/mips/include/asm/mach-ath79/irq.h b/arch/mips/include/asm/mach-ath79/irq.h new file mode 100644 index 000000000000..189bc6eb9c10 --- /dev/null +++ b/arch/mips/include/asm/mach-ath79/irq.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
3 | * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License version 2 as published | ||
7 | * by the Free Software Foundation. | ||
8 | */ | ||
9 | #ifndef __ASM_MACH_ATH79_IRQ_H | ||
10 | #define __ASM_MACH_ATH79_IRQ_H | ||
11 | |||
12 | #define MIPS_CPU_IRQ_BASE 0 | ||
13 | #define NR_IRQS 16 | ||
14 | |||
15 | #define ATH79_MISC_IRQ_BASE 8 | ||
16 | #define ATH79_MISC_IRQ_COUNT 8 | ||
17 | |||
18 | #define ATH79_CPU_IRQ_IP2 (MIPS_CPU_IRQ_BASE + 2) | ||
19 | #define ATH79_CPU_IRQ_USB (MIPS_CPU_IRQ_BASE + 3) | ||
20 | #define ATH79_CPU_IRQ_GE0 (MIPS_CPU_IRQ_BASE + 4) | ||
21 | #define ATH79_CPU_IRQ_GE1 (MIPS_CPU_IRQ_BASE + 5) | ||
22 | #define ATH79_CPU_IRQ_MISC (MIPS_CPU_IRQ_BASE + 6) | ||
23 | #define ATH79_CPU_IRQ_TIMER (MIPS_CPU_IRQ_BASE + 7) | ||
24 | |||
25 | #define ATH79_MISC_IRQ_TIMER (ATH79_MISC_IRQ_BASE + 0) | ||
26 | #define ATH79_MISC_IRQ_ERROR (ATH79_MISC_IRQ_BASE + 1) | ||
27 | #define ATH79_MISC_IRQ_GPIO (ATH79_MISC_IRQ_BASE + 2) | ||
28 | #define ATH79_MISC_IRQ_UART (ATH79_MISC_IRQ_BASE + 3) | ||
29 | #define ATH79_MISC_IRQ_WDOG (ATH79_MISC_IRQ_BASE + 4) | ||
30 | #define ATH79_MISC_IRQ_PERFC (ATH79_MISC_IRQ_BASE + 5) | ||
31 | #define ATH79_MISC_IRQ_OHCI (ATH79_MISC_IRQ_BASE + 6) | ||
32 | #define ATH79_MISC_IRQ_DMA (ATH79_MISC_IRQ_BASE + 7) | ||
33 | |||
34 | #include_next <irq.h> | ||
35 | |||
36 | #endif /* __ASM_MACH_ATH79_IRQ_H */ | ||
diff --git a/arch/mips/include/asm/mach-ath79/kernel-entry-init.h b/arch/mips/include/asm/mach-ath79/kernel-entry-init.h new file mode 100644 index 000000000000..d8d046bccc8e --- /dev/null +++ b/arch/mips/include/asm/mach-ath79/kernel-entry-init.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * Atheros AR71XX/AR724X/AR913X specific kernel entry setup | ||
3 | * | ||
4 | * Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org> | ||
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 version 2 as published | ||
8 | * by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | #ifndef __ASM_MACH_ATH79_KERNEL_ENTRY_H | ||
12 | #define __ASM_MACH_ATH79_KERNEL_ENTRY_H | ||
13 | |||
14 | /* | ||
15 | * Some bootloaders set the 'Kseg0 coherency algorithm' to | ||
16 | * 'Cacheable, noncoherent, write-through, no write allocate' | ||
17 | * and this cause performance issues. Let's go and change it to | ||
18 | * 'Cacheable, noncoherent, write-back, write allocate' | ||
19 | */ | ||
20 | .macro kernel_entry_setup | ||
21 | mfc0 t0, CP0_CONFIG | ||
22 | li t1, ~CONF_CM_CMASK | ||
23 | and t0, t1 | ||
24 | ori t0, CONF_CM_CACHABLE_NONCOHERENT | ||
25 | mtc0 t0, CP0_CONFIG | ||
26 | nop | ||
27 | .endm | ||
28 | |||
29 | .macro smp_slave_setup | ||
30 | .endm | ||
31 | |||
32 | #endif /* __ASM_MACH_ATH79_KERNEL_ENTRY_H */ | ||
diff --git a/arch/mips/include/asm/mach-ath79/war.h b/arch/mips/include/asm/mach-ath79/war.h new file mode 100644 index 000000000000..323d9f1d8c45 --- /dev/null +++ b/arch/mips/include/asm/mach-ath79/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_MACH_ATH79_WAR_H | ||
9 | #define __ASM_MACH_ATH79_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_MACH_ATH79_WAR_H */ | ||
diff --git a/arch/mips/include/asm/mips_machine.h b/arch/mips/include/asm/mips_machine.h new file mode 100644 index 000000000000..363bb352c7f7 --- /dev/null +++ b/arch/mips/include/asm/mips_machine.h | |||
@@ -0,0 +1,54 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License version 2 as published | ||
6 | * by the Free Software Foundation. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef __ASM_MIPS_MACHINE_H | ||
11 | #define __ASM_MIPS_MACHINE_H | ||
12 | |||
13 | #include <linux/init.h> | ||
14 | #include <linux/stddef.h> | ||
15 | |||
16 | #include <asm/bootinfo.h> | ||
17 | |||
18 | struct mips_machine { | ||
19 | unsigned long mach_type; | ||
20 | const char *mach_id; | ||
21 | const char *mach_name; | ||
22 | void (*mach_setup)(void); | ||
23 | }; | ||
24 | |||
25 | #define MIPS_MACHINE(_type, _id, _name, _setup) \ | ||
26 | static const char machine_name_##_type[] __initconst \ | ||
27 | __aligned(1) = _name; \ | ||
28 | static const char machine_id_##_type[] __initconst \ | ||
29 | __aligned(1) = _id; \ | ||
30 | static struct mips_machine machine_##_type \ | ||
31 | __used __section(.mips.machines.init) = \ | ||
32 | { \ | ||
33 | .mach_type = _type, \ | ||
34 | .mach_id = machine_id_##_type, \ | ||
35 | .mach_name = machine_name_##_type, \ | ||
36 | .mach_setup = _setup, \ | ||
37 | }; | ||
38 | |||
39 | extern long __mips_machines_start; | ||
40 | extern long __mips_machines_end; | ||
41 | |||
42 | #ifdef CONFIG_MIPS_MACHINE | ||
43 | int mips_machtype_setup(char *id) __init; | ||
44 | void mips_machine_setup(void) __init; | ||
45 | void mips_set_machine_name(const char *name) __init; | ||
46 | char *mips_get_machine_name(void); | ||
47 | #else | ||
48 | static inline int mips_machtype_setup(char *id) { return 1; } | ||
49 | static inline void mips_machine_setup(void) { } | ||
50 | static inline void mips_set_machine_name(const char *name) { } | ||
51 | static inline char *mips_get_machine_name(void) { return NULL; } | ||
52 | #endif /* CONFIG_MIPS_MACHINE */ | ||
53 | |||
54 | #endif /* __ASM_MIPS_MACHINE_H */ | ||
diff --git a/arch/mips/include/asm/mmu_context.h b/arch/mips/include/asm/mmu_context.h index d9592733a7ba..73c0d45798de 100644 --- a/arch/mips/include/asm/mmu_context.h +++ b/arch/mips/include/asm/mmu_context.h | |||
@@ -29,13 +29,7 @@ | |||
29 | #define TLBMISS_HANDLER_SETUP_PGD(pgd) \ | 29 | #define TLBMISS_HANDLER_SETUP_PGD(pgd) \ |
30 | tlbmiss_handler_setup_pgd((unsigned long)(pgd)) | 30 | tlbmiss_handler_setup_pgd((unsigned long)(pgd)) |
31 | 31 | ||
32 | static inline void tlbmiss_handler_setup_pgd(unsigned long pgd) | 32 | extern void tlbmiss_handler_setup_pgd(unsigned long pgd); |
33 | { | ||
34 | /* Check for swapper_pg_dir and convert to physical address. */ | ||
35 | if ((pgd & CKSEG3) == CKSEG0) | ||
36 | pgd = CPHYSADDR(pgd); | ||
37 | write_c0_context(pgd << 11); | ||
38 | } | ||
39 | 33 | ||
40 | #define TLBMISS_HANDLER_SETUP() \ | 34 | #define TLBMISS_HANDLER_SETUP() \ |
41 | do { \ | 35 | do { \ |
diff --git a/arch/mips/include/asm/uasm.h b/arch/mips/include/asm/uasm.h index 892062d6d748..dcbd4bb417ec 100644 --- a/arch/mips/include/asm/uasm.h +++ b/arch/mips/include/asm/uasm.h | |||
@@ -115,7 +115,12 @@ Ip_0(_tlbwr); | |||
115 | Ip_u3u1u2(_xor); | 115 | Ip_u3u1u2(_xor); |
116 | Ip_u2u1u3(_xori); | 116 | Ip_u2u1u3(_xori); |
117 | Ip_u2u1msbu3(_dins); | 117 | Ip_u2u1msbu3(_dins); |
118 | Ip_u2u1msbu3(_dinsm); | ||
118 | Ip_u1(_syscall); | 119 | Ip_u1(_syscall); |
120 | Ip_u1u2s3(_bbit0); | ||
121 | Ip_u1u2s3(_bbit1); | ||
122 | Ip_u3u1u2(_lwx); | ||
123 | Ip_u3u1u2(_ldx); | ||
119 | 124 | ||
120 | /* Handle labels. */ | 125 | /* Handle labels. */ |
121 | struct uasm_label { | 126 | struct uasm_label { |
@@ -153,6 +158,7 @@ static inline void __uasminit uasm_l##lb(struct uasm_label **lab, u32 *addr) \ | |||
153 | # define UASM_i_SUBU(buf, rs, rt, rd) uasm_i_dsubu(buf, rs, rt, rd) | 158 | # define UASM_i_SUBU(buf, rs, rt, rd) uasm_i_dsubu(buf, rs, rt, rd) |
154 | # define UASM_i_LL(buf, rs, rt, off) uasm_i_lld(buf, rs, rt, off) | 159 | # define UASM_i_LL(buf, rs, rt, off) uasm_i_lld(buf, rs, rt, off) |
155 | # define UASM_i_SC(buf, rs, rt, off) uasm_i_scd(buf, rs, rt, off) | 160 | # define UASM_i_SC(buf, rs, rt, off) uasm_i_scd(buf, rs, rt, off) |
161 | # define UASM_i_LWX(buf, rs, rt, rd) uasm_i_ldx(buf, rs, rt, rd) | ||
156 | #else | 162 | #else |
157 | # define UASM_i_LW(buf, rs, rt, off) uasm_i_lw(buf, rs, rt, off) | 163 | # define UASM_i_LW(buf, rs, rt, off) uasm_i_lw(buf, rs, rt, off) |
158 | # define UASM_i_SW(buf, rs, rt, off) uasm_i_sw(buf, rs, rt, off) | 164 | # define UASM_i_SW(buf, rs, rt, off) uasm_i_sw(buf, rs, rt, off) |
@@ -167,6 +173,7 @@ static inline void __uasminit uasm_l##lb(struct uasm_label **lab, u32 *addr) \ | |||
167 | # define UASM_i_SUBU(buf, rs, rt, rd) uasm_i_subu(buf, rs, rt, rd) | 173 | # define UASM_i_SUBU(buf, rs, rt, rd) uasm_i_subu(buf, rs, rt, rd) |
168 | # define UASM_i_LL(buf, rs, rt, off) uasm_i_ll(buf, rs, rt, off) | 174 | # define UASM_i_LL(buf, rs, rt, off) uasm_i_ll(buf, rs, rt, off) |
169 | # define UASM_i_SC(buf, rs, rt, off) uasm_i_sc(buf, rs, rt, off) | 175 | # define UASM_i_SC(buf, rs, rt, off) uasm_i_sc(buf, rs, rt, off) |
176 | # define UASM_i_LWX(buf, rs, rt, rd) uasm_i_lwx(buf, rs, rt, rd) | ||
170 | #endif | 177 | #endif |
171 | 178 | ||
172 | #define uasm_i_b(buf, off) uasm_i_beq(buf, 0, 0, off) | 179 | #define uasm_i_b(buf, off) uasm_i_beq(buf, 0, 0, off) |
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile index 22b2e0e38617..cedee2bcbd18 100644 --- a/arch/mips/kernel/Makefile +++ b/arch/mips/kernel/Makefile | |||
@@ -95,6 +95,7 @@ obj-$(CONFIG_GPIO_TXX9) += gpio_txx9.o | |||
95 | obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o | 95 | obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o |
96 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | 96 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o |
97 | obj-$(CONFIG_SPINLOCK_TEST) += spinlock_test.o | 97 | obj-$(CONFIG_SPINLOCK_TEST) += spinlock_test.o |
98 | obj-$(CONFIG_MIPS_MACHINE) += mips_machine.o | ||
98 | 99 | ||
99 | obj-$(CONFIG_OF) += prom.o | 100 | obj-$(CONFIG_OF) += prom.o |
100 | 101 | ||
@@ -106,4 +107,6 @@ obj-$(CONFIG_MIPS_CPUFREQ) += cpufreq/ | |||
106 | 107 | ||
107 | obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o | 108 | obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o |
108 | 109 | ||
110 | obj-$(CONFIG_JUMP_LABEL) += jump_label.o | ||
111 | |||
109 | CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS) | 112 | CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS) |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 68dae7b6b5db..f65d4c8c65a6 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -739,6 +739,8 @@ static inline unsigned int decode_config4(struct cpuinfo_mips *c) | |||
739 | && cpu_has_tlb) | 739 | && cpu_has_tlb) |
740 | c->tlbsize += (config4 & MIPS_CONF4_MMUSIZEEXT) * 0x40; | 740 | c->tlbsize += (config4 & MIPS_CONF4_MMUSIZEEXT) * 0x40; |
741 | 741 | ||
742 | c->kscratch_mask = (config4 >> 16) & 0xff; | ||
743 | |||
742 | return config4 & MIPS_CONF_M; | 744 | return config4 & MIPS_CONF_M; |
743 | } | 745 | } |
744 | 746 | ||
diff --git a/arch/mips/kernel/jump_label.c b/arch/mips/kernel/jump_label.c new file mode 100644 index 000000000000..6001610cfe55 --- /dev/null +++ b/arch/mips/kernel/jump_label.c | |||
@@ -0,0 +1,54 @@ | |||
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) 2010 Cavium Networks, Inc. | ||
7 | */ | ||
8 | |||
9 | #include <linux/jump_label.h> | ||
10 | #include <linux/kernel.h> | ||
11 | #include <linux/memory.h> | ||
12 | #include <linux/mutex.h> | ||
13 | #include <linux/types.h> | ||
14 | #include <linux/cpu.h> | ||
15 | |||
16 | #include <asm/cacheflush.h> | ||
17 | #include <asm/inst.h> | ||
18 | |||
19 | #ifdef HAVE_JUMP_LABEL | ||
20 | |||
21 | #define J_RANGE_MASK ((1ul << 28) - 1) | ||
22 | |||
23 | void arch_jump_label_transform(struct jump_entry *e, | ||
24 | enum jump_label_type type) | ||
25 | { | ||
26 | union mips_instruction insn; | ||
27 | union mips_instruction *insn_p = | ||
28 | (union mips_instruction *)(unsigned long)e->code; | ||
29 | |||
30 | /* Jump only works within a 256MB aligned region. */ | ||
31 | BUG_ON((e->target & ~J_RANGE_MASK) != (e->code & ~J_RANGE_MASK)); | ||
32 | |||
33 | /* Target must have 4 byte alignment. */ | ||
34 | BUG_ON((e->target & 3) != 0); | ||
35 | |||
36 | if (type == JUMP_LABEL_ENABLE) { | ||
37 | insn.j_format.opcode = j_op; | ||
38 | insn.j_format.target = (e->target & J_RANGE_MASK) >> 2; | ||
39 | } else { | ||
40 | insn.word = 0; /* nop */ | ||
41 | } | ||
42 | |||
43 | get_online_cpus(); | ||
44 | mutex_lock(&text_mutex); | ||
45 | *insn_p = insn; | ||
46 | |||
47 | flush_icache_range((unsigned long)insn_p, | ||
48 | (unsigned long)insn_p + sizeof(*insn_p)); | ||
49 | |||
50 | mutex_unlock(&text_mutex); | ||
51 | put_online_cpus(); | ||
52 | } | ||
53 | |||
54 | #endif /* HAVE_JUMP_LABEL */ | ||
diff --git a/arch/mips/kernel/mips_machine.c b/arch/mips/kernel/mips_machine.c new file mode 100644 index 000000000000..411a058d2c53 --- /dev/null +++ b/arch/mips/kernel/mips_machine.c | |||
@@ -0,0 +1,86 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License version 2 as published | ||
6 | * by the Free Software Foundation. | ||
7 | * | ||
8 | */ | ||
9 | #include <linux/mm.h> | ||
10 | #include <linux/string.h> | ||
11 | #include <linux/slab.h> | ||
12 | |||
13 | #include <asm/mips_machine.h> | ||
14 | |||
15 | static struct mips_machine *mips_machine __initdata; | ||
16 | static char *mips_machine_name = "Unknown"; | ||
17 | |||
18 | #define for_each_machine(mach) \ | ||
19 | for ((mach) = (struct mips_machine *)&__mips_machines_start; \ | ||
20 | (mach) && \ | ||
21 | (unsigned long)(mach) < (unsigned long)&__mips_machines_end; \ | ||
22 | (mach)++) | ||
23 | |||
24 | __init void mips_set_machine_name(const char *name) | ||
25 | { | ||
26 | char *p; | ||
27 | |||
28 | if (name == NULL) | ||
29 | return; | ||
30 | |||
31 | p = kstrdup(name, GFP_KERNEL); | ||
32 | if (!p) | ||
33 | pr_err("MIPS: no memory for machine_name\n"); | ||
34 | |||
35 | mips_machine_name = p; | ||
36 | } | ||
37 | |||
38 | char *mips_get_machine_name(void) | ||
39 | { | ||
40 | return mips_machine_name; | ||
41 | } | ||
42 | |||
43 | __init int mips_machtype_setup(char *id) | ||
44 | { | ||
45 | struct mips_machine *mach; | ||
46 | |||
47 | for_each_machine(mach) { | ||
48 | if (mach->mach_id == NULL) | ||
49 | continue; | ||
50 | |||
51 | if (strcmp(mach->mach_id, id) == 0) { | ||
52 | mips_machtype = mach->mach_type; | ||
53 | return 0; | ||
54 | } | ||
55 | } | ||
56 | |||
57 | pr_err("MIPS: no machine found for id '%s', supported machines:\n", id); | ||
58 | pr_err("%-24s %s\n", "id", "name"); | ||
59 | for_each_machine(mach) | ||
60 | pr_err("%-24s %s\n", mach->mach_id, mach->mach_name); | ||
61 | |||
62 | return 1; | ||
63 | } | ||
64 | |||
65 | __setup("machtype=", mips_machtype_setup); | ||
66 | |||
67 | __init void mips_machine_setup(void) | ||
68 | { | ||
69 | struct mips_machine *mach; | ||
70 | |||
71 | for_each_machine(mach) { | ||
72 | if (mips_machtype == mach->mach_type) { | ||
73 | mips_machine = mach; | ||
74 | break; | ||
75 | } | ||
76 | } | ||
77 | |||
78 | if (!mips_machine) | ||
79 | return; | ||
80 | |||
81 | mips_set_machine_name(mips_machine->mach_name); | ||
82 | pr_info("MIPS: machine is %s\n", mips_machine_name); | ||
83 | |||
84 | if (mips_machine->mach_setup) | ||
85 | mips_machine->mach_setup(); | ||
86 | } | ||
diff --git a/arch/mips/kernel/module.c b/arch/mips/kernel/module.c index d87a72e9fac7..dd940b701963 100644 --- a/arch/mips/kernel/module.c +++ b/arch/mips/kernel/module.c | |||
@@ -30,6 +30,8 @@ | |||
30 | #include <linux/kernel.h> | 30 | #include <linux/kernel.h> |
31 | #include <linux/module.h> | 31 | #include <linux/module.h> |
32 | #include <linux/spinlock.h> | 32 | #include <linux/spinlock.h> |
33 | #include <linux/jump_label.h> | ||
34 | |||
33 | #include <asm/pgtable.h> /* MODULE_START */ | 35 | #include <asm/pgtable.h> /* MODULE_START */ |
34 | 36 | ||
35 | struct mips_hi16 { | 37 | struct mips_hi16 { |
@@ -382,6 +384,9 @@ int module_finalize(const Elf_Ehdr *hdr, | |||
382 | const Elf_Shdr *s; | 384 | const Elf_Shdr *s; |
383 | char *secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | 385 | char *secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; |
384 | 386 | ||
387 | /* Make jump label nops. */ | ||
388 | jump_label_apply_nops(me); | ||
389 | |||
385 | INIT_LIST_HEAD(&me->arch.dbe_list); | 390 | INIT_LIST_HEAD(&me->arch.dbe_list); |
386 | for (s = sechdrs; s < sechdrs + hdr->e_shnum; s++) { | 391 | for (s = sechdrs; s < sechdrs + hdr->e_shnum; s++) { |
387 | if (strcmp("__dbe_table", secstrings + s->sh_name) != 0) | 392 | if (strcmp("__dbe_table", secstrings + s->sh_name) != 0) |
diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c index 26109c4d5170..e309665b6c81 100644 --- a/arch/mips/kernel/proc.c +++ b/arch/mips/kernel/proc.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <asm/cpu-features.h> | 12 | #include <asm/cpu-features.h> |
13 | #include <asm/mipsregs.h> | 13 | #include <asm/mipsregs.h> |
14 | #include <asm/processor.h> | 14 | #include <asm/processor.h> |
15 | #include <asm/mips_machine.h> | ||
15 | 16 | ||
16 | unsigned int vced_count, vcei_count; | 17 | unsigned int vced_count, vcei_count; |
17 | 18 | ||
@@ -31,8 +32,12 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
31 | /* | 32 | /* |
32 | * For the first processor also print the system type | 33 | * For the first processor also print the system type |
33 | */ | 34 | */ |
34 | if (n == 0) | 35 | if (n == 0) { |
35 | seq_printf(m, "system type\t\t: %s\n", get_system_type()); | 36 | seq_printf(m, "system type\t\t: %s\n", get_system_type()); |
37 | if (mips_get_machine_name()) | ||
38 | seq_printf(m, "machine\t\t\t: %s\n", | ||
39 | mips_get_machine_name()); | ||
40 | } | ||
36 | 41 | ||
37 | seq_printf(m, "processor\t\t: %ld\n", n); | 42 | seq_printf(m, "processor\t\t: %ld\n", n); |
38 | sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n", | 43 | sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n", |
@@ -69,6 +74,8 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
69 | ); | 74 | ); |
70 | seq_printf(m, "shadow register sets\t: %d\n", | 75 | seq_printf(m, "shadow register sets\t: %d\n", |
71 | cpu_data[n].srsets); | 76 | cpu_data[n].srsets); |
77 | seq_printf(m, "kscratch registers\t: %d\n", | ||
78 | hweight8(cpu_data[n].kscratch_mask)); | ||
72 | seq_printf(m, "core\t\t\t: %d\n", cpu_data[n].core); | 79 | seq_printf(m, "core\t\t\t: %d\n", cpu_data[n].core); |
73 | 80 | ||
74 | sprintf(fmt, "VCE%%c exceptions\t\t: %s\n", | 81 | sprintf(fmt, "VCE%%c exceptions\t\t: %s\n", |
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index acd3f2c49c06..8ad1d5679f14 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c | |||
@@ -70,7 +70,7 @@ static char __initdata builtin_cmdline[COMMAND_LINE_SIZE] = CONFIG_CMDLINE; | |||
70 | * mips_io_port_base is the begin of the address space to which x86 style | 70 | * mips_io_port_base is the begin of the address space to which x86 style |
71 | * I/O ports are mapped. | 71 | * I/O ports are mapped. |
72 | */ | 72 | */ |
73 | const unsigned long mips_io_port_base __read_mostly = -1; | 73 | const unsigned long mips_io_port_base = -1; |
74 | EXPORT_SYMBOL(mips_io_port_base); | 74 | EXPORT_SYMBOL(mips_io_port_base); |
75 | 75 | ||
76 | static struct resource code_resource = { .name = "Kernel code", }; | 76 | static struct resource code_resource = { .name = "Kernel code", }; |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index e97104302541..71350f7f2d88 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -1592,7 +1592,6 @@ void __cpuinit per_cpu_trap_init(void) | |||
1592 | #endif /* CONFIG_MIPS_MT_SMTC */ | 1592 | #endif /* CONFIG_MIPS_MT_SMTC */ |
1593 | 1593 | ||
1594 | cpu_data[cpu].asid_cache = ASID_FIRST_VERSION; | 1594 | cpu_data[cpu].asid_cache = ASID_FIRST_VERSION; |
1595 | TLBMISS_HANDLER_SETUP(); | ||
1596 | 1595 | ||
1597 | atomic_inc(&init_mm.mm_count); | 1596 | atomic_inc(&init_mm.mm_count); |
1598 | current->active_mm = &init_mm; | 1597 | current->active_mm = &init_mm; |
@@ -1614,6 +1613,7 @@ void __cpuinit per_cpu_trap_init(void) | |||
1614 | write_c0_wired(0); | 1613 | write_c0_wired(0); |
1615 | } | 1614 | } |
1616 | #endif /* CONFIG_MIPS_MT_SMTC */ | 1615 | #endif /* CONFIG_MIPS_MT_SMTC */ |
1616 | TLBMISS_HANDLER_SETUP(); | ||
1617 | } | 1617 | } |
1618 | 1618 | ||
1619 | /* Install CPU exception handler */ | 1619 | /* Install CPU exception handler */ |
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index f25df73db923..570607b376b5 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S | |||
@@ -98,6 +98,13 @@ SECTIONS | |||
98 | INIT_TEXT_SECTION(PAGE_SIZE) | 98 | INIT_TEXT_SECTION(PAGE_SIZE) |
99 | INIT_DATA_SECTION(16) | 99 | INIT_DATA_SECTION(16) |
100 | 100 | ||
101 | . = ALIGN(4); | ||
102 | .mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) { | ||
103 | __mips_machines_start = .; | ||
104 | *(.mips.machines.init) | ||
105 | __mips_machines_end = .; | ||
106 | } | ||
107 | |||
101 | /* .exit.text is discarded at runtime, not link time, to deal with | 108 | /* .exit.text is discarded at runtime, not link time, to deal with |
102 | * references from .rodata | 109 | * references from .rodata |
103 | */ | 110 | */ |
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c index 93816f3bca67..083d3412d0bc 100644 --- a/arch/mips/mm/tlbex.c +++ b/arch/mips/mm/tlbex.c | |||
@@ -26,8 +26,10 @@ | |||
26 | #include <linux/smp.h> | 26 | #include <linux/smp.h> |
27 | #include <linux/string.h> | 27 | #include <linux/string.h> |
28 | #include <linux/init.h> | 28 | #include <linux/init.h> |
29 | #include <linux/cache.h> | ||
29 | 30 | ||
30 | #include <asm/mmu_context.h> | 31 | #include <asm/cacheflush.h> |
32 | #include <asm/pgtable.h> | ||
31 | #include <asm/war.h> | 33 | #include <asm/war.h> |
32 | #include <asm/uasm.h> | 34 | #include <asm/uasm.h> |
33 | 35 | ||
@@ -63,6 +65,52 @@ static inline int __maybe_unused r10000_llsc_war(void) | |||
63 | return R10000_LLSC_WAR; | 65 | return R10000_LLSC_WAR; |
64 | } | 66 | } |
65 | 67 | ||
68 | static int use_bbit_insns(void) | ||
69 | { | ||
70 | switch (current_cpu_type()) { | ||
71 | case CPU_CAVIUM_OCTEON: | ||
72 | case CPU_CAVIUM_OCTEON_PLUS: | ||
73 | case CPU_CAVIUM_OCTEON2: | ||
74 | return 1; | ||
75 | default: | ||
76 | return 0; | ||
77 | } | ||
78 | } | ||
79 | |||
80 | static int use_lwx_insns(void) | ||
81 | { | ||
82 | switch (current_cpu_type()) { | ||
83 | case CPU_CAVIUM_OCTEON2: | ||
84 | return 1; | ||
85 | default: | ||
86 | return 0; | ||
87 | } | ||
88 | } | ||
89 | #if defined(CONFIG_CAVIUM_OCTEON_CVMSEG_SIZE) && \ | ||
90 | CONFIG_CAVIUM_OCTEON_CVMSEG_SIZE > 0 | ||
91 | static bool scratchpad_available(void) | ||
92 | { | ||
93 | return true; | ||
94 | } | ||
95 | static int scratchpad_offset(int i) | ||
96 | { | ||
97 | /* | ||
98 | * CVMSEG starts at address -32768 and extends for | ||
99 | * CAVIUM_OCTEON_CVMSEG_SIZE 128 byte cache lines. | ||
100 | */ | ||
101 | i += 1; /* Kernel use starts at the top and works down. */ | ||
102 | return CONFIG_CAVIUM_OCTEON_CVMSEG_SIZE * 128 - (8 * i) - 32768; | ||
103 | } | ||
104 | #else | ||
105 | static bool scratchpad_available(void) | ||
106 | { | ||
107 | return false; | ||
108 | } | ||
109 | static int scratchpad_offset(int i) | ||
110 | { | ||
111 | BUG(); | ||
112 | } | ||
113 | #endif | ||
66 | /* | 114 | /* |
67 | * Found by experiment: At least some revisions of the 4kc throw under | 115 | * Found by experiment: At least some revisions of the 4kc throw under |
68 | * some circumstances a machine check exception, triggered by invalid | 116 | * some circumstances a machine check exception, triggered by invalid |
@@ -173,11 +221,41 @@ static struct uasm_reloc relocs[128] __cpuinitdata; | |||
173 | static int check_for_high_segbits __cpuinitdata; | 221 | static int check_for_high_segbits __cpuinitdata; |
174 | #endif | 222 | #endif |
175 | 223 | ||
224 | static int check_for_high_segbits __cpuinitdata; | ||
225 | |||
226 | static unsigned int kscratch_used_mask __cpuinitdata; | ||
227 | |||
228 | static int __cpuinit allocate_kscratch(void) | ||
229 | { | ||
230 | int r; | ||
231 | unsigned int a = cpu_data[0].kscratch_mask & ~kscratch_used_mask; | ||
232 | |||
233 | r = ffs(a); | ||
234 | |||
235 | if (r == 0) | ||
236 | return -1; | ||
237 | |||
238 | r--; /* make it zero based */ | ||
239 | |||
240 | kscratch_used_mask |= (1 << r); | ||
241 | |||
242 | return r; | ||
243 | } | ||
244 | |||
245 | static int scratch_reg __cpuinitdata; | ||
246 | static int pgd_reg __cpuinitdata; | ||
247 | enum vmalloc64_mode {not_refill, refill_scratch, refill_noscratch}; | ||
248 | |||
176 | #ifndef CONFIG_MIPS_PGD_C0_CONTEXT | 249 | #ifndef CONFIG_MIPS_PGD_C0_CONTEXT |
250 | |||
177 | /* | 251 | /* |
178 | * CONFIG_MIPS_PGD_C0_CONTEXT implies 64 bit and lack of pgd_current, | 252 | * CONFIG_MIPS_PGD_C0_CONTEXT implies 64 bit and lack of pgd_current, |
179 | * we cannot do r3000 under these circumstances. | 253 | * we cannot do r3000 under these circumstances. |
254 | * | ||
255 | * Declare pgd_current here instead of including mmu_context.h to avoid type | ||
256 | * conflicts for tlbmiss_handler_setup_pgd | ||
180 | */ | 257 | */ |
258 | extern unsigned long pgd_current[]; | ||
181 | 259 | ||
182 | /* | 260 | /* |
183 | * The R3000 TLB handler is simple. | 261 | * The R3000 TLB handler is simple. |
@@ -440,21 +518,43 @@ static __cpuinit __maybe_unused void build_convert_pte_to_entrylo(u32 **p, | |||
440 | static __cpuinit void build_restore_pagemask(u32 **p, | 518 | static __cpuinit void build_restore_pagemask(u32 **p, |
441 | struct uasm_reloc **r, | 519 | struct uasm_reloc **r, |
442 | unsigned int tmp, | 520 | unsigned int tmp, |
443 | enum label_id lid) | 521 | enum label_id lid, |
522 | int restore_scratch) | ||
444 | { | 523 | { |
445 | /* Reset default page size */ | 524 | if (restore_scratch) { |
446 | if (PM_DEFAULT_MASK >> 16) { | 525 | /* Reset default page size */ |
447 | uasm_i_lui(p, tmp, PM_DEFAULT_MASK >> 16); | 526 | if (PM_DEFAULT_MASK >> 16) { |
448 | uasm_i_ori(p, tmp, tmp, PM_DEFAULT_MASK & 0xffff); | 527 | uasm_i_lui(p, tmp, PM_DEFAULT_MASK >> 16); |
449 | uasm_il_b(p, r, lid); | 528 | uasm_i_ori(p, tmp, tmp, PM_DEFAULT_MASK & 0xffff); |
450 | uasm_i_mtc0(p, tmp, C0_PAGEMASK); | 529 | uasm_i_mtc0(p, tmp, C0_PAGEMASK); |
451 | } else if (PM_DEFAULT_MASK) { | 530 | uasm_il_b(p, r, lid); |
452 | uasm_i_ori(p, tmp, 0, PM_DEFAULT_MASK); | 531 | } else if (PM_DEFAULT_MASK) { |
453 | uasm_il_b(p, r, lid); | 532 | uasm_i_ori(p, tmp, 0, PM_DEFAULT_MASK); |
454 | uasm_i_mtc0(p, tmp, C0_PAGEMASK); | 533 | uasm_i_mtc0(p, tmp, C0_PAGEMASK); |
534 | uasm_il_b(p, r, lid); | ||
535 | } else { | ||
536 | uasm_i_mtc0(p, 0, C0_PAGEMASK); | ||
537 | uasm_il_b(p, r, lid); | ||
538 | } | ||
539 | if (scratch_reg > 0) | ||
540 | UASM_i_MFC0(p, 1, 31, scratch_reg); | ||
541 | else | ||
542 | UASM_i_LW(p, 1, scratchpad_offset(0), 0); | ||
455 | } else { | 543 | } else { |
456 | uasm_il_b(p, r, lid); | 544 | /* Reset default page size */ |
457 | uasm_i_mtc0(p, 0, C0_PAGEMASK); | 545 | if (PM_DEFAULT_MASK >> 16) { |
546 | uasm_i_lui(p, tmp, PM_DEFAULT_MASK >> 16); | ||
547 | uasm_i_ori(p, tmp, tmp, PM_DEFAULT_MASK & 0xffff); | ||
548 | uasm_il_b(p, r, lid); | ||
549 | uasm_i_mtc0(p, tmp, C0_PAGEMASK); | ||
550 | } else if (PM_DEFAULT_MASK) { | ||
551 | uasm_i_ori(p, tmp, 0, PM_DEFAULT_MASK); | ||
552 | uasm_il_b(p, r, lid); | ||
553 | uasm_i_mtc0(p, tmp, C0_PAGEMASK); | ||
554 | } else { | ||
555 | uasm_il_b(p, r, lid); | ||
556 | uasm_i_mtc0(p, 0, C0_PAGEMASK); | ||
557 | } | ||
458 | } | 558 | } |
459 | } | 559 | } |
460 | 560 | ||
@@ -462,7 +562,8 @@ static __cpuinit void build_huge_tlb_write_entry(u32 **p, | |||
462 | struct uasm_label **l, | 562 | struct uasm_label **l, |
463 | struct uasm_reloc **r, | 563 | struct uasm_reloc **r, |
464 | unsigned int tmp, | 564 | unsigned int tmp, |
465 | enum tlb_write_entry wmode) | 565 | enum tlb_write_entry wmode, |
566 | int restore_scratch) | ||
466 | { | 567 | { |
467 | /* Set huge page tlb entry size */ | 568 | /* Set huge page tlb entry size */ |
468 | uasm_i_lui(p, tmp, PM_HUGE_MASK >> 16); | 569 | uasm_i_lui(p, tmp, PM_HUGE_MASK >> 16); |
@@ -471,7 +572,7 @@ static __cpuinit void build_huge_tlb_write_entry(u32 **p, | |||
471 | 572 | ||
472 | build_tlb_write_entry(p, l, r, wmode); | 573 | build_tlb_write_entry(p, l, r, wmode); |
473 | 574 | ||
474 | build_restore_pagemask(p, r, tmp, label_leave); | 575 | build_restore_pagemask(p, r, tmp, label_leave, restore_scratch); |
475 | } | 576 | } |
476 | 577 | ||
477 | /* | 578 | /* |
@@ -482,8 +583,12 @@ build_is_huge_pte(u32 **p, struct uasm_reloc **r, unsigned int tmp, | |||
482 | unsigned int pmd, int lid) | 583 | unsigned int pmd, int lid) |
483 | { | 584 | { |
484 | UASM_i_LW(p, tmp, 0, pmd); | 585 | UASM_i_LW(p, tmp, 0, pmd); |
485 | uasm_i_andi(p, tmp, tmp, _PAGE_HUGE); | 586 | if (use_bbit_insns()) { |
486 | uasm_il_bnez(p, r, tmp, lid); | 587 | uasm_il_bbit1(p, r, tmp, ilog2(_PAGE_HUGE), lid); |
588 | } else { | ||
589 | uasm_i_andi(p, tmp, tmp, _PAGE_HUGE); | ||
590 | uasm_il_bnez(p, r, tmp, lid); | ||
591 | } | ||
487 | } | 592 | } |
488 | 593 | ||
489 | static __cpuinit void build_huge_update_entries(u32 **p, | 594 | static __cpuinit void build_huge_update_entries(u32 **p, |
@@ -532,7 +637,7 @@ static __cpuinit void build_huge_handler_tail(u32 **p, | |||
532 | UASM_i_SW(p, pte, 0, ptr); | 637 | UASM_i_SW(p, pte, 0, ptr); |
533 | #endif | 638 | #endif |
534 | build_huge_update_entries(p, pte, ptr); | 639 | build_huge_update_entries(p, pte, ptr); |
535 | build_huge_tlb_write_entry(p, l, r, pte, tlb_indexed); | 640 | build_huge_tlb_write_entry(p, l, r, pte, tlb_indexed, 0); |
536 | } | 641 | } |
537 | #endif /* CONFIG_HUGETLB_PAGE */ | 642 | #endif /* CONFIG_HUGETLB_PAGE */ |
538 | 643 | ||
@@ -573,13 +678,22 @@ build_get_pmde64(u32 **p, struct uasm_label **l, struct uasm_reloc **r, | |||
573 | /* No uasm_i_nop needed here, since the next insn doesn't touch TMP. */ | 678 | /* No uasm_i_nop needed here, since the next insn doesn't touch TMP. */ |
574 | 679 | ||
575 | #ifdef CONFIG_MIPS_PGD_C0_CONTEXT | 680 | #ifdef CONFIG_MIPS_PGD_C0_CONTEXT |
576 | /* | 681 | if (pgd_reg != -1) { |
577 | * &pgd << 11 stored in CONTEXT [23..63]. | 682 | /* pgd is in pgd_reg */ |
578 | */ | 683 | UASM_i_MFC0(p, ptr, 31, pgd_reg); |
579 | UASM_i_MFC0(p, ptr, C0_CONTEXT); | 684 | } else { |
580 | uasm_i_dins(p, ptr, 0, 0, 23); /* Clear lower 23 bits of context. */ | 685 | /* |
581 | uasm_i_ori(p, ptr, ptr, 0x540); /* 1 0 1 0 1 << 6 xkphys cached */ | 686 | * &pgd << 11 stored in CONTEXT [23..63]. |
582 | uasm_i_drotr(p, ptr, ptr, 11); | 687 | */ |
688 | UASM_i_MFC0(p, ptr, C0_CONTEXT); | ||
689 | |||
690 | /* Clear lower 23 bits of context. */ | ||
691 | uasm_i_dins(p, ptr, 0, 0, 23); | ||
692 | |||
693 | /* 1 0 1 0 1 << 6 xkphys cached */ | ||
694 | uasm_i_ori(p, ptr, ptr, 0x540); | ||
695 | uasm_i_drotr(p, ptr, ptr, 11); | ||
696 | } | ||
583 | #elif defined(CONFIG_SMP) | 697 | #elif defined(CONFIG_SMP) |
584 | # ifdef CONFIG_MIPS_MT_SMTC | 698 | # ifdef CONFIG_MIPS_MT_SMTC |
585 | /* | 699 | /* |
@@ -620,7 +734,6 @@ build_get_pmde64(u32 **p, struct uasm_label **l, struct uasm_reloc **r, | |||
620 | #endif | 734 | #endif |
621 | } | 735 | } |
622 | 736 | ||
623 | enum vmalloc64_mode {not_refill, refill}; | ||
624 | /* | 737 | /* |
625 | * BVADDR is the faulting address, PTR is scratch. | 738 | * BVADDR is the faulting address, PTR is scratch. |
626 | * PTR will hold the pgd for vmalloc. | 739 | * PTR will hold the pgd for vmalloc. |
@@ -638,7 +751,7 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r, | |||
638 | 751 | ||
639 | uasm_l_vmalloc(l, *p); | 752 | uasm_l_vmalloc(l, *p); |
640 | 753 | ||
641 | if (mode == refill && check_for_high_segbits) { | 754 | if (mode != not_refill && check_for_high_segbits) { |
642 | if (single_insn_swpd) { | 755 | if (single_insn_swpd) { |
643 | uasm_il_bltz(p, r, bvaddr, label_vmalloc_done); | 756 | uasm_il_bltz(p, r, bvaddr, label_vmalloc_done); |
644 | uasm_i_lui(p, ptr, uasm_rel_hi(swpd)); | 757 | uasm_i_lui(p, ptr, uasm_rel_hi(swpd)); |
@@ -661,7 +774,7 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r, | |||
661 | uasm_i_daddiu(p, ptr, ptr, uasm_rel_lo(swpd)); | 774 | uasm_i_daddiu(p, ptr, ptr, uasm_rel_lo(swpd)); |
662 | } | 775 | } |
663 | } | 776 | } |
664 | if (mode == refill && check_for_high_segbits) { | 777 | if (mode != not_refill && check_for_high_segbits) { |
665 | uasm_l_large_segbits_fault(l, *p); | 778 | uasm_l_large_segbits_fault(l, *p); |
666 | /* | 779 | /* |
667 | * We get here if we are an xsseg address, or if we are | 780 | * We get here if we are an xsseg address, or if we are |
@@ -677,7 +790,15 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r, | |||
677 | */ | 790 | */ |
678 | UASM_i_LA(p, ptr, (unsigned long)tlb_do_page_fault_0); | 791 | UASM_i_LA(p, ptr, (unsigned long)tlb_do_page_fault_0); |
679 | uasm_i_jr(p, ptr); | 792 | uasm_i_jr(p, ptr); |
680 | uasm_i_nop(p); | 793 | |
794 | if (mode == refill_scratch) { | ||
795 | if (scratch_reg > 0) | ||
796 | UASM_i_MFC0(p, 1, 31, scratch_reg); | ||
797 | else | ||
798 | UASM_i_LW(p, 1, scratchpad_offset(0), 0); | ||
799 | } else { | ||
800 | uasm_i_nop(p); | ||
801 | } | ||
681 | } | 802 | } |
682 | } | 803 | } |
683 | 804 | ||
@@ -834,6 +955,185 @@ static void __cpuinit build_update_entries(u32 **p, unsigned int tmp, | |||
834 | #endif | 955 | #endif |
835 | } | 956 | } |
836 | 957 | ||
958 | struct mips_huge_tlb_info { | ||
959 | int huge_pte; | ||
960 | int restore_scratch; | ||
961 | }; | ||
962 | |||
963 | static struct mips_huge_tlb_info __cpuinit | ||
964 | build_fast_tlb_refill_handler (u32 **p, struct uasm_label **l, | ||
965 | struct uasm_reloc **r, unsigned int tmp, | ||
966 | unsigned int ptr, int c0_scratch) | ||
967 | { | ||
968 | struct mips_huge_tlb_info rv; | ||
969 | unsigned int even, odd; | ||
970 | int vmalloc_branch_delay_filled = 0; | ||
971 | const int scratch = 1; /* Our extra working register */ | ||
972 | |||
973 | rv.huge_pte = scratch; | ||
974 | rv.restore_scratch = 0; | ||
975 | |||
976 | if (check_for_high_segbits) { | ||
977 | UASM_i_MFC0(p, tmp, C0_BADVADDR); | ||
978 | |||
979 | if (pgd_reg != -1) | ||
980 | UASM_i_MFC0(p, ptr, 31, pgd_reg); | ||
981 | else | ||
982 | UASM_i_MFC0(p, ptr, C0_CONTEXT); | ||
983 | |||
984 | if (c0_scratch >= 0) | ||
985 | UASM_i_MTC0(p, scratch, 31, c0_scratch); | ||
986 | else | ||
987 | UASM_i_SW(p, scratch, scratchpad_offset(0), 0); | ||
988 | |||
989 | uasm_i_dsrl_safe(p, scratch, tmp, | ||
990 | PGDIR_SHIFT + PGD_ORDER + PAGE_SHIFT - 3); | ||
991 | uasm_il_bnez(p, r, scratch, label_vmalloc); | ||
992 | |||
993 | if (pgd_reg == -1) { | ||
994 | vmalloc_branch_delay_filled = 1; | ||
995 | /* Clear lower 23 bits of context. */ | ||
996 | uasm_i_dins(p, ptr, 0, 0, 23); | ||
997 | } | ||
998 | } else { | ||
999 | if (pgd_reg != -1) | ||
1000 | UASM_i_MFC0(p, ptr, 31, pgd_reg); | ||
1001 | else | ||
1002 | UASM_i_MFC0(p, ptr, C0_CONTEXT); | ||
1003 | |||
1004 | UASM_i_MFC0(p, tmp, C0_BADVADDR); | ||
1005 | |||
1006 | if (c0_scratch >= 0) | ||
1007 | UASM_i_MTC0(p, scratch, 31, c0_scratch); | ||
1008 | else | ||
1009 | UASM_i_SW(p, scratch, scratchpad_offset(0), 0); | ||
1010 | |||
1011 | if (pgd_reg == -1) | ||
1012 | /* Clear lower 23 bits of context. */ | ||
1013 | uasm_i_dins(p, ptr, 0, 0, 23); | ||
1014 | |||
1015 | uasm_il_bltz(p, r, tmp, label_vmalloc); | ||
1016 | } | ||
1017 | |||
1018 | if (pgd_reg == -1) { | ||
1019 | vmalloc_branch_delay_filled = 1; | ||
1020 | /* 1 0 1 0 1 << 6 xkphys cached */ | ||
1021 | uasm_i_ori(p, ptr, ptr, 0x540); | ||
1022 | uasm_i_drotr(p, ptr, ptr, 11); | ||
1023 | } | ||
1024 | |||
1025 | #ifdef __PAGETABLE_PMD_FOLDED | ||
1026 | #define LOC_PTEP scratch | ||
1027 | #else | ||
1028 | #define LOC_PTEP ptr | ||
1029 | #endif | ||
1030 | |||
1031 | if (!vmalloc_branch_delay_filled) | ||
1032 | /* get pgd offset in bytes */ | ||
1033 | uasm_i_dsrl_safe(p, scratch, tmp, PGDIR_SHIFT - 3); | ||
1034 | |||
1035 | uasm_l_vmalloc_done(l, *p); | ||
1036 | |||
1037 | /* | ||
1038 | * tmp ptr | ||
1039 | * fall-through case = badvaddr *pgd_current | ||
1040 | * vmalloc case = badvaddr swapper_pg_dir | ||
1041 | */ | ||
1042 | |||
1043 | if (vmalloc_branch_delay_filled) | ||
1044 | /* get pgd offset in bytes */ | ||
1045 | uasm_i_dsrl_safe(p, scratch, tmp, PGDIR_SHIFT - 3); | ||
1046 | |||
1047 | #ifdef __PAGETABLE_PMD_FOLDED | ||
1048 | GET_CONTEXT(p, tmp); /* get context reg */ | ||
1049 | #endif | ||
1050 | uasm_i_andi(p, scratch, scratch, (PTRS_PER_PGD - 1) << 3); | ||
1051 | |||
1052 | if (use_lwx_insns()) { | ||
1053 | UASM_i_LWX(p, LOC_PTEP, scratch, ptr); | ||
1054 | } else { | ||
1055 | uasm_i_daddu(p, ptr, ptr, scratch); /* add in pgd offset */ | ||
1056 | uasm_i_ld(p, LOC_PTEP, 0, ptr); /* get pmd pointer */ | ||
1057 | } | ||
1058 | |||
1059 | #ifndef __PAGETABLE_PMD_FOLDED | ||
1060 | /* get pmd offset in bytes */ | ||
1061 | uasm_i_dsrl_safe(p, scratch, tmp, PMD_SHIFT - 3); | ||
1062 | uasm_i_andi(p, scratch, scratch, (PTRS_PER_PMD - 1) << 3); | ||
1063 | GET_CONTEXT(p, tmp); /* get context reg */ | ||
1064 | |||
1065 | if (use_lwx_insns()) { | ||
1066 | UASM_i_LWX(p, scratch, scratch, ptr); | ||
1067 | } else { | ||
1068 | uasm_i_daddu(p, ptr, ptr, scratch); /* add in pmd offset */ | ||
1069 | UASM_i_LW(p, scratch, 0, ptr); | ||
1070 | } | ||
1071 | #endif | ||
1072 | /* Adjust the context during the load latency. */ | ||
1073 | build_adjust_context(p, tmp); | ||
1074 | |||
1075 | #ifdef CONFIG_HUGETLB_PAGE | ||
1076 | uasm_il_bbit1(p, r, scratch, ilog2(_PAGE_HUGE), label_tlb_huge_update); | ||
1077 | /* | ||
1078 | * The in the LWX case we don't want to do the load in the | ||
1079 | * delay slot. It cannot issue in the same cycle and may be | ||
1080 | * speculative and unneeded. | ||
1081 | */ | ||
1082 | if (use_lwx_insns()) | ||
1083 | uasm_i_nop(p); | ||
1084 | #endif /* CONFIG_HUGETLB_PAGE */ | ||
1085 | |||
1086 | |||
1087 | /* build_update_entries */ | ||
1088 | if (use_lwx_insns()) { | ||
1089 | even = ptr; | ||
1090 | odd = tmp; | ||
1091 | UASM_i_LWX(p, even, scratch, tmp); | ||
1092 | UASM_i_ADDIU(p, tmp, tmp, sizeof(pte_t)); | ||
1093 | UASM_i_LWX(p, odd, scratch, tmp); | ||
1094 | } else { | ||
1095 | UASM_i_ADDU(p, ptr, scratch, tmp); /* add in offset */ | ||
1096 | even = tmp; | ||
1097 | odd = ptr; | ||
1098 | UASM_i_LW(p, even, 0, ptr); /* get even pte */ | ||
1099 | UASM_i_LW(p, odd, sizeof(pte_t), ptr); /* get odd pte */ | ||
1100 | } | ||
1101 | if (kernel_uses_smartmips_rixi) { | ||
1102 | uasm_i_dsrl_safe(p, even, even, ilog2(_PAGE_NO_EXEC)); | ||
1103 | uasm_i_dsrl_safe(p, odd, odd, ilog2(_PAGE_NO_EXEC)); | ||
1104 | uasm_i_drotr(p, even, even, | ||
1105 | ilog2(_PAGE_GLOBAL) - ilog2(_PAGE_NO_EXEC)); | ||
1106 | UASM_i_MTC0(p, even, C0_ENTRYLO0); /* load it */ | ||
1107 | uasm_i_drotr(p, odd, odd, | ||
1108 | ilog2(_PAGE_GLOBAL) - ilog2(_PAGE_NO_EXEC)); | ||
1109 | } else { | ||
1110 | uasm_i_dsrl_safe(p, even, even, ilog2(_PAGE_GLOBAL)); | ||
1111 | UASM_i_MTC0(p, even, C0_ENTRYLO0); /* load it */ | ||
1112 | uasm_i_dsrl_safe(p, odd, odd, ilog2(_PAGE_GLOBAL)); | ||
1113 | } | ||
1114 | UASM_i_MTC0(p, odd, C0_ENTRYLO1); /* load it */ | ||
1115 | |||
1116 | if (c0_scratch >= 0) { | ||
1117 | UASM_i_MFC0(p, scratch, 31, c0_scratch); | ||
1118 | build_tlb_write_entry(p, l, r, tlb_random); | ||
1119 | uasm_l_leave(l, *p); | ||
1120 | rv.restore_scratch = 1; | ||
1121 | } else if (PAGE_SHIFT == 14 || PAGE_SHIFT == 13) { | ||
1122 | build_tlb_write_entry(p, l, r, tlb_random); | ||
1123 | uasm_l_leave(l, *p); | ||
1124 | UASM_i_LW(p, scratch, scratchpad_offset(0), 0); | ||
1125 | } else { | ||
1126 | UASM_i_LW(p, scratch, scratchpad_offset(0), 0); | ||
1127 | build_tlb_write_entry(p, l, r, tlb_random); | ||
1128 | uasm_l_leave(l, *p); | ||
1129 | rv.restore_scratch = 1; | ||
1130 | } | ||
1131 | |||
1132 | uasm_i_eret(p); /* return from trap */ | ||
1133 | |||
1134 | return rv; | ||
1135 | } | ||
1136 | |||
837 | /* | 1137 | /* |
838 | * For a 64-bit kernel, we are using the 64-bit XTLB refill exception | 1138 | * For a 64-bit kernel, we are using the 64-bit XTLB refill exception |
839 | * because EXL == 0. If we wrap, we can also use the 32 instruction | 1139 | * because EXL == 0. If we wrap, we can also use the 32 instruction |
@@ -849,54 +1149,67 @@ static void __cpuinit build_r4000_tlb_refill_handler(void) | |||
849 | struct uasm_reloc *r = relocs; | 1149 | struct uasm_reloc *r = relocs; |
850 | u32 *f; | 1150 | u32 *f; |
851 | unsigned int final_len; | 1151 | unsigned int final_len; |
1152 | struct mips_huge_tlb_info htlb_info; | ||
1153 | enum vmalloc64_mode vmalloc_mode; | ||
852 | 1154 | ||
853 | memset(tlb_handler, 0, sizeof(tlb_handler)); | 1155 | memset(tlb_handler, 0, sizeof(tlb_handler)); |
854 | memset(labels, 0, sizeof(labels)); | 1156 | memset(labels, 0, sizeof(labels)); |
855 | memset(relocs, 0, sizeof(relocs)); | 1157 | memset(relocs, 0, sizeof(relocs)); |
856 | memset(final_handler, 0, sizeof(final_handler)); | 1158 | memset(final_handler, 0, sizeof(final_handler)); |
857 | 1159 | ||
858 | /* | 1160 | if (scratch_reg == 0) |
859 | * create the plain linear handler | 1161 | scratch_reg = allocate_kscratch(); |
860 | */ | ||
861 | if (bcm1250_m3_war()) { | ||
862 | unsigned int segbits = 44; | ||
863 | 1162 | ||
864 | uasm_i_dmfc0(&p, K0, C0_BADVADDR); | 1163 | if ((scratch_reg > 0 || scratchpad_available()) && use_bbit_insns()) { |
865 | uasm_i_dmfc0(&p, K1, C0_ENTRYHI); | 1164 | htlb_info = build_fast_tlb_refill_handler(&p, &l, &r, K0, K1, |
866 | uasm_i_xor(&p, K0, K0, K1); | 1165 | scratch_reg); |
867 | uasm_i_dsrl_safe(&p, K1, K0, 62); | 1166 | vmalloc_mode = refill_scratch; |
868 | uasm_i_dsrl_safe(&p, K0, K0, 12 + 1); | 1167 | } else { |
869 | uasm_i_dsll_safe(&p, K0, K0, 64 + 12 + 1 - segbits); | 1168 | htlb_info.huge_pte = K0; |
870 | uasm_i_or(&p, K0, K0, K1); | 1169 | htlb_info.restore_scratch = 0; |
871 | uasm_il_bnez(&p, &r, K0, label_leave); | 1170 | vmalloc_mode = refill_noscratch; |
872 | /* No need for uasm_i_nop */ | 1171 | /* |
873 | } | 1172 | * create the plain linear handler |
1173 | */ | ||
1174 | if (bcm1250_m3_war()) { | ||
1175 | unsigned int segbits = 44; | ||
1176 | |||
1177 | uasm_i_dmfc0(&p, K0, C0_BADVADDR); | ||
1178 | uasm_i_dmfc0(&p, K1, C0_ENTRYHI); | ||
1179 | uasm_i_xor(&p, K0, K0, K1); | ||
1180 | uasm_i_dsrl_safe(&p, K1, K0, 62); | ||
1181 | uasm_i_dsrl_safe(&p, K0, K0, 12 + 1); | ||
1182 | uasm_i_dsll_safe(&p, K0, K0, 64 + 12 + 1 - segbits); | ||
1183 | uasm_i_or(&p, K0, K0, K1); | ||
1184 | uasm_il_bnez(&p, &r, K0, label_leave); | ||
1185 | /* No need for uasm_i_nop */ | ||
1186 | } | ||
874 | 1187 | ||
875 | #ifdef CONFIG_64BIT | 1188 | #ifdef CONFIG_64BIT |
876 | build_get_pmde64(&p, &l, &r, K0, K1); /* get pmd in K1 */ | 1189 | build_get_pmde64(&p, &l, &r, K0, K1); /* get pmd in K1 */ |
877 | #else | 1190 | #else |
878 | build_get_pgde32(&p, K0, K1); /* get pgd in K1 */ | 1191 | build_get_pgde32(&p, K0, K1); /* get pgd in K1 */ |
879 | #endif | 1192 | #endif |
880 | 1193 | ||
881 | #ifdef CONFIG_HUGETLB_PAGE | 1194 | #ifdef CONFIG_HUGETLB_PAGE |
882 | build_is_huge_pte(&p, &r, K0, K1, label_tlb_huge_update); | 1195 | build_is_huge_pte(&p, &r, K0, K1, label_tlb_huge_update); |
883 | #endif | 1196 | #endif |
884 | 1197 | ||
885 | build_get_ptep(&p, K0, K1); | 1198 | build_get_ptep(&p, K0, K1); |
886 | build_update_entries(&p, K0, K1); | 1199 | build_update_entries(&p, K0, K1); |
887 | build_tlb_write_entry(&p, &l, &r, tlb_random); | 1200 | build_tlb_write_entry(&p, &l, &r, tlb_random); |
888 | uasm_l_leave(&l, p); | 1201 | uasm_l_leave(&l, p); |
889 | uasm_i_eret(&p); /* return from trap */ | 1202 | uasm_i_eret(&p); /* return from trap */ |
890 | 1203 | } | |
891 | #ifdef CONFIG_HUGETLB_PAGE | 1204 | #ifdef CONFIG_HUGETLB_PAGE |
892 | uasm_l_tlb_huge_update(&l, p); | 1205 | uasm_l_tlb_huge_update(&l, p); |
893 | UASM_i_LW(&p, K0, 0, K1); | 1206 | build_huge_update_entries(&p, htlb_info.huge_pte, K1); |
894 | build_huge_update_entries(&p, K0, K1); | 1207 | build_huge_tlb_write_entry(&p, &l, &r, K0, tlb_random, |
895 | build_huge_tlb_write_entry(&p, &l, &r, K0, tlb_random); | 1208 | htlb_info.restore_scratch); |
896 | #endif | 1209 | #endif |
897 | 1210 | ||
898 | #ifdef CONFIG_64BIT | 1211 | #ifdef CONFIG_64BIT |
899 | build_get_pgd_vmalloc64(&p, &l, &r, K0, K1, refill); | 1212 | build_get_pgd_vmalloc64(&p, &l, &r, K0, K1, vmalloc_mode); |
900 | #endif | 1213 | #endif |
901 | 1214 | ||
902 | /* | 1215 | /* |
@@ -1014,6 +1327,55 @@ static void __cpuinit build_r4000_tlb_refill_handler(void) | |||
1014 | u32 handle_tlbl[FASTPATH_SIZE] __cacheline_aligned; | 1327 | u32 handle_tlbl[FASTPATH_SIZE] __cacheline_aligned; |
1015 | u32 handle_tlbs[FASTPATH_SIZE] __cacheline_aligned; | 1328 | u32 handle_tlbs[FASTPATH_SIZE] __cacheline_aligned; |
1016 | u32 handle_tlbm[FASTPATH_SIZE] __cacheline_aligned; | 1329 | u32 handle_tlbm[FASTPATH_SIZE] __cacheline_aligned; |
1330 | #ifdef CONFIG_MIPS_PGD_C0_CONTEXT | ||
1331 | u32 tlbmiss_handler_setup_pgd[16] __cacheline_aligned; | ||
1332 | |||
1333 | static void __cpuinit build_r4000_setup_pgd(void) | ||
1334 | { | ||
1335 | const int a0 = 4; | ||
1336 | const int a1 = 5; | ||
1337 | u32 *p = tlbmiss_handler_setup_pgd; | ||
1338 | struct uasm_label *l = labels; | ||
1339 | struct uasm_reloc *r = relocs; | ||
1340 | |||
1341 | memset(tlbmiss_handler_setup_pgd, 0, sizeof(tlbmiss_handler_setup_pgd)); | ||
1342 | memset(labels, 0, sizeof(labels)); | ||
1343 | memset(relocs, 0, sizeof(relocs)); | ||
1344 | |||
1345 | pgd_reg = allocate_kscratch(); | ||
1346 | |||
1347 | if (pgd_reg == -1) { | ||
1348 | /* PGD << 11 in c0_Context */ | ||
1349 | /* | ||
1350 | * If it is a ckseg0 address, convert to a physical | ||
1351 | * address. Shifting right by 29 and adding 4 will | ||
1352 | * result in zero for these addresses. | ||
1353 | * | ||
1354 | */ | ||
1355 | UASM_i_SRA(&p, a1, a0, 29); | ||
1356 | UASM_i_ADDIU(&p, a1, a1, 4); | ||
1357 | uasm_il_bnez(&p, &r, a1, label_tlbl_goaround1); | ||
1358 | uasm_i_nop(&p); | ||
1359 | uasm_i_dinsm(&p, a0, 0, 29, 64 - 29); | ||
1360 | uasm_l_tlbl_goaround1(&l, p); | ||
1361 | UASM_i_SLL(&p, a0, a0, 11); | ||
1362 | uasm_i_jr(&p, 31); | ||
1363 | UASM_i_MTC0(&p, a0, C0_CONTEXT); | ||
1364 | } else { | ||
1365 | /* PGD in c0_KScratch */ | ||
1366 | uasm_i_jr(&p, 31); | ||
1367 | UASM_i_MTC0(&p, a0, 31, pgd_reg); | ||
1368 | } | ||
1369 | if (p - tlbmiss_handler_setup_pgd > ARRAY_SIZE(tlbmiss_handler_setup_pgd)) | ||
1370 | panic("tlbmiss_handler_setup_pgd space exceeded"); | ||
1371 | uasm_resolve_relocs(relocs, labels); | ||
1372 | pr_debug("Wrote tlbmiss_handler_setup_pgd (%u instructions).\n", | ||
1373 | (unsigned int)(p - tlbmiss_handler_setup_pgd)); | ||
1374 | |||
1375 | dump_handler(tlbmiss_handler_setup_pgd, | ||
1376 | ARRAY_SIZE(tlbmiss_handler_setup_pgd)); | ||
1377 | } | ||
1378 | #endif | ||
1017 | 1379 | ||
1018 | static void __cpuinit | 1380 | static void __cpuinit |
1019 | iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr) | 1381 | iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr) |
@@ -1100,14 +1462,20 @@ build_pte_present(u32 **p, struct uasm_reloc **r, | |||
1100 | unsigned int pte, unsigned int ptr, enum label_id lid) | 1462 | unsigned int pte, unsigned int ptr, enum label_id lid) |
1101 | { | 1463 | { |
1102 | if (kernel_uses_smartmips_rixi) { | 1464 | if (kernel_uses_smartmips_rixi) { |
1103 | uasm_i_andi(p, pte, pte, _PAGE_PRESENT); | 1465 | if (use_bbit_insns()) { |
1104 | uasm_il_beqz(p, r, pte, lid); | 1466 | uasm_il_bbit0(p, r, pte, ilog2(_PAGE_PRESENT), lid); |
1467 | uasm_i_nop(p); | ||
1468 | } else { | ||
1469 | uasm_i_andi(p, pte, pte, _PAGE_PRESENT); | ||
1470 | uasm_il_beqz(p, r, pte, lid); | ||
1471 | iPTE_LW(p, pte, ptr); | ||
1472 | } | ||
1105 | } else { | 1473 | } else { |
1106 | uasm_i_andi(p, pte, pte, _PAGE_PRESENT | _PAGE_READ); | 1474 | uasm_i_andi(p, pte, pte, _PAGE_PRESENT | _PAGE_READ); |
1107 | uasm_i_xori(p, pte, pte, _PAGE_PRESENT | _PAGE_READ); | 1475 | uasm_i_xori(p, pte, pte, _PAGE_PRESENT | _PAGE_READ); |
1108 | uasm_il_bnez(p, r, pte, lid); | 1476 | uasm_il_bnez(p, r, pte, lid); |
1477 | iPTE_LW(p, pte, ptr); | ||
1109 | } | 1478 | } |
1110 | iPTE_LW(p, pte, ptr); | ||
1111 | } | 1479 | } |
1112 | 1480 | ||
1113 | /* Make PTE valid, store result in PTR. */ | 1481 | /* Make PTE valid, store result in PTR. */ |
@@ -1128,10 +1496,17 @@ static void __cpuinit | |||
1128 | build_pte_writable(u32 **p, struct uasm_reloc **r, | 1496 | build_pte_writable(u32 **p, struct uasm_reloc **r, |
1129 | unsigned int pte, unsigned int ptr, enum label_id lid) | 1497 | unsigned int pte, unsigned int ptr, enum label_id lid) |
1130 | { | 1498 | { |
1131 | uasm_i_andi(p, pte, pte, _PAGE_PRESENT | _PAGE_WRITE); | 1499 | if (use_bbit_insns()) { |
1132 | uasm_i_xori(p, pte, pte, _PAGE_PRESENT | _PAGE_WRITE); | 1500 | uasm_il_bbit0(p, r, pte, ilog2(_PAGE_PRESENT), lid); |
1133 | uasm_il_bnez(p, r, pte, lid); | 1501 | uasm_i_nop(p); |
1134 | iPTE_LW(p, pte, ptr); | 1502 | uasm_il_bbit0(p, r, pte, ilog2(_PAGE_WRITE), lid); |
1503 | uasm_i_nop(p); | ||
1504 | } else { | ||
1505 | uasm_i_andi(p, pte, pte, _PAGE_PRESENT | _PAGE_WRITE); | ||
1506 | uasm_i_xori(p, pte, pte, _PAGE_PRESENT | _PAGE_WRITE); | ||
1507 | uasm_il_bnez(p, r, pte, lid); | ||
1508 | iPTE_LW(p, pte, ptr); | ||
1509 | } | ||
1135 | } | 1510 | } |
1136 | 1511 | ||
1137 | /* Make PTE writable, update software status bits as well, then store | 1512 | /* Make PTE writable, update software status bits as well, then store |
@@ -1155,12 +1530,19 @@ static void __cpuinit | |||
1155 | build_pte_modifiable(u32 **p, struct uasm_reloc **r, | 1530 | build_pte_modifiable(u32 **p, struct uasm_reloc **r, |
1156 | unsigned int pte, unsigned int ptr, enum label_id lid) | 1531 | unsigned int pte, unsigned int ptr, enum label_id lid) |
1157 | { | 1532 | { |
1158 | uasm_i_andi(p, pte, pte, _PAGE_WRITE); | 1533 | if (use_bbit_insns()) { |
1159 | uasm_il_beqz(p, r, pte, lid); | 1534 | uasm_il_bbit0(p, r, pte, ilog2(_PAGE_WRITE), lid); |
1160 | iPTE_LW(p, pte, ptr); | 1535 | uasm_i_nop(p); |
1536 | } else { | ||
1537 | uasm_i_andi(p, pte, pte, _PAGE_WRITE); | ||
1538 | uasm_il_beqz(p, r, pte, lid); | ||
1539 | iPTE_LW(p, pte, ptr); | ||
1540 | } | ||
1161 | } | 1541 | } |
1162 | 1542 | ||
1163 | #ifndef CONFIG_MIPS_PGD_C0_CONTEXT | 1543 | #ifndef CONFIG_MIPS_PGD_C0_CONTEXT |
1544 | |||
1545 | |||
1164 | /* | 1546 | /* |
1165 | * R3000 style TLB load/store/modify handlers. | 1547 | * R3000 style TLB load/store/modify handlers. |
1166 | */ | 1548 | */ |
@@ -1402,14 +1784,23 @@ static void __cpuinit build_r4000_tlb_load_handler(void) | |||
1402 | * If the page is not _PAGE_VALID, RI or XI could not | 1784 | * If the page is not _PAGE_VALID, RI or XI could not |
1403 | * have triggered it. Skip the expensive test.. | 1785 | * have triggered it. Skip the expensive test.. |
1404 | */ | 1786 | */ |
1405 | uasm_i_andi(&p, K0, K0, _PAGE_VALID); | 1787 | if (use_bbit_insns()) { |
1406 | uasm_il_beqz(&p, &r, K0, label_tlbl_goaround1); | 1788 | uasm_il_bbit0(&p, &r, K0, ilog2(_PAGE_VALID), |
1789 | label_tlbl_goaround1); | ||
1790 | } else { | ||
1791 | uasm_i_andi(&p, K0, K0, _PAGE_VALID); | ||
1792 | uasm_il_beqz(&p, &r, K0, label_tlbl_goaround1); | ||
1793 | } | ||
1407 | uasm_i_nop(&p); | 1794 | uasm_i_nop(&p); |
1408 | 1795 | ||
1409 | uasm_i_tlbr(&p); | 1796 | uasm_i_tlbr(&p); |
1410 | /* Examine entrylo 0 or 1 based on ptr. */ | 1797 | /* Examine entrylo 0 or 1 based on ptr. */ |
1411 | uasm_i_andi(&p, K0, K1, sizeof(pte_t)); | 1798 | if (use_bbit_insns()) { |
1412 | uasm_i_beqz(&p, K0, 8); | 1799 | uasm_i_bbit0(&p, K1, ilog2(sizeof(pte_t)), 8); |
1800 | } else { | ||
1801 | uasm_i_andi(&p, K0, K1, sizeof(pte_t)); | ||
1802 | uasm_i_beqz(&p, K0, 8); | ||
1803 | } | ||
1413 | 1804 | ||
1414 | UASM_i_MFC0(&p, K0, C0_ENTRYLO0); /* load it in the delay slot*/ | 1805 | UASM_i_MFC0(&p, K0, C0_ENTRYLO0); /* load it in the delay slot*/ |
1415 | UASM_i_MFC0(&p, K0, C0_ENTRYLO1); /* load it if ptr is odd */ | 1806 | UASM_i_MFC0(&p, K0, C0_ENTRYLO1); /* load it if ptr is odd */ |
@@ -1417,12 +1808,18 @@ static void __cpuinit build_r4000_tlb_load_handler(void) | |||
1417 | * If the entryLo (now in K0) is valid (bit 1), RI or | 1808 | * If the entryLo (now in K0) is valid (bit 1), RI or |
1418 | * XI must have triggered it. | 1809 | * XI must have triggered it. |
1419 | */ | 1810 | */ |
1420 | uasm_i_andi(&p, K0, K0, 2); | 1811 | if (use_bbit_insns()) { |
1421 | uasm_il_bnez(&p, &r, K0, label_nopage_tlbl); | 1812 | uasm_il_bbit1(&p, &r, K0, 1, label_nopage_tlbl); |
1422 | 1813 | /* Reload the PTE value */ | |
1423 | uasm_l_tlbl_goaround1(&l, p); | 1814 | iPTE_LW(&p, K0, K1); |
1424 | /* Reload the PTE value */ | 1815 | uasm_l_tlbl_goaround1(&l, p); |
1425 | iPTE_LW(&p, K0, K1); | 1816 | } else { |
1817 | uasm_i_andi(&p, K0, K0, 2); | ||
1818 | uasm_il_bnez(&p, &r, K0, label_nopage_tlbl); | ||
1819 | uasm_l_tlbl_goaround1(&l, p); | ||
1820 | /* Reload the PTE value */ | ||
1821 | iPTE_LW(&p, K0, K1); | ||
1822 | } | ||
1426 | } | 1823 | } |
1427 | build_make_valid(&p, &r, K0, K1); | 1824 | build_make_valid(&p, &r, K0, K1); |
1428 | build_r4000_tlbchange_handler_tail(&p, &l, &r, K0, K1); | 1825 | build_r4000_tlbchange_handler_tail(&p, &l, &r, K0, K1); |
@@ -1442,23 +1839,35 @@ static void __cpuinit build_r4000_tlb_load_handler(void) | |||
1442 | * If the page is not _PAGE_VALID, RI or XI could not | 1839 | * If the page is not _PAGE_VALID, RI or XI could not |
1443 | * have triggered it. Skip the expensive test.. | 1840 | * have triggered it. Skip the expensive test.. |
1444 | */ | 1841 | */ |
1445 | uasm_i_andi(&p, K0, K0, _PAGE_VALID); | 1842 | if (use_bbit_insns()) { |
1446 | uasm_il_beqz(&p, &r, K0, label_tlbl_goaround2); | 1843 | uasm_il_bbit0(&p, &r, K0, ilog2(_PAGE_VALID), |
1844 | label_tlbl_goaround2); | ||
1845 | } else { | ||
1846 | uasm_i_andi(&p, K0, K0, _PAGE_VALID); | ||
1847 | uasm_il_beqz(&p, &r, K0, label_tlbl_goaround2); | ||
1848 | } | ||
1447 | uasm_i_nop(&p); | 1849 | uasm_i_nop(&p); |
1448 | 1850 | ||
1449 | uasm_i_tlbr(&p); | 1851 | uasm_i_tlbr(&p); |
1450 | /* Examine entrylo 0 or 1 based on ptr. */ | 1852 | /* Examine entrylo 0 or 1 based on ptr. */ |
1451 | uasm_i_andi(&p, K0, K1, sizeof(pte_t)); | 1853 | if (use_bbit_insns()) { |
1452 | uasm_i_beqz(&p, K0, 8); | 1854 | uasm_i_bbit0(&p, K1, ilog2(sizeof(pte_t)), 8); |
1453 | 1855 | } else { | |
1856 | uasm_i_andi(&p, K0, K1, sizeof(pte_t)); | ||
1857 | uasm_i_beqz(&p, K0, 8); | ||
1858 | } | ||
1454 | UASM_i_MFC0(&p, K0, C0_ENTRYLO0); /* load it in the delay slot*/ | 1859 | UASM_i_MFC0(&p, K0, C0_ENTRYLO0); /* load it in the delay slot*/ |
1455 | UASM_i_MFC0(&p, K0, C0_ENTRYLO1); /* load it if ptr is odd */ | 1860 | UASM_i_MFC0(&p, K0, C0_ENTRYLO1); /* load it if ptr is odd */ |
1456 | /* | 1861 | /* |
1457 | * If the entryLo (now in K0) is valid (bit 1), RI or | 1862 | * If the entryLo (now in K0) is valid (bit 1), RI or |
1458 | * XI must have triggered it. | 1863 | * XI must have triggered it. |
1459 | */ | 1864 | */ |
1460 | uasm_i_andi(&p, K0, K0, 2); | 1865 | if (use_bbit_insns()) { |
1461 | uasm_il_beqz(&p, &r, K0, label_tlbl_goaround2); | 1866 | uasm_il_bbit0(&p, &r, K0, 1, label_tlbl_goaround2); |
1867 | } else { | ||
1868 | uasm_i_andi(&p, K0, K0, 2); | ||
1869 | uasm_il_beqz(&p, &r, K0, label_tlbl_goaround2); | ||
1870 | } | ||
1462 | /* Reload the PTE value */ | 1871 | /* Reload the PTE value */ |
1463 | iPTE_LW(&p, K0, K1); | 1872 | iPTE_LW(&p, K0, K1); |
1464 | 1873 | ||
@@ -1466,7 +1875,7 @@ static void __cpuinit build_r4000_tlb_load_handler(void) | |||
1466 | * We clobbered C0_PAGEMASK, restore it. On the other branch | 1875 | * We clobbered C0_PAGEMASK, restore it. On the other branch |
1467 | * it is restored in build_huge_tlb_write_entry. | 1876 | * it is restored in build_huge_tlb_write_entry. |
1468 | */ | 1877 | */ |
1469 | build_restore_pagemask(&p, &r, K0, label_nopage_tlbl); | 1878 | build_restore_pagemask(&p, &r, K0, label_nopage_tlbl, 0); |
1470 | 1879 | ||
1471 | uasm_l_tlbl_goaround2(&l, p); | 1880 | uasm_l_tlbl_goaround2(&l, p); |
1472 | } | 1881 | } |
@@ -1623,13 +2032,16 @@ void __cpuinit build_tlb_refill_handler(void) | |||
1623 | break; | 2032 | break; |
1624 | 2033 | ||
1625 | default: | 2034 | default: |
1626 | build_r4000_tlb_refill_handler(); | ||
1627 | if (!run_once) { | 2035 | if (!run_once) { |
2036 | #ifdef CONFIG_MIPS_PGD_C0_CONTEXT | ||
2037 | build_r4000_setup_pgd(); | ||
2038 | #endif | ||
1628 | build_r4000_tlb_load_handler(); | 2039 | build_r4000_tlb_load_handler(); |
1629 | build_r4000_tlb_store_handler(); | 2040 | build_r4000_tlb_store_handler(); |
1630 | build_r4000_tlb_modify_handler(); | 2041 | build_r4000_tlb_modify_handler(); |
1631 | run_once++; | 2042 | run_once++; |
1632 | } | 2043 | } |
2044 | build_r4000_tlb_refill_handler(); | ||
1633 | } | 2045 | } |
1634 | } | 2046 | } |
1635 | 2047 | ||
@@ -1641,4 +2053,8 @@ void __cpuinit flush_tlb_handlers(void) | |||
1641 | (unsigned long)handle_tlbs + sizeof(handle_tlbs)); | 2053 | (unsigned long)handle_tlbs + sizeof(handle_tlbs)); |
1642 | local_flush_icache_range((unsigned long)handle_tlbm, | 2054 | local_flush_icache_range((unsigned long)handle_tlbm, |
1643 | (unsigned long)handle_tlbm + sizeof(handle_tlbm)); | 2055 | (unsigned long)handle_tlbm + sizeof(handle_tlbm)); |
2056 | #ifdef CONFIG_MIPS_PGD_C0_CONTEXT | ||
2057 | local_flush_icache_range((unsigned long)tlbmiss_handler_setup_pgd, | ||
2058 | (unsigned long)tlbmiss_handler_setup_pgd + sizeof(handle_tlbm)); | ||
2059 | #endif | ||
1644 | } | 2060 | } |
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c index 23afdebc8e5c..5fa185151fc8 100644 --- a/arch/mips/mm/uasm.c +++ b/arch/mips/mm/uasm.c | |||
@@ -68,7 +68,8 @@ enum opcode { | |||
68 | insn_pref, insn_rfe, insn_sc, insn_scd, insn_sd, insn_sll, | 68 | insn_pref, insn_rfe, insn_sc, insn_scd, insn_sd, insn_sll, |
69 | insn_sra, insn_srl, insn_rotr, insn_subu, insn_sw, insn_tlbp, | 69 | insn_sra, insn_srl, insn_rotr, insn_subu, insn_sw, insn_tlbp, |
70 | insn_tlbr, insn_tlbwi, insn_tlbwr, insn_xor, insn_xori, | 70 | insn_tlbr, insn_tlbwi, insn_tlbwr, insn_xor, insn_xori, |
71 | insn_dins, insn_syscall, insn_bbit0, insn_bbit1 | 71 | insn_dins, insn_dinsm, insn_syscall, insn_bbit0, insn_bbit1, |
72 | insn_lwx, insn_ldx | ||
72 | }; | 73 | }; |
73 | 74 | ||
74 | struct insn { | 75 | struct insn { |
@@ -142,9 +143,12 @@ static struct insn insn_table[] __uasminitdata = { | |||
142 | { insn_xor, M(spec_op, 0, 0, 0, 0, xor_op), RS | RT | RD }, | 143 | { insn_xor, M(spec_op, 0, 0, 0, 0, xor_op), RS | RT | RD }, |
143 | { insn_xori, M(xori_op, 0, 0, 0, 0, 0), RS | RT | UIMM }, | 144 | { insn_xori, M(xori_op, 0, 0, 0, 0, 0), RS | RT | UIMM }, |
144 | { insn_dins, M(spec3_op, 0, 0, 0, 0, dins_op), RS | RT | RD | RE }, | 145 | { insn_dins, M(spec3_op, 0, 0, 0, 0, dins_op), RS | RT | RD | RE }, |
146 | { insn_dinsm, M(spec3_op, 0, 0, 0, 0, dinsm_op), RS | RT | RD | RE }, | ||
145 | { insn_syscall, M(spec_op, 0, 0, 0, 0, syscall_op), SCIMM}, | 147 | { insn_syscall, M(spec_op, 0, 0, 0, 0, syscall_op), SCIMM}, |
146 | { insn_bbit0, M(lwc2_op, 0, 0, 0, 0, 0), RS | RT | BIMM }, | 148 | { insn_bbit0, M(lwc2_op, 0, 0, 0, 0, 0), RS | RT | BIMM }, |
147 | { insn_bbit1, M(swc2_op, 0, 0, 0, 0, 0), RS | RT | BIMM }, | 149 | { insn_bbit1, M(swc2_op, 0, 0, 0, 0, 0), RS | RT | BIMM }, |
150 | { insn_lwx, M(spec3_op, 0, 0, 0, lwx_op, lx_op), RS | RT | RD }, | ||
151 | { insn_ldx, M(spec3_op, 0, 0, 0, ldx_op, lx_op), RS | RT | RD }, | ||
148 | { insn_invalid, 0, 0 } | 152 | { insn_invalid, 0, 0 } |
149 | }; | 153 | }; |
150 | 154 | ||
@@ -152,91 +156,83 @@ static struct insn insn_table[] __uasminitdata = { | |||
152 | 156 | ||
153 | static inline __uasminit u32 build_rs(u32 arg) | 157 | static inline __uasminit u32 build_rs(u32 arg) |
154 | { | 158 | { |
155 | if (arg & ~RS_MASK) | 159 | WARN(arg & ~RS_MASK, KERN_WARNING "Micro-assembler field overflow\n"); |
156 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | ||
157 | 160 | ||
158 | return (arg & RS_MASK) << RS_SH; | 161 | return (arg & RS_MASK) << RS_SH; |
159 | } | 162 | } |
160 | 163 | ||
161 | static inline __uasminit u32 build_rt(u32 arg) | 164 | static inline __uasminit u32 build_rt(u32 arg) |
162 | { | 165 | { |
163 | if (arg & ~RT_MASK) | 166 | WARN(arg & ~RT_MASK, KERN_WARNING "Micro-assembler field overflow\n"); |
164 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | ||
165 | 167 | ||
166 | return (arg & RT_MASK) << RT_SH; | 168 | return (arg & RT_MASK) << RT_SH; |
167 | } | 169 | } |
168 | 170 | ||
169 | static inline __uasminit u32 build_rd(u32 arg) | 171 | static inline __uasminit u32 build_rd(u32 arg) |
170 | { | 172 | { |
171 | if (arg & ~RD_MASK) | 173 | WARN(arg & ~RD_MASK, KERN_WARNING "Micro-assembler field overflow\n"); |
172 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | ||
173 | 174 | ||
174 | return (arg & RD_MASK) << RD_SH; | 175 | return (arg & RD_MASK) << RD_SH; |
175 | } | 176 | } |
176 | 177 | ||
177 | static inline __uasminit u32 build_re(u32 arg) | 178 | static inline __uasminit u32 build_re(u32 arg) |
178 | { | 179 | { |
179 | if (arg & ~RE_MASK) | 180 | WARN(arg & ~RE_MASK, KERN_WARNING "Micro-assembler field overflow\n"); |
180 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | ||
181 | 181 | ||
182 | return (arg & RE_MASK) << RE_SH; | 182 | return (arg & RE_MASK) << RE_SH; |
183 | } | 183 | } |
184 | 184 | ||
185 | static inline __uasminit u32 build_simm(s32 arg) | 185 | static inline __uasminit u32 build_simm(s32 arg) |
186 | { | 186 | { |
187 | if (arg > 0x7fff || arg < -0x8000) | 187 | WARN(arg > 0x7fff || arg < -0x8000, |
188 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 188 | KERN_WARNING "Micro-assembler field overflow\n"); |
189 | 189 | ||
190 | return arg & 0xffff; | 190 | return arg & 0xffff; |
191 | } | 191 | } |
192 | 192 | ||
193 | static inline __uasminit u32 build_uimm(u32 arg) | 193 | static inline __uasminit u32 build_uimm(u32 arg) |
194 | { | 194 | { |
195 | if (arg & ~IMM_MASK) | 195 | WARN(arg & ~IMM_MASK, KERN_WARNING "Micro-assembler field overflow\n"); |
196 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | ||
197 | 196 | ||
198 | return arg & IMM_MASK; | 197 | return arg & IMM_MASK; |
199 | } | 198 | } |
200 | 199 | ||
201 | static inline __uasminit u32 build_bimm(s32 arg) | 200 | static inline __uasminit u32 build_bimm(s32 arg) |
202 | { | 201 | { |
203 | if (arg > 0x1ffff || arg < -0x20000) | 202 | WARN(arg > 0x1ffff || arg < -0x20000, |
204 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 203 | KERN_WARNING "Micro-assembler field overflow\n"); |
205 | 204 | ||
206 | if (arg & 0x3) | 205 | WARN(arg & 0x3, KERN_WARNING "Invalid micro-assembler branch target\n"); |
207 | printk(KERN_WARNING "Invalid micro-assembler branch target\n"); | ||
208 | 206 | ||
209 | return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff); | 207 | return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff); |
210 | } | 208 | } |
211 | 209 | ||
212 | static inline __uasminit u32 build_jimm(u32 arg) | 210 | static inline __uasminit u32 build_jimm(u32 arg) |
213 | { | 211 | { |
214 | if (arg & ~((JIMM_MASK) << 2)) | 212 | WARN(arg & ~(JIMM_MASK << 2), |
215 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 213 | KERN_WARNING "Micro-assembler field overflow\n"); |
216 | 214 | ||
217 | return (arg >> 2) & JIMM_MASK; | 215 | return (arg >> 2) & JIMM_MASK; |
218 | } | 216 | } |
219 | 217 | ||
220 | static inline __uasminit u32 build_scimm(u32 arg) | 218 | static inline __uasminit u32 build_scimm(u32 arg) |
221 | { | 219 | { |
222 | if (arg & ~SCIMM_MASK) | 220 | WARN(arg & ~SCIMM_MASK, |
223 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 221 | KERN_WARNING "Micro-assembler field overflow\n"); |
224 | 222 | ||
225 | return (arg & SCIMM_MASK) << SCIMM_SH; | 223 | return (arg & SCIMM_MASK) << SCIMM_SH; |
226 | } | 224 | } |
227 | 225 | ||
228 | static inline __uasminit u32 build_func(u32 arg) | 226 | static inline __uasminit u32 build_func(u32 arg) |
229 | { | 227 | { |
230 | if (arg & ~FUNC_MASK) | 228 | WARN(arg & ~FUNC_MASK, KERN_WARNING "Micro-assembler field overflow\n"); |
231 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | ||
232 | 229 | ||
233 | return arg & FUNC_MASK; | 230 | return arg & FUNC_MASK; |
234 | } | 231 | } |
235 | 232 | ||
236 | static inline __uasminit u32 build_set(u32 arg) | 233 | static inline __uasminit u32 build_set(u32 arg) |
237 | { | 234 | { |
238 | if (arg & ~SET_MASK) | 235 | WARN(arg & ~SET_MASK, KERN_WARNING "Micro-assembler field overflow\n"); |
239 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | ||
240 | 236 | ||
241 | return arg & SET_MASK; | 237 | return arg & SET_MASK; |
242 | } | 238 | } |
@@ -340,6 +336,13 @@ Ip_u2u1msbu3(op) \ | |||
340 | } \ | 336 | } \ |
341 | UASM_EXPORT_SYMBOL(uasm_i##op); | 337 | UASM_EXPORT_SYMBOL(uasm_i##op); |
342 | 338 | ||
339 | #define I_u2u1msb32u3(op) \ | ||
340 | Ip_u2u1msbu3(op) \ | ||
341 | { \ | ||
342 | build_insn(buf, insn##op, b, a, c+d-33, c); \ | ||
343 | } \ | ||
344 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
345 | |||
343 | #define I_u1u2(op) \ | 346 | #define I_u1u2(op) \ |
344 | Ip_u1u2(op) \ | 347 | Ip_u1u2(op) \ |
345 | { \ | 348 | { \ |
@@ -422,9 +425,12 @@ I_0(_tlbwr) | |||
422 | I_u3u1u2(_xor) | 425 | I_u3u1u2(_xor) |
423 | I_u2u1u3(_xori) | 426 | I_u2u1u3(_xori) |
424 | I_u2u1msbu3(_dins); | 427 | I_u2u1msbu3(_dins); |
428 | I_u2u1msb32u3(_dinsm); | ||
425 | I_u1(_syscall); | 429 | I_u1(_syscall); |
426 | I_u1u2s3(_bbit0); | 430 | I_u1u2s3(_bbit0); |
427 | I_u1u2s3(_bbit1); | 431 | I_u1u2s3(_bbit1); |
432 | I_u3u1u2(_lwx) | ||
433 | I_u3u1u2(_ldx) | ||
428 | 434 | ||
429 | #ifdef CONFIG_CPU_CAVIUM_OCTEON | 435 | #ifdef CONFIG_CPU_CAVIUM_OCTEON |
430 | #include <asm/octeon/octeon.h> | 436 | #include <asm/octeon/octeon.h> |
diff --git a/arch/mips/sibyte/common/sb_tbprof.c b/arch/mips/sibyte/common/sb_tbprof.c index 87ccdb4b5ac9..48853ab5bcf0 100644 --- a/arch/mips/sibyte/common/sb_tbprof.c +++ b/arch/mips/sibyte/common/sb_tbprof.c | |||
@@ -410,14 +410,13 @@ static int sbprof_tb_open(struct inode *inode, struct file *filp) | |||
410 | return -EBUSY; | 410 | return -EBUSY; |
411 | 411 | ||
412 | memset(&sbp, 0, sizeof(struct sbprof_tb)); | 412 | memset(&sbp, 0, sizeof(struct sbprof_tb)); |
413 | sbp.sbprof_tbbuf = vmalloc(MAX_TBSAMPLE_BYTES); | 413 | sbp.sbprof_tbbuf = vzalloc(MAX_TBSAMPLE_BYTES); |
414 | if (!sbp.sbprof_tbbuf) { | 414 | if (!sbp.sbprof_tbbuf) { |
415 | sbp.open = SB_CLOSED; | 415 | sbp.open = SB_CLOSED; |
416 | wmb(); | 416 | wmb(); |
417 | return -ENOMEM; | 417 | return -ENOMEM; |
418 | } | 418 | } |
419 | 419 | ||
420 | memset(sbp.sbprof_tbbuf, 0, MAX_TBSAMPLE_BYTES); | ||
421 | init_waitqueue_head(&sbp.tb_sync); | 420 | init_waitqueue_head(&sbp.tb_sync); |
422 | init_waitqueue_head(&sbp.tb_read); | 421 | init_waitqueue_head(&sbp.tb_read); |
423 | mutex_init(&sbp.lock); | 422 | mutex_init(&sbp.lock); |
diff --git a/arch/mips/txx9/generic/pci.c b/arch/mips/txx9/generic/pci.c index 96e69a00ffc8..85a87de17eb4 100644 --- a/arch/mips/txx9/generic/pci.c +++ b/arch/mips/txx9/generic/pci.c | |||
@@ -213,11 +213,8 @@ txx9_alloc_pci_controller(struct pci_controller *pcic, | |||
213 | 213 | ||
214 | pcic->mem_offset = 0; /* busaddr == physaddr */ | 214 | pcic->mem_offset = 0; /* busaddr == physaddr */ |
215 | 215 | ||
216 | printk(KERN_INFO "PCI: IO 0x%08llx-0x%08llx MEM 0x%08llx-0x%08llx\n", | 216 | printk(KERN_INFO "PCI: IO %pR MEM %pR\n", |
217 | (unsigned long long)pcic->mem_resource[1].start, | 217 | &pcic->mem_resource[1], &pcic->mem_resource[0]); |
218 | (unsigned long long)pcic->mem_resource[1].end, | ||
219 | (unsigned long long)pcic->mem_resource[0].start, | ||
220 | (unsigned long long)pcic->mem_resource[0].end); | ||
221 | 218 | ||
222 | /* register_pci_controller() will request MEM resource */ | 219 | /* register_pci_controller() will request MEM resource */ |
223 | release_resource(&pcic->mem_resource[0]); | 220 | release_resource(&pcic->mem_resource[0]); |
diff --git a/arch/mn10300/Kconfig b/arch/mn10300/Kconfig index 8ed41cf2b08d..243bfa23fd58 100644 --- a/arch/mn10300/Kconfig +++ b/arch/mn10300/Kconfig | |||
@@ -1,6 +1,7 @@ | |||
1 | config MN10300 | 1 | config MN10300 |
2 | def_bool y | 2 | def_bool y |
3 | select HAVE_OPROFILE | 3 | select HAVE_OPROFILE |
4 | select GENERIC_HARDIRQS | ||
4 | 5 | ||
5 | config AM33_2 | 6 | config AM33_2 |
6 | def_bool n | 7 | def_bool n |
@@ -34,9 +35,6 @@ config RWSEM_GENERIC_SPINLOCK | |||
34 | config RWSEM_XCHGADD_ALGORITHM | 35 | config RWSEM_XCHGADD_ALGORITHM |
35 | bool | 36 | bool |
36 | 37 | ||
37 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
38 | def_bool y | ||
39 | |||
40 | config GENERIC_CALIBRATE_DELAY | 38 | config GENERIC_CALIBRATE_DELAY |
41 | def_bool y | 39 | def_bool y |
42 | 40 | ||
@@ -79,10 +77,6 @@ config QUICKLIST | |||
79 | config ARCH_HAS_ILOG2_U32 | 77 | config ARCH_HAS_ILOG2_U32 |
80 | def_bool y | 78 | def_bool y |
81 | 79 | ||
82 | # Use the generic interrupt handling code in kernel/irq/ | ||
83 | config GENERIC_HARDIRQS | ||
84 | def_bool y | ||
85 | |||
86 | config HOTPLUG_CPU | 80 | config HOTPLUG_CPU |
87 | def_bool n | 81 | def_bool n |
88 | 82 | ||
diff --git a/arch/mn10300/configs/asb2303_defconfig b/arch/mn10300/configs/asb2303_defconfig index 3f749b69ca71..1fd41ec1dfb5 100644 --- a/arch/mn10300/configs/asb2303_defconfig +++ b/arch/mn10300/configs/asb2303_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
4 | CONFIG_TINY_RCU=y | 4 | CONFIG_TINY_RCU=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_HOTPLUG is not set | 9 | # CONFIG_HOTPLUG is not set |
10 | # CONFIG_VM_EVENT_COUNTERS is not set | 10 | # CONFIG_VM_EVENT_COUNTERS is not set |
diff --git a/arch/mn10300/configs/asb2364_defconfig b/arch/mn10300/configs/asb2364_defconfig index 83ce2f27b12a..31d76261a3d5 100644 --- a/arch/mn10300/configs/asb2364_defconfig +++ b/arch/mn10300/configs/asb2364_defconfig | |||
@@ -15,7 +15,7 @@ CONFIG_CGROUP_CPUACCT=y | |||
15 | CONFIG_RESOURCE_COUNTERS=y | 15 | CONFIG_RESOURCE_COUNTERS=y |
16 | CONFIG_RELAY=y | 16 | CONFIG_RELAY=y |
17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 17 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
18 | CONFIG_EMBEDDED=y | 18 | CONFIG_EXPERT=y |
19 | # CONFIG_KALLSYMS is not set | 19 | # CONFIG_KALLSYMS is not set |
20 | # CONFIG_VM_EVENT_COUNTERS is not set | 20 | # CONFIG_VM_EVENT_COUNTERS is not set |
21 | CONFIG_SLAB=y | 21 | CONFIG_SLAB=y |
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 0888675c98dd..fed2946f7335 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig | |||
@@ -12,7 +12,10 @@ config PARISC | |||
12 | select HAVE_IRQ_WORK | 12 | select HAVE_IRQ_WORK |
13 | select HAVE_PERF_EVENTS | 13 | select HAVE_PERF_EVENTS |
14 | select GENERIC_ATOMIC64 if !64BIT | 14 | select GENERIC_ATOMIC64 if !64BIT |
15 | select GENERIC_HARDIRQS_NO__DO_IRQ | 15 | select HAVE_GENERIC_HARDIRQS |
16 | select GENERIC_IRQ_PROBE | ||
17 | select IRQ_PER_CPU | ||
18 | |||
16 | help | 19 | help |
17 | The PA-RISC microprocessor is designed by Hewlett-Packard and used | 20 | The PA-RISC microprocessor is designed by Hewlett-Packard and used |
18 | in many of their workstations & servers (HP9000 700 and 800 series, | 21 | in many of their workstations & servers (HP9000 700 and 800 series, |
@@ -66,22 +69,9 @@ config TIME_LOW_RES | |||
66 | depends on SMP | 69 | depends on SMP |
67 | default y | 70 | default y |
68 | 71 | ||
69 | config GENERIC_HARDIRQS | ||
70 | def_bool y | ||
71 | |||
72 | config GENERIC_IRQ_PROBE | ||
73 | def_bool y | ||
74 | |||
75 | config HAVE_LATENCYTOP_SUPPORT | 72 | config HAVE_LATENCYTOP_SUPPORT |
76 | def_bool y | 73 | def_bool y |
77 | 74 | ||
78 | config IRQ_PER_CPU | ||
79 | bool | ||
80 | default y | ||
81 | |||
82 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
83 | def_bool y | ||
84 | |||
85 | # unless you want to implement ACPI on PA-RISC ... ;-) | 75 | # unless you want to implement ACPI on PA-RISC ... ;-) |
86 | config PM | 76 | config PM |
87 | bool | 77 | bool |
diff --git a/arch/parisc/configs/a500_defconfig b/arch/parisc/configs/a500_defconfig index f9305f30603a..b647b182dacc 100644 --- a/arch/parisc/configs/a500_defconfig +++ b/arch/parisc/configs/a500_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_LOG_BUF_SHIFT=16 | |||
8 | CONFIG_SYSFS_DEPRECATED_V2=y | 8 | CONFIG_SYSFS_DEPRECATED_V2=y |
9 | CONFIG_BLK_DEV_INITRD=y | 9 | CONFIG_BLK_DEV_INITRD=y |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | CONFIG_KALLSYMS_ALL=y | 12 | CONFIG_KALLSYMS_ALL=y |
13 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
14 | CONFIG_PROFILING=y | 14 | CONFIG_PROFILING=y |
diff --git a/arch/parisc/configs/c3000_defconfig b/arch/parisc/configs/c3000_defconfig index 628d3e022535..311ca367b622 100644 --- a/arch/parisc/configs/c3000_defconfig +++ b/arch/parisc/configs/c3000_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG_PROC=y | |||
6 | CONFIG_LOG_BUF_SHIFT=16 | 6 | CONFIG_LOG_BUF_SHIFT=16 |
7 | CONFIG_SYSFS_DEPRECATED_V2=y | 7 | CONFIG_SYSFS_DEPRECATED_V2=y |
8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | CONFIG_KALLSYMS_ALL=y | 10 | CONFIG_KALLSYMS_ALL=y |
11 | CONFIG_SLAB=y | 11 | CONFIG_SLAB=y |
12 | CONFIG_PROFILING=y | 12 | CONFIG_PROFILING=y |
diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c index df971fa0c32f..4896ed090585 100644 --- a/arch/parisc/kernel/firmware.c +++ b/arch/parisc/kernel/firmware.c | |||
@@ -1126,15 +1126,13 @@ int pdc_iodc_print(const unsigned char *str, unsigned count) | |||
1126 | unsigned int i; | 1126 | unsigned int i; |
1127 | unsigned long flags; | 1127 | unsigned long flags; |
1128 | 1128 | ||
1129 | for (i = 0; i < count && i < 79;) { | 1129 | for (i = 0; i < count;) { |
1130 | switch(str[i]) { | 1130 | switch(str[i]) { |
1131 | case '\n': | 1131 | case '\n': |
1132 | iodc_dbuf[i+0] = '\r'; | 1132 | iodc_dbuf[i+0] = '\r'; |
1133 | iodc_dbuf[i+1] = '\n'; | 1133 | iodc_dbuf[i+1] = '\n'; |
1134 | i += 2; | 1134 | i += 2; |
1135 | goto print; | 1135 | goto print; |
1136 | case '\b': /* BS */ | ||
1137 | i--; /* overwrite last */ | ||
1138 | default: | 1136 | default: |
1139 | iodc_dbuf[i] = str[i]; | 1137 | iodc_dbuf[i] = str[i]; |
1140 | i++; | 1138 | i++; |
@@ -1142,15 +1140,6 @@ int pdc_iodc_print(const unsigned char *str, unsigned count) | |||
1142 | } | 1140 | } |
1143 | } | 1141 | } |
1144 | 1142 | ||
1145 | /* if we're at the end of line, and not already inserting a newline, | ||
1146 | * insert one anyway. iodc console doesn't claim to support >79 char | ||
1147 | * lines. don't account for this in the return value. | ||
1148 | */ | ||
1149 | if (i == 79 && iodc_dbuf[i-1] != '\n') { | ||
1150 | iodc_dbuf[i+0] = '\r'; | ||
1151 | iodc_dbuf[i+1] = '\n'; | ||
1152 | } | ||
1153 | |||
1154 | print: | 1143 | print: |
1155 | spin_lock_irqsave(&pdc_lock, flags); | 1144 | spin_lock_irqsave(&pdc_lock, flags); |
1156 | real32_call(PAGE0->mem_cons.iodc_io, | 1145 | real32_call(PAGE0->mem_cons.iodc_io, |
diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c index 11bdd68e5762..fc770be465ff 100644 --- a/arch/parisc/kernel/pdc_cons.c +++ b/arch/parisc/kernel/pdc_cons.c | |||
@@ -169,11 +169,11 @@ static int __init pdc_console_tty_driver_init(void) | |||
169 | 169 | ||
170 | struct console *tmp; | 170 | struct console *tmp; |
171 | 171 | ||
172 | acquire_console_sem(); | 172 | console_lock(); |
173 | for_each_console(tmp) | 173 | for_each_console(tmp) |
174 | if (tmp == &pdc_cons) | 174 | if (tmp == &pdc_cons) |
175 | break; | 175 | break; |
176 | release_console_sem(); | 176 | console_unlock(); |
177 | 177 | ||
178 | if (!tmp) { | 178 | if (!tmp) { |
179 | printk(KERN_INFO "PDC console driver not registered anymore, not creating %s\n", pdc_cons.name); | 179 | printk(KERN_INFO "PDC console driver not registered anymore, not creating %s\n", pdc_cons.name); |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 959f38ccb9a7..7d69e9bf5e64 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -36,24 +36,12 @@ config GENERIC_TIME_VSYSCALL | |||
36 | config GENERIC_CLOCKEVENTS | 36 | config GENERIC_CLOCKEVENTS |
37 | def_bool y | 37 | def_bool y |
38 | 38 | ||
39 | config GENERIC_HARDIRQS | ||
40 | bool | ||
41 | default y | ||
42 | |||
43 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
44 | bool | ||
45 | default y | ||
46 | |||
47 | config HAVE_SETUP_PER_CPU_AREA | 39 | config HAVE_SETUP_PER_CPU_AREA |
48 | def_bool PPC64 | 40 | def_bool PPC64 |
49 | 41 | ||
50 | config NEED_PER_CPU_EMBED_FIRST_CHUNK | 42 | config NEED_PER_CPU_EMBED_FIRST_CHUNK |
51 | def_bool PPC64 | 43 | def_bool PPC64 |
52 | 44 | ||
53 | config IRQ_PER_CPU | ||
54 | bool | ||
55 | default y | ||
56 | |||
57 | config NR_IRQS | 45 | config NR_IRQS |
58 | int "Number of virtual interrupt numbers" | 46 | int "Number of virtual interrupt numbers" |
59 | range 32 32768 | 47 | range 32 32768 |
@@ -143,6 +131,9 @@ config PPC | |||
143 | select HAVE_PERF_EVENTS | 131 | select HAVE_PERF_EVENTS |
144 | select HAVE_REGS_AND_STACK_ACCESS_API | 132 | select HAVE_REGS_AND_STACK_ACCESS_API |
145 | select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64 | 133 | select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64 |
134 | select HAVE_GENERIC_HARDIRQS | ||
135 | select HAVE_SPARSE_IRQ | ||
136 | select IRQ_PER_CPU | ||
146 | 137 | ||
147 | config EARLY_PRINTK | 138 | config EARLY_PRINTK |
148 | bool | 139 | bool |
@@ -392,19 +383,6 @@ config IRQ_ALL_CPUS | |||
392 | CPU. Generally saying Y is safe, although some problems have been | 383 | CPU. Generally saying Y is safe, although some problems have been |
393 | reported with SMP Power Macintoshes with this option enabled. | 384 | reported with SMP Power Macintoshes with this option enabled. |
394 | 385 | ||
395 | config SPARSE_IRQ | ||
396 | bool "Support sparse irq numbering" | ||
397 | default n | ||
398 | help | ||
399 | This enables support for sparse irqs. This is useful for distro | ||
400 | kernels that want to define a high CONFIG_NR_CPUS value but still | ||
401 | want to have low kernel memory footprint on smaller machines. | ||
402 | |||
403 | ( Sparse IRQs can also be beneficial on NUMA boxes, as they spread | ||
404 | out the irq_desc[] array in a more NUMA-friendly way. ) | ||
405 | |||
406 | If you don't know what to do here, say N. | ||
407 | |||
408 | config NUMA | 386 | config NUMA |
409 | bool "NUMA support" | 387 | bool "NUMA support" |
410 | depends on PPC64 | 388 | depends on PPC64 |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 96deec63bcf3..89178164af5e 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
@@ -368,7 +368,7 @@ INSTALL := install | |||
368 | extra-installed := $(patsubst $(obj)/%, $(DESTDIR)$(WRAPPER_OBJDIR)/%, $(extra-y)) | 368 | extra-installed := $(patsubst $(obj)/%, $(DESTDIR)$(WRAPPER_OBJDIR)/%, $(extra-y)) |
369 | hostprogs-installed := $(patsubst %, $(DESTDIR)$(WRAPPER_BINDIR)/%, $(hostprogs-y)) | 369 | hostprogs-installed := $(patsubst %, $(DESTDIR)$(WRAPPER_BINDIR)/%, $(hostprogs-y)) |
370 | wrapper-installed := $(DESTDIR)$(WRAPPER_BINDIR)/wrapper | 370 | wrapper-installed := $(DESTDIR)$(WRAPPER_BINDIR)/wrapper |
371 | dts-installed := $(patsubst $(obj)/dts/%, $(DESTDIR)$(WRAPPER_DTSDIR)/%, $(wildcard $(obj)/dts/*.dts)) | 371 | dts-installed := $(patsubst $(dtstree)/%, $(DESTDIR)$(WRAPPER_DTSDIR)/%, $(wildcard $(dtstree)/*.dts)) |
372 | 372 | ||
373 | all-installed := $(extra-installed) $(hostprogs-installed) $(wrapper-installed) $(dts-installed) | 373 | all-installed := $(extra-installed) $(hostprogs-installed) $(wrapper-installed) $(dts-installed) |
374 | 374 | ||
diff --git a/arch/powerpc/boot/dts/mpc8308rdb.dts b/arch/powerpc/boot/dts/mpc8308rdb.dts index d3db02f98ddd..a0bd1881081e 100644 --- a/arch/powerpc/boot/dts/mpc8308rdb.dts +++ b/arch/powerpc/boot/dts/mpc8308rdb.dts | |||
@@ -109,7 +109,7 @@ | |||
109 | #address-cells = <1>; | 109 | #address-cells = <1>; |
110 | #size-cells = <1>; | 110 | #size-cells = <1>; |
111 | device_type = "soc"; | 111 | device_type = "soc"; |
112 | compatible = "fsl,mpc8315-immr", "simple-bus"; | 112 | compatible = "fsl,mpc8308-immr", "simple-bus"; |
113 | ranges = <0 0xe0000000 0x00100000>; | 113 | ranges = <0 0xe0000000 0x00100000>; |
114 | reg = <0xe0000000 0x00000200>; | 114 | reg = <0xe0000000 0x00000200>; |
115 | bus-frequency = <0>; | 115 | bus-frequency = <0>; |
diff --git a/arch/powerpc/boot/dts/p1022ds.dts b/arch/powerpc/boot/dts/p1022ds.dts index 2bbecbb4cbf9..69422eb24d97 100644 --- a/arch/powerpc/boot/dts/p1022ds.dts +++ b/arch/powerpc/boot/dts/p1022ds.dts | |||
@@ -291,13 +291,13 @@ | |||
291 | ranges = <0x0 0xc100 0x200>; | 291 | ranges = <0x0 0xc100 0x200>; |
292 | cell-index = <1>; | 292 | cell-index = <1>; |
293 | dma00: dma-channel@0 { | 293 | dma00: dma-channel@0 { |
294 | compatible = "fsl,eloplus-dma-channel"; | 294 | compatible = "fsl,ssi-dma-channel"; |
295 | reg = <0x0 0x80>; | 295 | reg = <0x0 0x80>; |
296 | cell-index = <0>; | 296 | cell-index = <0>; |
297 | interrupts = <76 2>; | 297 | interrupts = <76 2>; |
298 | }; | 298 | }; |
299 | dma01: dma-channel@80 { | 299 | dma01: dma-channel@80 { |
300 | compatible = "fsl,eloplus-dma-channel"; | 300 | compatible = "fsl,ssi-dma-channel"; |
301 | reg = <0x80 0x80>; | 301 | reg = <0x80 0x80>; |
302 | cell-index = <1>; | 302 | cell-index = <1>; |
303 | interrupts = <77 2>; | 303 | interrupts = <77 2>; |
diff --git a/arch/powerpc/configs/40x/acadia_defconfig b/arch/powerpc/configs/40x/acadia_defconfig index 97fedceaa30b..4182c772340b 100644 --- a/arch/powerpc/configs/40x/acadia_defconfig +++ b/arch/powerpc/configs/40x/acadia_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_ALL=y | 9 | CONFIG_KALLSYMS_ALL=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/40x/ep405_defconfig b/arch/powerpc/configs/40x/ep405_defconfig index 33b3c24f4edd..2dbb293163f5 100644 --- a/arch/powerpc/configs/40x/ep405_defconfig +++ b/arch/powerpc/configs/40x/ep405_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_ALL=y | 9 | CONFIG_KALLSYMS_ALL=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/40x/hcu4_defconfig b/arch/powerpc/configs/40x/hcu4_defconfig index 4613079a0ab1..ebeb4accad65 100644 --- a/arch/powerpc/configs/40x/hcu4_defconfig +++ b/arch/powerpc/configs/40x/hcu4_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_ALL=y | 9 | CONFIG_KALLSYMS_ALL=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/40x/kilauea_defconfig b/arch/powerpc/configs/40x/kilauea_defconfig index 34b8c1a1e752..532ea9d93a15 100644 --- a/arch/powerpc/configs/40x/kilauea_defconfig +++ b/arch/powerpc/configs/40x/kilauea_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_ALL=y | 9 | CONFIG_KALLSYMS_ALL=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/40x/makalu_defconfig b/arch/powerpc/configs/40x/makalu_defconfig index 651be09136fa..3c142ac1b344 100644 --- a/arch/powerpc/configs/40x/makalu_defconfig +++ b/arch/powerpc/configs/40x/makalu_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_ALL=y | 9 | CONFIG_KALLSYMS_ALL=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/40x/walnut_defconfig b/arch/powerpc/configs/40x/walnut_defconfig index ded455e18339..ff57d4828ffc 100644 --- a/arch/powerpc/configs/40x/walnut_defconfig +++ b/arch/powerpc/configs/40x/walnut_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_ALL=y | 9 | CONFIG_KALLSYMS_ALL=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/44x/arches_defconfig b/arch/powerpc/configs/44x/arches_defconfig index 63746a041d6b..3ed16d5c909d 100644 --- a/arch/powerpc/configs/44x/arches_defconfig +++ b/arch/powerpc/configs/44x/arches_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
11 | # CONFIG_BLK_DEV_BSG is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/bamboo_defconfig b/arch/powerpc/configs/44x/bamboo_defconfig index f5f2a4e3e21b..b1b7d2c5c059 100644 --- a/arch/powerpc/configs/44x/bamboo_defconfig +++ b/arch/powerpc/configs/44x/bamboo_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
11 | # CONFIG_BLK_DEV_BSG is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/bluestone_defconfig b/arch/powerpc/configs/44x/bluestone_defconfig index ac65b48b8ccd..30a0a8e08fdd 100644 --- a/arch/powerpc/configs/44x/bluestone_defconfig +++ b/arch/powerpc/configs/44x/bluestone_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_POSIX_MQUEUE=y | 4 | CONFIG_POSIX_MQUEUE=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_VM_EVENT_COUNTERS is not set | 8 | # CONFIG_VM_EVENT_COUNTERS is not set |
9 | # CONFIG_PCI_QUIRKS is not set | 9 | # CONFIG_PCI_QUIRKS is not set |
10 | # CONFIG_COMPAT_BRK is not set | 10 | # CONFIG_COMPAT_BRK is not set |
diff --git a/arch/powerpc/configs/44x/canyonlands_defconfig b/arch/powerpc/configs/44x/canyonlands_defconfig index 17e4dd98eed7..a46942aac695 100644 --- a/arch/powerpc/configs/44x/canyonlands_defconfig +++ b/arch/powerpc/configs/44x/canyonlands_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
11 | # CONFIG_BLK_DEV_BSG is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/ebony_defconfig b/arch/powerpc/configs/44x/ebony_defconfig index fedd03fdf5d5..07d77e51f1ba 100644 --- a/arch/powerpc/configs/44x/ebony_defconfig +++ b/arch/powerpc/configs/44x/ebony_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_ALL=y | 9 | CONFIG_KALLSYMS_ALL=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/44x/eiger_defconfig b/arch/powerpc/configs/44x/eiger_defconfig index ebff7011282e..2ce7e9aff09e 100644 --- a/arch/powerpc/configs/44x/eiger_defconfig +++ b/arch/powerpc/configs/44x/eiger_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
11 | # CONFIG_BLK_DEV_BSG is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/icon_defconfig b/arch/powerpc/configs/44x/icon_defconfig index 865e93fb41fd..18730ff9de7c 100644 --- a/arch/powerpc/configs/44x/icon_defconfig +++ b/arch/powerpc/configs/44x/icon_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
11 | CONFIG_MODULE_UNLOAD=y | 11 | CONFIG_MODULE_UNLOAD=y |
12 | # CONFIG_BLK_DEV_BSG is not set | 12 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/iss476-smp_defconfig b/arch/powerpc/configs/44x/iss476-smp_defconfig index 8ece4c774415..92f863ac8443 100644 --- a/arch/powerpc/configs/44x/iss476-smp_defconfig +++ b/arch/powerpc/configs/44x/iss476-smp_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
7 | CONFIG_SYSFS_DEPRECATED_V2=y | 7 | CONFIG_SYSFS_DEPRECATED_V2=y |
8 | CONFIG_BLK_DEV_INITRD=y | 8 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | CONFIG_KALLSYMS_ALL=y | 11 | CONFIG_KALLSYMS_ALL=y |
12 | CONFIG_KALLSYMS_EXTRA_PASS=y | 12 | CONFIG_KALLSYMS_EXTRA_PASS=y |
13 | CONFIG_PROFILING=y | 13 | CONFIG_PROFILING=y |
diff --git a/arch/powerpc/configs/44x/katmai_defconfig b/arch/powerpc/configs/44x/katmai_defconfig index 4ca9b4873c51..34c09144a699 100644 --- a/arch/powerpc/configs/44x/katmai_defconfig +++ b/arch/powerpc/configs/44x/katmai_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
11 | # CONFIG_BLK_DEV_BSG is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/rainier_defconfig b/arch/powerpc/configs/44x/rainier_defconfig index e3b65d24207e..21c33faf61a2 100644 --- a/arch/powerpc/configs/44x/rainier_defconfig +++ b/arch/powerpc/configs/44x/rainier_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
11 | # CONFIG_BLK_DEV_BSG is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/redwood_defconfig b/arch/powerpc/configs/44x/redwood_defconfig index 64cd0f3421a9..01cc2b1a7f9a 100644 --- a/arch/powerpc/configs/44x/redwood_defconfig +++ b/arch/powerpc/configs/44x/redwood_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
11 | # CONFIG_BLK_DEV_BSG is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/sam440ep_defconfig b/arch/powerpc/configs/44x/sam440ep_defconfig index 01d03367917e..dfcffede16ad 100644 --- a/arch/powerpc/configs/44x/sam440ep_defconfig +++ b/arch/powerpc/configs/44x/sam440ep_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG=y | |||
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | CONFIG_MODULES=y | 10 | CONFIG_MODULES=y |
11 | CONFIG_MODULE_UNLOAD=y | 11 | CONFIG_MODULE_UNLOAD=y |
12 | # CONFIG_BLK_DEV_BSG is not set | 12 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/sequoia_defconfig b/arch/powerpc/configs/44x/sequoia_defconfig index 89b2f9626137..47e399f2892f 100644 --- a/arch/powerpc/configs/44x/sequoia_defconfig +++ b/arch/powerpc/configs/44x/sequoia_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
11 | # CONFIG_BLK_DEV_BSG is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/taishan_defconfig b/arch/powerpc/configs/44x/taishan_defconfig index e3386cf6f5b7..a6a002ed5681 100644 --- a/arch/powerpc/configs/44x/taishan_defconfig +++ b/arch/powerpc/configs/44x/taishan_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
11 | # CONFIG_BLK_DEV_BSG is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/44x/warp_defconfig b/arch/powerpc/configs/44x/warp_defconfig index 9c13b9dffafa..6cf9d6614805 100644 --- a/arch/powerpc/configs/44x/warp_defconfig +++ b/arch/powerpc/configs/44x/warp_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_IKCONFIG_PROC=y | |||
8 | CONFIG_LOG_BUF_SHIFT=14 | 8 | CONFIG_LOG_BUF_SHIFT=14 |
9 | CONFIG_BLK_DEV_INITRD=y | 9 | CONFIG_BLK_DEV_INITRD=y |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | CONFIG_MODULES=y | 12 | CONFIG_MODULES=y |
13 | CONFIG_MODULE_UNLOAD=y | 13 | CONFIG_MODULE_UNLOAD=y |
14 | # CONFIG_BLK_DEV_BSG is not set | 14 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/52xx/cm5200_defconfig b/arch/powerpc/configs/52xx/cm5200_defconfig index f234c4d0b15c..69b57daf402e 100644 --- a/arch/powerpc/configs/52xx/cm5200_defconfig +++ b/arch/powerpc/configs/52xx/cm5200_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_SYSCTL_SYSCALL is not set | 7 | # CONFIG_SYSCTL_SYSCALL is not set |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_EPOLL is not set | 9 | # CONFIG_EPOLL is not set |
diff --git a/arch/powerpc/configs/52xx/lite5200b_defconfig b/arch/powerpc/configs/52xx/lite5200b_defconfig index a4a795c80740..f3638ae0a627 100644 --- a/arch/powerpc/configs/52xx/lite5200b_defconfig +++ b/arch/powerpc/configs/52xx/lite5200b_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_SYSCTL_SYSCALL is not set | 7 | # CONFIG_SYSCTL_SYSCALL is not set |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_EPOLL is not set | 9 | # CONFIG_EPOLL is not set |
diff --git a/arch/powerpc/configs/52xx/motionpro_defconfig b/arch/powerpc/configs/52xx/motionpro_defconfig index 20d53a1aa7e4..6828eda02bdc 100644 --- a/arch/powerpc/configs/52xx/motionpro_defconfig +++ b/arch/powerpc/configs/52xx/motionpro_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_SYSCTL_SYSCALL is not set | 7 | # CONFIG_SYSCTL_SYSCALL is not set |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_EPOLL is not set | 9 | # CONFIG_EPOLL is not set |
diff --git a/arch/powerpc/configs/52xx/pcm030_defconfig b/arch/powerpc/configs/52xx/pcm030_defconfig index 6bd58338bf1a..7f7e4a878602 100644 --- a/arch/powerpc/configs/52xx/pcm030_defconfig +++ b/arch/powerpc/configs/52xx/pcm030_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_IKCONFIG=y | |||
8 | CONFIG_IKCONFIG_PROC=y | 8 | CONFIG_IKCONFIG_PROC=y |
9 | CONFIG_LOG_BUF_SHIFT=14 | 9 | CONFIG_LOG_BUF_SHIFT=14 |
10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 10 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | # CONFIG_SYSCTL_SYSCALL is not set | 12 | # CONFIG_SYSCTL_SYSCALL is not set |
13 | # CONFIG_VM_EVENT_COUNTERS is not set | 13 | # CONFIG_VM_EVENT_COUNTERS is not set |
14 | CONFIG_SLAB=y | 14 | CONFIG_SLAB=y |
diff --git a/arch/powerpc/configs/52xx/tqm5200_defconfig b/arch/powerpc/configs/52xx/tqm5200_defconfig index 3a1f70292d9d..959cd2cfc275 100644 --- a/arch/powerpc/configs/52xx/tqm5200_defconfig +++ b/arch/powerpc/configs/52xx/tqm5200_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_SYSCTL_SYSCALL is not set | 7 | # CONFIG_SYSCTL_SYSCALL is not set |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_EPOLL is not set | 9 | # CONFIG_EPOLL is not set |
diff --git a/arch/powerpc/configs/83xx/asp8347_defconfig b/arch/powerpc/configs/83xx/asp8347_defconfig index eed42d8919e8..d2762d9dcb8e 100644 --- a/arch/powerpc/configs/83xx/asp8347_defconfig +++ b/arch/powerpc/configs/83xx/asp8347_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
10 | CONFIG_MODULE_UNLOAD=y | 10 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/kmeter1_defconfig b/arch/powerpc/configs/83xx/kmeter1_defconfig index e43ecb27dfd7..7a7b731c5735 100644 --- a/arch/powerpc/configs/83xx/kmeter1_defconfig +++ b/arch/powerpc/configs/83xx/kmeter1_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_EXPERIMENTAL=y | |||
3 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 4 | CONFIG_POSIX_MQUEUE=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_HOTPLUG is not set | 7 | # CONFIG_HOTPLUG is not set |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig b/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig index c2e6ab51d335..c683bce4c26e 100644 --- a/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig +++ b/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc8315_rdb_defconfig b/arch/powerpc/configs/83xx/mpc8315_rdb_defconfig index 1d3b20065913..a721cd3d793f 100644 --- a/arch/powerpc/configs/83xx/mpc8315_rdb_defconfig +++ b/arch/powerpc/configs/83xx/mpc8315_rdb_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc832x_mds_defconfig b/arch/powerpc/configs/83xx/mpc832x_mds_defconfig index 91fe73bd5ad2..a5699a1f7d0a 100644 --- a/arch/powerpc/configs/83xx/mpc832x_mds_defconfig +++ b/arch/powerpc/configs/83xx/mpc832x_mds_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc832x_rdb_defconfig b/arch/powerpc/configs/83xx/mpc832x_rdb_defconfig index 6d300f205604..b4da1a7e6449 100644 --- a/arch/powerpc/configs/83xx/mpc832x_rdb_defconfig +++ b/arch/powerpc/configs/83xx/mpc832x_rdb_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc834x_itx_defconfig b/arch/powerpc/configs/83xx/mpc834x_itx_defconfig index b236a67e01fe..291f8221d5a6 100644 --- a/arch/powerpc/configs/83xx/mpc834x_itx_defconfig +++ b/arch/powerpc/configs/83xx/mpc834x_itx_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc834x_itxgp_defconfig b/arch/powerpc/configs/83xx/mpc834x_itxgp_defconfig index 001dead3cde9..f8b228aaa03a 100644 --- a/arch/powerpc/configs/83xx/mpc834x_itxgp_defconfig +++ b/arch/powerpc/configs/83xx/mpc834x_itxgp_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc834x_mds_defconfig b/arch/powerpc/configs/83xx/mpc834x_mds_defconfig index 9dccefca00c3..99660c062191 100644 --- a/arch/powerpc/configs/83xx/mpc834x_mds_defconfig +++ b/arch/powerpc/configs/83xx/mpc834x_mds_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc836x_mds_defconfig b/arch/powerpc/configs/83xx/mpc836x_mds_defconfig index d4b165d7d294..10b5c4cd0e72 100644 --- a/arch/powerpc/configs/83xx/mpc836x_mds_defconfig +++ b/arch/powerpc/configs/83xx/mpc836x_mds_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc836x_rdk_defconfig b/arch/powerpc/configs/83xx/mpc836x_rdk_defconfig index 89ba67274bda..45925d701d2a 100644 --- a/arch/powerpc/configs/83xx/mpc836x_rdk_defconfig +++ b/arch/powerpc/configs/83xx/mpc836x_rdk_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc837x_mds_defconfig b/arch/powerpc/configs/83xx/mpc837x_mds_defconfig index 2ea6b405046a..f367985be6f7 100644 --- a/arch/powerpc/configs/83xx/mpc837x_mds_defconfig +++ b/arch/powerpc/configs/83xx/mpc837x_mds_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | CONFIG_SLAB=y | 7 | CONFIG_SLAB=y |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/mpc837x_rdb_defconfig b/arch/powerpc/configs/83xx/mpc837x_rdb_defconfig index bffe3c775030..414eda381591 100644 --- a/arch/powerpc/configs/83xx/mpc837x_rdb_defconfig +++ b/arch/powerpc/configs/83xx/mpc837x_rdb_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | CONFIG_SLAB=y | 7 | CONFIG_SLAB=y |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/83xx/sbc834x_defconfig b/arch/powerpc/configs/83xx/sbc834x_defconfig index fa5c9eefc9ad..6d6463fe06fc 100644 --- a/arch/powerpc/configs/83xx/sbc834x_defconfig +++ b/arch/powerpc/configs/83xx/sbc834x_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_KALLSYMS is not set | 7 | # CONFIG_KALLSYMS is not set |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/85xx/ksi8560_defconfig b/arch/powerpc/configs/85xx/ksi8560_defconfig index 385b1af37d75..8f7c1061891a 100644 --- a/arch/powerpc/configs/85xx/ksi8560_defconfig +++ b/arch/powerpc/configs/85xx/ksi8560_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
9 | CONFIG_KSI8560=y | 9 | CONFIG_KSI8560=y |
10 | CONFIG_CPM2=y | 10 | CONFIG_CPM2=y |
diff --git a/arch/powerpc/configs/85xx/mpc8540_ads_defconfig b/arch/powerpc/configs/85xx/mpc8540_ads_defconfig index 222b704c1f4b..55e0725500dc 100644 --- a/arch/powerpc/configs/85xx/mpc8540_ads_defconfig +++ b/arch/powerpc/configs/85xx/mpc8540_ads_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
9 | CONFIG_MPC8540_ADS=y | 9 | CONFIG_MPC8540_ADS=y |
10 | CONFIG_NO_HZ=y | 10 | CONFIG_NO_HZ=y |
diff --git a/arch/powerpc/configs/85xx/mpc8560_ads_defconfig b/arch/powerpc/configs/85xx/mpc8560_ads_defconfig index 619702de9477..d724095530a6 100644 --- a/arch/powerpc/configs/85xx/mpc8560_ads_defconfig +++ b/arch/powerpc/configs/85xx/mpc8560_ads_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
9 | CONFIG_MPC8560_ADS=y | 9 | CONFIG_MPC8560_ADS=y |
10 | CONFIG_BINFMT_MISC=y | 10 | CONFIG_BINFMT_MISC=y |
diff --git a/arch/powerpc/configs/85xx/mpc85xx_cds_defconfig b/arch/powerpc/configs/85xx/mpc85xx_cds_defconfig index 6bf56e83f957..4b44beaa21ae 100644 --- a/arch/powerpc/configs/85xx/mpc85xx_cds_defconfig +++ b/arch/powerpc/configs/85xx/mpc85xx_cds_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
9 | CONFIG_MPC85xx_CDS=y | 9 | CONFIG_MPC85xx_CDS=y |
10 | CONFIG_NO_HZ=y | 10 | CONFIG_NO_HZ=y |
diff --git a/arch/powerpc/configs/85xx/sbc8548_defconfig b/arch/powerpc/configs/85xx/sbc8548_defconfig index a9a17d055766..5b2b651dfb98 100644 --- a/arch/powerpc/configs/85xx/sbc8548_defconfig +++ b/arch/powerpc/configs/85xx/sbc8548_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | # CONFIG_BLK_DEV_BSG is not set | 9 | # CONFIG_BLK_DEV_BSG is not set |
10 | CONFIG_SBC8548=y | 10 | CONFIG_SBC8548=y |
diff --git a/arch/powerpc/configs/85xx/sbc8560_defconfig b/arch/powerpc/configs/85xx/sbc8560_defconfig index 820e32d8c42b..f7fdb0318e4c 100644 --- a/arch/powerpc/configs/85xx/sbc8560_defconfig +++ b/arch/powerpc/configs/85xx/sbc8560_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | # CONFIG_BLK_DEV_BSG is not set | 9 | # CONFIG_BLK_DEV_BSG is not set |
10 | CONFIG_SBC8560=y | 10 | CONFIG_SBC8560=y |
diff --git a/arch/powerpc/configs/85xx/socrates_defconfig b/arch/powerpc/configs/85xx/socrates_defconfig index b6db3f47af99..77506b5d5a41 100644 --- a/arch/powerpc/configs/85xx/socrates_defconfig +++ b/arch/powerpc/configs/85xx/socrates_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=16 | 4 | CONFIG_LOG_BUF_SHIFT=16 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_HOTPLUG is not set | 9 | # CONFIG_HOTPLUG is not set |
10 | # CONFIG_EPOLL is not set | 10 | # CONFIG_EPOLL is not set |
diff --git a/arch/powerpc/configs/85xx/stx_gp3_defconfig b/arch/powerpc/configs/85xx/stx_gp3_defconfig index 333a41bd2a68..5d4db154bf59 100644 --- a/arch/powerpc/configs/85xx/stx_gp3_defconfig +++ b/arch/powerpc/configs/85xx/stx_gp3_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODVERSIONS=y | 9 | CONFIG_MODVERSIONS=y |
10 | # CONFIG_BLK_DEV_BSG is not set | 10 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/85xx/tqm8540_defconfig b/arch/powerpc/configs/85xx/tqm8540_defconfig index 33db352f847e..ddcb9f37fa1f 100644 --- a/arch/powerpc/configs/85xx/tqm8540_defconfig +++ b/arch/powerpc/configs/85xx/tqm8540_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_HOTPLUG is not set | 9 | # CONFIG_HOTPLUG is not set |
10 | # CONFIG_EPOLL is not set | 10 | # CONFIG_EPOLL is not set |
diff --git a/arch/powerpc/configs/85xx/tqm8541_defconfig b/arch/powerpc/configs/85xx/tqm8541_defconfig index f0c20dfbd4d3..981abd6d4b57 100644 --- a/arch/powerpc/configs/85xx/tqm8541_defconfig +++ b/arch/powerpc/configs/85xx/tqm8541_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_HOTPLUG is not set | 9 | # CONFIG_HOTPLUG is not set |
10 | # CONFIG_EPOLL is not set | 10 | # CONFIG_EPOLL is not set |
diff --git a/arch/powerpc/configs/85xx/tqm8548_defconfig b/arch/powerpc/configs/85xx/tqm8548_defconfig index a883450dcdfa..37b3d7227cdd 100644 --- a/arch/powerpc/configs/85xx/tqm8548_defconfig +++ b/arch/powerpc/configs/85xx/tqm8548_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
10 | # CONFIG_BLK_DEV_BSG is not set | 10 | # CONFIG_BLK_DEV_BSG is not set |
diff --git a/arch/powerpc/configs/85xx/tqm8555_defconfig b/arch/powerpc/configs/85xx/tqm8555_defconfig index ff95f90dc171..3593b320c97c 100644 --- a/arch/powerpc/configs/85xx/tqm8555_defconfig +++ b/arch/powerpc/configs/85xx/tqm8555_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_HOTPLUG is not set | 9 | # CONFIG_HOTPLUG is not set |
10 | # CONFIG_EPOLL is not set | 10 | # CONFIG_EPOLL is not set |
diff --git a/arch/powerpc/configs/85xx/tqm8560_defconfig b/arch/powerpc/configs/85xx/tqm8560_defconfig index 8d6c90ea4783..de413acc34d6 100644 --- a/arch/powerpc/configs/85xx/tqm8560_defconfig +++ b/arch/powerpc/configs/85xx/tqm8560_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_KALLSYMS is not set | 8 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_HOTPLUG is not set | 9 | # CONFIG_HOTPLUG is not set |
10 | # CONFIG_EPOLL is not set | 10 | # CONFIG_EPOLL is not set |
diff --git a/arch/powerpc/configs/85xx/xes_mpc85xx_defconfig b/arch/powerpc/configs/85xx/xes_mpc85xx_defconfig index f53efe4a0e0c..5ea3124518fd 100644 --- a/arch/powerpc/configs/85xx/xes_mpc85xx_defconfig +++ b/arch/powerpc/configs/85xx/xes_mpc85xx_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_IKCONFIG_PROC=y | |||
11 | CONFIG_LOG_BUF_SHIFT=14 | 11 | CONFIG_LOG_BUF_SHIFT=14 |
12 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | CONFIG_KALLSYMS_ALL=y | 15 | CONFIG_KALLSYMS_ALL=y |
16 | CONFIG_KALLSYMS_EXTRA_PASS=y | 16 | CONFIG_KALLSYMS_EXTRA_PASS=y |
17 | CONFIG_MODULES=y | 17 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/86xx/gef_ppc9a_defconfig b/arch/powerpc/configs/86xx/gef_ppc9a_defconfig index 432ebc28d25c..4b2441244eab 100644 --- a/arch/powerpc/configs/86xx/gef_ppc9a_defconfig +++ b/arch/powerpc/configs/86xx/gef_ppc9a_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
11 | CONFIG_RELAY=y | 11 | CONFIG_RELAY=y |
12 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
16 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
17 | CONFIG_MODULE_UNLOAD=y | 17 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/86xx/gef_sbc310_defconfig b/arch/powerpc/configs/86xx/gef_sbc310_defconfig index ce5e919d9b55..a360ba44b928 100644 --- a/arch/powerpc/configs/86xx/gef_sbc310_defconfig +++ b/arch/powerpc/configs/86xx/gef_sbc310_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
11 | CONFIG_RELAY=y | 11 | CONFIG_RELAY=y |
12 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
16 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
17 | CONFIG_MODULE_UNLOAD=y | 17 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/86xx/gef_sbc610_defconfig b/arch/powerpc/configs/86xx/gef_sbc610_defconfig index 589e71e6dc1c..be2829dd129f 100644 --- a/arch/powerpc/configs/86xx/gef_sbc610_defconfig +++ b/arch/powerpc/configs/86xx/gef_sbc610_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
11 | CONFIG_RELAY=y | 11 | CONFIG_RELAY=y |
12 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
16 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
17 | CONFIG_MODULE_UNLOAD=y | 17 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig b/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig index 321fb47096d9..036bfb2d18cd 100644 --- a/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig +++ b/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG_PROC=y | |||
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | # CONFIG_ELF_CORE is not set | 11 | # CONFIG_ELF_CORE is not set |
12 | CONFIG_MODULES=y | 12 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig b/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig index b5e46399374e..0c9c7ed7ec75 100644 --- a/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig +++ b/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig | |||
@@ -10,7 +10,7 @@ CONFIG_IKCONFIG_PROC=y | |||
10 | CONFIG_LOG_BUF_SHIFT=14 | 10 | CONFIG_LOG_BUF_SHIFT=14 |
11 | CONFIG_BLK_DEV_INITRD=y | 11 | CONFIG_BLK_DEV_INITRD=y |
12 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 12 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EXPERT=y |
14 | CONFIG_KALLSYMS_ALL=y | 14 | CONFIG_KALLSYMS_ALL=y |
15 | CONFIG_KALLSYMS_EXTRA_PASS=y | 15 | CONFIG_KALLSYMS_EXTRA_PASS=y |
16 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/86xx/sbc8641d_defconfig b/arch/powerpc/configs/86xx/sbc8641d_defconfig index 71145c3a64db..0a92ca045641 100644 --- a/arch/powerpc/configs/86xx/sbc8641d_defconfig +++ b/arch/powerpc/configs/86xx/sbc8641d_defconfig | |||
@@ -11,7 +11,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
11 | CONFIG_RELAY=y | 11 | CONFIG_RELAY=y |
12 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 13 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
14 | CONFIG_EMBEDDED=y | 14 | CONFIG_EXPERT=y |
15 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
16 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
17 | CONFIG_MODULE_UNLOAD=y | 17 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/adder875_defconfig b/arch/powerpc/configs/adder875_defconfig index ca84c7fc24d5..69128740c14d 100644 --- a/arch/powerpc/configs/adder875_defconfig +++ b/arch/powerpc/configs/adder875_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_EXPERIMENTAL=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_SYSCTL_SYSCALL is not set | 8 | # CONFIG_SYSCTL_SYSCALL is not set |
9 | # CONFIG_ELF_CORE is not set | 9 | # CONFIG_ELF_CORE is not set |
10 | # CONFIG_BASE_FULL is not set | 10 | # CONFIG_BASE_FULL is not set |
diff --git a/arch/powerpc/configs/e55xx_smp_defconfig b/arch/powerpc/configs/e55xx_smp_defconfig index 94d120ef99cf..06f95492afc7 100644 --- a/arch/powerpc/configs/e55xx_smp_defconfig +++ b/arch/powerpc/configs/e55xx_smp_defconfig | |||
@@ -12,7 +12,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
12 | CONFIG_SYSFS_DEPRECATED_V2=y | 12 | CONFIG_SYSFS_DEPRECATED_V2=y |
13 | CONFIG_BLK_DEV_INITRD=y | 13 | CONFIG_BLK_DEV_INITRD=y |
14 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 14 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
15 | CONFIG_EMBEDDED=y | 15 | CONFIG_EXPERT=y |
16 | CONFIG_KALLSYMS_ALL=y | 16 | CONFIG_KALLSYMS_ALL=y |
17 | CONFIG_KALLSYMS_EXTRA_PASS=y | 17 | CONFIG_KALLSYMS_EXTRA_PASS=y |
18 | CONFIG_MODULES=y | 18 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/ep8248e_defconfig b/arch/powerpc/configs/ep8248e_defconfig index 2677b08199e7..fceffb3cffbe 100644 --- a/arch/powerpc/configs/ep8248e_defconfig +++ b/arch/powerpc/configs/ep8248e_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_SYSVIPC=y | |||
2 | CONFIG_IKCONFIG=y | 2 | CONFIG_IKCONFIG=y |
3 | CONFIG_IKCONFIG_PROC=y | 3 | CONFIG_IKCONFIG_PROC=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | CONFIG_KALLSYMS_ALL=y | 6 | CONFIG_KALLSYMS_ALL=y |
7 | CONFIG_SLAB=y | 7 | CONFIG_SLAB=y |
8 | # CONFIG_IOSCHED_CFQ is not set | 8 | # CONFIG_IOSCHED_CFQ is not set |
diff --git a/arch/powerpc/configs/ep88xc_defconfig b/arch/powerpc/configs/ep88xc_defconfig index f9a3112e5442..219fd470ed22 100644 --- a/arch/powerpc/configs/ep88xc_defconfig +++ b/arch/powerpc/configs/ep88xc_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_EXPERIMENTAL=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_SYSCTL_SYSCALL is not set | 8 | # CONFIG_SYSCTL_SYSCALL is not set |
9 | # CONFIG_ELF_CORE is not set | 9 | # CONFIG_ELF_CORE is not set |
10 | # CONFIG_BASE_FULL is not set | 10 | # CONFIG_BASE_FULL is not set |
diff --git a/arch/powerpc/configs/gamecube_defconfig b/arch/powerpc/configs/gamecube_defconfig index fcf0a398cd66..e74d3a483705 100644 --- a/arch/powerpc/configs/gamecube_defconfig +++ b/arch/powerpc/configs/gamecube_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_IKCONFIG_PROC=y | |||
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
7 | CONFIG_BLK_DEV_INITRD=y | 7 | CONFIG_BLK_DEV_INITRD=y |
8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 8 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
9 | CONFIG_EMBEDDED=y | 9 | CONFIG_EXPERT=y |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | CONFIG_PERF_COUNTERS=y | 11 | CONFIG_PERF_COUNTERS=y |
12 | # CONFIG_VM_EVENT_COUNTERS is not set | 12 | # CONFIG_VM_EVENT_COUNTERS is not set |
diff --git a/arch/powerpc/configs/holly_defconfig b/arch/powerpc/configs/holly_defconfig index b9b63a609525..94ebfee188db 100644 --- a/arch/powerpc/configs/holly_defconfig +++ b/arch/powerpc/configs/holly_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | CONFIG_MODULES=y | 7 | CONFIG_MODULES=y |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
9 | # CONFIG_PPC_CHRP is not set | 9 | # CONFIG_PPC_CHRP is not set |
diff --git a/arch/powerpc/configs/mgcoge_defconfig b/arch/powerpc/configs/mgcoge_defconfig index c4ed255af18b..39518e91822f 100644 --- a/arch/powerpc/configs/mgcoge_defconfig +++ b/arch/powerpc/configs/mgcoge_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_IKCONFIG=y | |||
3 | CONFIG_IKCONFIG_PROC=y | 3 | CONFIG_IKCONFIG_PROC=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | CONFIG_KALLSYMS_ALL=y | 7 | CONFIG_KALLSYMS_ALL=y |
8 | CONFIG_SLAB=y | 8 | CONFIG_SLAB=y |
9 | # CONFIG_IOSCHED_CFQ is not set | 9 | # CONFIG_IOSCHED_CFQ is not set |
diff --git a/arch/powerpc/configs/mgsuvd_defconfig b/arch/powerpc/configs/mgsuvd_defconfig index f276c7cf555b..2a490626015c 100644 --- a/arch/powerpc/configs/mgsuvd_defconfig +++ b/arch/powerpc/configs/mgsuvd_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_EXPERIMENTAL=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_SYSCTL_SYSCALL is not set | 8 | # CONFIG_SYSCTL_SYSCALL is not set |
9 | # CONFIG_HOTPLUG is not set | 9 | # CONFIG_HOTPLUG is not set |
10 | # CONFIG_BUG is not set | 10 | # CONFIG_BUG is not set |
diff --git a/arch/powerpc/configs/mpc7448_hpc2_defconfig b/arch/powerpc/configs/mpc7448_hpc2_defconfig index 3b9470883de5..75f0bbf0f6e8 100644 --- a/arch/powerpc/configs/mpc7448_hpc2_defconfig +++ b/arch/powerpc/configs/mpc7448_hpc2_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_SYSVIPC=y | |||
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
9 | # CONFIG_PPC_CHRP is not set | 9 | # CONFIG_PPC_CHRP is not set |
10 | # CONFIG_PPC_PMAC is not set | 10 | # CONFIG_PPC_PMAC is not set |
diff --git a/arch/powerpc/configs/mpc8272_ads_defconfig b/arch/powerpc/configs/mpc8272_ads_defconfig index c7d68ff1a736..6a22400f73c1 100644 --- a/arch/powerpc/configs/mpc8272_ads_defconfig +++ b/arch/powerpc/configs/mpc8272_ads_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_SYSVIPC=y | |||
2 | CONFIG_IKCONFIG=y | 2 | CONFIG_IKCONFIG=y |
3 | CONFIG_IKCONFIG_PROC=y | 3 | CONFIG_IKCONFIG_PROC=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_EMBEDDED=y | 5 | CONFIG_EXPERT=y |
6 | CONFIG_KALLSYMS_ALL=y | 6 | CONFIG_KALLSYMS_ALL=y |
7 | # CONFIG_PPC_CHRP is not set | 7 | # CONFIG_PPC_CHRP is not set |
8 | # CONFIG_PPC_PMAC is not set | 8 | # CONFIG_PPC_PMAC is not set |
diff --git a/arch/powerpc/configs/mpc83xx_defconfig b/arch/powerpc/configs/mpc83xx_defconfig index 5b1b10fd9740..5aac9a8bc53b 100644 --- a/arch/powerpc/configs/mpc83xx_defconfig +++ b/arch/powerpc/configs/mpc83xx_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y | |||
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | CONFIG_SLAB=y | 7 | CONFIG_SLAB=y |
8 | CONFIG_MODULES=y | 8 | CONFIG_MODULES=y |
9 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/mpc85xx_defconfig b/arch/powerpc/configs/mpc85xx_defconfig index 3aeb5949cfef..99a19d1e9bf8 100644 --- a/arch/powerpc/configs/mpc85xx_defconfig +++ b/arch/powerpc/configs/mpc85xx_defconfig | |||
@@ -10,7 +10,7 @@ CONFIG_IKCONFIG_PROC=y | |||
10 | CONFIG_LOG_BUF_SHIFT=14 | 10 | CONFIG_LOG_BUF_SHIFT=14 |
11 | CONFIG_BLK_DEV_INITRD=y | 11 | CONFIG_BLK_DEV_INITRD=y |
12 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 12 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EXPERT=y |
14 | CONFIG_KALLSYMS_ALL=y | 14 | CONFIG_KALLSYMS_ALL=y |
15 | CONFIG_KALLSYMS_EXTRA_PASS=y | 15 | CONFIG_KALLSYMS_EXTRA_PASS=y |
16 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/mpc85xx_smp_defconfig b/arch/powerpc/configs/mpc85xx_smp_defconfig index d62c8016f4bc..c636f23f8c92 100644 --- a/arch/powerpc/configs/mpc85xx_smp_defconfig +++ b/arch/powerpc/configs/mpc85xx_smp_defconfig | |||
@@ -12,7 +12,7 @@ CONFIG_IKCONFIG_PROC=y | |||
12 | CONFIG_LOG_BUF_SHIFT=14 | 12 | CONFIG_LOG_BUF_SHIFT=14 |
13 | CONFIG_BLK_DEV_INITRD=y | 13 | CONFIG_BLK_DEV_INITRD=y |
14 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 14 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
15 | CONFIG_EMBEDDED=y | 15 | CONFIG_EXPERT=y |
16 | CONFIG_KALLSYMS_ALL=y | 16 | CONFIG_KALLSYMS_ALL=y |
17 | CONFIG_KALLSYMS_EXTRA_PASS=y | 17 | CONFIG_KALLSYMS_EXTRA_PASS=y |
18 | CONFIG_MODULES=y | 18 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/mpc866_ads_defconfig b/arch/powerpc/configs/mpc866_ads_defconfig index 668215cae890..5c258823e694 100644 --- a/arch/powerpc/configs/mpc866_ads_defconfig +++ b/arch/powerpc/configs/mpc866_ads_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_EXPERIMENTAL=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_SYSCTL_SYSCALL is not set | 8 | # CONFIG_SYSCTL_SYSCALL is not set |
9 | # CONFIG_HOTPLUG is not set | 9 | # CONFIG_HOTPLUG is not set |
10 | # CONFIG_BUG is not set | 10 | # CONFIG_BUG is not set |
diff --git a/arch/powerpc/configs/mpc86xx_defconfig b/arch/powerpc/configs/mpc86xx_defconfig index 63b90d477889..55b54318fef6 100644 --- a/arch/powerpc/configs/mpc86xx_defconfig +++ b/arch/powerpc/configs/mpc86xx_defconfig | |||
@@ -10,7 +10,7 @@ CONFIG_IKCONFIG_PROC=y | |||
10 | CONFIG_LOG_BUF_SHIFT=14 | 10 | CONFIG_LOG_BUF_SHIFT=14 |
11 | CONFIG_BLK_DEV_INITRD=y | 11 | CONFIG_BLK_DEV_INITRD=y |
12 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 12 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
13 | CONFIG_EMBEDDED=y | 13 | CONFIG_EXPERT=y |
14 | CONFIG_KALLSYMS_ALL=y | 14 | CONFIG_KALLSYMS_ALL=y |
15 | CONFIG_KALLSYMS_EXTRA_PASS=y | 15 | CONFIG_KALLSYMS_EXTRA_PASS=y |
16 | CONFIG_MODULES=y | 16 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/mpc885_ads_defconfig b/arch/powerpc/configs/mpc885_ads_defconfig index f9b83481b00e..9e146cdf63de 100644 --- a/arch/powerpc/configs/mpc885_ads_defconfig +++ b/arch/powerpc/configs/mpc885_ads_defconfig | |||
@@ -4,7 +4,7 @@ CONFIG_EXPERIMENTAL=y | |||
4 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
7 | CONFIG_EMBEDDED=y | 7 | CONFIG_EXPERT=y |
8 | # CONFIG_SYSCTL_SYSCALL is not set | 8 | # CONFIG_SYSCTL_SYSCALL is not set |
9 | # CONFIG_ELF_CORE is not set | 9 | # CONFIG_ELF_CORE is not set |
10 | # CONFIG_BASE_FULL is not set | 10 | # CONFIG_BASE_FULL is not set |
diff --git a/arch/powerpc/configs/ppc40x_defconfig b/arch/powerpc/configs/ppc40x_defconfig index 93d7425ce6cd..bfd634b5ada7 100644 --- a/arch/powerpc/configs/ppc40x_defconfig +++ b/arch/powerpc/configs/ppc40x_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_ALL=y | 9 | CONFIG_KALLSYMS_ALL=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/ppc44x_defconfig b/arch/powerpc/configs/ppc44x_defconfig index 2fa05f7be4cb..47133202a625 100644 --- a/arch/powerpc/configs/ppc44x_defconfig +++ b/arch/powerpc/configs/ppc44x_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_POSIX_MQUEUE=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | CONFIG_KALLSYMS_ALL=y | 9 | CONFIG_KALLSYMS_ALL=y |
10 | CONFIG_KALLSYMS_EXTRA_PASS=y | 10 | CONFIG_KALLSYMS_EXTRA_PASS=y |
11 | CONFIG_MODULES=y | 11 | CONFIG_MODULES=y |
diff --git a/arch/powerpc/configs/pq2fads_defconfig b/arch/powerpc/configs/pq2fads_defconfig index a4353bef31c5..baad8db21b61 100644 --- a/arch/powerpc/configs/pq2fads_defconfig +++ b/arch/powerpc/configs/pq2fads_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_IKCONFIG=y | |||
3 | CONFIG_IKCONFIG_PROC=y | 3 | CONFIG_IKCONFIG_PROC=y |
4 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | CONFIG_KALLSYMS_ALL=y | 7 | CONFIG_KALLSYMS_ALL=y |
8 | # CONFIG_PPC_CHRP is not set | 8 | # CONFIG_PPC_CHRP is not set |
9 | # CONFIG_PPC_PMAC is not set | 9 | # CONFIG_PPC_PMAC is not set |
diff --git a/arch/powerpc/configs/ps3_defconfig b/arch/powerpc/configs/ps3_defconfig index 49cffe003657..caba919f65d8 100644 --- a/arch/powerpc/configs/ps3_defconfig +++ b/arch/powerpc/configs/ps3_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_SYSVIPC=y | |||
8 | CONFIG_POSIX_MQUEUE=y | 8 | CONFIG_POSIX_MQUEUE=y |
9 | CONFIG_NAMESPACES=y | 9 | CONFIG_NAMESPACES=y |
10 | CONFIG_BLK_DEV_INITRD=y | 10 | CONFIG_BLK_DEV_INITRD=y |
11 | CONFIG_EMBEDDED=y | 11 | CONFIG_EXPERT=y |
12 | CONFIG_KALLSYMS_EXTRA_PASS=y | 12 | CONFIG_KALLSYMS_EXTRA_PASS=y |
13 | # CONFIG_PERF_EVENTS is not set | 13 | # CONFIG_PERF_EVENTS is not set |
14 | # CONFIG_COMPAT_BRK is not set | 14 | # CONFIG_COMPAT_BRK is not set |
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index f87f0e15cfa7..9c3f22c6cde1 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
@@ -2,7 +2,7 @@ CONFIG_PPC64=y | |||
2 | CONFIG_ALTIVEC=y | 2 | CONFIG_ALTIVEC=y |
3 | CONFIG_VSX=y | 3 | CONFIG_VSX=y |
4 | CONFIG_SMP=y | 4 | CONFIG_SMP=y |
5 | CONFIG_NR_CPUS=128 | 5 | CONFIG_NR_CPUS=1024 |
6 | CONFIG_EXPERIMENTAL=y | 6 | CONFIG_EXPERIMENTAL=y |
7 | CONFIG_SYSVIPC=y | 7 | CONFIG_SYSVIPC=y |
8 | CONFIG_POSIX_MQUEUE=y | 8 | CONFIG_POSIX_MQUEUE=y |
@@ -45,6 +45,8 @@ CONFIG_KEXEC=y | |||
45 | CONFIG_IRQ_ALL_CPUS=y | 45 | CONFIG_IRQ_ALL_CPUS=y |
46 | CONFIG_MEMORY_HOTPLUG=y | 46 | CONFIG_MEMORY_HOTPLUG=y |
47 | CONFIG_MEMORY_HOTREMOVE=y | 47 | CONFIG_MEMORY_HOTREMOVE=y |
48 | CONFIG_PPC_64K_PAGES=y | ||
49 | CONFIG_PPC_SUBPAGE_PROT=y | ||
48 | CONFIG_SCHED_SMT=y | 50 | CONFIG_SCHED_SMT=y |
49 | CONFIG_HOTPLUG_PCI=m | 51 | CONFIG_HOTPLUG_PCI=m |
50 | CONFIG_HOTPLUG_PCI_RPA=m | 52 | CONFIG_HOTPLUG_PCI_RPA=m |
@@ -184,6 +186,7 @@ CONFIG_ACENIC_OMIT_TIGON_I=y | |||
184 | CONFIG_E1000=y | 186 | CONFIG_E1000=y |
185 | CONFIG_E1000E=y | 187 | CONFIG_E1000E=y |
186 | CONFIG_TIGON3=y | 188 | CONFIG_TIGON3=y |
189 | CONFIG_BNX2=m | ||
187 | CONFIG_CHELSIO_T1=m | 190 | CONFIG_CHELSIO_T1=m |
188 | CONFIG_CHELSIO_T3=m | 191 | CONFIG_CHELSIO_T3=m |
189 | CONFIG_EHEA=y | 192 | CONFIG_EHEA=y |
@@ -311,9 +314,7 @@ CONFIG_DEBUG_KERNEL=y | |||
311 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 314 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
312 | CONFIG_LATENCYTOP=y | 315 | CONFIG_LATENCYTOP=y |
313 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 316 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
314 | CONFIG_IRQSOFF_TRACER=y | ||
315 | CONFIG_SCHED_TRACER=y | 317 | CONFIG_SCHED_TRACER=y |
316 | CONFIG_STACK_TRACER=y | ||
317 | CONFIG_BLK_DEV_IO_TRACE=y | 318 | CONFIG_BLK_DEV_IO_TRACE=y |
318 | CONFIG_DEBUG_STACKOVERFLOW=y | 319 | CONFIG_DEBUG_STACKOVERFLOW=y |
319 | CONFIG_DEBUG_STACK_USAGE=y | 320 | CONFIG_DEBUG_STACK_USAGE=y |
diff --git a/arch/powerpc/configs/storcenter_defconfig b/arch/powerpc/configs/storcenter_defconfig index 4f0c10a62b9d..ebb2a66c99d3 100644 --- a/arch/powerpc/configs/storcenter_defconfig +++ b/arch/powerpc/configs/storcenter_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_LOG_BUF_SHIFT=14 | 3 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_EMBEDDED=y | 4 | CONFIG_EXPERT=y |
5 | # CONFIG_KALLSYMS is not set | 5 | # CONFIG_KALLSYMS is not set |
6 | CONFIG_MODULES=y | 6 | CONFIG_MODULES=y |
7 | CONFIG_MODULE_UNLOAD=y | 7 | CONFIG_MODULE_UNLOAD=y |
diff --git a/arch/powerpc/configs/tqm8xx_defconfig b/arch/powerpc/configs/tqm8xx_defconfig index d0a5b6763880..8616fde0896f 100644 --- a/arch/powerpc/configs/tqm8xx_defconfig +++ b/arch/powerpc/configs/tqm8xx_defconfig | |||
@@ -5,7 +5,7 @@ CONFIG_SYSVIPC=y | |||
5 | CONFIG_LOG_BUF_SHIFT=14 | 5 | CONFIG_LOG_BUF_SHIFT=14 |
6 | CONFIG_SYSFS_DEPRECATED_V2=y | 6 | CONFIG_SYSFS_DEPRECATED_V2=y |
7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 7 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
8 | CONFIG_EMBEDDED=y | 8 | CONFIG_EXPERT=y |
9 | # CONFIG_SYSCTL_SYSCALL is not set | 9 | # CONFIG_SYSCTL_SYSCALL is not set |
10 | # CONFIG_ELF_CORE is not set | 10 | # CONFIG_ELF_CORE is not set |
11 | # CONFIG_BASE_FULL is not set | 11 | # CONFIG_BASE_FULL is not set |
diff --git a/arch/powerpc/configs/wii_defconfig b/arch/powerpc/configs/wii_defconfig index bb8ba75b7c68..175295fbf4f3 100644 --- a/arch/powerpc/configs/wii_defconfig +++ b/arch/powerpc/configs/wii_defconfig | |||
@@ -7,7 +7,7 @@ CONFIG_IKCONFIG_PROC=y | |||
7 | CONFIG_LOG_BUF_SHIFT=14 | 7 | CONFIG_LOG_BUF_SHIFT=14 |
8 | CONFIG_BLK_DEV_INITRD=y | 8 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
10 | CONFIG_EMBEDDED=y | 10 | CONFIG_EXPERT=y |
11 | # CONFIG_ELF_CORE is not set | 11 | # CONFIG_ELF_CORE is not set |
12 | CONFIG_PERF_COUNTERS=y | 12 | CONFIG_PERF_COUNTERS=y |
13 | # CONFIG_VM_EVENT_COUNTERS is not set | 13 | # CONFIG_VM_EVENT_COUNTERS is not set |
diff --git a/arch/powerpc/include/asm/feature-fixups.h b/arch/powerpc/include/asm/feature-fixups.h index 96a7d067fbb2..921a8470e18a 100644 --- a/arch/powerpc/include/asm/feature-fixups.h +++ b/arch/powerpc/include/asm/feature-fixups.h | |||
@@ -37,18 +37,21 @@ label##2: \ | |||
37 | .align 2; \ | 37 | .align 2; \ |
38 | label##3: | 38 | label##3: |
39 | 39 | ||
40 | #define MAKE_FTR_SECTION_ENTRY(msk, val, label, sect) \ | 40 | #define MAKE_FTR_SECTION_ENTRY(msk, val, label, sect) \ |
41 | label##4: \ | 41 | label##4: \ |
42 | .popsection; \ | 42 | .popsection; \ |
43 | .pushsection sect,"a"; \ | 43 | .pushsection sect,"a"; \ |
44 | .align 3; \ | 44 | .align 3; \ |
45 | label##5: \ | 45 | label##5: \ |
46 | FTR_ENTRY_LONG msk; \ | 46 | FTR_ENTRY_LONG msk; \ |
47 | FTR_ENTRY_LONG val; \ | 47 | FTR_ENTRY_LONG val; \ |
48 | FTR_ENTRY_OFFSET label##1b-label##5b; \ | 48 | FTR_ENTRY_OFFSET label##1b-label##5b; \ |
49 | FTR_ENTRY_OFFSET label##2b-label##5b; \ | 49 | FTR_ENTRY_OFFSET label##2b-label##5b; \ |
50 | FTR_ENTRY_OFFSET label##3b-label##5b; \ | 50 | FTR_ENTRY_OFFSET label##3b-label##5b; \ |
51 | FTR_ENTRY_OFFSET label##4b-label##5b; \ | 51 | FTR_ENTRY_OFFSET label##4b-label##5b; \ |
52 | .ifgt (label##4b-label##3b)-(label##2b-label##1b); \ | ||
53 | .error "Feature section else case larger than body"; \ | ||
54 | .endif; \ | ||
52 | .popsection; | 55 | .popsection; |
53 | 56 | ||
54 | 57 | ||
diff --git a/arch/powerpc/include/asm/immap_qe.h b/arch/powerpc/include/asm/immap_qe.h index 4e10f508570a..0edb6842b13d 100644 --- a/arch/powerpc/include/asm/immap_qe.h +++ b/arch/powerpc/include/asm/immap_qe.h | |||
@@ -467,13 +467,22 @@ struct qe_immap { | |||
467 | extern struct qe_immap __iomem *qe_immr; | 467 | extern struct qe_immap __iomem *qe_immr; |
468 | extern phys_addr_t get_qe_base(void); | 468 | extern phys_addr_t get_qe_base(void); |
469 | 469 | ||
470 | static inline unsigned long immrbar_virt_to_phys(void *address) | 470 | /* |
471 | * Returns the offset within the QE address space of the given pointer. | ||
472 | * | ||
473 | * Note that the QE does not support 36-bit physical addresses, so if | ||
474 | * get_qe_base() returns a number above 4GB, the caller will probably fail. | ||
475 | */ | ||
476 | static inline phys_addr_t immrbar_virt_to_phys(void *address) | ||
471 | { | 477 | { |
472 | if ( ((u32)address >= (u32)qe_immr) && | 478 | void *q = (void *)qe_immr; |
473 | ((u32)address < ((u32)qe_immr + QE_IMMAP_SIZE)) ) | 479 | |
474 | return (unsigned long)(address - (u32)qe_immr + | 480 | /* Is it a MURAM address? */ |
475 | (u32)get_qe_base()); | 481 | if ((address >= q) && (address < (q + QE_IMMAP_SIZE))) |
476 | return (unsigned long)virt_to_phys(address); | 482 | return get_qe_base() + (address - q); |
483 | |||
484 | /* It's an address returned by kmalloc */ | ||
485 | return virt_to_phys(address); | ||
477 | } | 486 | } |
478 | 487 | ||
479 | #endif /* __KERNEL__ */ | 488 | #endif /* __KERNEL__ */ |
diff --git a/arch/powerpc/include/asm/irqflags.h b/arch/powerpc/include/asm/irqflags.h index b85d8ddbb666..b0b06d85788d 100644 --- a/arch/powerpc/include/asm/irqflags.h +++ b/arch/powerpc/include/asm/irqflags.h | |||
@@ -12,24 +12,44 @@ | |||
12 | 12 | ||
13 | #else | 13 | #else |
14 | #ifdef CONFIG_TRACE_IRQFLAGS | 14 | #ifdef CONFIG_TRACE_IRQFLAGS |
15 | #ifdef CONFIG_IRQSOFF_TRACER | ||
16 | /* | ||
17 | * Since the ftrace irqsoff latency trace checks CALLER_ADDR1, | ||
18 | * which is the stack frame here, we need to force a stack frame | ||
19 | * in case we came from user space. | ||
20 | */ | ||
21 | #define TRACE_WITH_FRAME_BUFFER(func) \ | ||
22 | mflr r0; \ | ||
23 | stdu r1, -32(r1); \ | ||
24 | std r0, 16(r1); \ | ||
25 | stdu r1, -32(r1); \ | ||
26 | bl func; \ | ||
27 | ld r1, 0(r1); \ | ||
28 | ld r1, 0(r1); | ||
29 | #else | ||
30 | #define TRACE_WITH_FRAME_BUFFER(func) \ | ||
31 | bl func; | ||
32 | #endif | ||
33 | |||
15 | /* | 34 | /* |
16 | * Most of the CPU's IRQ-state tracing is done from assembly code; we | 35 | * Most of the CPU's IRQ-state tracing is done from assembly code; we |
17 | * have to call a C function so call a wrapper that saves all the | 36 | * have to call a C function so call a wrapper that saves all the |
18 | * C-clobbered registers. | 37 | * C-clobbered registers. |
19 | */ | 38 | */ |
20 | #define TRACE_ENABLE_INTS bl .trace_hardirqs_on | 39 | #define TRACE_ENABLE_INTS TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_on) |
21 | #define TRACE_DISABLE_INTS bl .trace_hardirqs_off | 40 | #define TRACE_DISABLE_INTS TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_off) |
22 | #define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip) \ | 41 | |
23 | cmpdi en,0; \ | 42 | #define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip) \ |
24 | bne 95f; \ | 43 | cmpdi en,0; \ |
25 | stb en,PACASOFTIRQEN(r13); \ | 44 | bne 95f; \ |
26 | bl .trace_hardirqs_off; \ | 45 | stb en,PACASOFTIRQEN(r13); \ |
27 | b skip; \ | 46 | TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_off) \ |
28 | 95: bl .trace_hardirqs_on; \ | 47 | b skip; \ |
48 | 95: TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_on) \ | ||
29 | li en,1; | 49 | li en,1; |
30 | #define TRACE_AND_RESTORE_IRQ(en) \ | 50 | #define TRACE_AND_RESTORE_IRQ(en) \ |
31 | TRACE_AND_RESTORE_IRQ_PARTIAL(en,96f); \ | 51 | TRACE_AND_RESTORE_IRQ_PARTIAL(en,96f); \ |
32 | stb en,PACASOFTIRQEN(r13); \ | 52 | stb en,PACASOFTIRQEN(r13); \ |
33 | 96: | 53 | 96: |
34 | #else | 54 | #else |
35 | #define TRACE_ENABLE_INTS | 55 | #define TRACE_ENABLE_INTS |
diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h index 8433d36619a1..991d5998d6be 100644 --- a/arch/powerpc/include/asm/machdep.h +++ b/arch/powerpc/include/asm/machdep.h | |||
@@ -116,9 +116,6 @@ struct machdep_calls { | |||
116 | * If for some reason there is no irq, but the interrupt | 116 | * If for some reason there is no irq, but the interrupt |
117 | * shouldn't be counted as spurious, return NO_IRQ_IGNORE. */ | 117 | * shouldn't be counted as spurious, return NO_IRQ_IGNORE. */ |
118 | unsigned int (*get_irq)(void); | 118 | unsigned int (*get_irq)(void); |
119 | #ifdef CONFIG_KEXEC | ||
120 | void (*kexec_cpu_down)(int crash_shutdown, int secondary); | ||
121 | #endif | ||
122 | 119 | ||
123 | /* PCI stuff */ | 120 | /* PCI stuff */ |
124 | /* Called after scanning the bus, before allocating resources */ | 121 | /* Called after scanning the bus, before allocating resources */ |
@@ -235,11 +232,7 @@ struct machdep_calls { | |||
235 | void (*machine_shutdown)(void); | 232 | void (*machine_shutdown)(void); |
236 | 233 | ||
237 | #ifdef CONFIG_KEXEC | 234 | #ifdef CONFIG_KEXEC |
238 | /* Called to do the minimal shutdown needed to run a kexec'd kernel | 235 | void (*kexec_cpu_down)(int crash_shutdown, int secondary); |
239 | * to run successfully. | ||
240 | * XXX Should we move this one out of kexec scope? | ||
241 | */ | ||
242 | void (*machine_crash_shutdown)(struct pt_regs *regs); | ||
243 | 236 | ||
244 | /* Called to do what every setup is needed on image and the | 237 | /* Called to do what every setup is needed on image and the |
245 | * reboot code buffer. Returns 0 on success. | 238 | * reboot code buffer. Returns 0 on success. |
@@ -247,15 +240,6 @@ struct machdep_calls { | |||
247 | * claims to support kexec. | 240 | * claims to support kexec. |
248 | */ | 241 | */ |
249 | int (*machine_kexec_prepare)(struct kimage *image); | 242 | int (*machine_kexec_prepare)(struct kimage *image); |
250 | |||
251 | /* Called to handle any machine specific cleanup on image */ | ||
252 | void (*machine_kexec_cleanup)(struct kimage *image); | ||
253 | |||
254 | /* Called to perform the _real_ kexec. | ||
255 | * Do NOT allocate memory or fail here. We are past the point of | ||
256 | * no return. | ||
257 | */ | ||
258 | void (*machine_kexec)(struct kimage *image); | ||
259 | #endif /* CONFIG_KEXEC */ | 243 | #endif /* CONFIG_KEXEC */ |
260 | 244 | ||
261 | #ifdef CONFIG_SUSPEND | 245 | #ifdef CONFIG_SUSPEND |
diff --git a/arch/powerpc/include/asm/mmu-book3e.h b/arch/powerpc/include/asm/mmu-book3e.h index 8eaed81ea642..17194fcd4040 100644 --- a/arch/powerpc/include/asm/mmu-book3e.h +++ b/arch/powerpc/include/asm/mmu-book3e.h | |||
@@ -40,8 +40,8 @@ | |||
40 | 40 | ||
41 | /* MAS registers bit definitions */ | 41 | /* MAS registers bit definitions */ |
42 | 42 | ||
43 | #define MAS0_TLBSEL(x) ((x << 28) & 0x30000000) | 43 | #define MAS0_TLBSEL(x) (((x) << 28) & 0x30000000) |
44 | #define MAS0_ESEL(x) ((x << 16) & 0x0FFF0000) | 44 | #define MAS0_ESEL(x) (((x) << 16) & 0x0FFF0000) |
45 | #define MAS0_NV(x) ((x) & 0x00000FFF) | 45 | #define MAS0_NV(x) ((x) & 0x00000FFF) |
46 | #define MAS0_HES 0x00004000 | 46 | #define MAS0_HES 0x00004000 |
47 | #define MAS0_WQ_ALLWAYS 0x00000000 | 47 | #define MAS0_WQ_ALLWAYS 0x00000000 |
@@ -50,12 +50,12 @@ | |||
50 | 50 | ||
51 | #define MAS1_VALID 0x80000000 | 51 | #define MAS1_VALID 0x80000000 |
52 | #define MAS1_IPROT 0x40000000 | 52 | #define MAS1_IPROT 0x40000000 |
53 | #define MAS1_TID(x) ((x << 16) & 0x3FFF0000) | 53 | #define MAS1_TID(x) (((x) << 16) & 0x3FFF0000) |
54 | #define MAS1_IND 0x00002000 | 54 | #define MAS1_IND 0x00002000 |
55 | #define MAS1_TS 0x00001000 | 55 | #define MAS1_TS 0x00001000 |
56 | #define MAS1_TSIZE_MASK 0x00000f80 | 56 | #define MAS1_TSIZE_MASK 0x00000f80 |
57 | #define MAS1_TSIZE_SHIFT 7 | 57 | #define MAS1_TSIZE_SHIFT 7 |
58 | #define MAS1_TSIZE(x) ((x << MAS1_TSIZE_SHIFT) & MAS1_TSIZE_MASK) | 58 | #define MAS1_TSIZE(x) (((x) << MAS1_TSIZE_SHIFT) & MAS1_TSIZE_MASK) |
59 | 59 | ||
60 | #define MAS2_EPN 0xFFFFF000 | 60 | #define MAS2_EPN 0xFFFFF000 |
61 | #define MAS2_X0 0x00000040 | 61 | #define MAS2_X0 0x00000040 |
diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h index 53b64be40eb2..da4b20008541 100644 --- a/arch/powerpc/include/asm/page.h +++ b/arch/powerpc/include/asm/page.h | |||
@@ -101,7 +101,7 @@ extern phys_addr_t kernstart_addr; | |||
101 | 101 | ||
102 | #ifdef CONFIG_FLATMEM | 102 | #ifdef CONFIG_FLATMEM |
103 | #define ARCH_PFN_OFFSET (MEMORY_START >> PAGE_SHIFT) | 103 | #define ARCH_PFN_OFFSET (MEMORY_START >> PAGE_SHIFT) |
104 | #define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < (ARCH_PFN_OFFSET + max_mapnr)) | 104 | #define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < max_mapnr) |
105 | #endif | 105 | #endif |
106 | 106 | ||
107 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) | 107 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) |
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h index ff0005eec7dd..125fc1ad665d 100644 --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h | |||
@@ -283,6 +283,7 @@ | |||
283 | #define HID0_NOPTI (1<<0) /* No-op dcbt and dcbst instr. */ | 283 | #define HID0_NOPTI (1<<0) /* No-op dcbt and dcbst instr. */ |
284 | 284 | ||
285 | #define SPRN_HID1 0x3F1 /* Hardware Implementation Register 1 */ | 285 | #define SPRN_HID1 0x3F1 /* Hardware Implementation Register 1 */ |
286 | #ifdef CONFIG_6xx | ||
286 | #define HID1_EMCP (1<<31) /* 7450 Machine Check Pin Enable */ | 287 | #define HID1_EMCP (1<<31) /* 7450 Machine Check Pin Enable */ |
287 | #define HID1_DFS (1<<22) /* 7447A Dynamic Frequency Scaling */ | 288 | #define HID1_DFS (1<<22) /* 7447A Dynamic Frequency Scaling */ |
288 | #define HID1_PC0 (1<<16) /* 7450 PLL_CFG[0] */ | 289 | #define HID1_PC0 (1<<16) /* 7450 PLL_CFG[0] */ |
@@ -292,6 +293,7 @@ | |||
292 | #define HID1_SYNCBE (1<<11) /* 7450 ABE for sync, eieio */ | 293 | #define HID1_SYNCBE (1<<11) /* 7450 ABE for sync, eieio */ |
293 | #define HID1_ABE (1<<10) /* 7450 Address Broadcast Enable */ | 294 | #define HID1_ABE (1<<10) /* 7450 Address Broadcast Enable */ |
294 | #define HID1_PS (1<<16) /* 750FX PLL selection */ | 295 | #define HID1_PS (1<<16) /* 750FX PLL selection */ |
296 | #endif | ||
295 | #define SPRN_HID2 0x3F8 /* Hardware Implementation Register 2 */ | 297 | #define SPRN_HID2 0x3F8 /* Hardware Implementation Register 2 */ |
296 | #define SPRN_HID2_GEKKO 0x398 /* Gekko HID2 Register */ | 298 | #define SPRN_HID2_GEKKO 0x398 /* Gekko HID2 Register */ |
297 | #define SPRN_IABR 0x3F2 /* Instruction Address Breakpoint Register */ | 299 | #define SPRN_IABR 0x3F2 /* Instruction Address Breakpoint Register */ |
diff --git a/arch/powerpc/include/asm/reg_booke.h b/arch/powerpc/include/asm/reg_booke.h index 667a498eaee1..e68c69bf741a 100644 --- a/arch/powerpc/include/asm/reg_booke.h +++ b/arch/powerpc/include/asm/reg_booke.h | |||
@@ -246,6 +246,20 @@ | |||
246 | store or cache line push */ | 246 | store or cache line push */ |
247 | #endif | 247 | #endif |
248 | 248 | ||
249 | /* Bit definitions for the HID1 */ | ||
250 | #ifdef CONFIG_E500 | ||
251 | /* e500v1/v2 */ | ||
252 | #define HID1_PLL_CFG_MASK 0xfc000000 /* PLL_CFG input pins */ | ||
253 | #define HID1_RFXE 0x00020000 /* Read fault exception enable */ | ||
254 | #define HID1_R1DPE 0x00008000 /* R1 data bus parity enable */ | ||
255 | #define HID1_R2DPE 0x00004000 /* R2 data bus parity enable */ | ||
256 | #define HID1_ASTME 0x00002000 /* Address bus streaming mode enable */ | ||
257 | #define HID1_ABE 0x00001000 /* Address broadcast enable */ | ||
258 | #define HID1_MPXTT 0x00000400 /* MPX re-map transfer type */ | ||
259 | #define HID1_ATS 0x00000080 /* Atomic status */ | ||
260 | #define HID1_MID_MASK 0x0000000f /* MID input pins */ | ||
261 | #endif | ||
262 | |||
249 | /* Bit definitions for the DBSR. */ | 263 | /* Bit definitions for the DBSR. */ |
250 | /* | 264 | /* |
251 | * DBSR bits which have conflicting definitions on true Book E versus IBM 40x. | 265 | * DBSR bits which have conflicting definitions on true Book E versus IBM 40x. |
diff --git a/arch/powerpc/include/asm/spu.h b/arch/powerpc/include/asm/spu.h index 0ab8d869e3d6..0c8b35d75232 100644 --- a/arch/powerpc/include/asm/spu.h +++ b/arch/powerpc/include/asm/spu.h | |||
@@ -203,14 +203,6 @@ void spu_irq_setaffinity(struct spu *spu, int cpu); | |||
203 | void spu_setup_kernel_slbs(struct spu *spu, struct spu_lscsa *lscsa, | 203 | void spu_setup_kernel_slbs(struct spu *spu, struct spu_lscsa *lscsa, |
204 | void *code, int code_size); | 204 | void *code, int code_size); |
205 | 205 | ||
206 | #ifdef CONFIG_KEXEC | ||
207 | void crash_register_spus(struct list_head *list); | ||
208 | #else | ||
209 | static inline void crash_register_spus(struct list_head *list) | ||
210 | { | ||
211 | } | ||
212 | #endif | ||
213 | |||
214 | extern void spu_invalidate_slbs(struct spu *spu); | 206 | extern void spu_invalidate_slbs(struct spu *spu); |
215 | extern void spu_associate_mm(struct spu *spu, struct mm_struct *mm); | 207 | extern void spu_associate_mm(struct spu *spu, struct mm_struct *mm); |
216 | int spu_64k_pages_available(void); | 208 | int spu_64k_pages_available(void); |
diff --git a/arch/powerpc/kernel/cpu_setup_6xx.S b/arch/powerpc/kernel/cpu_setup_6xx.S index 55cba4a8a959..f8cd9fba4d35 100644 --- a/arch/powerpc/kernel/cpu_setup_6xx.S +++ b/arch/powerpc/kernel/cpu_setup_6xx.S | |||
@@ -18,7 +18,7 @@ | |||
18 | #include <asm/mmu.h> | 18 | #include <asm/mmu.h> |
19 | 19 | ||
20 | _GLOBAL(__setup_cpu_603) | 20 | _GLOBAL(__setup_cpu_603) |
21 | mflr r4 | 21 | mflr r5 |
22 | BEGIN_MMU_FTR_SECTION | 22 | BEGIN_MMU_FTR_SECTION |
23 | li r10,0 | 23 | li r10,0 |
24 | mtspr SPRN_SPRG_603_LRU,r10 /* init SW LRU tracking */ | 24 | mtspr SPRN_SPRG_603_LRU,r10 /* init SW LRU tracking */ |
@@ -27,60 +27,60 @@ BEGIN_FTR_SECTION | |||
27 | bl __init_fpu_registers | 27 | bl __init_fpu_registers |
28 | END_FTR_SECTION_IFCLR(CPU_FTR_FPU_UNAVAILABLE) | 28 | END_FTR_SECTION_IFCLR(CPU_FTR_FPU_UNAVAILABLE) |
29 | bl setup_common_caches | 29 | bl setup_common_caches |
30 | mtlr r4 | 30 | mtlr r5 |
31 | blr | 31 | blr |
32 | _GLOBAL(__setup_cpu_604) | 32 | _GLOBAL(__setup_cpu_604) |
33 | mflr r4 | 33 | mflr r5 |
34 | bl setup_common_caches | 34 | bl setup_common_caches |
35 | bl setup_604_hid0 | 35 | bl setup_604_hid0 |
36 | mtlr r4 | 36 | mtlr r5 |
37 | blr | 37 | blr |
38 | _GLOBAL(__setup_cpu_750) | 38 | _GLOBAL(__setup_cpu_750) |
39 | mflr r4 | 39 | mflr r5 |
40 | bl __init_fpu_registers | 40 | bl __init_fpu_registers |
41 | bl setup_common_caches | 41 | bl setup_common_caches |
42 | bl setup_750_7400_hid0 | 42 | bl setup_750_7400_hid0 |
43 | mtlr r4 | 43 | mtlr r5 |
44 | blr | 44 | blr |
45 | _GLOBAL(__setup_cpu_750cx) | 45 | _GLOBAL(__setup_cpu_750cx) |
46 | mflr r4 | 46 | mflr r5 |
47 | bl __init_fpu_registers | 47 | bl __init_fpu_registers |
48 | bl setup_common_caches | 48 | bl setup_common_caches |
49 | bl setup_750_7400_hid0 | 49 | bl setup_750_7400_hid0 |
50 | bl setup_750cx | 50 | bl setup_750cx |
51 | mtlr r4 | 51 | mtlr r5 |
52 | blr | 52 | blr |
53 | _GLOBAL(__setup_cpu_750fx) | 53 | _GLOBAL(__setup_cpu_750fx) |
54 | mflr r4 | 54 | mflr r5 |
55 | bl __init_fpu_registers | 55 | bl __init_fpu_registers |
56 | bl setup_common_caches | 56 | bl setup_common_caches |
57 | bl setup_750_7400_hid0 | 57 | bl setup_750_7400_hid0 |
58 | bl setup_750fx | 58 | bl setup_750fx |
59 | mtlr r4 | 59 | mtlr r5 |
60 | blr | 60 | blr |
61 | _GLOBAL(__setup_cpu_7400) | 61 | _GLOBAL(__setup_cpu_7400) |
62 | mflr r4 | 62 | mflr r5 |
63 | bl __init_fpu_registers | 63 | bl __init_fpu_registers |
64 | bl setup_7400_workarounds | 64 | bl setup_7400_workarounds |
65 | bl setup_common_caches | 65 | bl setup_common_caches |
66 | bl setup_750_7400_hid0 | 66 | bl setup_750_7400_hid0 |
67 | mtlr r4 | 67 | mtlr r5 |
68 | blr | 68 | blr |
69 | _GLOBAL(__setup_cpu_7410) | 69 | _GLOBAL(__setup_cpu_7410) |
70 | mflr r4 | 70 | mflr r5 |
71 | bl __init_fpu_registers | 71 | bl __init_fpu_registers |
72 | bl setup_7410_workarounds | 72 | bl setup_7410_workarounds |
73 | bl setup_common_caches | 73 | bl setup_common_caches |
74 | bl setup_750_7400_hid0 | 74 | bl setup_750_7400_hid0 |
75 | li r3,0 | 75 | li r3,0 |
76 | mtspr SPRN_L2CR2,r3 | 76 | mtspr SPRN_L2CR2,r3 |
77 | mtlr r4 | 77 | mtlr r5 |
78 | blr | 78 | blr |
79 | _GLOBAL(__setup_cpu_745x) | 79 | _GLOBAL(__setup_cpu_745x) |
80 | mflr r4 | 80 | mflr r5 |
81 | bl setup_common_caches | 81 | bl setup_common_caches |
82 | bl setup_745x_specifics | 82 | bl setup_745x_specifics |
83 | mtlr r4 | 83 | mtlr r5 |
84 | blr | 84 | blr |
85 | 85 | ||
86 | /* Enable caches for 603's, 604, 750 & 7400 */ | 86 | /* Enable caches for 603's, 604, 750 & 7400 */ |
@@ -194,10 +194,10 @@ setup_750cx: | |||
194 | cror 4*cr0+eq,4*cr0+eq,4*cr1+eq | 194 | cror 4*cr0+eq,4*cr0+eq,4*cr1+eq |
195 | cror 4*cr0+eq,4*cr0+eq,4*cr2+eq | 195 | cror 4*cr0+eq,4*cr0+eq,4*cr2+eq |
196 | bnelr | 196 | bnelr |
197 | lwz r6,CPU_SPEC_FEATURES(r5) | 197 | lwz r6,CPU_SPEC_FEATURES(r4) |
198 | li r7,CPU_FTR_CAN_NAP | 198 | li r7,CPU_FTR_CAN_NAP |
199 | andc r6,r6,r7 | 199 | andc r6,r6,r7 |
200 | stw r6,CPU_SPEC_FEATURES(r5) | 200 | stw r6,CPU_SPEC_FEATURES(r4) |
201 | blr | 201 | blr |
202 | 202 | ||
203 | /* 750fx specific | 203 | /* 750fx specific |
@@ -225,12 +225,12 @@ BEGIN_FTR_SECTION | |||
225 | andis. r11,r11,L3CR_L3E@h | 225 | andis. r11,r11,L3CR_L3E@h |
226 | beq 1f | 226 | beq 1f |
227 | END_FTR_SECTION_IFSET(CPU_FTR_L3CR) | 227 | END_FTR_SECTION_IFSET(CPU_FTR_L3CR) |
228 | lwz r6,CPU_SPEC_FEATURES(r5) | 228 | lwz r6,CPU_SPEC_FEATURES(r4) |
229 | andi. r0,r6,CPU_FTR_L3_DISABLE_NAP | 229 | andi. r0,r6,CPU_FTR_L3_DISABLE_NAP |
230 | beq 1f | 230 | beq 1f |
231 | li r7,CPU_FTR_CAN_NAP | 231 | li r7,CPU_FTR_CAN_NAP |
232 | andc r6,r6,r7 | 232 | andc r6,r6,r7 |
233 | stw r6,CPU_SPEC_FEATURES(r5) | 233 | stw r6,CPU_SPEC_FEATURES(r4) |
234 | 1: | 234 | 1: |
235 | mfspr r11,SPRN_HID0 | 235 | mfspr r11,SPRN_HID0 |
236 | 236 | ||
diff --git a/arch/powerpc/kernel/cpu_setup_fsl_booke.S b/arch/powerpc/kernel/cpu_setup_fsl_booke.S index 894e64fa481e..5c518ad3445c 100644 --- a/arch/powerpc/kernel/cpu_setup_fsl_booke.S +++ b/arch/powerpc/kernel/cpu_setup_fsl_booke.S | |||
@@ -64,6 +64,12 @@ _GLOBAL(__setup_cpu_e500v2) | |||
64 | bl __e500_icache_setup | 64 | bl __e500_icache_setup |
65 | bl __e500_dcache_setup | 65 | bl __e500_dcache_setup |
66 | bl __setup_e500_ivors | 66 | bl __setup_e500_ivors |
67 | #ifdef CONFIG_RAPIDIO | ||
68 | /* Ensure that RFXE is set */ | ||
69 | mfspr r3,SPRN_HID1 | ||
70 | oris r3,r3,HID1_RFXE@h | ||
71 | mtspr SPRN_HID1,r3 | ||
72 | #endif | ||
67 | mtlr r4 | 73 | mtlr r4 |
68 | blr | 74 | blr |
69 | _GLOBAL(__setup_cpu_e500mc) | 75 | _GLOBAL(__setup_cpu_e500mc) |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index be5ab18b03b5..e8e915ce3d8d 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -116,7 +116,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
116 | .pmc_type = PPC_PMC_IBM, | 116 | .pmc_type = PPC_PMC_IBM, |
117 | .oprofile_cpu_type = "ppc64/power3", | 117 | .oprofile_cpu_type = "ppc64/power3", |
118 | .oprofile_type = PPC_OPROFILE_RS64, | 118 | .oprofile_type = PPC_OPROFILE_RS64, |
119 | .machine_check = machine_check_generic, | ||
120 | .platform = "power3", | 119 | .platform = "power3", |
121 | }, | 120 | }, |
122 | { /* Power3+ */ | 121 | { /* Power3+ */ |
@@ -132,7 +131,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
132 | .pmc_type = PPC_PMC_IBM, | 131 | .pmc_type = PPC_PMC_IBM, |
133 | .oprofile_cpu_type = "ppc64/power3", | 132 | .oprofile_cpu_type = "ppc64/power3", |
134 | .oprofile_type = PPC_OPROFILE_RS64, | 133 | .oprofile_type = PPC_OPROFILE_RS64, |
135 | .machine_check = machine_check_generic, | ||
136 | .platform = "power3", | 134 | .platform = "power3", |
137 | }, | 135 | }, |
138 | { /* Northstar */ | 136 | { /* Northstar */ |
@@ -148,7 +146,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
148 | .pmc_type = PPC_PMC_IBM, | 146 | .pmc_type = PPC_PMC_IBM, |
149 | .oprofile_cpu_type = "ppc64/rs64", | 147 | .oprofile_cpu_type = "ppc64/rs64", |
150 | .oprofile_type = PPC_OPROFILE_RS64, | 148 | .oprofile_type = PPC_OPROFILE_RS64, |
151 | .machine_check = machine_check_generic, | ||
152 | .platform = "rs64", | 149 | .platform = "rs64", |
153 | }, | 150 | }, |
154 | { /* Pulsar */ | 151 | { /* Pulsar */ |
@@ -164,7 +161,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
164 | .pmc_type = PPC_PMC_IBM, | 161 | .pmc_type = PPC_PMC_IBM, |
165 | .oprofile_cpu_type = "ppc64/rs64", | 162 | .oprofile_cpu_type = "ppc64/rs64", |
166 | .oprofile_type = PPC_OPROFILE_RS64, | 163 | .oprofile_type = PPC_OPROFILE_RS64, |
167 | .machine_check = machine_check_generic, | ||
168 | .platform = "rs64", | 164 | .platform = "rs64", |
169 | }, | 165 | }, |
170 | { /* I-star */ | 166 | { /* I-star */ |
@@ -180,7 +176,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
180 | .pmc_type = PPC_PMC_IBM, | 176 | .pmc_type = PPC_PMC_IBM, |
181 | .oprofile_cpu_type = "ppc64/rs64", | 177 | .oprofile_cpu_type = "ppc64/rs64", |
182 | .oprofile_type = PPC_OPROFILE_RS64, | 178 | .oprofile_type = PPC_OPROFILE_RS64, |
183 | .machine_check = machine_check_generic, | ||
184 | .platform = "rs64", | 179 | .platform = "rs64", |
185 | }, | 180 | }, |
186 | { /* S-star */ | 181 | { /* S-star */ |
@@ -196,7 +191,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
196 | .pmc_type = PPC_PMC_IBM, | 191 | .pmc_type = PPC_PMC_IBM, |
197 | .oprofile_cpu_type = "ppc64/rs64", | 192 | .oprofile_cpu_type = "ppc64/rs64", |
198 | .oprofile_type = PPC_OPROFILE_RS64, | 193 | .oprofile_type = PPC_OPROFILE_RS64, |
199 | .machine_check = machine_check_generic, | ||
200 | .platform = "rs64", | 194 | .platform = "rs64", |
201 | }, | 195 | }, |
202 | { /* Power4 */ | 196 | { /* Power4 */ |
@@ -212,7 +206,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
212 | .pmc_type = PPC_PMC_IBM, | 206 | .pmc_type = PPC_PMC_IBM, |
213 | .oprofile_cpu_type = "ppc64/power4", | 207 | .oprofile_cpu_type = "ppc64/power4", |
214 | .oprofile_type = PPC_OPROFILE_POWER4, | 208 | .oprofile_type = PPC_OPROFILE_POWER4, |
215 | .machine_check = machine_check_generic, | ||
216 | .platform = "power4", | 209 | .platform = "power4", |
217 | }, | 210 | }, |
218 | { /* Power4+ */ | 211 | { /* Power4+ */ |
@@ -228,7 +221,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
228 | .pmc_type = PPC_PMC_IBM, | 221 | .pmc_type = PPC_PMC_IBM, |
229 | .oprofile_cpu_type = "ppc64/power4", | 222 | .oprofile_cpu_type = "ppc64/power4", |
230 | .oprofile_type = PPC_OPROFILE_POWER4, | 223 | .oprofile_type = PPC_OPROFILE_POWER4, |
231 | .machine_check = machine_check_generic, | ||
232 | .platform = "power4", | 224 | .platform = "power4", |
233 | }, | 225 | }, |
234 | { /* PPC970 */ | 226 | { /* PPC970 */ |
@@ -247,7 +239,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
247 | .cpu_restore = __restore_cpu_ppc970, | 239 | .cpu_restore = __restore_cpu_ppc970, |
248 | .oprofile_cpu_type = "ppc64/970", | 240 | .oprofile_cpu_type = "ppc64/970", |
249 | .oprofile_type = PPC_OPROFILE_POWER4, | 241 | .oprofile_type = PPC_OPROFILE_POWER4, |
250 | .machine_check = machine_check_generic, | ||
251 | .platform = "ppc970", | 242 | .platform = "ppc970", |
252 | }, | 243 | }, |
253 | { /* PPC970FX */ | 244 | { /* PPC970FX */ |
@@ -266,7 +257,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
266 | .cpu_restore = __restore_cpu_ppc970, | 257 | .cpu_restore = __restore_cpu_ppc970, |
267 | .oprofile_cpu_type = "ppc64/970", | 258 | .oprofile_cpu_type = "ppc64/970", |
268 | .oprofile_type = PPC_OPROFILE_POWER4, | 259 | .oprofile_type = PPC_OPROFILE_POWER4, |
269 | .machine_check = machine_check_generic, | ||
270 | .platform = "ppc970", | 260 | .platform = "ppc970", |
271 | }, | 261 | }, |
272 | { /* PPC970MP DD1.0 - no DEEPNAP, use regular 970 init */ | 262 | { /* PPC970MP DD1.0 - no DEEPNAP, use regular 970 init */ |
@@ -285,7 +275,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
285 | .cpu_restore = __restore_cpu_ppc970, | 275 | .cpu_restore = __restore_cpu_ppc970, |
286 | .oprofile_cpu_type = "ppc64/970MP", | 276 | .oprofile_cpu_type = "ppc64/970MP", |
287 | .oprofile_type = PPC_OPROFILE_POWER4, | 277 | .oprofile_type = PPC_OPROFILE_POWER4, |
288 | .machine_check = machine_check_generic, | ||
289 | .platform = "ppc970", | 278 | .platform = "ppc970", |
290 | }, | 279 | }, |
291 | { /* PPC970MP */ | 280 | { /* PPC970MP */ |
@@ -304,7 +293,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
304 | .cpu_restore = __restore_cpu_ppc970, | 293 | .cpu_restore = __restore_cpu_ppc970, |
305 | .oprofile_cpu_type = "ppc64/970MP", | 294 | .oprofile_cpu_type = "ppc64/970MP", |
306 | .oprofile_type = PPC_OPROFILE_POWER4, | 295 | .oprofile_type = PPC_OPROFILE_POWER4, |
307 | .machine_check = machine_check_generic, | ||
308 | .platform = "ppc970", | 296 | .platform = "ppc970", |
309 | }, | 297 | }, |
310 | { /* PPC970GX */ | 298 | { /* PPC970GX */ |
@@ -322,7 +310,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
322 | .cpu_setup = __setup_cpu_ppc970, | 310 | .cpu_setup = __setup_cpu_ppc970, |
323 | .oprofile_cpu_type = "ppc64/970", | 311 | .oprofile_cpu_type = "ppc64/970", |
324 | .oprofile_type = PPC_OPROFILE_POWER4, | 312 | .oprofile_type = PPC_OPROFILE_POWER4, |
325 | .machine_check = machine_check_generic, | ||
326 | .platform = "ppc970", | 313 | .platform = "ppc970", |
327 | }, | 314 | }, |
328 | { /* Power5 GR */ | 315 | { /* Power5 GR */ |
@@ -343,7 +330,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
343 | */ | 330 | */ |
344 | .oprofile_mmcra_sihv = MMCRA_SIHV, | 331 | .oprofile_mmcra_sihv = MMCRA_SIHV, |
345 | .oprofile_mmcra_sipr = MMCRA_SIPR, | 332 | .oprofile_mmcra_sipr = MMCRA_SIPR, |
346 | .machine_check = machine_check_generic, | ||
347 | .platform = "power5", | 333 | .platform = "power5", |
348 | }, | 334 | }, |
349 | { /* Power5++ */ | 335 | { /* Power5++ */ |
@@ -360,7 +346,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
360 | .oprofile_type = PPC_OPROFILE_POWER4, | 346 | .oprofile_type = PPC_OPROFILE_POWER4, |
361 | .oprofile_mmcra_sihv = MMCRA_SIHV, | 347 | .oprofile_mmcra_sihv = MMCRA_SIHV, |
362 | .oprofile_mmcra_sipr = MMCRA_SIPR, | 348 | .oprofile_mmcra_sipr = MMCRA_SIPR, |
363 | .machine_check = machine_check_generic, | ||
364 | .platform = "power5+", | 349 | .platform = "power5+", |
365 | }, | 350 | }, |
366 | { /* Power5 GS */ | 351 | { /* Power5 GS */ |
@@ -378,7 +363,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
378 | .oprofile_type = PPC_OPROFILE_POWER4, | 363 | .oprofile_type = PPC_OPROFILE_POWER4, |
379 | .oprofile_mmcra_sihv = MMCRA_SIHV, | 364 | .oprofile_mmcra_sihv = MMCRA_SIHV, |
380 | .oprofile_mmcra_sipr = MMCRA_SIPR, | 365 | .oprofile_mmcra_sipr = MMCRA_SIPR, |
381 | .machine_check = machine_check_generic, | ||
382 | .platform = "power5+", | 366 | .platform = "power5+", |
383 | }, | 367 | }, |
384 | { /* POWER6 in P5+ mode; 2.04-compliant processor */ | 368 | { /* POWER6 in P5+ mode; 2.04-compliant processor */ |
@@ -390,7 +374,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
390 | .mmu_features = MMU_FTR_HPTE_TABLE, | 374 | .mmu_features = MMU_FTR_HPTE_TABLE, |
391 | .icache_bsize = 128, | 375 | .icache_bsize = 128, |
392 | .dcache_bsize = 128, | 376 | .dcache_bsize = 128, |
393 | .machine_check = machine_check_generic, | ||
394 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", | 377 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", |
395 | .oprofile_type = PPC_OPROFILE_POWER4, | 378 | .oprofile_type = PPC_OPROFILE_POWER4, |
396 | .platform = "power5+", | 379 | .platform = "power5+", |
@@ -413,7 +396,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
413 | .oprofile_mmcra_sipr = POWER6_MMCRA_SIPR, | 396 | .oprofile_mmcra_sipr = POWER6_MMCRA_SIPR, |
414 | .oprofile_mmcra_clear = POWER6_MMCRA_THRM | | 397 | .oprofile_mmcra_clear = POWER6_MMCRA_THRM | |
415 | POWER6_MMCRA_OTHER, | 398 | POWER6_MMCRA_OTHER, |
416 | .machine_check = machine_check_generic, | ||
417 | .platform = "power6x", | 399 | .platform = "power6x", |
418 | }, | 400 | }, |
419 | { /* 2.05-compliant processor, i.e. Power6 "architected" mode */ | 401 | { /* 2.05-compliant processor, i.e. Power6 "architected" mode */ |
@@ -425,7 +407,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
425 | .mmu_features = MMU_FTR_HPTE_TABLE, | 407 | .mmu_features = MMU_FTR_HPTE_TABLE, |
426 | .icache_bsize = 128, | 408 | .icache_bsize = 128, |
427 | .dcache_bsize = 128, | 409 | .dcache_bsize = 128, |
428 | .machine_check = machine_check_generic, | ||
429 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", | 410 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", |
430 | .oprofile_type = PPC_OPROFILE_POWER4, | 411 | .oprofile_type = PPC_OPROFILE_POWER4, |
431 | .platform = "power6", | 412 | .platform = "power6", |
@@ -440,7 +421,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
440 | MMU_FTR_TLBIE_206, | 421 | MMU_FTR_TLBIE_206, |
441 | .icache_bsize = 128, | 422 | .icache_bsize = 128, |
442 | .dcache_bsize = 128, | 423 | .dcache_bsize = 128, |
443 | .machine_check = machine_check_generic, | ||
444 | .oprofile_type = PPC_OPROFILE_POWER4, | 424 | .oprofile_type = PPC_OPROFILE_POWER4, |
445 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", | 425 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", |
446 | .platform = "power7", | 426 | .platform = "power7", |
@@ -492,7 +472,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
492 | .pmc_type = PPC_PMC_IBM, | 472 | .pmc_type = PPC_PMC_IBM, |
493 | .oprofile_cpu_type = "ppc64/cell-be", | 473 | .oprofile_cpu_type = "ppc64/cell-be", |
494 | .oprofile_type = PPC_OPROFILE_CELL, | 474 | .oprofile_type = PPC_OPROFILE_CELL, |
495 | .machine_check = machine_check_generic, | ||
496 | .platform = "ppc-cell-be", | 475 | .platform = "ppc-cell-be", |
497 | }, | 476 | }, |
498 | { /* PA Semi PA6T */ | 477 | { /* PA Semi PA6T */ |
@@ -510,7 +489,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
510 | .cpu_restore = __restore_cpu_pa6t, | 489 | .cpu_restore = __restore_cpu_pa6t, |
511 | .oprofile_cpu_type = "ppc64/pa6t", | 490 | .oprofile_cpu_type = "ppc64/pa6t", |
512 | .oprofile_type = PPC_OPROFILE_PA6T, | 491 | .oprofile_type = PPC_OPROFILE_PA6T, |
513 | .machine_check = machine_check_generic, | ||
514 | .platform = "pa6t", | 492 | .platform = "pa6t", |
515 | }, | 493 | }, |
516 | { /* default match */ | 494 | { /* default match */ |
@@ -524,7 +502,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
524 | .dcache_bsize = 128, | 502 | .dcache_bsize = 128, |
525 | .num_pmcs = 6, | 503 | .num_pmcs = 6, |
526 | .pmc_type = PPC_PMC_IBM, | 504 | .pmc_type = PPC_PMC_IBM, |
527 | .machine_check = machine_check_generic, | ||
528 | .platform = "power4", | 505 | .platform = "power4", |
529 | } | 506 | } |
530 | #endif /* CONFIG_PPC_BOOK3S_64 */ | 507 | #endif /* CONFIG_PPC_BOOK3S_64 */ |
@@ -2099,8 +2076,8 @@ static void __init setup_cpu_spec(unsigned long offset, struct cpu_spec *s) | |||
2099 | * pointer on ppc64 and booke as we are running at 0 in real mode | 2076 | * pointer on ppc64 and booke as we are running at 0 in real mode |
2100 | * on ppc64 and reloc_offset is always 0 on booke. | 2077 | * on ppc64 and reloc_offset is always 0 on booke. |
2101 | */ | 2078 | */ |
2102 | if (s->cpu_setup) { | 2079 | if (t->cpu_setup) { |
2103 | s->cpu_setup(offset, s); | 2080 | t->cpu_setup(offset, t); |
2104 | } | 2081 | } |
2105 | #endif /* CONFIG_PPC64 || CONFIG_BOOKE */ | 2082 | #endif /* CONFIG_PPC64 || CONFIG_BOOKE */ |
2106 | } | 2083 | } |
diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c index 832c8c4db254..3d569e2aff18 100644 --- a/arch/powerpc/kernel/crash.c +++ b/arch/powerpc/kernel/crash.c | |||
@@ -48,7 +48,7 @@ int crashing_cpu = -1; | |||
48 | static cpumask_t cpus_in_crash = CPU_MASK_NONE; | 48 | static cpumask_t cpus_in_crash = CPU_MASK_NONE; |
49 | cpumask_t cpus_in_sr = CPU_MASK_NONE; | 49 | cpumask_t cpus_in_sr = CPU_MASK_NONE; |
50 | 50 | ||
51 | #define CRASH_HANDLER_MAX 2 | 51 | #define CRASH_HANDLER_MAX 3 |
52 | /* NULL terminated list of shutdown handles */ | 52 | /* NULL terminated list of shutdown handles */ |
53 | static crash_shutdown_t crash_shutdown_handles[CRASH_HANDLER_MAX+1]; | 53 | static crash_shutdown_t crash_shutdown_handles[CRASH_HANDLER_MAX+1]; |
54 | static DEFINE_SPINLOCK(crash_handlers_lock); | 54 | static DEFINE_SPINLOCK(crash_handlers_lock); |
@@ -125,7 +125,7 @@ static void crash_kexec_prepare_cpus(int cpu) | |||
125 | smp_wmb(); | 125 | smp_wmb(); |
126 | 126 | ||
127 | /* | 127 | /* |
128 | * FIXME: Until we will have the way to stop other CPUSs reliabally, | 128 | * FIXME: Until we will have the way to stop other CPUs reliably, |
129 | * the crash CPU will send an IPI and wait for other CPUs to | 129 | * the crash CPU will send an IPI and wait for other CPUs to |
130 | * respond. | 130 | * respond. |
131 | * Delay of at least 10 seconds. | 131 | * Delay of at least 10 seconds. |
@@ -254,72 +254,6 @@ void crash_kexec_secondary(struct pt_regs *regs) | |||
254 | cpus_in_sr = CPU_MASK_NONE; | 254 | cpus_in_sr = CPU_MASK_NONE; |
255 | } | 255 | } |
256 | #endif | 256 | #endif |
257 | #ifdef CONFIG_SPU_BASE | ||
258 | |||
259 | #include <asm/spu.h> | ||
260 | #include <asm/spu_priv1.h> | ||
261 | |||
262 | struct crash_spu_info { | ||
263 | struct spu *spu; | ||
264 | u32 saved_spu_runcntl_RW; | ||
265 | u32 saved_spu_status_R; | ||
266 | u32 saved_spu_npc_RW; | ||
267 | u64 saved_mfc_sr1_RW; | ||
268 | u64 saved_mfc_dar; | ||
269 | u64 saved_mfc_dsisr; | ||
270 | }; | ||
271 | |||
272 | #define CRASH_NUM_SPUS 16 /* Enough for current hardware */ | ||
273 | static struct crash_spu_info crash_spu_info[CRASH_NUM_SPUS]; | ||
274 | |||
275 | static void crash_kexec_stop_spus(void) | ||
276 | { | ||
277 | struct spu *spu; | ||
278 | int i; | ||
279 | u64 tmp; | ||
280 | |||
281 | for (i = 0; i < CRASH_NUM_SPUS; i++) { | ||
282 | if (!crash_spu_info[i].spu) | ||
283 | continue; | ||
284 | |||
285 | spu = crash_spu_info[i].spu; | ||
286 | |||
287 | crash_spu_info[i].saved_spu_runcntl_RW = | ||
288 | in_be32(&spu->problem->spu_runcntl_RW); | ||
289 | crash_spu_info[i].saved_spu_status_R = | ||
290 | in_be32(&spu->problem->spu_status_R); | ||
291 | crash_spu_info[i].saved_spu_npc_RW = | ||
292 | in_be32(&spu->problem->spu_npc_RW); | ||
293 | |||
294 | crash_spu_info[i].saved_mfc_dar = spu_mfc_dar_get(spu); | ||
295 | crash_spu_info[i].saved_mfc_dsisr = spu_mfc_dsisr_get(spu); | ||
296 | tmp = spu_mfc_sr1_get(spu); | ||
297 | crash_spu_info[i].saved_mfc_sr1_RW = tmp; | ||
298 | |||
299 | tmp &= ~MFC_STATE1_MASTER_RUN_CONTROL_MASK; | ||
300 | spu_mfc_sr1_set(spu, tmp); | ||
301 | |||
302 | __delay(200); | ||
303 | } | ||
304 | } | ||
305 | |||
306 | void crash_register_spus(struct list_head *list) | ||
307 | { | ||
308 | struct spu *spu; | ||
309 | |||
310 | list_for_each_entry(spu, list, full_list) { | ||
311 | if (WARN_ON(spu->number >= CRASH_NUM_SPUS)) | ||
312 | continue; | ||
313 | |||
314 | crash_spu_info[spu->number].spu = spu; | ||
315 | } | ||
316 | } | ||
317 | |||
318 | #else | ||
319 | static inline void crash_kexec_stop_spus(void) | ||
320 | { | ||
321 | } | ||
322 | #endif /* CONFIG_SPU_BASE */ | ||
323 | 257 | ||
324 | /* | 258 | /* |
325 | * Register a function to be called on shutdown. Only use this if you | 259 | * Register a function to be called on shutdown. Only use this if you |
@@ -439,8 +373,6 @@ void default_machine_crash_shutdown(struct pt_regs *regs) | |||
439 | crash_shutdown_cpu = -1; | 373 | crash_shutdown_cpu = -1; |
440 | __debugger_fault_handler = old_handler; | 374 | __debugger_fault_handler = old_handler; |
441 | 375 | ||
442 | crash_kexec_stop_spus(); | ||
443 | |||
444 | if (ppc_md.kexec_cpu_down) | 376 | if (ppc_md.kexec_cpu_down) |
445 | ppc_md.kexec_cpu_down(1, 0); | 377 | ppc_md.kexec_cpu_down(1, 0); |
446 | } | 378 | } |
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index c22dc1ec1c94..56212bc0ab08 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
@@ -880,7 +880,18 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_TYPE_47x) | |||
880 | */ | 880 | */ |
881 | andi. r10,r9,MSR_EE | 881 | andi. r10,r9,MSR_EE |
882 | beq 1f | 882 | beq 1f |
883 | /* | ||
884 | * Since the ftrace irqsoff latency trace checks CALLER_ADDR1, | ||
885 | * which is the stack frame here, we need to force a stack frame | ||
886 | * in case we came from user space. | ||
887 | */ | ||
888 | stwu r1,-32(r1) | ||
889 | mflr r0 | ||
890 | stw r0,4(r1) | ||
891 | stwu r1,-32(r1) | ||
883 | bl trace_hardirqs_on | 892 | bl trace_hardirqs_on |
893 | lwz r1,0(r1) | ||
894 | lwz r1,0(r1) | ||
884 | lwz r9,_MSR(r1) | 895 | lwz r9,_MSR(r1) |
885 | 1: | 896 | 1: |
886 | #endif /* CONFIG_TRACE_IRQFLAGS */ | 897 | #endif /* CONFIG_TRACE_IRQFLAGS */ |
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c index df7e20c191cd..49a170af8145 100644 --- a/arch/powerpc/kernel/machine_kexec.c +++ b/arch/powerpc/kernel/machine_kexec.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/memblock.h> | 15 | #include <linux/memblock.h> |
16 | #include <linux/of.h> | 16 | #include <linux/of.h> |
17 | #include <linux/irq.h> | 17 | #include <linux/irq.h> |
18 | #include <linux/ftrace.h> | ||
18 | 19 | ||
19 | #include <asm/machdep.h> | 20 | #include <asm/machdep.h> |
20 | #include <asm/prom.h> | 21 | #include <asm/prom.h> |
@@ -44,10 +45,7 @@ void machine_kexec_mask_interrupts(void) { | |||
44 | 45 | ||
45 | void machine_crash_shutdown(struct pt_regs *regs) | 46 | void machine_crash_shutdown(struct pt_regs *regs) |
46 | { | 47 | { |
47 | if (ppc_md.machine_crash_shutdown) | 48 | default_machine_crash_shutdown(regs); |
48 | ppc_md.machine_crash_shutdown(regs); | ||
49 | else | ||
50 | default_machine_crash_shutdown(regs); | ||
51 | } | 49 | } |
52 | 50 | ||
53 | /* | 51 | /* |
@@ -65,8 +63,6 @@ int machine_kexec_prepare(struct kimage *image) | |||
65 | 63 | ||
66 | void machine_kexec_cleanup(struct kimage *image) | 64 | void machine_kexec_cleanup(struct kimage *image) |
67 | { | 65 | { |
68 | if (ppc_md.machine_kexec_cleanup) | ||
69 | ppc_md.machine_kexec_cleanup(image); | ||
70 | } | 66 | } |
71 | 67 | ||
72 | void arch_crash_save_vmcoreinfo(void) | 68 | void arch_crash_save_vmcoreinfo(void) |
@@ -87,10 +83,13 @@ void arch_crash_save_vmcoreinfo(void) | |||
87 | */ | 83 | */ |
88 | void machine_kexec(struct kimage *image) | 84 | void machine_kexec(struct kimage *image) |
89 | { | 85 | { |
90 | if (ppc_md.machine_kexec) | 86 | int save_ftrace_enabled; |
91 | ppc_md.machine_kexec(image); | 87 | |
92 | else | 88 | save_ftrace_enabled = __ftrace_enabled_save(); |
93 | default_machine_kexec(image); | 89 | |
90 | default_machine_kexec(image); | ||
91 | |||
92 | __ftrace_enabled_restore(save_ftrace_enabled); | ||
94 | 93 | ||
95 | /* Fall back to normal restart if we're still alive. */ | 94 | /* Fall back to normal restart if we're still alive. */ |
96 | machine_restart(NULL); | 95 | machine_restart(NULL); |
diff --git a/arch/powerpc/kernel/perf_event_fsl_emb.c b/arch/powerpc/kernel/perf_event_fsl_emb.c index 4dcf5f831e9d..b0dc8f7069cd 100644 --- a/arch/powerpc/kernel/perf_event_fsl_emb.c +++ b/arch/powerpc/kernel/perf_event_fsl_emb.c | |||
@@ -596,6 +596,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val, | |||
596 | if (left <= 0) | 596 | if (left <= 0) |
597 | left = period; | 597 | left = period; |
598 | record = 1; | 598 | record = 1; |
599 | event->hw.last_period = event->hw.sample_period; | ||
599 | } | 600 | } |
600 | if (left < 0x80000000LL) | 601 | if (left < 0x80000000LL) |
601 | val = 0x80000000LL - left; | 602 | val = 0x80000000LL - left; |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 84906d3fc860..7a1d5cb76932 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -631,7 +631,7 @@ void show_regs(struct pt_regs * regs) | |||
631 | #ifdef CONFIG_PPC_ADV_DEBUG_REGS | 631 | #ifdef CONFIG_PPC_ADV_DEBUG_REGS |
632 | printk("DEAR: "REG", ESR: "REG"\n", regs->dar, regs->dsisr); | 632 | printk("DEAR: "REG", ESR: "REG"\n", regs->dar, regs->dsisr); |
633 | #else | 633 | #else |
634 | printk("DAR: "REG", DSISR: "REG"\n", regs->dar, regs->dsisr); | 634 | printk("DAR: "REG", DSISR: %08lx\n", regs->dar, regs->dsisr); |
635 | #endif | 635 | #endif |
636 | printk("TASK = %p[%d] '%s' THREAD: %p", | 636 | printk("TASK = %p[%d] '%s' THREAD: %p", |
637 | current, task_pid_nr(current), current->comm, task_thread_info(current)); | 637 | current, task_pid_nr(current), current->comm, task_thread_info(current)); |
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c index 2b442e6c21e6..bf5f5ce3a7bd 100644 --- a/arch/powerpc/kernel/rtas_flash.c +++ b/arch/powerpc/kernel/rtas_flash.c | |||
@@ -256,31 +256,16 @@ static ssize_t rtas_flash_read(struct file *file, char __user *buf, | |||
256 | struct proc_dir_entry *dp = PDE(file->f_path.dentry->d_inode); | 256 | struct proc_dir_entry *dp = PDE(file->f_path.dentry->d_inode); |
257 | struct rtas_update_flash_t *uf; | 257 | struct rtas_update_flash_t *uf; |
258 | char msg[RTAS_MSG_MAXLEN]; | 258 | char msg[RTAS_MSG_MAXLEN]; |
259 | int msglen; | ||
260 | 259 | ||
261 | uf = (struct rtas_update_flash_t *) dp->data; | 260 | uf = dp->data; |
262 | 261 | ||
263 | if (!strcmp(dp->name, FIRMWARE_FLASH_NAME)) { | 262 | if (!strcmp(dp->name, FIRMWARE_FLASH_NAME)) { |
264 | get_flash_status_msg(uf->status, msg); | 263 | get_flash_status_msg(uf->status, msg); |
265 | } else { /* FIRMWARE_UPDATE_NAME */ | 264 | } else { /* FIRMWARE_UPDATE_NAME */ |
266 | sprintf(msg, "%d\n", uf->status); | 265 | sprintf(msg, "%d\n", uf->status); |
267 | } | 266 | } |
268 | msglen = strlen(msg); | ||
269 | if (msglen > count) | ||
270 | msglen = count; | ||
271 | |||
272 | if (ppos && *ppos != 0) | ||
273 | return 0; /* be cheap */ | ||
274 | |||
275 | if (!access_ok(VERIFY_WRITE, buf, msglen)) | ||
276 | return -EINVAL; | ||
277 | 267 | ||
278 | if (copy_to_user(buf, msg, msglen)) | 268 | return simple_read_from_buffer(buf, count, ppos, msg, strlen(msg)); |
279 | return -EFAULT; | ||
280 | |||
281 | if (ppos) | ||
282 | *ppos = msglen; | ||
283 | return msglen; | ||
284 | } | 269 | } |
285 | 270 | ||
286 | /* constructor for flash_block_cache */ | 271 | /* constructor for flash_block_cache */ |
@@ -394,26 +379,13 @@ static ssize_t manage_flash_read(struct file *file, char __user *buf, | |||
394 | char msg[RTAS_MSG_MAXLEN]; | 379 | char msg[RTAS_MSG_MAXLEN]; |
395 | int msglen; | 380 | int msglen; |
396 | 381 | ||
397 | args_buf = (struct rtas_manage_flash_t *) dp->data; | 382 | args_buf = dp->data; |
398 | if (args_buf == NULL) | 383 | if (args_buf == NULL) |
399 | return 0; | 384 | return 0; |
400 | 385 | ||
401 | msglen = sprintf(msg, "%d\n", args_buf->status); | 386 | msglen = sprintf(msg, "%d\n", args_buf->status); |
402 | if (msglen > count) | ||
403 | msglen = count; | ||
404 | 387 | ||
405 | if (ppos && *ppos != 0) | 388 | return simple_read_from_buffer(buf, count, ppos, msg, msglen); |
406 | return 0; /* be cheap */ | ||
407 | |||
408 | if (!access_ok(VERIFY_WRITE, buf, msglen)) | ||
409 | return -EINVAL; | ||
410 | |||
411 | if (copy_to_user(buf, msg, msglen)) | ||
412 | return -EFAULT; | ||
413 | |||
414 | if (ppos) | ||
415 | *ppos = msglen; | ||
416 | return msglen; | ||
417 | } | 389 | } |
418 | 390 | ||
419 | static ssize_t manage_flash_write(struct file *file, const char __user *buf, | 391 | static ssize_t manage_flash_write(struct file *file, const char __user *buf, |
@@ -495,24 +467,11 @@ static ssize_t validate_flash_read(struct file *file, char __user *buf, | |||
495 | char msg[RTAS_MSG_MAXLEN]; | 467 | char msg[RTAS_MSG_MAXLEN]; |
496 | int msglen; | 468 | int msglen; |
497 | 469 | ||
498 | args_buf = (struct rtas_validate_flash_t *) dp->data; | 470 | args_buf = dp->data; |
499 | 471 | ||
500 | if (ppos && *ppos != 0) | ||
501 | return 0; /* be cheap */ | ||
502 | |||
503 | msglen = get_validate_flash_msg(args_buf, msg); | 472 | msglen = get_validate_flash_msg(args_buf, msg); |
504 | if (msglen > count) | ||
505 | msglen = count; | ||
506 | |||
507 | if (!access_ok(VERIFY_WRITE, buf, msglen)) | ||
508 | return -EINVAL; | ||
509 | |||
510 | if (copy_to_user(buf, msg, msglen)) | ||
511 | return -EFAULT; | ||
512 | 473 | ||
513 | if (ppos) | 474 | return simple_read_from_buffer(buf, count, ppos, msg, msglen); |
514 | *ppos = msglen; | ||
515 | return msglen; | ||
516 | } | 475 | } |
517 | 476 | ||
518 | static ssize_t validate_flash_write(struct file *file, const char __user *buf, | 477 | static ssize_t validate_flash_write(struct file *file, const char __user *buf, |
diff --git a/arch/powerpc/kernel/rtasd.c b/arch/powerpc/kernel/rtasd.c index 0438f819fe6b..049dbecb5dbc 100644 --- a/arch/powerpc/kernel/rtasd.c +++ b/arch/powerpc/kernel/rtasd.c | |||
@@ -160,7 +160,7 @@ static int log_rtas_len(char * buf) | |||
160 | /* rtas fixed header */ | 160 | /* rtas fixed header */ |
161 | len = 8; | 161 | len = 8; |
162 | err = (struct rtas_error_log *)buf; | 162 | err = (struct rtas_error_log *)buf; |
163 | if (err->extended_log_length) { | 163 | if (err->extended && err->extended_log_length) { |
164 | 164 | ||
165 | /* extended header */ | 165 | /* extended header */ |
166 | len += err->extended_log_length; | 166 | len += err->extended_log_length; |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 09e4dea4a85a..09d31dbf43f9 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -265,11 +265,26 @@ void accumulate_stolen_time(void) | |||
265 | { | 265 | { |
266 | u64 sst, ust; | 266 | u64 sst, ust; |
267 | 267 | ||
268 | sst = scan_dispatch_log(get_paca()->starttime_user); | 268 | u8 save_soft_enabled = local_paca->soft_enabled; |
269 | ust = scan_dispatch_log(get_paca()->starttime); | 269 | u8 save_hard_enabled = local_paca->hard_enabled; |
270 | get_paca()->system_time -= sst; | 270 | |
271 | get_paca()->user_time -= ust; | 271 | /* We are called early in the exception entry, before |
272 | get_paca()->stolen_time += ust + sst; | 272 | * soft/hard_enabled are sync'ed to the expected state |
273 | * for the exception. We are hard disabled but the PACA | ||
274 | * needs to reflect that so various debug stuff doesn't | ||
275 | * complain | ||
276 | */ | ||
277 | local_paca->soft_enabled = 0; | ||
278 | local_paca->hard_enabled = 0; | ||
279 | |||
280 | sst = scan_dispatch_log(local_paca->starttime_user); | ||
281 | ust = scan_dispatch_log(local_paca->starttime); | ||
282 | local_paca->system_time -= sst; | ||
283 | local_paca->user_time -= ust; | ||
284 | local_paca->stolen_time += ust + sst; | ||
285 | |||
286 | local_paca->soft_enabled = save_soft_enabled; | ||
287 | local_paca->hard_enabled = save_hard_enabled; | ||
273 | } | 288 | } |
274 | 289 | ||
275 | static inline u64 calculate_stolen_time(u64 stop_tb) | 290 | static inline u64 calculate_stolen_time(u64 stop_tb) |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 1b2cdc8eec90..bd74fac169be 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -626,12 +626,6 @@ void machine_check_exception(struct pt_regs *regs) | |||
626 | if (recover > 0) | 626 | if (recover > 0) |
627 | return; | 627 | return; |
628 | 628 | ||
629 | if (user_mode(regs)) { | ||
630 | regs->msr |= MSR_RI; | ||
631 | _exception(SIGBUS, regs, BUS_ADRERR, regs->nip); | ||
632 | return; | ||
633 | } | ||
634 | |||
635 | #if defined(CONFIG_8xx) && defined(CONFIG_PCI) | 629 | #if defined(CONFIG_8xx) && defined(CONFIG_PCI) |
636 | /* the qspan pci read routines can cause machine checks -- Cort | 630 | /* the qspan pci read routines can cause machine checks -- Cort |
637 | * | 631 | * |
@@ -643,16 +637,12 @@ void machine_check_exception(struct pt_regs *regs) | |||
643 | return; | 637 | return; |
644 | #endif | 638 | #endif |
645 | 639 | ||
646 | if (debugger_fault_handler(regs)) { | 640 | if (debugger_fault_handler(regs)) |
647 | regs->msr |= MSR_RI; | ||
648 | return; | 641 | return; |
649 | } | ||
650 | 642 | ||
651 | if (check_io_access(regs)) | 643 | if (check_io_access(regs)) |
652 | return; | 644 | return; |
653 | 645 | ||
654 | if (debugger_fault_handler(regs)) | ||
655 | return; | ||
656 | die("Machine check", regs, SIGBUS); | 646 | die("Machine check", regs, SIGBUS); |
657 | 647 | ||
658 | /* Must die if the interrupt is not recoverable */ | 648 | /* Must die if the interrupt is not recoverable */ |
diff --git a/arch/powerpc/lib/feature-fixups-test.S b/arch/powerpc/lib/feature-fixups-test.S index cb737484c5aa..f4613118132e 100644 --- a/arch/powerpc/lib/feature-fixups-test.S +++ b/arch/powerpc/lib/feature-fixups-test.S | |||
@@ -172,6 +172,25 @@ globl(ftr_fixup_test6_expected) | |||
172 | 3: or 3,3,3 | 172 | 3: or 3,3,3 |
173 | 173 | ||
174 | 174 | ||
175 | #if 0 | ||
176 | /* Test that if we have a larger else case the assembler spots it and | ||
177 | * reports an error. #if 0'ed so as not to break the build normally. | ||
178 | */ | ||
179 | ftr_fixup_test7: | ||
180 | or 1,1,1 | ||
181 | BEGIN_FTR_SECTION | ||
182 | or 2,2,2 | ||
183 | or 2,2,2 | ||
184 | or 2,2,2 | ||
185 | FTR_SECTION_ELSE | ||
186 | or 3,3,3 | ||
187 | or 3,3,3 | ||
188 | or 3,3,3 | ||
189 | or 3,3,3 | ||
190 | ALT_FTR_SECTION_END(0, 1) | ||
191 | or 1,1,1 | ||
192 | #endif | ||
193 | |||
175 | #define MAKE_MACRO_TEST(TYPE) \ | 194 | #define MAKE_MACRO_TEST(TYPE) \ |
176 | globl(ftr_fixup_test_ ##TYPE##_macros) \ | 195 | globl(ftr_fixup_test_ ##TYPE##_macros) \ |
177 | or 1,1,1; \ | 196 | or 1,1,1; \ |
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index bf5cb91f07de..fd4812329570 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
@@ -186,7 +186,7 @@ static void unmap_cpu_from_node(unsigned long cpu) | |||
186 | dbg("removing cpu %lu from node %d\n", cpu, node); | 186 | dbg("removing cpu %lu from node %d\n", cpu, node); |
187 | 187 | ||
188 | if (cpumask_test_cpu(cpu, node_to_cpumask_map[node])) { | 188 | if (cpumask_test_cpu(cpu, node_to_cpumask_map[node])) { |
189 | cpumask_set_cpu(cpu, node_to_cpumask_map[node]); | 189 | cpumask_clear_cpu(cpu, node_to_cpumask_map[node]); |
190 | } else { | 190 | } else { |
191 | printk(KERN_ERR "WARNING: cpu %lu not found in node %d\n", | 191 | printk(KERN_ERR "WARNING: cpu %lu not found in node %d\n", |
192 | cpu, node); | 192 | cpu, node); |
@@ -1289,10 +1289,9 @@ u64 memory_hotplug_max(void) | |||
1289 | } | 1289 | } |
1290 | #endif /* CONFIG_MEMORY_HOTPLUG */ | 1290 | #endif /* CONFIG_MEMORY_HOTPLUG */ |
1291 | 1291 | ||
1292 | /* Vrtual Processor Home Node (VPHN) support */ | 1292 | /* Virtual Processor Home Node (VPHN) support */ |
1293 | #ifdef CONFIG_PPC_SPLPAR | 1293 | #ifdef CONFIG_PPC_SPLPAR |
1294 | #define VPHN_NR_CHANGE_CTRS (8) | 1294 | static u8 vphn_cpu_change_counts[NR_CPUS][MAX_DISTANCE_REF_POINTS]; |
1295 | static u8 vphn_cpu_change_counts[NR_CPUS][VPHN_NR_CHANGE_CTRS]; | ||
1296 | static cpumask_t cpu_associativity_changes_mask; | 1295 | static cpumask_t cpu_associativity_changes_mask; |
1297 | static int vphn_enabled; | 1296 | static int vphn_enabled; |
1298 | static void set_topology_timer(void); | 1297 | static void set_topology_timer(void); |
@@ -1303,16 +1302,18 @@ static void set_topology_timer(void); | |||
1303 | */ | 1302 | */ |
1304 | static void setup_cpu_associativity_change_counters(void) | 1303 | static void setup_cpu_associativity_change_counters(void) |
1305 | { | 1304 | { |
1306 | int cpu = 0; | 1305 | int cpu; |
1306 | |||
1307 | /* The VPHN feature supports a maximum of 8 reference points */ | ||
1308 | BUILD_BUG_ON(MAX_DISTANCE_REF_POINTS > 8); | ||
1307 | 1309 | ||
1308 | for_each_possible_cpu(cpu) { | 1310 | for_each_possible_cpu(cpu) { |
1309 | int i = 0; | 1311 | int i; |
1310 | u8 *counts = vphn_cpu_change_counts[cpu]; | 1312 | u8 *counts = vphn_cpu_change_counts[cpu]; |
1311 | volatile u8 *hypervisor_counts = lppaca[cpu].vphn_assoc_counts; | 1313 | volatile u8 *hypervisor_counts = lppaca[cpu].vphn_assoc_counts; |
1312 | 1314 | ||
1313 | for (i = 0; i < VPHN_NR_CHANGE_CTRS; i++) { | 1315 | for (i = 0; i < distance_ref_points_depth; i++) |
1314 | counts[i] = hypervisor_counts[i]; | 1316 | counts[i] = hypervisor_counts[i]; |
1315 | } | ||
1316 | } | 1317 | } |
1317 | } | 1318 | } |
1318 | 1319 | ||
@@ -1329,7 +1330,7 @@ static void setup_cpu_associativity_change_counters(void) | |||
1329 | */ | 1330 | */ |
1330 | static int update_cpu_associativity_changes_mask(void) | 1331 | static int update_cpu_associativity_changes_mask(void) |
1331 | { | 1332 | { |
1332 | int cpu = 0, nr_cpus = 0; | 1333 | int cpu, nr_cpus = 0; |
1333 | cpumask_t *changes = &cpu_associativity_changes_mask; | 1334 | cpumask_t *changes = &cpu_associativity_changes_mask; |
1334 | 1335 | ||
1335 | cpumask_clear(changes); | 1336 | cpumask_clear(changes); |
@@ -1339,8 +1340,8 @@ static int update_cpu_associativity_changes_mask(void) | |||
1339 | u8 *counts = vphn_cpu_change_counts[cpu]; | 1340 | u8 *counts = vphn_cpu_change_counts[cpu]; |
1340 | volatile u8 *hypervisor_counts = lppaca[cpu].vphn_assoc_counts; | 1341 | volatile u8 *hypervisor_counts = lppaca[cpu].vphn_assoc_counts; |
1341 | 1342 | ||
1342 | for (i = 0; i < VPHN_NR_CHANGE_CTRS; i++) { | 1343 | for (i = 0; i < distance_ref_points_depth; i++) { |
1343 | if (hypervisor_counts[i] > counts[i]) { | 1344 | if (hypervisor_counts[i] != counts[i]) { |
1344 | counts[i] = hypervisor_counts[i]; | 1345 | counts[i] = hypervisor_counts[i]; |
1345 | changed = 1; | 1346 | changed = 1; |
1346 | } | 1347 | } |
@@ -1354,8 +1355,11 @@ static int update_cpu_associativity_changes_mask(void) | |||
1354 | return nr_cpus; | 1355 | return nr_cpus; |
1355 | } | 1356 | } |
1356 | 1357 | ||
1357 | /* 6 64-bit registers unpacked into 12 32-bit associativity values */ | 1358 | /* |
1358 | #define VPHN_ASSOC_BUFSIZE (6*sizeof(u64)/sizeof(u32)) | 1359 | * 6 64-bit registers unpacked into 12 32-bit associativity values. To form |
1360 | * the complete property we have to add the length in the first cell. | ||
1361 | */ | ||
1362 | #define VPHN_ASSOC_BUFSIZE (6*sizeof(u64)/sizeof(u32) + 1) | ||
1359 | 1363 | ||
1360 | /* | 1364 | /* |
1361 | * Convert the associativity domain numbers returned from the hypervisor | 1365 | * Convert the associativity domain numbers returned from the hypervisor |
@@ -1363,15 +1367,14 @@ static int update_cpu_associativity_changes_mask(void) | |||
1363 | */ | 1367 | */ |
1364 | static int vphn_unpack_associativity(const long *packed, unsigned int *unpacked) | 1368 | static int vphn_unpack_associativity(const long *packed, unsigned int *unpacked) |
1365 | { | 1369 | { |
1366 | int i = 0; | 1370 | int i, nr_assoc_doms = 0; |
1367 | int nr_assoc_doms = 0; | ||
1368 | const u16 *field = (const u16*) packed; | 1371 | const u16 *field = (const u16*) packed; |
1369 | 1372 | ||
1370 | #define VPHN_FIELD_UNUSED (0xffff) | 1373 | #define VPHN_FIELD_UNUSED (0xffff) |
1371 | #define VPHN_FIELD_MSB (0x8000) | 1374 | #define VPHN_FIELD_MSB (0x8000) |
1372 | #define VPHN_FIELD_MASK (~VPHN_FIELD_MSB) | 1375 | #define VPHN_FIELD_MASK (~VPHN_FIELD_MSB) |
1373 | 1376 | ||
1374 | for (i = 0; i < VPHN_ASSOC_BUFSIZE; i++) { | 1377 | for (i = 1; i < VPHN_ASSOC_BUFSIZE; i++) { |
1375 | if (*field == VPHN_FIELD_UNUSED) { | 1378 | if (*field == VPHN_FIELD_UNUSED) { |
1376 | /* All significant fields processed, and remaining | 1379 | /* All significant fields processed, and remaining |
1377 | * fields contain the reserved value of all 1's. | 1380 | * fields contain the reserved value of all 1's. |
@@ -1379,14 +1382,12 @@ static int vphn_unpack_associativity(const long *packed, unsigned int *unpacked) | |||
1379 | */ | 1382 | */ |
1380 | unpacked[i] = *((u32*)field); | 1383 | unpacked[i] = *((u32*)field); |
1381 | field += 2; | 1384 | field += 2; |
1382 | } | 1385 | } else if (*field & VPHN_FIELD_MSB) { |
1383 | else if (*field & VPHN_FIELD_MSB) { | ||
1384 | /* Data is in the lower 15 bits of this field */ | 1386 | /* Data is in the lower 15 bits of this field */ |
1385 | unpacked[i] = *field & VPHN_FIELD_MASK; | 1387 | unpacked[i] = *field & VPHN_FIELD_MASK; |
1386 | field++; | 1388 | field++; |
1387 | nr_assoc_doms++; | 1389 | nr_assoc_doms++; |
1388 | } | 1390 | } else { |
1389 | else { | ||
1390 | /* Data is in the lower 15 bits of this field | 1391 | /* Data is in the lower 15 bits of this field |
1391 | * concatenated with the next 16 bit field | 1392 | * concatenated with the next 16 bit field |
1392 | */ | 1393 | */ |
@@ -1396,6 +1397,9 @@ static int vphn_unpack_associativity(const long *packed, unsigned int *unpacked) | |||
1396 | } | 1397 | } |
1397 | } | 1398 | } |
1398 | 1399 | ||
1400 | /* The first cell contains the length of the property */ | ||
1401 | unpacked[0] = nr_assoc_doms; | ||
1402 | |||
1399 | return nr_assoc_doms; | 1403 | return nr_assoc_doms; |
1400 | } | 1404 | } |
1401 | 1405 | ||
@@ -1405,7 +1409,7 @@ static int vphn_unpack_associativity(const long *packed, unsigned int *unpacked) | |||
1405 | */ | 1409 | */ |
1406 | static long hcall_vphn(unsigned long cpu, unsigned int *associativity) | 1410 | static long hcall_vphn(unsigned long cpu, unsigned int *associativity) |
1407 | { | 1411 | { |
1408 | long rc = 0; | 1412 | long rc; |
1409 | long retbuf[PLPAR_HCALL9_BUFSIZE] = {0}; | 1413 | long retbuf[PLPAR_HCALL9_BUFSIZE] = {0}; |
1410 | u64 flags = 1; | 1414 | u64 flags = 1; |
1411 | int hwcpu = get_hard_smp_processor_id(cpu); | 1415 | int hwcpu = get_hard_smp_processor_id(cpu); |
@@ -1419,7 +1423,7 @@ static long hcall_vphn(unsigned long cpu, unsigned int *associativity) | |||
1419 | static long vphn_get_associativity(unsigned long cpu, | 1423 | static long vphn_get_associativity(unsigned long cpu, |
1420 | unsigned int *associativity) | 1424 | unsigned int *associativity) |
1421 | { | 1425 | { |
1422 | long rc = 0; | 1426 | long rc; |
1423 | 1427 | ||
1424 | rc = hcall_vphn(cpu, associativity); | 1428 | rc = hcall_vphn(cpu, associativity); |
1425 | 1429 | ||
@@ -1445,9 +1449,9 @@ static long vphn_get_associativity(unsigned long cpu, | |||
1445 | */ | 1449 | */ |
1446 | int arch_update_cpu_topology(void) | 1450 | int arch_update_cpu_topology(void) |
1447 | { | 1451 | { |
1448 | int cpu = 0, nid = 0, old_nid = 0; | 1452 | int cpu, nid, old_nid; |
1449 | unsigned int associativity[VPHN_ASSOC_BUFSIZE] = {0}; | 1453 | unsigned int associativity[VPHN_ASSOC_BUFSIZE] = {0}; |
1450 | struct sys_device *sysdev = NULL; | 1454 | struct sys_device *sysdev; |
1451 | 1455 | ||
1452 | for_each_cpu_mask(cpu, cpu_associativity_changes_mask) { | 1456 | for_each_cpu_mask(cpu, cpu_associativity_changes_mask) { |
1453 | vphn_get_associativity(cpu, associativity); | 1457 | vphn_get_associativity(cpu, associativity); |
@@ -1512,7 +1516,8 @@ int start_topology_update(void) | |||
1512 | { | 1516 | { |
1513 | int rc = 0; | 1517 | int rc = 0; |
1514 | 1518 | ||
1515 | if (firmware_has_feature(FW_FEATURE_VPHN)) { | 1519 | if (firmware_has_feature(FW_FEATURE_VPHN) && |
1520 | get_lppaca()->shared_proc) { | ||
1516 | vphn_enabled = 1; | 1521 | vphn_enabled = 1; |
1517 | setup_cpu_associativity_change_counters(); | 1522 | setup_cpu_associativity_change_counters(); |
1518 | init_timer_deferrable(&topology_timer); | 1523 | init_timer_deferrable(&topology_timer); |
diff --git a/arch/powerpc/platforms/83xx/mpc830x_rdb.c b/arch/powerpc/platforms/83xx/mpc830x_rdb.c index 661d354e4ff2..d0c4e15b7794 100644 --- a/arch/powerpc/platforms/83xx/mpc830x_rdb.c +++ b/arch/powerpc/platforms/83xx/mpc830x_rdb.c | |||
@@ -57,12 +57,12 @@ static void __init mpc830x_rdb_init_IRQ(void) | |||
57 | ipic_set_default_priority(); | 57 | ipic_set_default_priority(); |
58 | } | 58 | } |
59 | 59 | ||
60 | struct const char *board[] __initdata = { | 60 | static const char *board[] __initdata = { |
61 | "MPC8308RDB", | 61 | "MPC8308RDB", |
62 | "fsl,mpc8308rdb", | 62 | "fsl,mpc8308rdb", |
63 | "denx,mpc8308_p1m", | 63 | "denx,mpc8308_p1m", |
64 | NULL | 64 | NULL |
65 | } | 65 | }; |
66 | 66 | ||
67 | /* | 67 | /* |
68 | * Called very early, MMU is off, device-tree isn't unflattened | 68 | * Called very early, MMU is off, device-tree isn't unflattened |
diff --git a/arch/powerpc/platforms/83xx/mpc831x_rdb.c b/arch/powerpc/platforms/83xx/mpc831x_rdb.c index b54cd736a895..f859ead49a8d 100644 --- a/arch/powerpc/platforms/83xx/mpc831x_rdb.c +++ b/arch/powerpc/platforms/83xx/mpc831x_rdb.c | |||
@@ -60,11 +60,11 @@ static void __init mpc831x_rdb_init_IRQ(void) | |||
60 | ipic_set_default_priority(); | 60 | ipic_set_default_priority(); |
61 | } | 61 | } |
62 | 62 | ||
63 | struct const char *board[] __initdata = { | 63 | static const char *board[] __initdata = { |
64 | "MPC8313ERDB", | 64 | "MPC8313ERDB", |
65 | "fsl,mpc8315erdb", | 65 | "fsl,mpc8315erdb", |
66 | NULL | 66 | NULL |
67 | } | 67 | }; |
68 | 68 | ||
69 | /* | 69 | /* |
70 | * Called very early, MMU is off, device-tree isn't unflattened | 70 | * Called very early, MMU is off, device-tree isn't unflattened |
diff --git a/arch/powerpc/platforms/83xx/mpc83xx.h b/arch/powerpc/platforms/83xx/mpc83xx.h index 0fea8811d45b..82a434510d83 100644 --- a/arch/powerpc/platforms/83xx/mpc83xx.h +++ b/arch/powerpc/platforms/83xx/mpc83xx.h | |||
@@ -35,6 +35,8 @@ | |||
35 | 35 | ||
36 | /* system i/o configuration register high */ | 36 | /* system i/o configuration register high */ |
37 | #define MPC83XX_SICRH_OFFS 0x118 | 37 | #define MPC83XX_SICRH_OFFS 0x118 |
38 | #define MPC8308_SICRH_USB_MASK 0x000c0000 | ||
39 | #define MPC8308_SICRH_USB_ULPI 0x00040000 | ||
38 | #define MPC834X_SICRH_USB_UTMI 0x00020000 | 40 | #define MPC834X_SICRH_USB_UTMI 0x00020000 |
39 | #define MPC831X_SICRH_USB_MASK 0x000000e0 | 41 | #define MPC831X_SICRH_USB_MASK 0x000000e0 |
40 | #define MPC831X_SICRH_USB_ULPI 0x000000a0 | 42 | #define MPC831X_SICRH_USB_ULPI 0x000000a0 |
diff --git a/arch/powerpc/platforms/83xx/usb.c b/arch/powerpc/platforms/83xx/usb.c index 3ba4bb7d41bb..2c64164722d0 100644 --- a/arch/powerpc/platforms/83xx/usb.c +++ b/arch/powerpc/platforms/83xx/usb.c | |||
@@ -127,7 +127,8 @@ int mpc831x_usb_cfg(void) | |||
127 | 127 | ||
128 | /* Configure clock */ | 128 | /* Configure clock */ |
129 | immr_node = of_get_parent(np); | 129 | immr_node = of_get_parent(np); |
130 | if (immr_node && of_device_is_compatible(immr_node, "fsl,mpc8315-immr")) | 130 | if (immr_node && (of_device_is_compatible(immr_node, "fsl,mpc8315-immr") || |
131 | of_device_is_compatible(immr_node, "fsl,mpc8308-immr"))) | ||
131 | clrsetbits_be32(immap + MPC83XX_SCCR_OFFS, | 132 | clrsetbits_be32(immap + MPC83XX_SCCR_OFFS, |
132 | MPC8315_SCCR_USB_MASK, | 133 | MPC8315_SCCR_USB_MASK, |
133 | MPC8315_SCCR_USB_DRCM_01); | 134 | MPC8315_SCCR_USB_DRCM_01); |
@@ -138,7 +139,11 @@ int mpc831x_usb_cfg(void) | |||
138 | 139 | ||
139 | /* Configure pin mux for ULPI. There is no pin mux for UTMI */ | 140 | /* Configure pin mux for ULPI. There is no pin mux for UTMI */ |
140 | if (prop && !strcmp(prop, "ulpi")) { | 141 | if (prop && !strcmp(prop, "ulpi")) { |
141 | if (of_device_is_compatible(immr_node, "fsl,mpc8315-immr")) { | 142 | if (of_device_is_compatible(immr_node, "fsl,mpc8308-immr")) { |
143 | clrsetbits_be32(immap + MPC83XX_SICRH_OFFS, | ||
144 | MPC8308_SICRH_USB_MASK, | ||
145 | MPC8308_SICRH_USB_ULPI); | ||
146 | } else if (of_device_is_compatible(immr_node, "fsl,mpc8315-immr")) { | ||
142 | clrsetbits_be32(immap + MPC83XX_SICRL_OFFS, | 147 | clrsetbits_be32(immap + MPC83XX_SICRL_OFFS, |
143 | MPC8315_SICRL_USB_MASK, | 148 | MPC8315_SICRL_USB_MASK, |
144 | MPC8315_SICRL_USB_ULPI); | 149 | MPC8315_SICRL_USB_ULPI); |
@@ -173,6 +178,9 @@ int mpc831x_usb_cfg(void) | |||
173 | !strcmp(prop, "utmi"))) { | 178 | !strcmp(prop, "utmi"))) { |
174 | u32 refsel; | 179 | u32 refsel; |
175 | 180 | ||
181 | if (of_device_is_compatible(immr_node, "fsl,mpc8308-immr")) | ||
182 | goto out; | ||
183 | |||
176 | if (of_device_is_compatible(immr_node, "fsl,mpc8315-immr")) | 184 | if (of_device_is_compatible(immr_node, "fsl,mpc8315-immr")) |
177 | refsel = CONTROL_REFSEL_24MHZ; | 185 | refsel = CONTROL_REFSEL_24MHZ; |
178 | else | 186 | else |
@@ -186,9 +194,11 @@ int mpc831x_usb_cfg(void) | |||
186 | temp = CONTROL_PHY_CLK_SEL_ULPI; | 194 | temp = CONTROL_PHY_CLK_SEL_ULPI; |
187 | #ifdef CONFIG_USB_OTG | 195 | #ifdef CONFIG_USB_OTG |
188 | /* Set OTG_PORT */ | 196 | /* Set OTG_PORT */ |
189 | dr_mode = of_get_property(np, "dr_mode", NULL); | 197 | if (!of_device_is_compatible(immr_node, "fsl,mpc8308-immr")) { |
190 | if (dr_mode && !strcmp(dr_mode, "otg")) | 198 | dr_mode = of_get_property(np, "dr_mode", NULL); |
191 | temp |= CONTROL_OTG_PORT; | 199 | if (dr_mode && !strcmp(dr_mode, "otg")) |
200 | temp |= CONTROL_OTG_PORT; | ||
201 | } | ||
192 | #endif /* CONFIG_USB_OTG */ | 202 | #endif /* CONFIG_USB_OTG */ |
193 | out_be32(usb_regs + FSL_USB2_CONTROL_OFFS, temp); | 203 | out_be32(usb_regs + FSL_USB2_CONTROL_OFFS, temp); |
194 | } else { | 204 | } else { |
@@ -196,6 +206,7 @@ int mpc831x_usb_cfg(void) | |||
196 | ret = -EINVAL; | 206 | ret = -EINVAL; |
197 | } | 207 | } |
198 | 208 | ||
209 | out: | ||
199 | iounmap(usb_regs); | 210 | iounmap(usb_regs); |
200 | of_node_put(np); | 211 | of_node_put(np); |
201 | return ret; | 212 | return ret; |
diff --git a/arch/powerpc/platforms/cell/cpufreq_spudemand.c b/arch/powerpc/platforms/cell/cpufreq_spudemand.c index 968c1c0b4d5b..d809836bcf5f 100644 --- a/arch/powerpc/platforms/cell/cpufreq_spudemand.c +++ b/arch/powerpc/platforms/cell/cpufreq_spudemand.c | |||
@@ -39,8 +39,6 @@ struct spu_gov_info_struct { | |||
39 | }; | 39 | }; |
40 | static DEFINE_PER_CPU(struct spu_gov_info_struct, spu_gov_info); | 40 | static DEFINE_PER_CPU(struct spu_gov_info_struct, spu_gov_info); |
41 | 41 | ||
42 | static struct workqueue_struct *kspugov_wq; | ||
43 | |||
44 | static int calc_freq(struct spu_gov_info_struct *info) | 42 | static int calc_freq(struct spu_gov_info_struct *info) |
45 | { | 43 | { |
46 | int cpu; | 44 | int cpu; |
@@ -71,14 +69,14 @@ static void spu_gov_work(struct work_struct *work) | |||
71 | __cpufreq_driver_target(info->policy, target_freq, CPUFREQ_RELATION_H); | 69 | __cpufreq_driver_target(info->policy, target_freq, CPUFREQ_RELATION_H); |
72 | 70 | ||
73 | delay = usecs_to_jiffies(info->poll_int); | 71 | delay = usecs_to_jiffies(info->poll_int); |
74 | queue_delayed_work_on(info->policy->cpu, kspugov_wq, &info->work, delay); | 72 | schedule_delayed_work_on(info->policy->cpu, &info->work, delay); |
75 | } | 73 | } |
76 | 74 | ||
77 | static void spu_gov_init_work(struct spu_gov_info_struct *info) | 75 | static void spu_gov_init_work(struct spu_gov_info_struct *info) |
78 | { | 76 | { |
79 | int delay = usecs_to_jiffies(info->poll_int); | 77 | int delay = usecs_to_jiffies(info->poll_int); |
80 | INIT_DELAYED_WORK_DEFERRABLE(&info->work, spu_gov_work); | 78 | INIT_DELAYED_WORK_DEFERRABLE(&info->work, spu_gov_work); |
81 | queue_delayed_work_on(info->policy->cpu, kspugov_wq, &info->work, delay); | 79 | schedule_delayed_work_on(info->policy->cpu, &info->work, delay); |
82 | } | 80 | } |
83 | 81 | ||
84 | static void spu_gov_cancel_work(struct spu_gov_info_struct *info) | 82 | static void spu_gov_cancel_work(struct spu_gov_info_struct *info) |
@@ -152,27 +150,15 @@ static int __init spu_gov_init(void) | |||
152 | { | 150 | { |
153 | int ret; | 151 | int ret; |
154 | 152 | ||
155 | kspugov_wq = create_workqueue("kspugov"); | ||
156 | if (!kspugov_wq) { | ||
157 | printk(KERN_ERR "creation of kspugov failed\n"); | ||
158 | ret = -EFAULT; | ||
159 | goto out; | ||
160 | } | ||
161 | |||
162 | ret = cpufreq_register_governor(&spu_governor); | 153 | ret = cpufreq_register_governor(&spu_governor); |
163 | if (ret) { | 154 | if (ret) |
164 | printk(KERN_ERR "registration of governor failed\n"); | 155 | printk(KERN_ERR "registration of governor failed\n"); |
165 | destroy_workqueue(kspugov_wq); | ||
166 | goto out; | ||
167 | } | ||
168 | out: | ||
169 | return ret; | 156 | return ret; |
170 | } | 157 | } |
171 | 158 | ||
172 | static void __exit spu_gov_exit(void) | 159 | static void __exit spu_gov_exit(void) |
173 | { | 160 | { |
174 | cpufreq_unregister_governor(&spu_governor); | 161 | cpufreq_unregister_governor(&spu_governor); |
175 | destroy_workqueue(kspugov_wq); | ||
176 | } | 162 | } |
177 | 163 | ||
178 | 164 | ||
diff --git a/arch/powerpc/platforms/cell/qpace_setup.c b/arch/powerpc/platforms/cell/qpace_setup.c index 1b5749042756..d31c594cfdf3 100644 --- a/arch/powerpc/platforms/cell/qpace_setup.c +++ b/arch/powerpc/platforms/cell/qpace_setup.c | |||
@@ -145,9 +145,4 @@ define_machine(qpace) { | |||
145 | .calibrate_decr = generic_calibrate_decr, | 145 | .calibrate_decr = generic_calibrate_decr, |
146 | .progress = qpace_progress, | 146 | .progress = qpace_progress, |
147 | .init_IRQ = iic_init_IRQ, | 147 | .init_IRQ = iic_init_IRQ, |
148 | #ifdef CONFIG_KEXEC | ||
149 | .machine_kexec = default_machine_kexec, | ||
150 | .machine_kexec_prepare = default_machine_kexec_prepare, | ||
151 | .machine_crash_shutdown = default_machine_crash_shutdown, | ||
152 | #endif | ||
153 | }; | 148 | }; |
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index 8547e86bfb42..acfaccea5f4f 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <asm/spu_csa.h> | 37 | #include <asm/spu_csa.h> |
38 | #include <asm/xmon.h> | 38 | #include <asm/xmon.h> |
39 | #include <asm/prom.h> | 39 | #include <asm/prom.h> |
40 | #include <asm/kexec.h> | ||
40 | 41 | ||
41 | const struct spu_management_ops *spu_management_ops; | 42 | const struct spu_management_ops *spu_management_ops; |
42 | EXPORT_SYMBOL_GPL(spu_management_ops); | 43 | EXPORT_SYMBOL_GPL(spu_management_ops); |
@@ -727,6 +728,75 @@ static ssize_t spu_stat_show(struct sys_device *sysdev, | |||
727 | 728 | ||
728 | static SYSDEV_ATTR(stat, 0644, spu_stat_show, NULL); | 729 | static SYSDEV_ATTR(stat, 0644, spu_stat_show, NULL); |
729 | 730 | ||
731 | #ifdef CONFIG_KEXEC | ||
732 | |||
733 | struct crash_spu_info { | ||
734 | struct spu *spu; | ||
735 | u32 saved_spu_runcntl_RW; | ||
736 | u32 saved_spu_status_R; | ||
737 | u32 saved_spu_npc_RW; | ||
738 | u64 saved_mfc_sr1_RW; | ||
739 | u64 saved_mfc_dar; | ||
740 | u64 saved_mfc_dsisr; | ||
741 | }; | ||
742 | |||
743 | #define CRASH_NUM_SPUS 16 /* Enough for current hardware */ | ||
744 | static struct crash_spu_info crash_spu_info[CRASH_NUM_SPUS]; | ||
745 | |||
746 | static void crash_kexec_stop_spus(void) | ||
747 | { | ||
748 | struct spu *spu; | ||
749 | int i; | ||
750 | u64 tmp; | ||
751 | |||
752 | for (i = 0; i < CRASH_NUM_SPUS; i++) { | ||
753 | if (!crash_spu_info[i].spu) | ||
754 | continue; | ||
755 | |||
756 | spu = crash_spu_info[i].spu; | ||
757 | |||
758 | crash_spu_info[i].saved_spu_runcntl_RW = | ||
759 | in_be32(&spu->problem->spu_runcntl_RW); | ||
760 | crash_spu_info[i].saved_spu_status_R = | ||
761 | in_be32(&spu->problem->spu_status_R); | ||
762 | crash_spu_info[i].saved_spu_npc_RW = | ||
763 | in_be32(&spu->problem->spu_npc_RW); | ||
764 | |||
765 | crash_spu_info[i].saved_mfc_dar = spu_mfc_dar_get(spu); | ||
766 | crash_spu_info[i].saved_mfc_dsisr = spu_mfc_dsisr_get(spu); | ||
767 | tmp = spu_mfc_sr1_get(spu); | ||
768 | crash_spu_info[i].saved_mfc_sr1_RW = tmp; | ||
769 | |||
770 | tmp &= ~MFC_STATE1_MASTER_RUN_CONTROL_MASK; | ||
771 | spu_mfc_sr1_set(spu, tmp); | ||
772 | |||
773 | __delay(200); | ||
774 | } | ||
775 | } | ||
776 | |||
777 | static void crash_register_spus(struct list_head *list) | ||
778 | { | ||
779 | struct spu *spu; | ||
780 | int ret; | ||
781 | |||
782 | list_for_each_entry(spu, list, full_list) { | ||
783 | if (WARN_ON(spu->number >= CRASH_NUM_SPUS)) | ||
784 | continue; | ||
785 | |||
786 | crash_spu_info[spu->number].spu = spu; | ||
787 | } | ||
788 | |||
789 | ret = crash_shutdown_register(&crash_kexec_stop_spus); | ||
790 | if (ret) | ||
791 | printk(KERN_ERR "Could not register SPU crash handler"); | ||
792 | } | ||
793 | |||
794 | #else | ||
795 | static inline void crash_register_spus(struct list_head *list) | ||
796 | { | ||
797 | } | ||
798 | #endif | ||
799 | |||
730 | static int __init init_spu_base(void) | 800 | static int __init init_spu_base(void) |
731 | { | 801 | { |
732 | int i, ret = 0; | 802 | int i, ret = 0; |
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c index 02f7b113a31b..3c7c3f82d842 100644 --- a/arch/powerpc/platforms/cell/spufs/file.c +++ b/arch/powerpc/platforms/cell/spufs/file.c | |||
@@ -219,24 +219,17 @@ spufs_mem_write(struct file *file, const char __user *buffer, | |||
219 | loff_t pos = *ppos; | 219 | loff_t pos = *ppos; |
220 | int ret; | 220 | int ret; |
221 | 221 | ||
222 | if (pos < 0) | ||
223 | return -EINVAL; | ||
224 | if (pos > LS_SIZE) | 222 | if (pos > LS_SIZE) |
225 | return -EFBIG; | 223 | return -EFBIG; |
226 | if (size > LS_SIZE - pos) | ||
227 | size = LS_SIZE - pos; | ||
228 | 224 | ||
229 | ret = spu_acquire(ctx); | 225 | ret = spu_acquire(ctx); |
230 | if (ret) | 226 | if (ret) |
231 | return ret; | 227 | return ret; |
232 | 228 | ||
233 | local_store = ctx->ops->get_ls(ctx); | 229 | local_store = ctx->ops->get_ls(ctx); |
234 | ret = copy_from_user(local_store + pos, buffer, size); | 230 | size = simple_write_to_buffer(local_store, LS_SIZE, ppos, buffer, size); |
235 | spu_release(ctx); | 231 | spu_release(ctx); |
236 | 232 | ||
237 | if (ret) | ||
238 | return -EFAULT; | ||
239 | *ppos = pos + size; | ||
240 | return size; | 233 | return size; |
241 | } | 234 | } |
242 | 235 | ||
@@ -574,18 +567,15 @@ spufs_regs_write(struct file *file, const char __user *buffer, | |||
574 | if (*pos >= sizeof(lscsa->gprs)) | 567 | if (*pos >= sizeof(lscsa->gprs)) |
575 | return -EFBIG; | 568 | return -EFBIG; |
576 | 569 | ||
577 | size = min_t(ssize_t, sizeof(lscsa->gprs) - *pos, size); | ||
578 | *pos += size; | ||
579 | |||
580 | ret = spu_acquire_saved(ctx); | 570 | ret = spu_acquire_saved(ctx); |
581 | if (ret) | 571 | if (ret) |
582 | return ret; | 572 | return ret; |
583 | 573 | ||
584 | ret = copy_from_user((char *)lscsa->gprs + *pos - size, | 574 | size = simple_write_to_buffer(lscsa->gprs, sizeof(lscsa->gprs), pos, |
585 | buffer, size) ? -EFAULT : size; | 575 | buffer, size); |
586 | 576 | ||
587 | spu_release_saved(ctx); | 577 | spu_release_saved(ctx); |
588 | return ret; | 578 | return size; |
589 | } | 579 | } |
590 | 580 | ||
591 | static const struct file_operations spufs_regs_fops = { | 581 | static const struct file_operations spufs_regs_fops = { |
@@ -630,18 +620,15 @@ spufs_fpcr_write(struct file *file, const char __user * buffer, | |||
630 | if (*pos >= sizeof(lscsa->fpcr)) | 620 | if (*pos >= sizeof(lscsa->fpcr)) |
631 | return -EFBIG; | 621 | return -EFBIG; |
632 | 622 | ||
633 | size = min_t(ssize_t, sizeof(lscsa->fpcr) - *pos, size); | ||
634 | |||
635 | ret = spu_acquire_saved(ctx); | 623 | ret = spu_acquire_saved(ctx); |
636 | if (ret) | 624 | if (ret) |
637 | return ret; | 625 | return ret; |
638 | 626 | ||
639 | *pos += size; | 627 | size = simple_write_to_buffer(&lscsa->fpcr, sizeof(lscsa->fpcr), pos, |
640 | ret = copy_from_user((char *)&lscsa->fpcr + *pos - size, | 628 | buffer, size); |
641 | buffer, size) ? -EFAULT : size; | ||
642 | 629 | ||
643 | spu_release_saved(ctx); | 630 | spu_release_saved(ctx); |
644 | return ret; | 631 | return size; |
645 | } | 632 | } |
646 | 633 | ||
647 | static const struct file_operations spufs_fpcr_fops = { | 634 | static const struct file_operations spufs_fpcr_fops = { |
diff --git a/arch/powerpc/platforms/embedded6xx/gamecube.c b/arch/powerpc/platforms/embedded6xx/gamecube.c index 1106fd99627f..a138e14bad2e 100644 --- a/arch/powerpc/platforms/embedded6xx/gamecube.c +++ b/arch/powerpc/platforms/embedded6xx/gamecube.c | |||
@@ -75,14 +75,6 @@ static void gamecube_shutdown(void) | |||
75 | flipper_quiesce(); | 75 | flipper_quiesce(); |
76 | } | 76 | } |
77 | 77 | ||
78 | #ifdef CONFIG_KEXEC | ||
79 | static int gamecube_kexec_prepare(struct kimage *image) | ||
80 | { | ||
81 | return 0; | ||
82 | } | ||
83 | #endif /* CONFIG_KEXEC */ | ||
84 | |||
85 | |||
86 | define_machine(gamecube) { | 78 | define_machine(gamecube) { |
87 | .name = "gamecube", | 79 | .name = "gamecube", |
88 | .probe = gamecube_probe, | 80 | .probe = gamecube_probe, |
@@ -95,9 +87,6 @@ define_machine(gamecube) { | |||
95 | .calibrate_decr = generic_calibrate_decr, | 87 | .calibrate_decr = generic_calibrate_decr, |
96 | .progress = udbg_progress, | 88 | .progress = udbg_progress, |
97 | .machine_shutdown = gamecube_shutdown, | 89 | .machine_shutdown = gamecube_shutdown, |
98 | #ifdef CONFIG_KEXEC | ||
99 | .machine_kexec_prepare = gamecube_kexec_prepare, | ||
100 | #endif | ||
101 | }; | 90 | }; |
102 | 91 | ||
103 | 92 | ||
diff --git a/arch/powerpc/platforms/embedded6xx/wii.c b/arch/powerpc/platforms/embedded6xx/wii.c index 649473a729b8..1b5dc1a2e145 100644 --- a/arch/powerpc/platforms/embedded6xx/wii.c +++ b/arch/powerpc/platforms/embedded6xx/wii.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/irq.h> | 19 | #include <linux/irq.h> |
20 | #include <linux/seq_file.h> | 20 | #include <linux/seq_file.h> |
21 | #include <linux/kexec.h> | ||
22 | #include <linux/of_platform.h> | 21 | #include <linux/of_platform.h> |
23 | #include <linux/memblock.h> | 22 | #include <linux/memblock.h> |
24 | #include <mm/mmu_decl.h> | 23 | #include <mm/mmu_decl.h> |
@@ -226,13 +225,6 @@ static void wii_shutdown(void) | |||
226 | flipper_quiesce(); | 225 | flipper_quiesce(); |
227 | } | 226 | } |
228 | 227 | ||
229 | #ifdef CONFIG_KEXEC | ||
230 | static int wii_machine_kexec_prepare(struct kimage *image) | ||
231 | { | ||
232 | return 0; | ||
233 | } | ||
234 | #endif /* CONFIG_KEXEC */ | ||
235 | |||
236 | define_machine(wii) { | 228 | define_machine(wii) { |
237 | .name = "wii", | 229 | .name = "wii", |
238 | .probe = wii_probe, | 230 | .probe = wii_probe, |
@@ -246,9 +238,6 @@ define_machine(wii) { | |||
246 | .calibrate_decr = generic_calibrate_decr, | 238 | .calibrate_decr = generic_calibrate_decr, |
247 | .progress = udbg_progress, | 239 | .progress = udbg_progress, |
248 | .machine_shutdown = wii_shutdown, | 240 | .machine_shutdown = wii_shutdown, |
249 | #ifdef CONFIG_KEXEC | ||
250 | .machine_kexec_prepare = wii_machine_kexec_prepare, | ||
251 | #endif | ||
252 | }; | 241 | }; |
253 | 242 | ||
254 | static struct of_device_id wii_of_bus[] = { | 243 | static struct of_device_id wii_of_bus[] = { |
diff --git a/arch/powerpc/platforms/iseries/Kconfig b/arch/powerpc/platforms/iseries/Kconfig index 47a20cfb4486..e5bc9f75d474 100644 --- a/arch/powerpc/platforms/iseries/Kconfig +++ b/arch/powerpc/platforms/iseries/Kconfig | |||
@@ -2,7 +2,7 @@ config PPC_ISERIES | |||
2 | bool "IBM Legacy iSeries" | 2 | bool "IBM Legacy iSeries" |
3 | depends on PPC64 && PPC_BOOK3S | 3 | depends on PPC64 && PPC_BOOK3S |
4 | select PPC_INDIRECT_IO | 4 | select PPC_INDIRECT_IO |
5 | select PPC_PCI_CHOICE if EMBEDDED | 5 | select PPC_PCI_CHOICE if EXPERT |
6 | 6 | ||
7 | menu "iSeries device drivers" | 7 | menu "iSeries device drivers" |
8 | depends on PPC_ISERIES | 8 | depends on PPC_ISERIES |
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig index 5d1b743dbe7e..5b3da4b4ea79 100644 --- a/arch/powerpc/platforms/pseries/Kconfig +++ b/arch/powerpc/platforms/pseries/Kconfig | |||
@@ -10,7 +10,7 @@ config PPC_PSERIES | |||
10 | select RTAS_ERROR_LOGGING | 10 | select RTAS_ERROR_LOGGING |
11 | select PPC_UDBG_16550 | 11 | select PPC_UDBG_16550 |
12 | select PPC_NATIVE | 12 | select PPC_NATIVE |
13 | select PPC_PCI_CHOICE if EMBEDDED | 13 | select PPC_PCI_CHOICE if EXPERT |
14 | default y | 14 | default y |
15 | 15 | ||
16 | config PPC_SPLPAR | 16 | config PPC_SPLPAR |
@@ -24,9 +24,9 @@ config PPC_SPLPAR | |||
24 | two or more partitions. | 24 | two or more partitions. |
25 | 25 | ||
26 | config EEH | 26 | config EEH |
27 | bool "PCI Extended Error Handling (EEH)" if EMBEDDED | 27 | bool "PCI Extended Error Handling (EEH)" if EXPERT |
28 | depends on PPC_PSERIES && PCI | 28 | depends on PPC_PSERIES && PCI |
29 | default y if !EMBEDDED | 29 | default y if !EXPERT |
30 | 30 | ||
31 | config PSERIES_MSI | 31 | config PSERIES_MSI |
32 | bool | 32 | bool |
diff --git a/arch/powerpc/platforms/pseries/kexec.c b/arch/powerpc/platforms/pseries/kexec.c index 53cbd53d8740..77d38a5e2ff9 100644 --- a/arch/powerpc/platforms/pseries/kexec.c +++ b/arch/powerpc/platforms/pseries/kexec.c | |||
@@ -61,13 +61,3 @@ void __init setup_kexec_cpu_down_xics(void) | |||
61 | { | 61 | { |
62 | ppc_md.kexec_cpu_down = pseries_kexec_cpu_down_xics; | 62 | ppc_md.kexec_cpu_down = pseries_kexec_cpu_down_xics; |
63 | } | 63 | } |
64 | |||
65 | static int __init pseries_kexec_setup(void) | ||
66 | { | ||
67 | ppc_md.machine_kexec = default_machine_kexec; | ||
68 | ppc_md.machine_kexec_prepare = default_machine_kexec_prepare; | ||
69 | ppc_md.machine_crash_shutdown = default_machine_crash_shutdown; | ||
70 | |||
71 | return 0; | ||
72 | } | ||
73 | machine_device_initcall(pseries, pseries_kexec_setup); | ||
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 5d3ea9f60dd7..ca5d5898d320 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
@@ -713,6 +713,13 @@ EXPORT_SYMBOL(arch_free_page); | |||
713 | /* NB: reg/unreg are called while guarded with the tracepoints_mutex */ | 713 | /* NB: reg/unreg are called while guarded with the tracepoints_mutex */ |
714 | extern long hcall_tracepoint_refcount; | 714 | extern long hcall_tracepoint_refcount; |
715 | 715 | ||
716 | /* | ||
717 | * Since the tracing code might execute hcalls we need to guard against | ||
718 | * recursion. One example of this are spinlocks calling H_YIELD on | ||
719 | * shared processor partitions. | ||
720 | */ | ||
721 | static DEFINE_PER_CPU(unsigned int, hcall_trace_depth); | ||
722 | |||
716 | void hcall_tracepoint_regfunc(void) | 723 | void hcall_tracepoint_regfunc(void) |
717 | { | 724 | { |
718 | hcall_tracepoint_refcount++; | 725 | hcall_tracepoint_refcount++; |
@@ -725,12 +732,42 @@ void hcall_tracepoint_unregfunc(void) | |||
725 | 732 | ||
726 | void __trace_hcall_entry(unsigned long opcode, unsigned long *args) | 733 | void __trace_hcall_entry(unsigned long opcode, unsigned long *args) |
727 | { | 734 | { |
735 | unsigned long flags; | ||
736 | unsigned int *depth; | ||
737 | |||
738 | local_irq_save(flags); | ||
739 | |||
740 | depth = &__get_cpu_var(hcall_trace_depth); | ||
741 | |||
742 | if (*depth) | ||
743 | goto out; | ||
744 | |||
745 | (*depth)++; | ||
728 | trace_hcall_entry(opcode, args); | 746 | trace_hcall_entry(opcode, args); |
747 | (*depth)--; | ||
748 | |||
749 | out: | ||
750 | local_irq_restore(flags); | ||
729 | } | 751 | } |
730 | 752 | ||
731 | void __trace_hcall_exit(long opcode, unsigned long retval, | 753 | void __trace_hcall_exit(long opcode, unsigned long retval, |
732 | unsigned long *retbuf) | 754 | unsigned long *retbuf) |
733 | { | 755 | { |
756 | unsigned long flags; | ||
757 | unsigned int *depth; | ||
758 | |||
759 | local_irq_save(flags); | ||
760 | |||
761 | depth = &__get_cpu_var(hcall_trace_depth); | ||
762 | |||
763 | if (*depth) | ||
764 | goto out; | ||
765 | |||
766 | (*depth)++; | ||
734 | trace_hcall_exit(opcode, retval, retbuf); | 767 | trace_hcall_exit(opcode, retval, retbuf); |
768 | (*depth)--; | ||
769 | |||
770 | out: | ||
771 | local_irq_restore(flags); | ||
735 | } | 772 | } |
736 | #endif | 773 | #endif |
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c index a4fc6da87c2e..c55d7ad9c648 100644 --- a/arch/powerpc/platforms/pseries/ras.c +++ b/arch/powerpc/platforms/pseries/ras.c | |||
@@ -54,7 +54,8 @@ | |||
54 | static unsigned char ras_log_buf[RTAS_ERROR_LOG_MAX]; | 54 | static unsigned char ras_log_buf[RTAS_ERROR_LOG_MAX]; |
55 | static DEFINE_SPINLOCK(ras_log_buf_lock); | 55 | static DEFINE_SPINLOCK(ras_log_buf_lock); |
56 | 56 | ||
57 | static char mce_data_buf[RTAS_ERROR_LOG_MAX]; | 57 | static char global_mce_data_buf[RTAS_ERROR_LOG_MAX]; |
58 | static DEFINE_PER_CPU(__u64, mce_data_buf); | ||
58 | 59 | ||
59 | static int ras_get_sensor_state_token; | 60 | static int ras_get_sensor_state_token; |
60 | static int ras_check_exception_token; | 61 | static int ras_check_exception_token; |
@@ -196,12 +197,24 @@ static irqreturn_t ras_error_interrupt(int irq, void *dev_id) | |||
196 | return IRQ_HANDLED; | 197 | return IRQ_HANDLED; |
197 | } | 198 | } |
198 | 199 | ||
199 | /* Get the error information for errors coming through the | 200 | /* |
201 | * Some versions of FWNMI place the buffer inside the 4kB page starting at | ||
202 | * 0x7000. Other versions place it inside the rtas buffer. We check both. | ||
203 | */ | ||
204 | #define VALID_FWNMI_BUFFER(A) \ | ||
205 | ((((A) >= 0x7000) && ((A) < 0x7ff0)) || \ | ||
206 | (((A) >= rtas.base) && ((A) < (rtas.base + rtas.size - 16)))) | ||
207 | |||
208 | /* | ||
209 | * Get the error information for errors coming through the | ||
200 | * FWNMI vectors. The pt_regs' r3 will be updated to reflect | 210 | * FWNMI vectors. The pt_regs' r3 will be updated to reflect |
201 | * the actual r3 if possible, and a ptr to the error log entry | 211 | * the actual r3 if possible, and a ptr to the error log entry |
202 | * will be returned if found. | 212 | * will be returned if found. |
203 | * | 213 | * |
204 | * The mce_data_buf does not have any locks or protection around it, | 214 | * If the RTAS error is not of the extended type, then we put it in a per |
215 | * cpu 64bit buffer. If it is the extended type we use global_mce_data_buf. | ||
216 | * | ||
217 | * The global_mce_data_buf does not have any locks or protection around it, | ||
205 | * if a second machine check comes in, or a system reset is done | 218 | * if a second machine check comes in, or a system reset is done |
206 | * before we have logged the error, then we will get corruption in the | 219 | * before we have logged the error, then we will get corruption in the |
207 | * error log. This is preferable over holding off on calling | 220 | * error log. This is preferable over holding off on calling |
@@ -210,20 +223,31 @@ static irqreturn_t ras_error_interrupt(int irq, void *dev_id) | |||
210 | */ | 223 | */ |
211 | static struct rtas_error_log *fwnmi_get_errinfo(struct pt_regs *regs) | 224 | static struct rtas_error_log *fwnmi_get_errinfo(struct pt_regs *regs) |
212 | { | 225 | { |
213 | unsigned long errdata = regs->gpr[3]; | ||
214 | struct rtas_error_log *errhdr = NULL; | ||
215 | unsigned long *savep; | 226 | unsigned long *savep; |
227 | struct rtas_error_log *h, *errhdr = NULL; | ||
228 | |||
229 | if (!VALID_FWNMI_BUFFER(regs->gpr[3])) { | ||
230 | printk(KERN_ERR "FWNMI: corrupt r3\n"); | ||
231 | return NULL; | ||
232 | } | ||
216 | 233 | ||
217 | if ((errdata >= 0x7000 && errdata < 0x7fff0) || | 234 | savep = __va(regs->gpr[3]); |
218 | (errdata >= rtas.base && errdata < rtas.base + rtas.size - 16)) { | 235 | regs->gpr[3] = savep[0]; /* restore original r3 */ |
219 | savep = __va(errdata); | 236 | |
220 | regs->gpr[3] = savep[0]; /* restore original r3 */ | 237 | /* If it isn't an extended log we can use the per cpu 64bit buffer */ |
221 | memset(mce_data_buf, 0, RTAS_ERROR_LOG_MAX); | 238 | h = (struct rtas_error_log *)&savep[1]; |
222 | memcpy(mce_data_buf, (char *)(savep + 1), RTAS_ERROR_LOG_MAX); | 239 | if (!h->extended) { |
223 | errhdr = (struct rtas_error_log *)mce_data_buf; | 240 | memcpy(&__get_cpu_var(mce_data_buf), h, sizeof(__u64)); |
241 | errhdr = (struct rtas_error_log *)&__get_cpu_var(mce_data_buf); | ||
224 | } else { | 242 | } else { |
225 | printk("FWNMI: corrupt r3\n"); | 243 | int len; |
244 | |||
245 | len = max_t(int, 8+h->extended_log_length, RTAS_ERROR_LOG_MAX); | ||
246 | memset(global_mce_data_buf, 0, RTAS_ERROR_LOG_MAX); | ||
247 | memcpy(global_mce_data_buf, h, len); | ||
248 | errhdr = (struct rtas_error_log *)global_mce_data_buf; | ||
226 | } | 249 | } |
250 | |||
227 | return errhdr; | 251 | return errhdr; |
228 | } | 252 | } |
229 | 253 | ||
@@ -235,7 +259,7 @@ static void fwnmi_release_errinfo(void) | |||
235 | { | 259 | { |
236 | int ret = rtas_call(rtas_token("ibm,nmi-interlock"), 0, 1, NULL); | 260 | int ret = rtas_call(rtas_token("ibm,nmi-interlock"), 0, 1, NULL); |
237 | if (ret != 0) | 261 | if (ret != 0) |
238 | printk("FWNMI: nmi-interlock failed: %d\n", ret); | 262 | printk(KERN_ERR "FWNMI: nmi-interlock failed: %d\n", ret); |
239 | } | 263 | } |
240 | 264 | ||
241 | int pSeries_system_reset_exception(struct pt_regs *regs) | 265 | int pSeries_system_reset_exception(struct pt_regs *regs) |
@@ -259,31 +283,43 @@ int pSeries_system_reset_exception(struct pt_regs *regs) | |||
259 | * Return 1 if corrected (or delivered a signal). | 283 | * Return 1 if corrected (or delivered a signal). |
260 | * Return 0 if there is nothing we can do. | 284 | * Return 0 if there is nothing we can do. |
261 | */ | 285 | */ |
262 | static int recover_mce(struct pt_regs *regs, struct rtas_error_log * err) | 286 | static int recover_mce(struct pt_regs *regs, struct rtas_error_log *err) |
263 | { | 287 | { |
264 | int nonfatal = 0; | 288 | int recovered = 0; |
265 | 289 | ||
266 | if (err->disposition == RTAS_DISP_FULLY_RECOVERED) { | 290 | if (!(regs->msr & MSR_RI)) { |
291 | /* If MSR_RI isn't set, we cannot recover */ | ||
292 | recovered = 0; | ||
293 | |||
294 | } else if (err->disposition == RTAS_DISP_FULLY_RECOVERED) { | ||
267 | /* Platform corrected itself */ | 295 | /* Platform corrected itself */ |
268 | nonfatal = 1; | 296 | recovered = 1; |
269 | } else if ((regs->msr & MSR_RI) && | 297 | |
270 | user_mode(regs) && | 298 | } else if (err->disposition == RTAS_DISP_LIMITED_RECOVERY) { |
271 | err->severity == RTAS_SEVERITY_ERROR_SYNC && | 299 | /* Platform corrected itself but could be degraded */ |
272 | err->disposition == RTAS_DISP_NOT_RECOVERED && | 300 | printk(KERN_ERR "MCE: limited recovery, system may " |
273 | err->target == RTAS_TARGET_MEMORY && | 301 | "be degraded\n"); |
274 | err->type == RTAS_TYPE_ECC_UNCORR && | 302 | recovered = 1; |
275 | !(current->pid == 0 || is_global_init(current))) { | 303 | |
276 | /* Kill off a user process with an ECC error */ | 304 | } else if (user_mode(regs) && !is_global_init(current) && |
277 | printk(KERN_ERR "MCE: uncorrectable ecc error for pid %d\n", | 305 | err->severity == RTAS_SEVERITY_ERROR_SYNC) { |
278 | current->pid); | 306 | |
279 | /* XXX something better for ECC error? */ | 307 | /* |
280 | _exception(SIGBUS, regs, BUS_ADRERR, regs->nip); | 308 | * If we received a synchronous error when in userspace |
281 | nonfatal = 1; | 309 | * kill the task. Firmware may report details of the fail |
310 | * asynchronously, so we can't rely on the target and type | ||
311 | * fields being valid here. | ||
312 | */ | ||
313 | printk(KERN_ERR "MCE: uncorrectable error, killing task " | ||
314 | "%s:%d\n", current->comm, current->pid); | ||
315 | |||
316 | _exception(SIGBUS, regs, BUS_MCEERR_AR, regs->nip); | ||
317 | recovered = 1; | ||
282 | } | 318 | } |
283 | 319 | ||
284 | log_error((char *)err, ERR_TYPE_RTAS_LOG, !nonfatal); | 320 | log_error((char *)err, ERR_TYPE_RTAS_LOG, 0); |
285 | 321 | ||
286 | return nonfatal; | 322 | return recovered; |
287 | } | 323 | } |
288 | 324 | ||
289 | /* | 325 | /* |
diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c index 9f99bef2adec..8c6cab013278 100644 --- a/arch/powerpc/sysdev/fsl_rio.c +++ b/arch/powerpc/sysdev/fsl_rio.c | |||
@@ -1555,8 +1555,6 @@ int fsl_rio_setup(struct platform_device *dev) | |||
1555 | saved_mcheck_exception = ppc_md.machine_check_exception; | 1555 | saved_mcheck_exception = ppc_md.machine_check_exception; |
1556 | ppc_md.machine_check_exception = fsl_rio_mcheck_exception; | 1556 | ppc_md.machine_check_exception = fsl_rio_mcheck_exception; |
1557 | #endif | 1557 | #endif |
1558 | /* Ensure that RFXE is set */ | ||
1559 | mtspr(SPRN_HID1, (mfspr(SPRN_HID1) | 0x20000)); | ||
1560 | 1558 | ||
1561 | return 0; | 1559 | return 0; |
1562 | err: | 1560 | err: |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 7c1342618a30..b0c8469e5ddd 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -674,7 +674,8 @@ void mpic_unmask_irq(unsigned int irq) | |||
674 | /* make sure mask gets to controller before we return to user */ | 674 | /* make sure mask gets to controller before we return to user */ |
675 | do { | 675 | do { |
676 | if (!loops--) { | 676 | if (!loops--) { |
677 | printk(KERN_ERR "mpic_enable_irq timeout\n"); | 677 | printk(KERN_ERR "%s: timeout on hwirq %u\n", |
678 | __func__, src); | ||
678 | break; | 679 | break; |
679 | } | 680 | } |
680 | } while(mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) & MPIC_VECPRI_MASK); | 681 | } while(mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) & MPIC_VECPRI_MASK); |
@@ -695,7 +696,8 @@ void mpic_mask_irq(unsigned int irq) | |||
695 | /* make sure mask gets to controller before we return to user */ | 696 | /* make sure mask gets to controller before we return to user */ |
696 | do { | 697 | do { |
697 | if (!loops--) { | 698 | if (!loops--) { |
698 | printk(KERN_ERR "mpic_enable_irq timeout\n"); | 699 | printk(KERN_ERR "%s: timeout on hwirq %u\n", |
700 | __func__, src); | ||
699 | break; | 701 | break; |
700 | } | 702 | } |
701 | } while(!(mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) & MPIC_VECPRI_MASK)); | 703 | } while(!(mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) & MPIC_VECPRI_MASK)); |
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index ff19efdf6fef..636bcb81d068 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -406,7 +406,7 @@ config QDIO | |||
406 | If unsure, say Y. | 406 | If unsure, say Y. |
407 | 407 | ||
408 | config CHSC_SCH | 408 | config CHSC_SCH |
409 | def_tristate y | 409 | def_tristate m |
410 | prompt "Support for CHSC subchannels" | 410 | prompt "Support for CHSC subchannels" |
411 | help | 411 | help |
412 | This driver allows usage of CHSC subchannels. A CHSC subchannel | 412 | This driver allows usage of CHSC subchannels. A CHSC subchannel |
diff --git a/arch/s390/include/asm/cacheflush.h b/arch/s390/include/asm/cacheflush.h index 405cc97c6249..7e1f77620624 100644 --- a/arch/s390/include/asm/cacheflush.h +++ b/arch/s390/include/asm/cacheflush.h | |||
@@ -1,29 +1,8 @@ | |||
1 | #ifndef _S390_CACHEFLUSH_H | 1 | #ifndef _S390_CACHEFLUSH_H |
2 | #define _S390_CACHEFLUSH_H | 2 | #define _S390_CACHEFLUSH_H |
3 | 3 | ||
4 | /* Keep includes the same across arches. */ | ||
5 | #include <linux/mm.h> | ||
6 | |||
7 | /* Caches aren't brain-dead on the s390. */ | 4 | /* Caches aren't brain-dead on the s390. */ |
8 | #define flush_cache_all() do { } while (0) | 5 | #include <asm-generic/cacheflush.h> |
9 | #define flush_cache_mm(mm) do { } while (0) | ||
10 | #define flush_cache_dup_mm(mm) do { } while (0) | ||
11 | #define flush_cache_range(vma, start, end) do { } while (0) | ||
12 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | ||
13 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 | ||
14 | #define flush_dcache_page(page) do { } while (0) | ||
15 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | ||
16 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | ||
17 | #define flush_icache_range(start, end) do { } while (0) | ||
18 | #define flush_icache_page(vma,pg) do { } while (0) | ||
19 | #define flush_icache_user_range(vma,pg,adr,len) do { } while (0) | ||
20 | #define flush_cache_vmap(start, end) do { } while (0) | ||
21 | #define flush_cache_vunmap(start, end) do { } while (0) | ||
22 | |||
23 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | ||
24 | memcpy(dst, src, len) | ||
25 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | ||
26 | memcpy(dst, src, len) | ||
27 | 6 | ||
28 | #ifdef CONFIG_DEBUG_PAGEALLOC | 7 | #ifdef CONFIG_DEBUG_PAGEALLOC |
29 | void kernel_map_pages(struct page *page, int numpages, int enable); | 8 | void kernel_map_pages(struct page *page, int numpages, int enable); |
diff --git a/arch/s390/include/asm/tlb.h b/arch/s390/include/asm/tlb.h index f1f644f2240a..9074a54c4d10 100644 --- a/arch/s390/include/asm/tlb.h +++ b/arch/s390/include/asm/tlb.h | |||
@@ -22,6 +22,7 @@ | |||
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <linux/mm.h> | 24 | #include <linux/mm.h> |
25 | #include <linux/pagemap.h> | ||
25 | #include <linux/swap.h> | 26 | #include <linux/swap.h> |
26 | #include <asm/processor.h> | 27 | #include <asm/processor.h> |
27 | #include <asm/pgalloc.h> | 28 | #include <asm/pgalloc.h> |
diff --git a/arch/s390/lib/uaccess_std.c b/arch/s390/lib/uaccess_std.c index 07deaeee14c8..a6c4f7ed24a4 100644 --- a/arch/s390/lib/uaccess_std.c +++ b/arch/s390/lib/uaccess_std.c | |||
@@ -125,9 +125,9 @@ static size_t copy_in_user_std(size_t size, void __user *to, | |||
125 | unsigned long tmp1; | 125 | unsigned long tmp1; |
126 | 126 | ||
127 | asm volatile( | 127 | asm volatile( |
128 | " sacf 256\n" | ||
128 | " "AHI" %0,-1\n" | 129 | " "AHI" %0,-1\n" |
129 | " jo 5f\n" | 130 | " jo 5f\n" |
130 | " sacf 256\n" | ||
131 | " bras %3,3f\n" | 131 | " bras %3,3f\n" |
132 | "0:"AHI" %0,257\n" | 132 | "0:"AHI" %0,257\n" |
133 | "1: mvc 0(1,%1),0(%2)\n" | 133 | "1: mvc 0(1,%1),0(%2)\n" |
@@ -142,9 +142,8 @@ static size_t copy_in_user_std(size_t size, void __user *to, | |||
142 | "3:"AHI" %0,-256\n" | 142 | "3:"AHI" %0,-256\n" |
143 | " jnm 2b\n" | 143 | " jnm 2b\n" |
144 | "4: ex %0,1b-0b(%3)\n" | 144 | "4: ex %0,1b-0b(%3)\n" |
145 | " sacf 0\n" | ||
146 | "5: "SLR" %0,%0\n" | 145 | "5: "SLR" %0,%0\n" |
147 | "6:\n" | 146 | "6: sacf 0\n" |
148 | EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b) | 147 | EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b) |
149 | : "+a" (size), "+a" (to), "+a" (from), "=a" (tmp1) | 148 | : "+a" (size), "+a" (to), "+a" (from), "=a" (tmp1) |
150 | : : "cc", "memory"); | 149 | : : "cc", "memory"); |
@@ -156,9 +155,9 @@ static size_t clear_user_std(size_t size, void __user *to) | |||
156 | unsigned long tmp1, tmp2; | 155 | unsigned long tmp1, tmp2; |
157 | 156 | ||
158 | asm volatile( | 157 | asm volatile( |
158 | " sacf 256\n" | ||
159 | " "AHI" %0,-1\n" | 159 | " "AHI" %0,-1\n" |
160 | " jo 5f\n" | 160 | " jo 5f\n" |
161 | " sacf 256\n" | ||
162 | " bras %3,3f\n" | 161 | " bras %3,3f\n" |
163 | " xc 0(1,%1),0(%1)\n" | 162 | " xc 0(1,%1),0(%1)\n" |
164 | "0:"AHI" %0,257\n" | 163 | "0:"AHI" %0,257\n" |
@@ -178,9 +177,8 @@ static size_t clear_user_std(size_t size, void __user *to) | |||
178 | "3:"AHI" %0,-256\n" | 177 | "3:"AHI" %0,-256\n" |
179 | " jnm 2b\n" | 178 | " jnm 2b\n" |
180 | "4: ex %0,0(%3)\n" | 179 | "4: ex %0,0(%3)\n" |
181 | " sacf 0\n" | ||
182 | "5: "SLR" %0,%0\n" | 180 | "5: "SLR" %0,%0\n" |
183 | "6:\n" | 181 | "6: sacf 0\n" |
184 | EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b) | 182 | EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b) |
185 | : "+a" (size), "+a" (to), "=a" (tmp1), "=a" (tmp2) | 183 | : "+a" (size), "+a" (to), "=a" (tmp1), "=a" (tmp2) |
186 | : : "cc", "memory"); | 184 | : : "cc", "memory"); |
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c index 0c719c61972e..e1850c28cd68 100644 --- a/arch/s390/mm/pgtable.c +++ b/arch/s390/mm/pgtable.c | |||
@@ -336,7 +336,8 @@ void page_table_free(struct mm_struct *mm, unsigned long *table) | |||
336 | page->flags ^= bits; | 336 | page->flags ^= bits; |
337 | if (page->flags & FRAG_MASK) { | 337 | if (page->flags & FRAG_MASK) { |
338 | /* Page now has some free pgtable fragments. */ | 338 | /* Page now has some free pgtable fragments. */ |
339 | list_move(&page->lru, &mm->context.pgtable_list); | 339 | if (!list_empty(&page->lru)) |
340 | list_move(&page->lru, &mm->context.pgtable_list); | ||
340 | page = NULL; | 341 | page = NULL; |
341 | } else | 342 | } else |
342 | /* All fragments of the 4K page have been freed. */ | 343 | /* All fragments of the 4K page have been freed. */ |
diff --git a/arch/score/Kconfig b/arch/score/Kconfig index 4293fdcb5398..27b2295f41f3 100644 --- a/arch/score/Kconfig +++ b/arch/score/Kconfig | |||
@@ -1,5 +1,9 @@ | |||
1 | menu "Machine selection" | 1 | menu "Machine selection" |
2 | 2 | ||
3 | config SCORE | ||
4 | def_bool y | ||
5 | select HAVE_GENERIC_HARDIRQS | ||
6 | |||
3 | choice | 7 | choice |
4 | prompt "System type" | 8 | prompt "System type" |
5 | default MACH_SPCT6600 | 9 | default MACH_SPCT6600 |
@@ -53,9 +57,6 @@ config GENERIC_CLOCKEVENTS | |||
53 | config SCHED_NO_NO_OMIT_FRAME_POINTER | 57 | config SCHED_NO_NO_OMIT_FRAME_POINTER |
54 | def_bool y | 58 | def_bool y |
55 | 59 | ||
56 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
57 | def_bool y | ||
58 | |||
59 | config GENERIC_SYSCALL_TABLE | 60 | config GENERIC_SYSCALL_TABLE |
60 | def_bool y | 61 | def_bool y |
61 | 62 | ||
@@ -68,9 +69,6 @@ menu "Kernel type" | |||
68 | config 32BIT | 69 | config 32BIT |
69 | def_bool y | 70 | def_bool y |
70 | 71 | ||
71 | config GENERIC_HARDIRQS | ||
72 | def_bool y | ||
73 | |||
74 | config ARCH_FLATMEM_ENABLE | 72 | config ARCH_FLATMEM_ENABLE |
75 | def_bool y | 73 | def_bool y |
76 | 74 | ||
diff --git a/arch/score/configs/spct6600_defconfig b/arch/score/configs/spct6600_defconfig index 9883c50e4636..df1edbf507a2 100644 --- a/arch/score/configs/spct6600_defconfig +++ b/arch/score/configs/spct6600_defconfig | |||
@@ -9,7 +9,7 @@ CONFIG_LOG_BUF_SHIFT=12 | |||
9 | CONFIG_SYSFS_DEPRECATED_V2=y | 9 | CONFIG_SYSFS_DEPRECATED_V2=y |
10 | CONFIG_BLK_DEV_INITRD=y | 10 | CONFIG_BLK_DEV_INITRD=y |
11 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 11 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
12 | CONFIG_EMBEDDED=y | 12 | CONFIG_EXPERT=y |
13 | # CONFIG_KALLSYMS is not set | 13 | # CONFIG_KALLSYMS is not set |
14 | # CONFIG_HOTPLUG is not set | 14 | # CONFIG_HOTPLUG is not set |
15 | CONFIG_SLAB=y | 15 | CONFIG_SLAB=y |
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index fff252209f63..8a9011dced14 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | config SUPERH | 1 | config SUPERH |
2 | def_bool y | 2 | def_bool y |
3 | select EMBEDDED | 3 | select EXPERT |
4 | select CLKDEV_LOOKUP | 4 | select CLKDEV_LOOKUP |
5 | select HAVE_IDE if HAS_IOPORT | 5 | select HAVE_IDE if HAS_IOPORT |
6 | select HAVE_MEMBLOCK | 6 | select HAVE_MEMBLOCK |
@@ -15,6 +15,7 @@ config SUPERH | |||
15 | select HAVE_KERNEL_GZIP | 15 | select HAVE_KERNEL_GZIP |
16 | select HAVE_KERNEL_BZIP2 | 16 | select HAVE_KERNEL_BZIP2 |
17 | select HAVE_KERNEL_LZMA | 17 | select HAVE_KERNEL_LZMA |
18 | select HAVE_KERNEL_XZ | ||
18 | select HAVE_KERNEL_LZO | 19 | select HAVE_KERNEL_LZO |
19 | select HAVE_SYSCALL_TRACEPOINTS | 20 | select HAVE_SYSCALL_TRACEPOINTS |
20 | select HAVE_REGS_AND_STACK_ACCESS_API | 21 | select HAVE_REGS_AND_STACK_ACCESS_API |
diff --git a/arch/sh/Makefile b/arch/sh/Makefile index 9c8c6e1a2a15..e3d8170ad00b 100644 --- a/arch/sh/Makefile +++ b/arch/sh/Makefile | |||
@@ -200,7 +200,7 @@ endif | |||
200 | libs-$(CONFIG_SUPERH32) := arch/sh/lib/ $(libs-y) | 200 | libs-$(CONFIG_SUPERH32) := arch/sh/lib/ $(libs-y) |
201 | libs-$(CONFIG_SUPERH64) := arch/sh/lib64/ $(libs-y) | 201 | libs-$(CONFIG_SUPERH64) := arch/sh/lib64/ $(libs-y) |
202 | 202 | ||
203 | BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.lzo \ | 203 | BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.xz uImage.lzo \ |
204 | uImage.srec uImage.bin zImage vmlinux.bin vmlinux.srec \ | 204 | uImage.srec uImage.bin zImage vmlinux.bin vmlinux.srec \ |
205 | romImage | 205 | romImage |
206 | PHONY += $(BOOT_TARGETS) | 206 | PHONY += $(BOOT_TARGETS) |
@@ -230,5 +230,6 @@ define archhelp | |||
230 | @echo '* uImage.gz - Kernel-only image for U-Boot (gzip)' | 230 | @echo '* uImage.gz - Kernel-only image for U-Boot (gzip)' |
231 | @echo ' uImage.bz2 - Kernel-only image for U-Boot (bzip2)' | 231 | @echo ' uImage.bz2 - Kernel-only image for U-Boot (bzip2)' |
232 | @echo ' uImage.lzma - Kernel-only image for U-Boot (lzma)' | 232 | @echo ' uImage.lzma - Kernel-only image for U-Boot (lzma)' |
233 | @echo ' uImage.xz - Kernel-only image for U-Boot (xz)' | ||
233 | @echo ' uImage.lzo - Kernel-only image for U-Boot (lzo)' | 234 | @echo ' uImage.lzo - Kernel-only image for U-Boot (lzo)' |
234 | endef | 235 | endef |
diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index 33b662999fc6..701667acfd89 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c | |||
@@ -1294,6 +1294,7 @@ static int __init arch_setup(void) | |||
1294 | i2c_register_board_info(1, i2c1_devices, | 1294 | i2c_register_board_info(1, i2c1_devices, |
1295 | ARRAY_SIZE(i2c1_devices)); | 1295 | ARRAY_SIZE(i2c1_devices)); |
1296 | 1296 | ||
1297 | #if defined(CONFIG_VIDEO_SH_VOU) || defined(CONFIG_VIDEO_SH_VOU_MODULE) | ||
1297 | /* VOU */ | 1298 | /* VOU */ |
1298 | gpio_request(GPIO_FN_DV_D15, NULL); | 1299 | gpio_request(GPIO_FN_DV_D15, NULL); |
1299 | gpio_request(GPIO_FN_DV_D14, NULL); | 1300 | gpio_request(GPIO_FN_DV_D14, NULL); |
@@ -1325,6 +1326,7 @@ static int __init arch_setup(void) | |||
1325 | 1326 | ||
1326 | /* Remove reset */ | 1327 | /* Remove reset */ |
1327 | gpio_set_value(GPIO_PTG4, 1); | 1328 | gpio_set_value(GPIO_PTG4, 1); |
1329 | #endif | ||
1328 | 1330 | ||
1329 | return platform_add_devices(ecovec_devices, | 1331 | return platform_add_devices(ecovec_devices, |
1330 | ARRAY_SIZE(ecovec_devices)); | 1332 | ARRAY_SIZE(ecovec_devices)); |
diff --git a/arch/sh/boot/Makefile b/arch/sh/boot/Makefile index 1ce63624c9b9..ba515d800245 100644 --- a/arch/sh/boot/Makefile +++ b/arch/sh/boot/Makefile | |||
@@ -24,12 +24,13 @@ suffix-y := bin | |||
24 | suffix-$(CONFIG_KERNEL_GZIP) := gz | 24 | suffix-$(CONFIG_KERNEL_GZIP) := gz |
25 | suffix-$(CONFIG_KERNEL_BZIP2) := bz2 | 25 | suffix-$(CONFIG_KERNEL_BZIP2) := bz2 |
26 | suffix-$(CONFIG_KERNEL_LZMA) := lzma | 26 | suffix-$(CONFIG_KERNEL_LZMA) := lzma |
27 | suffix-$(CONFIG_KERNEL_XZ) := xz | ||
27 | suffix-$(CONFIG_KERNEL_LZO) := lzo | 28 | suffix-$(CONFIG_KERNEL_LZO) := lzo |
28 | 29 | ||
29 | targets := zImage vmlinux.srec romImage uImage uImage.srec uImage.gz \ | 30 | targets := zImage vmlinux.srec romImage uImage uImage.srec uImage.gz \ |
30 | uImage.bz2 uImage.lzma uImage.lzo uImage.bin | 31 | uImage.bz2 uImage.lzma uImage.xz uImage.lzo uImage.bin |
31 | extra-y += vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \ | 32 | extra-y += vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \ |
32 | vmlinux.bin.lzo | 33 | vmlinux.bin.xz vmlinux.bin.lzo |
33 | subdir- := compressed romimage | 34 | subdir- := compressed romimage |
34 | 35 | ||
35 | $(obj)/zImage: $(obj)/compressed/vmlinux FORCE | 36 | $(obj)/zImage: $(obj)/compressed/vmlinux FORCE |
@@ -76,6 +77,9 @@ $(obj)/vmlinux.bin.bz2: $(obj)/vmlinux.bin FORCE | |||
76 | $(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE | 77 | $(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE |
77 | $(call if_changed,lzma) | 78 | $(call if_changed,lzma) |
78 | 79 | ||
80 | $(obj)/vmlinux.bin.xz: $(obj)/vmlinux.bin FORCE | ||
81 | $(call if_changed,xzkern) | ||
82 | |||
79 | $(obj)/vmlinux.bin.lzo: $(obj)/vmlinux.bin FORCE | 83 | $(obj)/vmlinux.bin.lzo: $(obj)/vmlinux.bin FORCE |
80 | $(call if_changed,lzo) | 84 | $(call if_changed,lzo) |
81 | 85 | ||
@@ -88,6 +92,9 @@ $(obj)/uImage.gz: $(obj)/vmlinux.bin.gz | |||
88 | $(obj)/uImage.lzma: $(obj)/vmlinux.bin.lzma | 92 | $(obj)/uImage.lzma: $(obj)/vmlinux.bin.lzma |
89 | $(call if_changed,uimage,lzma) | 93 | $(call if_changed,uimage,lzma) |
90 | 94 | ||
95 | $(obj)/uImage.xz: $(obj)/vmlinux.bin.xz | ||
96 | $(call if_changed,uimage,xz) | ||
97 | |||
91 | $(obj)/uImage.lzo: $(obj)/vmlinux.bin.lzo | 98 | $(obj)/uImage.lzo: $(obj)/vmlinux.bin.lzo |
92 | $(call if_changed,uimage,lzo) | 99 | $(call if_changed,uimage,lzo) |
93 | 100 | ||
diff --git a/arch/sh/boot/compressed/Makefile b/arch/sh/boot/compressed/Makefile index cfa5a087a886..e0b0293bae63 100644 --- a/arch/sh/boot/compressed/Makefile +++ b/arch/sh/boot/compressed/Makefile | |||
@@ -6,7 +6,7 @@ | |||
6 | 6 | ||
7 | targets := vmlinux vmlinux.bin vmlinux.bin.gz \ | 7 | targets := vmlinux vmlinux.bin vmlinux.bin.gz \ |
8 | vmlinux.bin.bz2 vmlinux.bin.lzma \ | 8 | vmlinux.bin.bz2 vmlinux.bin.lzma \ |
9 | vmlinux.bin.lzo \ | 9 | vmlinux.bin.xz vmlinux.bin.lzo \ |
10 | head_$(BITS).o misc.o piggy.o | 10 | head_$(BITS).o misc.o piggy.o |
11 | 11 | ||
12 | OBJECTS = $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/cache.o | 12 | OBJECTS = $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/cache.o |
@@ -50,6 +50,8 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE | |||
50 | $(call if_changed,bzip2) | 50 | $(call if_changed,bzip2) |
51 | $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE | 51 | $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE |
52 | $(call if_changed,lzma) | 52 | $(call if_changed,lzma) |
53 | $(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE | ||
54 | $(call if_changed,xzkern) | ||
53 | $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE | 55 | $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE |
54 | $(call if_changed,lzo) | 56 | $(call if_changed,lzo) |
55 | 57 | ||
diff --git a/arch/sh/boot/compressed/misc.c b/arch/sh/boot/compressed/misc.c index 27140a6b365d..95470a472d2c 100644 --- a/arch/sh/boot/compressed/misc.c +++ b/arch/sh/boot/compressed/misc.c | |||
@@ -61,6 +61,10 @@ static unsigned long free_mem_end_ptr; | |||
61 | #include "../../../../lib/decompress_unlzma.c" | 61 | #include "../../../../lib/decompress_unlzma.c" |
62 | #endif | 62 | #endif |
63 | 63 | ||
64 | #ifdef CONFIG_KERNEL_XZ | ||
65 | #include "../../../../lib/decompress_unxz.c" | ||
66 | #endif | ||
67 | |||
64 | #ifdef CONFIG_KERNEL_LZO | 68 | #ifdef CONFIG_KERNEL_LZO |
65 | #include "../../../../lib/decompress_unlzo.c" | 69 | #include "../../../../lib/decompress_unlzo.c" |
66 | #endif | 70 | #endif |
diff --git a/arch/sh/include/asm/pgtable.h b/arch/sh/include/asm/pgtable.h index 083ea068e819..db85916b9e95 100644 --- a/arch/sh/include/asm/pgtable.h +++ b/arch/sh/include/asm/pgtable.h | |||
@@ -134,6 +134,7 @@ typedef pte_t *pte_addr_t; | |||
134 | extern void pgtable_cache_init(void); | 134 | extern void pgtable_cache_init(void); |
135 | 135 | ||
136 | struct vm_area_struct; | 136 | struct vm_area_struct; |
137 | struct mm_struct; | ||
137 | 138 | ||
138 | extern void __update_cache(struct vm_area_struct *vma, | 139 | extern void __update_cache(struct vm_area_struct *vma, |
139 | unsigned long address, pte_t pte); | 140 | unsigned long address, pte_t pte); |
diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7750.c b/arch/sh/kernel/cpu/sh4/setup-sh7750.c index c2b0aaaedcae..672944f5b19c 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh7750.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh7750.c | |||
@@ -230,10 +230,10 @@ static struct platform_device *sh7750_devices[] __initdata = { | |||
230 | static int __init sh7750_devices_setup(void) | 230 | static int __init sh7750_devices_setup(void) |
231 | { | 231 | { |
232 | if (mach_is_rts7751r2d()) { | 232 | if (mach_is_rts7751r2d()) { |
233 | platform_register_device(&scif_device); | 233 | platform_device_register(&scif_device); |
234 | } else { | 234 | } else { |
235 | platform_register_device(&sci_device); | 235 | platform_device_register(&sci_device); |
236 | platform_register_device(&scif_device); | 236 | platform_device_register(&scif_device); |
237 | } | 237 | } |
238 | 238 | ||
239 | return platform_add_devices(sh7750_devices, | 239 | return platform_add_devices(sh7750_devices, |
diff --git a/arch/sh/kernel/topology.c b/arch/sh/kernel/topology.c index 948fdb656933..38e862852dd0 100644 --- a/arch/sh/kernel/topology.c +++ b/arch/sh/kernel/topology.c | |||
@@ -17,6 +17,7 @@ | |||
17 | static DEFINE_PER_CPU(struct cpu, cpu_devices); | 17 | static DEFINE_PER_CPU(struct cpu, cpu_devices); |
18 | 18 | ||
19 | cpumask_t cpu_core_map[NR_CPUS]; | 19 | cpumask_t cpu_core_map[NR_CPUS]; |
20 | EXPORT_SYMBOL(cpu_core_map); | ||
20 | 21 | ||
21 | static cpumask_t cpu_coregroup_map(unsigned int cpu) | 22 | static cpumask_t cpu_coregroup_map(unsigned int cpu) |
22 | { | 23 | { |
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 45d9c87d083a..95695e97703e 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
@@ -50,6 +50,7 @@ config SPARC64 | |||
50 | select RTC_DRV_STARFIRE | 50 | select RTC_DRV_STARFIRE |
51 | select HAVE_PERF_EVENTS | 51 | select HAVE_PERF_EVENTS |
52 | select PERF_USE_VMALLOC | 52 | select PERF_USE_VMALLOC |
53 | select HAVE_GENERIC_HARDIRQS | ||
53 | 54 | ||
54 | config ARCH_DEFCONFIG | 55 | config ARCH_DEFCONFIG |
55 | string | 56 | string |
@@ -107,10 +108,6 @@ config NEED_PER_CPU_EMBED_FIRST_CHUNK | |||
107 | config NEED_PER_CPU_PAGE_FIRST_CHUNK | 108 | config NEED_PER_CPU_PAGE_FIRST_CHUNK |
108 | def_bool y if SPARC64 | 109 | def_bool y if SPARC64 |
109 | 110 | ||
110 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
111 | bool | ||
112 | def_bool y if SPARC64 | ||
113 | |||
114 | config MMU | 111 | config MMU |
115 | bool | 112 | bool |
116 | default y | 113 | default y |
@@ -276,10 +273,6 @@ config HOTPLUG_CPU | |||
276 | can be controlled through /sys/devices/system/cpu/cpu#. | 273 | can be controlled through /sys/devices/system/cpu/cpu#. |
277 | Say N if you want to disable CPU hotplug. | 274 | Say N if you want to disable CPU hotplug. |
278 | 275 | ||
279 | config GENERIC_HARDIRQS | ||
280 | bool | ||
281 | default y if SPARC64 | ||
282 | |||
283 | source "kernel/time/Kconfig" | 276 | source "kernel/time/Kconfig" |
284 | 277 | ||
285 | if SPARC64 | 278 | if SPARC64 |
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig index e11b5fcb70eb..08948e4e1503 100644 --- a/arch/tile/Kconfig +++ b/arch/tile/Kconfig | |||
@@ -1,24 +1,33 @@ | |||
1 | # For a description of the syntax of this configuration file, | 1 | # For a description of the syntax of this configuration file, |
2 | # see Documentation/kbuild/config-language.txt. | 2 | # see Documentation/kbuild/config-language.txt. |
3 | 3 | ||
4 | config MMU | 4 | config TILE |
5 | def_bool y | ||
6 | |||
7 | config GENERIC_CSUM | ||
8 | def_bool y | ||
9 | |||
10 | config GENERIC_HARDIRQS | ||
11 | def_bool y | 5 | def_bool y |
6 | select HAVE_KVM if !TILEGX | ||
7 | select GENERIC_FIND_FIRST_BIT | ||
8 | select GENERIC_FIND_NEXT_BIT | ||
9 | select USE_GENERIC_SMP_HELPERS | ||
10 | select CC_OPTIMIZE_FOR_SIZE | ||
11 | select HAVE_GENERIC_HARDIRQS | ||
12 | select GENERIC_IRQ_PROBE | ||
13 | select GENERIC_PENDING_IRQ if SMP | ||
12 | 14 | ||
13 | config GENERIC_HARDIRQS_NO__DO_IRQ | 15 | # FIXME: investigate whether we need/want these options. |
14 | def_bool y | 16 | # select HAVE_IOREMAP_PROT |
17 | # select HAVE_OPTPROBES | ||
18 | # select HAVE_REGS_AND_STACK_ACCESS_API | ||
19 | # select HAVE_HW_BREAKPOINT | ||
20 | # select PERF_EVENTS | ||
21 | # select HAVE_USER_RETURN_NOTIFIER | ||
22 | # config NO_BOOTMEM | ||
23 | # config ARCH_SUPPORTS_DEBUG_PAGEALLOC | ||
24 | # config HUGETLB_PAGE_SIZE_VARIABLE | ||
15 | 25 | ||
16 | config GENERIC_IRQ_PROBE | 26 | config MMU |
17 | def_bool y | 27 | def_bool y |
18 | 28 | ||
19 | config GENERIC_PENDING_IRQ | 29 | config GENERIC_CSUM |
20 | def_bool y | 30 | def_bool y |
21 | depends on GENERIC_HARDIRQS && SMP | ||
22 | 31 | ||
23 | config SEMAPHORE_SLEEPERS | 32 | config SEMAPHORE_SLEEPERS |
24 | def_bool y | 33 | def_bool y |
@@ -97,26 +106,6 @@ config HVC_TILE | |||
97 | select HVC_DRIVER | 106 | select HVC_DRIVER |
98 | def_bool y | 107 | def_bool y |
99 | 108 | ||
100 | config TILE | ||
101 | def_bool y | ||
102 | select HAVE_KVM if !TILEGX | ||
103 | select GENERIC_FIND_FIRST_BIT | ||
104 | select GENERIC_FIND_NEXT_BIT | ||
105 | select USE_GENERIC_SMP_HELPERS | ||
106 | select CC_OPTIMIZE_FOR_SIZE | ||
107 | |||
108 | # FIXME: investigate whether we need/want these options. | ||
109 | # select HAVE_IOREMAP_PROT | ||
110 | # select HAVE_OPTPROBES | ||
111 | # select HAVE_REGS_AND_STACK_ACCESS_API | ||
112 | # select HAVE_HW_BREAKPOINT | ||
113 | # select PERF_EVENTS | ||
114 | # select HAVE_USER_RETURN_NOTIFIER | ||
115 | # config NO_BOOTMEM | ||
116 | # config ARCH_SUPPORTS_DEBUG_PAGEALLOC | ||
117 | # config HUGETLB_PAGE_SIZE_VARIABLE | ||
118 | |||
119 | |||
120 | # Please note: TILE-Gx support is not yet finalized; this is | 109 | # Please note: TILE-Gx support is not yet finalized; this is |
121 | # the preliminary support. TILE-Gx drivers are only provided | 110 | # the preliminary support. TILE-Gx drivers are only provided |
122 | # with the alpha or beta test versions for Tilera customers. | 111 | # with the alpha or beta test versions for Tilera customers. |
@@ -220,7 +209,7 @@ config FORCE_MAX_ZONEORDER | |||
220 | 209 | ||
221 | choice | 210 | choice |
222 | depends on !TILEGX | 211 | depends on !TILEGX |
223 | prompt "Memory split" if EMBEDDED | 212 | prompt "Memory split" if EXPERT |
224 | default VMSPLIT_3G | 213 | default VMSPLIT_3G |
225 | ---help--- | 214 | ---help--- |
226 | Select the desired split between kernel and user memory. | 215 | Select the desired split between kernel and user memory. |
diff --git a/arch/tile/Kconfig.debug b/arch/tile/Kconfig.debug index a81f0fbf7e60..9bc161a02c71 100644 --- a/arch/tile/Kconfig.debug +++ b/arch/tile/Kconfig.debug | |||
@@ -3,7 +3,7 @@ menu "Kernel hacking" | |||
3 | source "lib/Kconfig.debug" | 3 | source "lib/Kconfig.debug" |
4 | 4 | ||
5 | config EARLY_PRINTK | 5 | config EARLY_PRINTK |
6 | bool "Early printk" if EMBEDDED && DEBUG_KERNEL | 6 | bool "Early printk" if EXPERT && DEBUG_KERNEL |
7 | default y | 7 | default y |
8 | help | 8 | help |
9 | Write kernel log output directly via the hypervisor console. | 9 | Write kernel log output directly via the hypervisor console. |
diff --git a/arch/tile/configs/tile_defconfig b/arch/tile/configs/tile_defconfig index 919c54afd981..0fe54445fda5 100644 --- a/arch/tile/configs/tile_defconfig +++ b/arch/tile/configs/tile_defconfig | |||
@@ -3,7 +3,7 @@ CONFIG_EXPERIMENTAL=y | |||
3 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
5 | CONFIG_INITRAMFS_SOURCE="usr/contents.txt" | 5 | CONFIG_INITRAMFS_SOURCE="usr/contents.txt" |
6 | CONFIG_EMBEDDED=y | 6 | CONFIG_EXPERT=y |
7 | # CONFIG_COMPAT_BRK is not set | 7 | # CONFIG_COMPAT_BRK is not set |
8 | CONFIG_PROFILING=y | 8 | CONFIG_PROFILING=y |
9 | CONFIG_MODULES=y | 9 | CONFIG_MODULES=y |
diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common index 049d048b070d..e351e14b4339 100644 --- a/arch/um/Kconfig.common +++ b/arch/um/Kconfig.common | |||
@@ -3,14 +3,10 @@ config DEFCONFIG_LIST | |||
3 | option defconfig_list | 3 | option defconfig_list |
4 | default "arch/$ARCH/defconfig" | 4 | default "arch/$ARCH/defconfig" |
5 | 5 | ||
6 | # UML uses the generic IRQ subsystem | ||
7 | config GENERIC_HARDIRQS | ||
8 | bool | ||
9 | default y | ||
10 | |||
11 | config UML | 6 | config UML |
12 | bool | 7 | bool |
13 | default y | 8 | default y |
9 | select HAVE_GENERIC_HARDIRQS | ||
14 | 10 | ||
15 | config MMU | 11 | config MMU |
16 | bool | 12 | bool |
diff --git a/arch/um/Kconfig.um b/arch/um/Kconfig.um index f8d1d0d47fe6..90a438acbfaf 100644 --- a/arch/um/Kconfig.um +++ b/arch/um/Kconfig.um | |||
@@ -120,9 +120,6 @@ config SMP | |||
120 | 120 | ||
121 | If you don't know what to do, say N. | 121 | If you don't know what to do, say N. |
122 | 122 | ||
123 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
124 | def_bool y | ||
125 | |||
126 | config NR_CPUS | 123 | config NR_CPUS |
127 | int "Maximum number of CPUs (2-32)" | 124 | int "Maximum number of CPUs (2-32)" |
128 | range 2 32 | 125 | range 2 32 |
diff --git a/arch/um/defconfig b/arch/um/defconfig index 564f3de65b4a..9f7634f08cf3 100644 --- a/arch/um/defconfig +++ b/arch/um/defconfig | |||
@@ -133,7 +133,7 @@ CONFIG_SYSFS_DEPRECATED=y | |||
133 | # CONFIG_BLK_DEV_INITRD is not set | 133 | # CONFIG_BLK_DEV_INITRD is not set |
134 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 134 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
135 | CONFIG_SYSCTL=y | 135 | CONFIG_SYSCTL=y |
136 | # CONFIG_EMBEDDED is not set | 136 | # CONFIG_EXPERT is not set |
137 | CONFIG_UID16=y | 137 | CONFIG_UID16=y |
138 | CONFIG_SYSCTL_SYSCALL=y | 138 | CONFIG_SYSCTL_SYSCALL=y |
139 | CONFIG_KALLSYMS=y | 139 | CONFIG_KALLSYMS=y |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 3ed5ad92b029..d5ed94d30aad 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -627,11 +627,11 @@ config APB_TIMER | |||
627 | as it is off-chip. APB timers are always running regardless of CPU | 627 | as it is off-chip. APB timers are always running regardless of CPU |
628 | C states, they are used as per CPU clockevent device when possible. | 628 | C states, they are used as per CPU clockevent device when possible. |
629 | 629 | ||
630 | # Mark as embedded because too many people got it wrong. | 630 | # Mark as expert because too many people got it wrong. |
631 | # The code disables itself when not needed. | 631 | # The code disables itself when not needed. |
632 | config DMI | 632 | config DMI |
633 | default y | 633 | default y |
634 | bool "Enable DMI scanning" if EMBEDDED | 634 | bool "Enable DMI scanning" if EXPERT |
635 | ---help--- | 635 | ---help--- |
636 | Enabled scanning of DMI to identify machine quirks. Say Y | 636 | Enabled scanning of DMI to identify machine quirks. Say Y |
637 | here unless you have verified that your setup is not | 637 | here unless you have verified that your setup is not |
@@ -639,7 +639,7 @@ config DMI | |||
639 | BIOS code. | 639 | BIOS code. |
640 | 640 | ||
641 | config GART_IOMMU | 641 | config GART_IOMMU |
642 | bool "GART IOMMU support" if EMBEDDED | 642 | bool "GART IOMMU support" if EXPERT |
643 | default y | 643 | default y |
644 | select SWIOTLB | 644 | select SWIOTLB |
645 | depends on X86_64 && PCI && AMD_NB | 645 | depends on X86_64 && PCI && AMD_NB |
@@ -889,7 +889,7 @@ config X86_THERMAL_VECTOR | |||
889 | depends on X86_MCE_INTEL | 889 | depends on X86_MCE_INTEL |
890 | 890 | ||
891 | config VM86 | 891 | config VM86 |
892 | bool "Enable VM86 support" if EMBEDDED | 892 | bool "Enable VM86 support" if EXPERT |
893 | default y | 893 | default y |
894 | depends on X86_32 | 894 | depends on X86_32 |
895 | ---help--- | 895 | ---help--- |
@@ -1073,7 +1073,7 @@ endchoice | |||
1073 | 1073 | ||
1074 | choice | 1074 | choice |
1075 | depends on EXPERIMENTAL | 1075 | depends on EXPERIMENTAL |
1076 | prompt "Memory split" if EMBEDDED | 1076 | prompt "Memory split" if EXPERT |
1077 | default VMSPLIT_3G | 1077 | default VMSPLIT_3G |
1078 | depends on X86_32 | 1078 | depends on X86_32 |
1079 | ---help--- | 1079 | ---help--- |
@@ -1135,7 +1135,7 @@ config ARCH_DMA_ADDR_T_64BIT | |||
1135 | def_bool X86_64 || HIGHMEM64G | 1135 | def_bool X86_64 || HIGHMEM64G |
1136 | 1136 | ||
1137 | config DIRECT_GBPAGES | 1137 | config DIRECT_GBPAGES |
1138 | bool "Enable 1GB pages for kernel pagetables" if EMBEDDED | 1138 | bool "Enable 1GB pages for kernel pagetables" if EXPERT |
1139 | default y | 1139 | default y |
1140 | depends on X86_64 | 1140 | depends on X86_64 |
1141 | ---help--- | 1141 | ---help--- |
@@ -1369,7 +1369,7 @@ config MATH_EMULATION | |||
1369 | 1369 | ||
1370 | config MTRR | 1370 | config MTRR |
1371 | def_bool y | 1371 | def_bool y |
1372 | prompt "MTRR (Memory Type Range Register) support" if EMBEDDED | 1372 | prompt "MTRR (Memory Type Range Register) support" if EXPERT |
1373 | ---help--- | 1373 | ---help--- |
1374 | On Intel P6 family processors (Pentium Pro, Pentium II and later) | 1374 | On Intel P6 family processors (Pentium Pro, Pentium II and later) |
1375 | the Memory Type Range Registers (MTRRs) may be used to control | 1375 | the Memory Type Range Registers (MTRRs) may be used to control |
@@ -1435,7 +1435,7 @@ config MTRR_SANITIZER_SPARE_REG_NR_DEFAULT | |||
1435 | 1435 | ||
1436 | config X86_PAT | 1436 | config X86_PAT |
1437 | def_bool y | 1437 | def_bool y |
1438 | prompt "x86 PAT support" if EMBEDDED | 1438 | prompt "x86 PAT support" if EXPERT |
1439 | depends on MTRR | 1439 | depends on MTRR |
1440 | ---help--- | 1440 | ---help--- |
1441 | Use PAT attributes to setup page level cache control. | 1441 | Use PAT attributes to setup page level cache control. |
@@ -1539,7 +1539,7 @@ config KEXEC_JUMP | |||
1539 | code in physical address mode via KEXEC | 1539 | code in physical address mode via KEXEC |
1540 | 1540 | ||
1541 | config PHYSICAL_START | 1541 | config PHYSICAL_START |
1542 | hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP) | 1542 | hex "Physical address where the kernel is loaded" if (EXPERT || CRASH_DUMP) |
1543 | default "0x1000000" | 1543 | default "0x1000000" |
1544 | ---help--- | 1544 | ---help--- |
1545 | This gives the physical address where the kernel is loaded. | 1545 | This gives the physical address where the kernel is loaded. |
@@ -1934,7 +1934,7 @@ config PCI_MMCONFIG | |||
1934 | depends on X86_64 && PCI && ACPI | 1934 | depends on X86_64 && PCI && ACPI |
1935 | 1935 | ||
1936 | config PCI_CNB20LE_QUIRK | 1936 | config PCI_CNB20LE_QUIRK |
1937 | bool "Read CNB20LE Host Bridge Windows" if EMBEDDED | 1937 | bool "Read CNB20LE Host Bridge Windows" if EXPERT |
1938 | default n | 1938 | default n |
1939 | depends on PCI && EXPERIMENTAL | 1939 | depends on PCI && EXPERIMENTAL |
1940 | help | 1940 | help |
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu index 15588a0ef466..283c5a6a03a6 100644 --- a/arch/x86/Kconfig.cpu +++ b/arch/x86/Kconfig.cpu | |||
@@ -424,7 +424,7 @@ config X86_DEBUGCTLMSR | |||
424 | depends on !(MK6 || MWINCHIPC6 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486 || M386) && !UML | 424 | depends on !(MK6 || MWINCHIPC6 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486 || M386) && !UML |
425 | 425 | ||
426 | menuconfig PROCESSOR_SELECT | 426 | menuconfig PROCESSOR_SELECT |
427 | bool "Supported processor vendors" if EMBEDDED | 427 | bool "Supported processor vendors" if EXPERT |
428 | ---help--- | 428 | ---help--- |
429 | This lets you choose what x86 vendor support code your kernel | 429 | This lets you choose what x86 vendor support code your kernel |
430 | will include. | 430 | will include. |
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug index 45143bbcfe5e..615e18810f48 100644 --- a/arch/x86/Kconfig.debug +++ b/arch/x86/Kconfig.debug | |||
@@ -31,7 +31,7 @@ config X86_VERBOSE_BOOTUP | |||
31 | see errors. Disable this if you want silent bootup. | 31 | see errors. Disable this if you want silent bootup. |
32 | 32 | ||
33 | config EARLY_PRINTK | 33 | config EARLY_PRINTK |
34 | bool "Early printk" if EMBEDDED | 34 | bool "Early printk" if EXPERT |
35 | default y | 35 | default y |
36 | ---help--- | 36 | ---help--- |
37 | Write kernel log output directly into the VGA buffer or to a serial | 37 | Write kernel log output directly into the VGA buffer or to a serial |
@@ -138,7 +138,7 @@ config DEBUG_NX_TEST | |||
138 | 138 | ||
139 | config DOUBLEFAULT | 139 | config DOUBLEFAULT |
140 | default y | 140 | default y |
141 | bool "Enable doublefault exception handler" if EMBEDDED | 141 | bool "Enable doublefault exception handler" if EXPERT |
142 | depends on X86_32 | 142 | depends on X86_32 |
143 | ---help--- | 143 | ---help--- |
144 | This option allows trapping of rare doublefault exceptions that | 144 | This option allows trapping of rare doublefault exceptions that |
diff --git a/arch/x86/include/asm/cacheflush.h b/arch/x86/include/asm/cacheflush.h index 63e35ec9075c..62f084478f7e 100644 --- a/arch/x86/include/asm/cacheflush.h +++ b/arch/x86/include/asm/cacheflush.h | |||
@@ -1,48 +1,8 @@ | |||
1 | #ifndef _ASM_X86_CACHEFLUSH_H | 1 | #ifndef _ASM_X86_CACHEFLUSH_H |
2 | #define _ASM_X86_CACHEFLUSH_H | 2 | #define _ASM_X86_CACHEFLUSH_H |
3 | 3 | ||
4 | /* Keep includes the same across arches. */ | ||
5 | #include <linux/mm.h> | ||
6 | |||
7 | /* Caches aren't brain-dead on the intel. */ | 4 | /* Caches aren't brain-dead on the intel. */ |
8 | static inline void flush_cache_all(void) { } | 5 | #include <asm-generic/cacheflush.h> |
9 | static inline void flush_cache_mm(struct mm_struct *mm) { } | ||
10 | static inline void flush_cache_dup_mm(struct mm_struct *mm) { } | ||
11 | static inline void flush_cache_range(struct vm_area_struct *vma, | ||
12 | unsigned long start, unsigned long end) { } | ||
13 | static inline void flush_cache_page(struct vm_area_struct *vma, | ||
14 | unsigned long vmaddr, unsigned long pfn) { } | ||
15 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 | ||
16 | static inline void flush_dcache_page(struct page *page) { } | ||
17 | static inline void flush_dcache_mmap_lock(struct address_space *mapping) { } | ||
18 | static inline void flush_dcache_mmap_unlock(struct address_space *mapping) { } | ||
19 | static inline void flush_icache_range(unsigned long start, | ||
20 | unsigned long end) { } | ||
21 | static inline void flush_icache_page(struct vm_area_struct *vma, | ||
22 | struct page *page) { } | ||
23 | static inline void flush_icache_user_range(struct vm_area_struct *vma, | ||
24 | struct page *page, | ||
25 | unsigned long addr, | ||
26 | unsigned long len) { } | ||
27 | static inline void flush_cache_vmap(unsigned long start, unsigned long end) { } | ||
28 | static inline void flush_cache_vunmap(unsigned long start, | ||
29 | unsigned long end) { } | ||
30 | |||
31 | static inline void copy_to_user_page(struct vm_area_struct *vma, | ||
32 | struct page *page, unsigned long vaddr, | ||
33 | void *dst, const void *src, | ||
34 | unsigned long len) | ||
35 | { | ||
36 | memcpy(dst, src, len); | ||
37 | } | ||
38 | |||
39 | static inline void copy_from_user_page(struct vm_area_struct *vma, | ||
40 | struct page *page, unsigned long vaddr, | ||
41 | void *dst, const void *src, | ||
42 | unsigned long len) | ||
43 | { | ||
44 | memcpy(dst, src, len); | ||
45 | } | ||
46 | 6 | ||
47 | #ifdef CONFIG_X86_PAT | 7 | #ifdef CONFIG_X86_PAT |
48 | /* | 8 | /* |
diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h index 4fab24de26b1..6e6e7558e702 100644 --- a/arch/x86/include/asm/cpu.h +++ b/arch/x86/include/asm/cpu.h | |||
@@ -32,5 +32,6 @@ extern void arch_unregister_cpu(int); | |||
32 | 32 | ||
33 | DECLARE_PER_CPU(int, cpu_state); | 33 | DECLARE_PER_CPU(int, cpu_state); |
34 | 34 | ||
35 | int __cpuinit mwait_usable(const struct cpuinfo_x86 *); | ||
35 | 36 | ||
36 | #endif /* _ASM_X86_CPU_H */ | 37 | #endif /* _ASM_X86_CPU_H */ |
diff --git a/arch/x86/include/asm/jump_label.h b/arch/x86/include/asm/jump_label.h index f52d42e80585..574dbc22893a 100644 --- a/arch/x86/include/asm/jump_label.h +++ b/arch/x86/include/asm/jump_label.h | |||
@@ -14,7 +14,7 @@ | |||
14 | do { \ | 14 | do { \ |
15 | asm goto("1:" \ | 15 | asm goto("1:" \ |
16 | JUMP_LABEL_INITIAL_NOP \ | 16 | JUMP_LABEL_INITIAL_NOP \ |
17 | ".pushsection __jump_table, \"a\" \n\t"\ | 17 | ".pushsection __jump_table, \"aw\" \n\t"\ |
18 | _ASM_PTR "1b, %l[" #label "], %c0 \n\t" \ | 18 | _ASM_PTR "1b, %l[" #label "], %c0 \n\t" \ |
19 | ".popsection \n\t" \ | 19 | ".popsection \n\t" \ |
20 | : : "i" (key) : : label); \ | 20 | : : "i" (key) : : label); \ |
diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h index 4a2d4e0c18d9..8b5393ec1080 100644 --- a/arch/x86/include/asm/mmu_context.h +++ b/arch/x86/include/asm/mmu_context.h | |||
@@ -36,8 +36,6 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, | |||
36 | unsigned cpu = smp_processor_id(); | 36 | unsigned cpu = smp_processor_id(); |
37 | 37 | ||
38 | if (likely(prev != next)) { | 38 | if (likely(prev != next)) { |
39 | /* stop flush ipis for the previous mm */ | ||
40 | cpumask_clear_cpu(cpu, mm_cpumask(prev)); | ||
41 | #ifdef CONFIG_SMP | 39 | #ifdef CONFIG_SMP |
42 | percpu_write(cpu_tlbstate.state, TLBSTATE_OK); | 40 | percpu_write(cpu_tlbstate.state, TLBSTATE_OK); |
43 | percpu_write(cpu_tlbstate.active_mm, next); | 41 | percpu_write(cpu_tlbstate.active_mm, next); |
@@ -47,6 +45,9 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, | |||
47 | /* Re-load page tables */ | 45 | /* Re-load page tables */ |
48 | load_cr3(next->pgd); | 46 | load_cr3(next->pgd); |
49 | 47 | ||
48 | /* stop flush ipis for the previous mm */ | ||
49 | cpumask_clear_cpu(cpu, mm_cpumask(prev)); | ||
50 | |||
50 | /* | 51 | /* |
51 | * load the LDT, if the LDT is different: | 52 | * load the LDT, if the LDT is different: |
52 | */ | 53 | */ |
diff --git a/arch/x86/include/asm/numa_32.h b/arch/x86/include/asm/numa_32.h index a37229011b56..b0ef2b449a9d 100644 --- a/arch/x86/include/asm/numa_32.h +++ b/arch/x86/include/asm/numa_32.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _ASM_X86_NUMA_32_H | 1 | #ifndef _ASM_X86_NUMA_32_H |
2 | #define _ASM_X86_NUMA_32_H | 2 | #define _ASM_X86_NUMA_32_H |
3 | 3 | ||
4 | extern int numa_off; | ||
5 | |||
4 | extern int pxm_to_nid(int pxm); | 6 | extern int pxm_to_nid(int pxm); |
5 | extern void numa_remove_cpu(int cpu); | 7 | extern void numa_remove_cpu(int cpu); |
6 | 8 | ||
diff --git a/arch/x86/include/asm/numa_64.h b/arch/x86/include/asm/numa_64.h index 5ae87285a502..0493be39607c 100644 --- a/arch/x86/include/asm/numa_64.h +++ b/arch/x86/include/asm/numa_64.h | |||
@@ -40,6 +40,7 @@ extern void __cpuinit numa_remove_cpu(int cpu); | |||
40 | #ifdef CONFIG_NUMA_EMU | 40 | #ifdef CONFIG_NUMA_EMU |
41 | #define FAKE_NODE_MIN_SIZE ((u64)32 << 20) | 41 | #define FAKE_NODE_MIN_SIZE ((u64)32 << 20) |
42 | #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL)) | 42 | #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL)) |
43 | void numa_emu_cmdline(char *); | ||
43 | #endif /* CONFIG_NUMA_EMU */ | 44 | #endif /* CONFIG_NUMA_EMU */ |
44 | #else | 45 | #else |
45 | static inline void init_cpu_to_node(void) { } | 46 | static inline void init_cpu_to_node(void) { } |
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 2071a8b2b32f..ebbc4d8ab170 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
@@ -558,13 +558,12 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, | |||
558 | static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr, | 558 | static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr, |
559 | pmd_t *pmdp, pmd_t pmd) | 559 | pmd_t *pmdp, pmd_t pmd) |
560 | { | 560 | { |
561 | #if PAGETABLE_LEVELS >= 3 | ||
562 | if (sizeof(pmdval_t) > sizeof(long)) | 561 | if (sizeof(pmdval_t) > sizeof(long)) |
563 | /* 5 arg words */ | 562 | /* 5 arg words */ |
564 | pv_mmu_ops.set_pmd_at(mm, addr, pmdp, pmd); | 563 | pv_mmu_ops.set_pmd_at(mm, addr, pmdp, pmd); |
565 | else | 564 | else |
566 | PVOP_VCALL4(pv_mmu_ops.set_pmd_at, mm, addr, pmdp, pmd.pmd); | 565 | PVOP_VCALL4(pv_mmu_ops.set_pmd_at, mm, addr, pmdp, |
567 | #endif | 566 | native_pmd_val(pmd)); |
568 | } | 567 | } |
569 | #endif | 568 | #endif |
570 | 569 | ||
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index 8ee45167e817..7e172955ee57 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h | |||
@@ -273,34 +273,34 @@ do { \ | |||
273 | typeof(var) pxo_new__ = (nval); \ | 273 | typeof(var) pxo_new__ = (nval); \ |
274 | switch (sizeof(var)) { \ | 274 | switch (sizeof(var)) { \ |
275 | case 1: \ | 275 | case 1: \ |
276 | asm("\n1:mov "__percpu_arg(1)",%%al" \ | 276 | asm("\n\tmov "__percpu_arg(1)",%%al" \ |
277 | "\n\tcmpxchgb %2, "__percpu_arg(1) \ | 277 | "\n1:\tcmpxchgb %2, "__percpu_arg(1) \ |
278 | "\n\tjnz 1b" \ | 278 | "\n\tjnz 1b" \ |
279 | : "=a" (pxo_ret__), "+m" (var) \ | 279 | : "=&a" (pxo_ret__), "+m" (var) \ |
280 | : "q" (pxo_new__) \ | 280 | : "q" (pxo_new__) \ |
281 | : "memory"); \ | 281 | : "memory"); \ |
282 | break; \ | 282 | break; \ |
283 | case 2: \ | 283 | case 2: \ |
284 | asm("\n1:mov "__percpu_arg(1)",%%ax" \ | 284 | asm("\n\tmov "__percpu_arg(1)",%%ax" \ |
285 | "\n\tcmpxchgw %2, "__percpu_arg(1) \ | 285 | "\n1:\tcmpxchgw %2, "__percpu_arg(1) \ |
286 | "\n\tjnz 1b" \ | 286 | "\n\tjnz 1b" \ |
287 | : "=a" (pxo_ret__), "+m" (var) \ | 287 | : "=&a" (pxo_ret__), "+m" (var) \ |
288 | : "r" (pxo_new__) \ | 288 | : "r" (pxo_new__) \ |
289 | : "memory"); \ | 289 | : "memory"); \ |
290 | break; \ | 290 | break; \ |
291 | case 4: \ | 291 | case 4: \ |
292 | asm("\n1:mov "__percpu_arg(1)",%%eax" \ | 292 | asm("\n\tmov "__percpu_arg(1)",%%eax" \ |
293 | "\n\tcmpxchgl %2, "__percpu_arg(1) \ | 293 | "\n1:\tcmpxchgl %2, "__percpu_arg(1) \ |
294 | "\n\tjnz 1b" \ | 294 | "\n\tjnz 1b" \ |
295 | : "=a" (pxo_ret__), "+m" (var) \ | 295 | : "=&a" (pxo_ret__), "+m" (var) \ |
296 | : "r" (pxo_new__) \ | 296 | : "r" (pxo_new__) \ |
297 | : "memory"); \ | 297 | : "memory"); \ |
298 | break; \ | 298 | break; \ |
299 | case 8: \ | 299 | case 8: \ |
300 | asm("\n1:mov "__percpu_arg(1)",%%rax" \ | 300 | asm("\n\tmov "__percpu_arg(1)",%%rax" \ |
301 | "\n\tcmpxchgq %2, "__percpu_arg(1) \ | 301 | "\n1:\tcmpxchgq %2, "__percpu_arg(1) \ |
302 | "\n\tjnz 1b" \ | 302 | "\n\tjnz 1b" \ |
303 | : "=a" (pxo_ret__), "+m" (var) \ | 303 | : "=&a" (pxo_ret__), "+m" (var) \ |
304 | : "r" (pxo_new__) \ | 304 | : "r" (pxo_new__) \ |
305 | : "memory"); \ | 305 | : "memory"); \ |
306 | break; \ | 306 | break; \ |
@@ -414,8 +414,6 @@ do { \ | |||
414 | #define this_cpu_xchg_1(pcp, nval) percpu_xchg_op(pcp, nval) | 414 | #define this_cpu_xchg_1(pcp, nval) percpu_xchg_op(pcp, nval) |
415 | #define this_cpu_xchg_2(pcp, nval) percpu_xchg_op(pcp, nval) | 415 | #define this_cpu_xchg_2(pcp, nval) percpu_xchg_op(pcp, nval) |
416 | #define this_cpu_xchg_4(pcp, nval) percpu_xchg_op(pcp, nval) | 416 | #define this_cpu_xchg_4(pcp, nval) percpu_xchg_op(pcp, nval) |
417 | #define this_cpu_xchg_8(pcp, nval) percpu_xchg_op(pcp, nval) | ||
418 | #define this_cpu_cmpxchg_8(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) | ||
419 | 417 | ||
420 | #define irqsafe_cpu_add_1(pcp, val) percpu_add_op((pcp), val) | 418 | #define irqsafe_cpu_add_1(pcp, val) percpu_add_op((pcp), val) |
421 | #define irqsafe_cpu_add_2(pcp, val) percpu_add_op((pcp), val) | 419 | #define irqsafe_cpu_add_2(pcp, val) percpu_add_op((pcp), val) |
@@ -432,8 +430,6 @@ do { \ | |||
432 | #define irqsafe_cpu_xchg_1(pcp, nval) percpu_xchg_op(pcp, nval) | 430 | #define irqsafe_cpu_xchg_1(pcp, nval) percpu_xchg_op(pcp, nval) |
433 | #define irqsafe_cpu_xchg_2(pcp, nval) percpu_xchg_op(pcp, nval) | 431 | #define irqsafe_cpu_xchg_2(pcp, nval) percpu_xchg_op(pcp, nval) |
434 | #define irqsafe_cpu_xchg_4(pcp, nval) percpu_xchg_op(pcp, nval) | 432 | #define irqsafe_cpu_xchg_4(pcp, nval) percpu_xchg_op(pcp, nval) |
435 | #define irqsafe_cpu_xchg_8(pcp, nval) percpu_xchg_op(pcp, nval) | ||
436 | #define irqsafe_cpu_cmpxchg_8(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) | ||
437 | 433 | ||
438 | #ifndef CONFIG_M386 | 434 | #ifndef CONFIG_M386 |
439 | #define __this_cpu_add_return_1(pcp, val) percpu_add_return_op(pcp, val) | 435 | #define __this_cpu_add_return_1(pcp, val) percpu_add_return_op(pcp, val) |
@@ -475,11 +471,15 @@ do { \ | |||
475 | #define this_cpu_or_8(pcp, val) percpu_to_op("or", (pcp), val) | 471 | #define this_cpu_or_8(pcp, val) percpu_to_op("or", (pcp), val) |
476 | #define this_cpu_xor_8(pcp, val) percpu_to_op("xor", (pcp), val) | 472 | #define this_cpu_xor_8(pcp, val) percpu_to_op("xor", (pcp), val) |
477 | #define this_cpu_add_return_8(pcp, val) percpu_add_return_op(pcp, val) | 473 | #define this_cpu_add_return_8(pcp, val) percpu_add_return_op(pcp, val) |
474 | #define this_cpu_xchg_8(pcp, nval) percpu_xchg_op(pcp, nval) | ||
475 | #define this_cpu_cmpxchg_8(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) | ||
478 | 476 | ||
479 | #define irqsafe_cpu_add_8(pcp, val) percpu_add_op((pcp), val) | 477 | #define irqsafe_cpu_add_8(pcp, val) percpu_add_op((pcp), val) |
480 | #define irqsafe_cpu_and_8(pcp, val) percpu_to_op("and", (pcp), val) | 478 | #define irqsafe_cpu_and_8(pcp, val) percpu_to_op("and", (pcp), val) |
481 | #define irqsafe_cpu_or_8(pcp, val) percpu_to_op("or", (pcp), val) | 479 | #define irqsafe_cpu_or_8(pcp, val) percpu_to_op("or", (pcp), val) |
482 | #define irqsafe_cpu_xor_8(pcp, val) percpu_to_op("xor", (pcp), val) | 480 | #define irqsafe_cpu_xor_8(pcp, val) percpu_to_op("xor", (pcp), val) |
481 | #define irqsafe_cpu_xchg_8(pcp, nval) percpu_xchg_op(pcp, nval) | ||
482 | #define irqsafe_cpu_cmpxchg_8(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) | ||
483 | #endif | 483 | #endif |
484 | 484 | ||
485 | /* This is not atomic against other CPUs -- CPU preemption needs to be off */ | 485 | /* This is not atomic against other CPUs -- CPU preemption needs to be off */ |
diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h index 4c2f63c7fc1b..1f4695136776 100644 --- a/arch/x86/include/asm/smp.h +++ b/arch/x86/include/asm/smp.h | |||
@@ -40,10 +40,7 @@ DECLARE_EARLY_PER_CPU(u16, x86_cpu_to_apicid); | |||
40 | DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid); | 40 | DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid); |
41 | 41 | ||
42 | /* Static state in head.S used to set up a CPU */ | 42 | /* Static state in head.S used to set up a CPU */ |
43 | extern struct { | 43 | extern unsigned long stack_start; /* Initial stack pointer address */ |
44 | void *sp; | ||
45 | unsigned short ss; | ||
46 | } stack_start; | ||
47 | 44 | ||
48 | struct smp_ops { | 45 | struct smp_ops { |
49 | void (*smp_prepare_boot_cpu)(void); | 46 | void (*smp_prepare_boot_cpu)(void); |
diff --git a/arch/x86/include/asm/system_64.h b/arch/x86/include/asm/system_64.h deleted file mode 100644 index 1159e091ad09..000000000000 --- a/arch/x86/include/asm/system_64.h +++ /dev/null | |||
@@ -1,22 +0,0 @@ | |||
1 | #ifndef _ASM_X86_SYSTEM_64_H | ||
2 | #define _ASM_X86_SYSTEM_64_H | ||
3 | |||
4 | #include <asm/segment.h> | ||
5 | #include <asm/cmpxchg.h> | ||
6 | |||
7 | |||
8 | static inline unsigned long read_cr8(void) | ||
9 | { | ||
10 | unsigned long cr8; | ||
11 | asm volatile("movq %%cr8,%0" : "=r" (cr8)); | ||
12 | return cr8; | ||
13 | } | ||
14 | |||
15 | static inline void write_cr8(unsigned long val) | ||
16 | { | ||
17 | asm volatile("movq %0,%%cr8" :: "r" (val) : "memory"); | ||
18 | } | ||
19 | |||
20 | #include <linux/irqflags.h> | ||
21 | |||
22 | #endif /* _ASM_X86_SYSTEM_64_H */ | ||
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c index 69fd72aa5594..68d1537b8c81 100644 --- a/arch/x86/kernel/acpi/sleep.c +++ b/arch/x86/kernel/acpi/sleep.c | |||
@@ -12,10 +12,8 @@ | |||
12 | #include <linux/cpumask.h> | 12 | #include <linux/cpumask.h> |
13 | #include <asm/segment.h> | 13 | #include <asm/segment.h> |
14 | #include <asm/desc.h> | 14 | #include <asm/desc.h> |
15 | |||
16 | #ifdef CONFIG_X86_32 | ||
17 | #include <asm/pgtable.h> | 15 | #include <asm/pgtable.h> |
18 | #endif | 16 | #include <asm/cacheflush.h> |
19 | 17 | ||
20 | #include "realmode/wakeup.h" | 18 | #include "realmode/wakeup.h" |
21 | #include "sleep.h" | 19 | #include "sleep.h" |
@@ -100,7 +98,7 @@ int acpi_save_state_mem(void) | |||
100 | #else /* CONFIG_64BIT */ | 98 | #else /* CONFIG_64BIT */ |
101 | header->trampoline_segment = setup_trampoline() >> 4; | 99 | header->trampoline_segment = setup_trampoline() >> 4; |
102 | #ifdef CONFIG_SMP | 100 | #ifdef CONFIG_SMP |
103 | stack_start.sp = temp_stack + sizeof(temp_stack); | 101 | stack_start = (unsigned long)temp_stack + sizeof(temp_stack); |
104 | early_gdt_descr.address = | 102 | early_gdt_descr.address = |
105 | (unsigned long)get_cpu_gdt_table(smp_processor_id()); | 103 | (unsigned long)get_cpu_gdt_table(smp_processor_id()); |
106 | initial_gs = per_cpu_offset(smp_processor_id()); | 104 | initial_gs = per_cpu_offset(smp_processor_id()); |
@@ -149,6 +147,15 @@ void __init acpi_reserve_wakeup_memory(void) | |||
149 | memblock_x86_reserve_range(mem, mem + WAKEUP_SIZE, "ACPI WAKEUP"); | 147 | memblock_x86_reserve_range(mem, mem + WAKEUP_SIZE, "ACPI WAKEUP"); |
150 | } | 148 | } |
151 | 149 | ||
150 | int __init acpi_configure_wakeup_memory(void) | ||
151 | { | ||
152 | if (acpi_realmode) | ||
153 | set_memory_x(acpi_realmode, WAKEUP_SIZE >> PAGE_SHIFT); | ||
154 | |||
155 | return 0; | ||
156 | } | ||
157 | arch_initcall(acpi_configure_wakeup_memory); | ||
158 | |||
152 | 159 | ||
153 | static int __init acpi_sleep_setup(char *str) | 160 | static int __init acpi_sleep_setup(char *str) |
154 | { | 161 | { |
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index 7283e98deaae..ec2c19a7b8ef 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c | |||
@@ -45,6 +45,7 @@ static const struct _cache_table __cpuinitconst cache_table[] = | |||
45 | { 0x0a, LVL_1_DATA, 8 }, /* 2 way set assoc, 32 byte line size */ | 45 | { 0x0a, LVL_1_DATA, 8 }, /* 2 way set assoc, 32 byte line size */ |
46 | { 0x0c, LVL_1_DATA, 16 }, /* 4-way set assoc, 32 byte line size */ | 46 | { 0x0c, LVL_1_DATA, 16 }, /* 4-way set assoc, 32 byte line size */ |
47 | { 0x0d, LVL_1_DATA, 16 }, /* 4-way set assoc, 64 byte line size */ | 47 | { 0x0d, LVL_1_DATA, 16 }, /* 4-way set assoc, 64 byte line size */ |
48 | { 0x0e, LVL_1_DATA, 24 }, /* 6-way set assoc, 64 byte line size */ | ||
48 | { 0x21, LVL_2, 256 }, /* 8-way set assoc, 64 byte line size */ | 49 | { 0x21, LVL_2, 256 }, /* 8-way set assoc, 64 byte line size */ |
49 | { 0x22, LVL_3, 512 }, /* 4-way set assoc, sectored cache, 64 byte line size */ | 50 | { 0x22, LVL_3, 512 }, /* 4-way set assoc, sectored cache, 64 byte line size */ |
50 | { 0x23, LVL_3, MB(1) }, /* 8-way set assoc, sectored cache, 64 byte line size */ | 51 | { 0x23, LVL_3, MB(1) }, /* 8-way set assoc, sectored cache, 64 byte line size */ |
@@ -66,6 +67,7 @@ static const struct _cache_table __cpuinitconst cache_table[] = | |||
66 | { 0x45, LVL_2, MB(2) }, /* 4-way set assoc, 32 byte line size */ | 67 | { 0x45, LVL_2, MB(2) }, /* 4-way set assoc, 32 byte line size */ |
67 | { 0x46, LVL_3, MB(4) }, /* 4-way set assoc, 64 byte line size */ | 68 | { 0x46, LVL_3, MB(4) }, /* 4-way set assoc, 64 byte line size */ |
68 | { 0x47, LVL_3, MB(8) }, /* 8-way set assoc, 64 byte line size */ | 69 | { 0x47, LVL_3, MB(8) }, /* 8-way set assoc, 64 byte line size */ |
70 | { 0x48, LVL_2, MB(3) }, /* 12-way set assoc, 64 byte line size */ | ||
69 | { 0x49, LVL_3, MB(4) }, /* 16-way set assoc, 64 byte line size */ | 71 | { 0x49, LVL_3, MB(4) }, /* 16-way set assoc, 64 byte line size */ |
70 | { 0x4a, LVL_3, MB(6) }, /* 12-way set assoc, 64 byte line size */ | 72 | { 0x4a, LVL_3, MB(6) }, /* 12-way set assoc, 64 byte line size */ |
71 | { 0x4b, LVL_3, MB(8) }, /* 16-way set assoc, 64 byte line size */ | 73 | { 0x4b, LVL_3, MB(8) }, /* 16-way set assoc, 64 byte line size */ |
@@ -87,6 +89,7 @@ static const struct _cache_table __cpuinitconst cache_table[] = | |||
87 | { 0x7c, LVL_2, MB(1) }, /* 8-way set assoc, sectored cache, 64 byte line size */ | 89 | { 0x7c, LVL_2, MB(1) }, /* 8-way set assoc, sectored cache, 64 byte line size */ |
88 | { 0x7d, LVL_2, MB(2) }, /* 8-way set assoc, 64 byte line size */ | 90 | { 0x7d, LVL_2, MB(2) }, /* 8-way set assoc, 64 byte line size */ |
89 | { 0x7f, LVL_2, 512 }, /* 2-way set assoc, 64 byte line size */ | 91 | { 0x7f, LVL_2, 512 }, /* 2-way set assoc, 64 byte line size */ |
92 | { 0x80, LVL_2, 512 }, /* 8-way set assoc, 64 byte line size */ | ||
90 | { 0x82, LVL_2, 256 }, /* 8-way set assoc, 32 byte line size */ | 93 | { 0x82, LVL_2, 256 }, /* 8-way set assoc, 32 byte line size */ |
91 | { 0x83, LVL_2, 512 }, /* 8-way set assoc, 32 byte line size */ | 94 | { 0x83, LVL_2, 512 }, /* 8-way set assoc, 32 byte line size */ |
92 | { 0x84, LVL_2, MB(1) }, /* 8-way set assoc, 32 byte line size */ | 95 | { 0x84, LVL_2, MB(1) }, /* 8-way set assoc, 32 byte line size */ |
diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c index e12246ff5aa6..6f8c5e9da97f 100644 --- a/arch/x86/kernel/cpu/mcheck/therm_throt.c +++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c | |||
@@ -59,6 +59,7 @@ struct thermal_state { | |||
59 | 59 | ||
60 | /* Callback to handle core threshold interrupts */ | 60 | /* Callback to handle core threshold interrupts */ |
61 | int (*platform_thermal_notify)(__u64 msr_val); | 61 | int (*platform_thermal_notify)(__u64 msr_val); |
62 | EXPORT_SYMBOL(platform_thermal_notify); | ||
62 | 63 | ||
63 | static DEFINE_PER_CPU(struct thermal_state, thermal_state); | 64 | static DEFINE_PER_CPU(struct thermal_state, thermal_state); |
64 | 65 | ||
diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c index 01c0f3ee6cc3..bebabec5b448 100644 --- a/arch/x86/kernel/cpu/mtrr/main.c +++ b/arch/x86/kernel/cpu/mtrr/main.c | |||
@@ -793,13 +793,21 @@ void set_mtrr_aps_delayed_init(void) | |||
793 | } | 793 | } |
794 | 794 | ||
795 | /* | 795 | /* |
796 | * MTRR initialization for all AP's | 796 | * Delayed MTRR initialization for all AP's |
797 | */ | 797 | */ |
798 | void mtrr_aps_init(void) | 798 | void mtrr_aps_init(void) |
799 | { | 799 | { |
800 | if (!use_intel()) | 800 | if (!use_intel()) |
801 | return; | 801 | return; |
802 | 802 | ||
803 | /* | ||
804 | * Check if someone has requested the delay of AP MTRR initialization, | ||
805 | * by doing set_mtrr_aps_delayed_init(), prior to this point. If not, | ||
806 | * then we are done. | ||
807 | */ | ||
808 | if (!mtrr_aps_delayed_init) | ||
809 | return; | ||
810 | |||
803 | set_mtrr(~0U, 0, 0, 0); | 811 | set_mtrr(~0U, 0, 0, 0); |
804 | mtrr_aps_delayed_init = false; | 812 | mtrr_aps_delayed_init = false; |
805 | } | 813 | } |
diff --git a/arch/x86/kernel/cpu/perf_event_p4.c b/arch/x86/kernel/cpu/perf_event_p4.c index e56b9bfbabd1..f7a0993c1e7c 100644 --- a/arch/x86/kernel/cpu/perf_event_p4.c +++ b/arch/x86/kernel/cpu/perf_event_p4.c | |||
@@ -682,7 +682,7 @@ static int p4_validate_raw_event(struct perf_event *event) | |||
682 | * if an event is shared accross the logical threads | 682 | * if an event is shared accross the logical threads |
683 | * the user needs special permissions to be able to use it | 683 | * the user needs special permissions to be able to use it |
684 | */ | 684 | */ |
685 | if (p4_event_bind_map[v].shared) { | 685 | if (p4_ht_active() && p4_event_bind_map[v].shared) { |
686 | if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN)) | 686 | if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN)) |
687 | return -EACCES; | 687 | return -EACCES; |
688 | } | 688 | } |
@@ -727,7 +727,8 @@ static int p4_hw_config(struct perf_event *event) | |||
727 | event->hw.config = p4_set_ht_bit(event->hw.config); | 727 | event->hw.config = p4_set_ht_bit(event->hw.config); |
728 | 728 | ||
729 | if (event->attr.type == PERF_TYPE_RAW) { | 729 | if (event->attr.type == PERF_TYPE_RAW) { |
730 | 730 | struct p4_event_bind *bind; | |
731 | unsigned int esel; | ||
731 | /* | 732 | /* |
732 | * Clear bits we reserve to be managed by kernel itself | 733 | * Clear bits we reserve to be managed by kernel itself |
733 | * and never allowed from a user space | 734 | * and never allowed from a user space |
@@ -743,6 +744,13 @@ static int p4_hw_config(struct perf_event *event) | |||
743 | * bits since we keep additional info here (for cache events and etc) | 744 | * bits since we keep additional info here (for cache events and etc) |
744 | */ | 745 | */ |
745 | event->hw.config |= event->attr.config; | 746 | event->hw.config |= event->attr.config; |
747 | bind = p4_config_get_bind(event->attr.config); | ||
748 | if (!bind) { | ||
749 | rc = -EINVAL; | ||
750 | goto out; | ||
751 | } | ||
752 | esel = P4_OPCODE_ESEL(bind->opcode); | ||
753 | event->hw.config |= p4_config_pack_cccr(P4_CCCR_ESEL(esel)); | ||
746 | } | 754 | } |
747 | 755 | ||
748 | rc = x86_setup_perfctr(event); | 756 | rc = x86_setup_perfctr(event); |
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index 64101335de19..a6b6fcf7f0ae 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c | |||
@@ -149,13 +149,13 @@ void dump_trace(struct task_struct *task, | |||
149 | unsigned used = 0; | 149 | unsigned used = 0; |
150 | struct thread_info *tinfo; | 150 | struct thread_info *tinfo; |
151 | int graph = 0; | 151 | int graph = 0; |
152 | unsigned long dummy; | ||
152 | unsigned long bp; | 153 | unsigned long bp; |
153 | 154 | ||
154 | if (!task) | 155 | if (!task) |
155 | task = current; | 156 | task = current; |
156 | 157 | ||
157 | if (!stack) { | 158 | if (!stack) { |
158 | unsigned long dummy; | ||
159 | stack = &dummy; | 159 | stack = &dummy; |
160 | if (task && task != current) | 160 | if (task && task != current) |
161 | stack = (unsigned long *)task->thread.sp; | 161 | stack = (unsigned long *)task->thread.sp; |
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S index fc293dc8dc35..767d6c43de37 100644 --- a/arch/x86/kernel/head_32.S +++ b/arch/x86/kernel/head_32.S | |||
@@ -85,6 +85,8 @@ RESERVE_BRK(pagetables, INIT_MAP_SIZE) | |||
85 | */ | 85 | */ |
86 | __HEAD | 86 | __HEAD |
87 | ENTRY(startup_32) | 87 | ENTRY(startup_32) |
88 | movl pa(stack_start),%ecx | ||
89 | |||
88 | /* test KEEP_SEGMENTS flag to see if the bootloader is asking | 90 | /* test KEEP_SEGMENTS flag to see if the bootloader is asking |
89 | us to not reload segments */ | 91 | us to not reload segments */ |
90 | testb $(1<<6), BP_loadflags(%esi) | 92 | testb $(1<<6), BP_loadflags(%esi) |
@@ -99,7 +101,9 @@ ENTRY(startup_32) | |||
99 | movl %eax,%es | 101 | movl %eax,%es |
100 | movl %eax,%fs | 102 | movl %eax,%fs |
101 | movl %eax,%gs | 103 | movl %eax,%gs |
104 | movl %eax,%ss | ||
102 | 2: | 105 | 2: |
106 | leal -__PAGE_OFFSET(%ecx),%esp | ||
103 | 107 | ||
104 | /* | 108 | /* |
105 | * Clear BSS first so that there are no surprises... | 109 | * Clear BSS first so that there are no surprises... |
@@ -145,8 +149,6 @@ ENTRY(startup_32) | |||
145 | * _brk_end is set up to point to the first "safe" location. | 149 | * _brk_end is set up to point to the first "safe" location. |
146 | * Mappings are created both at virtual address 0 (identity mapping) | 150 | * Mappings are created both at virtual address 0 (identity mapping) |
147 | * and PAGE_OFFSET for up to _end. | 151 | * and PAGE_OFFSET for up to _end. |
148 | * | ||
149 | * Note that the stack is not yet set up! | ||
150 | */ | 152 | */ |
151 | #ifdef CONFIG_X86_PAE | 153 | #ifdef CONFIG_X86_PAE |
152 | 154 | ||
@@ -282,6 +284,9 @@ ENTRY(startup_32_smp) | |||
282 | movl %eax,%es | 284 | movl %eax,%es |
283 | movl %eax,%fs | 285 | movl %eax,%fs |
284 | movl %eax,%gs | 286 | movl %eax,%gs |
287 | movl pa(stack_start),%ecx | ||
288 | movl %eax,%ss | ||
289 | leal -__PAGE_OFFSET(%ecx),%esp | ||
285 | #endif /* CONFIG_SMP */ | 290 | #endif /* CONFIG_SMP */ |
286 | default_entry: | 291 | default_entry: |
287 | 292 | ||
@@ -347,8 +352,8 @@ default_entry: | |||
347 | movl %eax,%cr0 /* ..and set paging (PG) bit */ | 352 | movl %eax,%cr0 /* ..and set paging (PG) bit */ |
348 | ljmp $__BOOT_CS,$1f /* Clear prefetch and normalize %eip */ | 353 | ljmp $__BOOT_CS,$1f /* Clear prefetch and normalize %eip */ |
349 | 1: | 354 | 1: |
350 | /* Set up the stack pointer */ | 355 | /* Shift the stack pointer to a virtual address */ |
351 | lss stack_start,%esp | 356 | addl $__PAGE_OFFSET, %esp |
352 | 357 | ||
353 | /* | 358 | /* |
354 | * Initialize eflags. Some BIOS's leave bits like NT set. This would | 359 | * Initialize eflags. Some BIOS's leave bits like NT set. This would |
@@ -360,9 +365,7 @@ default_entry: | |||
360 | 365 | ||
361 | #ifdef CONFIG_SMP | 366 | #ifdef CONFIG_SMP |
362 | cmpb $0, ready | 367 | cmpb $0, ready |
363 | jz 1f /* Initial CPU cleans BSS */ | 368 | jnz checkCPUtype |
364 | jmp checkCPUtype | ||
365 | 1: | ||
366 | #endif /* CONFIG_SMP */ | 369 | #endif /* CONFIG_SMP */ |
367 | 370 | ||
368 | /* | 371 | /* |
@@ -470,14 +473,7 @@ is386: movl $2,%ecx # set MP | |||
470 | 473 | ||
471 | cld # gcc2 wants the direction flag cleared at all times | 474 | cld # gcc2 wants the direction flag cleared at all times |
472 | pushl $0 # fake return address for unwinder | 475 | pushl $0 # fake return address for unwinder |
473 | #ifdef CONFIG_SMP | ||
474 | movb ready, %cl | ||
475 | movb $1, ready | 476 | movb $1, ready |
476 | cmpb $0,%cl # the first CPU calls start_kernel | ||
477 | je 1f | ||
478 | movl (stack_start), %esp | ||
479 | 1: | ||
480 | #endif /* CONFIG_SMP */ | ||
481 | jmp *(initial_code) | 477 | jmp *(initial_code) |
482 | 478 | ||
483 | /* | 479 | /* |
@@ -670,15 +666,15 @@ ENTRY(initial_page_table) | |||
670 | #endif | 666 | #endif |
671 | 667 | ||
672 | .data | 668 | .data |
669 | .balign 4 | ||
673 | ENTRY(stack_start) | 670 | ENTRY(stack_start) |
674 | .long init_thread_union+THREAD_SIZE | 671 | .long init_thread_union+THREAD_SIZE |
675 | .long __BOOT_DS | ||
676 | |||
677 | ready: .byte 0 | ||
678 | 672 | ||
679 | early_recursion_flag: | 673 | early_recursion_flag: |
680 | .long 0 | 674 | .long 0 |
681 | 675 | ||
676 | ready: .byte 0 | ||
677 | |||
682 | int_msg: | 678 | int_msg: |
683 | .asciz "Unknown interrupt or fault at: %p %p %p\n" | 679 | .asciz "Unknown interrupt or fault at: %p %p %p\n" |
684 | 680 | ||
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index 48ff6dcffa02..9974d21048fd 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c | |||
@@ -129,8 +129,7 @@ void __cpuinit irq_ctx_init(int cpu) | |||
129 | irqctx = page_address(alloc_pages_node(cpu_to_node(cpu), | 129 | irqctx = page_address(alloc_pages_node(cpu_to_node(cpu), |
130 | THREAD_FLAGS, | 130 | THREAD_FLAGS, |
131 | THREAD_ORDER)); | 131 | THREAD_ORDER)); |
132 | irqctx->tinfo.task = NULL; | 132 | memset(&irqctx->tinfo, 0, sizeof(struct thread_info)); |
133 | irqctx->tinfo.exec_domain = NULL; | ||
134 | irqctx->tinfo.cpu = cpu; | 133 | irqctx->tinfo.cpu = cpu; |
135 | irqctx->tinfo.preempt_count = HARDIRQ_OFFSET; | 134 | irqctx->tinfo.preempt_count = HARDIRQ_OFFSET; |
136 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); | 135 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); |
@@ -140,10 +139,8 @@ void __cpuinit irq_ctx_init(int cpu) | |||
140 | irqctx = page_address(alloc_pages_node(cpu_to_node(cpu), | 139 | irqctx = page_address(alloc_pages_node(cpu_to_node(cpu), |
141 | THREAD_FLAGS, | 140 | THREAD_FLAGS, |
142 | THREAD_ORDER)); | 141 | THREAD_ORDER)); |
143 | irqctx->tinfo.task = NULL; | 142 | memset(&irqctx->tinfo, 0, sizeof(struct thread_info)); |
144 | irqctx->tinfo.exec_domain = NULL; | ||
145 | irqctx->tinfo.cpu = cpu; | 143 | irqctx->tinfo.cpu = cpu; |
146 | irqctx->tinfo.preempt_count = 0; | ||
147 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); | 144 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); |
148 | 145 | ||
149 | per_cpu(softirq_ctx, cpu) = irqctx; | 146 | per_cpu(softirq_ctx, cpu) = irqctx; |
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index d8286ed54ffa..e764fc05d700 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/utsname.h> | 14 | #include <linux/utsname.h> |
15 | #include <trace/events/power.h> | 15 | #include <trace/events/power.h> |
16 | #include <linux/hw_breakpoint.h> | 16 | #include <linux/hw_breakpoint.h> |
17 | #include <asm/cpu.h> | ||
17 | #include <asm/system.h> | 18 | #include <asm/system.h> |
18 | #include <asm/apic.h> | 19 | #include <asm/apic.h> |
19 | #include <asm/syscalls.h> | 20 | #include <asm/syscalls.h> |
@@ -505,7 +506,7 @@ static void poll_idle(void) | |||
505 | #define MWAIT_ECX_EXTENDED_INFO 0x01 | 506 | #define MWAIT_ECX_EXTENDED_INFO 0x01 |
506 | #define MWAIT_EDX_C1 0xf0 | 507 | #define MWAIT_EDX_C1 0xf0 |
507 | 508 | ||
508 | static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c) | 509 | int __cpuinit mwait_usable(const struct cpuinfo_x86 *c) |
509 | { | 510 | { |
510 | u32 eax, ebx, ecx, edx; | 511 | u32 eax, ebx, ecx, edx; |
511 | 512 | ||
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 763df77343dd..03273b6c272c 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -638,7 +638,7 @@ wakeup_secondary_cpu_via_init(int phys_apicid, unsigned long start_eip) | |||
638 | * target processor state. | 638 | * target processor state. |
639 | */ | 639 | */ |
640 | startup_ipi_hook(phys_apicid, (unsigned long) start_secondary, | 640 | startup_ipi_hook(phys_apicid, (unsigned long) start_secondary, |
641 | (unsigned long)stack_start.sp); | 641 | stack_start); |
642 | 642 | ||
643 | /* | 643 | /* |
644 | * Run STARTUP IPI loop. | 644 | * Run STARTUP IPI loop. |
@@ -785,7 +785,7 @@ do_rest: | |||
785 | #endif | 785 | #endif |
786 | early_gdt_descr.address = (unsigned long)get_cpu_gdt_table(cpu); | 786 | early_gdt_descr.address = (unsigned long)get_cpu_gdt_table(cpu); |
787 | initial_code = (unsigned long)start_secondary; | 787 | initial_code = (unsigned long)start_secondary; |
788 | stack_start.sp = (void *) c_idle.idle->thread.sp; | 788 | stack_start = c_idle.idle->thread.sp; |
789 | 789 | ||
790 | /* start_ip had better be page-aligned! */ | 790 | /* start_ip had better be page-aligned! */ |
791 | start_ip = setup_trampoline(); | 791 | start_ip = setup_trampoline(); |
@@ -1402,8 +1402,9 @@ static inline void mwait_play_dead(void) | |||
1402 | unsigned int highest_subcstate = 0; | 1402 | unsigned int highest_subcstate = 0; |
1403 | int i; | 1403 | int i; |
1404 | void *mwait_ptr; | 1404 | void *mwait_ptr; |
1405 | struct cpuinfo_x86 *c = __this_cpu_ptr(&cpu_info); | ||
1405 | 1406 | ||
1406 | if (!cpu_has(__this_cpu_ptr(&cpu_info), X86_FEATURE_MWAIT)) | 1407 | if (!(cpu_has(c, X86_FEATURE_MWAIT) && mwait_usable(c))) |
1407 | return; | 1408 | return; |
1408 | if (!cpu_has(__this_cpu_ptr(&cpu_info), X86_FEATURE_CLFLSH)) | 1409 | if (!cpu_has(__this_cpu_ptr(&cpu_info), X86_FEATURE_CLFLSH)) |
1409 | return; | 1410 | return; |
diff --git a/arch/x86/lguest/Kconfig b/arch/x86/lguest/Kconfig index 38718041efc3..6e121a2a49e1 100644 --- a/arch/x86/lguest/Kconfig +++ b/arch/x86/lguest/Kconfig | |||
@@ -2,6 +2,7 @@ config LGUEST_GUEST | |||
2 | bool "Lguest guest support" | 2 | bool "Lguest guest support" |
3 | select PARAVIRT | 3 | select PARAVIRT |
4 | depends on X86_32 | 4 | depends on X86_32 |
5 | select VIRTUALIZATION | ||
5 | select VIRTIO | 6 | select VIRTIO |
6 | select VIRTIO_RING | 7 | select VIRTIO_RING |
7 | select VIRTIO_CONSOLE | 8 | select VIRTIO_CONSOLE |
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index 4996cf5f73a0..eba687f0cc0c 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
@@ -824,7 +824,7 @@ static void __init lguest_init_IRQ(void) | |||
824 | 824 | ||
825 | for (i = FIRST_EXTERNAL_VECTOR; i < NR_VECTORS; i++) { | 825 | for (i = FIRST_EXTERNAL_VECTOR; i < NR_VECTORS; i++) { |
826 | /* Some systems map "vectors" to interrupts weirdly. Not us! */ | 826 | /* Some systems map "vectors" to interrupts weirdly. Not us! */ |
827 | __get_cpu_var(vector_irq)[i] = i - FIRST_EXTERNAL_VECTOR; | 827 | __this_cpu_write(vector_irq[i], i - FIRST_EXTERNAL_VECTOR); |
828 | if (i != SYSCALL_VECTOR) | 828 | if (i != SYSCALL_VECTOR) |
829 | set_intr_gate(i, interrupt[i - FIRST_EXTERNAL_VECTOR]); | 829 | set_intr_gate(i, interrupt[i - FIRST_EXTERNAL_VECTOR]); |
830 | } | 830 | } |
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index 787c52ca49c3..ebf6d7887a38 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c | |||
@@ -2,6 +2,28 @@ | |||
2 | #include <linux/topology.h> | 2 | #include <linux/topology.h> |
3 | #include <linux/module.h> | 3 | #include <linux/module.h> |
4 | #include <linux/bootmem.h> | 4 | #include <linux/bootmem.h> |
5 | #include <asm/numa.h> | ||
6 | #include <asm/acpi.h> | ||
7 | |||
8 | int __initdata numa_off; | ||
9 | |||
10 | static __init int numa_setup(char *opt) | ||
11 | { | ||
12 | if (!opt) | ||
13 | return -EINVAL; | ||
14 | if (!strncmp(opt, "off", 3)) | ||
15 | numa_off = 1; | ||
16 | #ifdef CONFIG_NUMA_EMU | ||
17 | if (!strncmp(opt, "fake=", 5)) | ||
18 | numa_emu_cmdline(opt + 5); | ||
19 | #endif | ||
20 | #ifdef CONFIG_ACPI_NUMA | ||
21 | if (!strncmp(opt, "noacpi", 6)) | ||
22 | acpi_numa = -1; | ||
23 | #endif | ||
24 | return 0; | ||
25 | } | ||
26 | early_param("numa", numa_setup); | ||
5 | 27 | ||
6 | /* | 28 | /* |
7 | * Which logical CPUs are on which nodes | 29 | * Which logical CPUs are on which nodes |
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c index 1e72102e80c9..95ea1551eebc 100644 --- a/arch/x86/mm/numa_64.c +++ b/arch/x86/mm/numa_64.c | |||
@@ -30,7 +30,6 @@ s16 apicid_to_node[MAX_LOCAL_APIC] __cpuinitdata = { | |||
30 | [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE | 30 | [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE |
31 | }; | 31 | }; |
32 | 32 | ||
33 | int numa_off __initdata; | ||
34 | static unsigned long __initdata nodemap_addr; | 33 | static unsigned long __initdata nodemap_addr; |
35 | static unsigned long __initdata nodemap_size; | 34 | static unsigned long __initdata nodemap_size; |
36 | 35 | ||
@@ -263,6 +262,11 @@ static struct bootnode nodes[MAX_NUMNODES] __initdata; | |||
263 | static struct bootnode physnodes[MAX_NUMNODES] __cpuinitdata; | 262 | static struct bootnode physnodes[MAX_NUMNODES] __cpuinitdata; |
264 | static char *cmdline __initdata; | 263 | static char *cmdline __initdata; |
265 | 264 | ||
265 | void __init numa_emu_cmdline(char *str) | ||
266 | { | ||
267 | cmdline = str; | ||
268 | } | ||
269 | |||
266 | static int __init setup_physnodes(unsigned long start, unsigned long end, | 270 | static int __init setup_physnodes(unsigned long start, unsigned long end, |
267 | int acpi, int amd) | 271 | int acpi, int amd) |
268 | { | 272 | { |
@@ -670,24 +674,6 @@ unsigned long __init numa_free_all_bootmem(void) | |||
670 | return pages; | 674 | return pages; |
671 | } | 675 | } |
672 | 676 | ||
673 | static __init int numa_setup(char *opt) | ||
674 | { | ||
675 | if (!opt) | ||
676 | return -EINVAL; | ||
677 | if (!strncmp(opt, "off", 3)) | ||
678 | numa_off = 1; | ||
679 | #ifdef CONFIG_NUMA_EMU | ||
680 | if (!strncmp(opt, "fake=", 5)) | ||
681 | cmdline = opt + 5; | ||
682 | #endif | ||
683 | #ifdef CONFIG_ACPI_NUMA | ||
684 | if (!strncmp(opt, "noacpi", 6)) | ||
685 | acpi_numa = -1; | ||
686 | #endif | ||
687 | return 0; | ||
688 | } | ||
689 | early_param("numa", numa_setup); | ||
690 | |||
691 | #ifdef CONFIG_NUMA | 677 | #ifdef CONFIG_NUMA |
692 | 678 | ||
693 | static __init int find_near_online_node(int node) | 679 | static __init int find_near_online_node(int node) |
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 8b830ca14ac4..d343b3c81f3c 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
@@ -256,7 +256,6 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, | |||
256 | unsigned long pfn) | 256 | unsigned long pfn) |
257 | { | 257 | { |
258 | pgprot_t forbidden = __pgprot(0); | 258 | pgprot_t forbidden = __pgprot(0); |
259 | pgprot_t required = __pgprot(0); | ||
260 | 259 | ||
261 | /* | 260 | /* |
262 | * The BIOS area between 640k and 1Mb needs to be executable for | 261 | * The BIOS area between 640k and 1Mb needs to be executable for |
@@ -282,12 +281,6 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, | |||
282 | if (within(pfn, __pa((unsigned long)__start_rodata) >> PAGE_SHIFT, | 281 | if (within(pfn, __pa((unsigned long)__start_rodata) >> PAGE_SHIFT, |
283 | __pa((unsigned long)__end_rodata) >> PAGE_SHIFT)) | 282 | __pa((unsigned long)__end_rodata) >> PAGE_SHIFT)) |
284 | pgprot_val(forbidden) |= _PAGE_RW; | 283 | pgprot_val(forbidden) |= _PAGE_RW; |
285 | /* | ||
286 | * .data and .bss should always be writable. | ||
287 | */ | ||
288 | if (within(address, (unsigned long)_sdata, (unsigned long)_edata) || | ||
289 | within(address, (unsigned long)__bss_start, (unsigned long)__bss_stop)) | ||
290 | pgprot_val(required) |= _PAGE_RW; | ||
291 | 284 | ||
292 | #if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) | 285 | #if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) |
293 | /* | 286 | /* |
@@ -327,7 +320,6 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, | |||
327 | #endif | 320 | #endif |
328 | 321 | ||
329 | prot = __pgprot(pgprot_val(prot) & ~pgprot_val(forbidden)); | 322 | prot = __pgprot(pgprot_val(prot) & ~pgprot_val(forbidden)); |
330 | prot = __pgprot(pgprot_val(prot) | pgprot_val(required)); | ||
331 | 323 | ||
332 | return prot; | 324 | return prot; |
333 | } | 325 | } |
diff --git a/arch/x86/mm/srat_32.c b/arch/x86/mm/srat_32.c index f16434568a51..ae96e7b8051d 100644 --- a/arch/x86/mm/srat_32.c +++ b/arch/x86/mm/srat_32.c | |||
@@ -59,7 +59,6 @@ static struct node_memory_chunk_s __initdata node_memory_chunk[MAXCHUNKS]; | |||
59 | static int __initdata num_memory_chunks; /* total number of memory chunks */ | 59 | static int __initdata num_memory_chunks; /* total number of memory chunks */ |
60 | static u8 __initdata apicid_to_pxm[MAX_APICID]; | 60 | static u8 __initdata apicid_to_pxm[MAX_APICID]; |
61 | 61 | ||
62 | int numa_off __initdata; | ||
63 | int acpi_numa __initdata; | 62 | int acpi_numa __initdata; |
64 | 63 | ||
65 | static __init void bad_srat(void) | 64 | static __init void bad_srat(void) |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 7e8d3bc80af6..50542efe45fb 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -1194,7 +1194,7 @@ asmlinkage void __init xen_start_kernel(void) | |||
1194 | per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0]; | 1194 | per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0]; |
1195 | 1195 | ||
1196 | local_irq_disable(); | 1196 | local_irq_disable(); |
1197 | early_boot_irqs_off(); | 1197 | early_boot_irqs_disabled = true; |
1198 | 1198 | ||
1199 | memblock_init(); | 1199 | memblock_init(); |
1200 | 1200 | ||
diff --git a/arch/x86/xen/irq.c b/arch/x86/xen/irq.c index 9d30105a0c4a..6a6fe8939645 100644 --- a/arch/x86/xen/irq.c +++ b/arch/x86/xen/irq.c | |||
@@ -126,7 +126,7 @@ static const struct pv_irq_ops xen_irq_ops __initdata = { | |||
126 | #endif | 126 | #endif |
127 | }; | 127 | }; |
128 | 128 | ||
129 | void __init xen_init_irq_ops() | 129 | void __init xen_init_irq_ops(void) |
130 | { | 130 | { |
131 | pv_irq_ops = xen_irq_ops; | 131 | pv_irq_ops = xen_irq_ops; |
132 | x86_init.irqs.intr_init = xen_init_IRQ; | 132 | x86_init.irqs.intr_init = xen_init_IRQ; |
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c index 8f2251d2a3f8..fd12d7ce7ff9 100644 --- a/arch/x86/xen/p2m.c +++ b/arch/x86/xen/p2m.c | |||
@@ -237,6 +237,18 @@ void __init xen_build_dynamic_phys_to_machine(void) | |||
237 | p2m_top[topidx] = mid; | 237 | p2m_top[topidx] = mid; |
238 | } | 238 | } |
239 | 239 | ||
240 | /* | ||
241 | * As long as the mfn_list has enough entries to completely | ||
242 | * fill a p2m page, pointing into the array is ok. But if | ||
243 | * not the entries beyond the last pfn will be undefined. | ||
244 | */ | ||
245 | if (unlikely(pfn + P2M_PER_PAGE > max_pfn)) { | ||
246 | unsigned long p2midx; | ||
247 | |||
248 | p2midx = max_pfn % P2M_PER_PAGE; | ||
249 | for ( ; p2midx < P2M_PER_PAGE; p2midx++) | ||
250 | mfn_list[pfn + p2midx] = INVALID_P2M_ENTRY; | ||
251 | } | ||
240 | p2m_top[topidx][mididx] = &mfn_list[pfn]; | 252 | p2m_top[topidx][mididx] = &mfn_list[pfn]; |
241 | } | 253 | } |
242 | 254 | ||
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index b5a7f928234b..a8a66a50d446 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c | |||
@@ -179,8 +179,13 @@ char * __init xen_memory_setup(void) | |||
179 | e820.nr_map = 0; | 179 | e820.nr_map = 0; |
180 | xen_extra_mem_start = mem_end; | 180 | xen_extra_mem_start = mem_end; |
181 | for (i = 0; i < memmap.nr_entries; i++) { | 181 | for (i = 0; i < memmap.nr_entries; i++) { |
182 | unsigned long long end = map[i].addr + map[i].size; | 182 | unsigned long long end; |
183 | 183 | ||
184 | /* Guard against non-page aligned E820 entries. */ | ||
185 | if (map[i].type == E820_RAM) | ||
186 | map[i].size -= (map[i].size + map[i].addr) % PAGE_SIZE; | ||
187 | |||
188 | end = map[i].addr + map[i].size; | ||
184 | if (map[i].type == E820_RAM && end > mem_end) { | 189 | if (map[i].type == E820_RAM && end > mem_end) { |
185 | /* RAM off the end - may be partially included */ | 190 | /* RAM off the end - may be partially included */ |
186 | u64 delta = min(map[i].size, end - mem_end); | 191 | u64 delta = min(map[i].size, end - mem_end); |
@@ -350,6 +355,7 @@ void __init xen_arch_setup(void) | |||
350 | boot_cpu_data.hlt_works_ok = 1; | 355 | boot_cpu_data.hlt_works_ok = 1; |
351 | #endif | 356 | #endif |
352 | pm_idle = default_idle; | 357 | pm_idle = default_idle; |
358 | boot_option_idle_override = IDLE_HALT; | ||
353 | 359 | ||
354 | fiddle_vdso(); | 360 | fiddle_vdso(); |
355 | } | 361 | } |
diff --git a/arch/xtensa/configs/common_defconfig b/arch/xtensa/configs/common_defconfig index 1d230ee081b4..b90038e40dd3 100644 --- a/arch/xtensa/configs/common_defconfig +++ b/arch/xtensa/configs/common_defconfig | |||
@@ -32,7 +32,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
32 | # CONFIG_HOTPLUG is not set | 32 | # CONFIG_HOTPLUG is not set |
33 | CONFIG_KOBJECT_UEVENT=y | 33 | CONFIG_KOBJECT_UEVENT=y |
34 | # CONFIG_IKCONFIG is not set | 34 | # CONFIG_IKCONFIG is not set |
35 | # CONFIG_EMBEDDED is not set | 35 | # CONFIG_EXPERT is not set |
36 | CONFIG_KALLSYMS=y | 36 | CONFIG_KALLSYMS=y |
37 | # CONFIG_KALLSYMS_ALL is not set | 37 | # CONFIG_KALLSYMS_ALL is not set |
38 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 38 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
diff --git a/arch/xtensa/configs/iss_defconfig b/arch/xtensa/configs/iss_defconfig index 7368164843b9..0234cd198c54 100644 --- a/arch/xtensa/configs/iss_defconfig +++ b/arch/xtensa/configs/iss_defconfig | |||
@@ -55,7 +55,7 @@ CONFIG_LOG_BUF_SHIFT=14 | |||
55 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 55 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
56 | CONFIG_SYSCTL=y | 56 | CONFIG_SYSCTL=y |
57 | CONFIG_ANON_INODES=y | 57 | CONFIG_ANON_INODES=y |
58 | CONFIG_EMBEDDED=y | 58 | CONFIG_EXPERT=y |
59 | CONFIG_SYSCTL_SYSCALL=y | 59 | CONFIG_SYSCTL_SYSCALL=y |
60 | CONFIG_KALLSYMS=y | 60 | CONFIG_KALLSYMS=y |
61 | # CONFIG_KALLSYMS_ALL is not set | 61 | # CONFIG_KALLSYMS_ALL is not set |
diff --git a/arch/xtensa/configs/s6105_defconfig b/arch/xtensa/configs/s6105_defconfig index bb84fbc9921f..095cd8084164 100644 --- a/arch/xtensa/configs/s6105_defconfig +++ b/arch/xtensa/configs/s6105_defconfig | |||
@@ -55,7 +55,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
55 | CONFIG_INITRAMFS_SOURCE="" | 55 | CONFIG_INITRAMFS_SOURCE="" |
56 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 56 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
57 | CONFIG_SYSCTL=y | 57 | CONFIG_SYSCTL=y |
58 | CONFIG_EMBEDDED=y | 58 | CONFIG_EXPERT=y |
59 | CONFIG_SYSCTL_SYSCALL=y | 59 | CONFIG_SYSCTL_SYSCALL=y |
60 | CONFIG_KALLSYMS=y | 60 | CONFIG_KALLSYMS=y |
61 | # CONFIG_KALLSYMS_ALL is not set | 61 | # CONFIG_KALLSYMS_ALL is not set |