aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-13 12:49:04 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-13 12:49:04 -0400
commitdcf397f037f52add9945eced57ca300ab6a4413c (patch)
treee78767d164589e9097a54bf564b072fb01f80820
parent6faf035cf9fdd8283c2b2b2c34b76b5445ec6fc4 (diff)
parent68ee0f9c98a42e36f9eab29155b2bb0e7e409ac6 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (124 commits) sh: allow building for both r2d boards in same binary. sh: fix r2d board detection sh: Discard .exit.text/.exit.data at runtime. sh: Fix up some section alignments in linker script. sh: Fix SH-4 DMAC CHCR masking. sh: Rip out left-over nommu cond syscall cruft. sh: Make kgdb i-cache flushing less inept. sh: kgdb section mismatches and tidying. sh: cleanup struct irqaction initializers. sh: early_printk tidying. video: pvr2fb: Add TV (RGB) support to Dreamcast PVR driver. sh: Conditionalize gUSA support. sh: Follow gUSA preempt changes in __switch_to(). sh: Tidy up gUSA preempt handling. sh: __copy_user() optimizations for small copies. sh: clkfwk: Support multi-level clock propagation. sh: Fix URAM start address on SH7785. sh: Use boot_cpu_data for CPU probe. sh: Support extended mode TLB on SH-X3. sh: Bump MAX_ACTIVE_REGIONS for SH7785. ...
-rw-r--r--arch/sh/Kconfig53
-rw-r--r--arch/sh/Kconfig.debug6
-rw-r--r--arch/sh/Makefile4
-rw-r--r--arch/sh/boards/hp6xx/hp6xx_apm.c9
-rw-r--r--arch/sh/boards/hp6xx/setup.c35
-rw-r--r--arch/sh/boards/magicpanelr2/Kconfig13
-rw-r--r--arch/sh/boards/magicpanelr2/Makefile5
-rw-r--r--arch/sh/boards/magicpanelr2/setup.c394
-rw-r--r--arch/sh/boards/mpc1211/setup.c2
-rw-r--r--arch/sh/boards/renesas/r7780rp/Makefile5
-rw-r--r--arch/sh/boards/renesas/r7780rp/irq-r7780mp.c61
-rw-r--r--arch/sh/boards/renesas/r7780rp/irq-r7780rp.c6
-rw-r--r--arch/sh/boards/renesas/r7780rp/irq-r7785rp.c46
-rw-r--r--arch/sh/boards/renesas/r7780rp/setup.c70
-rw-r--r--arch/sh/boards/renesas/rts7751r2d/Kconfig19
-rw-r--r--arch/sh/boards/renesas/rts7751r2d/irq.c179
-rw-r--r--arch/sh/boards/renesas/rts7751r2d/setup.c95
-rw-r--r--arch/sh/boards/renesas/x3proto/Makefile1
-rw-r--r--arch/sh/boards/renesas/x3proto/ilsel.c151
-rw-r--r--arch/sh/boards/renesas/x3proto/setup.c136
-rw-r--r--arch/sh/boards/se/7206/io.c31
-rw-r--r--arch/sh/boards/se/7206/setup.c19
-rw-r--r--arch/sh/boards/se/7343/irq.c7
-rw-r--r--arch/sh/boards/se/7343/setup.c2
-rw-r--r--arch/sh/boards/se/770x/setup.c10
-rw-r--r--arch/sh/boards/se/7722/setup.c9
-rw-r--r--arch/sh/boards/se/7751/setup.c11
-rw-r--r--arch/sh/boards/se/7780/irq.c28
-rw-r--r--arch/sh/boards/se/7780/setup.c7
-rw-r--r--arch/sh/boards/sh03/setup.c28
-rw-r--r--arch/sh/boards/shmin/setup.c26
-rw-r--r--arch/sh/boards/snapgear/setup.c30
-rw-r--r--arch/sh/boards/titan/setup.c30
-rw-r--r--arch/sh/cchips/Kconfig13
-rw-r--r--arch/sh/cchips/hd6446x/hd64461.c13
-rw-r--r--arch/sh/cchips/hd6446x/hd64465/setup.c7
-rw-r--r--arch/sh/cchips/voyagergx/irq.c188
-rw-r--r--arch/sh/configs/dreamcast_defconfig155
-rw-r--r--arch/sh/configs/hp6xx_defconfig559
-rw-r--r--arch/sh/configs/magicpanelr2_defconfig925
-rw-r--r--arch/sh/configs/rts7751r2d1_defconfig (renamed from arch/sh/configs/rts7751r2d_defconfig)472
-rw-r--r--arch/sh/configs/rts7751r2dplus_defconfig1167
-rw-r--r--arch/sh/configs/se7206_defconfig223
-rw-r--r--arch/sh/configs/shx3_defconfig456
-rw-r--r--arch/sh/drivers/dma/Kconfig1
-rw-r--r--arch/sh/drivers/dma/dma-sh.c13
-rw-r--r--arch/sh/drivers/heartbeat.c70
-rw-r--r--arch/sh/drivers/pci/ops-rts7751r2d.c8
-rw-r--r--arch/sh/drivers/pci/pci-sh7780.c13
-rw-r--r--arch/sh/kernel/cpu/clock.c2
-rw-r--r--arch/sh/kernel/cpu/init.c27
-rw-r--r--arch/sh/kernel/cpu/irq/Makefile4
-rw-r--r--arch/sh/kernel/cpu/irq/intc.c562
-rw-r--r--arch/sh/kernel/cpu/irq/intc2.c86
-rw-r--r--arch/sh/kernel/cpu/sh2/probe.c19
-rw-r--r--arch/sh/kernel/cpu/sh2/setup-sh7619.c93
-rw-r--r--arch/sh/kernel/cpu/sh2a/probe.c18
-rw-r--r--arch/sh/kernel/cpu/sh2a/setup-sh7206.c217
-rw-r--r--arch/sh/kernel/cpu/sh3/Makefile10
-rw-r--r--arch/sh/kernel/cpu/sh3/probe.c48
-rw-r--r--arch/sh/kernel/cpu/sh3/setup-sh7705.c172
-rw-r--r--arch/sh/kernel/cpu/sh3/setup-sh7708.c43
-rw-r--r--arch/sh/kernel/cpu/sh3/setup-sh7709.c145
-rw-r--r--arch/sh/kernel/cpu/sh3/setup-sh770x.c224
-rw-r--r--arch/sh/kernel/cpu/sh3/setup-sh7710.c200
-rw-r--r--arch/sh/kernel/cpu/sh3/setup-sh7720.c210
-rw-r--r--arch/sh/kernel/cpu/sh4/probe.c178
-rw-r--r--arch/sh/kernel/cpu/sh4/setup-sh7750.c54
-rw-r--r--arch/sh/kernel/cpu/sh4/setup-sh7760.c253
-rw-r--r--arch/sh/kernel/cpu/sh4/sq.c4
-rw-r--r--arch/sh/kernel/cpu/sh4a/Makefile6
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7343.c4
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7722.c38
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7770.c4
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7780.c91
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7785.c304
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-shx3.c234
-rw-r--r--arch/sh/kernel/cpu/sh4a/smp-shx3.c120
-rw-r--r--arch/sh/kernel/cpufreq.c3
-rw-r--r--arch/sh/kernel/early_printk.c49
-rw-r--r--arch/sh/kernel/entry-common.S2
-rw-r--r--arch/sh/kernel/head.S18
-rw-r--r--arch/sh/kernel/kgdb_stub.c53
-rw-r--r--arch/sh/kernel/process.c8
-rw-r--r--arch/sh/kernel/setup.c15
-rw-r--r--arch/sh/kernel/sh_ksyms.c18
-rw-r--r--arch/sh/kernel/signal.c10
-rw-r--r--arch/sh/kernel/smp.c307
-rw-r--r--arch/sh/kernel/syscalls.S18
-rw-r--r--arch/sh/kernel/timers/timer-tmu.c3
-rw-r--r--arch/sh/kernel/traps.c5
-rw-r--r--arch/sh/kernel/vmlinux.lds.S10
-rw-r--r--arch/sh/mm/Kconfig67
-rw-r--r--arch/sh/mm/Makefile23
-rw-r--r--arch/sh/mm/cache-sh4.c81
-rw-r--r--arch/sh/mm/copy_page.S169
-rw-r--r--arch/sh/mm/fault-nommu.c64
-rw-r--r--arch/sh/mm/pmb.c2
-rw-r--r--arch/sh/mm/tlb-sh4.c55
-rw-r--r--drivers/rtc/rtc-sh.c51
-rw-r--r--drivers/serial/sh-sci.c39
-rw-r--r--drivers/serial/sh-sci.h34
-rw-r--r--drivers/sh/Makefile4
-rw-r--r--drivers/sh/maple/Makefile3
-rw-r--r--drivers/sh/maple/maple.c735
-rw-r--r--drivers/video/backlight/hp680_bl.c4
-rw-r--r--drivers/video/pvr2fb.c4
-rw-r--r--include/asm-sh/cacheflush.h33
-rw-r--r--include/asm-sh/cpu-sh3/cache.h4
-rw-r--r--include/asm-sh/cpu-sh3/dma.h13
-rw-r--r--include/asm-sh/cpu-sh3/gpio.h66
-rw-r--r--include/asm-sh/cpu-sh3/mmu_context.h9
-rw-r--r--include/asm-sh/cpu-sh3/timer.h9
-rw-r--r--include/asm-sh/cpu-sh3/ubc.h3
-rw-r--r--include/asm-sh/cpu-sh4/dma.h2
-rw-r--r--include/asm-sh/cpu-sh4/mmu_context.h14
-rw-r--r--include/asm-sh/dma.h5
-rw-r--r--include/asm-sh/dreamcast/maple.h37
-rw-r--r--include/asm-sh/gpio.h19
-rw-r--r--include/asm-sh/hd64461.h1
-rw-r--r--include/asm-sh/heartbeat.h17
-rw-r--r--include/asm-sh/hw_irq.h53
-rw-r--r--include/asm-sh/ilsel.h45
-rw-r--r--include/asm-sh/io.h26
-rw-r--r--include/asm-sh/kgdb.h24
-rw-r--r--include/asm-sh/magicpanelr2.h67
-rw-r--r--include/asm-sh/page.h10
-rw-r--r--include/asm-sh/pgtable.h115
-rw-r--r--include/asm-sh/processor.h11
-rw-r--r--include/asm-sh/r7780rp.h33
-rw-r--r--include/asm-sh/rtc.h6
-rw-r--r--include/asm-sh/rts7751r2d.h65
-rw-r--r--include/asm-sh/sections.h1
-rw-r--r--include/asm-sh/sh03/io.h9
-rw-r--r--include/asm-sh/smp.h34
-rw-r--r--include/asm-sh/snapgear.h12
-rw-r--r--include/asm-sh/spinlock.h181
-rw-r--r--include/asm-sh/spinlock_types.h11
-rw-r--r--include/asm-sh/system.h1
-rw-r--r--include/asm-sh/voyagergx.h39
-rw-r--r--include/asm-sh64/gpio.h8
-rw-r--r--include/linux/maple.h80
142 files changed, 8759 insertions, 3339 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 54878f07cf0c..44982c1dfa23 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -118,7 +118,7 @@ endchoice
118 118
119config SH_FPU 119config SH_FPU
120 bool "FPU support" 120 bool "FPU support"
121 depends on CPU_SH4 121 depends on CPU_HAS_FPU
122 default y 122 default y
123 help 123 help
124 Selecting this option will enable support for SH processors that 124 Selecting this option will enable support for SH processors that
@@ -178,12 +178,6 @@ config CPU_HAS_INTEVT
178config CPU_HAS_MASKREG_IRQ 178config CPU_HAS_MASKREG_IRQ
179 bool 179 bool
180 180
181config CPU_HAS_INTC_IRQ
182 bool
183
184config CPU_HAS_INTC2_IRQ
185 bool
186
187config CPU_HAS_IPR_IRQ 181config CPU_HAS_IPR_IRQ
188 bool 182 bool
189 183
@@ -205,6 +199,9 @@ config CPU_HAS_PTEA
205config CPU_HAS_DSP 199config CPU_HAS_DSP
206 bool 200 bool
207 201
202config CPU_HAS_FPU
203 bool
204
208endmenu 205endmenu
209 206
210menu "Board support" 207menu "Board support"
@@ -258,7 +255,6 @@ config SH_7780_SOLUTION_ENGINE
258 bool "SolutionEngine7780" 255 bool "SolutionEngine7780"
259 select SOLUTION_ENGINE 256 select SOLUTION_ENGINE
260 select SYS_SUPPORTS_PCI 257 select SYS_SUPPORTS_PCI
261 select CPU_HAS_INTC2_IRQ
262 depends on CPU_SUBTYPE_SH7780 258 depends on CPU_SUBTYPE_SH7780
263 help 259 help
264 Select 7780 SolutionEngine if configuring for a Renesas SH7780 260 Select 7780 SolutionEngine if configuring for a Renesas SH7780
@@ -309,7 +305,7 @@ config SH_MPC1211
309 305
310config SH_SH03 306config SH_SH03
311 bool "Interface CTP/PCI-SH03" 307 bool "Interface CTP/PCI-SH03"
312 depends on CPU_SUBTYPE_SH7751 && BROKEN 308 depends on CPU_SUBTYPE_SH7751
313 select CPU_HAS_IPR_IRQ 309 select CPU_HAS_IPR_IRQ
314 select SYS_SUPPORTS_PCI 310 select SYS_SUPPORTS_PCI
315 help 311 help
@@ -395,11 +391,22 @@ config SH_LBOX_RE2
395 help 391 help
396 Select L-BOX RE2 if configuring for the NTT COMWARE L-BOX RE2. 392 Select L-BOX RE2 if configuring for the NTT COMWARE L-BOX RE2.
397 393
394config SH_X3PROTO
395 bool "SH-X3 Prototype board"
396 depends on CPU_SUBTYPE_SHX3
397
398config SH_MAGIC_PANEL_R2
399 bool "Magic Panel R2"
400 depends on CPU_SUBTYPE_SH7720
401 help
402 Select Magic Panel R2 if configuring for Magic Panel R2.
403
398endmenu 404endmenu
399 405
400source "arch/sh/boards/renesas/hs7751rvoip/Kconfig" 406source "arch/sh/boards/renesas/hs7751rvoip/Kconfig"
401source "arch/sh/boards/renesas/rts7751r2d/Kconfig" 407source "arch/sh/boards/renesas/rts7751r2d/Kconfig"
402source "arch/sh/boards/renesas/r7780rp/Kconfig" 408source "arch/sh/boards/renesas/r7780rp/Kconfig"
409source "arch/sh/boards/magicpanelr2/Kconfig"
403 410
404menu "Timer and clock configuration" 411menu "Timer and clock configuration"
405 412
@@ -563,10 +570,19 @@ config NR_CPUS
563 570
564source "kernel/Kconfig.preempt" 571source "kernel/Kconfig.preempt"
565 572
566config NODES_SHIFT 573config GUSA
567 int 574 def_bool y
568 default "1" 575 depends on !SMP
569 depends on NEED_MULTIPLE_NODES 576 help
577 This enables support for gUSA (general UserSpace Atomicity).
578 This is the default implementation for both UP and non-ll/sc
579 CPUs, and is used by the libc, amongst others.
580
581 For additional information, design information can be found
582 in <http://lc.linux.or.jp/lc2002/papers/niibe0919p.pdf>.
583
584 This should only be disabled for special cases where alternate
585 atomicity implementations exist.
570 586
571endmenu 587endmenu
572 588
@@ -659,6 +675,17 @@ config SUPERHYWAY
659 tristate "SuperHyway Bus support" 675 tristate "SuperHyway Bus support"
660 depends on CPU_SUBTYPE_SH4_202 676 depends on CPU_SUBTYPE_SH4_202
661 677
678config MAPLE
679 bool "Maple Bus support"
680 depends on SH_DREAMCAST
681 help
682 The Maple Bus is SEGA's serial communication bus for peripherals
683 on the Dreamcast. Without this bus support you won't be able to
684 get your Dreamcast keyboard etc to work, so most users
685 probably want to say 'Y' here, unless you are only using the
686 Dreamcast with a serial line terminal or a remote network
687 connection.
688
662config CF_ENABLER 689config CF_ENABLER
663 bool "Compact Flash Enabler support" 690 bool "Compact Flash Enabler support"
664 depends on SOLUTION_ENGINE || SH_SH03 691 depends on SOLUTION_ENGINE || SH_SH03
diff --git a/arch/sh/Kconfig.debug b/arch/sh/Kconfig.debug
index 52f6a99c8ecc..b507b501f0cf 100644
--- a/arch/sh/Kconfig.debug
+++ b/arch/sh/Kconfig.debug
@@ -28,13 +28,17 @@ config EARLY_SCIF_CONSOLE
28 serial I/O. 28 serial I/O.
29 29
30config EARLY_SCIF_CONSOLE_PORT 30config EARLY_SCIF_CONSOLE_PORT
31 hex "SCIF port for early console" 31 hex
32 depends on EARLY_SCIF_CONSOLE 32 depends on EARLY_SCIF_CONSOLE
33 default "0xffe00000" if CPU_SUBTYPE_SH7780 33 default "0xffe00000" if CPU_SUBTYPE_SH7780
34 default "0xffea0000" if CPU_SUBTYPE_SH7785
34 default "0xfffe9800" if CPU_SUBTYPE_SH7206 35 default "0xfffe9800" if CPU_SUBTYPE_SH7206
35 default "0xf8420000" if CPU_SUBTYPE_SH7619 36 default "0xf8420000" if CPU_SUBTYPE_SH7619
36 default "0xa4400000" if CPU_SUBTYPE_SH7712 || CPU_SUBTYPE_SH7705 37 default "0xa4400000" if CPU_SUBTYPE_SH7712 || CPU_SUBTYPE_SH7705
38 default "0xa4430000" if CPU_SUBTYPE_SH7720
39 default "0xffc30000" if CPU_SUBTYPE_SHX3
37 default "0xffe80000" if CPU_SH4 40 default "0xffe80000" if CPU_SH4
41 default "0x00000000"
38 42
39config EARLY_PRINTK 43config EARLY_PRINTK
40 bool "Early printk support" 44 bool "Early printk support"
diff --git a/arch/sh/Makefile b/arch/sh/Makefile
index 97ac58682d0f..a0a2083aad3e 100644
--- a/arch/sh/Makefile
+++ b/arch/sh/Makefile
@@ -118,6 +118,7 @@ machdir-$(CONFIG_SH_7751_SYSTEMH) += renesas/systemh
118machdir-$(CONFIG_SH_EDOSK7705) += renesas/edosk7705 118machdir-$(CONFIG_SH_EDOSK7705) += renesas/edosk7705
119machdir-$(CONFIG_SH_HIGHLANDER) += renesas/r7780rp 119machdir-$(CONFIG_SH_HIGHLANDER) += renesas/r7780rp
120machdir-$(CONFIG_SH_7710VOIPGW) += renesas/sh7710voipgw 120machdir-$(CONFIG_SH_7710VOIPGW) += renesas/sh7710voipgw
121machdir-$(CONFIG_SH_X3PROTO) += renesas/x3proto
121machdir-$(CONFIG_SH_SH4202_MICRODEV) += superh/microdev 122machdir-$(CONFIG_SH_SH4202_MICRODEV) += superh/microdev
122machdir-$(CONFIG_SH_LANDISK) += landisk 123machdir-$(CONFIG_SH_LANDISK) += landisk
123machdir-$(CONFIG_SH_TITAN) += titan 124machdir-$(CONFIG_SH_TITAN) += titan
@@ -125,6 +126,7 @@ machdir-$(CONFIG_SH_SHMIN) += shmin
125machdir-$(CONFIG_SH_7206_SOLUTION_ENGINE) += se/7206 126machdir-$(CONFIG_SH_7206_SOLUTION_ENGINE) += se/7206
126machdir-$(CONFIG_SH_7619_SOLUTION_ENGINE) += se/7619 127machdir-$(CONFIG_SH_7619_SOLUTION_ENGINE) += se/7619
127machdir-$(CONFIG_SH_LBOX_RE2) += lboxre2 128machdir-$(CONFIG_SH_LBOX_RE2) += lboxre2
129machdir-$(CONFIG_SH_MAGIC_PANEL_R2) += magicpanelr2
128 130
129incdir-y := $(notdir $(machdir-y)) 131incdir-y := $(notdir $(machdir-y))
130 132
@@ -135,7 +137,7 @@ endif
135 137
136# Companion chips 138# Companion chips
137core-$(CONFIG_HD6446X_SERIES) += arch/sh/cchips/hd6446x/ 139core-$(CONFIG_HD6446X_SERIES) += arch/sh/cchips/hd6446x/
138core-$(CONFIG_VOYAGERGX) += arch/sh/cchips/voyagergx/ 140core-$(CONFIG_MFD_SM501) += arch/sh/cchips/voyagergx/
139 141
140cpuincdir-$(CONFIG_CPU_SH2) := cpu-sh2 142cpuincdir-$(CONFIG_CPU_SH2) := cpu-sh2
141cpuincdir-$(CONFIG_CPU_SH2A) := cpu-sh2a 143cpuincdir-$(CONFIG_CPU_SH2A) := cpu-sh2a
diff --git a/arch/sh/boards/hp6xx/hp6xx_apm.c b/arch/sh/boards/hp6xx/hp6xx_apm.c
index d1c1460c8a06..640ca2a74f16 100644
--- a/arch/sh/boards/hp6xx/hp6xx_apm.c
+++ b/arch/sh/boards/hp6xx/hp6xx_apm.c
@@ -20,9 +20,9 @@
20#define APM_CRITICAL 10 20#define APM_CRITICAL 10
21#define APM_LOW 30 21#define APM_LOW 30
22 22
23#define HP680_BATTERY_MAX 875 23#define HP680_BATTERY_MAX 898
24#define HP680_BATTERY_MIN 600 24#define HP680_BATTERY_MIN 486
25#define HP680_BATTERY_AC_ON 900 25#define HP680_BATTERY_AC_ON 1023
26 26
27#define MODNAME "hp6x0_apm" 27#define MODNAME "hp6x0_apm"
28 28
@@ -65,7 +65,7 @@ static void hp6x0_apm_get_power_status(struct apm_power_info *info)
65 65
66static irqreturn_t hp6x0_apm_interrupt(int irq, void *dev) 66static irqreturn_t hp6x0_apm_interrupt(int irq, void *dev)
67{ 67{
68 if (!apm_suspended) 68 if (!APM_DISABLED)
69 apm_queue_event(APM_USER_SUSPEND); 69 apm_queue_event(APM_USER_SUSPEND);
70 70
71 return IRQ_HANDLED; 71 return IRQ_HANDLED;
@@ -91,7 +91,6 @@ static int __init hp6x0_apm_init(void)
91static void __exit hp6x0_apm_exit(void) 91static void __exit hp6x0_apm_exit(void)
92{ 92{
93 free_irq(HP680_BTN_IRQ, 0); 93 free_irq(HP680_BTN_IRQ, 0);
94 apm_get_info = NULL;
95} 94}
96 95
97module_init(hp6x0_apm_init); 96module_init(hp6x0_apm_init);
diff --git a/arch/sh/boards/hp6xx/setup.c b/arch/sh/boards/hp6xx/setup.c
index 7ae708930bac..2f414ac3c690 100644
--- a/arch/sh/boards/hp6xx/setup.c
+++ b/arch/sh/boards/hp6xx/setup.c
@@ -7,7 +7,7 @@
7 * May be copied or modified under the terms of the GNU General Public 7 * May be copied or modified under the terms of the GNU General Public
8 * License. See linux/COPYING for more information. 8 * License. See linux/COPYING for more information.
9 * 9 *
10 * Setup code for an HP680 (internal peripherials only) 10 * Setup code for HP620/HP660/HP680/HP690 (internal peripherials only)
11 */ 11 */
12#include <linux/types.h> 12#include <linux/types.h>
13#include <linux/init.h> 13#include <linux/init.h>
@@ -19,7 +19,7 @@
19#include <asm/cpu/dac.h> 19#include <asm/cpu/dac.h>
20 20
21#define SCPCR 0xa4000116 21#define SCPCR 0xa4000116
22#define SCPDR 0xa4000136 22#define SCPDR 0xa4000136
23 23
24/* CF Slot */ 24/* CF Slot */
25static struct resource cf_ide_resources[] = { 25static struct resource cf_ide_resources[] = {
@@ -34,7 +34,7 @@ static struct resource cf_ide_resources[] = {
34 .flags = IORESOURCE_MEM, 34 .flags = IORESOURCE_MEM,
35 }, 35 },
36 [2] = { 36 [2] = {
37 .start = 93, 37 .start = 77,
38 .flags = IORESOURCE_IRQ, 38 .flags = IORESOURCE_IRQ,
39 }, 39 },
40}; 40};
@@ -46,10 +46,22 @@ static struct platform_device cf_ide_device = {
46 .resource = cf_ide_resources, 46 .resource = cf_ide_resources,
47}; 47};
48 48
49static struct platform_device jornadakbd_device = {
50 .name = "jornada680_kbd",
51 .id = -1,
52};
53
49static struct platform_device *hp6xx_devices[] __initdata = { 54static struct platform_device *hp6xx_devices[] __initdata = {
50 &cf_ide_device, 55 &cf_ide_device,
56 &jornadakbd_device,
51}; 57};
52 58
59static void __init hp6xx_init_irq(void)
60{
61 /* Gets touchscreen and powerbutton IRQ working */
62 plat_irq_setup_pins(IRQ_MODE_IRQ);
63}
64
53static int __init hp6xx_devices_setup(void) 65static int __init hp6xx_devices_setup(void)
54{ 66{
55 return platform_add_devices(hp6xx_devices, ARRAY_SIZE(hp6xx_devices)); 67 return platform_add_devices(hp6xx_devices, ARRAY_SIZE(hp6xx_devices));
@@ -61,11 +73,11 @@ static void __init hp6xx_setup(char **cmdline_p)
61 u16 v; 73 u16 v;
62 74
63 v = inw(HD64461_STBCR); 75 v = inw(HD64461_STBCR);
64 v |= HD64461_STBCR_SURTST | HD64461_STBCR_SIRST | 76 v |= HD64461_STBCR_SURTST | HD64461_STBCR_SIRST |
65 HD64461_STBCR_STM1ST | HD64461_STBCR_STM0ST | 77 HD64461_STBCR_STM1ST | HD64461_STBCR_STM0ST |
66 HD64461_STBCR_SAFEST | HD64461_STBCR_SPC0ST | 78 HD64461_STBCR_SAFEST | HD64461_STBCR_SPC0ST |
67 HD64461_STBCR_SMIAST | HD64461_STBCR_SAFECKE_OST | 79 HD64461_STBCR_SMIAST | HD64461_STBCR_SAFECKE_OST|
68 HD64461_STBCR_SAFECKE_IST; 80 HD64461_STBCR_SAFECKE_IST;
69#ifndef CONFIG_HD64461_ENABLER 81#ifndef CONFIG_HD64461_ENABLER
70 v |= HD64461_STBCR_SPC1ST; 82 v |= HD64461_STBCR_SPC1ST;
71#endif 83#endif
@@ -101,6 +113,9 @@ device_initcall(hp6xx_devices_setup);
101static struct sh_machine_vector mv_hp6xx __initmv = { 113static struct sh_machine_vector mv_hp6xx __initmv = {
102 .mv_name = "hp6xx", 114 .mv_name = "hp6xx",
103 .mv_setup = hp6xx_setup, 115 .mv_setup = hp6xx_setup,
104 .mv_nr_irqs = HD64461_IRQBASE + HD64461_IRQ_NUM, 116 /* IRQ's : CPU(64) + CCHIP(16) + FREE_TO_USE(6) */
117 .mv_nr_irqs = HD64461_IRQBASE + HD64461_IRQ_NUM + 6,
105 .mv_irq_demux = hd64461_irq_demux, 118 .mv_irq_demux = hd64461_irq_demux,
119 /* Enable IRQ0 -> IRQ3 in IRQ_MODE */
120 .mv_init_irq = hp6xx_init_irq,
106}; 121};
diff --git a/arch/sh/boards/magicpanelr2/Kconfig b/arch/sh/boards/magicpanelr2/Kconfig
new file mode 100644
index 000000000000..b0abddc3e84f
--- /dev/null
+++ b/arch/sh/boards/magicpanelr2/Kconfig
@@ -0,0 +1,13 @@
1if SH_MAGIC_PANEL_R2
2
3menu "Magic Panel R2 options"
4
5config SH_MAGIC_PANEL_R2_VERSION
6 int SH_MAGIC_PANEL_R2_VERSION
7 default "3"
8 help
9 Set the version of the Magic Panel R2
10
11endmenu
12
13endif
diff --git a/arch/sh/boards/magicpanelr2/Makefile b/arch/sh/boards/magicpanelr2/Makefile
new file mode 100644
index 000000000000..7a6d586b9072
--- /dev/null
+++ b/arch/sh/boards/magicpanelr2/Makefile
@@ -0,0 +1,5 @@
1#
2# Makefile for the Magic Panel specific parts
3#
4
5obj-y := setup.o \ No newline at end of file
diff --git a/arch/sh/boards/magicpanelr2/setup.c b/arch/sh/boards/magicpanelr2/setup.c
new file mode 100644
index 000000000000..f3b8b07ea5d6
--- /dev/null
+++ b/arch/sh/boards/magicpanelr2/setup.c
@@ -0,0 +1,394 @@
1/*
2 * linux/arch/sh/boards/magicpanel/setup.c
3 *
4 * Copyright (C) 2007 Markus Brunner, Mark Jonas
5 *
6 * Magic Panel Release 2 board setup
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file "COPYING" in the main directory of this archive
10 * for more details.
11 */
12#include <linux/init.h>
13#include <linux/irq.h>
14#include <linux/platform_device.h>
15#include <linux/delay.h>
16#include <linux/mtd/mtd.h>
17#include <linux/mtd/partitions.h>
18#include <linux/mtd/physmap.h>
19#include <linux/mtd/map.h>
20#include <asm/magicpanelr2.h>
21#include <asm/heartbeat.h>
22
23#define LAN9115_READY (ctrl_inl(0xA8000084UL) & 0x00000001UL)
24
25/* Prefer cmdline over RedBoot */
26static const char *probes[] = { "cmdlinepart", "RedBoot", NULL };
27
28/* Wait until reset finished. Timeout is 100ms. */
29static int __init ethernet_reset_finished(void)
30{
31 int i;
32
33 if (LAN9115_READY)
34 return 1;
35
36 for (i = 0; i < 10; ++i) {
37 mdelay(10);
38 if (LAN9115_READY)
39 return 1;
40 }
41
42 return 0;
43}
44
45static void __init reset_ethernet(void)
46{
47 /* PMDR: LAN_RESET=on */
48 CLRBITS_OUTB(0x10, PORT_PMDR);
49
50 udelay(200);
51
52 /* PMDR: LAN_RESET=off */
53 SETBITS_OUTB(0x10, PORT_PMDR);
54}
55
56static void __init setup_chip_select(void)
57{
58 /* CS2: LAN (0x08000000 - 0x0bffffff) */
59 /* no idle cycles, normal space, 8 bit data bus */
60 ctrl_outl(0x36db0400, CS2BCR);
61 /* (SW:1.5 WR:3 HW:1.5), ext. wait */
62 ctrl_outl(0x000003c0, CS2WCR);
63
64 /* CS4: CAN1 (0xb0000000 - 0xb3ffffff) */
65 /* no idle cycles, normal space, 8 bit data bus */
66 ctrl_outl(0x00000200, CS4BCR);
67 /* (SW:1.5 WR:3 HW:1.5), ext. wait */
68 ctrl_outl(0x00100981, CS4WCR);
69
70 /* CS5a: CAN2 (0xb4000000 - 0xb5ffffff) */
71 /* no idle cycles, normal space, 8 bit data bus */
72 ctrl_outl(0x00000200, CS5ABCR);
73 /* (SW:1.5 WR:3 HW:1.5), ext. wait */
74 ctrl_outl(0x00100981, CS5AWCR);
75
76 /* CS5b: CAN3 (0xb6000000 - 0xb7ffffff) */
77 /* no idle cycles, normal space, 8 bit data bus */
78 ctrl_outl(0x00000200, CS5BBCR);
79 /* (SW:1.5 WR:3 HW:1.5), ext. wait */
80 ctrl_outl(0x00100981, CS5BWCR);
81
82 /* CS6a: Rotary (0xb8000000 - 0xb9ffffff) */
83 /* no idle cycles, normal space, 8 bit data bus */
84 ctrl_outl(0x00000200, CS6ABCR);
85 /* (SW:1.5 WR:3 HW:1.5), no ext. wait */
86 ctrl_outl(0x001009C1, CS6AWCR);
87}
88
89static void __init setup_port_multiplexing(void)
90{
91 /* A7 GPO(LED8); A6 GPO(LED7); A5 GPO(LED6); A4 GPO(LED5);
92 * A3 GPO(LED4); A2 GPO(LED3); A1 GPO(LED2); A0 GPO(LED1);
93 */
94 ctrl_outw(0x5555, PORT_PACR); /* 01 01 01 01 01 01 01 01 */
95
96 /* B7 GPO(RST4); B6 GPO(RST3); B5 GPO(RST2); B4 GPO(RST1);
97 * B3 GPO(PB3); B2 GPO(PB2); B1 GPO(PB1); B0 GPO(PB0);
98 */
99 ctrl_outw(0x5555, PORT_PBCR); /* 01 01 01 01 01 01 01 01 */
100
101 /* C7 GPO(PC7); C6 GPO(PC6); C5 GPO(PC5); C4 GPO(PC4);
102 * C3 LCD_DATA3; C2 LCD_DATA2; C1 LCD_DATA1; C0 LCD_DATA0;
103 */
104 ctrl_outw(0x5500, PORT_PCCR); /* 01 01 01 01 00 00 00 00 */
105
106 /* D7 GPO(PD7); D6 GPO(PD6); D5 GPO(PD5); D4 GPO(PD4);
107 * D3 GPO(PD3); D2 GPO(PD2); D1 GPO(PD1); D0 GPO(PD0);
108 */
109 ctrl_outw(0x5555, PORT_PDCR); /* 01 01 01 01 01 01 01 01 */
110
111 /* E7 (x); E6 GPI(nu); E5 GPI(nu); E4 LCD_M_DISP;
112 * E3 LCD_CL1; E2 LCD_CL2; E1 LCD_DON; E0 LCD_FLM;
113 */
114 ctrl_outw(0x3C00, PORT_PECR); /* 00 11 11 00 00 00 00 00 */
115
116 /* F7 (x); F6 DA1(VLCD); F5 DA0(nc); F4 AN3;
117 * F3 AN2(MID_AD); F2 AN1(EARTH_AD); F1 AN0(TEMP); F0 GPI+(nc);
118 */
119 ctrl_outw(0x0002, PORT_PFCR); /* 00 00 00 00 00 00 00 10 */
120
121 /* G7 (x); G6 IRQ5(TOUCH_BUSY); G5 IRQ4(TOUCH_IRQ); G4 GPI(KEY2);
122 * G3 GPI(KEY1); G2 GPO(LED11); G1 GPO(LED10); G0 GPO(LED9);
123 */
124 ctrl_outw(0x03D5, PORT_PGCR); /* 00 00 00 11 11 01 01 01 */
125
126 /* H7 (x); H6 /RAS(BRAS); H5 /CAS(BCAS); H4 CKE(BCKE);
127 * H3 GPO(EARTH_OFF); H2 GPO(EARTH_TEST); H1 USB2_PWR; H0 USB1_PWR;
128 */
129 ctrl_outw(0x0050, PORT_PHCR); /* 00 00 00 00 01 01 00 00 */
130
131 /* J7 (x); J6 AUDCK; J5 ASEBRKAK; J4 AUDATA3;
132 * J3 AUDATA2; J2 AUDATA1; J1 AUDATA0; J0 AUDSYNC;
133 */
134 ctrl_outw(0x0000, PORT_PJCR); /* 00 00 00 00 00 00 00 00 */
135
136 /* K7 (x); K6 (x); K5 (x); K4 (x);
137 * K3 PINT7(/PWR2); K2 PINT6(/PWR1); K1 PINT5(nu); K0 PINT4(FLASH_READY)
138 */
139 ctrl_outw(0x00FF, PORT_PKCR); /* 00 00 00 00 11 11 11 11 */
140
141 /* L7 TRST; L6 TMS; L5 TDO; L4 TDI;
142 * L3 TCK; L2 (x); L1 (x); L0 (x);
143 */
144 ctrl_outw(0x0000, PORT_PLCR); /* 00 00 00 00 00 00 00 00 */
145
146 /* M7 GPO(CURRENT_SINK); M6 GPO(PWR_SWITCH); M5 GPO(LAN_SPEED);
147 * M4 GPO(LAN_RESET); M3 GPO(BUZZER); M2 GPO(LCD_BL);
148 * M1 CS5B(CAN3_CS); M0 GPI+(nc);
149 */
150 ctrl_outw(0x5552, PORT_PMCR); /* 01 01 01 01 01 01 00 10 */
151
152 /* CURRENT_SINK=off, PWR_SWITCH=off, LAN_SPEED=100MBit,
153 * LAN_RESET=off, BUZZER=off, LCD_BL=off
154 */
155#if CONFIG_SH_MAGIC_PANEL_R2_VERSION == 2
156 ctrl_outb(0x30, PORT_PMDR);
157#elif CONFIG_SH_MAGIC_PANEL_R2_VERSION == 3
158 ctrl_outb(0xF0, PORT_PMDR);
159#else
160#error Unknown revision of PLATFORM_MP_R2
161#endif
162
163 /* P7 (x); P6 (x); P5 (x);
164 * P4 GPO(nu); P3 IRQ3(LAN_IRQ); P2 IRQ2(CAN3_IRQ);
165 * P1 IRQ1(CAN2_IRQ); P0 IRQ0(CAN1_IRQ)
166 */
167 ctrl_outw(0x0100, PORT_PPCR); /* 00 00 00 01 00 00 00 00 */
168 ctrl_outb(0x10, PORT_PPDR);
169
170 /* R7 A25; R6 A24; R5 A23; R4 A22;
171 * R3 A21; R2 A20; R1 A19; R0 A0;
172 */
173 ctrl_outw(0x0000, PORT_PRCR); /* 00 00 00 00 00 00 00 00 */
174
175 /* S7 (x); S6 (x); S5 (x); S4 GPO(EEPROM_CS2);
176 * S3 GPO(EEPROM_CS1); S2 SIOF0_TXD; S1 SIOF0_RXD; S0 SIOF0_SCK;
177 */
178 ctrl_outw(0x0140, PORT_PSCR); /* 00 00 00 01 01 00 00 00 */
179
180 /* T7 (x); T6 (x); T5 (x); T4 COM1_CTS;
181 * T3 COM1_RTS; T2 COM1_TXD; T1 COM1_RXD; T0 GPO(WDOG)
182 */
183 ctrl_outw(0x0001, PORT_PTCR); /* 00 00 00 00 00 00 00 01 */
184
185 /* U7 (x); U6 (x); U5 (x); U4 GPI+(/AC_FAULT);
186 * U3 GPO(TOUCH_CS); U2 TOUCH_TXD; U1 TOUCH_RXD; U0 TOUCH_SCK;
187 */
188 ctrl_outw(0x0240, PORT_PUCR); /* 00 00 00 10 01 00 00 00 */
189
190 /* V7 (x); V6 (x); V5 (x); V4 GPO(MID2);
191 * V3 GPO(MID1); V2 CARD_TxD; V1 CARD_RxD; V0 GPI+(/BAT_FAULT);
192 */
193 ctrl_outw(0x0142, PORT_PVCR); /* 00 00 00 01 01 00 00 10 */
194}
195
196static void __init mpr2_setup(char **cmdline_p)
197{
198 __set_io_port_base(0xa0000000);
199
200 /* set Pin Select Register A:
201 * /PCC_CD1, /PCC_CD2, PCC_BVD1, PCC_BVD2,
202 * /IOIS16, IRQ4, IRQ5, USB1d_SUSPEND
203 */
204 ctrl_outw(0xAABC, PORT_PSELA);
205 /* set Pin Select Register B:
206 * /SCIF0_RTS, /SCIF0_CTS, LCD_VCPWC,
207 * LCD_VEPWC, IIC_SDA, IIC_SCL, Reserved
208 */
209 ctrl_outw(0x3C00, PORT_PSELB);
210 /* set Pin Select Register C:
211 * SIOF1_SCK, SIOF1_RxD, SCIF1_RxD, SCIF1_TxD, Reserved
212 */
213 ctrl_outw(0x0000, PORT_PSELC);
214 /* set Pin Select Register D: Reserved, SIOF1_TxD, Reserved, SIOF1_MCLK,
215 * Reserved, SIOF1_SYNC, Reserved, SCIF1_SCK, Reserved
216 */
217 ctrl_outw(0x0000, PORT_PSELD);
218 /* set USB TxRx Control: Reserved, DRV, Reserved, USB_TRANS, USB_SEL */
219 ctrl_outw(0x0101, PORT_UTRCTL);
220 /* set USB Clock Control: USSCS, USSTB, Reserved (HighByte always A5) */
221 ctrl_outw(0xA5C0, PORT_UCLKCR_W);
222
223 setup_chip_select();
224
225 setup_port_multiplexing();
226
227 reset_ethernet();
228
229 printk(KERN_INFO "Magic Panel Release 2 A.%i\n",
230 CONFIG_SH_MAGIC_PANEL_R2_VERSION);
231
232 if (ethernet_reset_finished() == 0)
233 printk(KERN_WARNING "Ethernet not ready\n");
234}
235
236static struct resource smc911x_resources[] = {
237 [0] = {
238 .start = 0xa8000000,
239 .end = 0xabffffff,
240 .flags = IORESOURCE_MEM,
241 },
242 [1] = {
243 .start = 35,
244 .end = 35,
245 .flags = IORESOURCE_IRQ,
246 },
247};
248
249static struct platform_device smc911x_device = {
250 .name = "smc911x",
251 .id = -1,
252 .num_resources = ARRAY_SIZE(smc911x_resources),
253 .resource = smc911x_resources,
254};
255
256static struct resource heartbeat_resources[] = {
257 [0] = {
258 .start = PA_LED,
259 .end = PA_LED,
260 .flags = IORESOURCE_MEM,
261 },
262};
263
264static struct heartbeat_data heartbeat_data = {
265 .flags = HEARTBEAT_INVERTED,
266};
267
268static struct platform_device heartbeat_device = {
269 .name = "heartbeat",
270 .id = -1,
271 .dev = {
272 .platform_data = &heartbeat_data,
273 },
274 .num_resources = ARRAY_SIZE(heartbeat_resources),
275 .resource = heartbeat_resources,
276};
277
278static struct mtd_partition *parsed_partitions;
279
280static struct mtd_partition mpr2_partitions[] = {
281 /* Reserved for bootloader, read-only */
282 {
283 .name = "Bootloader",
284 .offset = 0x00000000UL,
285 .size = MPR2_MTD_BOOTLOADER_SIZE,
286 .mask_flags = MTD_WRITEABLE,
287 },
288 /* Reserved for kernel image */
289 {
290 .name = "Kernel",
291 .offset = MTDPART_OFS_NXTBLK,
292 .size = MPR2_MTD_KERNEL_SIZE,
293 },
294 /* Rest is used for Flash FS */
295 {
296 .name = "Flash_FS",
297 .offset = MTDPART_OFS_NXTBLK,
298 .size = MTDPART_SIZ_FULL,
299 }
300};
301
302static struct physmap_flash_data flash_data = {
303 .width = 2,
304};
305
306static struct resource flash_resource = {
307 .start = 0x00000000,
308 .end = 0x2000000UL,
309 .flags = IORESOURCE_MEM,
310};
311
312static struct platform_device flash_device = {
313 .name = "physmap-flash",
314 .id = -1,
315 .resource = &flash_resource,
316 .num_resources = 1,
317 .dev = {
318 .platform_data = &flash_data,
319 },
320};
321
322static struct mtd_info *flash_mtd;
323
324static struct map_info mpr2_flash_map = {
325 .name = "Magic Panel R2 Flash",
326 .size = 0x2000000UL,
327 .bankwidth = 2,
328};
329
330static void __init set_mtd_partitions(void)
331{
332 int nr_parts = 0;
333
334 simple_map_init(&mpr2_flash_map);
335 flash_mtd = do_map_probe("cfi_probe", &mpr2_flash_map);
336 nr_parts = parse_mtd_partitions(flash_mtd, probes,
337 &parsed_partitions, 0);
338 /* If there is no partition table, used the hard coded table */
339 if (nr_parts <= 0) {
340 flash_data.parts = mpr2_partitions;
341 flash_data.nr_parts = ARRAY_SIZE(mpr2_partitions);
342 } else {
343 flash_data.nr_parts = nr_parts;
344 flash_data.parts = parsed_partitions;
345 }
346}
347
348/*
349 * Add all resources to the platform_device
350 */
351
352static struct platform_device *mpr2_devices[] __initdata = {
353 &heartbeat_device,
354 &smc911x_device,
355 &flash_device,
356};
357
358
359static int __init mpr2_devices_setup(void)
360{
361 set_mtd_partitions();
362 return platform_add_devices(mpr2_devices, ARRAY_SIZE(mpr2_devices));
363}
364device_initcall(mpr2_devices_setup);
365
366/*
367 * Initialize IRQ setting
368 */
369static void __init init_mpr2_IRQ(void)
370{
371 plat_irq_setup_pins(IRQ_MODE_IRQ); /* install handlers for IRQ0-5 */
372
373 set_irq_type(32, IRQ_TYPE_LEVEL_LOW); /* IRQ0 CAN1 */
374 set_irq_type(33, IRQ_TYPE_LEVEL_LOW); /* IRQ1 CAN2 */
375 set_irq_type(34, IRQ_TYPE_LEVEL_LOW); /* IRQ2 CAN3 */
376 set_irq_type(35, IRQ_TYPE_LEVEL_LOW); /* IRQ3 SMSC9115 */
377 set_irq_type(36, IRQ_TYPE_EDGE_RISING); /* IRQ4 touchscreen */
378 set_irq_type(37, IRQ_TYPE_EDGE_FALLING); /* IRQ5 touchscreen */
379
380 intc_set_priority(32, 13); /* IRQ0 CAN1 */
381 intc_set_priority(33, 13); /* IRQ0 CAN2 */
382 intc_set_priority(34, 13); /* IRQ0 CAN3 */
383 intc_set_priority(35, 6); /* IRQ3 SMSC9115 */
384}
385
386/*
387 * The Machine Vector
388 */
389
390static struct sh_machine_vector mv_mpr2 __initmv = {
391 .mv_name = "mpr2",
392 .mv_setup = mpr2_setup,
393 .mv_init_irq = init_mpr2_IRQ,
394};
diff --git a/arch/sh/boards/mpc1211/setup.c b/arch/sh/boards/mpc1211/setup.c
index 8ce03e00b0ae..fede36361dc7 100644
--- a/arch/sh/boards/mpc1211/setup.c
+++ b/arch/sh/boards/mpc1211/setup.c
@@ -285,7 +285,7 @@ static int put_smb_blk(unsigned char *p, int address, int command, int no)
285static struct resource heartbeat_resources[] = { 285static struct resource heartbeat_resources[] = {
286 [0] = { 286 [0] = {
287 .start = 0xa2000000, 287 .start = 0xa2000000,
288 .end = 0xa2000000 + 8 - 1, 288 .end = 0xa2000000,
289 .flags = IORESOURCE_MEM, 289 .flags = IORESOURCE_MEM,
290 }, 290 },
291}; 291};
diff --git a/arch/sh/boards/renesas/r7780rp/Makefile b/arch/sh/boards/renesas/r7780rp/Makefile
index b1d20afb4eb3..dd26182fbf58 100644
--- a/arch/sh/boards/renesas/r7780rp/Makefile
+++ b/arch/sh/boards/renesas/r7780rp/Makefile
@@ -1,9 +1,10 @@
1# 1#
2# Makefile for the R7780RP-1 specific parts of the kernel 2# Makefile for the R7780RP-1 specific parts of the kernel
3# 3#
4irqinit-y := irq-r7780rp.o 4irqinit-$(CONFIG_SH_R7780MP) := irq-r7780mp.o
5irqinit-$(CONFIG_SH_R7785RP) := irq-r7785rp.o 5irqinit-$(CONFIG_SH_R7785RP) := irq-r7785rp.o
6obj-y := setup.o irq.o $(irqinit-y) 6irqinit-$(CONFIG_SH_R7780RP) := irq-r7780rp.o irq.o
7obj-y := setup.o $(irqinit-y)
7 8
8ifneq ($(CONFIG_SH_R7785RP),y) 9ifneq ($(CONFIG_SH_R7785RP),y)
9obj-$(CONFIG_PUSH_SWITCH) += psw.o 10obj-$(CONFIG_PUSH_SWITCH) += psw.o
diff --git a/arch/sh/boards/renesas/r7780rp/irq-r7780mp.c b/arch/sh/boards/renesas/r7780rp/irq-r7780mp.c
new file mode 100644
index 000000000000..59b47fe061f9
--- /dev/null
+++ b/arch/sh/boards/renesas/r7780rp/irq-r7780mp.c
@@ -0,0 +1,61 @@
1/*
2 * Renesas Solutions Highlander R7780MP Support.
3 *
4 * Copyright (C) 2002 Atom Create Engineering Co., Ltd.
5 * Copyright (C) 2006 Paul Mundt
6 * Copyright (C) 2007 Magnus Damm
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file "COPYING" in the main directory of this archive
10 * for more details.
11 */
12#include <linux/init.h>
13#include <linux/irq.h>
14#include <linux/io.h>
15#include <asm/r7780rp.h>
16
17enum {
18 UNUSED = 0,
19
20 /* board specific interrupt sources */
21 AX88796, /* Ethernet controller */
22 CF, /* Compact Flash */
23 PSW, /* Push Switch */
24 EXT1, /* EXT1n IRQ */
25 EXT4, /* EXT4n IRQ */
26};
27
28static struct intc_vect vectors[] __initdata = {
29 INTC_IRQ(CF, IRQ_CF),
30 INTC_IRQ(PSW, IRQ_PSW),
31 INTC_IRQ(AX88796, IRQ_AX88796),
32 INTC_IRQ(EXT1, IRQ_EXT1),
33 INTC_IRQ(EXT4, IRQ_EXT4),
34};
35
36static struct intc_mask_reg mask_registers[] __initdata = {
37 { 0xa4000000, 0, 16, /* IRLMSK */
38 { 0, 0, 0, 0, CF, 0, 0, 0,
39 0, 0, 0, EXT4, 0, EXT1, PSW, AX88796 } },
40};
41
42static unsigned char irl2irq[HL_NR_IRL] __initdata = {
43 0, IRQ_CF, 0, 0,
44 0, 0, 0, 0,
45 0, IRQ_EXT4, 0, IRQ_EXT1,
46 0, IRQ_AX88796, IRQ_PSW,
47};
48
49static DECLARE_INTC_DESC(intc_desc, "r7780mp", vectors,
50 NULL, NULL, mask_registers, NULL, NULL);
51
52unsigned char * __init highlander_init_irq_r7780mp(void)
53{
54 if ((ctrl_inw(0xa4000700) & 0xf000) == 0x2000) {
55 printk(KERN_INFO "Using r7780mp interrupt controller.\n");
56 register_intc_controller(&intc_desc);
57 return irl2irq;
58 }
59
60 return NULL;
61}
diff --git a/arch/sh/boards/renesas/r7780rp/irq-r7780rp.c b/arch/sh/boards/renesas/r7780rp/irq-r7780rp.c
index f5f358746c9e..fa4a534cade9 100644
--- a/arch/sh/boards/renesas/r7780rp/irq-r7780rp.c
+++ b/arch/sh/boards/renesas/r7780rp/irq-r7780rp.c
@@ -9,13 +9,15 @@
9 * for more details. 9 * for more details.
10 */ 10 */
11#include <linux/init.h> 11#include <linux/init.h>
12#include <asm/io.h> 12#include <linux/io.h>
13#include <asm/r7780rp.h> 13#include <asm/r7780rp.h>
14 14
15void __init highlander_init_irq(void) 15unsigned char * __init highlander_init_irq_r7780rp(void)
16{ 16{
17 int i; 17 int i;
18 18
19 for (i = 0; i < 15; i++) 19 for (i = 0; i < 15; i++)
20 make_r7780rp_irq(i); 20 make_r7780rp_irq(i);
21
22 return NULL;
21} 23}
diff --git a/arch/sh/boards/renesas/r7780rp/irq-r7785rp.c b/arch/sh/boards/renesas/r7780rp/irq-r7785rp.c
index dd6ec4ce44dc..b2c6a84673bd 100644
--- a/arch/sh/boards/renesas/r7780rp/irq-r7785rp.c
+++ b/arch/sh/boards/renesas/r7780rp/irq-r7785rp.c
@@ -1,19 +1,55 @@
1/* 1/*
2 * Renesas Solutions Highlander R7780RP-1 Support. 2 * Renesas Solutions Highlander R7785RP Support.
3 * 3 *
4 * Copyright (C) 2002 Atom Create Engineering Co., Ltd. 4 * Copyright (C) 2002 Atom Create Engineering Co., Ltd.
5 * Copyright (C) 2006 Paul Mundt 5 * Copyright (C) 2006 Paul Mundt
6 * Copyright (C) 2007 Magnus Damm
6 * 7 *
7 * This file is subject to the terms and conditions of the GNU General Public 8 * This file is subject to the terms and conditions of the GNU General Public
8 * License. See the file "COPYING" in the main directory of this archive 9 * License. See the file "COPYING" in the main directory of this archive
9 * for more details. 10 * for more details.
10 */ 11 */
11#include <linux/init.h> 12#include <linux/init.h>
12#include <asm/io.h> 13#include <linux/irq.h>
14#include <linux/io.h>
13#include <asm/r7780rp.h> 15#include <asm/r7780rp.h>
14 16
15void __init highlander_init_irq(void) 17enum {
18 UNUSED = 0,
19
20 /* board specific interrupt sources */
21 AX88796, /* Ethernet controller */
22 CF, /* Compact Flash */
23};
24
25static struct intc_vect vectors[] __initdata = {
26 INTC_IRQ(CF, IRQ_CF),
27 INTC_IRQ(AX88796, IRQ_AX88796),
28};
29
30static struct intc_mask_reg mask_registers[] __initdata = {
31 { 0xa4000010, 0, 16, /* IRLMCR1 */
32 { 0, 0, 0, 0, CF, AX88796, 0, 0,
33 0, 0, 0, 0, 0, 0, 0, 0 } },
34};
35
36static unsigned char irl2irq[HL_NR_IRL] __initdata = {
37 0, IRQ_CF, 0, 0,
38 0, 0, 0, 0,
39 0, 0, IRQ_AX88796, 0,
40 0, 0, 0,
41};
42
43static DECLARE_INTC_DESC(intc_desc, "r7785rp", vectors,
44 NULL, NULL, mask_registers, NULL, NULL);
45
46unsigned char * __init highlander_init_irq_r7785rp(void)
16{ 47{
48 if ((ctrl_inw(0xa4000158) & 0xf000) != 0x1000)
49 return NULL;
50
51 printk(KERN_INFO "Using r7785rp interrupt controller.\n");
52
17 ctrl_outw(0x0000, PA_IRLSSR1); /* FPGA IRLSSR1(CF_CD clear) */ 53 ctrl_outw(0x0000, PA_IRLSSR1); /* FPGA IRLSSR1(CF_CD clear) */
18 54
19 /* Setup the FPGA IRL */ 55 /* Setup the FPGA IRL */
@@ -24,6 +60,6 @@ void __init highlander_init_irq(void)
24 ctrl_outw(0x4321, PA_IRLPRE); /* FPGA IRLE */ 60 ctrl_outw(0x4321, PA_IRLPRE); /* FPGA IRLE */
25 ctrl_outw(0x0000, PA_IRLPRF); /* FPGA IRLF */ 61 ctrl_outw(0x0000, PA_IRLPRF); /* FPGA IRLF */
26 62
27 make_r7780rp_irq(1); /* CF card */ 63 register_intc_controller(&intc_desc);
28 make_r7780rp_irq(10); /* On-board ethernet */ 64 return irl2irq;
29} 65}
diff --git a/arch/sh/boards/renesas/r7780rp/setup.c b/arch/sh/boards/renesas/r7780rp/setup.c
index adb529d01bae..afe9de73666a 100644
--- a/arch/sh/boards/renesas/r7780rp/setup.c
+++ b/arch/sh/boards/renesas/r7780rp/setup.c
@@ -19,6 +19,7 @@
19#include <asm/machvec.h> 19#include <asm/machvec.h>
20#include <asm/r7780rp.h> 20#include <asm/r7780rp.h>
21#include <asm/clock.h> 21#include <asm/clock.h>
22#include <asm/heartbeat.h>
22#include <asm/io.h> 23#include <asm/io.h>
23 24
24static struct resource r8a66597_usb_host_resources[] = { 25static struct resource r8a66597_usb_host_resources[] = {
@@ -30,8 +31,8 @@ static struct resource r8a66597_usb_host_resources[] = {
30 }, 31 },
31 [1] = { 32 [1] = {
32 .name = "r8a66597_hcd", 33 .name = "r8a66597_hcd",
33 .start = 11, /* irq number */ 34 .start = IRQ_EXT1, /* irq number */
34 .end = 11, 35 .end = IRQ_EXT1,
35 .flags = IORESOURCE_IRQ, 36 .flags = IORESOURCE_IRQ,
36 }, 37 },
37}; 38};
@@ -56,8 +57,8 @@ static struct resource m66592_usb_peripheral_resources[] = {
56 }, 57 },
57 [1] = { 58 [1] = {
58 .name = "m66592_udc", 59 .name = "m66592_udc",
59 .start = 9, /* irq number */ 60 .start = IRQ_EXT4, /* irq number */
60 .end = 9, 61 .end = IRQ_EXT4,
61 .flags = IORESOURCE_IRQ, 62 .flags = IORESOURCE_IRQ,
62 }, 63 },
63}; 64};
@@ -85,11 +86,7 @@ static struct resource cf_ide_resources[] = {
85 .flags = IORESOURCE_MEM, 86 .flags = IORESOURCE_MEM,
86 }, 87 },
87 [2] = { 88 [2] = {
88#ifdef CONFIG_SH_R7780RP 89 .start = IRQ_CF,
89 .start = 4,
90#else
91 .start = 1,
92#endif
93 .flags = IORESOURCE_IRQ, 90 .flags = IORESOURCE_IRQ,
94 }, 91 },
95}; 92};
@@ -108,16 +105,23 @@ static struct platform_device cf_ide_device = {
108 }, 105 },
109}; 106};
110 107
111static unsigned char heartbeat_bit_pos[] = { 2, 1, 0, 3, 6, 5, 4, 7 };
112
113static struct resource heartbeat_resources[] = { 108static struct resource heartbeat_resources[] = {
114 [0] = { 109 [0] = {
115 .start = PA_OBLED, 110 .start = PA_OBLED,
116 .end = PA_OBLED + ARRAY_SIZE(heartbeat_bit_pos) - 1, 111 .end = PA_OBLED,
117 .flags = IORESOURCE_MEM, 112 .flags = IORESOURCE_MEM,
118 }, 113 },
119}; 114};
120 115
116#ifndef CONFIG_SH_R7785RP
117static unsigned char heartbeat_bit_pos[] = { 2, 1, 0, 3, 6, 5, 4, 7 };
118
119static struct heartbeat_data heartbeat_data = {
120 .bit_pos = heartbeat_bit_pos,
121 .nr_bits = ARRAY_SIZE(heartbeat_bit_pos),
122};
123#endif
124
121static struct platform_device heartbeat_device = { 125static struct platform_device heartbeat_device = {
122 .name = "heartbeat", 126 .name = "heartbeat",
123 .id = -1, 127 .id = -1,
@@ -125,7 +129,7 @@ static struct platform_device heartbeat_device = {
125 /* R7785RP has a slightly more sensible FPGA.. */ 129 /* R7785RP has a slightly more sensible FPGA.. */
126#ifndef CONFIG_SH_R7785RP 130#ifndef CONFIG_SH_R7785RP
127 .dev = { 131 .dev = {
128 .platform_data = heartbeat_bit_pos, 132 .platform_data = &heartbeat_data,
129 }, 133 },
130#endif 134#endif
131 .num_resources = ARRAY_SIZE(heartbeat_resources), 135 .num_resources = ARRAY_SIZE(heartbeat_resources),
@@ -217,12 +221,50 @@ static void __init highlander_setup(char **cmdline_p)
217 pm_power_off = r7780rp_power_off; 221 pm_power_off = r7780rp_power_off;
218} 222}
219 223
224static unsigned char irl2irq[HL_NR_IRL];
225
226int highlander_irq_demux(int irq)
227{
228 if (irq >= HL_NR_IRL || !irl2irq[irq])
229 return irq;
230
231 return irl2irq[irq];
232}
233
234void __init highlander_init_irq(void)
235{
236 unsigned char *ucp = NULL;
237
238 do {
239#ifdef CONFIG_SH_R7780MP
240 ucp = highlander_init_irq_r7780mp();
241 if (ucp)
242 break;
243#endif
244#ifdef CONFIG_SH_R7785RP
245 ucp = highlander_init_irq_r7785rp();
246 if (ucp)
247 break;
248#endif
249#ifdef CONFIG_SH_R7780RP
250 highlander_init_irq_r7780rp();
251 ucp = irl2irq;
252 break;
253#endif
254 } while (0);
255
256 if (ucp) {
257 plat_irq_setup_pins(IRQ_MODE_IRL3210);
258 memcpy(irl2irq, ucp, HL_NR_IRL);
259 }
260}
261
220/* 262/*
221 * The Machine Vector 263 * The Machine Vector
222 */ 264 */
223static struct sh_machine_vector mv_highlander __initmv = { 265static struct sh_machine_vector mv_highlander __initmv = {
224 .mv_name = "Highlander", 266 .mv_name = "Highlander",
225 .mv_nr_irqs = 109,
226 .mv_setup = highlander_setup, 267 .mv_setup = highlander_setup,
227 .mv_init_irq = highlander_init_irq, 268 .mv_init_irq = highlander_init_irq,
269 .mv_irq_demux = highlander_irq_demux,
228}; 270};
diff --git a/arch/sh/boards/renesas/rts7751r2d/Kconfig b/arch/sh/boards/renesas/rts7751r2d/Kconfig
index 7780d1fb13ff..8122a9667fc9 100644
--- a/arch/sh/boards/renesas/rts7751r2d/Kconfig
+++ b/arch/sh/boards/renesas/rts7751r2d/Kconfig
@@ -1,11 +1,22 @@
1if SH_RTS7751R2D 1if SH_RTS7751R2D
2 2
3menu "RTS7751R2D options" 3menu "RTS7751R2D Board Revision"
4 4
5config RTS7751R2D_REV11 5config RTS7751R2D_PLUS
6 bool "RTS7751R2D Rev. 1.1 board support" 6 bool "R2D-PLUS"
7 help 7 help
8 Selecting this option will support version rev. 1.1. 8 Selecting this option will configure the kernel for R2D-PLUS.
9
10 R2D-PLUS is the smaller of the two R2D board versions, equipped
11 with a single PCI slot.
12
13config RTS7751R2D_1
14 bool "R2D-1"
15 help
16 Selecting this option will configure the kernel for R2D-1.
17
18 R2D-1 is the larger of the two R2D board versions, equipped
19 with two PCI slots.
9endmenu 20endmenu
10 21
11endif 22endif
diff --git a/arch/sh/boards/renesas/rts7751r2d/irq.c b/arch/sh/boards/renesas/rts7751r2d/irq.c
index 0bae9041aceb..7cc2813adfe4 100644
--- a/arch/sh/boards/renesas/rts7751r2d/irq.c
+++ b/arch/sh/boards/renesas/rts7751r2d/irq.c
@@ -1,84 +1,159 @@
1/* 1/*
2 * linux/arch/sh/boards/renesas/rts7751r2d/irq.c 2 * linux/arch/sh/boards/renesas/rts7751r2d/irq.c
3 * 3 *
4 * Copyright (C) 2007 Magnus Damm
4 * Copyright (C) 2000 Kazumoto Kojima 5 * Copyright (C) 2000 Kazumoto Kojima
5 * 6 *
6 * Renesas Technology Sales RTS7751R2D Support. 7 * Renesas Technology Sales RTS7751R2D Support, R2D-PLUS and R2D-1.
7 * 8 *
8 * Modified for RTS7751R2D by 9 * Modified for RTS7751R2D by
9 * Atom Create Engineering Co., Ltd. 2002. 10 * Atom Create Engineering Co., Ltd. 2002.
10 */ 11 */
11#include <linux/init.h> 12#include <linux/init.h>
12#include <linux/interrupt.h>
13#include <linux/irq.h> 13#include <linux/irq.h>
14#include <linux/interrupt.h> 14#include <linux/interrupt.h>
15#include <linux/io.h> 15#include <linux/io.h>
16#include <asm/voyagergx.h>
16#include <asm/rts7751r2d.h> 17#include <asm/rts7751r2d.h>
17 18
18#if defined(CONFIG_RTS7751R2D_REV11) 19#define R2D_NR_IRL 13
19static int mask_pos[] = {11, 9, 8, 12, 10, 6, 5, 4, 7, 14, 13, 0, 0, 0, 0};
20#else
21static int mask_pos[] = {6, 11, 9, 8, 12, 10, 5, 4, 7, 14, 13, 0, 0, 0, 0};
22#endif
23 20
24extern int voyagergx_irq_demux(int irq); 21enum {
25extern void setup_voyagergx_irq(void); 22 UNUSED = 0,
26 23
27static void enable_rts7751r2d_irq(unsigned int irq) 24 /* board specific interrupt sources (R2D-1 and R2D-PLUS) */
28{ 25 EXT, /* EXT_INT0-3 */
29 /* Set priority in IPR back to original value */ 26 RTC_T, RTC_A, /* Real Time Clock */
30 ctrl_outw(ctrl_inw(IRLCNTR1) | (1 << mask_pos[irq]), IRLCNTR1); 27 AX88796, /* Ethernet controller (R2D-1 board) */
31} 28 KEY, /* Key input (R2D-PLUS board) */
29 SDCARD, /* SD Card */
30 CF_CD, CF_IDE, /* CF Card Detect + CF IDE */
31 SM501, /* SM501 aka Voyager */
32 PCI_INTD_RTL8139, /* Ethernet controller */
33 PCI_INTC_PCI1520, /* Cardbus/PCMCIA bridge */
34 PCI_INTB_RTL8139, /* Ethernet controller with HUB (R2D-PLUS board) */
35 PCI_INTB_SLOT, /* PCI Slot 3.3v (R2D-1 board) */
36 PCI_INTA_SLOT, /* PCI Slot 3.3v */
37 TP, /* Touch Panel */
38};
32 39
33static void disable_rts7751r2d_irq(unsigned int irq) 40#ifdef CONFIG_RTS7751R2D_1
34{ 41
35 /* Set the priority in IPR to 0 */ 42/* Vectors for R2D-1 */
36 ctrl_outw(ctrl_inw(IRLCNTR1) & (0xffff ^ (1 << mask_pos[irq])), 43static struct intc_vect vectors_r2d_1[] __initdata = {
37 IRLCNTR1); 44 INTC_IRQ(EXT, IRQ_EXT),
38} 45 INTC_IRQ(RTC_T, IRQ_RTC_T), INTC_IRQ(RTC_A, IRQ_RTC_A),
46 INTC_IRQ(AX88796, IRQ_AX88796), INTC_IRQ(SDCARD, IRQ_SDCARD),
47 INTC_IRQ(CF_CD, IRQ_CF_CD), INTC_IRQ(CF_IDE, IRQ_CF_IDE), /* ng */
48 INTC_IRQ(SM501, IRQ_VOYAGER),
49 INTC_IRQ(PCI_INTD_RTL8139, IRQ_PCI_INTD),
50 INTC_IRQ(PCI_INTC_PCI1520, IRQ_PCI_INTC),
51 INTC_IRQ(PCI_INTB_SLOT, IRQ_PCI_INTB),
52 INTC_IRQ(PCI_INTA_SLOT, IRQ_PCI_INTA),
53 INTC_IRQ(TP, IRQ_TP),
54};
55
56/* IRLMSK mask register layout for R2D-1 */
57static struct intc_mask_reg mask_registers_r2d_1[] __initdata = {
58 { 0xa4000000, 0, 16, /* IRLMSK */
59 { TP, PCI_INTA_SLOT, PCI_INTB_SLOT,
60 PCI_INTC_PCI1520, PCI_INTD_RTL8139,
61 SM501, CF_IDE, CF_CD, SDCARD, AX88796,
62 RTC_A, RTC_T, 0, 0, 0, EXT } },
63};
64
65/* IRLn to IRQ table for R2D-1 */
66static unsigned char irl2irq_r2d_1[R2D_NR_IRL] __initdata = {
67 IRQ_PCI_INTD, IRQ_CF_IDE, IRQ_CF_CD, IRQ_PCI_INTC,
68 IRQ_VOYAGER, IRQ_AX88796, IRQ_RTC_A, IRQ_RTC_T,
69 IRQ_SDCARD, IRQ_PCI_INTA, IRQ_PCI_INTB, IRQ_EXT,
70 IRQ_TP,
71};
72
73static DECLARE_INTC_DESC(intc_desc_r2d_1, "r2d-1", vectors_r2d_1,
74 NULL, NULL, mask_registers_r2d_1, NULL, NULL);
75
76#endif /* CONFIG_RTS7751R2D_1 */
77
78#ifdef CONFIG_RTS7751R2D_PLUS
79
80/* Vectors for R2D-PLUS */
81static struct intc_vect vectors_r2d_plus[] __initdata = {
82 INTC_IRQ(EXT, IRQ_EXT),
83 INTC_IRQ(RTC_T, IRQ_RTC_T), INTC_IRQ(RTC_A, IRQ_RTC_A),
84 INTC_IRQ(KEY, IRQ_KEY), INTC_IRQ(SDCARD, IRQ_SDCARD),
85 INTC_IRQ(CF_CD, IRQ_CF_CD), INTC_IRQ(CF_IDE, IRQ_CF_IDE),
86 INTC_IRQ(SM501, IRQ_VOYAGER),
87 INTC_IRQ(PCI_INTD_RTL8139, IRQ_PCI_INTD),
88 INTC_IRQ(PCI_INTC_PCI1520, IRQ_PCI_INTC),
89 INTC_IRQ(PCI_INTB_RTL8139, IRQ_PCI_INTB),
90 INTC_IRQ(PCI_INTA_SLOT, IRQ_PCI_INTA),
91 INTC_IRQ(TP, IRQ_TP),
92};
93
94/* IRLMSK mask register layout for R2D-PLUS */
95static struct intc_mask_reg mask_registers_r2d_plus[] __initdata = {
96 { 0xa4000000, 0, 16, /* IRLMSK */
97 { TP, PCI_INTA_SLOT, PCI_INTB_RTL8139,
98 PCI_INTC_PCI1520, PCI_INTD_RTL8139,
99 SM501, CF_IDE, CF_CD, SDCARD, KEY,
100 RTC_A, RTC_T, 0, 0, 0, EXT } },
101};
102
103/* IRLn to IRQ table for R2D-PLUS */
104static unsigned char irl2irq_r2d_plus[R2D_NR_IRL] __initdata = {
105 IRQ_PCI_INTD, IRQ_CF_IDE, IRQ_CF_CD, IRQ_PCI_INTC,
106 IRQ_VOYAGER, IRQ_KEY, IRQ_RTC_A, IRQ_RTC_T,
107 IRQ_SDCARD, IRQ_PCI_INTA, IRQ_PCI_INTB, IRQ_EXT,
108 IRQ_TP,
109};
110
111static DECLARE_INTC_DESC(intc_desc_r2d_plus, "r2d-plus", vectors_r2d_plus,
112 NULL, NULL, mask_registers_r2d_plus, NULL, NULL);
113
114#endif /* CONFIG_RTS7751R2D_PLUS */
115
116static unsigned char irl2irq[R2D_NR_IRL];
39 117
40int rts7751r2d_irq_demux(int irq) 118int rts7751r2d_irq_demux(int irq)
41{ 119{
42 return voyagergx_irq_demux(irq); 120 if (irq >= R2D_NR_IRL || !irl2irq[irq])
43} 121 return irq;
44 122
45static struct irq_chip rts7751r2d_irq_chip __read_mostly = { 123 return irl2irq[irq];
46 .name = "rts7751r2d", 124}
47 .mask = disable_rts7751r2d_irq,
48 .unmask = enable_rts7751r2d_irq,
49 .mask_ack = disable_rts7751r2d_irq,
50};
51 125
52/* 126/*
53 * Initialize IRQ setting 127 * Initialize IRQ setting
54 */ 128 */
55void __init init_rts7751r2d_IRQ(void) 129void __init init_rts7751r2d_IRQ(void)
56{ 130{
57 int i; 131 struct intc_desc *d;
58 132
59 /* IRL0=KEY Input 133 switch (ctrl_inw(PA_VERREG) & 0xf0) {
60 * IRL1=Ethernet 134#ifdef CONFIG_RTS7751R2D_PLUS
61 * IRL2=CF Card 135 case 0x10:
62 * IRL3=CF Card Insert 136 printk(KERN_INFO "Using R2D-PLUS interrupt controller.\n");
63 * IRL4=PCMCIA 137 d = &intc_desc_r2d_plus;
64 * IRL5=VOYAGER 138 memcpy(irl2irq, irl2irq_r2d_plus, R2D_NR_IRL);
65 * IRL6=RTC Alarm 139 break;
66 * IRL7=RTC Timer 140#endif
67 * IRL8=SD Card 141#ifdef CONFIG_RTS7751R2D_1
68 * IRL9=PCI Slot #1 142 case 0x00: /* according to manual */
69 * IRL10=PCI Slot #2 143 case 0x30: /* in reality */
70 * IRL11=Extention #0 144 printk(KERN_INFO "Using R2D-1 interrupt controller.\n");
71 * IRL12=Extention #1 145 d = &intc_desc_r2d_1;
72 * IRL13=Extention #2 146 memcpy(irl2irq, irl2irq_r2d_1, R2D_NR_IRL);
73 * IRL14=Extention #3 147 break;
74 */ 148#endif
75 149 default:
76 for (i=0; i<15; i++) { 150 printk(KERN_INFO "Unknown R2D interrupt controller 0x%04x\n",
77 disable_irq_nosync(i); 151 ctrl_inw(PA_VERREG));
78 set_irq_chip_and_handler_name(i, &rts7751r2d_irq_chip, 152 return;
79 handle_level_irq, "level");
80 enable_rts7751r2d_irq(i);
81 } 153 }
82 154
155 register_intc_controller(d);
156#ifdef CONFIG_MFD_SM501
83 setup_voyagergx_irq(); 157 setup_voyagergx_irq();
158#endif
84} 159}
diff --git a/arch/sh/boards/renesas/rts7751r2d/setup.c b/arch/sh/boards/renesas/rts7751r2d/setup.c
index 6f7029d33241..37f2c0b447fe 100644
--- a/arch/sh/boards/renesas/rts7751r2d/setup.c
+++ b/arch/sh/boards/renesas/rts7751r2d/setup.c
@@ -45,20 +45,16 @@ static void __init voyagergx_serial_init(void)
45static struct resource cf_ide_resources[] = { 45static struct resource cf_ide_resources[] = {
46 [0] = { 46 [0] = {
47 .start = PA_AREA5_IO + 0x1000, 47 .start = PA_AREA5_IO + 0x1000,
48 .end = PA_AREA5_IO + 0x1000 + 0x08 - 1, 48 .end = PA_AREA5_IO + 0x1000 + 0x10 - 0x2,
49 .flags = IORESOURCE_MEM, 49 .flags = IORESOURCE_MEM,
50 }, 50 },
51 [1] = { 51 [1] = {
52 .start = PA_AREA5_IO + 0x80c, 52 .start = PA_AREA5_IO + 0x80c,
53 .end = PA_AREA5_IO + 0x80c + 0x16 - 1, 53 .end = PA_AREA5_IO + 0x80c,
54 .flags = IORESOURCE_MEM, 54 .flags = IORESOURCE_MEM,
55 }, 55 },
56 [2] = { 56 [2] = {
57#ifdef CONFIG_RTS7751R2D_REV11 57 .start = IRQ_CF_IDE,
58 .start = 1,
59#else
60 .start = 2,
61#endif
62 .flags = IORESOURCE_IRQ, 58 .flags = IORESOURCE_IRQ,
63 }, 59 },
64}; 60};
@@ -77,12 +73,28 @@ static struct platform_device cf_ide_device = {
77 }, 73 },
78}; 74};
79 75
76static struct resource heartbeat_resources[] = {
77 [0] = {
78 .start = PA_OUTPORT,
79 .end = PA_OUTPORT,
80 .flags = IORESOURCE_MEM,
81 },
82};
83
84static struct platform_device heartbeat_device = {
85 .name = "heartbeat",
86 .id = -1,
87 .num_resources = ARRAY_SIZE(heartbeat_resources),
88 .resource = heartbeat_resources,
89};
90
91#ifdef CONFIG_MFD_SM501
80static struct plat_serial8250_port uart_platform_data[] = { 92static struct plat_serial8250_port uart_platform_data[] = {
81 { 93 {
82 .membase = (void __iomem *)VOYAGER_UART_BASE, 94 .membase = (void __iomem *)VOYAGER_UART_BASE,
83 .mapbase = VOYAGER_UART_BASE, 95 .mapbase = VOYAGER_UART_BASE,
84 .iotype = UPIO_MEM, 96 .iotype = UPIO_MEM,
85 .irq = VOYAGER_UART0_IRQ, 97 .irq = IRQ_SM501_U0,
86 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 98 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
87 .regshift = 2, 99 .regshift = 2,
88 .uartclk = (9600 * 16), 100 .uartclk = (9600 * 16),
@@ -98,21 +110,6 @@ static struct platform_device uart_device = {
98 }, 110 },
99}; 111};
100 112
101static struct resource heartbeat_resources[] = {
102 [0] = {
103 .start = PA_OUTPORT,
104 .end = PA_OUTPORT + 8 - 1,
105 .flags = IORESOURCE_MEM,
106 },
107};
108
109static struct platform_device heartbeat_device = {
110 .name = "heartbeat",
111 .id = -1,
112 .num_resources = ARRAY_SIZE(heartbeat_resources),
113 .resource = heartbeat_resources,
114};
115
116static struct resource sm501_resources[] = { 113static struct resource sm501_resources[] = {
117 [0] = { 114 [0] = {
118 .start = 0x10000000, 115 .start = 0x10000000,
@@ -125,7 +122,7 @@ static struct resource sm501_resources[] = {
125 .flags = IORESOURCE_MEM, 122 .flags = IORESOURCE_MEM,
126 }, 123 },
127 [2] = { 124 [2] = {
128 .start = 32, 125 .start = IRQ_SM501_CV,
129 .flags = IORESOURCE_IRQ, 126 .flags = IORESOURCE_IRQ,
130 }, 127 },
131}; 128};
@@ -137,22 +134,19 @@ static struct platform_device sm501_device = {
137 .resource = sm501_resources, 134 .resource = sm501_resources,
138}; 135};
139 136
137#endif /* CONFIG_MFD_SM501 */
138
140static struct platform_device *rts7751r2d_devices[] __initdata = { 139static struct platform_device *rts7751r2d_devices[] __initdata = {
140#ifdef CONFIG_MFD_SM501
141 &uart_device, 141 &uart_device,
142 &heartbeat_device,
143 &sm501_device, 142 &sm501_device,
143#endif
144 &cf_ide_device,
145 &heartbeat_device,
144}; 146};
145 147
146static int __init rts7751r2d_devices_setup(void) 148static int __init rts7751r2d_devices_setup(void)
147{ 149{
148 int ret;
149
150 if (ctrl_inw(PA_BVERREG) == 0x10) { /* only working on R2D-PLUS */
151 ret = platform_device_register(&cf_ide_device);
152 if (ret)
153 return ret;
154 }
155
156 return platform_add_devices(rts7751r2d_devices, 150 return platform_add_devices(rts7751r2d_devices,
157 ARRAY_SIZE(rts7751r2d_devices)); 151 ARRAY_SIZE(rts7751r2d_devices));
158} 152}
@@ -163,6 +157,34 @@ static void rts7751r2d_power_off(void)
163 ctrl_outw(0x0001, PA_POWOFF); 157 ctrl_outw(0x0001, PA_POWOFF);
164} 158}
165 159
160static inline unsigned char is_ide_ioaddr(unsigned long addr)
161{
162 return ((cf_ide_resources[0].start <= addr &&
163 addr <= cf_ide_resources[0].end) ||
164 (cf_ide_resources[1].start <= addr &&
165 addr <= cf_ide_resources[1].end));
166}
167
168void rts7751r2d_writeb(u8 b, void __iomem *addr)
169{
170 unsigned long tmp = (unsigned long __force)addr;
171
172 if (is_ide_ioaddr(tmp))
173 ctrl_outw((u16)b, tmp);
174 else
175 ctrl_outb(b, tmp);
176}
177
178u8 rts7751r2d_readb(void __iomem *addr)
179{
180 unsigned long tmp = (unsigned long __force)addr;
181
182 if (is_ide_ioaddr(tmp))
183 return ctrl_inw(tmp) & 0xff;
184 else
185 return ctrl_inb(tmp);
186}
187
166/* 188/*
167 * Initialize the board 189 * Initialize the board
168 */ 190 */
@@ -187,12 +209,11 @@ static void __init rts7751r2d_setup(char **cmdline_p)
187static struct sh_machine_vector mv_rts7751r2d __initmv = { 209static struct sh_machine_vector mv_rts7751r2d __initmv = {
188 .mv_name = "RTS7751R2D", 210 .mv_name = "RTS7751R2D",
189 .mv_setup = rts7751r2d_setup, 211 .mv_setup = rts7751r2d_setup,
190 .mv_nr_irqs = 72,
191
192 .mv_init_irq = init_rts7751r2d_IRQ, 212 .mv_init_irq = init_rts7751r2d_IRQ,
193 .mv_irq_demux = rts7751r2d_irq_demux, 213 .mv_irq_demux = rts7751r2d_irq_demux,
194 214 .mv_writeb = rts7751r2d_writeb,
195#ifdef CONFIG_USB_SM501 215 .mv_readb = rts7751r2d_readb,
216#if defined(CONFIG_MFD_SM501) && defined(CONFIG_USB_OHCI_HCD)
196 .mv_consistent_alloc = voyagergx_consistent_alloc, 217 .mv_consistent_alloc = voyagergx_consistent_alloc,
197 .mv_consistent_free = voyagergx_consistent_free, 218 .mv_consistent_free = voyagergx_consistent_free,
198#endif 219#endif
diff --git a/arch/sh/boards/renesas/x3proto/Makefile b/arch/sh/boards/renesas/x3proto/Makefile
new file mode 100644
index 000000000000..983e4551fecf
--- /dev/null
+++ b/arch/sh/boards/renesas/x3proto/Makefile
@@ -0,0 +1 @@
obj-y += setup.o ilsel.o
diff --git a/arch/sh/boards/renesas/x3proto/ilsel.c b/arch/sh/boards/renesas/x3proto/ilsel.c
new file mode 100644
index 000000000000..6d4454fef97c
--- /dev/null
+++ b/arch/sh/boards/renesas/x3proto/ilsel.c
@@ -0,0 +1,151 @@
1/*
2 * arch/sh/boards/renesas/x3proto/ilsel.c
3 *
4 * Helper routines for SH-X3 proto board ILSEL.
5 *
6 * Copyright (C) 2007 Paul Mundt
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file "COPYING" in the main directory of this archive
10 * for more details.
11 */
12#include <linux/init.h>
13#include <linux/kernel.h>
14#include <linux/module.h>
15#include <linux/bitmap.h>
16#include <linux/io.h>
17#include <asm/ilsel.h>
18
19/*
20 * ILSEL is split across:
21 *
22 * ILSEL0 - 0xb8100004 [ Levels 1 - 4 ]
23 * ILSEL1 - 0xb8100006 [ Levels 5 - 8 ]
24 * ILSEL2 - 0xb8100008 [ Levels 9 - 12 ]
25 * ILSEL3 - 0xb810000a [ Levels 13 - 15 ]
26 *
27 * With each level being relative to an ilsel_source_t.
28 */
29#define ILSEL_BASE 0xb8100004
30#define ILSEL_LEVELS 15
31
32/*
33 * ILSEL level map, in descending order from the highest level down.
34 *
35 * Supported levels are 1 - 15 spread across ILSEL0 - ILSEL4, mapping
36 * directly to IRLs. As the IRQs are numbered in reverse order relative
37 * to the interrupt level, the level map is carefully managed to ensure a
38 * 1:1 mapping between the bit position and the IRQ number.
39 *
40 * This careful constructions allows ilsel_enable*() to be referenced
41 * directly for hooking up an ILSEL set and getting back an IRQ which can
42 * subsequently be used for internal accounting in the (optional) disable
43 * path.
44 */
45static unsigned long ilsel_level_map;
46
47static inline unsigned int ilsel_offset(unsigned int bit)
48{
49 return ILSEL_LEVELS - bit - 1;
50}
51
52static inline unsigned long mk_ilsel_addr(unsigned int bit)
53{
54 return ILSEL_BASE + ((ilsel_offset(bit) >> 1) & ~0x1);
55}
56
57static inline unsigned int mk_ilsel_shift(unsigned int bit)
58{
59 return (ilsel_offset(bit) & 0x3) << 2;
60}
61
62static void __ilsel_enable(ilsel_source_t set, unsigned int bit)
63{
64 unsigned int tmp, shift;
65 unsigned long addr;
66
67 addr = mk_ilsel_addr(bit);
68 shift = mk_ilsel_shift(bit);
69
70 pr_debug("%s: bit#%d: addr - 0x%08lx (shift %d, set %d)\n",
71 __FUNCTION__, bit, addr, shift, set);
72
73 tmp = ctrl_inw(addr);
74 tmp &= ~(0xf << shift);
75 tmp |= set << shift;
76 ctrl_outw(tmp, addr);
77}
78
79/**
80 * ilsel_enable - Enable an ILSEL set.
81 * @set: ILSEL source (see ilsel_source_t enum in include/asm-sh/ilsel.h).
82 *
83 * Enables a given non-aliased ILSEL source (<= ILSEL_KEY) at the highest
84 * available interrupt level. Callers should take care to order callsites
85 * noting descending interrupt levels. Aliasing FPGA and external board
86 * IRQs need to use ilsel_enable_fixed().
87 *
88 * The return value is an IRQ number that can later be taken down with
89 * ilsel_disable().
90 */
91int ilsel_enable(ilsel_source_t set)
92{
93 unsigned int bit;
94
95 /* Aliased sources must use ilsel_enable_fixed() */
96 BUG_ON(set > ILSEL_KEY);
97
98 do {
99 bit = find_first_zero_bit(&ilsel_level_map, ILSEL_LEVELS);
100 } while (test_and_set_bit(bit, &ilsel_level_map));
101
102 __ilsel_enable(set, bit);
103
104 return bit;
105}
106EXPORT_SYMBOL_GPL(ilsel_enable);
107
108/**
109 * ilsel_enable_fixed - Enable an ILSEL set at a fixed interrupt level
110 * @set: ILSEL source (see ilsel_source_t enum in include/asm-sh/ilsel.h).
111 * @level: Interrupt level (1 - 15)
112 *
113 * Enables a given ILSEL source at a fixed interrupt level. Necessary
114 * both for level reservation as well as for aliased sources that only
115 * exist on special ILSEL#s.
116 *
117 * Returns an IRQ number (as ilsel_enable()).
118 */
119int ilsel_enable_fixed(ilsel_source_t set, unsigned int level)
120{
121 unsigned int bit = ilsel_offset(level - 1);
122
123 if (test_and_set_bit(bit, &ilsel_level_map))
124 return -EBUSY;
125
126 __ilsel_enable(set, bit);
127
128 return bit;
129}
130EXPORT_SYMBOL_GPL(ilsel_enable_fixed);
131
132/**
133 * ilsel_disable - Disable an ILSEL set
134 * @irq: Bit position for ILSEL set value (retval from enable routines)
135 *
136 * Disable a previously enabled ILSEL set.
137 */
138void ilsel_disable(unsigned int irq)
139{
140 unsigned long addr;
141 unsigned int tmp;
142
143 addr = mk_ilsel_addr(irq);
144
145 tmp = ctrl_inw(addr);
146 tmp &= ~(0xf << mk_ilsel_shift(irq));
147 ctrl_outw(tmp, addr);
148
149 clear_bit(irq, &ilsel_level_map);
150}
151EXPORT_SYMBOL_GPL(ilsel_disable);
diff --git a/arch/sh/boards/renesas/x3proto/setup.c b/arch/sh/boards/renesas/x3proto/setup.c
new file mode 100644
index 000000000000..abc5b6d418fe
--- /dev/null
+++ b/arch/sh/boards/renesas/x3proto/setup.c
@@ -0,0 +1,136 @@
1/*
2 * arch/sh/boards/renesas/x3proto/setup.c
3 *
4 * Renesas SH-X3 Prototype Board Support.
5 *
6 * Copyright (C) 2007 Paul Mundt
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file "COPYING" in the main directory of this archive
10 * for more details.
11 */
12#include <linux/init.h>
13#include <linux/platform_device.h>
14#include <linux/kernel.h>
15#include <linux/io.h>
16#include <asm/ilsel.h>
17
18static struct resource heartbeat_resources[] = {
19 [0] = {
20 .start = 0xb8140020,
21 .end = 0xb8140020,
22 .flags = IORESOURCE_MEM,
23 },
24};
25
26static struct platform_device heartbeat_device = {
27 .name = "heartbeat",
28 .id = -1,
29 .num_resources = ARRAY_SIZE(heartbeat_resources),
30 .resource = heartbeat_resources,
31};
32
33static struct resource smc91x_resources[] = {
34 [0] = {
35 .start = 0x18000300,
36 .end = 0x18000300 + 0x10 - 1,
37 .flags = IORESOURCE_MEM,
38 },
39 [1] = {
40 /* Filled in by ilsel */
41 .flags = IORESOURCE_IRQ,
42 },
43};
44
45static struct platform_device smc91x_device = {
46 .name = "smc91x",
47 .id = -1,
48 .resource = smc91x_resources,
49 .num_resources = ARRAY_SIZE(smc91x_resources),
50};
51
52static struct resource r8a66597_usb_host_resources[] = {
53 [0] = {
54 .name = "r8a66597_hcd",
55 .start = 0x18040000,
56 .end = 0x18080000 - 1,
57 .flags = IORESOURCE_MEM,
58 },
59 [1] = {
60 .name = "r8a66597_hcd",
61 /* Filled in by ilsel */
62 .flags = IORESOURCE_IRQ,
63 },
64};
65
66static struct platform_device r8a66597_usb_host_device = {
67 .name = "r8a66597_hcd",
68 .id = -1,
69 .dev = {
70 .dma_mask = NULL, /* don't use dma */
71 .coherent_dma_mask = 0xffffffff,
72 },
73 .num_resources = ARRAY_SIZE(r8a66597_usb_host_resources),
74 .resource = r8a66597_usb_host_resources,
75};
76
77static struct resource m66592_usb_peripheral_resources[] = {
78 [0] = {
79 .name = "m66592_udc",
80 .start = 0x18080000,
81 .end = 0x180c0000 - 1,
82 .flags = IORESOURCE_MEM,
83 },
84 [1] = {
85 .name = "m66592_udc",
86 /* Filled in by ilsel */
87 .flags = IORESOURCE_IRQ,
88 },
89};
90
91static struct platform_device m66592_usb_peripheral_device = {
92 .name = "m66592_udc",
93 .id = -1,
94 .dev = {
95 .dma_mask = NULL, /* don't use dma */
96 .coherent_dma_mask = 0xffffffff,
97 },
98 .num_resources = ARRAY_SIZE(m66592_usb_peripheral_resources),
99 .resource = m66592_usb_peripheral_resources,
100};
101
102static struct platform_device *x3proto_devices[] __initdata = {
103 &heartbeat_device,
104 &smc91x_device,
105 &r8a66597_usb_host_device,
106 &m66592_usb_peripheral_device,
107};
108
109static int __init x3proto_devices_setup(void)
110{
111 r8a66597_usb_host_resources[1].start =
112 r8a66597_usb_host_resources[1].end = ilsel_enable(ILSEL_USBH_I);
113
114 m66592_usb_peripheral_resources[1].start =
115 m66592_usb_peripheral_resources[1].end = ilsel_enable(ILSEL_USBP_I);
116
117 smc91x_resources[1].start =
118 smc91x_resources[1].end = ilsel_enable(ILSEL_LAN);
119
120 return platform_add_devices(x3proto_devices,
121 ARRAY_SIZE(x3proto_devices));
122}
123device_initcall(x3proto_devices_setup);
124
125static void __init x3proto_init_irq(void)
126{
127 plat_irq_setup_pins(IRQ_MODE_IRL3210);
128
129 /* Set ICR0.LVLMODE */
130 ctrl_outl(ctrl_inl(0xfe410000) | (1 << 21), 0xfe410000);
131}
132
133static struct sh_machine_vector mv_x3proto __initmv = {
134 .mv_name = "x3proto",
135 .mv_init_irq = x3proto_init_irq,
136};
diff --git a/arch/sh/boards/se/7206/io.c b/arch/sh/boards/se/7206/io.c
index b557273e0cbe..1308e618e044 100644
--- a/arch/sh/boards/se/7206/io.c
+++ b/arch/sh/boards/se/7206/io.c
@@ -26,22 +26,24 @@ static inline void delay(void)
26static inline volatile __u16 * 26static inline volatile __u16 *
27port2adr(unsigned int port) 27port2adr(unsigned int port)
28{ 28{
29 if (port >= 0x2000) 29 if (port >= 0x2000 && port < 0x2020)
30 return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000)); 30 return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000));
31 else if (port >= 0x300 || port < 0x310) 31 else if (port >= 0x300 && port < 0x310)
32 return (volatile __u16 *) (PA_SMSC + (port - 0x300)); 32 return (volatile __u16 *) (PA_SMSC + (port - 0x300));
33
34 return (volatile __u16 *)port;
33} 35}
34 36
35unsigned char se7206_inb(unsigned long port) 37unsigned char se7206_inb(unsigned long port)
36{ 38{
37 return (*port2adr(port))&0xff; 39 return (*port2adr(port)) & 0xff;
38} 40}
39 41
40unsigned char se7206_inb_p(unsigned long port) 42unsigned char se7206_inb_p(unsigned long port)
41{ 43{
42 unsigned long v; 44 unsigned long v;
43 45
44 v = (*port2adr(port))&0xff; 46 v = (*port2adr(port)) & 0xff;
45 delay(); 47 delay();
46 return v; 48 return v;
47} 49}
@@ -51,12 +53,6 @@ unsigned short se7206_inw(unsigned long port)
51 return *port2adr(port);; 53 return *port2adr(port);;
52} 54}
53 55
54unsigned int se7206_inl(unsigned long port)
55{
56 maybebadio(port);
57 return 0;
58}
59
60void se7206_outb(unsigned char value, unsigned long port) 56void se7206_outb(unsigned char value, unsigned long port)
61{ 57{
62 *(port2adr(port)) = value; 58 *(port2adr(port)) = value;
@@ -73,11 +69,6 @@ void se7206_outw(unsigned short value, unsigned long port)
73 *port2adr(port) = value; 69 *port2adr(port) = value;
74} 70}
75 71
76void se7206_outl(unsigned int value, unsigned long port)
77{
78 maybebadio(port);
79}
80
81void se7206_insb(unsigned long port, void *addr, unsigned long count) 72void se7206_insb(unsigned long port, void *addr, unsigned long count)
82{ 73{
83 volatile __u16 *p = port2adr(port); 74 volatile __u16 *p = port2adr(port);
@@ -95,11 +86,6 @@ void se7206_insw(unsigned long port, void *addr, unsigned long count)
95 *ap++ = *p; 86 *ap++ = *p;
96} 87}
97 88
98void se7206_insl(unsigned long port, void *addr, unsigned long count)
99{
100 maybebadio(port);
101}
102
103void se7206_outsb(unsigned long port, const void *addr, unsigned long count) 89void se7206_outsb(unsigned long port, const void *addr, unsigned long count)
104{ 90{
105 volatile __u16 *p = port2adr(port); 91 volatile __u16 *p = port2adr(port);
@@ -116,8 +102,3 @@ void se7206_outsw(unsigned long port, const void *addr, unsigned long count)
116 while (count--) 102 while (count--)
117 *p = *ap++; 103 *p = *ap++;
118} 104}
119
120void se7206_outsl(unsigned long port, const void *addr, unsigned long count)
121{
122 maybebadio(port);
123}
diff --git a/arch/sh/boards/se/7206/setup.c b/arch/sh/boards/se/7206/setup.c
index a074b62505ef..5b3ee089d91d 100644
--- a/arch/sh/boards/se/7206/setup.c
+++ b/arch/sh/boards/se/7206/setup.c
@@ -6,14 +6,13 @@
6 * Copyright (C) 2007 Paul Mundt 6 * Copyright (C) 2007 Paul Mundt
7 * 7 *
8 * Hitachi 7206 SolutionEngine Support. 8 * Hitachi 7206 SolutionEngine Support.
9 *
10 */ 9 */
11
12#include <linux/init.h> 10#include <linux/init.h>
13#include <linux/platform_device.h> 11#include <linux/platform_device.h>
14#include <asm/se7206.h> 12#include <asm/se7206.h>
15#include <asm/io.h> 13#include <asm/io.h>
16#include <asm/machvec.h> 14#include <asm/machvec.h>
15#include <asm/heartbeat.h>
17 16
18static struct resource smc91x_resources[] = { 17static struct resource smc91x_resources[] = {
19 [0] = { 18 [0] = {
@@ -37,10 +36,16 @@ static struct platform_device smc91x_device = {
37 36
38static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 }; 37static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 };
39 38
39static struct heartbeat_data heartbeat_data = {
40 .bit_pos = heartbeat_bit_pos,
41 .nr_bits = ARRAY_SIZE(heartbeat_bit_pos),
42 .regsize = 32,
43};
44
40static struct resource heartbeat_resources[] = { 45static struct resource heartbeat_resources[] = {
41 [0] = { 46 [0] = {
42 .start = PA_LED, 47 .start = PA_LED,
43 .end = PA_LED + ARRAY_SIZE(heartbeat_bit_pos) - 1, 48 .end = PA_LED,
44 .flags = IORESOURCE_MEM, 49 .flags = IORESOURCE_MEM,
45 }, 50 },
46}; 51};
@@ -49,7 +54,7 @@ static struct platform_device heartbeat_device = {
49 .name = "heartbeat", 54 .name = "heartbeat",
50 .id = -1, 55 .id = -1,
51 .dev = { 56 .dev = {
52 .platform_data = heartbeat_bit_pos, 57 .platform_data = &heartbeat_data,
53 }, 58 },
54 .num_resources = ARRAY_SIZE(heartbeat_resources), 59 .num_resources = ARRAY_SIZE(heartbeat_resources),
55 .resource = heartbeat_resources, 60 .resource = heartbeat_resources,
@@ -75,24 +80,18 @@ static struct sh_machine_vector mv_se __initmv = {
75 .mv_nr_irqs = 256, 80 .mv_nr_irqs = 256,
76 .mv_inb = se7206_inb, 81 .mv_inb = se7206_inb,
77 .mv_inw = se7206_inw, 82 .mv_inw = se7206_inw,
78 .mv_inl = se7206_inl,
79 .mv_outb = se7206_outb, 83 .mv_outb = se7206_outb,
80 .mv_outw = se7206_outw, 84 .mv_outw = se7206_outw,
81 .mv_outl = se7206_outl,
82 85
83 .mv_inb_p = se7206_inb_p, 86 .mv_inb_p = se7206_inb_p,
84 .mv_inw_p = se7206_inw, 87 .mv_inw_p = se7206_inw,
85 .mv_inl_p = se7206_inl,
86 .mv_outb_p = se7206_outb_p, 88 .mv_outb_p = se7206_outb_p,
87 .mv_outw_p = se7206_outw, 89 .mv_outw_p = se7206_outw,
88 .mv_outl_p = se7206_outl,
89 90
90 .mv_insb = se7206_insb, 91 .mv_insb = se7206_insb,
91 .mv_insw = se7206_insw, 92 .mv_insw = se7206_insw,
92 .mv_insl = se7206_insl,
93 .mv_outsb = se7206_outsb, 93 .mv_outsb = se7206_outsb,
94 .mv_outsw = se7206_outsw, 94 .mv_outsw = se7206_outsw,
95 .mv_outsl = se7206_outsl,
96 95
97 .mv_init_irq = init_se7206_IRQ, 96 .mv_init_irq = init_se7206_IRQ,
98}; 97};
diff --git a/arch/sh/boards/se/7343/irq.c b/arch/sh/boards/se/7343/irq.c
index 360153ecc55b..763f6deba814 100644
--- a/arch/sh/boards/se/7343/irq.c
+++ b/arch/sh/boards/se/7343/irq.c
@@ -99,8 +99,11 @@ shmse_irq_demux(int irq)
99 * 99 *
100 * We configure IRQ5 as a cascade IRQ. 100 * We configure IRQ5 as a cascade IRQ.
101 */ 101 */
102static struct irqaction irq5 = { no_action, 0, CPU_MASK_NONE, "IRQ5-cascade", 102static struct irqaction irq5 = {
103 NULL, NULL}; 103 .handler = no_action,
104 .mask = CPU_MASK_NONE,
105 .name = "IRQ5-cascade",
106};
104 107
105static struct ipr_data se7343_irq5_ipr_map[] = { 108static struct ipr_data se7343_irq5_ipr_map[] = {
106 { IRQ5_IRQ, IRQ5_IPR_ADDR+2, IRQ5_IPR_POS, IRQ5_PRIORITY }, 109 { IRQ5_IRQ, IRQ5_IPR_ADDR+2, IRQ5_IPR_POS, IRQ5_PRIORITY },
diff --git a/arch/sh/boards/se/7343/setup.c b/arch/sh/boards/se/7343/setup.c
index 8fec155e2ff7..c9431b3a051b 100644
--- a/arch/sh/boards/se/7343/setup.c
+++ b/arch/sh/boards/se/7343/setup.c
@@ -33,7 +33,7 @@ static struct platform_device smc91x_device = {
33static struct resource heartbeat_resources[] = { 33static struct resource heartbeat_resources[] = {
34 [0] = { 34 [0] = {
35 .start = PA_LED, 35 .start = PA_LED,
36 .end = PA_LED + 8 - 1, 36 .end = PA_LED,
37 .flags = IORESOURCE_MEM, 37 .flags = IORESOURCE_MEM,
38 }, 38 },
39}; 39};
diff --git a/arch/sh/boards/se/770x/setup.c b/arch/sh/boards/se/770x/setup.c
index 2962da148f3f..d07a3368f546 100644
--- a/arch/sh/boards/se/770x/setup.c
+++ b/arch/sh/boards/se/770x/setup.c
@@ -12,6 +12,7 @@
12#include <asm/se.h> 12#include <asm/se.h>
13#include <asm/io.h> 13#include <asm/io.h>
14#include <asm/smc37c93x.h> 14#include <asm/smc37c93x.h>
15#include <asm/heartbeat.h>
15 16
16void init_se_IRQ(void); 17void init_se_IRQ(void);
17 18
@@ -90,10 +91,15 @@ static struct platform_device cf_ide_device = {
90 91
91static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 }; 92static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 };
92 93
94static struct heartbeat_data heartbeat_data = {
95 .bit_pos = heartbeat_bit_pos,
96 .nr_bits = ARRAY_SIZE(heartbeat_bit_pos),
97};
98
93static struct resource heartbeat_resources[] = { 99static struct resource heartbeat_resources[] = {
94 [0] = { 100 [0] = {
95 .start = PA_LED, 101 .start = PA_LED,
96 .end = PA_LED + ARRAY_SIZE(heartbeat_bit_pos) - 1, 102 .end = PA_LED,
97 .flags = IORESOURCE_MEM, 103 .flags = IORESOURCE_MEM,
98 }, 104 },
99}; 105};
@@ -102,7 +108,7 @@ static struct platform_device heartbeat_device = {
102 .name = "heartbeat", 108 .name = "heartbeat",
103 .id = -1, 109 .id = -1,
104 .dev = { 110 .dev = {
105 .platform_data = heartbeat_bit_pos, 111 .platform_data = &heartbeat_data,
106 }, 112 },
107 .num_resources = ARRAY_SIZE(heartbeat_resources), 113 .num_resources = ARRAY_SIZE(heartbeat_resources),
108 .resource = heartbeat_resources, 114 .resource = heartbeat_resources,
diff --git a/arch/sh/boards/se/7722/setup.c b/arch/sh/boards/se/7722/setup.c
index 495fc7e2b60f..03b63457e178 100644
--- a/arch/sh/boards/se/7722/setup.c
+++ b/arch/sh/boards/se/7722/setup.c
@@ -18,12 +18,10 @@
18#include <asm/io.h> 18#include <asm/io.h>
19 19
20/* Heartbeat */ 20/* Heartbeat */
21static unsigned char heartbeat_bit_pos[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
22
23static struct resource heartbeat_resources[] = { 21static struct resource heartbeat_resources[] = {
24 [0] = { 22 [0] = {
25 .start = PA_LED, 23 .start = PA_LED,
26 .end = PA_LED + ARRAY_SIZE(heartbeat_bit_pos) - 1, 24 .end = PA_LED,
27 .flags = IORESOURCE_MEM, 25 .flags = IORESOURCE_MEM,
28 }, 26 },
29}; 27};
@@ -31,9 +29,6 @@ static struct resource heartbeat_resources[] = {
31static struct platform_device heartbeat_device = { 29static struct platform_device heartbeat_device = {
32 .name = "heartbeat", 30 .name = "heartbeat",
33 .id = -1, 31 .id = -1,
34 .dev = {
35 .platform_data = heartbeat_bit_pos,
36 },
37 .num_resources = ARRAY_SIZE(heartbeat_resources), 32 .num_resources = ARRAY_SIZE(heartbeat_resources),
38 .resource = heartbeat_resources, 33 .resource = heartbeat_resources,
39}; 34};
@@ -109,7 +104,7 @@ static void __init se7722_setup(char **cmdline_p)
109 ctrl_outl(0x00051001, MSTPCR0); 104 ctrl_outl(0x00051001, MSTPCR0);
110 ctrl_outl(0x00000000, MSTPCR1); 105 ctrl_outl(0x00000000, MSTPCR1);
111 /* KEYSC, VOU, BEU, CEU, VEU, VPU, LCDC */ 106 /* KEYSC, VOU, BEU, CEU, VEU, VPU, LCDC */
112 ctrl_outl(0xffffbfC0, MSTPCR2); 107 ctrl_outl(0xffffbfC0, MSTPCR2);
113 108
114 ctrl_outw(0x0000, PORT_PECR); /* PORT E 1 = IRQ5 ,E 0 = BS */ 109 ctrl_outw(0x0000, PORT_PECR); /* PORT E 1 = IRQ5 ,E 0 = BS */
115 ctrl_outw(0x1000, PORT_PJCR); /* PORT J 1 = IRQ1,J 0 =IRQ0 */ 110 ctrl_outw(0x1000, PORT_PJCR); /* PORT J 1 = IRQ1,J 0 =IRQ0 */
diff --git a/arch/sh/boards/se/7751/setup.c b/arch/sh/boards/se/7751/setup.c
index 7873d07e40c1..deefbfd92591 100644
--- a/arch/sh/boards/se/7751/setup.c
+++ b/arch/sh/boards/se/7751/setup.c
@@ -13,13 +13,19 @@
13#include <asm/machvec.h> 13#include <asm/machvec.h>
14#include <asm/se7751.h> 14#include <asm/se7751.h>
15#include <asm/io.h> 15#include <asm/io.h>
16#include <asm/heartbeat.h>
16 17
17static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 }; 18static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 };
18 19
20static struct heartbeat_data heartbeat_data = {
21 .bit_pos = heartbeat_bit_pos,
22 .nr_bits = ARRAY_SIZE(heartbeat_bit_pos),
23};
24
19static struct resource heartbeat_resources[] = { 25static struct resource heartbeat_resources[] = {
20 [0] = { 26 [0] = {
21 .start = PA_LED, 27 .start = PA_LED,
22 .end = PA_LED + ARRAY_SIZE(heartbeat_bit_pos) - 1, 28 .end = PA_LED,
23 .flags = IORESOURCE_MEM, 29 .flags = IORESOURCE_MEM,
24 }, 30 },
25}; 31};
@@ -28,14 +34,13 @@ static struct platform_device heartbeat_device = {
28 .name = "heartbeat", 34 .name = "heartbeat",
29 .id = -1, 35 .id = -1,
30 .dev = { 36 .dev = {
31 .platform_data = heartbeat_bit_pos, 37 .platform_data = &heartbeat_data,
32 }, 38 },
33 .num_resources = ARRAY_SIZE(heartbeat_resources), 39 .num_resources = ARRAY_SIZE(heartbeat_resources),
34 .resource = heartbeat_resources, 40 .resource = heartbeat_resources,
35}; 41};
36 42
37static struct platform_device *se7751_devices[] __initdata = { 43static struct platform_device *se7751_devices[] __initdata = {
38 &smc91x_device,
39 &heartbeat_device, 44 &heartbeat_device,
40}; 45};
41 46
diff --git a/arch/sh/boards/se/7780/irq.c b/arch/sh/boards/se/7780/irq.c
index 874914746009..6bd70da6bb47 100644
--- a/arch/sh/boards/se/7780/irq.c
+++ b/arch/sh/boards/se/7780/irq.c
@@ -16,32 +16,6 @@
16#include <asm/io.h> 16#include <asm/io.h>
17#include <asm/se7780.h> 17#include <asm/se7780.h>
18 18
19static struct intc2_data intc2_irq_table[] = {
20 { 2, 0, 31, 0, 31, 3 }, /* daughter board EXTINT1 */
21 { 4, 0, 30, 0, 30, 3 }, /* daughter board EXTINT2 */
22 { 6, 0, 29, 0, 29, 3 }, /* daughter board EXTINT3 */
23 { 8, 0, 28, 0, 28, 3 }, /* SMC 91C111 (LAN) */
24 { 10, 0, 27, 0, 27, 3 }, /* daughter board EXTINT4 */
25 { 4, 0, 30, 0, 30, 3 }, /* daughter board EXTINT5 */
26 { 2, 0, 31, 0, 31, 3 }, /* daughter board EXTINT6 */
27 { 2, 0, 31, 0, 31, 3 }, /* daughter board EXTINT7 */
28 { 2, 0, 31, 0, 31, 3 }, /* daughter board EXTINT8 */
29 { 0 , 0, 24, 0, 24, 3 }, /* SM501 */
30};
31
32static struct intc2_desc intc2_irq_desc __read_mostly = {
33 .prio_base = 0, /* N/A */
34 .msk_base = 0xffd00044,
35 .mskclr_base = 0xffd00064,
36
37 .intc2_data = intc2_irq_table,
38 .nr_irqs = ARRAY_SIZE(intc2_irq_table),
39
40 .chip = {
41 .name = "INTC2-se7780",
42 },
43};
44
45/* 19/*
46 * Initialize IRQ setting 20 * Initialize IRQ setting
47 */ 21 */
@@ -68,5 +42,5 @@ void __init init_se7780_IRQ(void)
68 /* FPGA + 0x0A */ 42 /* FPGA + 0x0A */
69 ctrl_outw((IRQPIN_PCCPW << IRQPOS_PCCPW), FPGA_INTSEL3); 43 ctrl_outw((IRQPIN_PCCPW << IRQPOS_PCCPW), FPGA_INTSEL3);
70 44
71 register_intc2_controller(&intc2_irq_desc); 45 plat_irq_setup_pins(IRQ_MODE_IRQ); /* install handlers for IRQ0-7 */
72} 46}
diff --git a/arch/sh/boards/se/7780/setup.c b/arch/sh/boards/se/7780/setup.c
index 723f2fd4d55b..76e53b26a808 100644
--- a/arch/sh/boards/se/7780/setup.c
+++ b/arch/sh/boards/se/7780/setup.c
@@ -16,12 +16,10 @@
16#include <asm/io.h> 16#include <asm/io.h>
17 17
18/* Heartbeat */ 18/* Heartbeat */
19static unsigned char heartbeat_bit_pos[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
20
21static struct resource heartbeat_resources[] = { 19static struct resource heartbeat_resources[] = {
22 [0] = { 20 [0] = {
23 .start = PA_LED, 21 .start = PA_LED,
24 .end = PA_LED + ARRAY_SIZE(heartbeat_bit_pos) - 1, 22 .end = PA_LED,
25 .flags = IORESOURCE_MEM, 23 .flags = IORESOURCE_MEM,
26 }, 24 },
27}; 25};
@@ -29,9 +27,6 @@ static struct resource heartbeat_resources[] = {
29static struct platform_device heartbeat_device = { 27static struct platform_device heartbeat_device = {
30 .name = "heartbeat", 28 .name = "heartbeat",
31 .id = -1, 29 .id = -1,
32 .dev = {
33 .platform_data = heartbeat_bit_pos,
34 },
35 .num_resources = ARRAY_SIZE(heartbeat_resources), 30 .num_resources = ARRAY_SIZE(heartbeat_resources),
36 .resource = heartbeat_resources, 31 .resource = heartbeat_resources,
37}; 32};
diff --git a/arch/sh/boards/sh03/setup.c b/arch/sh/boards/sh03/setup.c
index 9c031a8c0a1c..934ac4f1c48f 100644
--- a/arch/sh/boards/sh03/setup.c
+++ b/arch/sh/boards/sh03/setup.c
@@ -15,33 +15,9 @@
15#include <asm/sh03/sh03.h> 15#include <asm/sh03/sh03.h>
16#include <asm/addrspace.h> 16#include <asm/addrspace.h>
17 17
18static struct ipr_data ipr_irq_table[] = {
19 { IRL0_IRQ, 0, IRL0_IPR_POS, IRL0_PRIORITY },
20 { IRL1_IRQ, 0, IRL1_IPR_POS, IRL1_PRIORITY },
21 { IRL2_IRQ, 0, IRL2_IPR_POS, IRL2_PRIORITY },
22 { IRL3_IRQ, 0, IRL3_IPR_POS, IRL3_PRIORITY },
23};
24
25static unsigned long ipr_offsets[] = {
26 INTC_IPRD,
27};
28
29static struct ipr_desc ipr_irq_desc = {
30 .ipr_offsets = ipr_offsets,
31 .nr_offsets = ARRAY_SIZE(ipr_offsets),
32
33 .ipr_data = ipr_irq_table,
34 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
35
36 .chip = {
37 .name = "IPR-sh03",
38 },
39};
40
41static void __init init_sh03_IRQ(void) 18static void __init init_sh03_IRQ(void)
42{ 19{
43 ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); 20 plat_irq_setup_pins(IRQ_MODE_IRQ);
44 register_ipr_controller(&ipr_irq_desc);
45} 21}
46 22
47extern void *cf_io_base; 23extern void *cf_io_base;
@@ -68,7 +44,7 @@ static void __init sh03_setup(char **cmdline_p)
68static struct resource heartbeat_resources[] = { 44static struct resource heartbeat_resources[] = {
69 [0] = { 45 [0] = {
70 .start = 0xa0800000, 46 .start = 0xa0800000,
71 .end = 0xa0800000 + 8 - 1, 47 .end = 0xa0800000,
72 .flags = IORESOURCE_MEM, 48 .flags = IORESOURCE_MEM,
73 }, 49 },
74}; 50};
diff --git a/arch/sh/boards/shmin/setup.c b/arch/sh/boards/shmin/setup.c
index dfd124509f42..16e5dae8ecfb 100644
--- a/arch/sh/boards/shmin/setup.c
+++ b/arch/sh/boards/shmin/setup.c
@@ -14,36 +14,12 @@
14 14
15#define PFC_PHCR 0xa400010eUL 15#define PFC_PHCR 0xa400010eUL
16#define INTC_ICR1 0xa4000010UL 16#define INTC_ICR1 0xa4000010UL
17#define INTC_IPRC 0xa4000016UL
18
19static struct ipr_data ipr_irq_table[] = {
20 { 32, 0, 0, 0 },
21 { 33, 0, 4, 0 },
22 { 34, 0, 8, 8 },
23 { 35, 0, 12, 0 },
24};
25
26static unsigned long ipr_offsets[] = {
27 INTC_IPRC,
28};
29
30static struct ipr_desc ipr_irq_desc = {
31 .ipr_offsets = ipr_offsets,
32 .nr_offsets = ARRAY_SIZE(ipr_offsets),
33
34 .ipr_data = ipr_irq_table,
35 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
36
37 .chip = {
38 .name = "IPR-shmin",
39 },
40};
41 17
42static void __init init_shmin_irq(void) 18static void __init init_shmin_irq(void)
43{ 19{
44 ctrl_outw(0x2a00, PFC_PHCR); // IRQ0-3=IRQ 20 ctrl_outw(0x2a00, PFC_PHCR); // IRQ0-3=IRQ
45 ctrl_outw(0x0aaa, INTC_ICR1); // IRQ0-3=IRQ-mode,Low-active. 21 ctrl_outw(0x0aaa, INTC_ICR1); // IRQ0-3=IRQ-mode,Low-active.
46 register_ipr_controller(&ipr_irq_desc); 22 plat_irq_setup_pins(IRQ_MODE_IRQ);
47} 23}
48 24
49static void __iomem *shmin_ioport_map(unsigned long port, unsigned int size) 25static void __iomem *shmin_ioport_map(unsigned long port, unsigned int size)
diff --git a/arch/sh/boards/snapgear/setup.c b/arch/sh/boards/snapgear/setup.c
index 84271d85a8dd..2b594f600002 100644
--- a/arch/sh/boards/snapgear/setup.c
+++ b/arch/sh/boards/snapgear/setup.c
@@ -68,37 +68,11 @@ module_init(eraseconfig_init);
68 * IRL3 = crypto 68 * IRL3 = crypto
69 */ 69 */
70 70
71static struct ipr_data ipr_irq_table[] = {
72 { IRL0_IRQ, 0, IRL0_IPR_POS, IRL0_PRIORITY },
73 { IRL1_IRQ, 0, IRL1_IPR_POS, IRL1_PRIORITY },
74 { IRL2_IRQ, 0, IRL2_IPR_POS, IRL2_PRIORITY },
75 { IRL3_IRQ, 0, IRL3_IPR_POS, IRL3_PRIORITY },
76};
77
78static unsigned long ipr_offsets[] = {
79 INTC_IPRD,
80};
81
82static struct ipr_desc ipr_irq_desc = {
83 .ipr_offsets = ipr_offsets,
84 .nr_offsets = ARRAY_SIZE(ipr_offsets),
85
86 .ipr_data = ipr_irq_table,
87 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
88
89 .chip = {
90 .name = "IPR-snapgear",
91 },
92};
93
94static void __init init_snapgear_IRQ(void) 71static void __init init_snapgear_IRQ(void)
95{ 72{
96 /* enable individual interrupt mode for externals */
97 ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR);
98
99 printk("Setup SnapGear IRQ/IPR ...\n"); 73 printk("Setup SnapGear IRQ/IPR ...\n");
100 74 /* enable individual interrupt mode for externals */
101 register_ipr_controller(&ipr_irq_desc); 75 plat_irq_setup_pins(IRQ_MODE_IRQ);
102} 76}
103 77
104/* 78/*
diff --git a/arch/sh/boards/titan/setup.c b/arch/sh/boards/titan/setup.c
index 606d25a4b870..5de3b2ad71af 100644
--- a/arch/sh/boards/titan/setup.c
+++ b/arch/sh/boards/titan/setup.c
@@ -12,38 +12,10 @@
12#include <asm/titan.h> 12#include <asm/titan.h>
13#include <asm/io.h> 13#include <asm/io.h>
14 14
15static struct ipr_data ipr_irq_table[] = {
16 /* IRQ, IPR idx, shift, prio */
17 { TITAN_IRQ_WAN, 3, 12, 8 }, /* eth0 (WAN) */
18 { TITAN_IRQ_LAN, 3, 8, 8 }, /* eth1 (LAN) */
19 { TITAN_IRQ_MPCIA, 3, 4, 8 }, /* mPCI A (top) */
20 { TITAN_IRQ_USB, 3, 0, 8 }, /* mPCI B (bottom), USB */
21};
22
23static unsigned long ipr_offsets[] = { /* stolen from setup-sh7750.c */
24 0xffd00004UL, /* 0: IPRA */
25 0xffd00008UL, /* 1: IPRB */
26 0xffd0000cUL, /* 2: IPRC */
27 0xffd00010UL, /* 3: IPRD */
28};
29
30static struct ipr_desc ipr_irq_desc = {
31 .ipr_offsets = ipr_offsets,
32 .nr_offsets = ARRAY_SIZE(ipr_offsets),
33
34 .ipr_data = ipr_irq_table,
35 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
36
37 .chip = {
38 .name = "IPR-titan",
39 },
40};
41static void __init init_titan_irq(void) 15static void __init init_titan_irq(void)
42{ 16{
43 /* enable individual interrupt mode for externals */ 17 /* enable individual interrupt mode for externals */
44 ipr_irq_enable_irlm(); 18 plat_irq_setup_pins(IRQ_MODE_IRQ);
45 /* register ipr irqs */
46 register_ipr_controller(&ipr_irq_desc);
47} 19}
48 20
49static struct sh_machine_vector mv_titan __initmv = { 21static struct sh_machine_vector mv_titan __initmv = {
diff --git a/arch/sh/cchips/Kconfig b/arch/sh/cchips/Kconfig
index 2e516e9a6ede..7892361eedc8 100644
--- a/arch/sh/cchips/Kconfig
+++ b/arch/sh/cchips/Kconfig
@@ -1,18 +1,5 @@
1menu "Companion Chips" 1menu "Companion Chips"
2 2
3config VOYAGERGX
4 bool "VoyagerGX chip support"
5 depends on SH_RTS7751R2D
6 help
7 Selecting this option will support Silicon Motion, Inc. SM501.
8 Designed to complement needs for the embedded industry, it
9 provides video and 2D capability. To reduce system cost a
10 wide variety of include I/O is supported, including analog RGB
11 and digital LCD Panel interface, 8-bit parallel interface, USB,
12 UART, IrDA, Zoom Video, AC97 or I2S, SSP, PWM, and I2C. There
13 are additional GPIO bits that can be used to interface to
14 external as well.
15
16config HD6446X_SERIES 3config HD6446X_SERIES
17 bool 4 bool
18 5
diff --git a/arch/sh/cchips/hd6446x/hd64461.c b/arch/sh/cchips/hd6446x/hd64461.c
index 97f6512aa1b7..f1a4a0763c59 100644
--- a/arch/sh/cchips/hd6446x/hd64461.c
+++ b/arch/sh/cchips/hd6446x/hd64461.c
@@ -14,6 +14,9 @@
14#include <asm/irq.h> 14#include <asm/irq.h>
15#include <asm/hd64461.h> 15#include <asm/hd64461.h>
16 16
17/* This belongs in cpu specific */
18#define INTC_ICR1 0xA4140010UL
19
17static void disable_hd64461_irq(unsigned int irq) 20static void disable_hd64461_irq(unsigned int irq)
18{ 21{
19 unsigned short nimr; 22 unsigned short nimr;
@@ -121,10 +124,15 @@ int hd64461_irq_demux(int irq)
121 } 124 }
122 } 125 }
123 } 126 }
124 return __irq_demux(irq); 127 return irq;
125} 128}
126 129
127static struct irqaction irq0 = { hd64461_interrupt, IRQF_DISABLED, CPU_MASK_NONE, "HD64461", NULL, NULL }; 130static struct irqaction irq0 = {
131 .handler = hd64461_interrupt,
132 .flags = IRQF_DISABLED,
133 .mask = CPU_MASK_NONE,
134 .name = "HD64461",
135};
128 136
129int __init setup_hd64461(void) 137int __init setup_hd64461(void)
130{ 138{
@@ -143,6 +151,7 @@ int __init setup_hd64461(void)
143#endif 151#endif
144 outw(0xffff, HD64461_NIMR); 152 outw(0xffff, HD64461_NIMR);
145 153
154 /* IRQ 80 -> 95 belongs to HD64461 */
146 for (i = HD64461_IRQBASE; i < HD64461_IRQBASE + 16; i++) { 155 for (i = HD64461_IRQBASE; i < HD64461_IRQBASE + 16; i++) {
147 irq_desc[i].chip = &hd64461_irq_type; 156 irq_desc[i].chip = &hd64461_irq_type;
148 } 157 }
diff --git a/arch/sh/cchips/hd6446x/hd64465/setup.c b/arch/sh/cchips/hd6446x/hd64465/setup.c
index d126e1f30dee..5cef0db4018b 100644
--- a/arch/sh/cchips/hd6446x/hd64465/setup.c
+++ b/arch/sh/cchips/hd6446x/hd64465/setup.c
@@ -147,7 +147,12 @@ int hd64465_irq_demux(int irq)
147 return irq; 147 return irq;
148} 148}
149 149
150static struct irqaction irq0 = { hd64465_interrupt, IRQF_DISABLED, CPU_MASK_NONE, "HD64465", NULL, NULL}; 150static struct irqaction irq0 = {
151 .handler = hd64465_interrupt,
152 .flags = IRQF_DISABLED,
153 .mask = CPU_MASK_NONE,
154 .name = "HD64465",
155};
151 156
152 157
153static int __init setup_hd64465(void) 158static int __init setup_hd64465(void)
diff --git a/arch/sh/cchips/voyagergx/irq.c b/arch/sh/cchips/voyagergx/irq.c
index d70e5c8461b5..ade303876841 100644
--- a/arch/sh/cchips/voyagergx/irq.c
+++ b/arch/sh/cchips/voyagergx/irq.c
@@ -23,149 +23,79 @@
23#include <asm/voyagergx.h> 23#include <asm/voyagergx.h>
24#include <asm/rts7751r2d.h> 24#include <asm/rts7751r2d.h>
25 25
26static void disable_voyagergx_irq(unsigned int irq) 26enum {
27{ 27 UNUSED = 0,
28 unsigned long val; 28
29 unsigned long mask = 1 << (irq - VOYAGER_IRQ_BASE); 29 /* voyager specific interrupt sources */
30 30 UP, G54, G53, G52, G51, G50, G49, G48,
31 pr_debug("disable_voyagergx_irq(%d): mask=%lx\n", irq, mask); 31 I2C, PW, DMA, PCI, I2S, AC, US,
32 val = readl((void __iomem *)VOYAGER_INT_MASK); 32 U1, U0, CV, MC, S1, S0,
33 val &= ~mask; 33 UH, TWOD, ZD, PV, CI,
34 writel(val, (void __iomem *)VOYAGER_INT_MASK);
35}
36
37static void enable_voyagergx_irq(unsigned int irq)
38{
39 unsigned long val;
40 unsigned long mask = 1 << (irq - VOYAGER_IRQ_BASE);
41
42 pr_debug("disable_voyagergx_irq(%d): mask=%lx\n", irq, mask);
43 val = readl((void __iomem *)VOYAGER_INT_MASK);
44 val |= mask;
45 writel(val, (void __iomem *)VOYAGER_INT_MASK);
46}
47
48static void mask_and_ack_voyagergx(unsigned int irq)
49{
50 disable_voyagergx_irq(irq);
51}
52
53static void end_voyagergx_irq(unsigned int irq)
54{
55 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
56 enable_voyagergx_irq(irq);
57}
58
59static unsigned int startup_voyagergx_irq(unsigned int irq)
60{
61 enable_voyagergx_irq(irq);
62 return 0;
63}
64
65static void shutdown_voyagergx_irq(unsigned int irq)
66{
67 disable_voyagergx_irq(irq);
68}
69
70static struct hw_interrupt_type voyagergx_irq_type = {
71 .typename = "VOYAGERGX-IRQ",
72 .startup = startup_voyagergx_irq,
73 .shutdown = shutdown_voyagergx_irq,
74 .enable = enable_voyagergx_irq,
75 .disable = disable_voyagergx_irq,
76 .ack = mask_and_ack_voyagergx,
77 .end = end_voyagergx_irq,
78}; 34};
79 35
80static irqreturn_t voyagergx_interrupt(int irq, void *dev_id) 36static struct intc_vect vectors[] __initdata = {
81{ 37 INTC_IRQ(UP, IRQ_SM501_UP), INTC_IRQ(G54, IRQ_SM501_G54),
82 printk(KERN_INFO 38 INTC_IRQ(G53, IRQ_SM501_G53), INTC_IRQ(G52, IRQ_SM501_G52),
83 "VoyagerGX: spurious interrupt, status: 0x%x\n", 39 INTC_IRQ(G51, IRQ_SM501_G51), INTC_IRQ(G50, IRQ_SM501_G50),
84 (unsigned int)readl((void __iomem *)INT_STATUS)); 40 INTC_IRQ(G49, IRQ_SM501_G49), INTC_IRQ(G48, IRQ_SM501_G48),
85 return IRQ_HANDLED; 41 INTC_IRQ(I2C, IRQ_SM501_I2C), INTC_IRQ(PW, IRQ_SM501_PW),
86} 42 INTC_IRQ(DMA, IRQ_SM501_DMA), INTC_IRQ(PCI, IRQ_SM501_PCI),
87 43 INTC_IRQ(I2S, IRQ_SM501_I2S), INTC_IRQ(AC, IRQ_SM501_AC),
88static struct { 44 INTC_IRQ(US, IRQ_SM501_US), INTC_IRQ(U1, IRQ_SM501_U1),
89 int (*func)(int, void *); 45 INTC_IRQ(U0, IRQ_SM501_U0), INTC_IRQ(CV, IRQ_SM501_CV),
90 void *dev; 46 INTC_IRQ(MC, IRQ_SM501_MC), INTC_IRQ(S1, IRQ_SM501_S1),
91} voyagergx_demux[VOYAGER_IRQ_NUM]; 47 INTC_IRQ(S0, IRQ_SM501_S0), INTC_IRQ(UH, IRQ_SM501_UH),
48 INTC_IRQ(TWOD, IRQ_SM501_2D), INTC_IRQ(ZD, IRQ_SM501_ZD),
49 INTC_IRQ(PV, IRQ_SM501_PV), INTC_IRQ(CI, IRQ_SM501_CI),
50};
92 51
93void voyagergx_register_irq_demux(int irq, 52static struct intc_mask_reg mask_registers[] __initdata = {
94 int (*demux)(int irq, void *dev), void *dev) 53 { VOYAGER_INT_MASK, 0, 32, /* "Interrupt Mask", MMIO_base + 0x30 */
95{ 54 { UP, G54, G53, G52, G51, G50, G49, G48,
96 voyagergx_demux[irq - VOYAGER_IRQ_BASE].func = demux; 55 I2C, PW, 0, DMA, PCI, I2S, AC, US,
97 voyagergx_demux[irq - VOYAGER_IRQ_BASE].dev = dev; 56 0, 0, U1, U0, CV, MC, S1, S0,
98} 57 0, UH, 0, 0, TWOD, ZD, PV, CI } },
58};
99 59
100void voyagergx_unregister_irq_demux(int irq) 60static DECLARE_INTC_DESC(intc_desc, "voyagergx", vectors,
101{ 61 NULL, NULL, mask_registers, NULL, NULL);
102 voyagergx_demux[irq - VOYAGER_IRQ_BASE].func = 0; 62
103} 63static unsigned int voyagergx_stat2irq[32] = {
64 IRQ_SM501_CI, IRQ_SM501_PV, IRQ_SM501_ZD, IRQ_SM501_2D,
65 0, 0, IRQ_SM501_UH, 0,
66 IRQ_SM501_S0, IRQ_SM501_S1, IRQ_SM501_MC, IRQ_SM501_CV,
67 IRQ_SM501_U0, IRQ_SM501_U1, 0, 0,
68 IRQ_SM501_US, IRQ_SM501_AC, IRQ_SM501_I2S, IRQ_SM501_PCI,
69 IRQ_SM501_DMA, 0, IRQ_SM501_PW, IRQ_SM501_I2C,
70 IRQ_SM501_G48, IRQ_SM501_G49, IRQ_SM501_G50, IRQ_SM501_G51,
71 IRQ_SM501_G52, IRQ_SM501_G53, IRQ_SM501_G54, IRQ_SM501_UP
72};
104 73
105int voyagergx_irq_demux(int irq) 74static void voyagergx_irq_demux(unsigned int irq, struct irq_desc *desc)
106{ 75{
107 76 unsigned long intv = ctrl_inl(INT_STATUS);
108 if (irq == IRQ_VOYAGER ) { 77 struct irq_desc *ext_desc;
109 unsigned long i = 0, bit __attribute__ ((unused)); 78 unsigned int ext_irq;
110 unsigned long val = readl((void __iomem *)INT_STATUS); 79 unsigned int k = 0;
111 80
112 if (val & (1 << 1)) 81 while (intv) {
113 i = 1; 82 ext_irq = voyagergx_stat2irq[k];
114 else if (val & (1 << 2)) 83 if (ext_irq && (intv & 1)) {
115 i = 2; 84 ext_desc = irq_desc + ext_irq;
116 else if (val & (1 << 6)) 85 handle_level_irq(ext_irq, ext_desc);
117 i = 6;
118 else if (val & (1 << 10))
119 i = 10;
120 else if (val & (1 << 11))
121 i = 11;
122 else if (val & (1 << 12))
123 i = 12;
124 else if (val & (1 << 17))
125 i = 17;
126 else
127 printk("Unexpected IRQ irq = %d status = 0x%08lx\n", irq, val);
128 pr_debug("voyagergx_irq_demux %ld \n", i);
129 if (i < VOYAGER_IRQ_NUM) {
130 irq = VOYAGER_IRQ_BASE + i;
131 if (voyagergx_demux[i].func != 0)
132 irq = voyagergx_demux[i].func(irq,
133 voyagergx_demux[i].dev);
134 } 86 }
87 intv >>= 1;
88 k++;
135 } 89 }
136 return irq;
137} 90}
138 91
139static struct irqaction irq0 = {
140 .name = "voyagergx",
141 .handler = voyagergx_interrupt,
142 .flags = IRQF_DISABLED,
143 .mask = CPU_MASK_NONE,
144};
145
146void __init setup_voyagergx_irq(void) 92void __init setup_voyagergx_irq(void)
147{ 93{
148 int i, flag; 94 printk(KERN_INFO "VoyagerGX on irq %d (mapped into %d to %d)\n",
149
150 printk(KERN_INFO "VoyagerGX configured at 0x%x on irq %d(mapped into %d to %d)\n",
151 VOYAGER_BASE,
152 IRQ_VOYAGER, 95 IRQ_VOYAGER,
153 VOYAGER_IRQ_BASE, 96 VOYAGER_IRQ_BASE,
154 VOYAGER_IRQ_BASE + VOYAGER_IRQ_NUM - 1); 97 VOYAGER_IRQ_BASE + VOYAGER_IRQ_NUM - 1);
155 98
156 for (i=0; i<VOYAGER_IRQ_NUM; i++) { 99 register_intc_controller(&intc_desc);
157 flag = 0; 100 set_irq_chained_handler(IRQ_VOYAGER, voyagergx_irq_demux);
158 switch (VOYAGER_IRQ_BASE + i) {
159 case VOYAGER_USBH_IRQ:
160 case VOYAGER_8051_IRQ:
161 case VOYAGER_UART0_IRQ:
162 case VOYAGER_UART1_IRQ:
163 case VOYAGER_AC97_IRQ:
164 flag = 1;
165 }
166 if (flag == 1)
167 irq_desc[VOYAGER_IRQ_BASE + i].chip = &voyagergx_irq_type;
168 }
169
170 setup_irq(IRQ_VOYAGER, &irq0);
171} 101}
diff --git a/arch/sh/configs/dreamcast_defconfig b/arch/sh/configs/dreamcast_defconfig
index 3fdd270eecf7..57728788b753 100644
--- a/arch/sh/configs/dreamcast_defconfig
+++ b/arch/sh/configs/dreamcast_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.22-rc4 3# Linux kernel version: 2.6.23-rc7
4# Sat Jul 7 03:47:45 2007 4# Fri Sep 21 15:46:27 2007
5# 5#
6CONFIG_SUPERH=y 6CONFIG_SUPERH=y
7CONFIG_RWSEM_GENERIC_SPINLOCK=y 7CONFIG_RWSEM_GENERIC_SPINLOCK=y
@@ -18,30 +18,26 @@ CONFIG_STACKTRACE_SUPPORT=y
18CONFIG_LOCKDEP_SUPPORT=y 18CONFIG_LOCKDEP_SUPPORT=y
19# CONFIG_ARCH_HAS_ILOG2_U32 is not set 19# CONFIG_ARCH_HAS_ILOG2_U32 is not set
20# CONFIG_ARCH_HAS_ILOG2_U64 is not set 20# CONFIG_ARCH_HAS_ILOG2_U64 is not set
21CONFIG_ARCH_NO_VIRT_TO_BUS=y
21CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 22CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
22 23
23# 24#
24# Code maturity level options 25# General setup
25# 26#
26CONFIG_EXPERIMENTAL=y 27CONFIG_EXPERIMENTAL=y
27CONFIG_BROKEN_ON_SMP=y 28CONFIG_BROKEN_ON_SMP=y
28CONFIG_LOCK_KERNEL=y 29CONFIG_LOCK_KERNEL=y
29CONFIG_INIT_ENV_ARG_LIMIT=32 30CONFIG_INIT_ENV_ARG_LIMIT=32
30
31#
32# General setup
33#
34CONFIG_LOCALVERSION="" 31CONFIG_LOCALVERSION=""
35CONFIG_LOCALVERSION_AUTO=y 32CONFIG_LOCALVERSION_AUTO=y
36CONFIG_SWAP=y 33CONFIG_SWAP=y
37CONFIG_SYSVIPC=y 34CONFIG_SYSVIPC=y
38# CONFIG_IPC_NS is not set
39CONFIG_SYSVIPC_SYSCTL=y 35CONFIG_SYSVIPC_SYSCTL=y
40# CONFIG_POSIX_MQUEUE is not set 36# CONFIG_POSIX_MQUEUE is not set
41CONFIG_BSD_PROCESS_ACCT=y 37CONFIG_BSD_PROCESS_ACCT=y
42# CONFIG_BSD_PROCESS_ACCT_V3 is not set 38# CONFIG_BSD_PROCESS_ACCT_V3 is not set
43# CONFIG_TASKSTATS is not set 39# CONFIG_TASKSTATS is not set
44# CONFIG_UTS_NS is not set 40# CONFIG_USER_NS is not set
45# CONFIG_AUDIT is not set 41# CONFIG_AUDIT is not set
46# CONFIG_IKCONFIG is not set 42# CONFIG_IKCONFIG is not set
47CONFIG_LOG_BUF_SHIFT=14 43CONFIG_LOG_BUF_SHIFT=14
@@ -64,7 +60,6 @@ CONFIG_FUTEX=y
64CONFIG_ANON_INODES=y 60CONFIG_ANON_INODES=y
65CONFIG_EPOLL=y 61CONFIG_EPOLL=y
66CONFIG_SIGNALFD=y 62CONFIG_SIGNALFD=y
67CONFIG_TIMERFD=y
68CONFIG_EVENTFD=y 63CONFIG_EVENTFD=y
69CONFIG_SHMEM=y 64CONFIG_SHMEM=y
70CONFIG_VM_EVENT_COUNTERS=y 65CONFIG_VM_EVENT_COUNTERS=y
@@ -74,24 +69,17 @@ CONFIG_SLAB=y
74CONFIG_RT_MUTEXES=y 69CONFIG_RT_MUTEXES=y
75# CONFIG_TINY_SHMEM is not set 70# CONFIG_TINY_SHMEM is not set
76CONFIG_BASE_SMALL=0 71CONFIG_BASE_SMALL=0
77
78#
79# Loadable module support
80#
81CONFIG_MODULES=y 72CONFIG_MODULES=y
82CONFIG_MODULE_UNLOAD=y 73CONFIG_MODULE_UNLOAD=y
83# CONFIG_MODULE_FORCE_UNLOAD is not set 74# CONFIG_MODULE_FORCE_UNLOAD is not set
84# CONFIG_MODVERSIONS is not set 75# CONFIG_MODVERSIONS is not set
85# CONFIG_MODULE_SRCVERSION_ALL is not set 76# CONFIG_MODULE_SRCVERSION_ALL is not set
86CONFIG_KMOD=y 77CONFIG_KMOD=y
87
88#
89# Block layer
90#
91CONFIG_BLOCK=y 78CONFIG_BLOCK=y
92# CONFIG_LBD is not set 79# CONFIG_LBD is not set
93# CONFIG_BLK_DEV_IO_TRACE is not set 80# CONFIG_BLK_DEV_IO_TRACE is not set
94# CONFIG_LSF is not set 81# CONFIG_LSF is not set
82# CONFIG_BLK_DEV_BSG is not set
95 83
96# 84#
97# IO Schedulers 85# IO Schedulers
@@ -112,7 +100,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
112CONFIG_CPU_SH4=y 100CONFIG_CPU_SH4=y
113# CONFIG_CPU_SUBTYPE_SH7619 is not set 101# CONFIG_CPU_SUBTYPE_SH7619 is not set
114# CONFIG_CPU_SUBTYPE_SH7206 is not set 102# CONFIG_CPU_SUBTYPE_SH7206 is not set
115# CONFIG_CPU_SUBTYPE_SH7300 is not set
116# CONFIG_CPU_SUBTYPE_SH7705 is not set 103# CONFIG_CPU_SUBTYPE_SH7705 is not set
117# CONFIG_CPU_SUBTYPE_SH7706 is not set 104# CONFIG_CPU_SUBTYPE_SH7706 is not set
118# CONFIG_CPU_SUBTYPE_SH7707 is not set 105# CONFIG_CPU_SUBTYPE_SH7707 is not set
@@ -120,6 +107,7 @@ CONFIG_CPU_SH4=y
120# CONFIG_CPU_SUBTYPE_SH7709 is not set 107# CONFIG_CPU_SUBTYPE_SH7709 is not set
121# CONFIG_CPU_SUBTYPE_SH7710 is not set 108# CONFIG_CPU_SUBTYPE_SH7710 is not set
122# CONFIG_CPU_SUBTYPE_SH7712 is not set 109# CONFIG_CPU_SUBTYPE_SH7712 is not set
110# CONFIG_CPU_SUBTYPE_SH7720 is not set
123# CONFIG_CPU_SUBTYPE_SH7750 is not set 111# CONFIG_CPU_SUBTYPE_SH7750 is not set
124CONFIG_CPU_SUBTYPE_SH7091=y 112CONFIG_CPU_SUBTYPE_SH7091=y
125# CONFIG_CPU_SUBTYPE_SH7750R is not set 113# CONFIG_CPU_SUBTYPE_SH7750R is not set
@@ -134,7 +122,6 @@ CONFIG_CPU_SUBTYPE_SH7091=y
134# CONFIG_CPU_SUBTYPE_SH7780 is not set 122# CONFIG_CPU_SUBTYPE_SH7780 is not set
135# CONFIG_CPU_SUBTYPE_SH7785 is not set 123# CONFIG_CPU_SUBTYPE_SH7785 is not set
136# CONFIG_CPU_SUBTYPE_SHX3 is not set 124# CONFIG_CPU_SUBTYPE_SHX3 is not set
137# CONFIG_CPU_SUBTYPE_SH73180 is not set
138# CONFIG_CPU_SUBTYPE_SH7343 is not set 125# CONFIG_CPU_SUBTYPE_SH7343 is not set
139# CONFIG_CPU_SUBTYPE_SH7722 is not set 126# CONFIG_CPU_SUBTYPE_SH7722 is not set
140 127
@@ -177,7 +164,9 @@ CONFIG_NR_QUICK=2
177# Cache configuration 164# Cache configuration
178# 165#
179# CONFIG_SH_DIRECT_MAPPED is not set 166# CONFIG_SH_DIRECT_MAPPED is not set
180# CONFIG_SH_WRITETHROUGH is not set 167CONFIG_CACHE_WRITEBACK=y
168# CONFIG_CACHE_WRITETHROUGH is not set
169# CONFIG_CACHE_OFF is not set
181 170
182# 171#
183# Processor features 172# Processor features
@@ -185,12 +174,11 @@ CONFIG_NR_QUICK=2
185CONFIG_CPU_LITTLE_ENDIAN=y 174CONFIG_CPU_LITTLE_ENDIAN=y
186# CONFIG_CPU_BIG_ENDIAN is not set 175# CONFIG_CPU_BIG_ENDIAN is not set
187CONFIG_SH_FPU=y 176CONFIG_SH_FPU=y
188# CONFIG_SH_DSP is not set
189CONFIG_SH_STORE_QUEUES=y 177CONFIG_SH_STORE_QUEUES=y
190CONFIG_CPU_HAS_INTEVT=y 178CONFIG_CPU_HAS_INTEVT=y
191CONFIG_CPU_HAS_IPR_IRQ=y
192CONFIG_CPU_HAS_SR_RB=y 179CONFIG_CPU_HAS_SR_RB=y
193CONFIG_CPU_HAS_PTEA=y 180CONFIG_CPU_HAS_PTEA=y
181CONFIG_CPU_HAS_FPU=y
194 182
195# 183#
196# Board support 184# Board support
@@ -270,6 +258,7 @@ CONFIG_CMDLINE="console=ttySC1,115200 panic=3"
270# 258#
271# Bus options 259# Bus options
272# 260#
261CONFIG_MAPLE=y
273CONFIG_PCI=y 262CONFIG_PCI=y
274CONFIG_SH_PCIDMA_NONCOHERENT=y 263CONFIG_SH_PCIDMA_NONCOHERENT=y
275CONFIG_PCI_AUTO=y 264CONFIG_PCI_AUTO=y
@@ -368,6 +357,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
368# CONFIG_MAC80211 is not set 357# CONFIG_MAC80211 is not set
369# CONFIG_IEEE80211 is not set 358# CONFIG_IEEE80211 is not set
370# CONFIG_RFKILL is not set 359# CONFIG_RFKILL is not set
360# CONFIG_NET_9P is not set
371 361
372# 362#
373# Device Drivers 363# Device Drivers
@@ -380,27 +370,10 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
380CONFIG_PREVENT_FIRMWARE_BUILD=y 370CONFIG_PREVENT_FIRMWARE_BUILD=y
381# CONFIG_FW_LOADER is not set 371# CONFIG_FW_LOADER is not set
382# CONFIG_SYS_HYPERVISOR is not set 372# CONFIG_SYS_HYPERVISOR is not set
383
384#
385# Connector - unified userspace <-> kernelspace linker
386#
387# CONFIG_CONNECTOR is not set 373# CONFIG_CONNECTOR is not set
388# CONFIG_MTD is not set 374# CONFIG_MTD is not set
389
390#
391# Parallel port support
392#
393# CONFIG_PARPORT is not set 375# CONFIG_PARPORT is not set
394 376CONFIG_BLK_DEV=y
395#
396# Plug and Play support
397#
398# CONFIG_PNPACPI is not set
399
400#
401# Block devices
402#
403# CONFIG_BLK_CPQ_DA is not set
404# CONFIG_BLK_CPQ_CISS_DA is not set 377# CONFIG_BLK_CPQ_CISS_DA is not set
405# CONFIG_BLK_DEV_DAC960 is not set 378# CONFIG_BLK_DEV_DAC960 is not set
406# CONFIG_BLK_DEV_UMEM is not set 379# CONFIG_BLK_DEV_UMEM is not set
@@ -411,14 +384,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
411# CONFIG_BLK_DEV_RAM is not set 384# CONFIG_BLK_DEV_RAM is not set
412# CONFIG_CDROM_PKTCDVD is not set 385# CONFIG_CDROM_PKTCDVD is not set
413# CONFIG_ATA_OVER_ETH is not set 386# CONFIG_ATA_OVER_ETH is not set
414 387CONFIG_MISC_DEVICES=y
415#
416# Misc devices
417#
418# CONFIG_PHANTOM is not set 388# CONFIG_PHANTOM is not set
389# CONFIG_EEPROM_93CX6 is not set
419# CONFIG_SGI_IOC4 is not set 390# CONFIG_SGI_IOC4 is not set
420# CONFIG_TIFM_CORE is not set 391# CONFIG_TIFM_CORE is not set
421# CONFIG_BLINK is not set
422# CONFIG_IDE is not set 392# CONFIG_IDE is not set
423 393
424# 394#
@@ -426,12 +396,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
426# 396#
427# CONFIG_RAID_ATTRS is not set 397# CONFIG_RAID_ATTRS is not set
428# CONFIG_SCSI is not set 398# CONFIG_SCSI is not set
399# CONFIG_SCSI_DMA is not set
429# CONFIG_SCSI_NETLINK is not set 400# CONFIG_SCSI_NETLINK is not set
430# CONFIG_ATA is not set 401# CONFIG_ATA is not set
431
432#
433# Multi-device support (RAID and LVM)
434#
435# CONFIG_MD is not set 402# CONFIG_MD is not set
436 403
437# 404#
@@ -444,26 +411,16 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
444# 411#
445# CONFIG_FIREWIRE is not set 412# CONFIG_FIREWIRE is not set
446# CONFIG_IEEE1394 is not set 413# CONFIG_IEEE1394 is not set
447
448#
449# I2O device support
450#
451# CONFIG_I2O is not set 414# CONFIG_I2O is not set
452
453#
454# Network device support
455#
456CONFIG_NETDEVICES=y 415CONFIG_NETDEVICES=y
416# CONFIG_NETDEVICES_MULTIQUEUE is not set
457# CONFIG_DUMMY is not set 417# CONFIG_DUMMY is not set
458# CONFIG_BONDING is not set 418# CONFIG_BONDING is not set
419# CONFIG_MACVLAN is not set
459# CONFIG_EQUALIZER is not set 420# CONFIG_EQUALIZER is not set
460# CONFIG_TUN is not set 421# CONFIG_TUN is not set
461# CONFIG_ARCNET is not set 422# CONFIG_ARCNET is not set
462# CONFIG_PHYLIB is not set 423# CONFIG_PHYLIB is not set
463
464#
465# Ethernet (10 or 100Mbit)
466#
467CONFIG_NET_ETHERNET=y 424CONFIG_NET_ETHERNET=y
468CONFIG_MII=y 425CONFIG_MII=y
469# CONFIG_STNIC is not set 426# CONFIG_STNIC is not set
@@ -472,10 +429,6 @@ CONFIG_MII=y
472# CONFIG_CASSINI is not set 429# CONFIG_CASSINI is not set
473# CONFIG_NET_VENDOR_3COM is not set 430# CONFIG_NET_VENDOR_3COM is not set
474# CONFIG_SMC91X is not set 431# CONFIG_SMC91X is not set
475
476#
477# Tulip family network device support
478#
479# CONFIG_NET_TULIP is not set 432# CONFIG_NET_TULIP is not set
480# CONFIG_HP100 is not set 433# CONFIG_HP100 is not set
481CONFIG_NET_PCI=y 434CONFIG_NET_PCI=y
@@ -520,15 +473,7 @@ CONFIG_8139TOO=y
520# CONFIG_NETCONSOLE is not set 473# CONFIG_NETCONSOLE is not set
521# CONFIG_NETPOLL is not set 474# CONFIG_NETPOLL is not set
522# CONFIG_NET_POLL_CONTROLLER is not set 475# CONFIG_NET_POLL_CONTROLLER is not set
523
524#
525# ISDN subsystem
526#
527# CONFIG_ISDN is not set 476# CONFIG_ISDN is not set
528
529#
530# Telephony Support
531#
532# CONFIG_PHONE is not set 477# CONFIG_PHONE is not set
533 478
534# 479#
@@ -536,6 +481,7 @@ CONFIG_8139TOO=y
536# 481#
537CONFIG_INPUT=y 482CONFIG_INPUT=y
538# CONFIG_INPUT_FF_MEMLESS is not set 483# CONFIG_INPUT_FF_MEMLESS is not set
484# CONFIG_INPUT_POLLDEV is not set
539 485
540# 486#
541# Userland interfaces 487# Userland interfaces
@@ -606,10 +552,6 @@ CONFIG_SERIAL_CORE_CONSOLE=y
606CONFIG_UNIX98_PTYS=y 552CONFIG_UNIX98_PTYS=y
607CONFIG_LEGACY_PTYS=y 553CONFIG_LEGACY_PTYS=y
608CONFIG_LEGACY_PTY_COUNT=256 554CONFIG_LEGACY_PTY_COUNT=256
609
610#
611# IPMI
612#
613# CONFIG_IPMI_HANDLER is not set 555# CONFIG_IPMI_HANDLER is not set
614CONFIG_WATCHDOG=y 556CONFIG_WATCHDOG=y
615# CONFIG_WATCHDOG_NOWAYOUT is not set 557# CONFIG_WATCHDOG_NOWAYOUT is not set
@@ -631,10 +573,6 @@ CONFIG_HW_RANDOM=y
631# CONFIG_APPLICOM is not set 573# CONFIG_APPLICOM is not set
632# CONFIG_DRM is not set 574# CONFIG_DRM is not set
633# CONFIG_RAW_DRIVER is not set 575# CONFIG_RAW_DRIVER is not set
634
635#
636# TPM devices
637#
638# CONFIG_TCG_TPM is not set 576# CONFIG_TCG_TPM is not set
639CONFIG_DEVPORT=y 577CONFIG_DEVPORT=y
640# CONFIG_I2C is not set 578# CONFIG_I2C is not set
@@ -644,11 +582,8 @@ CONFIG_DEVPORT=y
644# 582#
645# CONFIG_SPI is not set 583# CONFIG_SPI is not set
646# CONFIG_SPI_MASTER is not set 584# CONFIG_SPI_MASTER is not set
647
648#
649# Dallas's 1-wire bus
650#
651# CONFIG_W1 is not set 585# CONFIG_W1 is not set
586# CONFIG_POWER_SUPPLY is not set
652# CONFIG_HWMON is not set 587# CONFIG_HWMON is not set
653 588
654# 589#
@@ -673,6 +608,7 @@ CONFIG_DEVPORT=y
673# 608#
674# CONFIG_DISPLAY_SUPPORT is not set 609# CONFIG_DISPLAY_SUPPORT is not set
675# CONFIG_VGASTATE is not set 610# CONFIG_VGASTATE is not set
611CONFIG_VIDEO_OUTPUT_CONTROL=m
676CONFIG_FB=y 612CONFIG_FB=y
677CONFIG_FIRMWARE_EDID=y 613CONFIG_FIRMWARE_EDID=y
678# CONFIG_FB_DDC is not set 614# CONFIG_FB_DDC is not set
@@ -699,7 +635,6 @@ CONFIG_FB_DEFERRED_IO=y
699# CONFIG_FB_ASILIANT is not set 635# CONFIG_FB_ASILIANT is not set
700# CONFIG_FB_IMSTT is not set 636# CONFIG_FB_IMSTT is not set
701CONFIG_FB_PVR2=y 637CONFIG_FB_PVR2=y
702# CONFIG_FB_EPSON1355 is not set
703# CONFIG_FB_S1D13XXX is not set 638# CONFIG_FB_S1D13XXX is not set
704# CONFIG_FB_NVIDIA is not set 639# CONFIG_FB_NVIDIA is not set
705# CONFIG_FB_RIVA is not set 640# CONFIG_FB_RIVA is not set
@@ -725,6 +660,7 @@ CONFIG_FB_PVR2=y
725# 660#
726CONFIG_DUMMY_CONSOLE=y 661CONFIG_DUMMY_CONSOLE=y
727CONFIG_FRAMEBUFFER_CONSOLE=y 662CONFIG_FRAMEBUFFER_CONSOLE=y
663# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
728# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set 664# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
729CONFIG_FONTS=y 665CONFIG_FONTS=y
730CONFIG_FONT_8x8=y 666CONFIG_FONT_8x8=y
@@ -749,16 +685,10 @@ CONFIG_LOGO_SUPERH_CLUT224=y
749# Sound 685# Sound
750# 686#
751# CONFIG_SOUND is not set 687# CONFIG_SOUND is not set
752 688CONFIG_HID_SUPPORT=y
753#
754# HID Devices
755#
756CONFIG_HID=y 689CONFIG_HID=y
757# CONFIG_HID_DEBUG is not set 690# CONFIG_HID_DEBUG is not set
758 691CONFIG_USB_SUPPORT=y
759#
760# USB support
761#
762CONFIG_USB_ARCH_HAS_HCD=y 692CONFIG_USB_ARCH_HAS_HCD=y
763CONFIG_USB_ARCH_HAS_OHCI=y 693CONFIG_USB_ARCH_HAS_OHCI=y
764CONFIG_USB_ARCH_HAS_EHCI=y 694CONFIG_USB_ARCH_HAS_EHCI=y
@@ -773,32 +703,8 @@ CONFIG_USB_ARCH_HAS_EHCI=y
773# 703#
774# CONFIG_USB_GADGET is not set 704# CONFIG_USB_GADGET is not set
775# CONFIG_MMC is not set 705# CONFIG_MMC is not set
776
777#
778# LED devices
779#
780# CONFIG_NEW_LEDS is not set 706# CONFIG_NEW_LEDS is not set
781
782#
783# LED drivers
784#
785
786#
787# LED Triggers
788#
789
790#
791# InfiniBand support
792#
793# CONFIG_INFINIBAND is not set 707# CONFIG_INFINIBAND is not set
794
795#
796# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
797#
798
799#
800# Real Time Clock
801#
802# CONFIG_RTC_CLASS is not set 708# CONFIG_RTC_CLASS is not set
803 709
804# 710#
@@ -815,6 +721,11 @@ CONFIG_USB_ARCH_HAS_EHCI=y
815# 721#
816 722
817# 723#
724# Userspace I/O
725#
726# CONFIG_UIO is not set
727
728#
818# File systems 729# File systems
819# 730#
820# CONFIG_EXT2_FS is not set 731# CONFIG_EXT2_FS is not set
@@ -890,7 +801,6 @@ CONFIG_RAMFS=y
890# CONFIG_NCP_FS is not set 801# CONFIG_NCP_FS is not set
891# CONFIG_CODA_FS is not set 802# CONFIG_CODA_FS is not set
892# CONFIG_AFS_FS is not set 803# CONFIG_AFS_FS is not set
893# CONFIG_9P_FS is not set
894 804
895# 805#
896# Partition Types 806# Partition Types
@@ -935,10 +845,6 @@ CONFIG_ENABLE_MUST_CHECK=y
935# 845#
936# CONFIG_KEYS is not set 846# CONFIG_KEYS is not set
937# CONFIG_SECURITY is not set 847# CONFIG_SECURITY is not set
938
939#
940# Cryptographic options
941#
942# CONFIG_CRYPTO is not set 848# CONFIG_CRYPTO is not set
943 849
944# 850#
@@ -949,6 +855,7 @@ CONFIG_BITREVERSE=y
949# CONFIG_CRC16 is not set 855# CONFIG_CRC16 is not set
950# CONFIG_CRC_ITU_T is not set 856# CONFIG_CRC_ITU_T is not set
951CONFIG_CRC32=y 857CONFIG_CRC32=y
858# CONFIG_CRC7 is not set
952# CONFIG_LIBCRC32C is not set 859# CONFIG_LIBCRC32C is not set
953CONFIG_PLIST=y 860CONFIG_PLIST=y
954CONFIG_HAS_IOMEM=y 861CONFIG_HAS_IOMEM=y
diff --git a/arch/sh/configs/hp6xx_defconfig b/arch/sh/configs/hp6xx_defconfig
index b931d9b2d579..756d38dc2f71 100644
--- a/arch/sh/configs/hp6xx_defconfig
+++ b/arch/sh/configs/hp6xx_defconfig
@@ -1,37 +1,47 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.18 3# Linux kernel version: 2.6.23-rc4
4# Tue Oct 3 11:10:06 2006 4# Tue Sep 11 19:42:44 2007
5# 5#
6CONFIG_SUPERH=y 6CONFIG_SUPERH=y
7CONFIG_RWSEM_GENERIC_SPINLOCK=y 7CONFIG_RWSEM_GENERIC_SPINLOCK=y
8CONFIG_GENERIC_BUG=y
8CONFIG_GENERIC_FIND_NEXT_BIT=y 9CONFIG_GENERIC_FIND_NEXT_BIT=y
9CONFIG_GENERIC_HWEIGHT=y 10CONFIG_GENERIC_HWEIGHT=y
10CONFIG_GENERIC_HARDIRQS=y 11CONFIG_GENERIC_HARDIRQS=y
11CONFIG_GENERIC_IRQ_PROBE=y 12CONFIG_GENERIC_IRQ_PROBE=y
12CONFIG_GENERIC_CALIBRATE_DELAY=y 13CONFIG_GENERIC_CALIBRATE_DELAY=y
14CONFIG_GENERIC_TIME=y
15CONFIG_GENERIC_CLOCKEVENTS=y
16CONFIG_SYS_SUPPORTS_PM=y
17CONFIG_SYS_SUPPORTS_APM_EMULATION=y
18CONFIG_STACKTRACE_SUPPORT=y
19CONFIG_LOCKDEP_SUPPORT=y
20# CONFIG_ARCH_HAS_ILOG2_U32 is not set
21# CONFIG_ARCH_HAS_ILOG2_U64 is not set
22CONFIG_ARCH_NO_VIRT_TO_BUS=y
13CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 23CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
14 24
15# 25#
16# Code maturity level options 26# General setup
17# 27#
18CONFIG_EXPERIMENTAL=y 28CONFIG_EXPERIMENTAL=y
19CONFIG_BROKEN_ON_SMP=y 29CONFIG_BROKEN_ON_SMP=y
20CONFIG_INIT_ENV_ARG_LIMIT=32 30CONFIG_INIT_ENV_ARG_LIMIT=32
21
22#
23# General setup
24#
25CONFIG_LOCALVERSION="" 31CONFIG_LOCALVERSION=""
26CONFIG_LOCALVERSION_AUTO=y 32CONFIG_LOCALVERSION_AUTO=y
27CONFIG_SWAP=y 33CONFIG_SWAP=y
28# CONFIG_SYSVIPC is not set 34# CONFIG_SYSVIPC is not set
29# CONFIG_BSD_PROCESS_ACCT is not set 35CONFIG_BSD_PROCESS_ACCT=y
30# CONFIG_UTS_NS is not set 36# CONFIG_BSD_PROCESS_ACCT_V3 is not set
31# CONFIG_IKCONFIG is not set 37# CONFIG_USER_NS is not set
38CONFIG_IKCONFIG=y
39CONFIG_IKCONFIG_PROC=y
40CONFIG_LOG_BUF_SHIFT=14
41CONFIG_SYSFS_DEPRECATED=y
32# CONFIG_RELAY is not set 42# CONFIG_RELAY is not set
33CONFIG_INITRAMFS_SOURCE="" 43# CONFIG_BLK_DEV_INITRD is not set
34CONFIG_CC_OPTIMIZE_FOR_SIZE=y 44# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
35CONFIG_SYSCTL=y 45CONFIG_SYSCTL=y
36CONFIG_EMBEDDED=y 46CONFIG_EMBEDDED=y
37CONFIG_UID16=y 47CONFIG_UID16=y
@@ -44,27 +54,25 @@ CONFIG_BUG=y
44CONFIG_ELF_CORE=y 54CONFIG_ELF_CORE=y
45CONFIG_BASE_FULL=y 55CONFIG_BASE_FULL=y
46CONFIG_FUTEX=y 56CONFIG_FUTEX=y
57CONFIG_ANON_INODES=y
47CONFIG_EPOLL=y 58CONFIG_EPOLL=y
59CONFIG_SIGNALFD=y
60CONFIG_TIMERFD=y
61CONFIG_EVENTFD=y
48CONFIG_SHMEM=y 62CONFIG_SHMEM=y
49CONFIG_SLAB=y
50CONFIG_VM_EVENT_COUNTERS=y 63CONFIG_VM_EVENT_COUNTERS=y
64CONFIG_SLAB=y
65# CONFIG_SLUB is not set
66# CONFIG_SLOB is not set
51CONFIG_RT_MUTEXES=y 67CONFIG_RT_MUTEXES=y
52# CONFIG_TINY_SHMEM is not set 68# CONFIG_TINY_SHMEM is not set
53CONFIG_BASE_SMALL=0 69CONFIG_BASE_SMALL=0
54# CONFIG_SLOB is not set
55
56#
57# Loadable module support
58#
59# CONFIG_MODULES is not set 70# CONFIG_MODULES is not set
60
61#
62# Block layer
63#
64CONFIG_BLOCK=y 71CONFIG_BLOCK=y
65# CONFIG_LBD is not set 72# CONFIG_LBD is not set
66# CONFIG_BLK_DEV_IO_TRACE is not set 73# CONFIG_BLK_DEV_IO_TRACE is not set
67# CONFIG_LSF is not set 74# CONFIG_LSF is not set
75# CONFIG_BLK_DEV_BSG is not set
68 76
69# 77#
70# IO Schedulers 78# IO Schedulers
@@ -82,55 +90,17 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
82# 90#
83# System type 91# System type
84# 92#
85# CONFIG_SH_SOLUTION_ENGINE is not set
86# CONFIG_SH_7751_SOLUTION_ENGINE is not set
87# CONFIG_SH_7300_SOLUTION_ENGINE is not set
88# CONFIG_SH_7343_SOLUTION_ENGINE is not set
89# CONFIG_SH_73180_SOLUTION_ENGINE is not set
90# CONFIG_SH_7751_SYSTEMH is not set
91CONFIG_SH_HP6XX=y
92# CONFIG_SH_EC3104 is not set
93# CONFIG_SH_SATURN is not set
94# CONFIG_SH_DREAMCAST is not set
95# CONFIG_SH_BIGSUR is not set
96# CONFIG_SH_MPC1211 is not set
97# CONFIG_SH_SH03 is not set
98# CONFIG_SH_SECUREEDGE5410 is not set
99# CONFIG_SH_HS7751RVOIP is not set
100# CONFIG_SH_7710VOIPGW is not set
101# CONFIG_SH_RTS7751R2D is not set
102# CONFIG_SH_R7780RP is not set
103# CONFIG_SH_EDOSK7705 is not set
104# CONFIG_SH_SH4202_MICRODEV is not set
105# CONFIG_SH_LANDISK is not set
106# CONFIG_SH_TITAN is not set
107# CONFIG_SH_SHMIN is not set
108# CONFIG_SH_UNKNOWN is not set
109
110#
111# Processor selection
112#
113CONFIG_CPU_SH3=y 93CONFIG_CPU_SH3=y
114 94# CONFIG_CPU_SUBTYPE_SH7619 is not set
115# 95# CONFIG_CPU_SUBTYPE_SH7206 is not set
116# SH-2 Processor Support
117#
118# CONFIG_CPU_SUBTYPE_SH7604 is not set
119
120#
121# SH-3 Processor Support
122#
123# CONFIG_CPU_SUBTYPE_SH7300 is not set
124# CONFIG_CPU_SUBTYPE_SH7705 is not set 96# CONFIG_CPU_SUBTYPE_SH7705 is not set
125# CONFIG_CPU_SUBTYPE_SH7706 is not set 97# CONFIG_CPU_SUBTYPE_SH7706 is not set
126# CONFIG_CPU_SUBTYPE_SH7707 is not set 98# CONFIG_CPU_SUBTYPE_SH7707 is not set
127# CONFIG_CPU_SUBTYPE_SH7708 is not set 99# CONFIG_CPU_SUBTYPE_SH7708 is not set
128CONFIG_CPU_SUBTYPE_SH7709=y 100CONFIG_CPU_SUBTYPE_SH7709=y
129# CONFIG_CPU_SUBTYPE_SH7710 is not set 101# CONFIG_CPU_SUBTYPE_SH7710 is not set
130 102# CONFIG_CPU_SUBTYPE_SH7712 is not set
131# 103# CONFIG_CPU_SUBTYPE_SH7720 is not set
132# SH-4 Processor Support
133#
134# CONFIG_CPU_SUBTYPE_SH7750 is not set 104# CONFIG_CPU_SUBTYPE_SH7750 is not set
135# CONFIG_CPU_SUBTYPE_SH7091 is not set 105# CONFIG_CPU_SUBTYPE_SH7091 is not set
136# CONFIG_CPU_SUBTYPE_SH7750R is not set 106# CONFIG_CPU_SUBTYPE_SH7750R is not set
@@ -139,66 +109,78 @@ CONFIG_CPU_SUBTYPE_SH7709=y
139# CONFIG_CPU_SUBTYPE_SH7751R is not set 109# CONFIG_CPU_SUBTYPE_SH7751R is not set
140# CONFIG_CPU_SUBTYPE_SH7760 is not set 110# CONFIG_CPU_SUBTYPE_SH7760 is not set
141# CONFIG_CPU_SUBTYPE_SH4_202 is not set 111# CONFIG_CPU_SUBTYPE_SH4_202 is not set
142
143#
144# ST40 Processor Support
145#
146# CONFIG_CPU_SUBTYPE_ST40STB1 is not set 112# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
147# CONFIG_CPU_SUBTYPE_ST40GX1 is not set 113# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
148
149#
150# SH-4A Processor Support
151#
152# CONFIG_CPU_SUBTYPE_SH7770 is not set 114# CONFIG_CPU_SUBTYPE_SH7770 is not set
153# CONFIG_CPU_SUBTYPE_SH7780 is not set 115# CONFIG_CPU_SUBTYPE_SH7780 is not set
154 116# CONFIG_CPU_SUBTYPE_SH7785 is not set
155# 117# CONFIG_CPU_SUBTYPE_SHX3 is not set
156# SH4AL-DSP Processor Support
157#
158# CONFIG_CPU_SUBTYPE_SH73180 is not set
159# CONFIG_CPU_SUBTYPE_SH7343 is not set 118# CONFIG_CPU_SUBTYPE_SH7343 is not set
119# CONFIG_CPU_SUBTYPE_SH7722 is not set
160 120
161# 121#
162# Memory management options 122# Memory management options
163# 123#
124CONFIG_QUICKLIST=y
164CONFIG_MMU=y 125CONFIG_MMU=y
165CONFIG_PAGE_OFFSET=0x80000000 126CONFIG_PAGE_OFFSET=0x80000000
166CONFIG_MEMORY_START=0x0c000000 127CONFIG_MEMORY_START=0x0d000000
167CONFIG_MEMORY_SIZE=0x00400000 128CONFIG_MEMORY_SIZE=0x00400000
168CONFIG_VSYSCALL=y 129CONFIG_VSYSCALL=y
130CONFIG_ARCH_FLATMEM_ENABLE=y
131CONFIG_ARCH_SPARSEMEM_ENABLE=y
132CONFIG_ARCH_SPARSEMEM_DEFAULT=y
133CONFIG_MAX_ACTIVE_REGIONS=1
134CONFIG_ARCH_POPULATES_NODE_MAP=y
135CONFIG_ARCH_SELECT_MEMORY_MODEL=y
136CONFIG_PAGE_SIZE_4KB=y
137# CONFIG_PAGE_SIZE_8KB is not set
138# CONFIG_PAGE_SIZE_64KB is not set
169CONFIG_SELECT_MEMORY_MODEL=y 139CONFIG_SELECT_MEMORY_MODEL=y
170CONFIG_FLATMEM_MANUAL=y 140CONFIG_FLATMEM_MANUAL=y
171# CONFIG_DISCONTIGMEM_MANUAL is not set 141# CONFIG_DISCONTIGMEM_MANUAL is not set
172# CONFIG_SPARSEMEM_MANUAL is not set 142# CONFIG_SPARSEMEM_MANUAL is not set
173CONFIG_FLATMEM=y 143CONFIG_FLATMEM=y
174CONFIG_FLAT_NODE_MEM_MAP=y 144CONFIG_FLAT_NODE_MEM_MAP=y
175# CONFIG_SPARSEMEM_STATIC is not set 145CONFIG_SPARSEMEM_STATIC=y
176CONFIG_SPLIT_PTLOCK_CPUS=4 146CONFIG_SPLIT_PTLOCK_CPUS=4
177# CONFIG_RESOURCES_64BIT is not set 147# CONFIG_RESOURCES_64BIT is not set
148CONFIG_ZONE_DMA_FLAG=0
149CONFIG_NR_QUICK=2
178 150
179# 151#
180# Cache configuration 152# Cache configuration
181# 153#
182# CONFIG_SH_DIRECT_MAPPED is not set 154# CONFIG_SH_DIRECT_MAPPED is not set
183# CONFIG_SH_WRITETHROUGH is not set 155CONFIG_CACHE_WRITEBACK=y
184# CONFIG_SH_OCRAM is not set 156# CONFIG_CACHE_WRITETHROUGH is not set
157# CONFIG_CACHE_OFF is not set
185 158
186# 159#
187# Processor features 160# Processor features
188# 161#
189CONFIG_CPU_LITTLE_ENDIAN=y 162CONFIG_CPU_LITTLE_ENDIAN=y
163# CONFIG_CPU_BIG_ENDIAN is not set
190# CONFIG_SH_FPU_EMU is not set 164# CONFIG_SH_FPU_EMU is not set
191# CONFIG_SH_DSP is not set
192CONFIG_SH_ADC=y 165CONFIG_SH_ADC=y
193CONFIG_CPU_HAS_INTEVT=y 166CONFIG_CPU_HAS_INTEVT=y
194CONFIG_CPU_HAS_PINT_IRQ=y
195CONFIG_CPU_HAS_SR_RB=y 167CONFIG_CPU_HAS_SR_RB=y
196 168
197# 169#
198# Timer support 170# Board support
171#
172# CONFIG_SH_SOLUTION_ENGINE is not set
173CONFIG_SH_HP6XX=y
174
175#
176# Timer and clock configuration
199# 177#
200CONFIG_SH_TMU=y 178CONFIG_SH_TMU=y
179CONFIG_SH_TIMER_IRQ=16
201CONFIG_SH_PCLK_FREQ=22110000 180CONFIG_SH_PCLK_FREQ=22110000
181# CONFIG_TICK_ONESHOT is not set
182# CONFIG_NO_HZ is not set
183# CONFIG_HIGH_RES_TIMERS is not set
202 184
203# 185#
204# CPU Frequency scaling 186# CPU Frequency scaling
@@ -208,6 +190,7 @@ CONFIG_SH_PCLK_FREQ=22110000
208# 190#
209# DMA support 191# DMA support
210# 192#
193CONFIG_SH_DMA_API=y
211CONFIG_SH_DMA=y 194CONFIG_SH_DMA=y
212CONFIG_NR_ONCHIP_DMA_CHANNELS=4 195CONFIG_NR_ONCHIP_DMA_CHANNELS=4
213# CONFIG_NR_DMA_CHANNELS_BOOL is not set 196# CONFIG_NR_DMA_CHANNELS_BOOL is not set
@@ -223,14 +206,21 @@ CONFIG_HD64461_IOBASE=0xb0000000
223CONFIG_HD64461_ENABLER=y 206CONFIG_HD64461_ENABLER=y
224 207
225# 208#
209# Additional SuperH Device Drivers
210#
211# CONFIG_HEARTBEAT is not set
212# CONFIG_PUSH_SWITCH is not set
213
214#
226# Kernel features 215# Kernel features
227# 216#
228# CONFIG_HZ_100 is not set 217# CONFIG_HZ_100 is not set
229CONFIG_HZ_250=y 218CONFIG_HZ_250=y
219# CONFIG_HZ_300 is not set
230# CONFIG_HZ_1000 is not set 220# CONFIG_HZ_1000 is not set
231CONFIG_HZ=250 221CONFIG_HZ=250
232# CONFIG_KEXEC is not set 222# CONFIG_KEXEC is not set
233# CONFIG_SMP is not set 223# CONFIG_CRASH_DUMP is not set
234CONFIG_PREEMPT_NONE=y 224CONFIG_PREEMPT_NONE=y
235# CONFIG_PREEMPT_VOLUNTARY is not set 225# CONFIG_PREEMPT_VOLUNTARY is not set
236# CONFIG_PREEMPT is not set 226# CONFIG_PREEMPT is not set
@@ -240,14 +230,13 @@ CONFIG_PREEMPT_NONE=y
240# 230#
241CONFIG_ZERO_PAGE_OFFSET=0x00001000 231CONFIG_ZERO_PAGE_OFFSET=0x00001000
242CONFIG_BOOT_LINK_OFFSET=0x00800000 232CONFIG_BOOT_LINK_OFFSET=0x00800000
243# CONFIG_UBC_WAKEUP is not set
244# CONFIG_CMDLINE_BOOL is not set 233# CONFIG_CMDLINE_BOOL is not set
245 234
246# 235#
247# Bus options 236# Bus options
248# 237#
249CONFIG_ISA=y 238CONFIG_ISA=y
250# CONFIG_PCI is not set 239# CONFIG_ARCH_SUPPORTS_MSI is not set
251 240
252# 241#
253# PCCARD (PCMCIA/CardBus) support 242# PCCARD (PCMCIA/CardBus) support
@@ -266,14 +255,9 @@ CONFIG_PCMCIA_IOCTL=y
266CONFIG_PCMCIA_PROBE=y 255CONFIG_PCMCIA_PROBE=y
267 256
268# 257#
269# PCI Hotplug Support
270#
271
272#
273# Executable file formats 258# Executable file formats
274# 259#
275CONFIG_BINFMT_ELF=y 260CONFIG_BINFMT_ELF=y
276# CONFIG_BINFMT_FLAT is not set
277# CONFIG_BINFMT_MISC is not set 261# CONFIG_BINFMT_MISC is not set
278 262
279# 263#
@@ -282,8 +266,9 @@ CONFIG_BINFMT_ELF=y
282CONFIG_PM=y 266CONFIG_PM=y
283CONFIG_PM_LEGACY=y 267CONFIG_PM_LEGACY=y
284# CONFIG_PM_DEBUG is not set 268# CONFIG_PM_DEBUG is not set
285# CONFIG_PM_SYSFS_DEPRECATED is not set 269CONFIG_PM_SLEEP=y
286CONFIG_APM=y 270CONFIG_SUSPEND=y
271CONFIG_APM_EMULATION=y
287 272
288# 273#
289# Networking 274# Networking
@@ -301,109 +286,76 @@ CONFIG_APM=y
301CONFIG_PREVENT_FIRMWARE_BUILD=y 286CONFIG_PREVENT_FIRMWARE_BUILD=y
302CONFIG_FW_LOADER=y 287CONFIG_FW_LOADER=y
303# CONFIG_SYS_HYPERVISOR is not set 288# CONFIG_SYS_HYPERVISOR is not set
304
305#
306# Connector - unified userspace <-> kernelspace linker
307#
308
309#
310# Memory Technology Devices (MTD)
311#
312# CONFIG_MTD is not set 289# CONFIG_MTD is not set
313
314#
315# Parallel port support
316#
317# CONFIG_PARPORT is not set 290# CONFIG_PARPORT is not set
318
319#
320# Plug and Play support
321#
322# CONFIG_PNP is not set 291# CONFIG_PNP is not set
323 292CONFIG_BLK_DEV=y
324#
325# Block devices
326#
327# CONFIG_BLK_DEV_COW_COMMON is not set 293# CONFIG_BLK_DEV_COW_COMMON is not set
328# CONFIG_BLK_DEV_LOOP is not set 294# CONFIG_BLK_DEV_LOOP is not set
329CONFIG_BLK_DEV_RAM=y 295# CONFIG_BLK_DEV_RAM is not set
330CONFIG_BLK_DEV_RAM_COUNT=16
331CONFIG_BLK_DEV_RAM_SIZE=4096
332CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
333CONFIG_BLK_DEV_INITRD=y
334# CONFIG_CDROM_PKTCDVD is not set 296# CONFIG_CDROM_PKTCDVD is not set
335 297CONFIG_MISC_DEVICES=y
336# 298# CONFIG_EEPROM_93CX6 is not set
337# ATA/ATAPI/MFM/RLL support 299# CONFIG_IDE is not set
338#
339CONFIG_IDE=y
340CONFIG_IDE_MAX_HWIFS=4
341CONFIG_BLK_DEV_IDE=y
342
343#
344# Please see Documentation/ide.txt for help/info on IDE drives
345#
346# CONFIG_BLK_DEV_IDE_SATA is not set
347CONFIG_BLK_DEV_IDEDISK=y
348# CONFIG_IDEDISK_MULTI_MODE is not set
349CONFIG_BLK_DEV_IDECS=y
350# CONFIG_BLK_DEV_IDECD is not set
351# CONFIG_BLK_DEV_IDETAPE is not set
352# CONFIG_BLK_DEV_IDEFLOPPY is not set
353# CONFIG_IDE_TASK_IOCTL is not set
354
355#
356# IDE chipset support/bugfixes
357#
358CONFIG_IDE_GENERIC=y
359# CONFIG_IDE_ARM is not set
360# CONFIG_IDE_CHIPSETS is not set
361# CONFIG_BLK_DEV_IDEDMA is not set
362# CONFIG_IDEDMA_AUTO is not set
363# CONFIG_BLK_DEV_HD is not set
364 300
365# 301#
366# SCSI device support 302# SCSI device support
367# 303#
368# CONFIG_RAID_ATTRS is not set 304# CONFIG_RAID_ATTRS is not set
369# CONFIG_SCSI is not set 305CONFIG_SCSI=y
306CONFIG_SCSI_DMA=y
307# CONFIG_SCSI_TGT is not set
370# CONFIG_SCSI_NETLINK is not set 308# CONFIG_SCSI_NETLINK is not set
371 309CONFIG_SCSI_PROC_FS=y
372# 310
373# Serial ATA (prod) and Parallel ATA (experimental) drivers 311#
374# 312# SCSI support type (disk, tape, CD-ROM)
375# CONFIG_ATA is not set 313#
376 314CONFIG_BLK_DEV_SD=y
377# 315# CONFIG_CHR_DEV_ST is not set
378# Old CD-ROM drivers (not SCSI, not IDE) 316# CONFIG_CHR_DEV_OSST is not set
379# 317# CONFIG_BLK_DEV_SR is not set
380# CONFIG_CD_NO_IDESCSI is not set 318# CONFIG_CHR_DEV_SG is not set
381 319# CONFIG_CHR_DEV_SCH is not set
382# 320
383# Multi-device support (RAID and LVM) 321#
384# 322# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
323#
324# CONFIG_SCSI_MULTI_LUN is not set
325# CONFIG_SCSI_CONSTANTS is not set
326# CONFIG_SCSI_LOGGING is not set
327# CONFIG_SCSI_SCAN_ASYNC is not set
328
329#
330# SCSI Transports
331#
332# CONFIG_SCSI_SPI_ATTRS is not set
333# CONFIG_SCSI_FC_ATTRS is not set
334# CONFIG_SCSI_SAS_LIBSAS is not set
335CONFIG_SCSI_LOWLEVEL=y
336# CONFIG_SCSI_AHA152X is not set
337# CONFIG_SCSI_AIC7XXX_OLD is not set
338# CONFIG_SCSI_IN2000 is not set
339# CONFIG_SCSI_DTC3280 is not set
340# CONFIG_SCSI_FUTURE_DOMAIN is not set
341# CONFIG_SCSI_GENERIC_NCR5380 is not set
342# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
343# CONFIG_SCSI_NCR53C406A is not set
344# CONFIG_SCSI_PAS16 is not set
345# CONFIG_SCSI_PSI240I is not set
346# CONFIG_SCSI_QLOGIC_FAS is not set
347# CONFIG_SCSI_SYM53C416 is not set
348# CONFIG_SCSI_T128 is not set
349# CONFIG_SCSI_DEBUG is not set
350# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
351CONFIG_ATA=y
352# CONFIG_ATA_NONSTANDARD is not set
353# CONFIG_PATA_LEGACY is not set
354# CONFIG_PATA_PCMCIA is not set
355# CONFIG_PATA_QDI is not set
356# CONFIG_PATA_WINBOND_VLB is not set
357CONFIG_PATA_PLATFORM=y
385# CONFIG_MD is not set 358# CONFIG_MD is not set
386
387#
388# Fusion MPT device support
389#
390# CONFIG_FUSION is not set
391
392#
393# IEEE 1394 (FireWire) support
394#
395
396#
397# I2O device support
398#
399
400#
401# ISDN subsystem
402#
403
404#
405# Telephony Support
406#
407# CONFIG_PHONE is not set 359# CONFIG_PHONE is not set
408 360
409# 361#
@@ -411,19 +363,17 @@ CONFIG_IDE_GENERIC=y
411# 363#
412CONFIG_INPUT=y 364CONFIG_INPUT=y
413# CONFIG_INPUT_FF_MEMLESS is not set 365# CONFIG_INPUT_FF_MEMLESS is not set
366CONFIG_INPUT_POLLDEV=y
414 367
415# 368#
416# Userland interfaces 369# Userland interfaces
417# 370#
418CONFIG_INPUT_MOUSEDEV=y 371# CONFIG_INPUT_MOUSEDEV is not set
419CONFIG_INPUT_MOUSEDEV_PSAUX=y
420CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
421CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
422# CONFIG_INPUT_JOYDEV is not set 372# CONFIG_INPUT_JOYDEV is not set
423CONFIG_INPUT_TSDEV=y 373CONFIG_INPUT_TSDEV=y
424CONFIG_INPUT_TSDEV_SCREEN_X=240 374CONFIG_INPUT_TSDEV_SCREEN_X=240
425CONFIG_INPUT_TSDEV_SCREEN_Y=320 375CONFIG_INPUT_TSDEV_SCREEN_Y=320
426# CONFIG_INPUT_EVDEV is not set 376CONFIG_INPUT_EVDEV=y
427# CONFIG_INPUT_EVBUG is not set 377# CONFIG_INPUT_EVBUG is not set
428 378
429# 379#
@@ -436,9 +386,12 @@ CONFIG_INPUT_KEYBOARD=y
436# CONFIG_KEYBOARD_XTKBD is not set 386# CONFIG_KEYBOARD_XTKBD is not set
437# CONFIG_KEYBOARD_NEWTON is not set 387# CONFIG_KEYBOARD_NEWTON is not set
438# CONFIG_KEYBOARD_STOWAWAY is not set 388# CONFIG_KEYBOARD_STOWAWAY is not set
389CONFIG_KEYBOARD_HP6XX=y
439# CONFIG_INPUT_MOUSE is not set 390# CONFIG_INPUT_MOUSE is not set
440# CONFIG_INPUT_JOYSTICK is not set 391# CONFIG_INPUT_JOYSTICK is not set
392# CONFIG_INPUT_TABLET is not set
441CONFIG_INPUT_TOUCHSCREEN=y 393CONFIG_INPUT_TOUCHSCREEN=y
394# CONFIG_TOUCHSCREEN_FUJITSU is not set
442# CONFIG_TOUCHSCREEN_GUNZE is not set 395# CONFIG_TOUCHSCREEN_GUNZE is not set
443# CONFIG_TOUCHSCREEN_ELO is not set 396# CONFIG_TOUCHSCREEN_ELO is not set
444# CONFIG_TOUCHSCREEN_MTOUCH is not set 397# CONFIG_TOUCHSCREEN_MTOUCH is not set
@@ -447,6 +400,7 @@ CONFIG_TOUCHSCREEN_HP600=y
447# CONFIG_TOUCHSCREEN_PENMOUNT is not set 400# CONFIG_TOUCHSCREEN_PENMOUNT is not set
448# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set 401# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
449# CONFIG_TOUCHSCREEN_TOUCHWIN is not set 402# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
403# CONFIG_TOUCHSCREEN_UCB1400 is not set
450# CONFIG_INPUT_MISC is not set 404# CONFIG_INPUT_MISC is not set
451 405
452# 406#
@@ -476,46 +430,29 @@ CONFIG_HW_CONSOLE=y
476# 430#
477# Non-8250 serial port support 431# Non-8250 serial port support
478# 432#
479# CONFIG_SERIAL_SH_SCI is not set 433CONFIG_SERIAL_SH_SCI=y
434CONFIG_SERIAL_SH_SCI_NR_UARTS=3
435CONFIG_SERIAL_SH_SCI_CONSOLE=y
436CONFIG_SERIAL_CORE=y
437CONFIG_SERIAL_CORE_CONSOLE=y
480CONFIG_UNIX98_PTYS=y 438CONFIG_UNIX98_PTYS=y
481CONFIG_LEGACY_PTYS=y 439CONFIG_LEGACY_PTYS=y
482CONFIG_LEGACY_PTY_COUNT=256 440CONFIG_LEGACY_PTY_COUNT=64
483
484#
485# IPMI
486#
487# CONFIG_IPMI_HANDLER is not set 441# CONFIG_IPMI_HANDLER is not set
488
489#
490# Watchdog Cards
491#
492# CONFIG_WATCHDOG is not set 442# CONFIG_WATCHDOG is not set
493CONFIG_HW_RANDOM=y 443CONFIG_HW_RANDOM=y
494# CONFIG_GEN_RTC is not set
495# CONFIG_DTLK is not set 444# CONFIG_DTLK is not set
496# CONFIG_R3964 is not set 445# CONFIG_R3964 is not set
497 446
498# 447#
499# Ftape, the floppy tape device driver
500#
501
502#
503# PCMCIA character devices 448# PCMCIA character devices
504# 449#
505# CONFIG_SYNCLINK_CS is not set 450# CONFIG_SYNCLINK_CS is not set
506# CONFIG_CARDMAN_4000 is not set 451# CONFIG_CARDMAN_4000 is not set
507# CONFIG_CARDMAN_4040 is not set 452# CONFIG_CARDMAN_4040 is not set
508# CONFIG_RAW_DRIVER is not set 453# CONFIG_RAW_DRIVER is not set
509
510#
511# TPM devices
512#
513# CONFIG_TCG_TPM is not set 454# CONFIG_TCG_TPM is not set
514# CONFIG_TELCLOCK is not set 455CONFIG_DEVPORT=y
515
516#
517# I2C support
518#
519# CONFIG_I2C is not set 456# CONFIG_I2C is not set
520 457
521# 458#
@@ -523,48 +460,55 @@ CONFIG_HW_RANDOM=y
523# 460#
524# CONFIG_SPI is not set 461# CONFIG_SPI is not set
525# CONFIG_SPI_MASTER is not set 462# CONFIG_SPI_MASTER is not set
463# CONFIG_W1 is not set
464# CONFIG_POWER_SUPPLY is not set
465# CONFIG_HWMON is not set
526 466
527# 467#
528# Dallas's 1-wire bus 468# Multifunction device drivers
529#
530
531#
532# Hardware Monitoring support
533#
534CONFIG_HWMON=y
535# CONFIG_HWMON_VID is not set
536# CONFIG_SENSORS_ABITUGURU is not set
537# CONFIG_SENSORS_F71805F is not set
538# CONFIG_SENSORS_VT1211 is not set
539# CONFIG_HWMON_DEBUG_CHIP is not set
540
541#
542# Misc devices
543# 469#
470# CONFIG_MFD_SM501 is not set
544 471
545# 472#
546# Multimedia devices 473# Multimedia devices
547# 474#
548# CONFIG_VIDEO_DEV is not set 475# CONFIG_VIDEO_DEV is not set
549CONFIG_VIDEO_V4L2=y 476# CONFIG_DAB is not set
550 477
551# 478#
552# Digital Video Broadcasting Devices 479# Graphics support
553# 480#
481CONFIG_BACKLIGHT_LCD_SUPPORT=y
482CONFIG_LCD_CLASS_DEVICE=y
483CONFIG_BACKLIGHT_CLASS_DEVICE=y
484CONFIG_BACKLIGHT_HP680=y
554 485
555# 486#
556# Graphics support 487# Display device support
557# 488#
558CONFIG_FIRMWARE_EDID=y 489# CONFIG_DISPLAY_SUPPORT is not set
490# CONFIG_VGASTATE is not set
491CONFIG_VIDEO_OUTPUT_CONTROL=y
559CONFIG_FB=y 492CONFIG_FB=y
493CONFIG_FIRMWARE_EDID=y
494# CONFIG_FB_DDC is not set
560CONFIG_FB_CFB_FILLRECT=y 495CONFIG_FB_CFB_FILLRECT=y
561CONFIG_FB_CFB_COPYAREA=y 496CONFIG_FB_CFB_COPYAREA=y
562CONFIG_FB_CFB_IMAGEBLIT=y 497CONFIG_FB_CFB_IMAGEBLIT=y
498# CONFIG_FB_SYS_FILLRECT is not set
499# CONFIG_FB_SYS_COPYAREA is not set
500# CONFIG_FB_SYS_IMAGEBLIT is not set
501# CONFIG_FB_SYS_FOPS is not set
502CONFIG_FB_DEFERRED_IO=y
503# CONFIG_FB_SVGALIB is not set
563# CONFIG_FB_MACMODES is not set 504# CONFIG_FB_MACMODES is not set
564# CONFIG_FB_BACKLIGHT is not set 505# CONFIG_FB_BACKLIGHT is not set
565# CONFIG_FB_MODE_HELPERS is not set 506# CONFIG_FB_MODE_HELPERS is not set
566# CONFIG_FB_TILEBLITTING is not set 507# CONFIG_FB_TILEBLITTING is not set
567# CONFIG_FB_EPSON1355 is not set 508
509#
510# Frame buffer hardware drivers
511#
568# CONFIG_FB_S1D13XXX is not set 512# CONFIG_FB_S1D13XXX is not set
569CONFIG_FB_HIT=y 513CONFIG_FB_HIT=y
570# CONFIG_FB_VIRTUAL is not set 514# CONFIG_FB_VIRTUAL is not set
@@ -575,6 +519,7 @@ CONFIG_FB_HIT=y
575# CONFIG_MDA_CONSOLE is not set 519# CONFIG_MDA_CONSOLE is not set
576CONFIG_DUMMY_CONSOLE=y 520CONFIG_DUMMY_CONSOLE=y
577CONFIG_FRAMEBUFFER_CONSOLE=y 521CONFIG_FRAMEBUFFER_CONSOLE=y
522# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
578# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set 523# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
579CONFIG_FONTS=y 524CONFIG_FONTS=y
580# CONFIG_FONT_8x8 is not set 525# CONFIG_FONT_8x8 is not set
@@ -587,79 +532,49 @@ CONFIG_FONT_PEARL_8x8=y
587# CONFIG_FONT_SUN8x16 is not set 532# CONFIG_FONT_SUN8x16 is not set
588# CONFIG_FONT_SUN12x22 is not set 533# CONFIG_FONT_SUN12x22 is not set
589# CONFIG_FONT_10x18 is not set 534# CONFIG_FONT_10x18 is not set
590
591#
592# Logo configuration
593#
594# CONFIG_LOGO is not set 535# CONFIG_LOGO is not set
595# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
596 536
597# 537#
598# Sound 538# Sound
599# 539#
600CONFIG_SOUND=y 540# CONFIG_SOUND is not set
601 541# CONFIG_HID_SUPPORT is not set
602# 542# CONFIG_USB_SUPPORT is not set
603# Advanced Linux Sound Architecture
604#
605# CONFIG_SND is not set
606
607#
608# Open Sound System
609#
610CONFIG_SOUND_PRIME=y
611# CONFIG_OSS_OBSOLETE_DRIVER is not set
612# CONFIG_SOUND_MSNDCLAS is not set
613# CONFIG_SOUND_MSNDPIN is not set
614CONFIG_SOUND_SH_DAC_AUDIO=y
615CONFIG_SOUND_SH_DAC_AUDIO_CHANNEL=1
616
617#
618# USB support
619#
620# CONFIG_USB_ARCH_HAS_HCD is not set
621# CONFIG_USB_ARCH_HAS_OHCI is not set
622# CONFIG_USB_ARCH_HAS_EHCI is not set
623
624#
625# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
626#
627
628#
629# USB Gadget Support
630#
631# CONFIG_USB_GADGET is not set
632
633#
634# MMC/SD Card support
635#
636# CONFIG_MMC is not set 543# CONFIG_MMC is not set
637
638#
639# LED devices
640#
641# CONFIG_NEW_LEDS is not set 544# CONFIG_NEW_LEDS is not set
545CONFIG_RTC_LIB=y
546CONFIG_RTC_CLASS=y
547CONFIG_RTC_HCTOSYS=y
548CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
549# CONFIG_RTC_DEBUG is not set
642 550
643# 551#
644# LED drivers 552# RTC interfaces
645#
646
647#
648# LED Triggers
649# 553#
554CONFIG_RTC_INTF_SYSFS=y
555CONFIG_RTC_INTF_PROC=y
556CONFIG_RTC_INTF_DEV=y
557# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
558# CONFIG_RTC_DRV_TEST is not set
650 559
651# 560#
652# InfiniBand support 561# SPI RTC drivers
653# 562#
654 563
655# 564#
656# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) 565# Platform RTC drivers
657# 566#
567# CONFIG_RTC_DRV_DS1553 is not set
568# CONFIG_RTC_DRV_STK17TA8 is not set
569# CONFIG_RTC_DRV_DS1742 is not set
570# CONFIG_RTC_DRV_M48T86 is not set
571# CONFIG_RTC_DRV_M48T59 is not set
572# CONFIG_RTC_DRV_V3020 is not set
658 573
659# 574#
660# Real Time Clock 575# on-CPU RTC drivers
661# 576#
662# CONFIG_RTC_CLASS is not set 577CONFIG_RTC_DRV_SH=y
663 578
664# 579#
665# DMA Engine support 580# DMA Engine support
@@ -675,16 +590,23 @@ CONFIG_SOUND_SH_DAC_AUDIO_CHANNEL=1
675# 590#
676 591
677# 592#
593# Userspace I/O
594#
595# CONFIG_UIO is not set
596
597#
678# File systems 598# File systems
679# 599#
680CONFIG_EXT2_FS=y 600CONFIG_EXT2_FS=y
681# CONFIG_EXT2_FS_XATTR is not set 601# CONFIG_EXT2_FS_XATTR is not set
682# CONFIG_EXT2_FS_XIP is not set 602# CONFIG_EXT2_FS_XIP is not set
683# CONFIG_EXT3_FS is not set 603# CONFIG_EXT3_FS is not set
604# CONFIG_EXT4DEV_FS is not set
684# CONFIG_REISERFS_FS is not set 605# CONFIG_REISERFS_FS is not set
685# CONFIG_JFS_FS is not set 606# CONFIG_JFS_FS is not set
686# CONFIG_FS_POSIX_ACL is not set 607# CONFIG_FS_POSIX_ACL is not set
687# CONFIG_XFS_FS is not set 608# CONFIG_XFS_FS is not set
609# CONFIG_GFS2_FS is not set
688# CONFIG_MINIX_FS is not set 610# CONFIG_MINIX_FS is not set
689# CONFIG_ROMFS_FS is not set 611# CONFIG_ROMFS_FS is not set
690CONFIG_INOTIFY=y 612CONFIG_INOTIFY=y
@@ -705,7 +627,7 @@ CONFIG_DNOTIFY=y
705# DOS/FAT/NT Filesystems 627# DOS/FAT/NT Filesystems
706# 628#
707CONFIG_FAT_FS=y 629CONFIG_FAT_FS=y
708# CONFIG_MSDOS_FS is not set 630CONFIG_MSDOS_FS=y
709CONFIG_VFAT_FS=y 631CONFIG_VFAT_FS=y
710CONFIG_FAT_DEFAULT_CODEPAGE=437 632CONFIG_FAT_DEFAULT_CODEPAGE=437
711CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" 633CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
@@ -755,7 +677,7 @@ CONFIG_NLS_DEFAULT="iso8859-1"
755# CONFIG_NLS_CODEPAGE_437 is not set 677# CONFIG_NLS_CODEPAGE_437 is not set
756# CONFIG_NLS_CODEPAGE_737 is not set 678# CONFIG_NLS_CODEPAGE_737 is not set
757# CONFIG_NLS_CODEPAGE_775 is not set 679# CONFIG_NLS_CODEPAGE_775 is not set
758# CONFIG_NLS_CODEPAGE_850 is not set 680CONFIG_NLS_CODEPAGE_850=y
759# CONFIG_NLS_CODEPAGE_852 is not set 681# CONFIG_NLS_CODEPAGE_852 is not set
760# CONFIG_NLS_CODEPAGE_855 is not set 682# CONFIG_NLS_CODEPAGE_855 is not set
761# CONFIG_NLS_CODEPAGE_857 is not set 683# CONFIG_NLS_CODEPAGE_857 is not set
@@ -799,34 +721,73 @@ CONFIG_NLS_DEFAULT="iso8859-1"
799# 721#
800# Kernel hacking 722# Kernel hacking
801# 723#
724CONFIG_TRACE_IRQFLAGS_SUPPORT=y
802# CONFIG_PRINTK_TIME is not set 725# CONFIG_PRINTK_TIME is not set
803CONFIG_ENABLE_MUST_CHECK=y 726CONFIG_ENABLE_MUST_CHECK=y
804# CONFIG_MAGIC_SYSRQ is not set 727# CONFIG_MAGIC_SYSRQ is not set
805# CONFIG_UNUSED_SYMBOLS is not set 728# CONFIG_UNUSED_SYMBOLS is not set
729# CONFIG_DEBUG_FS is not set
730# CONFIG_HEADERS_CHECK is not set
806# CONFIG_DEBUG_KERNEL is not set 731# CONFIG_DEBUG_KERNEL is not set
807CONFIG_LOG_BUF_SHIFT=14
808# CONFIG_DEBUG_BUGVERBOSE is not set 732# CONFIG_DEBUG_BUGVERBOSE is not set
809# CONFIG_DEBUG_FS is not set
810# CONFIG_UNWIND_INFO is not set
811# CONFIG_SH_STANDARD_BIOS is not set 733# CONFIG_SH_STANDARD_BIOS is not set
812# CONFIG_KGDB is not set 734# CONFIG_EARLY_SCIF_CONSOLE is not set
735# CONFIG_SH_KGDB is not set
813 736
814# 737#
815# Security options 738# Security options
816# 739#
817# CONFIG_KEYS is not set 740# CONFIG_KEYS is not set
818# CONFIG_SECURITY is not set 741# CONFIG_SECURITY is not set
819 742CONFIG_CRYPTO=y
820# 743CONFIG_CRYPTO_ALGAPI=y
821# Cryptographic options 744CONFIG_CRYPTO_BLKCIPHER=y
822# 745CONFIG_CRYPTO_MANAGER=y
823# CONFIG_CRYPTO is not set 746# CONFIG_CRYPTO_HMAC is not set
747# CONFIG_CRYPTO_XCBC is not set
748# CONFIG_CRYPTO_NULL is not set
749# CONFIG_CRYPTO_MD4 is not set
750CONFIG_CRYPTO_MD5=y
751# CONFIG_CRYPTO_SHA1 is not set
752# CONFIG_CRYPTO_SHA256 is not set
753# CONFIG_CRYPTO_SHA512 is not set
754# CONFIG_CRYPTO_WP512 is not set
755# CONFIG_CRYPTO_TGR192 is not set
756# CONFIG_CRYPTO_GF128MUL is not set
757CONFIG_CRYPTO_ECB=y
758CONFIG_CRYPTO_CBC=y
759CONFIG_CRYPTO_PCBC=y
760# CONFIG_CRYPTO_LRW is not set
761# CONFIG_CRYPTO_CRYPTD is not set
762# CONFIG_CRYPTO_DES is not set
763# CONFIG_CRYPTO_FCRYPT is not set
764# CONFIG_CRYPTO_BLOWFISH is not set
765# CONFIG_CRYPTO_TWOFISH is not set
766# CONFIG_CRYPTO_SERPENT is not set
767# CONFIG_CRYPTO_AES is not set
768# CONFIG_CRYPTO_CAST5 is not set
769# CONFIG_CRYPTO_CAST6 is not set
770# CONFIG_CRYPTO_TEA is not set
771# CONFIG_CRYPTO_ARC4 is not set
772# CONFIG_CRYPTO_KHAZAD is not set
773# CONFIG_CRYPTO_ANUBIS is not set
774# CONFIG_CRYPTO_DEFLATE is not set
775# CONFIG_CRYPTO_MICHAEL_MIC is not set
776# CONFIG_CRYPTO_CRC32C is not set
777# CONFIG_CRYPTO_CAMELLIA is not set
778# CONFIG_CRYPTO_HW is not set
824 779
825# 780#
826# Library routines 781# Library routines
827# 782#
783CONFIG_BITREVERSE=y
828# CONFIG_CRC_CCITT is not set 784# CONFIG_CRC_CCITT is not set
829# CONFIG_CRC16 is not set 785CONFIG_CRC16=y
786# CONFIG_CRC_ITU_T is not set
830CONFIG_CRC32=y 787CONFIG_CRC32=y
788# CONFIG_CRC7 is not set
831# CONFIG_LIBCRC32C is not set 789# CONFIG_LIBCRC32C is not set
832CONFIG_PLIST=y 790CONFIG_PLIST=y
791CONFIG_HAS_IOMEM=y
792CONFIG_HAS_IOPORT=y
793CONFIG_HAS_DMA=y
diff --git a/arch/sh/configs/magicpanelr2_defconfig b/arch/sh/configs/magicpanelr2_defconfig
new file mode 100644
index 000000000000..f8398a5f10ee
--- /dev/null
+++ b/arch/sh/configs/magicpanelr2_defconfig
@@ -0,0 +1,925 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.23-rc2
4# Fri Aug 17 12:15:16 2007
5#
6CONFIG_SUPERH=y
7CONFIG_RWSEM_GENERIC_SPINLOCK=y
8CONFIG_GENERIC_BUG=y
9CONFIG_GENERIC_FIND_NEXT_BIT=y
10CONFIG_GENERIC_HWEIGHT=y
11CONFIG_GENERIC_HARDIRQS=y
12CONFIG_GENERIC_IRQ_PROBE=y
13CONFIG_GENERIC_CALIBRATE_DELAY=y
14CONFIG_GENERIC_TIME=y
15CONFIG_GENERIC_CLOCKEVENTS=y
16CONFIG_STACKTRACE_SUPPORT=y
17CONFIG_LOCKDEP_SUPPORT=y
18# CONFIG_ARCH_HAS_ILOG2_U32 is not set
19# CONFIG_ARCH_HAS_ILOG2_U64 is not set
20CONFIG_ARCH_NO_VIRT_TO_BUS=y
21CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
22
23#
24# General setup
25#
26CONFIG_EXPERIMENTAL=y
27CONFIG_BROKEN_ON_SMP=y
28CONFIG_INIT_ENV_ARG_LIMIT=32
29CONFIG_LOCALVERSION=""
30# CONFIG_LOCALVERSION_AUTO is not set
31CONFIG_SWAP=y
32CONFIG_SYSVIPC=y
33CONFIG_SYSVIPC_SYSCTL=y
34CONFIG_POSIX_MQUEUE=y
35CONFIG_BSD_PROCESS_ACCT=y
36CONFIG_BSD_PROCESS_ACCT_V3=y
37# CONFIG_TASKSTATS is not set
38# CONFIG_USER_NS is not set
39CONFIG_AUDIT=y
40# CONFIG_IKCONFIG is not set
41CONFIG_LOG_BUF_SHIFT=17
42CONFIG_SYSFS_DEPRECATED=y
43CONFIG_RELAY=y
44CONFIG_BLK_DEV_INITRD=y
45CONFIG_INITRAMFS_SOURCE=""
46# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
47CONFIG_SYSCTL=y
48CONFIG_EMBEDDED=y
49CONFIG_UID16=y
50CONFIG_SYSCTL_SYSCALL=y
51CONFIG_KALLSYMS=y
52CONFIG_KALLSYMS_ALL=y
53# CONFIG_KALLSYMS_EXTRA_PASS is not set
54CONFIG_HOTPLUG=y
55CONFIG_PRINTK=y
56CONFIG_BUG=y
57CONFIG_ELF_CORE=y
58CONFIG_BASE_FULL=y
59CONFIG_FUTEX=y
60CONFIG_ANON_INODES=y
61CONFIG_EPOLL=y
62CONFIG_SIGNALFD=y
63CONFIG_TIMERFD=y
64CONFIG_EVENTFD=y
65CONFIG_SHMEM=y
66CONFIG_VM_EVENT_COUNTERS=y
67CONFIG_SLAB=y
68# CONFIG_SLUB is not set
69# CONFIG_SLOB is not set
70CONFIG_RT_MUTEXES=y
71# CONFIG_TINY_SHMEM is not set
72CONFIG_BASE_SMALL=0
73CONFIG_MODULES=y
74CONFIG_MODULE_UNLOAD=y
75# CONFIG_MODULE_FORCE_UNLOAD is not set
76CONFIG_MODVERSIONS=y
77CONFIG_MODULE_SRCVERSION_ALL=y
78CONFIG_KMOD=y
79CONFIG_BLOCK=y
80# CONFIG_LBD is not set
81# CONFIG_BLK_DEV_IO_TRACE is not set
82# CONFIG_LSF is not set
83# CONFIG_BLK_DEV_BSG is not set
84
85#
86# IO Schedulers
87#
88CONFIG_IOSCHED_NOOP=y
89# CONFIG_IOSCHED_AS is not set
90# CONFIG_IOSCHED_DEADLINE is not set
91# CONFIG_IOSCHED_CFQ is not set
92# CONFIG_DEFAULT_AS is not set
93# CONFIG_DEFAULT_DEADLINE is not set
94# CONFIG_DEFAULT_CFQ is not set
95CONFIG_DEFAULT_NOOP=y
96CONFIG_DEFAULT_IOSCHED="noop"
97
98#
99# System type
100#
101CONFIG_CPU_SH3=y
102# CONFIG_CPU_SUBTYPE_SH7619 is not set
103# CONFIG_CPU_SUBTYPE_SH7206 is not set
104# CONFIG_CPU_SUBTYPE_SH7705 is not set
105# CONFIG_CPU_SUBTYPE_SH7706 is not set
106# CONFIG_CPU_SUBTYPE_SH7707 is not set
107# CONFIG_CPU_SUBTYPE_SH7708 is not set
108# CONFIG_CPU_SUBTYPE_SH7709 is not set
109# CONFIG_CPU_SUBTYPE_SH7710 is not set
110# CONFIG_CPU_SUBTYPE_SH7712 is not set
111CONFIG_CPU_SUBTYPE_SH7720=y
112# CONFIG_CPU_SUBTYPE_SH7750 is not set
113# CONFIG_CPU_SUBTYPE_SH7091 is not set
114# CONFIG_CPU_SUBTYPE_SH7750R is not set
115# CONFIG_CPU_SUBTYPE_SH7750S is not set
116# CONFIG_CPU_SUBTYPE_SH7751 is not set
117# CONFIG_CPU_SUBTYPE_SH7751R is not set
118# CONFIG_CPU_SUBTYPE_SH7760 is not set
119# CONFIG_CPU_SUBTYPE_SH4_202 is not set
120# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
121# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
122# CONFIG_CPU_SUBTYPE_SH7770 is not set
123# CONFIG_CPU_SUBTYPE_SH7780 is not set
124# CONFIG_CPU_SUBTYPE_SH7785 is not set
125# CONFIG_CPU_SUBTYPE_SHX3 is not set
126# CONFIG_CPU_SUBTYPE_SH7343 is not set
127# CONFIG_CPU_SUBTYPE_SH7722 is not set
128
129#
130# Memory management options
131#
132CONFIG_QUICKLIST=y
133CONFIG_MMU=y
134CONFIG_PAGE_OFFSET=0x80000000
135CONFIG_MEMORY_START=0x0C000000
136CONFIG_MEMORY_SIZE=0x03F00000
137CONFIG_VSYSCALL=y
138CONFIG_ARCH_FLATMEM_ENABLE=y
139CONFIG_ARCH_SPARSEMEM_ENABLE=y
140CONFIG_ARCH_SPARSEMEM_DEFAULT=y
141CONFIG_MAX_ACTIVE_REGIONS=1
142CONFIG_ARCH_POPULATES_NODE_MAP=y
143CONFIG_ARCH_SELECT_MEMORY_MODEL=y
144CONFIG_PAGE_SIZE_4KB=y
145# CONFIG_PAGE_SIZE_8KB is not set
146# CONFIG_PAGE_SIZE_64KB is not set
147CONFIG_SELECT_MEMORY_MODEL=y
148CONFIG_FLATMEM_MANUAL=y
149# CONFIG_DISCONTIGMEM_MANUAL is not set
150# CONFIG_SPARSEMEM_MANUAL is not set
151CONFIG_FLATMEM=y
152CONFIG_FLAT_NODE_MEM_MAP=y
153CONFIG_SPARSEMEM_STATIC=y
154CONFIG_SPLIT_PTLOCK_CPUS=4
155# CONFIG_RESOURCES_64BIT is not set
156CONFIG_ZONE_DMA_FLAG=0
157CONFIG_NR_QUICK=2
158
159#
160# Cache configuration
161#
162# CONFIG_SH_DIRECT_MAPPED is not set
163CONFIG_CACHE_WRITEBACK=y
164# CONFIG_CACHE_WRITETHROUGH is not set
165# CONFIG_CACHE_OFF is not set
166
167#
168# Processor features
169#
170CONFIG_CPU_LITTLE_ENDIAN=y
171# CONFIG_CPU_BIG_ENDIAN is not set
172# CONFIG_SH_FPU_EMU is not set
173CONFIG_SH_DSP=y
174CONFIG_SH_ADC=y
175CONFIG_CPU_HAS_INTEVT=y
176CONFIG_CPU_HAS_INTC_IRQ=y
177CONFIG_CPU_HAS_SR_RB=y
178CONFIG_CPU_HAS_DSP=y
179
180#
181# Board support
182#
183CONFIG_SH_MAGIC_PANEL_R2=y
184
185#
186# Magic Panel R2 options
187#
188CONFIG_SH_MAGIC_PANEL_R2_VERSION=3
189
190#
191# Timer and clock configuration
192#
193CONFIG_SH_TMU=y
194CONFIG_SH_TIMER_IRQ=16
195CONFIG_SH_PCLK_FREQ=24000000
196# CONFIG_TICK_ONESHOT is not set
197# CONFIG_NO_HZ is not set
198# CONFIG_HIGH_RES_TIMERS is not set
199
200#
201# CPU Frequency scaling
202#
203# CONFIG_CPU_FREQ is not set
204
205#
206# DMA support
207#
208CONFIG_SH_DMA_API=y
209CONFIG_SH_DMA=y
210CONFIG_NR_ONCHIP_DMA_CHANNELS=6
211# CONFIG_NR_DMA_CHANNELS_BOOL is not set
212
213#
214# Companion Chips
215#
216
217#
218# Additional SuperH Device Drivers
219#
220CONFIG_HEARTBEAT=y
221# CONFIG_PUSH_SWITCH is not set
222
223#
224# Kernel features
225#
226# CONFIG_HZ_100 is not set
227CONFIG_HZ_250=y
228# CONFIG_HZ_300 is not set
229# CONFIG_HZ_1000 is not set
230CONFIG_HZ=250
231# CONFIG_KEXEC is not set
232# CONFIG_CRASH_DUMP is not set
233CONFIG_PREEMPT_NONE=y
234# CONFIG_PREEMPT_VOLUNTARY is not set
235# CONFIG_PREEMPT is not set
236
237#
238# Boot options
239#
240CONFIG_ZERO_PAGE_OFFSET=0x00001000
241CONFIG_BOOT_LINK_OFFSET=0x00800000
242# CONFIG_CMDLINE_BOOL is not set
243
244#
245# Bus options
246#
247# CONFIG_ARCH_SUPPORTS_MSI is not set
248
249#
250# PCCARD (PCMCIA/CardBus) support
251#
252# CONFIG_PCCARD is not set
253
254#
255# Executable file formats
256#
257CONFIG_BINFMT_ELF=y
258# CONFIG_BINFMT_MISC is not set
259
260#
261# Networking
262#
263CONFIG_NET=y
264
265#
266# Networking options
267#
268CONFIG_PACKET=y
269CONFIG_PACKET_MMAP=y
270CONFIG_UNIX=y
271# CONFIG_NET_KEY is not set
272CONFIG_INET=y
273# CONFIG_IP_MULTICAST is not set
274# CONFIG_IP_ADVANCED_ROUTER is not set
275CONFIG_IP_FIB_HASH=y
276CONFIG_IP_PNP=y
277CONFIG_IP_PNP_DHCP=y
278# CONFIG_IP_PNP_BOOTP is not set
279# CONFIG_IP_PNP_RARP is not set
280# CONFIG_NET_IPIP is not set
281# CONFIG_NET_IPGRE is not set
282# CONFIG_ARPD is not set
283# CONFIG_SYN_COOKIES is not set
284# CONFIG_INET_AH is not set
285# CONFIG_INET_ESP is not set
286# CONFIG_INET_IPCOMP is not set
287# CONFIG_INET_XFRM_TUNNEL is not set
288# CONFIG_INET_TUNNEL is not set
289# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
290# CONFIG_INET_XFRM_MODE_TUNNEL is not set
291# CONFIG_INET_XFRM_MODE_BEET is not set
292CONFIG_INET_DIAG=y
293CONFIG_INET_TCP_DIAG=y
294# CONFIG_TCP_CONG_ADVANCED is not set
295CONFIG_TCP_CONG_CUBIC=y
296CONFIG_DEFAULT_TCP_CONG="cubic"
297# CONFIG_TCP_MD5SIG is not set
298# CONFIG_IPV6 is not set
299# CONFIG_INET6_XFRM_TUNNEL is not set
300# CONFIG_INET6_TUNNEL is not set
301# CONFIG_NETWORK_SECMARK is not set
302# CONFIG_NETFILTER is not set
303# CONFIG_IP_DCCP is not set
304# CONFIG_IP_SCTP is not set
305# CONFIG_TIPC is not set
306# CONFIG_ATM is not set
307# CONFIG_BRIDGE is not set
308# CONFIG_VLAN_8021Q is not set
309# CONFIG_DECNET is not set
310# CONFIG_LLC2 is not set
311# CONFIG_IPX is not set
312# CONFIG_ATALK is not set
313# CONFIG_X25 is not set
314# CONFIG_LAPB is not set
315# CONFIG_ECONET is not set
316# CONFIG_WAN_ROUTER is not set
317
318#
319# QoS and/or fair queueing
320#
321# CONFIG_NET_SCHED is not set
322
323#
324# Network testing
325#
326# CONFIG_NET_PKTGEN is not set
327# CONFIG_HAMRADIO is not set
328# CONFIG_IRDA is not set
329# CONFIG_BT is not set
330# CONFIG_AF_RXRPC is not set
331
332#
333# Wireless
334#
335# CONFIG_CFG80211 is not set
336# CONFIG_WIRELESS_EXT is not set
337# CONFIG_MAC80211 is not set
338# CONFIG_IEEE80211 is not set
339# CONFIG_RFKILL is not set
340# CONFIG_NET_9P is not set
341
342#
343# Device Drivers
344#
345
346#
347# Generic Driver Options
348#
349# CONFIG_STANDALONE is not set
350# CONFIG_PREVENT_FIRMWARE_BUILD is not set
351CONFIG_FW_LOADER=y
352# CONFIG_DEBUG_DRIVER is not set
353# CONFIG_DEBUG_DEVRES is not set
354# CONFIG_SYS_HYPERVISOR is not set
355# CONFIG_CONNECTOR is not set
356CONFIG_MTD=y
357# CONFIG_MTD_DEBUG is not set
358# CONFIG_MTD_CONCAT is not set
359CONFIG_MTD_PARTITIONS=y
360CONFIG_MTD_REDBOOT_PARTS=y
361CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
362# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
363# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
364CONFIG_MTD_CMDLINE_PARTS=y
365
366#
367# User Modules And Translation Layers
368#
369CONFIG_MTD_CHAR=y
370CONFIG_MTD_BLKDEVS=y
371CONFIG_MTD_BLOCK=y
372# CONFIG_FTL is not set
373# CONFIG_NFTL is not set
374# CONFIG_INFTL is not set
375# CONFIG_RFD_FTL is not set
376# CONFIG_SSFDC is not set
377
378#
379# RAM/ROM/Flash chip drivers
380#
381CONFIG_MTD_CFI=y
382# CONFIG_MTD_JEDECPROBE is not set
383CONFIG_MTD_GEN_PROBE=y
384# CONFIG_MTD_CFI_ADV_OPTIONS is not set
385CONFIG_MTD_MAP_BANK_WIDTH_1=y
386CONFIG_MTD_MAP_BANK_WIDTH_2=y
387CONFIG_MTD_MAP_BANK_WIDTH_4=y
388# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
389# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
390# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
391CONFIG_MTD_CFI_I1=y
392CONFIG_MTD_CFI_I2=y
393# CONFIG_MTD_CFI_I4 is not set
394# CONFIG_MTD_CFI_I8 is not set
395# CONFIG_MTD_CFI_INTELEXT is not set
396CONFIG_MTD_CFI_AMDSTD=y
397# CONFIG_MTD_CFI_STAA is not set
398CONFIG_MTD_CFI_UTIL=y
399# CONFIG_MTD_RAM is not set
400# CONFIG_MTD_ROM is not set
401# CONFIG_MTD_ABSENT is not set
402
403#
404# Mapping drivers for chip access
405#
406# CONFIG_MTD_COMPLEX_MAPPINGS is not set
407CONFIG_MTD_PHYSMAP=y
408CONFIG_MTD_PHYSMAP_START=0x0000000
409CONFIG_MTD_PHYSMAP_LEN=0
410CONFIG_MTD_PHYSMAP_BANKWIDTH=0
411# CONFIG_MTD_SOLUTIONENGINE is not set
412# CONFIG_MTD_PLATRAM is not set
413
414#
415# Self-contained MTD device drivers
416#
417# CONFIG_MTD_SLRAM is not set
418# CONFIG_MTD_PHRAM is not set
419# CONFIG_MTD_MTDRAM is not set
420# CONFIG_MTD_BLOCK2MTD is not set
421
422#
423# Disk-On-Chip Device Drivers
424#
425# CONFIG_MTD_DOC2000 is not set
426# CONFIG_MTD_DOC2001 is not set
427# CONFIG_MTD_DOC2001PLUS is not set
428# CONFIG_MTD_NAND is not set
429# CONFIG_MTD_ONENAND is not set
430
431#
432# UBI - Unsorted block images
433#
434# CONFIG_MTD_UBI is not set
435# CONFIG_PARPORT is not set
436CONFIG_BLK_DEV=y
437# CONFIG_BLK_DEV_COW_COMMON is not set
438# CONFIG_BLK_DEV_LOOP is not set
439# CONFIG_BLK_DEV_NBD is not set
440CONFIG_BLK_DEV_RAM=y
441CONFIG_BLK_DEV_RAM_COUNT=16
442CONFIG_BLK_DEV_RAM_SIZE=65536
443CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
444# CONFIG_CDROM_PKTCDVD is not set
445# CONFIG_ATA_OVER_ETH is not set
446CONFIG_MISC_DEVICES=y
447# CONFIG_EEPROM_93CX6 is not set
448# CONFIG_IDE is not set
449
450#
451# SCSI device support
452#
453# CONFIG_RAID_ATTRS is not set
454# CONFIG_SCSI is not set
455# CONFIG_SCSI_DMA is not set
456# CONFIG_SCSI_NETLINK is not set
457# CONFIG_ATA is not set
458# CONFIG_MD is not set
459CONFIG_NETDEVICES=y
460# CONFIG_NETDEVICES_MULTIQUEUE is not set
461# CONFIG_DUMMY is not set
462# CONFIG_BONDING is not set
463# CONFIG_MACVLAN is not set
464# CONFIG_EQUALIZER is not set
465# CONFIG_TUN is not set
466# CONFIG_PHYLIB is not set
467CONFIG_NET_ETHERNET=y
468CONFIG_MII=y
469# CONFIG_STNIC is not set
470# CONFIG_SMC91X is not set
471CONFIG_SMC911X=y
472# CONFIG_NETDEV_1000 is not set
473# CONFIG_NETDEV_10000 is not set
474
475#
476# Wireless LAN
477#
478# CONFIG_WLAN_PRE80211 is not set
479# CONFIG_WLAN_80211 is not set
480# CONFIG_WAN is not set
481# CONFIG_PPP is not set
482# CONFIG_SLIP is not set
483# CONFIG_SHAPER is not set
484# CONFIG_NETCONSOLE is not set
485# CONFIG_NETPOLL is not set
486# CONFIG_NET_POLL_CONTROLLER is not set
487# CONFIG_ISDN is not set
488# CONFIG_PHONE is not set
489
490#
491# Input device support
492#
493CONFIG_INPUT=y
494# CONFIG_INPUT_FF_MEMLESS is not set
495# CONFIG_INPUT_POLLDEV is not set
496
497#
498# Userland interfaces
499#
500CONFIG_INPUT_MOUSEDEV=y
501CONFIG_INPUT_MOUSEDEV_PSAUX=y
502CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
503CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
504# CONFIG_INPUT_JOYDEV is not set
505# CONFIG_INPUT_TSDEV is not set
506CONFIG_INPUT_EVDEV=y
507# CONFIG_INPUT_EVBUG is not set
508
509#
510# Input Device Drivers
511#
512CONFIG_INPUT_KEYBOARD=y
513CONFIG_KEYBOARD_ATKBD=y
514# CONFIG_KEYBOARD_SUNKBD is not set
515# CONFIG_KEYBOARD_LKKBD is not set
516# CONFIG_KEYBOARD_XTKBD is not set
517# CONFIG_KEYBOARD_NEWTON is not set
518# CONFIG_KEYBOARD_STOWAWAY is not set
519CONFIG_INPUT_MOUSE=y
520# CONFIG_MOUSE_PS2 is not set
521# CONFIG_MOUSE_SERIAL is not set
522# CONFIG_MOUSE_VSXXXAA is not set
523# CONFIG_INPUT_JOYSTICK is not set
524# CONFIG_INPUT_TABLET is not set
525# CONFIG_INPUT_TOUCHSCREEN is not set
526# CONFIG_INPUT_MISC is not set
527
528#
529# Hardware I/O ports
530#
531CONFIG_SERIO=y
532# CONFIG_SERIO_I8042 is not set
533CONFIG_SERIO_SERPORT=y
534CONFIG_SERIO_LIBPS2=y
535# CONFIG_SERIO_RAW is not set
536# CONFIG_GAMEPORT is not set
537
538#
539# Character devices
540#
541CONFIG_VT=y
542CONFIG_VT_CONSOLE=y
543CONFIG_HW_CONSOLE=y
544# CONFIG_VT_HW_CONSOLE_BINDING is not set
545# CONFIG_SERIAL_NONSTANDARD is not set
546
547#
548# Serial drivers
549#
550CONFIG_SERIAL_8250=y
551CONFIG_SERIAL_8250_CONSOLE=y
552CONFIG_SERIAL_8250_NR_UARTS=48
553CONFIG_SERIAL_8250_RUNTIME_UARTS=4
554CONFIG_SERIAL_8250_EXTENDED=y
555# CONFIG_SERIAL_8250_MANY_PORTS is not set
556CONFIG_SERIAL_8250_SHARE_IRQ=y
557# CONFIG_SERIAL_8250_DETECT_IRQ is not set
558# CONFIG_SERIAL_8250_RSA is not set
559
560#
561# Non-8250 serial port support
562#
563CONFIG_SERIAL_SH_SCI=y
564CONFIG_SERIAL_SH_SCI_NR_UARTS=2
565CONFIG_SERIAL_SH_SCI_CONSOLE=y
566CONFIG_SERIAL_CORE=y
567CONFIG_SERIAL_CORE_CONSOLE=y
568CONFIG_UNIX98_PTYS=y
569CONFIG_LEGACY_PTYS=y
570CONFIG_LEGACY_PTY_COUNT=256
571# CONFIG_IPMI_HANDLER is not set
572# CONFIG_WATCHDOG is not set
573# CONFIG_HW_RANDOM is not set
574# CONFIG_R3964 is not set
575# CONFIG_RAW_DRIVER is not set
576# CONFIG_TCG_TPM is not set
577# CONFIG_I2C is not set
578
579#
580# SPI support
581#
582# CONFIG_SPI is not set
583# CONFIG_SPI_MASTER is not set
584# CONFIG_W1 is not set
585# CONFIG_POWER_SUPPLY is not set
586# CONFIG_HWMON is not set
587
588#
589# Multifunction device drivers
590#
591# CONFIG_MFD_SM501 is not set
592
593#
594# Multimedia devices
595#
596# CONFIG_VIDEO_DEV is not set
597# CONFIG_DVB_CORE is not set
598CONFIG_DAB=y
599
600#
601# Graphics support
602#
603# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
604
605#
606# Display device support
607#
608# CONFIG_DISPLAY_SUPPORT is not set
609# CONFIG_VGASTATE is not set
610# CONFIG_VIDEO_OUTPUT_CONTROL is not set
611# CONFIG_FB is not set
612
613#
614# Console display driver support
615#
616CONFIG_DUMMY_CONSOLE=y
617
618#
619# Sound
620#
621# CONFIG_SOUND is not set
622# CONFIG_HID_SUPPORT is not set
623# CONFIG_USB_SUPPORT is not set
624# CONFIG_MMC is not set
625# CONFIG_NEW_LEDS is not set
626CONFIG_RTC_LIB=y
627CONFIG_RTC_CLASS=y
628# CONFIG_RTC_HCTOSYS is not set
629# CONFIG_RTC_DEBUG is not set
630
631#
632# RTC interfaces
633#
634CONFIG_RTC_INTF_SYSFS=y
635CONFIG_RTC_INTF_PROC=y
636CONFIG_RTC_INTF_DEV=y
637# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
638# CONFIG_RTC_DRV_TEST is not set
639
640#
641# SPI RTC drivers
642#
643
644#
645# Platform RTC drivers
646#
647# CONFIG_RTC_DRV_DS1553 is not set
648# CONFIG_RTC_DRV_STK17TA8 is not set
649# CONFIG_RTC_DRV_DS1742 is not set
650# CONFIG_RTC_DRV_M48T86 is not set
651# CONFIG_RTC_DRV_M48T59 is not set
652# CONFIG_RTC_DRV_V3020 is not set
653
654#
655# on-CPU RTC drivers
656#
657CONFIG_RTC_DRV_SH=y
658
659#
660# DMA Engine support
661#
662# CONFIG_DMA_ENGINE is not set
663
664#
665# DMA Clients
666#
667
668#
669# DMA Devices
670#
671
672#
673# Userspace I/O
674#
675# CONFIG_UIO is not set
676
677#
678# File systems
679#
680CONFIG_EXT2_FS=y
681# CONFIG_EXT2_FS_XATTR is not set
682# CONFIG_EXT2_FS_XIP is not set
683CONFIG_EXT3_FS=y
684# CONFIG_EXT3_FS_XATTR is not set
685# CONFIG_EXT4DEV_FS is not set
686CONFIG_JBD=y
687# CONFIG_JBD_DEBUG is not set
688# CONFIG_REISERFS_FS is not set
689# CONFIG_JFS_FS is not set
690# CONFIG_FS_POSIX_ACL is not set
691# CONFIG_XFS_FS is not set
692# CONFIG_GFS2_FS is not set
693# CONFIG_OCFS2_FS is not set
694# CONFIG_MINIX_FS is not set
695# CONFIG_ROMFS_FS is not set
696# CONFIG_INOTIFY is not set
697# CONFIG_QUOTA is not set
698# CONFIG_DNOTIFY is not set
699# CONFIG_AUTOFS_FS is not set
700# CONFIG_AUTOFS4_FS is not set
701# CONFIG_FUSE_FS is not set
702
703#
704# CD-ROM/DVD Filesystems
705#
706# CONFIG_ISO9660_FS is not set
707# CONFIG_UDF_FS is not set
708
709#
710# DOS/FAT/NT Filesystems
711#
712# CONFIG_MSDOS_FS is not set
713# CONFIG_VFAT_FS is not set
714# CONFIG_NTFS_FS is not set
715
716#
717# Pseudo filesystems
718#
719CONFIG_PROC_FS=y
720CONFIG_PROC_KCORE=y
721CONFIG_PROC_SYSCTL=y
722CONFIG_SYSFS=y
723CONFIG_TMPFS=y
724# CONFIG_TMPFS_POSIX_ACL is not set
725# CONFIG_HUGETLBFS is not set
726# CONFIG_HUGETLB_PAGE is not set
727CONFIG_RAMFS=y
728# CONFIG_CONFIGFS_FS is not set
729
730#
731# Miscellaneous filesystems
732#
733# CONFIG_ADFS_FS is not set
734# CONFIG_AFFS_FS is not set
735# CONFIG_HFS_FS is not set
736# CONFIG_HFSPLUS_FS is not set
737# CONFIG_BEFS_FS is not set
738# CONFIG_BFS_FS is not set
739# CONFIG_EFS_FS is not set
740CONFIG_JFFS2_FS=y
741CONFIG_JFFS2_FS_DEBUG=0
742# CONFIG_JFFS2_FS_WRITEBUFFER is not set
743# CONFIG_JFFS2_SUMMARY is not set
744# CONFIG_JFFS2_FS_XATTR is not set
745# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
746CONFIG_JFFS2_ZLIB=y
747CONFIG_JFFS2_RTIME=y
748# CONFIG_JFFS2_RUBIN is not set
749# CONFIG_CRAMFS is not set
750# CONFIG_VXFS_FS is not set
751# CONFIG_HPFS_FS is not set
752# CONFIG_QNX4FS_FS is not set
753# CONFIG_SYSV_FS is not set
754# CONFIG_UFS_FS is not set
755
756#
757# Network File Systems
758#
759CONFIG_NFS_FS=y
760CONFIG_NFS_V3=y
761# CONFIG_NFS_V3_ACL is not set
762# CONFIG_NFS_V4 is not set
763# CONFIG_NFS_DIRECTIO is not set
764# CONFIG_NFSD is not set
765CONFIG_ROOT_NFS=y
766CONFIG_LOCKD=y
767CONFIG_LOCKD_V4=y
768CONFIG_NFS_COMMON=y
769CONFIG_SUNRPC=y
770CONFIG_SUNRPC_BIND34=y
771# CONFIG_RPCSEC_GSS_KRB5 is not set
772# CONFIG_RPCSEC_GSS_SPKM3 is not set
773# CONFIG_SMB_FS is not set
774# CONFIG_CIFS is not set
775# CONFIG_NCP_FS is not set
776# CONFIG_CODA_FS is not set
777# CONFIG_AFS_FS is not set
778
779#
780# Partition Types
781#
782# CONFIG_PARTITION_ADVANCED is not set
783CONFIG_MSDOS_PARTITION=y
784
785#
786# Native Language Support
787#
788CONFIG_NLS=y
789CONFIG_NLS_DEFAULT="cp437"
790CONFIG_NLS_CODEPAGE_437=y
791# CONFIG_NLS_CODEPAGE_737 is not set
792# CONFIG_NLS_CODEPAGE_775 is not set
793CONFIG_NLS_CODEPAGE_850=y
794# CONFIG_NLS_CODEPAGE_852 is not set
795# CONFIG_NLS_CODEPAGE_855 is not set
796# CONFIG_NLS_CODEPAGE_857 is not set
797# CONFIG_NLS_CODEPAGE_860 is not set
798# CONFIG_NLS_CODEPAGE_861 is not set
799# CONFIG_NLS_CODEPAGE_862 is not set
800# CONFIG_NLS_CODEPAGE_863 is not set
801# CONFIG_NLS_CODEPAGE_864 is not set
802# CONFIG_NLS_CODEPAGE_865 is not set
803# CONFIG_NLS_CODEPAGE_866 is not set
804# CONFIG_NLS_CODEPAGE_869 is not set
805# CONFIG_NLS_CODEPAGE_936 is not set
806# CONFIG_NLS_CODEPAGE_950 is not set
807# CONFIG_NLS_CODEPAGE_932 is not set
808# CONFIG_NLS_CODEPAGE_949 is not set
809# CONFIG_NLS_CODEPAGE_874 is not set
810# CONFIG_NLS_ISO8859_8 is not set
811# CONFIG_NLS_CODEPAGE_1250 is not set
812# CONFIG_NLS_CODEPAGE_1251 is not set
813# CONFIG_NLS_ASCII is not set
814CONFIG_NLS_ISO8859_1=y
815# CONFIG_NLS_ISO8859_2 is not set
816# CONFIG_NLS_ISO8859_3 is not set
817# CONFIG_NLS_ISO8859_4 is not set
818# CONFIG_NLS_ISO8859_5 is not set
819# CONFIG_NLS_ISO8859_6 is not set
820# CONFIG_NLS_ISO8859_7 is not set
821# CONFIG_NLS_ISO8859_9 is not set
822# CONFIG_NLS_ISO8859_13 is not set
823# CONFIG_NLS_ISO8859_14 is not set
824# CONFIG_NLS_ISO8859_15 is not set
825# CONFIG_NLS_KOI8_R is not set
826# CONFIG_NLS_KOI8_U is not set
827# CONFIG_NLS_UTF8 is not set
828
829#
830# Distributed Lock Manager
831#
832# CONFIG_DLM is not set
833
834#
835# Profiling support
836#
837# CONFIG_PROFILING is not set
838
839#
840# Kernel hacking
841#
842CONFIG_TRACE_IRQFLAGS_SUPPORT=y
843# CONFIG_PRINTK_TIME is not set
844CONFIG_ENABLE_MUST_CHECK=y
845CONFIG_MAGIC_SYSRQ=y
846# CONFIG_UNUSED_SYMBOLS is not set
847# CONFIG_DEBUG_FS is not set
848# CONFIG_HEADERS_CHECK is not set
849CONFIG_DEBUG_KERNEL=y
850# CONFIG_DEBUG_SHIRQ is not set
851# CONFIG_DETECT_SOFTLOCKUP is not set
852# CONFIG_SCHED_DEBUG is not set
853# CONFIG_SCHEDSTATS is not set
854# CONFIG_TIMER_STATS is not set
855# CONFIG_DEBUG_SLAB is not set
856# CONFIG_DEBUG_RT_MUTEXES is not set
857# CONFIG_RT_MUTEX_TESTER is not set
858# CONFIG_DEBUG_SPINLOCK is not set
859# CONFIG_DEBUG_MUTEXES is not set
860# CONFIG_DEBUG_LOCK_ALLOC is not set
861# CONFIG_PROVE_LOCKING is not set
862# CONFIG_LOCK_STAT is not set
863# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
864# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
865CONFIG_DEBUG_KOBJECT=y
866CONFIG_DEBUG_BUGVERBOSE=y
867CONFIG_DEBUG_INFO=y
868# CONFIG_DEBUG_VM is not set
869# CONFIG_DEBUG_LIST is not set
870CONFIG_FRAME_POINTER=y
871# CONFIG_FORCED_INLINING is not set
872# CONFIG_RCU_TORTURE_TEST is not set
873# CONFIG_FAULT_INJECTION is not set
874# CONFIG_SH_STANDARD_BIOS is not set
875CONFIG_EARLY_SCIF_CONSOLE=y
876CONFIG_EARLY_SCIF_CONSOLE_PORT=0xa4430000
877CONFIG_EARLY_PRINTK=y
878# CONFIG_DEBUG_BOOTMEM is not set
879# CONFIG_DEBUG_STACKOVERFLOW is not set
880# CONFIG_DEBUG_STACK_USAGE is not set
881# CONFIG_4KSTACKS is not set
882CONFIG_SH_KGDB=y
883
884#
885# KGDB configuration options
886#
887# CONFIG_MORE_COMPILE_OPTIONS is not set
888# CONFIG_KGDB_NMI is not set
889CONFIG_KGDB_SYSRQ=y
890
891#
892# Serial port setup
893#
894CONFIG_KGDB_DEFPORT=0
895CONFIG_KGDB_DEFBAUD=115200
896CONFIG_KGDB_DEFPARITY_N=y
897# CONFIG_KGDB_DEFPARITY_E is not set
898# CONFIG_KGDB_DEFPARITY_O is not set
899CONFIG_KGDB_DEFBITS_8=y
900# CONFIG_KGDB_DEFBITS_7 is not set
901
902#
903# Security options
904#
905# CONFIG_KEYS is not set
906# CONFIG_SECURITY is not set
907# CONFIG_CRYPTO is not set
908
909#
910# Library routines
911#
912CONFIG_BITREVERSE=y
913CONFIG_CRC_CCITT=m
914CONFIG_CRC16=m
915# CONFIG_CRC_ITU_T is not set
916CONFIG_CRC32=y
917# CONFIG_CRC7 is not set
918# CONFIG_LIBCRC32C is not set
919CONFIG_AUDIT_GENERIC=y
920CONFIG_ZLIB_INFLATE=y
921CONFIG_ZLIB_DEFLATE=y
922CONFIG_PLIST=y
923CONFIG_HAS_IOMEM=y
924CONFIG_HAS_IOPORT=y
925CONFIG_HAS_DMA=y
diff --git a/arch/sh/configs/rts7751r2d_defconfig b/arch/sh/configs/rts7751r2d1_defconfig
index b64f73b704d6..2dc754e5b733 100644
--- a/arch/sh/configs/rts7751r2d_defconfig
+++ b/arch/sh/configs/rts7751r2d1_defconfig
@@ -1,46 +1,47 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.21-rc1 3# Linux kernel version: 2.6.23-rc2
4# Thu Mar 1 16:42:40 2007 4# Tue Aug 14 18:04:44 2007
5# 5#
6CONFIG_SUPERH=y 6CONFIG_SUPERH=y
7CONFIG_RWSEM_GENERIC_SPINLOCK=y 7CONFIG_RWSEM_GENERIC_SPINLOCK=y
8CONFIG_GENERIC_BUG=y
8CONFIG_GENERIC_FIND_NEXT_BIT=y 9CONFIG_GENERIC_FIND_NEXT_BIT=y
9CONFIG_GENERIC_HWEIGHT=y 10CONFIG_GENERIC_HWEIGHT=y
10CONFIG_GENERIC_HARDIRQS=y 11CONFIG_GENERIC_HARDIRQS=y
11CONFIG_GENERIC_IRQ_PROBE=y 12CONFIG_GENERIC_IRQ_PROBE=y
12CONFIG_GENERIC_CALIBRATE_DELAY=y 13CONFIG_GENERIC_CALIBRATE_DELAY=y
13# CONFIG_GENERIC_TIME is not set 14CONFIG_GENERIC_TIME=y
15CONFIG_GENERIC_CLOCKEVENTS=y
16CONFIG_SYS_SUPPORTS_PCI=y
14CONFIG_STACKTRACE_SUPPORT=y 17CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_LOCKDEP_SUPPORT=y 18CONFIG_LOCKDEP_SUPPORT=y
16# CONFIG_ARCH_HAS_ILOG2_U32 is not set 19# CONFIG_ARCH_HAS_ILOG2_U32 is not set
17# CONFIG_ARCH_HAS_ILOG2_U64 is not set 20# CONFIG_ARCH_HAS_ILOG2_U64 is not set
21CONFIG_ARCH_NO_VIRT_TO_BUS=y
18CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 22CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
19 23
20# 24#
21# Code maturity level options 25# General setup
22# 26#
23CONFIG_EXPERIMENTAL=y 27CONFIG_EXPERIMENTAL=y
24CONFIG_BROKEN_ON_SMP=y 28CONFIG_BROKEN_ON_SMP=y
25CONFIG_INIT_ENV_ARG_LIMIT=32 29CONFIG_INIT_ENV_ARG_LIMIT=32
26
27#
28# General setup
29#
30CONFIG_LOCALVERSION="" 30CONFIG_LOCALVERSION=""
31CONFIG_LOCALVERSION_AUTO=y 31CONFIG_LOCALVERSION_AUTO=y
32CONFIG_SWAP=y 32CONFIG_SWAP=y
33CONFIG_SYSVIPC=y 33CONFIG_SYSVIPC=y
34# CONFIG_IPC_NS is not set
35CONFIG_SYSVIPC_SYSCTL=y 34CONFIG_SYSVIPC_SYSCTL=y
36# CONFIG_POSIX_MQUEUE is not set 35# CONFIG_POSIX_MQUEUE is not set
37# CONFIG_BSD_PROCESS_ACCT is not set 36# CONFIG_BSD_PROCESS_ACCT is not set
38# CONFIG_TASKSTATS is not set 37# CONFIG_TASKSTATS is not set
39# CONFIG_UTS_NS is not set 38# CONFIG_USER_NS is not set
40# CONFIG_AUDIT is not set 39# CONFIG_AUDIT is not set
41# CONFIG_IKCONFIG is not set 40# CONFIG_IKCONFIG is not set
41CONFIG_LOG_BUF_SHIFT=14
42CONFIG_SYSFS_DEPRECATED=y 42CONFIG_SYSFS_DEPRECATED=y
43# CONFIG_RELAY is not set 43# CONFIG_RELAY is not set
44# CONFIG_BLK_DEV_INITRD is not set
44# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 45# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
45CONFIG_SYSCTL=y 46CONFIG_SYSCTL=y
46CONFIG_EMBEDDED=y 47CONFIG_EMBEDDED=y
@@ -54,31 +55,29 @@ CONFIG_BUG=y
54CONFIG_ELF_CORE=y 55CONFIG_ELF_CORE=y
55CONFIG_BASE_FULL=y 56CONFIG_BASE_FULL=y
56CONFIG_FUTEX=y 57CONFIG_FUTEX=y
58CONFIG_ANON_INODES=y
57CONFIG_EPOLL=y 59CONFIG_EPOLL=y
60CONFIG_SIGNALFD=y
61CONFIG_TIMERFD=y
62CONFIG_EVENTFD=y
58CONFIG_SHMEM=y 63CONFIG_SHMEM=y
59CONFIG_SLAB=y
60CONFIG_VM_EVENT_COUNTERS=y 64CONFIG_VM_EVENT_COUNTERS=y
65CONFIG_SLAB=y
66# CONFIG_SLUB is not set
67# CONFIG_SLOB is not set
61CONFIG_RT_MUTEXES=y 68CONFIG_RT_MUTEXES=y
62# CONFIG_TINY_SHMEM is not set 69# CONFIG_TINY_SHMEM is not set
63CONFIG_BASE_SMALL=0 70CONFIG_BASE_SMALL=0
64# CONFIG_SLOB is not set
65
66#
67# Loadable module support
68#
69CONFIG_MODULES=y 71CONFIG_MODULES=y
70# CONFIG_MODULE_UNLOAD is not set 72# CONFIG_MODULE_UNLOAD is not set
71# CONFIG_MODVERSIONS is not set 73# CONFIG_MODVERSIONS is not set
72# CONFIG_MODULE_SRCVERSION_ALL is not set 74# CONFIG_MODULE_SRCVERSION_ALL is not set
73# CONFIG_KMOD is not set 75# CONFIG_KMOD is not set
74
75#
76# Block layer
77#
78CONFIG_BLOCK=y 76CONFIG_BLOCK=y
79# CONFIG_LBD is not set 77# CONFIG_LBD is not set
80# CONFIG_BLK_DEV_IO_TRACE is not set 78# CONFIG_BLK_DEV_IO_TRACE is not set
81# CONFIG_LSF is not set 79# CONFIG_LSF is not set
80# CONFIG_BLK_DEV_BSG is not set
82 81
83# 82#
84# IO Schedulers 83# IO Schedulers
@@ -96,61 +95,16 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
96# 95#
97# System type 96# System type
98# 97#
99# CONFIG_SH_SOLUTION_ENGINE is not set
100# CONFIG_SH_7751_SOLUTION_ENGINE is not set
101# CONFIG_SH_7300_SOLUTION_ENGINE is not set
102# CONFIG_SH_7343_SOLUTION_ENGINE is not set
103# CONFIG_SH_73180_SOLUTION_ENGINE is not set
104# CONFIG_SH_7751_SYSTEMH is not set
105# CONFIG_SH_HP6XX is not set
106# CONFIG_SH_SATURN is not set
107# CONFIG_SH_DREAMCAST is not set
108# CONFIG_SH_MPC1211 is not set
109# CONFIG_SH_SH03 is not set
110# CONFIG_SH_SECUREEDGE5410 is not set
111# CONFIG_SH_HS7751RVOIP is not set
112# CONFIG_SH_7710VOIPGW is not set
113CONFIG_SH_RTS7751R2D=y
114# CONFIG_SH_R7780RP is not set
115# CONFIG_SH_EDOSK7705 is not set
116# CONFIG_SH_SH4202_MICRODEV is not set
117# CONFIG_SH_LANDISK is not set
118# CONFIG_SH_TITAN is not set
119# CONFIG_SH_SHMIN is not set
120# CONFIG_SH_7206_SOLUTION_ENGINE is not set
121# CONFIG_SH_7619_SOLUTION_ENGINE is not set
122# CONFIG_SH_UNKNOWN is not set
123
124#
125# Processor selection
126#
127CONFIG_CPU_SH4=y 98CONFIG_CPU_SH4=y
128
129#
130# SH-2 Processor Support
131#
132# CONFIG_CPU_SUBTYPE_SH7604 is not set
133# CONFIG_CPU_SUBTYPE_SH7619 is not set 99# CONFIG_CPU_SUBTYPE_SH7619 is not set
134
135#
136# SH-2A Processor Support
137#
138# CONFIG_CPU_SUBTYPE_SH7206 is not set 100# CONFIG_CPU_SUBTYPE_SH7206 is not set
139
140#
141# SH-3 Processor Support
142#
143# CONFIG_CPU_SUBTYPE_SH7300 is not set
144# CONFIG_CPU_SUBTYPE_SH7705 is not set 101# CONFIG_CPU_SUBTYPE_SH7705 is not set
145# CONFIG_CPU_SUBTYPE_SH7706 is not set 102# CONFIG_CPU_SUBTYPE_SH7706 is not set
146# CONFIG_CPU_SUBTYPE_SH7707 is not set 103# CONFIG_CPU_SUBTYPE_SH7707 is not set
147# CONFIG_CPU_SUBTYPE_SH7708 is not set 104# CONFIG_CPU_SUBTYPE_SH7708 is not set
148# CONFIG_CPU_SUBTYPE_SH7709 is not set 105# CONFIG_CPU_SUBTYPE_SH7709 is not set
149# CONFIG_CPU_SUBTYPE_SH7710 is not set 106# CONFIG_CPU_SUBTYPE_SH7710 is not set
150 107# CONFIG_CPU_SUBTYPE_SH7712 is not set
151#
152# SH-4 Processor Support
153#
154# CONFIG_CPU_SUBTYPE_SH7750 is not set 108# CONFIG_CPU_SUBTYPE_SH7750 is not set
155# CONFIG_CPU_SUBTYPE_SH7091 is not set 109# CONFIG_CPU_SUBTYPE_SH7091 is not set
156# CONFIG_CPU_SUBTYPE_SH7750R is not set 110# CONFIG_CPU_SUBTYPE_SH7750R is not set
@@ -159,35 +113,30 @@ CONFIG_CPU_SH4=y
159CONFIG_CPU_SUBTYPE_SH7751R=y 113CONFIG_CPU_SUBTYPE_SH7751R=y
160# CONFIG_CPU_SUBTYPE_SH7760 is not set 114# CONFIG_CPU_SUBTYPE_SH7760 is not set
161# CONFIG_CPU_SUBTYPE_SH4_202 is not set 115# CONFIG_CPU_SUBTYPE_SH4_202 is not set
162
163#
164# ST40 Processor Support
165#
166# CONFIG_CPU_SUBTYPE_ST40STB1 is not set 116# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
167# CONFIG_CPU_SUBTYPE_ST40GX1 is not set 117# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
168
169#
170# SH-4A Processor Support
171#
172# CONFIG_CPU_SUBTYPE_SH7770 is not set 118# CONFIG_CPU_SUBTYPE_SH7770 is not set
173# CONFIG_CPU_SUBTYPE_SH7780 is not set 119# CONFIG_CPU_SUBTYPE_SH7780 is not set
174# CONFIG_CPU_SUBTYPE_SH7785 is not set 120# CONFIG_CPU_SUBTYPE_SH7785 is not set
175 121# CONFIG_CPU_SUBTYPE_SHX3 is not set
176#
177# SH4AL-DSP Processor Support
178#
179# CONFIG_CPU_SUBTYPE_SH73180 is not set
180# CONFIG_CPU_SUBTYPE_SH7343 is not set 122# CONFIG_CPU_SUBTYPE_SH7343 is not set
181# CONFIG_CPU_SUBTYPE_SH7722 is not set 123# CONFIG_CPU_SUBTYPE_SH7722 is not set
182 124
183# 125#
184# Memory management options 126# Memory management options
185# 127#
128CONFIG_QUICKLIST=y
186CONFIG_MMU=y 129CONFIG_MMU=y
187CONFIG_PAGE_OFFSET=0x80000000 130CONFIG_PAGE_OFFSET=0x80000000
188CONFIG_MEMORY_START=0x0c000000 131CONFIG_MEMORY_START=0x0c000000
189CONFIG_MEMORY_SIZE=0x04000000 132CONFIG_MEMORY_SIZE=0x04000000
190CONFIG_VSYSCALL=y 133CONFIG_VSYSCALL=y
134CONFIG_ARCH_FLATMEM_ENABLE=y
135CONFIG_ARCH_SPARSEMEM_ENABLE=y
136CONFIG_ARCH_SPARSEMEM_DEFAULT=y
137CONFIG_MAX_ACTIVE_REGIONS=1
138CONFIG_ARCH_POPULATES_NODE_MAP=y
139CONFIG_ARCH_SELECT_MEMORY_MODEL=y
191CONFIG_PAGE_SIZE_4KB=y 140CONFIG_PAGE_SIZE_4KB=y
192# CONFIG_PAGE_SIZE_8KB is not set 141# CONFIG_PAGE_SIZE_8KB is not set
193# CONFIG_PAGE_SIZE_64KB is not set 142# CONFIG_PAGE_SIZE_64KB is not set
@@ -197,17 +146,19 @@ CONFIG_FLATMEM_MANUAL=y
197# CONFIG_SPARSEMEM_MANUAL is not set 146# CONFIG_SPARSEMEM_MANUAL is not set
198CONFIG_FLATMEM=y 147CONFIG_FLATMEM=y
199CONFIG_FLAT_NODE_MEM_MAP=y 148CONFIG_FLAT_NODE_MEM_MAP=y
200# CONFIG_SPARSEMEM_STATIC is not set 149CONFIG_SPARSEMEM_STATIC=y
201CONFIG_SPLIT_PTLOCK_CPUS=4 150CONFIG_SPLIT_PTLOCK_CPUS=4
202# CONFIG_RESOURCES_64BIT is not set 151# CONFIG_RESOURCES_64BIT is not set
203CONFIG_ZONE_DMA_FLAG=0 152CONFIG_ZONE_DMA_FLAG=0
153CONFIG_NR_QUICK=2
204 154
205# 155#
206# Cache configuration 156# Cache configuration
207# 157#
208# CONFIG_SH_DIRECT_MAPPED is not set 158# CONFIG_SH_DIRECT_MAPPED is not set
209# CONFIG_SH_WRITETHROUGH is not set 159CONFIG_CACHE_WRITEBACK=y
210# CONFIG_SH_OCRAM is not set 160# CONFIG_CACHE_WRITETHROUGH is not set
161# CONFIG_CACHE_OFF is not set
211 162
212# 163#
213# Processor features 164# Processor features
@@ -215,7 +166,6 @@ CONFIG_ZONE_DMA_FLAG=0
215CONFIG_CPU_LITTLE_ENDIAN=y 166CONFIG_CPU_LITTLE_ENDIAN=y
216# CONFIG_CPU_BIG_ENDIAN is not set 167# CONFIG_CPU_BIG_ENDIAN is not set
217CONFIG_SH_FPU=y 168CONFIG_SH_FPU=y
218# CONFIG_SH_DSP is not set
219# CONFIG_SH_STORE_QUEUES is not set 169# CONFIG_SH_STORE_QUEUES is not set
220CONFIG_CPU_HAS_INTEVT=y 170CONFIG_CPU_HAS_INTEVT=y
221CONFIG_CPU_HAS_INTC_IRQ=y 171CONFIG_CPU_HAS_INTC_IRQ=y
@@ -223,17 +173,31 @@ CONFIG_CPU_HAS_SR_RB=y
223CONFIG_CPU_HAS_PTEA=y 173CONFIG_CPU_HAS_PTEA=y
224 174
225# 175#
226# Timer support 176# Board support
227# 177#
228CONFIG_SH_TMU=y 178# CONFIG_SH_7751_SYSTEMH is not set
179# CONFIG_SH_SECUREEDGE5410 is not set
180# CONFIG_SH_HS7751RVOIP is not set
181CONFIG_SH_RTS7751R2D=y
182# CONFIG_SH_LANDISK is not set
183# CONFIG_SH_TITAN is not set
184# CONFIG_SH_LBOX_RE2 is not set
229 185
230# 186#
231# RTS7751R2D options 187# RTS7751R2D options
232# 188#
233CONFIG_RTS7751R2D_REV11=y 189# CONFIG_RTS7751R2D_PLUS is not set
190CONFIG_RTS7751R2D_1=y
191
192#
193# Timer and clock configuration
194#
195CONFIG_SH_TMU=y
234CONFIG_SH_TIMER_IRQ=16 196CONFIG_SH_TIMER_IRQ=16
235# CONFIG_NO_IDLE_HZ is not set
236CONFIG_SH_PCLK_FREQ=60000000 197CONFIG_SH_PCLK_FREQ=60000000
198# CONFIG_TICK_ONESHOT is not set
199# CONFIG_NO_HZ is not set
200# CONFIG_HIGH_RES_TIMERS is not set
237 201
238# 202#
239# CPU Frequency scaling 203# CPU Frequency scaling
@@ -244,19 +208,15 @@ CONFIG_SH_PCLK_FREQ=60000000
244# DMA support 208# DMA support
245# 209#
246# CONFIG_SH_DMA is not set 210# CONFIG_SH_DMA is not set
247# CONFIG_NR_ONCHIP_DMA_CHANNELS is not set
248# CONFIG_NR_DMA_CHANNELS_BOOL is not set
249 211
250# 212#
251# Companion Chips 213# Companion Chips
252# 214#
253CONFIG_VOYAGERGX=y
254# CONFIG_HD6446X_SERIES is not set
255CONFIG_HEARTBEAT=y
256 215
257# 216#
258# Additional SuperH Device Drivers 217# Additional SuperH Device Drivers
259# 218#
219CONFIG_HEARTBEAT=y
260# CONFIG_PUSH_SWITCH is not set 220# CONFIG_PUSH_SWITCH is not set
261 221
262# 222#
@@ -268,7 +228,7 @@ CONFIG_HZ_250=y
268# CONFIG_HZ_1000 is not set 228# CONFIG_HZ_1000 is not set
269CONFIG_HZ=250 229CONFIG_HZ=250
270# CONFIG_KEXEC is not set 230# CONFIG_KEXEC is not set
271# CONFIG_SMP is not set 231# CONFIG_CRASH_DUMP is not set
272CONFIG_PREEMPT_NONE=y 232CONFIG_PREEMPT_NONE=y
273# CONFIG_PREEMPT_VOLUNTARY is not set 233# CONFIG_PREEMPT_VOLUNTARY is not set
274# CONFIG_PREEMPT is not set 234# CONFIG_PREEMPT is not set
@@ -289,15 +249,12 @@ CONFIG_PCI=y
289CONFIG_SH_PCIDMA_NONCOHERENT=y 249CONFIG_SH_PCIDMA_NONCOHERENT=y
290CONFIG_PCI_AUTO=y 250CONFIG_PCI_AUTO=y
291CONFIG_PCI_AUTO_UPDATE_RESOURCES=y 251CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
252# CONFIG_ARCH_SUPPORTS_MSI is not set
292 253
293# 254#
294# PCCARD (PCMCIA/CardBus) support 255# PCCARD (PCMCIA/CardBus) support
295# 256#
296# CONFIG_PCCARD is not set 257# CONFIG_PCCARD is not set
297
298#
299# PCI Hotplug Support
300#
301CONFIG_HOTPLUG_PCI=y 258CONFIG_HOTPLUG_PCI=y
302# CONFIG_HOTPLUG_PCI_FAKE is not set 259# CONFIG_HOTPLUG_PCI_FAKE is not set
303# CONFIG_HOTPLUG_PCI_CPCI is not set 260# CONFIG_HOTPLUG_PCI_CPCI is not set
@@ -307,15 +264,9 @@ CONFIG_HOTPLUG_PCI=y
307# Executable file formats 264# Executable file formats
308# 265#
309CONFIG_BINFMT_ELF=y 266CONFIG_BINFMT_ELF=y
310# CONFIG_BINFMT_FLAT is not set
311# CONFIG_BINFMT_MISC is not set 267# CONFIG_BINFMT_MISC is not set
312 268
313# 269#
314# Power management options (EXPERIMENTAL)
315#
316# CONFIG_PM is not set
317
318#
319# Networking 270# Networking
320# 271#
321CONFIG_NET=y 272CONFIG_NET=y
@@ -323,7 +274,6 @@ CONFIG_NET=y
323# 274#
324# Networking options 275# Networking options
325# 276#
326# CONFIG_NETDEBUG is not set
327CONFIG_PACKET=y 277CONFIG_PACKET=y
328# CONFIG_PACKET_MMAP is not set 278# CONFIG_PACKET_MMAP is not set
329CONFIG_UNIX=y 279CONFIG_UNIX=y
@@ -360,20 +310,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
360# CONFIG_INET6_TUNNEL is not set 310# CONFIG_INET6_TUNNEL is not set
361# CONFIG_NETWORK_SECMARK is not set 311# CONFIG_NETWORK_SECMARK is not set
362# CONFIG_NETFILTER is not set 312# CONFIG_NETFILTER is not set
363
364#
365# DCCP Configuration (EXPERIMENTAL)
366#
367# CONFIG_IP_DCCP is not set 313# CONFIG_IP_DCCP is not set
368
369#
370# SCTP Configuration (EXPERIMENTAL)
371#
372# CONFIG_IP_SCTP is not set 314# CONFIG_IP_SCTP is not set
373
374#
375# TIPC Configuration (EXPERIMENTAL)
376#
377# CONFIG_TIPC is not set 315# CONFIG_TIPC is not set
378# CONFIG_ATM is not set 316# CONFIG_ATM is not set
379# CONFIG_BRIDGE is not set 317# CONFIG_BRIDGE is not set
@@ -399,8 +337,17 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
399# CONFIG_HAMRADIO is not set 337# CONFIG_HAMRADIO is not set
400# CONFIG_IRDA is not set 338# CONFIG_IRDA is not set
401# CONFIG_BT is not set 339# CONFIG_BT is not set
402# CONFIG_IEEE80211 is not set 340# CONFIG_AF_RXRPC is not set
341
342#
343# Wireless
344#
345# CONFIG_CFG80211 is not set
403CONFIG_WIRELESS_EXT=y 346CONFIG_WIRELESS_EXT=y
347# CONFIG_MAC80211 is not set
348# CONFIG_IEEE80211 is not set
349# CONFIG_RFKILL is not set
350# CONFIG_NET_9P is not set
404 351
405# 352#
406# Device Drivers 353# Device Drivers
@@ -413,31 +360,10 @@ CONFIG_STANDALONE=y
413CONFIG_PREVENT_FIRMWARE_BUILD=y 360CONFIG_PREVENT_FIRMWARE_BUILD=y
414CONFIG_FW_LOADER=m 361CONFIG_FW_LOADER=m
415# CONFIG_SYS_HYPERVISOR is not set 362# CONFIG_SYS_HYPERVISOR is not set
416
417#
418# Connector - unified userspace <-> kernelspace linker
419#
420# CONFIG_CONNECTOR is not set 363# CONFIG_CONNECTOR is not set
421
422#
423# Memory Technology Devices (MTD)
424#
425# CONFIG_MTD is not set 364# CONFIG_MTD is not set
426
427#
428# Parallel port support
429#
430# CONFIG_PARPORT is not set 365# CONFIG_PARPORT is not set
431 366CONFIG_BLK_DEV=y
432#
433# Plug and Play support
434#
435# CONFIG_PNPACPI is not set
436
437#
438# Block devices
439#
440# CONFIG_BLK_CPQ_DA is not set
441# CONFIG_BLK_CPQ_CISS_DA is not set 367# CONFIG_BLK_CPQ_CISS_DA is not set
442# CONFIG_BLK_DEV_DAC960 is not set 368# CONFIG_BLK_DEV_DAC960 is not set
443# CONFIG_BLK_DEV_UMEM is not set 369# CONFIG_BLK_DEV_UMEM is not set
@@ -449,19 +375,13 @@ CONFIG_BLK_DEV_RAM=y
449CONFIG_BLK_DEV_RAM_COUNT=16 375CONFIG_BLK_DEV_RAM_COUNT=16
450CONFIG_BLK_DEV_RAM_SIZE=4096 376CONFIG_BLK_DEV_RAM_SIZE=4096
451CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 377CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
452# CONFIG_BLK_DEV_INITRD is not set
453# CONFIG_CDROM_PKTCDVD is not set 378# CONFIG_CDROM_PKTCDVD is not set
454# CONFIG_ATA_OVER_ETH is not set 379# CONFIG_ATA_OVER_ETH is not set
455 380CONFIG_MISC_DEVICES=y
456# 381# CONFIG_PHANTOM is not set
457# Misc devices 382# CONFIG_EEPROM_93CX6 is not set
458#
459# CONFIG_SGI_IOC4 is not set 383# CONFIG_SGI_IOC4 is not set
460# CONFIG_TIFM_CORE is not set 384# CONFIG_TIFM_CORE is not set
461
462#
463# ATA/ATAPI/MFM/RLL support
464#
465# CONFIG_IDE is not set 385# CONFIG_IDE is not set
466 386
467# 387#
@@ -469,6 +389,7 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
469# 389#
470# CONFIG_RAID_ATTRS is not set 390# CONFIG_RAID_ATTRS is not set
471CONFIG_SCSI=y 391CONFIG_SCSI=y
392CONFIG_SCSI_DMA=y
472# CONFIG_SCSI_TGT is not set 393# CONFIG_SCSI_TGT is not set
473# CONFIG_SCSI_NETLINK is not set 394# CONFIG_SCSI_NETLINK is not set
474CONFIG_SCSI_PROC_FS=y 395CONFIG_SCSI_PROC_FS=y
@@ -490,6 +411,7 @@ CONFIG_BLK_DEV_SD=y
490# CONFIG_SCSI_CONSTANTS is not set 411# CONFIG_SCSI_CONSTANTS is not set
491# CONFIG_SCSI_LOGGING is not set 412# CONFIG_SCSI_LOGGING is not set
492# CONFIG_SCSI_SCAN_ASYNC is not set 413# CONFIG_SCSI_SCAN_ASYNC is not set
414CONFIG_SCSI_WAIT_SCAN=m
493 415
494# 416#
495# SCSI Transports 417# SCSI Transports
@@ -497,12 +419,8 @@ CONFIG_BLK_DEV_SD=y
497# CONFIG_SCSI_SPI_ATTRS is not set 419# CONFIG_SCSI_SPI_ATTRS is not set
498# CONFIG_SCSI_FC_ATTRS is not set 420# CONFIG_SCSI_FC_ATTRS is not set
499# CONFIG_SCSI_ISCSI_ATTRS is not set 421# CONFIG_SCSI_ISCSI_ATTRS is not set
500# CONFIG_SCSI_SAS_ATTRS is not set
501# CONFIG_SCSI_SAS_LIBSAS is not set 422# CONFIG_SCSI_SAS_LIBSAS is not set
502 423CONFIG_SCSI_LOWLEVEL=y
503#
504# SCSI low-level drivers
505#
506# CONFIG_ISCSI_TCP is not set 424# CONFIG_ISCSI_TCP is not set
507# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 425# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
508# CONFIG_SCSI_3W_9XXX is not set 426# CONFIG_SCSI_3W_9XXX is not set
@@ -512,7 +430,6 @@ CONFIG_BLK_DEV_SD=y
512# CONFIG_SCSI_AIC7XXX_OLD is not set 430# CONFIG_SCSI_AIC7XXX_OLD is not set
513# CONFIG_SCSI_AIC79XX is not set 431# CONFIG_SCSI_AIC79XX is not set
514# CONFIG_SCSI_AIC94XX is not set 432# CONFIG_SCSI_AIC94XX is not set
515# CONFIG_SCSI_DPT_I2O is not set
516# CONFIG_SCSI_ARCMSR is not set 433# CONFIG_SCSI_ARCMSR is not set
517# CONFIG_MEGARAID_NEWGEN is not set 434# CONFIG_MEGARAID_NEWGEN is not set
518# CONFIG_MEGARAID_LEGACY is not set 435# CONFIG_MEGARAID_LEGACY is not set
@@ -535,10 +452,6 @@ CONFIG_BLK_DEV_SD=y
535# CONFIG_SCSI_NSP32 is not set 452# CONFIG_SCSI_NSP32 is not set
536# CONFIG_SCSI_DEBUG is not set 453# CONFIG_SCSI_DEBUG is not set
537# CONFIG_SCSI_SRP is not set 454# CONFIG_SCSI_SRP is not set
538
539#
540# Serial ATA (prod) and Parallel ATA (experimental) drivers
541#
542CONFIG_ATA=y 455CONFIG_ATA=y
543# CONFIG_ATA_NONSTANDARD is not set 456# CONFIG_ATA_NONSTANDARD is not set
544# CONFIG_SATA_AHCI is not set 457# CONFIG_SATA_AHCI is not set
@@ -561,6 +474,7 @@ CONFIG_ATA=y
561# CONFIG_PATA_AMD is not set 474# CONFIG_PATA_AMD is not set
562# CONFIG_PATA_ARTOP is not set 475# CONFIG_PATA_ARTOP is not set
563# CONFIG_PATA_ATIIXP is not set 476# CONFIG_PATA_ATIIXP is not set
477# CONFIG_PATA_CMD640_PCI is not set
564# CONFIG_PATA_CMD64X is not set 478# CONFIG_PATA_CMD64X is not set
565# CONFIG_PATA_CS5520 is not set 479# CONFIG_PATA_CS5520 is not set
566# CONFIG_PATA_CS5530 is not set 480# CONFIG_PATA_CS5530 is not set
@@ -593,10 +507,6 @@ CONFIG_ATA=y
593# CONFIG_PATA_VIA is not set 507# CONFIG_PATA_VIA is not set
594# CONFIG_PATA_WINBOND is not set 508# CONFIG_PATA_WINBOND is not set
595CONFIG_PATA_PLATFORM=y 509CONFIG_PATA_PLATFORM=y
596
597#
598# Multi-device support (RAID and LVM)
599#
600# CONFIG_MD is not set 510# CONFIG_MD is not set
601 511
602# 512#
@@ -610,35 +520,18 @@ CONFIG_PATA_PLATFORM=y
610# 520#
611# IEEE 1394 (FireWire) support 521# IEEE 1394 (FireWire) support
612# 522#
523# CONFIG_FIREWIRE is not set
613# CONFIG_IEEE1394 is not set 524# CONFIG_IEEE1394 is not set
614
615#
616# I2O device support
617#
618# CONFIG_I2O is not set 525# CONFIG_I2O is not set
619
620#
621# Network device support
622#
623CONFIG_NETDEVICES=y 526CONFIG_NETDEVICES=y
527# CONFIG_NETDEVICES_MULTIQUEUE is not set
624# CONFIG_DUMMY is not set 528# CONFIG_DUMMY is not set
625# CONFIG_BONDING is not set 529# CONFIG_BONDING is not set
530# CONFIG_MACVLAN is not set
626# CONFIG_EQUALIZER is not set 531# CONFIG_EQUALIZER is not set
627# CONFIG_TUN is not set 532# CONFIG_TUN is not set
628
629#
630# ARCnet devices
631#
632# CONFIG_ARCNET is not set 533# CONFIG_ARCNET is not set
633
634#
635# PHY device support
636#
637# CONFIG_PHYLIB is not set 534# CONFIG_PHYLIB is not set
638
639#
640# Ethernet (10 or 100Mbit)
641#
642CONFIG_NET_ETHERNET=y 535CONFIG_NET_ETHERNET=y
643CONFIG_MII=y 536CONFIG_MII=y
644# CONFIG_STNIC is not set 537# CONFIG_STNIC is not set
@@ -647,10 +540,6 @@ CONFIG_MII=y
647# CONFIG_CASSINI is not set 540# CONFIG_CASSINI is not set
648# CONFIG_NET_VENDOR_3COM is not set 541# CONFIG_NET_VENDOR_3COM is not set
649# CONFIG_SMC91X is not set 542# CONFIG_SMC91X is not set
650
651#
652# Tulip family network device support
653#
654# CONFIG_NET_TULIP is not set 543# CONFIG_NET_TULIP is not set
655# CONFIG_HP100 is not set 544# CONFIG_HP100 is not set
656CONFIG_NET_PCI=y 545CONFIG_NET_PCI=y
@@ -677,10 +566,7 @@ CONFIG_8139TOO=y
677# CONFIG_TLAN is not set 566# CONFIG_TLAN is not set
678# CONFIG_VIA_RHINE is not set 567# CONFIG_VIA_RHINE is not set
679# CONFIG_SC92031 is not set 568# CONFIG_SC92031 is not set
680 569CONFIG_NETDEV_1000=y
681#
682# Ethernet (1000 Mbit)
683#
684# CONFIG_ACENIC is not set 570# CONFIG_ACENIC is not set
685# CONFIG_DL2K is not set 571# CONFIG_DL2K is not set
686# CONFIG_E1000 is not set 572# CONFIG_E1000 is not set
@@ -691,61 +577,26 @@ CONFIG_8139TOO=y
691# CONFIG_SIS190 is not set 577# CONFIG_SIS190 is not set
692# CONFIG_SKGE is not set 578# CONFIG_SKGE is not set
693# CONFIG_SKY2 is not set 579# CONFIG_SKY2 is not set
694# CONFIG_SK98LIN is not set
695# CONFIG_VIA_VELOCITY is not set 580# CONFIG_VIA_VELOCITY is not set
696# CONFIG_TIGON3 is not set 581# CONFIG_TIGON3 is not set
697# CONFIG_BNX2 is not set 582# CONFIG_BNX2 is not set
698# CONFIG_QLA3XXX is not set 583# CONFIG_QLA3XXX is not set
699# CONFIG_ATL1 is not set 584# CONFIG_ATL1 is not set
700 585CONFIG_NETDEV_10000=y
701#
702# Ethernet (10000 Mbit)
703#
704# CONFIG_CHELSIO_T1 is not set 586# CONFIG_CHELSIO_T1 is not set
705# CONFIG_CHELSIO_T3 is not set 587# CONFIG_CHELSIO_T3 is not set
706# CONFIG_IXGB is not set 588# CONFIG_IXGB is not set
707# CONFIG_S2IO is not set 589# CONFIG_S2IO is not set
708# CONFIG_MYRI10GE is not set 590# CONFIG_MYRI10GE is not set
709# CONFIG_NETXEN_NIC is not set 591# CONFIG_NETXEN_NIC is not set
710 592# CONFIG_MLX4_CORE is not set
711#
712# Token Ring devices
713#
714# CONFIG_TR is not set 593# CONFIG_TR is not set
715 594
716# 595#
717# Wireless LAN (non-hamradio) 596# Wireless LAN
718#
719CONFIG_NET_RADIO=y
720# CONFIG_NET_WIRELESS_RTNETLINK is not set
721
722#
723# Obsolete Wireless cards support (pre-802.11)
724#
725# CONFIG_STRIP is not set
726
727#
728# Wireless 802.11b ISA/PCI cards support
729#
730# CONFIG_IPW2100 is not set
731# CONFIG_IPW2200 is not set
732CONFIG_HERMES=m
733# CONFIG_PLX_HERMES is not set
734# CONFIG_TMD_HERMES is not set
735# CONFIG_NORTEL_HERMES is not set
736# CONFIG_PCI_HERMES is not set
737# CONFIG_ATMEL is not set
738
739#
740# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
741#
742# CONFIG_PRISM54 is not set
743# CONFIG_HOSTAP is not set
744CONFIG_NET_WIRELESS=y
745
746#
747# Wan interfaces
748# 597#
598# CONFIG_WLAN_PRE80211 is not set
599# CONFIG_WLAN_80211 is not set
749# CONFIG_WAN is not set 600# CONFIG_WAN is not set
750# CONFIG_FDDI is not set 601# CONFIG_FDDI is not set
751# CONFIG_HIPPI is not set 602# CONFIG_HIPPI is not set
@@ -756,15 +607,7 @@ CONFIG_NET_WIRELESS=y
756# CONFIG_NETCONSOLE is not set 607# CONFIG_NETCONSOLE is not set
757# CONFIG_NETPOLL is not set 608# CONFIG_NETPOLL is not set
758# CONFIG_NET_POLL_CONTROLLER is not set 609# CONFIG_NET_POLL_CONTROLLER is not set
759
760#
761# ISDN subsystem
762#
763# CONFIG_ISDN is not set 610# CONFIG_ISDN is not set
764
765#
766# Telephony Support
767#
768# CONFIG_PHONE is not set 611# CONFIG_PHONE is not set
769 612
770# 613#
@@ -772,6 +615,7 @@ CONFIG_NET_WIRELESS=y
772# 615#
773CONFIG_INPUT=y 616CONFIG_INPUT=y
774# CONFIG_INPUT_FF_MEMLESS is not set 617# CONFIG_INPUT_FF_MEMLESS is not set
618# CONFIG_INPUT_POLLDEV is not set
775 619
776# 620#
777# Userland interfaces 621# Userland interfaces
@@ -788,6 +632,7 @@ CONFIG_INPUT=y
788# CONFIG_INPUT_KEYBOARD is not set 632# CONFIG_INPUT_KEYBOARD is not set
789# CONFIG_INPUT_MOUSE is not set 633# CONFIG_INPUT_MOUSE is not set
790# CONFIG_INPUT_JOYSTICK is not set 634# CONFIG_INPUT_JOYSTICK is not set
635# CONFIG_INPUT_TABLET is not set
791# CONFIG_INPUT_TOUCHSCREEN is not set 636# CONFIG_INPUT_TOUCHSCREEN is not set
792# CONFIG_INPUT_MISC is not set 637# CONFIG_INPUT_MISC is not set
793 638
@@ -828,32 +673,15 @@ CONFIG_SERIAL_CORE_CONSOLE=y
828CONFIG_UNIX98_PTYS=y 673CONFIG_UNIX98_PTYS=y
829CONFIG_LEGACY_PTYS=y 674CONFIG_LEGACY_PTYS=y
830CONFIG_LEGACY_PTY_COUNT=256 675CONFIG_LEGACY_PTY_COUNT=256
831
832#
833# IPMI
834#
835# CONFIG_IPMI_HANDLER is not set 676# CONFIG_IPMI_HANDLER is not set
836
837#
838# Watchdog Cards
839#
840# CONFIG_WATCHDOG is not set 677# CONFIG_WATCHDOG is not set
841CONFIG_HW_RANDOM=y 678CONFIG_HW_RANDOM=y
842# CONFIG_GEN_RTC is not set
843# CONFIG_DTLK is not set
844# CONFIG_R3964 is not set 679# CONFIG_R3964 is not set
845# CONFIG_APPLICOM is not set 680# CONFIG_APPLICOM is not set
846# CONFIG_DRM is not set 681# CONFIG_DRM is not set
847# CONFIG_RAW_DRIVER is not set 682# CONFIG_RAW_DRIVER is not set
848
849#
850# TPM devices
851#
852# CONFIG_TCG_TPM is not set 683# CONFIG_TCG_TPM is not set
853 684CONFIG_DEVPORT=y
854#
855# I2C support
856#
857# CONFIG_I2C is not set 685# CONFIG_I2C is not set
858 686
859# 687#
@@ -861,21 +689,24 @@ CONFIG_HW_RANDOM=y
861# 689#
862# CONFIG_SPI is not set 690# CONFIG_SPI is not set
863# CONFIG_SPI_MASTER is not set 691# CONFIG_SPI_MASTER is not set
864
865#
866# Dallas's 1-wire bus
867#
868# CONFIG_W1 is not set 692# CONFIG_W1 is not set
869 693# CONFIG_POWER_SUPPLY is not set
870#
871# Hardware Monitoring support
872#
873CONFIG_HWMON=y 694CONFIG_HWMON=y
874# CONFIG_HWMON_VID is not set 695# CONFIG_HWMON_VID is not set
875# CONFIG_SENSORS_ABITUGURU is not set 696# CONFIG_SENSORS_ABITUGURU is not set
697# CONFIG_SENSORS_ABITUGURU3 is not set
876# CONFIG_SENSORS_F71805F is not set 698# CONFIG_SENSORS_F71805F is not set
699# CONFIG_SENSORS_IT87 is not set
700# CONFIG_SENSORS_PC87360 is not set
877# CONFIG_SENSORS_PC87427 is not set 701# CONFIG_SENSORS_PC87427 is not set
702# CONFIG_SENSORS_SIS5595 is not set
703# CONFIG_SENSORS_SMSC47M1 is not set
704# CONFIG_SENSORS_SMSC47B397 is not set
705# CONFIG_SENSORS_VIA686A is not set
878# CONFIG_SENSORS_VT1211 is not set 706# CONFIG_SENSORS_VT1211 is not set
707# CONFIG_SENSORS_VT8231 is not set
708# CONFIG_SENSORS_W83627HF is not set
709# CONFIG_SENSORS_W83627EHF is not set
879# CONFIG_HWMON_DEBUG_CHIP is not set 710# CONFIG_HWMON_DEBUG_CHIP is not set
880 711
881# 712#
@@ -887,22 +718,31 @@ CONFIG_MFD_SM501=y
887# Multimedia devices 718# Multimedia devices
888# 719#
889# CONFIG_VIDEO_DEV is not set 720# CONFIG_VIDEO_DEV is not set
721# CONFIG_DVB_CORE is not set
722CONFIG_DAB=y
890 723
891# 724#
892# Digital Video Broadcasting Devices 725# Graphics support
893# 726#
894# CONFIG_DVB is not set 727# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
895 728
896# 729#
897# Graphics support 730# Display device support
898# 731#
899# CONFIG_BACKLIGHT_LCD_SUPPORT is not set 732# CONFIG_DISPLAY_SUPPORT is not set
733# CONFIG_VGASTATE is not set
734CONFIG_VIDEO_OUTPUT_CONTROL=m
900CONFIG_FB=y 735CONFIG_FB=y
901# CONFIG_FIRMWARE_EDID is not set 736# CONFIG_FIRMWARE_EDID is not set
902# CONFIG_FB_DDC is not set 737# CONFIG_FB_DDC is not set
903CONFIG_FB_CFB_FILLRECT=y 738CONFIG_FB_CFB_FILLRECT=y
904CONFIG_FB_CFB_COPYAREA=y 739CONFIG_FB_CFB_COPYAREA=y
905CONFIG_FB_CFB_IMAGEBLIT=y 740CONFIG_FB_CFB_IMAGEBLIT=y
741# CONFIG_FB_SYS_FILLRECT is not set
742# CONFIG_FB_SYS_COPYAREA is not set
743# CONFIG_FB_SYS_IMAGEBLIT is not set
744# CONFIG_FB_SYS_FOPS is not set
745CONFIG_FB_DEFERRED_IO=y
906# CONFIG_FB_SVGALIB is not set 746# CONFIG_FB_SVGALIB is not set
907# CONFIG_FB_MACMODES is not set 747# CONFIG_FB_MACMODES is not set
908# CONFIG_FB_BACKLIGHT is not set 748# CONFIG_FB_BACKLIGHT is not set
@@ -910,14 +750,13 @@ CONFIG_FB_CFB_IMAGEBLIT=y
910# CONFIG_FB_TILEBLITTING is not set 750# CONFIG_FB_TILEBLITTING is not set
911 751
912# 752#
913# Frambuffer hardware drivers 753# Frame buffer hardware drivers
914# 754#
915# CONFIG_FB_CIRRUS is not set 755# CONFIG_FB_CIRRUS is not set
916# CONFIG_FB_PM2 is not set 756# CONFIG_FB_PM2 is not set
917# CONFIG_FB_CYBER2000 is not set 757# CONFIG_FB_CYBER2000 is not set
918# CONFIG_FB_ASILIANT is not set 758# CONFIG_FB_ASILIANT is not set
919# CONFIG_FB_IMSTT is not set 759# CONFIG_FB_IMSTT is not set
920# CONFIG_FB_EPSON1355 is not set
921# CONFIG_FB_S1D13XXX is not set 760# CONFIG_FB_S1D13XXX is not set
922# CONFIG_FB_NVIDIA is not set 761# CONFIG_FB_NVIDIA is not set
923# CONFIG_FB_RIVA is not set 762# CONFIG_FB_RIVA is not set
@@ -932,7 +771,10 @@ CONFIG_FB_CFB_IMAGEBLIT=y
932# CONFIG_FB_KYRO is not set 771# CONFIG_FB_KYRO is not set
933# CONFIG_FB_3DFX is not set 772# CONFIG_FB_3DFX is not set
934# CONFIG_FB_VOODOO1 is not set 773# CONFIG_FB_VOODOO1 is not set
774# CONFIG_FB_VT8623 is not set
935# CONFIG_FB_TRIDENT is not set 775# CONFIG_FB_TRIDENT is not set
776# CONFIG_FB_ARK is not set
777# CONFIG_FB_PM3 is not set
936CONFIG_FB_SM501=y 778CONFIG_FB_SM501=y
937# CONFIG_FB_VIRTUAL is not set 779# CONFIG_FB_VIRTUAL is not set
938 780
@@ -941,14 +783,11 @@ CONFIG_FB_SM501=y
941# 783#
942CONFIG_DUMMY_CONSOLE=y 784CONFIG_DUMMY_CONSOLE=y
943CONFIG_FRAMEBUFFER_CONSOLE=y 785CONFIG_FRAMEBUFFER_CONSOLE=y
786# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
944# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set 787# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
945# CONFIG_FONTS is not set 788# CONFIG_FONTS is not set
946CONFIG_FONT_8x8=y 789CONFIG_FONT_8x8=y
947CONFIG_FONT_8x16=y 790CONFIG_FONT_8x16=y
948
949#
950# Logo configuration
951#
952CONFIG_LOGO=y 791CONFIG_LOGO=y
953# CONFIG_LOGO_LINUX_MONO is not set 792# CONFIG_LOGO_LINUX_MONO is not set
954# CONFIG_LOGO_LINUX_VGA16 is not set 793# CONFIG_LOGO_LINUX_VGA16 is not set
@@ -1048,35 +887,34 @@ CONFIG_SND_AC97_CODEC=m
1048# CONFIG_SND_VIA82XX_MODEM is not set 887# CONFIG_SND_VIA82XX_MODEM is not set
1049# CONFIG_SND_VX222 is not set 888# CONFIG_SND_VX222 is not set
1050CONFIG_SND_YMFPCI=m 889CONFIG_SND_YMFPCI=m
890CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
1051# CONFIG_SND_AC97_POWER_SAVE is not set 891# CONFIG_SND_AC97_POWER_SAVE is not set
1052 892
1053# 893#
1054# SoC audio support 894# SUPERH devices
895#
896
897#
898# System on Chip audio support
1055# 899#
1056# CONFIG_SND_SOC is not set 900# CONFIG_SND_SOC is not set
1057 901
1058# 902#
903# SoC Audio support for SuperH
904#
905
906#
1059# Open Sound System 907# Open Sound System
1060# 908#
1061CONFIG_SOUND_PRIME=m 909CONFIG_SOUND_PRIME=m
1062# CONFIG_OBSOLETE_OSS is not set
1063# CONFIG_SOUND_BT878 is not set
1064# CONFIG_SOUND_ICH is not set
1065# CONFIG_SOUND_TRIDENT is not set 910# CONFIG_SOUND_TRIDENT is not set
1066# CONFIG_SOUND_MSNDCLAS is not set 911# CONFIG_SOUND_MSNDCLAS is not set
1067# CONFIG_SOUND_MSNDPIN is not set 912# CONFIG_SOUND_MSNDPIN is not set
1068# CONFIG_SOUND_VIA82CXXX is not set
1069CONFIG_AC97_BUS=m 913CONFIG_AC97_BUS=m
1070 914CONFIG_HID_SUPPORT=y
1071#
1072# HID Devices
1073#
1074CONFIG_HID=y 915CONFIG_HID=y
1075# CONFIG_HID_DEBUG is not set 916# CONFIG_HID_DEBUG is not set
1076 917CONFIG_USB_SUPPORT=y
1077#
1078# USB support
1079#
1080CONFIG_USB_ARCH_HAS_HCD=y 918CONFIG_USB_ARCH_HAS_HCD=y
1081CONFIG_USB_ARCH_HAS_OHCI=y 919CONFIG_USB_ARCH_HAS_OHCI=y
1082CONFIG_USB_ARCH_HAS_EHCI=y 920CONFIG_USB_ARCH_HAS_EHCI=y
@@ -1090,37 +928,9 @@ CONFIG_USB_ARCH_HAS_EHCI=y
1090# USB Gadget Support 928# USB Gadget Support
1091# 929#
1092# CONFIG_USB_GADGET is not set 930# CONFIG_USB_GADGET is not set
1093
1094#
1095# MMC/SD Card support
1096#
1097# CONFIG_MMC is not set 931# CONFIG_MMC is not set
1098
1099#
1100# LED devices
1101#
1102# CONFIG_NEW_LEDS is not set 932# CONFIG_NEW_LEDS is not set
1103
1104#
1105# LED drivers
1106#
1107
1108#
1109# LED Triggers
1110#
1111
1112#
1113# InfiniBand support
1114#
1115# CONFIG_INFINIBAND is not set 933# CONFIG_INFINIBAND is not set
1116
1117#
1118# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
1119#
1120
1121#
1122# Real Time Clock
1123#
1124CONFIG_RTC_LIB=y 934CONFIG_RTC_LIB=y
1125CONFIG_RTC_CLASS=y 935CONFIG_RTC_CLASS=y
1126CONFIG_RTC_HCTOSYS=y 936CONFIG_RTC_HCTOSYS=y
@@ -1134,18 +944,28 @@ CONFIG_RTC_INTF_SYSFS=y
1134CONFIG_RTC_INTF_PROC=y 944CONFIG_RTC_INTF_PROC=y
1135CONFIG_RTC_INTF_DEV=y 945CONFIG_RTC_INTF_DEV=y
1136# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set 946# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
947# CONFIG_RTC_DRV_TEST is not set
948
949#
950# SPI RTC drivers
951#
1137 952
1138# 953#
1139# RTC drivers 954# Platform RTC drivers
1140# 955#
1141# CONFIG_RTC_DRV_DS1553 is not set 956# CONFIG_RTC_DRV_DS1553 is not set
957# CONFIG_RTC_DRV_STK17TA8 is not set
1142# CONFIG_RTC_DRV_DS1742 is not set 958# CONFIG_RTC_DRV_DS1742 is not set
1143# CONFIG_RTC_DRV_M48T86 is not set 959# CONFIG_RTC_DRV_M48T86 is not set
1144CONFIG_RTC_DRV_SH=y 960# CONFIG_RTC_DRV_M48T59 is not set
1145# CONFIG_RTC_DRV_TEST is not set
1146# CONFIG_RTC_DRV_V3020 is not set 961# CONFIG_RTC_DRV_V3020 is not set
1147 962
1148# 963#
964# on-CPU RTC drivers
965#
966CONFIG_RTC_DRV_SH=y
967
968#
1149# DMA Engine support 969# DMA Engine support
1150# 970#
1151# CONFIG_DMA_ENGINE is not set 971# CONFIG_DMA_ENGINE is not set
@@ -1159,12 +979,9 @@ CONFIG_RTC_DRV_SH=y
1159# 979#
1160 980
1161# 981#
1162# Auxiliary Display support 982# Userspace I/O
1163#
1164
1165#
1166# Virtualization
1167# 983#
984# CONFIG_UIO is not set
1168 985
1169# 986#
1170# File systems 987# File systems
@@ -1247,7 +1064,6 @@ CONFIG_RAMFS=y
1247# CONFIG_NCP_FS is not set 1064# CONFIG_NCP_FS is not set
1248# CONFIG_CODA_FS is not set 1065# CONFIG_CODA_FS is not set
1249# CONFIG_AFS_FS is not set 1066# CONFIG_AFS_FS is not set
1250# CONFIG_9P_FS is not set
1251 1067
1252# 1068#
1253# Partition Types 1069# Partition Types
@@ -1321,7 +1137,6 @@ CONFIG_ENABLE_MUST_CHECK=y
1321# CONFIG_DEBUG_FS is not set 1137# CONFIG_DEBUG_FS is not set
1322# CONFIG_HEADERS_CHECK is not set 1138# CONFIG_HEADERS_CHECK is not set
1323# CONFIG_DEBUG_KERNEL is not set 1139# CONFIG_DEBUG_KERNEL is not set
1324CONFIG_LOG_BUF_SHIFT=14
1325# CONFIG_DEBUG_BUGVERBOSE is not set 1140# CONFIG_DEBUG_BUGVERBOSE is not set
1326# CONFIG_SH_STANDARD_BIOS is not set 1141# CONFIG_SH_STANDARD_BIOS is not set
1327CONFIG_EARLY_SCIF_CONSOLE=y 1142CONFIG_EARLY_SCIF_CONSOLE=y
@@ -1334,10 +1149,6 @@ CONFIG_EARLY_PRINTK=y
1334# 1149#
1335# CONFIG_KEYS is not set 1150# CONFIG_KEYS is not set
1336# CONFIG_SECURITY is not set 1151# CONFIG_SECURITY is not set
1337
1338#
1339# Cryptographic options
1340#
1341# CONFIG_CRYPTO is not set 1152# CONFIG_CRYPTO is not set
1342 1153
1343# 1154#
@@ -1346,8 +1157,11 @@ CONFIG_EARLY_PRINTK=y
1346CONFIG_BITREVERSE=y 1157CONFIG_BITREVERSE=y
1347# CONFIG_CRC_CCITT is not set 1158# CONFIG_CRC_CCITT is not set
1348# CONFIG_CRC16 is not set 1159# CONFIG_CRC16 is not set
1160# CONFIG_CRC_ITU_T is not set
1349CONFIG_CRC32=y 1161CONFIG_CRC32=y
1162# CONFIG_CRC7 is not set
1350# CONFIG_LIBCRC32C is not set 1163# CONFIG_LIBCRC32C is not set
1351CONFIG_PLIST=y 1164CONFIG_PLIST=y
1352CONFIG_HAS_IOMEM=y 1165CONFIG_HAS_IOMEM=y
1353CONFIG_HAS_IOPORT=y 1166CONFIG_HAS_IOPORT=y
1167CONFIG_HAS_DMA=y
diff --git a/arch/sh/configs/rts7751r2dplus_defconfig b/arch/sh/configs/rts7751r2dplus_defconfig
new file mode 100644
index 000000000000..4ff5a752dcd9
--- /dev/null
+++ b/arch/sh/configs/rts7751r2dplus_defconfig
@@ -0,0 +1,1167 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.23-rc2
4# Tue Aug 14 16:33:08 2007
5#
6CONFIG_SUPERH=y
7CONFIG_RWSEM_GENERIC_SPINLOCK=y
8CONFIG_GENERIC_BUG=y
9CONFIG_GENERIC_FIND_NEXT_BIT=y
10CONFIG_GENERIC_HWEIGHT=y
11CONFIG_GENERIC_HARDIRQS=y
12CONFIG_GENERIC_IRQ_PROBE=y
13CONFIG_GENERIC_CALIBRATE_DELAY=y
14CONFIG_GENERIC_TIME=y
15CONFIG_GENERIC_CLOCKEVENTS=y
16CONFIG_SYS_SUPPORTS_PCI=y
17CONFIG_STACKTRACE_SUPPORT=y
18CONFIG_LOCKDEP_SUPPORT=y
19# CONFIG_ARCH_HAS_ILOG2_U32 is not set
20# CONFIG_ARCH_HAS_ILOG2_U64 is not set
21CONFIG_ARCH_NO_VIRT_TO_BUS=y
22CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
23
24#
25# General setup
26#
27CONFIG_EXPERIMENTAL=y
28CONFIG_BROKEN_ON_SMP=y
29CONFIG_INIT_ENV_ARG_LIMIT=32
30CONFIG_LOCALVERSION=""
31CONFIG_LOCALVERSION_AUTO=y
32CONFIG_SWAP=y
33CONFIG_SYSVIPC=y
34CONFIG_SYSVIPC_SYSCTL=y
35# CONFIG_POSIX_MQUEUE is not set
36# CONFIG_BSD_PROCESS_ACCT is not set
37# CONFIG_TASKSTATS is not set
38# CONFIG_USER_NS is not set
39# CONFIG_AUDIT is not set
40# CONFIG_IKCONFIG is not set
41CONFIG_LOG_BUF_SHIFT=14
42CONFIG_SYSFS_DEPRECATED=y
43# CONFIG_RELAY is not set
44# CONFIG_BLK_DEV_INITRD is not set
45# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
46CONFIG_SYSCTL=y
47CONFIG_EMBEDDED=y
48CONFIG_UID16=y
49# CONFIG_SYSCTL_SYSCALL is not set
50CONFIG_KALLSYMS=y
51# CONFIG_KALLSYMS_EXTRA_PASS is not set
52CONFIG_HOTPLUG=y
53CONFIG_PRINTK=y
54CONFIG_BUG=y
55CONFIG_ELF_CORE=y
56CONFIG_BASE_FULL=y
57CONFIG_FUTEX=y
58CONFIG_ANON_INODES=y
59CONFIG_EPOLL=y
60CONFIG_SIGNALFD=y
61CONFIG_TIMERFD=y
62CONFIG_EVENTFD=y
63CONFIG_SHMEM=y
64CONFIG_VM_EVENT_COUNTERS=y
65CONFIG_SLAB=y
66# CONFIG_SLUB is not set
67# CONFIG_SLOB is not set
68CONFIG_RT_MUTEXES=y
69# CONFIG_TINY_SHMEM is not set
70CONFIG_BASE_SMALL=0
71CONFIG_MODULES=y
72# CONFIG_MODULE_UNLOAD is not set
73# CONFIG_MODVERSIONS is not set
74# CONFIG_MODULE_SRCVERSION_ALL is not set
75# CONFIG_KMOD is not set
76CONFIG_BLOCK=y
77# CONFIG_LBD is not set
78# CONFIG_BLK_DEV_IO_TRACE is not set
79# CONFIG_LSF is not set
80# CONFIG_BLK_DEV_BSG is not set
81
82#
83# IO Schedulers
84#
85CONFIG_IOSCHED_NOOP=y
86CONFIG_IOSCHED_AS=y
87CONFIG_IOSCHED_DEADLINE=y
88CONFIG_IOSCHED_CFQ=y
89CONFIG_DEFAULT_AS=y
90# CONFIG_DEFAULT_DEADLINE is not set
91# CONFIG_DEFAULT_CFQ is not set
92# CONFIG_DEFAULT_NOOP is not set
93CONFIG_DEFAULT_IOSCHED="anticipatory"
94
95#
96# System type
97#
98CONFIG_CPU_SH4=y
99# CONFIG_CPU_SUBTYPE_SH7619 is not set
100# CONFIG_CPU_SUBTYPE_SH7206 is not set
101# CONFIG_CPU_SUBTYPE_SH7705 is not set
102# CONFIG_CPU_SUBTYPE_SH7706 is not set
103# CONFIG_CPU_SUBTYPE_SH7707 is not set
104# CONFIG_CPU_SUBTYPE_SH7708 is not set
105# CONFIG_CPU_SUBTYPE_SH7709 is not set
106# CONFIG_CPU_SUBTYPE_SH7710 is not set
107# CONFIG_CPU_SUBTYPE_SH7712 is not set
108# CONFIG_CPU_SUBTYPE_SH7750 is not set
109# CONFIG_CPU_SUBTYPE_SH7091 is not set
110# CONFIG_CPU_SUBTYPE_SH7750R is not set
111# CONFIG_CPU_SUBTYPE_SH7750S is not set
112# CONFIG_CPU_SUBTYPE_SH7751 is not set
113CONFIG_CPU_SUBTYPE_SH7751R=y
114# CONFIG_CPU_SUBTYPE_SH7760 is not set
115# CONFIG_CPU_SUBTYPE_SH4_202 is not set
116# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
117# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
118# CONFIG_CPU_SUBTYPE_SH7770 is not set
119# CONFIG_CPU_SUBTYPE_SH7780 is not set
120# CONFIG_CPU_SUBTYPE_SH7785 is not set
121# CONFIG_CPU_SUBTYPE_SHX3 is not set
122# CONFIG_CPU_SUBTYPE_SH7343 is not set
123# CONFIG_CPU_SUBTYPE_SH7722 is not set
124
125#
126# Memory management options
127#
128CONFIG_QUICKLIST=y
129CONFIG_MMU=y
130CONFIG_PAGE_OFFSET=0x80000000
131CONFIG_MEMORY_START=0x0c000000
132CONFIG_MEMORY_SIZE=0x04000000
133CONFIG_VSYSCALL=y
134CONFIG_ARCH_FLATMEM_ENABLE=y
135CONFIG_ARCH_SPARSEMEM_ENABLE=y
136CONFIG_ARCH_SPARSEMEM_DEFAULT=y
137CONFIG_MAX_ACTIVE_REGIONS=1
138CONFIG_ARCH_POPULATES_NODE_MAP=y
139CONFIG_ARCH_SELECT_MEMORY_MODEL=y
140CONFIG_PAGE_SIZE_4KB=y
141# CONFIG_PAGE_SIZE_8KB is not set
142# CONFIG_PAGE_SIZE_64KB is not set
143CONFIG_SELECT_MEMORY_MODEL=y
144CONFIG_FLATMEM_MANUAL=y
145# CONFIG_DISCONTIGMEM_MANUAL is not set
146# CONFIG_SPARSEMEM_MANUAL is not set
147CONFIG_FLATMEM=y
148CONFIG_FLAT_NODE_MEM_MAP=y
149CONFIG_SPARSEMEM_STATIC=y
150CONFIG_SPLIT_PTLOCK_CPUS=4
151# CONFIG_RESOURCES_64BIT is not set
152CONFIG_ZONE_DMA_FLAG=0
153CONFIG_NR_QUICK=2
154
155#
156# Cache configuration
157#
158# CONFIG_SH_DIRECT_MAPPED is not set
159CONFIG_CACHE_WRITEBACK=y
160# CONFIG_CACHE_WRITETHROUGH is not set
161# CONFIG_CACHE_OFF is not set
162
163#
164# Processor features
165#
166CONFIG_CPU_LITTLE_ENDIAN=y
167# CONFIG_CPU_BIG_ENDIAN is not set
168CONFIG_SH_FPU=y
169# CONFIG_SH_STORE_QUEUES is not set
170CONFIG_CPU_HAS_INTEVT=y
171CONFIG_CPU_HAS_INTC_IRQ=y
172CONFIG_CPU_HAS_SR_RB=y
173CONFIG_CPU_HAS_PTEA=y
174
175#
176# Board support
177#
178# CONFIG_SH_7751_SYSTEMH is not set
179# CONFIG_SH_SECUREEDGE5410 is not set
180# CONFIG_SH_HS7751RVOIP is not set
181CONFIG_SH_RTS7751R2D=y
182# CONFIG_SH_LANDISK is not set
183# CONFIG_SH_TITAN is not set
184# CONFIG_SH_LBOX_RE2 is not set
185
186#
187# RTS7751R2D options
188#
189CONFIG_RTS7751R2D_PLUS=y
190# CONFIG_RTS7751R2D_1 is not set
191
192#
193# Timer and clock configuration
194#
195CONFIG_SH_TMU=y
196CONFIG_SH_TIMER_IRQ=16
197CONFIG_SH_PCLK_FREQ=60000000
198# CONFIG_TICK_ONESHOT is not set
199# CONFIG_NO_HZ is not set
200# CONFIG_HIGH_RES_TIMERS is not set
201
202#
203# CPU Frequency scaling
204#
205# CONFIG_CPU_FREQ is not set
206
207#
208# DMA support
209#
210# CONFIG_SH_DMA is not set
211
212#
213# Companion Chips
214#
215
216#
217# Additional SuperH Device Drivers
218#
219CONFIG_HEARTBEAT=y
220# CONFIG_PUSH_SWITCH is not set
221
222#
223# Kernel features
224#
225# CONFIG_HZ_100 is not set
226CONFIG_HZ_250=y
227# CONFIG_HZ_300 is not set
228# CONFIG_HZ_1000 is not set
229CONFIG_HZ=250
230# CONFIG_KEXEC is not set
231# CONFIG_CRASH_DUMP is not set
232CONFIG_PREEMPT_NONE=y
233# CONFIG_PREEMPT_VOLUNTARY is not set
234# CONFIG_PREEMPT is not set
235
236#
237# Boot options
238#
239CONFIG_ZERO_PAGE_OFFSET=0x00010000
240CONFIG_BOOT_LINK_OFFSET=0x00800000
241# CONFIG_UBC_WAKEUP is not set
242CONFIG_CMDLINE_BOOL=y
243CONFIG_CMDLINE="console=tty0 console=ttySC0,115200 root=/dev/sda1 earlyprintk=serial"
244
245#
246# Bus options
247#
248CONFIG_PCI=y
249CONFIG_SH_PCIDMA_NONCOHERENT=y
250CONFIG_PCI_AUTO=y
251CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
252# CONFIG_ARCH_SUPPORTS_MSI is not set
253
254#
255# PCCARD (PCMCIA/CardBus) support
256#
257# CONFIG_PCCARD is not set
258CONFIG_HOTPLUG_PCI=y
259# CONFIG_HOTPLUG_PCI_FAKE is not set
260# CONFIG_HOTPLUG_PCI_CPCI is not set
261# CONFIG_HOTPLUG_PCI_SHPC is not set
262
263#
264# Executable file formats
265#
266CONFIG_BINFMT_ELF=y
267# CONFIG_BINFMT_MISC is not set
268
269#
270# Networking
271#
272CONFIG_NET=y
273
274#
275# Networking options
276#
277CONFIG_PACKET=y
278# CONFIG_PACKET_MMAP is not set
279CONFIG_UNIX=y
280CONFIG_XFRM=y
281# CONFIG_XFRM_USER is not set
282# CONFIG_XFRM_SUB_POLICY is not set
283# CONFIG_XFRM_MIGRATE is not set
284# CONFIG_NET_KEY is not set
285CONFIG_INET=y
286# CONFIG_IP_MULTICAST is not set
287# CONFIG_IP_ADVANCED_ROUTER is not set
288CONFIG_IP_FIB_HASH=y
289# CONFIG_IP_PNP is not set
290# CONFIG_NET_IPIP is not set
291# CONFIG_NET_IPGRE is not set
292# CONFIG_ARPD is not set
293# CONFIG_SYN_COOKIES is not set
294# CONFIG_INET_AH is not set
295# CONFIG_INET_ESP is not set
296# CONFIG_INET_IPCOMP is not set
297# CONFIG_INET_XFRM_TUNNEL is not set
298# CONFIG_INET_TUNNEL is not set
299CONFIG_INET_XFRM_MODE_TRANSPORT=y
300CONFIG_INET_XFRM_MODE_TUNNEL=y
301CONFIG_INET_XFRM_MODE_BEET=y
302CONFIG_INET_DIAG=y
303CONFIG_INET_TCP_DIAG=y
304# CONFIG_TCP_CONG_ADVANCED is not set
305CONFIG_TCP_CONG_CUBIC=y
306CONFIG_DEFAULT_TCP_CONG="cubic"
307# CONFIG_TCP_MD5SIG is not set
308# CONFIG_IPV6 is not set
309# CONFIG_INET6_XFRM_TUNNEL is not set
310# CONFIG_INET6_TUNNEL is not set
311# CONFIG_NETWORK_SECMARK is not set
312# CONFIG_NETFILTER is not set
313# CONFIG_IP_DCCP is not set
314# CONFIG_IP_SCTP is not set
315# CONFIG_TIPC is not set
316# CONFIG_ATM is not set
317# CONFIG_BRIDGE is not set
318# CONFIG_VLAN_8021Q is not set
319# CONFIG_DECNET is not set
320# CONFIG_LLC2 is not set
321# CONFIG_IPX is not set
322# CONFIG_ATALK is not set
323# CONFIG_X25 is not set
324# CONFIG_LAPB is not set
325# CONFIG_ECONET is not set
326# CONFIG_WAN_ROUTER is not set
327
328#
329# QoS and/or fair queueing
330#
331# CONFIG_NET_SCHED is not set
332
333#
334# Network testing
335#
336# CONFIG_NET_PKTGEN is not set
337# CONFIG_HAMRADIO is not set
338# CONFIG_IRDA is not set
339# CONFIG_BT is not set
340# CONFIG_AF_RXRPC is not set
341
342#
343# Wireless
344#
345# CONFIG_CFG80211 is not set
346CONFIG_WIRELESS_EXT=y
347# CONFIG_MAC80211 is not set
348# CONFIG_IEEE80211 is not set
349# CONFIG_RFKILL is not set
350# CONFIG_NET_9P is not set
351
352#
353# Device Drivers
354#
355
356#
357# Generic Driver Options
358#
359CONFIG_STANDALONE=y
360CONFIG_PREVENT_FIRMWARE_BUILD=y
361CONFIG_FW_LOADER=m
362# CONFIG_SYS_HYPERVISOR is not set
363# CONFIG_CONNECTOR is not set
364# CONFIG_MTD is not set
365# CONFIG_PARPORT is not set
366CONFIG_BLK_DEV=y
367# CONFIG_BLK_CPQ_CISS_DA is not set
368# CONFIG_BLK_DEV_DAC960 is not set
369# CONFIG_BLK_DEV_UMEM is not set
370# CONFIG_BLK_DEV_COW_COMMON is not set
371# CONFIG_BLK_DEV_LOOP is not set
372# CONFIG_BLK_DEV_NBD is not set
373# CONFIG_BLK_DEV_SX8 is not set
374CONFIG_BLK_DEV_RAM=y
375CONFIG_BLK_DEV_RAM_COUNT=16
376CONFIG_BLK_DEV_RAM_SIZE=4096
377CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
378# CONFIG_CDROM_PKTCDVD is not set
379# CONFIG_ATA_OVER_ETH is not set
380CONFIG_MISC_DEVICES=y
381# CONFIG_PHANTOM is not set
382# CONFIG_EEPROM_93CX6 is not set
383# CONFIG_SGI_IOC4 is not set
384# CONFIG_TIFM_CORE is not set
385# CONFIG_IDE is not set
386
387#
388# SCSI device support
389#
390# CONFIG_RAID_ATTRS is not set
391CONFIG_SCSI=y
392CONFIG_SCSI_DMA=y
393# CONFIG_SCSI_TGT is not set
394# CONFIG_SCSI_NETLINK is not set
395CONFIG_SCSI_PROC_FS=y
396
397#
398# SCSI support type (disk, tape, CD-ROM)
399#
400CONFIG_BLK_DEV_SD=y
401# CONFIG_CHR_DEV_ST is not set
402# CONFIG_CHR_DEV_OSST is not set
403# CONFIG_BLK_DEV_SR is not set
404# CONFIG_CHR_DEV_SG is not set
405# CONFIG_CHR_DEV_SCH is not set
406
407#
408# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
409#
410# CONFIG_SCSI_MULTI_LUN is not set
411# CONFIG_SCSI_CONSTANTS is not set
412# CONFIG_SCSI_LOGGING is not set
413# CONFIG_SCSI_SCAN_ASYNC is not set
414CONFIG_SCSI_WAIT_SCAN=m
415
416#
417# SCSI Transports
418#
419# CONFIG_SCSI_SPI_ATTRS is not set
420# CONFIG_SCSI_FC_ATTRS is not set
421# CONFIG_SCSI_ISCSI_ATTRS is not set
422# CONFIG_SCSI_SAS_LIBSAS is not set
423CONFIG_SCSI_LOWLEVEL=y
424# CONFIG_ISCSI_TCP is not set
425# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
426# CONFIG_SCSI_3W_9XXX is not set
427# CONFIG_SCSI_ACARD is not set
428# CONFIG_SCSI_AACRAID is not set
429# CONFIG_SCSI_AIC7XXX is not set
430# CONFIG_SCSI_AIC7XXX_OLD is not set
431# CONFIG_SCSI_AIC79XX is not set
432# CONFIG_SCSI_AIC94XX is not set
433# CONFIG_SCSI_ARCMSR is not set
434# CONFIG_MEGARAID_NEWGEN is not set
435# CONFIG_MEGARAID_LEGACY is not set
436# CONFIG_MEGARAID_SAS is not set
437# CONFIG_SCSI_HPTIOP is not set
438# CONFIG_SCSI_DMX3191D is not set
439# CONFIG_SCSI_FUTURE_DOMAIN is not set
440# CONFIG_SCSI_IPS is not set
441# CONFIG_SCSI_INITIO is not set
442# CONFIG_SCSI_INIA100 is not set
443# CONFIG_SCSI_STEX is not set
444# CONFIG_SCSI_SYM53C8XX_2 is not set
445# CONFIG_SCSI_IPR is not set
446# CONFIG_SCSI_QLOGIC_1280 is not set
447# CONFIG_SCSI_QLA_FC is not set
448# CONFIG_SCSI_QLA_ISCSI is not set
449# CONFIG_SCSI_LPFC is not set
450# CONFIG_SCSI_DC395x is not set
451# CONFIG_SCSI_DC390T is not set
452# CONFIG_SCSI_NSP32 is not set
453# CONFIG_SCSI_DEBUG is not set
454# CONFIG_SCSI_SRP is not set
455CONFIG_ATA=y
456# CONFIG_ATA_NONSTANDARD is not set
457# CONFIG_SATA_AHCI is not set
458# CONFIG_SATA_SVW is not set
459# CONFIG_ATA_PIIX is not set
460# CONFIG_SATA_MV is not set
461# CONFIG_SATA_NV is not set
462# CONFIG_PDC_ADMA is not set
463# CONFIG_SATA_QSTOR is not set
464# CONFIG_SATA_PROMISE is not set
465# CONFIG_SATA_SX4 is not set
466# CONFIG_SATA_SIL is not set
467# CONFIG_SATA_SIL24 is not set
468# CONFIG_SATA_SIS is not set
469# CONFIG_SATA_ULI is not set
470# CONFIG_SATA_VIA is not set
471# CONFIG_SATA_VITESSE is not set
472# CONFIG_SATA_INIC162X is not set
473# CONFIG_PATA_ALI is not set
474# CONFIG_PATA_AMD is not set
475# CONFIG_PATA_ARTOP is not set
476# CONFIG_PATA_ATIIXP is not set
477# CONFIG_PATA_CMD640_PCI is not set
478# CONFIG_PATA_CMD64X is not set
479# CONFIG_PATA_CS5520 is not set
480# CONFIG_PATA_CS5530 is not set
481# CONFIG_PATA_CYPRESS is not set
482# CONFIG_PATA_EFAR is not set
483# CONFIG_ATA_GENERIC is not set
484# CONFIG_PATA_HPT366 is not set
485# CONFIG_PATA_HPT37X is not set
486# CONFIG_PATA_HPT3X2N is not set
487# CONFIG_PATA_HPT3X3 is not set
488# CONFIG_PATA_IT821X is not set
489# CONFIG_PATA_IT8213 is not set
490# CONFIG_PATA_JMICRON is not set
491# CONFIG_PATA_TRIFLEX is not set
492# CONFIG_PATA_MARVELL is not set
493# CONFIG_PATA_MPIIX is not set
494# CONFIG_PATA_OLDPIIX is not set
495# CONFIG_PATA_NETCELL is not set
496# CONFIG_PATA_NS87410 is not set
497# CONFIG_PATA_OPTI is not set
498# CONFIG_PATA_OPTIDMA is not set
499# CONFIG_PATA_PDC_OLD is not set
500# CONFIG_PATA_RADISYS is not set
501# CONFIG_PATA_RZ1000 is not set
502# CONFIG_PATA_SC1200 is not set
503# CONFIG_PATA_SERVERWORKS is not set
504# CONFIG_PATA_PDC2027X is not set
505# CONFIG_PATA_SIL680 is not set
506# CONFIG_PATA_SIS is not set
507# CONFIG_PATA_VIA is not set
508# CONFIG_PATA_WINBOND is not set
509CONFIG_PATA_PLATFORM=y
510# CONFIG_MD is not set
511
512#
513# Fusion MPT device support
514#
515# CONFIG_FUSION is not set
516# CONFIG_FUSION_SPI is not set
517# CONFIG_FUSION_FC is not set
518# CONFIG_FUSION_SAS is not set
519
520#
521# IEEE 1394 (FireWire) support
522#
523# CONFIG_FIREWIRE is not set
524# CONFIG_IEEE1394 is not set
525# CONFIG_I2O is not set
526CONFIG_NETDEVICES=y
527# CONFIG_NETDEVICES_MULTIQUEUE is not set
528# CONFIG_DUMMY is not set
529# CONFIG_BONDING is not set
530# CONFIG_MACVLAN is not set
531# CONFIG_EQUALIZER is not set
532# CONFIG_TUN is not set
533# CONFIG_ARCNET is not set
534# CONFIG_PHYLIB is not set
535CONFIG_NET_ETHERNET=y
536CONFIG_MII=y
537# CONFIG_STNIC is not set
538# CONFIG_HAPPYMEAL is not set
539# CONFIG_SUNGEM is not set
540# CONFIG_CASSINI is not set
541# CONFIG_NET_VENDOR_3COM is not set
542# CONFIG_SMC91X is not set
543# CONFIG_NET_TULIP is not set
544# CONFIG_HP100 is not set
545CONFIG_NET_PCI=y
546# CONFIG_PCNET32 is not set
547# CONFIG_AMD8111_ETH is not set
548# CONFIG_ADAPTEC_STARFIRE is not set
549# CONFIG_B44 is not set
550# CONFIG_FORCEDETH is not set
551# CONFIG_DGRS is not set
552# CONFIG_EEPRO100 is not set
553# CONFIG_E100 is not set
554# CONFIG_FEALNX is not set
555# CONFIG_NATSEMI is not set
556# CONFIG_NE2K_PCI is not set
557# CONFIG_8139CP is not set
558CONFIG_8139TOO=y
559# CONFIG_8139TOO_PIO is not set
560# CONFIG_8139TOO_TUNE_TWISTER is not set
561# CONFIG_8139TOO_8129 is not set
562# CONFIG_8139_OLD_RX_RESET is not set
563# CONFIG_SIS900 is not set
564# CONFIG_EPIC100 is not set
565# CONFIG_SUNDANCE is not set
566# CONFIG_TLAN is not set
567# CONFIG_VIA_RHINE is not set
568# CONFIG_SC92031 is not set
569CONFIG_NETDEV_1000=y
570# CONFIG_ACENIC is not set
571# CONFIG_DL2K is not set
572# CONFIG_E1000 is not set
573# CONFIG_NS83820 is not set
574# CONFIG_HAMACHI is not set
575# CONFIG_YELLOWFIN is not set
576# CONFIG_R8169 is not set
577# CONFIG_SIS190 is not set
578# CONFIG_SKGE is not set
579# CONFIG_SKY2 is not set
580# CONFIG_VIA_VELOCITY is not set
581# CONFIG_TIGON3 is not set
582# CONFIG_BNX2 is not set
583# CONFIG_QLA3XXX is not set
584# CONFIG_ATL1 is not set
585CONFIG_NETDEV_10000=y
586# CONFIG_CHELSIO_T1 is not set
587# CONFIG_CHELSIO_T3 is not set
588# CONFIG_IXGB is not set
589# CONFIG_S2IO is not set
590# CONFIG_MYRI10GE is not set
591# CONFIG_NETXEN_NIC is not set
592# CONFIG_MLX4_CORE is not set
593# CONFIG_TR is not set
594
595#
596# Wireless LAN
597#
598# CONFIG_WLAN_PRE80211 is not set
599# CONFIG_WLAN_80211 is not set
600# CONFIG_WAN is not set
601# CONFIG_FDDI is not set
602# CONFIG_HIPPI is not set
603# CONFIG_PPP is not set
604# CONFIG_SLIP is not set
605# CONFIG_NET_FC is not set
606# CONFIG_SHAPER is not set
607# CONFIG_NETCONSOLE is not set
608# CONFIG_NETPOLL is not set
609# CONFIG_NET_POLL_CONTROLLER is not set
610# CONFIG_ISDN is not set
611# CONFIG_PHONE is not set
612
613#
614# Input device support
615#
616CONFIG_INPUT=y
617# CONFIG_INPUT_FF_MEMLESS is not set
618# CONFIG_INPUT_POLLDEV is not set
619
620#
621# Userland interfaces
622#
623# CONFIG_INPUT_MOUSEDEV is not set
624# CONFIG_INPUT_JOYDEV is not set
625# CONFIG_INPUT_TSDEV is not set
626# CONFIG_INPUT_EVDEV is not set
627# CONFIG_INPUT_EVBUG is not set
628
629#
630# Input Device Drivers
631#
632# CONFIG_INPUT_KEYBOARD is not set
633# CONFIG_INPUT_MOUSE is not set
634# CONFIG_INPUT_JOYSTICK is not set
635# CONFIG_INPUT_TABLET is not set
636# CONFIG_INPUT_TOUCHSCREEN is not set
637# CONFIG_INPUT_MISC is not set
638
639#
640# Hardware I/O ports
641#
642# CONFIG_SERIO is not set
643# CONFIG_GAMEPORT is not set
644
645#
646# Character devices
647#
648CONFIG_VT=y
649CONFIG_VT_CONSOLE=y
650CONFIG_HW_CONSOLE=y
651CONFIG_VT_HW_CONSOLE_BINDING=y
652# CONFIG_SERIAL_NONSTANDARD is not set
653
654#
655# Serial drivers
656#
657CONFIG_SERIAL_8250=y
658# CONFIG_SERIAL_8250_CONSOLE is not set
659CONFIG_SERIAL_8250_PCI=y
660CONFIG_SERIAL_8250_NR_UARTS=4
661CONFIG_SERIAL_8250_RUNTIME_UARTS=4
662# CONFIG_SERIAL_8250_EXTENDED is not set
663
664#
665# Non-8250 serial port support
666#
667CONFIG_SERIAL_SH_SCI=y
668CONFIG_SERIAL_SH_SCI_NR_UARTS=1
669CONFIG_SERIAL_SH_SCI_CONSOLE=y
670CONFIG_SERIAL_CORE=y
671CONFIG_SERIAL_CORE_CONSOLE=y
672# CONFIG_SERIAL_JSM is not set
673CONFIG_UNIX98_PTYS=y
674CONFIG_LEGACY_PTYS=y
675CONFIG_LEGACY_PTY_COUNT=256
676# CONFIG_IPMI_HANDLER is not set
677# CONFIG_WATCHDOG is not set
678CONFIG_HW_RANDOM=y
679# CONFIG_R3964 is not set
680# CONFIG_APPLICOM is not set
681# CONFIG_DRM is not set
682# CONFIG_RAW_DRIVER is not set
683# CONFIG_TCG_TPM is not set
684CONFIG_DEVPORT=y
685# CONFIG_I2C is not set
686
687#
688# SPI support
689#
690# CONFIG_SPI is not set
691# CONFIG_SPI_MASTER is not set
692# CONFIG_W1 is not set
693# CONFIG_POWER_SUPPLY is not set
694CONFIG_HWMON=y
695# CONFIG_HWMON_VID is not set
696# CONFIG_SENSORS_ABITUGURU is not set
697# CONFIG_SENSORS_ABITUGURU3 is not set
698# CONFIG_SENSORS_F71805F is not set
699# CONFIG_SENSORS_IT87 is not set
700# CONFIG_SENSORS_PC87360 is not set
701# CONFIG_SENSORS_PC87427 is not set
702# CONFIG_SENSORS_SIS5595 is not set
703# CONFIG_SENSORS_SMSC47M1 is not set
704# CONFIG_SENSORS_SMSC47B397 is not set
705# CONFIG_SENSORS_VIA686A is not set
706# CONFIG_SENSORS_VT1211 is not set
707# CONFIG_SENSORS_VT8231 is not set
708# CONFIG_SENSORS_W83627HF is not set
709# CONFIG_SENSORS_W83627EHF is not set
710# CONFIG_HWMON_DEBUG_CHIP is not set
711
712#
713# Multifunction device drivers
714#
715CONFIG_MFD_SM501=y
716
717#
718# Multimedia devices
719#
720# CONFIG_VIDEO_DEV is not set
721# CONFIG_DVB_CORE is not set
722CONFIG_DAB=y
723
724#
725# Graphics support
726#
727# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
728
729#
730# Display device support
731#
732# CONFIG_DISPLAY_SUPPORT is not set
733# CONFIG_VGASTATE is not set
734CONFIG_VIDEO_OUTPUT_CONTROL=m
735CONFIG_FB=y
736# CONFIG_FIRMWARE_EDID is not set
737# CONFIG_FB_DDC is not set
738CONFIG_FB_CFB_FILLRECT=y
739CONFIG_FB_CFB_COPYAREA=y
740CONFIG_FB_CFB_IMAGEBLIT=y
741# CONFIG_FB_SYS_FILLRECT is not set
742# CONFIG_FB_SYS_COPYAREA is not set
743# CONFIG_FB_SYS_IMAGEBLIT is not set
744# CONFIG_FB_SYS_FOPS is not set
745CONFIG_FB_DEFERRED_IO=y
746# CONFIG_FB_SVGALIB is not set
747# CONFIG_FB_MACMODES is not set
748# CONFIG_FB_BACKLIGHT is not set
749# CONFIG_FB_MODE_HELPERS is not set
750# CONFIG_FB_TILEBLITTING is not set
751
752#
753# Frame buffer hardware drivers
754#
755# CONFIG_FB_CIRRUS is not set
756# CONFIG_FB_PM2 is not set
757# CONFIG_FB_CYBER2000 is not set
758# CONFIG_FB_ASILIANT is not set
759# CONFIG_FB_IMSTT is not set
760# CONFIG_FB_S1D13XXX is not set
761# CONFIG_FB_NVIDIA is not set
762# CONFIG_FB_RIVA is not set
763# CONFIG_FB_MATROX is not set
764# CONFIG_FB_RADEON is not set
765# CONFIG_FB_ATY128 is not set
766# CONFIG_FB_ATY is not set
767# CONFIG_FB_S3 is not set
768# CONFIG_FB_SAVAGE is not set
769# CONFIG_FB_SIS is not set
770# CONFIG_FB_NEOMAGIC is not set
771# CONFIG_FB_KYRO is not set
772# CONFIG_FB_3DFX is not set
773# CONFIG_FB_VOODOO1 is not set
774# CONFIG_FB_VT8623 is not set
775# CONFIG_FB_TRIDENT is not set
776# CONFIG_FB_ARK is not set
777# CONFIG_FB_PM3 is not set
778CONFIG_FB_SM501=y
779# CONFIG_FB_VIRTUAL is not set
780
781#
782# Console display driver support
783#
784CONFIG_DUMMY_CONSOLE=y
785CONFIG_FRAMEBUFFER_CONSOLE=y
786# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
787# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
788# CONFIG_FONTS is not set
789CONFIG_FONT_8x8=y
790CONFIG_FONT_8x16=y
791CONFIG_LOGO=y
792# CONFIG_LOGO_LINUX_MONO is not set
793# CONFIG_LOGO_LINUX_VGA16 is not set
794# CONFIG_LOGO_LINUX_CLUT224 is not set
795# CONFIG_LOGO_SUPERH_MONO is not set
796# CONFIG_LOGO_SUPERH_VGA16 is not set
797CONFIG_LOGO_SUPERH_CLUT224=y
798
799#
800# Sound
801#
802CONFIG_SOUND=y
803
804#
805# Advanced Linux Sound Architecture
806#
807CONFIG_SND=m
808CONFIG_SND_TIMER=m
809CONFIG_SND_PCM=m
810CONFIG_SND_HWDEP=m
811CONFIG_SND_RAWMIDI=m
812# CONFIG_SND_SEQUENCER is not set
813# CONFIG_SND_MIXER_OSS is not set
814# CONFIG_SND_PCM_OSS is not set
815# CONFIG_SND_DYNAMIC_MINORS is not set
816CONFIG_SND_SUPPORT_OLD_API=y
817CONFIG_SND_VERBOSE_PROCFS=y
818# CONFIG_SND_VERBOSE_PRINTK is not set
819# CONFIG_SND_DEBUG is not set
820
821#
822# Generic devices
823#
824CONFIG_SND_MPU401_UART=m
825CONFIG_SND_OPL3_LIB=m
826CONFIG_SND_AC97_CODEC=m
827# CONFIG_SND_DUMMY is not set
828# CONFIG_SND_MTPAV is not set
829# CONFIG_SND_SERIAL_U16550 is not set
830# CONFIG_SND_MPU401 is not set
831
832#
833# PCI devices
834#
835# CONFIG_SND_AD1889 is not set
836# CONFIG_SND_ALS300 is not set
837# CONFIG_SND_ALI5451 is not set
838# CONFIG_SND_ATIIXP is not set
839# CONFIG_SND_ATIIXP_MODEM is not set
840# CONFIG_SND_AU8810 is not set
841# CONFIG_SND_AU8820 is not set
842# CONFIG_SND_AU8830 is not set
843# CONFIG_SND_AZT3328 is not set
844# CONFIG_SND_BT87X is not set
845# CONFIG_SND_CA0106 is not set
846# CONFIG_SND_CMIPCI is not set
847# CONFIG_SND_CS4281 is not set
848# CONFIG_SND_CS46XX is not set
849# CONFIG_SND_DARLA20 is not set
850# CONFIG_SND_GINA20 is not set
851# CONFIG_SND_LAYLA20 is not set
852# CONFIG_SND_DARLA24 is not set
853# CONFIG_SND_GINA24 is not set
854# CONFIG_SND_LAYLA24 is not set
855# CONFIG_SND_MONA is not set
856# CONFIG_SND_MIA is not set
857# CONFIG_SND_ECHO3G is not set
858# CONFIG_SND_INDIGO is not set
859# CONFIG_SND_INDIGOIO is not set
860# CONFIG_SND_INDIGODJ is not set
861# CONFIG_SND_EMU10K1 is not set
862# CONFIG_SND_EMU10K1X is not set
863# CONFIG_SND_ENS1370 is not set
864# CONFIG_SND_ENS1371 is not set
865# CONFIG_SND_ES1938 is not set
866# CONFIG_SND_ES1968 is not set
867# CONFIG_SND_FM801 is not set
868# CONFIG_SND_HDA_INTEL is not set
869# CONFIG_SND_HDSP is not set
870# CONFIG_SND_HDSPM is not set
871# CONFIG_SND_ICE1712 is not set
872# CONFIG_SND_ICE1724 is not set
873# CONFIG_SND_INTEL8X0 is not set
874# CONFIG_SND_INTEL8X0M is not set
875# CONFIG_SND_KORG1212 is not set
876# CONFIG_SND_MAESTRO3 is not set
877# CONFIG_SND_MIXART is not set
878# CONFIG_SND_NM256 is not set
879# CONFIG_SND_PCXHR is not set
880# CONFIG_SND_RIPTIDE is not set
881# CONFIG_SND_RME32 is not set
882# CONFIG_SND_RME96 is not set
883# CONFIG_SND_RME9652 is not set
884# CONFIG_SND_SONICVIBES is not set
885# CONFIG_SND_TRIDENT is not set
886# CONFIG_SND_VIA82XX is not set
887# CONFIG_SND_VIA82XX_MODEM is not set
888# CONFIG_SND_VX222 is not set
889CONFIG_SND_YMFPCI=m
890CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
891# CONFIG_SND_AC97_POWER_SAVE is not set
892
893#
894# SUPERH devices
895#
896
897#
898# System on Chip audio support
899#
900# CONFIG_SND_SOC is not set
901
902#
903# SoC Audio support for SuperH
904#
905
906#
907# Open Sound System
908#
909CONFIG_SOUND_PRIME=m
910# CONFIG_SOUND_TRIDENT is not set
911# CONFIG_SOUND_MSNDCLAS is not set
912# CONFIG_SOUND_MSNDPIN is not set
913CONFIG_AC97_BUS=m
914CONFIG_HID_SUPPORT=y
915CONFIG_HID=y
916# CONFIG_HID_DEBUG is not set
917CONFIG_USB_SUPPORT=y
918CONFIG_USB_ARCH_HAS_HCD=y
919CONFIG_USB_ARCH_HAS_OHCI=y
920CONFIG_USB_ARCH_HAS_EHCI=y
921# CONFIG_USB is not set
922
923#
924# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
925#
926
927#
928# USB Gadget Support
929#
930# CONFIG_USB_GADGET is not set
931# CONFIG_MMC is not set
932# CONFIG_NEW_LEDS is not set
933# CONFIG_INFINIBAND is not set
934CONFIG_RTC_LIB=y
935CONFIG_RTC_CLASS=y
936CONFIG_RTC_HCTOSYS=y
937CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
938# CONFIG_RTC_DEBUG is not set
939
940#
941# RTC interfaces
942#
943CONFIG_RTC_INTF_SYSFS=y
944CONFIG_RTC_INTF_PROC=y
945CONFIG_RTC_INTF_DEV=y
946# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
947# CONFIG_RTC_DRV_TEST is not set
948
949#
950# SPI RTC drivers
951#
952
953#
954# Platform RTC drivers
955#
956# CONFIG_RTC_DRV_DS1553 is not set
957# CONFIG_RTC_DRV_STK17TA8 is not set
958# CONFIG_RTC_DRV_DS1742 is not set
959# CONFIG_RTC_DRV_M48T86 is not set
960# CONFIG_RTC_DRV_M48T59 is not set
961# CONFIG_RTC_DRV_V3020 is not set
962
963#
964# on-CPU RTC drivers
965#
966CONFIG_RTC_DRV_SH=y
967
968#
969# DMA Engine support
970#
971# CONFIG_DMA_ENGINE is not set
972
973#
974# DMA Clients
975#
976
977#
978# DMA Devices
979#
980
981#
982# Userspace I/O
983#
984# CONFIG_UIO is not set
985
986#
987# File systems
988#
989CONFIG_EXT2_FS=y
990# CONFIG_EXT2_FS_XATTR is not set
991# CONFIG_EXT2_FS_XIP is not set
992# CONFIG_EXT3_FS is not set
993# CONFIG_EXT4DEV_FS is not set
994# CONFIG_REISERFS_FS is not set
995# CONFIG_JFS_FS is not set
996# CONFIG_FS_POSIX_ACL is not set
997# CONFIG_XFS_FS is not set
998# CONFIG_GFS2_FS is not set
999# CONFIG_OCFS2_FS is not set
1000CONFIG_MINIX_FS=y
1001# CONFIG_ROMFS_FS is not set
1002CONFIG_INOTIFY=y
1003CONFIG_INOTIFY_USER=y
1004# CONFIG_QUOTA is not set
1005CONFIG_DNOTIFY=y
1006# CONFIG_AUTOFS_FS is not set
1007# CONFIG_AUTOFS4_FS is not set
1008# CONFIG_FUSE_FS is not set
1009
1010#
1011# CD-ROM/DVD Filesystems
1012#
1013# CONFIG_ISO9660_FS is not set
1014# CONFIG_UDF_FS is not set
1015
1016#
1017# DOS/FAT/NT Filesystems
1018#
1019CONFIG_FAT_FS=y
1020CONFIG_MSDOS_FS=y
1021CONFIG_VFAT_FS=y
1022CONFIG_FAT_DEFAULT_CODEPAGE=437
1023CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1024# CONFIG_NTFS_FS is not set
1025
1026#
1027# Pseudo filesystems
1028#
1029CONFIG_PROC_FS=y
1030CONFIG_PROC_KCORE=y
1031CONFIG_PROC_SYSCTL=y
1032CONFIG_SYSFS=y
1033CONFIG_TMPFS=y
1034# CONFIG_TMPFS_POSIX_ACL is not set
1035# CONFIG_HUGETLBFS is not set
1036# CONFIG_HUGETLB_PAGE is not set
1037CONFIG_RAMFS=y
1038# CONFIG_CONFIGFS_FS is not set
1039
1040#
1041# Miscellaneous filesystems
1042#
1043# CONFIG_ADFS_FS is not set
1044# CONFIG_AFFS_FS is not set
1045# CONFIG_HFS_FS is not set
1046# CONFIG_HFSPLUS_FS is not set
1047# CONFIG_BEFS_FS is not set
1048# CONFIG_BFS_FS is not set
1049# CONFIG_EFS_FS is not set
1050# CONFIG_CRAMFS is not set
1051# CONFIG_VXFS_FS is not set
1052# CONFIG_HPFS_FS is not set
1053# CONFIG_QNX4FS_FS is not set
1054# CONFIG_SYSV_FS is not set
1055# CONFIG_UFS_FS is not set
1056
1057#
1058# Network File Systems
1059#
1060# CONFIG_NFS_FS is not set
1061# CONFIG_NFSD is not set
1062# CONFIG_SMB_FS is not set
1063# CONFIG_CIFS is not set
1064# CONFIG_NCP_FS is not set
1065# CONFIG_CODA_FS is not set
1066# CONFIG_AFS_FS is not set
1067
1068#
1069# Partition Types
1070#
1071# CONFIG_PARTITION_ADVANCED is not set
1072CONFIG_MSDOS_PARTITION=y
1073
1074#
1075# Native Language Support
1076#
1077CONFIG_NLS=y
1078CONFIG_NLS_DEFAULT="iso8859-1"
1079# CONFIG_NLS_CODEPAGE_437 is not set
1080# CONFIG_NLS_CODEPAGE_737 is not set
1081# CONFIG_NLS_CODEPAGE_775 is not set
1082# CONFIG_NLS_CODEPAGE_850 is not set
1083# CONFIG_NLS_CODEPAGE_852 is not set
1084# CONFIG_NLS_CODEPAGE_855 is not set
1085# CONFIG_NLS_CODEPAGE_857 is not set
1086# CONFIG_NLS_CODEPAGE_860 is not set
1087# CONFIG_NLS_CODEPAGE_861 is not set
1088# CONFIG_NLS_CODEPAGE_862 is not set
1089# CONFIG_NLS_CODEPAGE_863 is not set
1090# CONFIG_NLS_CODEPAGE_864 is not set
1091# CONFIG_NLS_CODEPAGE_865 is not set
1092# CONFIG_NLS_CODEPAGE_866 is not set
1093# CONFIG_NLS_CODEPAGE_869 is not set
1094# CONFIG_NLS_CODEPAGE_936 is not set
1095# CONFIG_NLS_CODEPAGE_950 is not set
1096CONFIG_NLS_CODEPAGE_932=y
1097# CONFIG_NLS_CODEPAGE_949 is not set
1098# CONFIG_NLS_CODEPAGE_874 is not set
1099# CONFIG_NLS_ISO8859_8 is not set
1100# CONFIG_NLS_CODEPAGE_1250 is not set
1101# CONFIG_NLS_CODEPAGE_1251 is not set
1102# CONFIG_NLS_ASCII is not set
1103# CONFIG_NLS_ISO8859_1 is not set
1104# CONFIG_NLS_ISO8859_2 is not set
1105# CONFIG_NLS_ISO8859_3 is not set
1106# CONFIG_NLS_ISO8859_4 is not set
1107# CONFIG_NLS_ISO8859_5 is not set
1108# CONFIG_NLS_ISO8859_6 is not set
1109# CONFIG_NLS_ISO8859_7 is not set
1110# CONFIG_NLS_ISO8859_9 is not set
1111# CONFIG_NLS_ISO8859_13 is not set
1112# CONFIG_NLS_ISO8859_14 is not set
1113# CONFIG_NLS_ISO8859_15 is not set
1114# CONFIG_NLS_KOI8_R is not set
1115# CONFIG_NLS_KOI8_U is not set
1116# CONFIG_NLS_UTF8 is not set
1117
1118#
1119# Distributed Lock Manager
1120#
1121# CONFIG_DLM is not set
1122
1123#
1124# Profiling support
1125#
1126CONFIG_PROFILING=y
1127CONFIG_OPROFILE=y
1128
1129#
1130# Kernel hacking
1131#
1132CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1133# CONFIG_PRINTK_TIME is not set
1134CONFIG_ENABLE_MUST_CHECK=y
1135# CONFIG_MAGIC_SYSRQ is not set
1136# CONFIG_UNUSED_SYMBOLS is not set
1137# CONFIG_DEBUG_FS is not set
1138# CONFIG_HEADERS_CHECK is not set
1139# CONFIG_DEBUG_KERNEL is not set
1140# CONFIG_DEBUG_BUGVERBOSE is not set
1141# CONFIG_SH_STANDARD_BIOS is not set
1142CONFIG_EARLY_SCIF_CONSOLE=y
1143CONFIG_EARLY_SCIF_CONSOLE_PORT=0xffe80000
1144CONFIG_EARLY_PRINTK=y
1145# CONFIG_SH_KGDB is not set
1146
1147#
1148# Security options
1149#
1150# CONFIG_KEYS is not set
1151# CONFIG_SECURITY is not set
1152# CONFIG_CRYPTO is not set
1153
1154#
1155# Library routines
1156#
1157CONFIG_BITREVERSE=y
1158# CONFIG_CRC_CCITT is not set
1159# CONFIG_CRC16 is not set
1160# CONFIG_CRC_ITU_T is not set
1161CONFIG_CRC32=y
1162# CONFIG_CRC7 is not set
1163# CONFIG_LIBCRC32C is not set
1164CONFIG_PLIST=y
1165CONFIG_HAS_IOMEM=y
1166CONFIG_HAS_IOPORT=y
1167CONFIG_HAS_DMA=y
diff --git a/arch/sh/configs/se7206_defconfig b/arch/sh/configs/se7206_defconfig
index f2f2a3c9c32d..0d0cda908270 100644
--- a/arch/sh/configs/se7206_defconfig
+++ b/arch/sh/configs/se7206_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.22-rc4 3# Linux kernel version: 2.6.23-rc4
4# Fri Jun 15 19:37:46 2007 4# Thu Sep 13 16:40:16 2007
5# 5#
6CONFIG_SUPERH=y 6CONFIG_SUPERH=y
7CONFIG_RWSEM_GENERIC_SPINLOCK=y 7CONFIG_RWSEM_GENERIC_SPINLOCK=y
@@ -17,25 +17,22 @@ CONFIG_STACKTRACE_SUPPORT=y
17CONFIG_LOCKDEP_SUPPORT=y 17CONFIG_LOCKDEP_SUPPORT=y
18# CONFIG_ARCH_HAS_ILOG2_U32 is not set 18# CONFIG_ARCH_HAS_ILOG2_U32 is not set
19# CONFIG_ARCH_HAS_ILOG2_U64 is not set 19# CONFIG_ARCH_HAS_ILOG2_U64 is not set
20CONFIG_ARCH_NO_VIRT_TO_BUS=y
20CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 21CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
21 22
22# 23#
23# Code maturity level options 24# General setup
24# 25#
25CONFIG_EXPERIMENTAL=y 26CONFIG_EXPERIMENTAL=y
26CONFIG_BROKEN_ON_SMP=y 27CONFIG_BROKEN_ON_SMP=y
27CONFIG_INIT_ENV_ARG_LIMIT=32 28CONFIG_INIT_ENV_ARG_LIMIT=32
28
29#
30# General setup
31#
32CONFIG_LOCALVERSION="" 29CONFIG_LOCALVERSION=""
33# CONFIG_LOCALVERSION_AUTO is not set 30# CONFIG_LOCALVERSION_AUTO is not set
34# CONFIG_SYSVIPC is not set 31# CONFIG_SYSVIPC is not set
35# CONFIG_POSIX_MQUEUE is not set 32# CONFIG_POSIX_MQUEUE is not set
36# CONFIG_BSD_PROCESS_ACCT is not set 33# CONFIG_BSD_PROCESS_ACCT is not set
37# CONFIG_TASKSTATS is not set 34# CONFIG_TASKSTATS is not set
38# CONFIG_UTS_NS is not set 35# CONFIG_USER_NS is not set
39# CONFIG_AUDIT is not set 36# CONFIG_AUDIT is not set
40# CONFIG_IKCONFIG is not set 37# CONFIG_IKCONFIG is not set
41CONFIG_LOG_BUF_SHIFT=14 38CONFIG_LOG_BUF_SHIFT=14
@@ -60,23 +57,17 @@ CONFIG_SIGNALFD=y
60CONFIG_TIMERFD=y 57CONFIG_TIMERFD=y
61CONFIG_EVENTFD=y 58CONFIG_EVENTFD=y
62# CONFIG_VM_EVENT_COUNTERS is not set 59# CONFIG_VM_EVENT_COUNTERS is not set
63CONFIG_SLAB=y 60CONFIG_SLUB_DEBUG=y
64# CONFIG_SLUB is not set 61# CONFIG_SLAB is not set
62CONFIG_SLUB=y
65# CONFIG_SLOB is not set 63# CONFIG_SLOB is not set
66CONFIG_TINY_SHMEM=y 64CONFIG_TINY_SHMEM=y
67CONFIG_BASE_SMALL=1 65CONFIG_BASE_SMALL=1
68
69#
70# Loadable module support
71#
72# CONFIG_MODULES is not set 66# CONFIG_MODULES is not set
73
74#
75# Block layer
76#
77CONFIG_BLOCK=y 67CONFIG_BLOCK=y
78# CONFIG_LBD is not set 68# CONFIG_LBD is not set
79# CONFIG_LSF is not set 69# CONFIG_LSF is not set
70# CONFIG_BLK_DEV_BSG is not set
80 71
81# 72#
82# IO Schedulers 73# IO Schedulers
@@ -98,7 +89,6 @@ CONFIG_CPU_SH2=y
98CONFIG_CPU_SH2A=y 89CONFIG_CPU_SH2A=y
99# CONFIG_CPU_SUBTYPE_SH7619 is not set 90# CONFIG_CPU_SUBTYPE_SH7619 is not set
100CONFIG_CPU_SUBTYPE_SH7206=y 91CONFIG_CPU_SUBTYPE_SH7206=y
101# CONFIG_CPU_SUBTYPE_SH7300 is not set
102# CONFIG_CPU_SUBTYPE_SH7705 is not set 92# CONFIG_CPU_SUBTYPE_SH7705 is not set
103# CONFIG_CPU_SUBTYPE_SH7706 is not set 93# CONFIG_CPU_SUBTYPE_SH7706 is not set
104# CONFIG_CPU_SUBTYPE_SH7707 is not set 94# CONFIG_CPU_SUBTYPE_SH7707 is not set
@@ -106,6 +96,7 @@ CONFIG_CPU_SUBTYPE_SH7206=y
106# CONFIG_CPU_SUBTYPE_SH7709 is not set 96# CONFIG_CPU_SUBTYPE_SH7709 is not set
107# CONFIG_CPU_SUBTYPE_SH7710 is not set 97# CONFIG_CPU_SUBTYPE_SH7710 is not set
108# CONFIG_CPU_SUBTYPE_SH7712 is not set 98# CONFIG_CPU_SUBTYPE_SH7712 is not set
99# CONFIG_CPU_SUBTYPE_SH7720 is not set
109# CONFIG_CPU_SUBTYPE_SH7750 is not set 100# CONFIG_CPU_SUBTYPE_SH7750 is not set
110# CONFIG_CPU_SUBTYPE_SH7091 is not set 101# CONFIG_CPU_SUBTYPE_SH7091 is not set
111# CONFIG_CPU_SUBTYPE_SH7750R is not set 102# CONFIG_CPU_SUBTYPE_SH7750R is not set
@@ -119,7 +110,7 @@ CONFIG_CPU_SUBTYPE_SH7206=y
119# CONFIG_CPU_SUBTYPE_SH7770 is not set 110# CONFIG_CPU_SUBTYPE_SH7770 is not set
120# CONFIG_CPU_SUBTYPE_SH7780 is not set 111# CONFIG_CPU_SUBTYPE_SH7780 is not set
121# CONFIG_CPU_SUBTYPE_SH7785 is not set 112# CONFIG_CPU_SUBTYPE_SH7785 is not set
122# CONFIG_CPU_SUBTYPE_SH73180 is not set 113# CONFIG_CPU_SUBTYPE_SHX3 is not set
123# CONFIG_CPU_SUBTYPE_SH7343 is not set 114# CONFIG_CPU_SUBTYPE_SH7343 is not set
124# CONFIG_CPU_SUBTYPE_SH7722 is not set 115# CONFIG_CPU_SUBTYPE_SH7722 is not set
125 116
@@ -136,15 +127,16 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y
136CONFIG_MAX_ACTIVE_REGIONS=1 127CONFIG_MAX_ACTIVE_REGIONS=1
137CONFIG_ARCH_POPULATES_NODE_MAP=y 128CONFIG_ARCH_POPULATES_NODE_MAP=y
138CONFIG_ARCH_SELECT_MEMORY_MODEL=y 129CONFIG_ARCH_SELECT_MEMORY_MODEL=y
130CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
139CONFIG_PAGE_SIZE_4KB=y 131CONFIG_PAGE_SIZE_4KB=y
140# CONFIG_PAGE_SIZE_8KB is not set 132# CONFIG_PAGE_SIZE_8KB is not set
141# CONFIG_PAGE_SIZE_64KB is not set 133# CONFIG_PAGE_SIZE_64KB is not set
142CONFIG_SELECT_MEMORY_MODEL=y 134CONFIG_SELECT_MEMORY_MODEL=y
143CONFIG_FLATMEM_MANUAL=y 135# CONFIG_FLATMEM_MANUAL is not set
144# CONFIG_DISCONTIGMEM_MANUAL is not set 136# CONFIG_DISCONTIGMEM_MANUAL is not set
145# CONFIG_SPARSEMEM_MANUAL is not set 137CONFIG_SPARSEMEM_MANUAL=y
146CONFIG_FLATMEM=y 138CONFIG_SPARSEMEM=y
147CONFIG_FLAT_NODE_MEM_MAP=y 139CONFIG_HAVE_MEMORY_PRESENT=y
148CONFIG_SPARSEMEM_STATIC=y 140CONFIG_SPARSEMEM_STATIC=y
149CONFIG_SPLIT_PTLOCK_CPUS=4 141CONFIG_SPLIT_PTLOCK_CPUS=4
150# CONFIG_RESOURCES_64BIT is not set 142# CONFIG_RESOURCES_64BIT is not set
@@ -155,7 +147,9 @@ CONFIG_NR_QUICK=2
155# Cache configuration 147# Cache configuration
156# 148#
157# CONFIG_SH_DIRECT_MAPPED is not set 149# CONFIG_SH_DIRECT_MAPPED is not set
158# CONFIG_SH_WRITETHROUGH is not set 150CONFIG_CACHE_WRITEBACK=y
151# CONFIG_CACHE_WRITETHROUGH is not set
152# CONFIG_CACHE_OFF is not set
159 153
160# 154#
161# Processor features 155# Processor features
@@ -163,8 +157,6 @@ CONFIG_NR_QUICK=2
163# CONFIG_CPU_LITTLE_ENDIAN is not set 157# CONFIG_CPU_LITTLE_ENDIAN is not set
164CONFIG_CPU_BIG_ENDIAN=y 158CONFIG_CPU_BIG_ENDIAN=y
165# CONFIG_SH_FPU_EMU is not set 159# CONFIG_SH_FPU_EMU is not set
166# CONFIG_SH_DSP is not set
167CONFIG_CPU_HAS_IPR_IRQ=y
168 160
169# 161#
170# Board support 162# Board support
@@ -185,12 +177,23 @@ CONFIG_SH_CLK_MD=6
185# 177#
186# CPU Frequency scaling 178# CPU Frequency scaling
187# 179#
188# CONFIG_CPU_FREQ is not set 180CONFIG_CPU_FREQ=y
181CONFIG_CPU_FREQ_TABLE=y
182# CONFIG_CPU_FREQ_DEBUG is not set
183CONFIG_CPU_FREQ_STAT=y
184# CONFIG_CPU_FREQ_STAT_DETAILS is not set
185CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
186# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
187CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
188# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
189# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
190# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
191# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
192# CONFIG_SH_CPU_FREQ is not set
189 193
190# 194#
191# DMA support 195# DMA support
192# 196#
193# CONFIG_SH_DMA is not set
194 197
195# 198#
196# Companion Chips 199# Companion Chips
@@ -199,17 +202,17 @@ CONFIG_SH_CLK_MD=6
199# 202#
200# Additional SuperH Device Drivers 203# Additional SuperH Device Drivers
201# 204#
202# CONFIG_HEARTBEAT is not set 205CONFIG_HEARTBEAT=y
203# CONFIG_PUSH_SWITCH is not set 206# CONFIG_PUSH_SWITCH is not set
204 207
205# 208#
206# Kernel features 209# Kernel features
207# 210#
208CONFIG_HZ_100=y 211# CONFIG_HZ_100 is not set
209# CONFIG_HZ_250 is not set 212# CONFIG_HZ_250 is not set
210# CONFIG_HZ_300 is not set 213# CONFIG_HZ_300 is not set
211# CONFIG_HZ_1000 is not set 214CONFIG_HZ_1000=y
212CONFIG_HZ=100 215CONFIG_HZ=1000
213# CONFIG_KEXEC is not set 216# CONFIG_KEXEC is not set
214# CONFIG_CRASH_DUMP is not set 217# CONFIG_CRASH_DUMP is not set
215CONFIG_PREEMPT_NONE=y 218CONFIG_PREEMPT_NONE=y
@@ -221,11 +224,13 @@ CONFIG_PREEMPT_NONE=y
221# 224#
222CONFIG_ZERO_PAGE_OFFSET=0x00001000 225CONFIG_ZERO_PAGE_OFFSET=0x00001000
223CONFIG_BOOT_LINK_OFFSET=0x00800000 226CONFIG_BOOT_LINK_OFFSET=0x00800000
224# CONFIG_CMDLINE_BOOL is not set 227CONFIG_CMDLINE_BOOL=y
228CONFIG_CMDLINE="console=ttySC3,115200 earlyprintk=serial ignore_loglevel"
225 229
226# 230#
227# Bus options 231# Bus options
228# 232#
233# CONFIG_CF_ENABLER is not set
229# CONFIG_ARCH_SUPPORTS_MSI is not set 234# CONFIG_ARCH_SUPPORTS_MSI is not set
230 235
231# 236#
@@ -315,6 +320,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
315# CONFIG_MAC80211 is not set 320# CONFIG_MAC80211 is not set
316# CONFIG_IEEE80211 is not set 321# CONFIG_IEEE80211 is not set
317# CONFIG_RFKILL is not set 322# CONFIG_RFKILL is not set
323# CONFIG_NET_9P is not set
318 324
319# 325#
320# Device Drivers 326# Device Drivers
@@ -325,11 +331,9 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
325# 331#
326# CONFIG_STANDALONE is not set 332# CONFIG_STANDALONE is not set
327# CONFIG_PREVENT_FIRMWARE_BUILD is not set 333# CONFIG_PREVENT_FIRMWARE_BUILD is not set
334# CONFIG_DEBUG_DRIVER is not set
335# CONFIG_DEBUG_DEVRES is not set
328# CONFIG_SYS_HYPERVISOR is not set 336# CONFIG_SYS_HYPERVISOR is not set
329
330#
331# Connector - unified userspace <-> kernelspace linker
332#
333# CONFIG_CONNECTOR is not set 337# CONFIG_CONNECTOR is not set
334CONFIG_MTD=y 338CONFIG_MTD=y
335# CONFIG_MTD_DEBUG is not set 339# CONFIG_MTD_DEBUG is not set
@@ -411,31 +415,16 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=4
411# UBI - Unsorted block images 415# UBI - Unsorted block images
412# 416#
413# CONFIG_MTD_UBI is not set 417# CONFIG_MTD_UBI is not set
414
415#
416# Parallel port support
417#
418# CONFIG_PARPORT is not set 418# CONFIG_PARPORT is not set
419 419CONFIG_BLK_DEV=y
420#
421# Plug and Play support
422#
423# CONFIG_PNPACPI is not set
424
425#
426# Block devices
427#
428# CONFIG_BLK_DEV_COW_COMMON is not set 420# CONFIG_BLK_DEV_COW_COMMON is not set
429# CONFIG_BLK_DEV_LOOP is not set 421# CONFIG_BLK_DEV_LOOP is not set
430# CONFIG_BLK_DEV_NBD is not set 422# CONFIG_BLK_DEV_NBD is not set
431# CONFIG_BLK_DEV_RAM is not set 423# CONFIG_BLK_DEV_RAM is not set
432# CONFIG_CDROM_PKTCDVD is not set 424# CONFIG_CDROM_PKTCDVD is not set
433# CONFIG_ATA_OVER_ETH is not set 425# CONFIG_ATA_OVER_ETH is not set
434 426CONFIG_MISC_DEVICES=y
435# 427# CONFIG_EEPROM_93CX6 is not set
436# Misc devices
437#
438# CONFIG_BLINK is not set
439# CONFIG_IDE is not set 428# CONFIG_IDE is not set
440 429
441# 430#
@@ -443,27 +432,18 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=4
443# 432#
444# CONFIG_RAID_ATTRS is not set 433# CONFIG_RAID_ATTRS is not set
445# CONFIG_SCSI is not set 434# CONFIG_SCSI is not set
435# CONFIG_SCSI_DMA is not set
446# CONFIG_SCSI_NETLINK is not set 436# CONFIG_SCSI_NETLINK is not set
447# CONFIG_ATA is not set 437# CONFIG_ATA is not set
448
449#
450# Multi-device support (RAID and LVM)
451#
452# CONFIG_MD is not set 438# CONFIG_MD is not set
453
454#
455# Network device support
456#
457CONFIG_NETDEVICES=y 439CONFIG_NETDEVICES=y
440# CONFIG_NETDEVICES_MULTIQUEUE is not set
458# CONFIG_DUMMY is not set 441# CONFIG_DUMMY is not set
459# CONFIG_BONDING is not set 442# CONFIG_BONDING is not set
443# CONFIG_MACVLAN is not set
460# CONFIG_EQUALIZER is not set 444# CONFIG_EQUALIZER is not set
461# CONFIG_TUN is not set 445# CONFIG_TUN is not set
462# CONFIG_PHYLIB is not set 446# CONFIG_PHYLIB is not set
463
464#
465# Ethernet (10 or 100Mbit)
466#
467CONFIG_NET_ETHERNET=y 447CONFIG_NET_ETHERNET=y
468CONFIG_MII=y 448CONFIG_MII=y
469# CONFIG_STNIC is not set 449# CONFIG_STNIC is not set
@@ -483,15 +463,7 @@ CONFIG_NETDEV_10000=y
483# CONFIG_NETCONSOLE is not set 463# CONFIG_NETCONSOLE is not set
484# CONFIG_NETPOLL is not set 464# CONFIG_NETPOLL is not set
485# CONFIG_NET_POLL_CONTROLLER is not set 465# CONFIG_NET_POLL_CONTROLLER is not set
486
487#
488# ISDN subsystem
489#
490# CONFIG_ISDN is not set 466# CONFIG_ISDN is not set
491
492#
493# Telephony Support
494#
495# CONFIG_PHONE is not set 467# CONFIG_PHONE is not set
496 468
497# 469#
@@ -499,6 +471,7 @@ CONFIG_NETDEV_10000=y
499# 471#
500CONFIG_INPUT=y 472CONFIG_INPUT=y
501# CONFIG_INPUT_FF_MEMLESS is not set 473# CONFIG_INPUT_FF_MEMLESS is not set
474# CONFIG_INPUT_POLLDEV is not set
502 475
503# 476#
504# Userland interfaces 477# Userland interfaces
@@ -546,19 +519,11 @@ CONFIG_SERIAL_CORE=y
546CONFIG_SERIAL_CORE_CONSOLE=y 519CONFIG_SERIAL_CORE_CONSOLE=y
547# CONFIG_UNIX98_PTYS is not set 520# CONFIG_UNIX98_PTYS is not set
548# CONFIG_LEGACY_PTYS is not set 521# CONFIG_LEGACY_PTYS is not set
549
550#
551# IPMI
552#
553# CONFIG_IPMI_HANDLER is not set 522# CONFIG_IPMI_HANDLER is not set
554# CONFIG_WATCHDOG is not set 523# CONFIG_WATCHDOG is not set
555# CONFIG_HW_RANDOM is not set 524# CONFIG_HW_RANDOM is not set
556# CONFIG_R3964 is not set 525# CONFIG_R3964 is not set
557# CONFIG_RAW_DRIVER is not set 526# CONFIG_RAW_DRIVER is not set
558
559#
560# TPM devices
561#
562# CONFIG_TCG_TPM is not set 527# CONFIG_TCG_TPM is not set
563# CONFIG_I2C is not set 528# CONFIG_I2C is not set
564 529
@@ -567,11 +532,8 @@ CONFIG_SERIAL_CORE_CONSOLE=y
567# 532#
568# CONFIG_SPI is not set 533# CONFIG_SPI is not set
569# CONFIG_SPI_MASTER is not set 534# CONFIG_SPI_MASTER is not set
570
571#
572# Dallas's 1-wire bus
573#
574# CONFIG_W1 is not set 535# CONFIG_W1 is not set
536# CONFIG_POWER_SUPPLY is not set
575# CONFIG_HWMON is not set 537# CONFIG_HWMON is not set
576 538
577# 539#
@@ -596,25 +558,21 @@ CONFIG_DAB=y
596# 558#
597# CONFIG_DISPLAY_SUPPORT is not set 559# CONFIG_DISPLAY_SUPPORT is not set
598# CONFIG_VGASTATE is not set 560# CONFIG_VGASTATE is not set
561CONFIG_VIDEO_OUTPUT_CONTROL=y
599# CONFIG_FB is not set 562# CONFIG_FB is not set
600 563
601# 564#
602# Sound 565# Sound
603# 566#
604# CONFIG_SOUND is not set 567# CONFIG_SOUND is not set
605 568CONFIG_HID_SUPPORT=y
606#
607# HID Devices
608#
609CONFIG_HID=y 569CONFIG_HID=y
610# CONFIG_HID_DEBUG is not set 570# CONFIG_HID_DEBUG is not set
611 571CONFIG_USB_SUPPORT=y
612# 572CONFIG_USB_ARCH_HAS_HCD=y
613# USB support
614#
615# CONFIG_USB_ARCH_HAS_HCD is not set
616# CONFIG_USB_ARCH_HAS_OHCI is not set 573# CONFIG_USB_ARCH_HAS_OHCI is not set
617# CONFIG_USB_ARCH_HAS_EHCI is not set 574# CONFIG_USB_ARCH_HAS_EHCI is not set
575# CONFIG_USB is not set
618 576
619# 577#
620# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 578# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -625,31 +583,7 @@ CONFIG_HID=y
625# 583#
626# CONFIG_USB_GADGET is not set 584# CONFIG_USB_GADGET is not set
627# CONFIG_MMC is not set 585# CONFIG_MMC is not set
628
629#
630# LED devices
631#
632# CONFIG_NEW_LEDS is not set 586# CONFIG_NEW_LEDS is not set
633
634#
635# LED drivers
636#
637
638#
639# LED Triggers
640#
641
642#
643# InfiniBand support
644#
645
646#
647# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
648#
649
650#
651# Real Time Clock
652#
653# CONFIG_RTC_CLASS is not set 587# CONFIG_RTC_CLASS is not set
654 588
655# 589#
@@ -666,6 +600,11 @@ CONFIG_HID=y
666# 600#
667 601
668# 602#
603# Userspace I/O
604#
605# CONFIG_UIO is not set
606
607#
669# File systems 608# File systems
670# 609#
671# CONFIG_EXT2_FS is not set 610# CONFIG_EXT2_FS is not set
@@ -736,7 +675,6 @@ CONFIG_RAMFS=y
736# CONFIG_NCP_FS is not set 675# CONFIG_NCP_FS is not set
737# CONFIG_CODA_FS is not set 676# CONFIG_CODA_FS is not set
738# CONFIG_AFS_FS is not set 677# CONFIG_AFS_FS is not set
739# CONFIG_9P_FS is not set
740 678
741# 679#
742# Partition Types 680# Partition Types
@@ -752,12 +690,12 @@ CONFIG_MSDOS_PARTITION=y
752# 690#
753# Distributed Lock Manager 691# Distributed Lock Manager
754# 692#
755# CONFIG_DLM is not set
756 693
757# 694#
758# Profiling support 695# Profiling support
759# 696#
760# CONFIG_PROFILING is not set 697CONFIG_PROFILING=y
698# CONFIG_OPROFILE is not set
761 699
762# 700#
763# Kernel hacking 701# Kernel hacking
@@ -768,19 +706,41 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
768# CONFIG_MAGIC_SYSRQ is not set 706# CONFIG_MAGIC_SYSRQ is not set
769# CONFIG_UNUSED_SYMBOLS is not set 707# CONFIG_UNUSED_SYMBOLS is not set
770# CONFIG_HEADERS_CHECK is not set 708# CONFIG_HEADERS_CHECK is not set
771# CONFIG_DEBUG_KERNEL is not set 709CONFIG_DEBUG_KERNEL=y
772# CONFIG_DEBUG_BUGVERBOSE is not set 710# CONFIG_DEBUG_SHIRQ is not set
711CONFIG_DETECT_SOFTLOCKUP=y
712CONFIG_SCHED_DEBUG=y
713# CONFIG_SCHEDSTATS is not set
714# CONFIG_TIMER_STATS is not set
715CONFIG_SLUB_DEBUG_ON=y
716# CONFIG_DEBUG_SPINLOCK is not set
717# CONFIG_DEBUG_MUTEXES is not set
718# CONFIG_DEBUG_LOCK_ALLOC is not set
719# CONFIG_PROVE_LOCKING is not set
720# CONFIG_LOCK_STAT is not set
721CONFIG_DEBUG_SPINLOCK_SLEEP=y
722# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
723# CONFIG_DEBUG_KOBJECT is not set
724CONFIG_DEBUG_BUGVERBOSE=y
725CONFIG_DEBUG_INFO=y
726# CONFIG_DEBUG_VM is not set
727# CONFIG_DEBUG_LIST is not set
728CONFIG_FRAME_POINTER=y
729CONFIG_FORCED_INLINING=y
730# CONFIG_FAULT_INJECTION is not set
773# CONFIG_SH_STANDARD_BIOS is not set 731# CONFIG_SH_STANDARD_BIOS is not set
774# CONFIG_EARLY_SCIF_CONSOLE is not set 732CONFIG_EARLY_SCIF_CONSOLE=y
733CONFIG_EARLY_SCIF_CONSOLE_PORT=0xfffe9800
734CONFIG_EARLY_PRINTK=y
735# CONFIG_DEBUG_BOOTMEM is not set
736CONFIG_DEBUG_STACKOVERFLOW=y
737CONFIG_DEBUG_STACK_USAGE=y
738# CONFIG_4KSTACKS is not set
775 739
776# 740#
777# Security options 741# Security options
778# 742#
779# CONFIG_KEYS is not set 743# CONFIG_KEYS is not set
780
781#
782# Cryptographic options
783#
784# CONFIG_CRYPTO is not set 744# CONFIG_CRYPTO is not set
785 745
786# 746#
@@ -791,6 +751,7 @@ CONFIG_BITREVERSE=y
791# CONFIG_CRC16 is not set 751# CONFIG_CRC16 is not set
792# CONFIG_CRC_ITU_T is not set 752# CONFIG_CRC_ITU_T is not set
793CONFIG_CRC32=y 753CONFIG_CRC32=y
754# CONFIG_CRC7 is not set
794# CONFIG_LIBCRC32C is not set 755# CONFIG_LIBCRC32C is not set
795CONFIG_ZLIB_INFLATE=y 756CONFIG_ZLIB_INFLATE=y
796CONFIG_HAS_IOMEM=y 757CONFIG_HAS_IOMEM=y
diff --git a/arch/sh/configs/shx3_defconfig b/arch/sh/configs/shx3_defconfig
index 219bad558b10..a794c082709b 100644
--- a/arch/sh/configs/shx3_defconfig
+++ b/arch/sh/configs/shx3_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.22-rc4 3# Linux kernel version: 2.6.23-rc7
4# Wed Jun 20 14:09:27 2007 4# Fri Sep 21 19:07:30 2007
5# 5#
6CONFIG_SUPERH=y 6CONFIG_SUPERH=y
7CONFIG_RWSEM_GENERIC_SPINLOCK=y 7CONFIG_RWSEM_GENERIC_SPINLOCK=y
@@ -13,32 +13,33 @@ CONFIG_GENERIC_IRQ_PROBE=y
13CONFIG_GENERIC_CALIBRATE_DELAY=y 13CONFIG_GENERIC_CALIBRATE_DELAY=y
14CONFIG_GENERIC_TIME=y 14CONFIG_GENERIC_TIME=y
15CONFIG_GENERIC_CLOCKEVENTS=y 15CONFIG_GENERIC_CLOCKEVENTS=y
16CONFIG_SYS_SUPPORTS_SMP=y
17CONFIG_SYS_SUPPORTS_NUMA=y
16CONFIG_STACKTRACE_SUPPORT=y 18CONFIG_STACKTRACE_SUPPORT=y
17CONFIG_LOCKDEP_SUPPORT=y 19CONFIG_LOCKDEP_SUPPORT=y
18# CONFIG_ARCH_HAS_ILOG2_U32 is not set 20# CONFIG_ARCH_HAS_ILOG2_U32 is not set
19# CONFIG_ARCH_HAS_ILOG2_U64 is not set 21# CONFIG_ARCH_HAS_ILOG2_U64 is not set
22CONFIG_ARCH_NO_VIRT_TO_BUS=y
20CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 23CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
21 24
22# 25#
23# Code maturity level options 26# General setup
24# 27#
25CONFIG_EXPERIMENTAL=y 28CONFIG_EXPERIMENTAL=y
26CONFIG_BROKEN_ON_SMP=y 29CONFIG_BROKEN_ON_SMP=y
27CONFIG_LOCK_KERNEL=y 30CONFIG_LOCK_KERNEL=y
28CONFIG_INIT_ENV_ARG_LIMIT=32 31CONFIG_INIT_ENV_ARG_LIMIT=32
29
30#
31# General setup
32#
33CONFIG_LOCALVERSION="" 32CONFIG_LOCALVERSION=""
34CONFIG_LOCALVERSION_AUTO=y 33CONFIG_LOCALVERSION_AUTO=y
35CONFIG_SWAP=y 34CONFIG_SWAP=y
36CONFIG_SYSVIPC=y 35CONFIG_SYSVIPC=y
37# CONFIG_IPC_NS is not set
38CONFIG_SYSVIPC_SYSCTL=y 36CONFIG_SYSVIPC_SYSCTL=y
37# CONFIG_POSIX_MQUEUE is not set
39CONFIG_BSD_PROCESS_ACCT=y 38CONFIG_BSD_PROCESS_ACCT=y
40# CONFIG_BSD_PROCESS_ACCT_V3 is not set 39# CONFIG_BSD_PROCESS_ACCT_V3 is not set
41# CONFIG_UTS_NS is not set 40# CONFIG_TASKSTATS is not set
41# CONFIG_USER_NS is not set
42# CONFIG_AUDIT is not set
42CONFIG_IKCONFIG=y 43CONFIG_IKCONFIG=y
43CONFIG_IKCONFIG_PROC=y 44CONFIG_IKCONFIG_PROC=y
44CONFIG_LOG_BUF_SHIFT=14 45CONFIG_LOG_BUF_SHIFT=14
@@ -63,34 +64,26 @@ CONFIG_FUTEX=y
63CONFIG_ANON_INODES=y 64CONFIG_ANON_INODES=y
64CONFIG_EPOLL=y 65CONFIG_EPOLL=y
65CONFIG_SIGNALFD=y 66CONFIG_SIGNALFD=y
66CONFIG_TIMERFD=y
67CONFIG_EVENTFD=y 67CONFIG_EVENTFD=y
68CONFIG_SHMEM=y 68CONFIG_SHMEM=y
69CONFIG_VM_EVENT_COUNTERS=y 69CONFIG_VM_EVENT_COUNTERS=y
70CONFIG_SLAB=y 70# CONFIG_SLAB is not set
71# CONFIG_SLUB is not set 71# CONFIG_SLUB is not set
72# CONFIG_SLOB is not set 72CONFIG_SLOB=y
73CONFIG_RT_MUTEXES=y 73CONFIG_RT_MUTEXES=y
74# CONFIG_TINY_SHMEM is not set 74# CONFIG_TINY_SHMEM is not set
75CONFIG_BASE_SMALL=0 75CONFIG_BASE_SMALL=0
76
77#
78# Loadable module support
79#
80CONFIG_MODULES=y 76CONFIG_MODULES=y
81CONFIG_MODULE_UNLOAD=y 77CONFIG_MODULE_UNLOAD=y
82# CONFIG_MODULE_FORCE_UNLOAD is not set 78# CONFIG_MODULE_FORCE_UNLOAD is not set
83# CONFIG_MODVERSIONS is not set 79# CONFIG_MODVERSIONS is not set
84# CONFIG_MODULE_SRCVERSION_ALL is not set 80# CONFIG_MODULE_SRCVERSION_ALL is not set
85CONFIG_KMOD=y 81CONFIG_KMOD=y
86
87#
88# Block layer
89#
90CONFIG_BLOCK=y 82CONFIG_BLOCK=y
91# CONFIG_LBD is not set 83# CONFIG_LBD is not set
92# CONFIG_BLK_DEV_IO_TRACE is not set 84# CONFIG_BLK_DEV_IO_TRACE is not set
93# CONFIG_LSF is not set 85# CONFIG_LSF is not set
86# CONFIG_BLK_DEV_BSG is not set
94 87
95# 88#
96# IO Schedulers 89# IO Schedulers
@@ -113,7 +106,6 @@ CONFIG_CPU_SH4A=y
113CONFIG_CPU_SHX3=y 106CONFIG_CPU_SHX3=y
114# CONFIG_CPU_SUBTYPE_SH7619 is not set 107# CONFIG_CPU_SUBTYPE_SH7619 is not set
115# CONFIG_CPU_SUBTYPE_SH7206 is not set 108# CONFIG_CPU_SUBTYPE_SH7206 is not set
116# CONFIG_CPU_SUBTYPE_SH7300 is not set
117# CONFIG_CPU_SUBTYPE_SH7705 is not set 109# CONFIG_CPU_SUBTYPE_SH7705 is not set
118# CONFIG_CPU_SUBTYPE_SH7706 is not set 110# CONFIG_CPU_SUBTYPE_SH7706 is not set
119# CONFIG_CPU_SUBTYPE_SH7707 is not set 111# CONFIG_CPU_SUBTYPE_SH7707 is not set
@@ -121,6 +113,7 @@ CONFIG_CPU_SHX3=y
121# CONFIG_CPU_SUBTYPE_SH7709 is not set 113# CONFIG_CPU_SUBTYPE_SH7709 is not set
122# CONFIG_CPU_SUBTYPE_SH7710 is not set 114# CONFIG_CPU_SUBTYPE_SH7710 is not set
123# CONFIG_CPU_SUBTYPE_SH7712 is not set 115# CONFIG_CPU_SUBTYPE_SH7712 is not set
116# CONFIG_CPU_SUBTYPE_SH7720 is not set
124# CONFIG_CPU_SUBTYPE_SH7750 is not set 117# CONFIG_CPU_SUBTYPE_SH7750 is not set
125# CONFIG_CPU_SUBTYPE_SH7091 is not set 118# CONFIG_CPU_SUBTYPE_SH7091 is not set
126# CONFIG_CPU_SUBTYPE_SH7750R is not set 119# CONFIG_CPU_SUBTYPE_SH7750R is not set
@@ -135,7 +128,6 @@ CONFIG_CPU_SHX3=y
135# CONFIG_CPU_SUBTYPE_SH7780 is not set 128# CONFIG_CPU_SUBTYPE_SH7780 is not set
136# CONFIG_CPU_SUBTYPE_SH7785 is not set 129# CONFIG_CPU_SUBTYPE_SH7785 is not set
137CONFIG_CPU_SUBTYPE_SHX3=y 130CONFIG_CPU_SUBTYPE_SHX3=y
138# CONFIG_CPU_SUBTYPE_SH73180 is not set
139# CONFIG_CPU_SUBTYPE_SH7343 is not set 131# CONFIG_CPU_SUBTYPE_SH7343 is not set
140# CONFIG_CPU_SUBTYPE_SH7722 is not set 132# CONFIG_CPU_SUBTYPE_SH7722 is not set
141 133
@@ -148,12 +140,15 @@ CONFIG_PAGE_OFFSET=0x80000000
148CONFIG_MEMORY_START=0x0c000000 140CONFIG_MEMORY_START=0x0c000000
149CONFIG_MEMORY_SIZE=0x04000000 141CONFIG_MEMORY_SIZE=0x04000000
150CONFIG_VSYSCALL=y 142CONFIG_VSYSCALL=y
143# CONFIG_NUMA is not set
151CONFIG_ARCH_FLATMEM_ENABLE=y 144CONFIG_ARCH_FLATMEM_ENABLE=y
152CONFIG_ARCH_SPARSEMEM_ENABLE=y 145CONFIG_ARCH_SPARSEMEM_ENABLE=y
153CONFIG_ARCH_SPARSEMEM_DEFAULT=y 146CONFIG_ARCH_SPARSEMEM_DEFAULT=y
154CONFIG_MAX_ACTIVE_REGIONS=1 147CONFIG_MAX_ACTIVE_REGIONS=6
155CONFIG_ARCH_POPULATES_NODE_MAP=y 148CONFIG_ARCH_POPULATES_NODE_MAP=y
156CONFIG_ARCH_SELECT_MEMORY_MODEL=y 149CONFIG_ARCH_SELECT_MEMORY_MODEL=y
150CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
151CONFIG_ARCH_MEMORY_PROBE=y
157CONFIG_PAGE_SIZE_4KB=y 152CONFIG_PAGE_SIZE_4KB=y
158# CONFIG_PAGE_SIZE_8KB is not set 153# CONFIG_PAGE_SIZE_8KB is not set
159# CONFIG_PAGE_SIZE_64KB is not set 154# CONFIG_PAGE_SIZE_64KB is not set
@@ -163,12 +158,14 @@ CONFIG_HUGETLB_PAGE_SIZE_64K=y
163# CONFIG_HUGETLB_PAGE_SIZE_4MB is not set 158# CONFIG_HUGETLB_PAGE_SIZE_4MB is not set
164# CONFIG_HUGETLB_PAGE_SIZE_64MB is not set 159# CONFIG_HUGETLB_PAGE_SIZE_64MB is not set
165CONFIG_SELECT_MEMORY_MODEL=y 160CONFIG_SELECT_MEMORY_MODEL=y
166CONFIG_FLATMEM_MANUAL=y 161# CONFIG_FLATMEM_MANUAL is not set
167# CONFIG_DISCONTIGMEM_MANUAL is not set 162# CONFIG_DISCONTIGMEM_MANUAL is not set
168# CONFIG_SPARSEMEM_MANUAL is not set 163CONFIG_SPARSEMEM_MANUAL=y
169CONFIG_FLATMEM=y 164CONFIG_SPARSEMEM=y
170CONFIG_FLAT_NODE_MEM_MAP=y 165CONFIG_HAVE_MEMORY_PRESENT=y
171CONFIG_SPARSEMEM_STATIC=y 166CONFIG_SPARSEMEM_STATIC=y
167CONFIG_MEMORY_HOTPLUG=y
168CONFIG_MEMORY_HOTPLUG_SPARSE=y
172CONFIG_SPLIT_PTLOCK_CPUS=4 169CONFIG_SPLIT_PTLOCK_CPUS=4
173# CONFIG_RESOURCES_64BIT is not set 170# CONFIG_RESOURCES_64BIT is not set
174CONFIG_ZONE_DMA_FLAG=0 171CONFIG_ZONE_DMA_FLAG=0
@@ -178,24 +175,25 @@ CONFIG_NR_QUICK=2
178# Cache configuration 175# Cache configuration
179# 176#
180# CONFIG_SH_DIRECT_MAPPED is not set 177# CONFIG_SH_DIRECT_MAPPED is not set
181# CONFIG_SH_WRITETHROUGH is not set 178# CONFIG_CACHE_WRITEBACK is not set
179# CONFIG_CACHE_WRITETHROUGH is not set
180CONFIG_CACHE_OFF=y
182 181
183# 182#
184# Processor features 183# Processor features
185# 184#
186CONFIG_CPU_LITTLE_ENDIAN=y 185CONFIG_CPU_LITTLE_ENDIAN=y
187# CONFIG_CPU_BIG_ENDIAN is not set 186# CONFIG_CPU_BIG_ENDIAN is not set
188# CONFIG_SH_FPU is not set 187CONFIG_SH_FPU=y
189# CONFIG_SH_FPU_EMU is not set
190CONFIG_SH_DSP=y
191CONFIG_SH_STORE_QUEUES=y 188CONFIG_SH_STORE_QUEUES=y
192CONFIG_CPU_HAS_INTEVT=y 189CONFIG_CPU_HAS_INTEVT=y
193CONFIG_CPU_HAS_INTC2_IRQ=y
194CONFIG_CPU_HAS_SR_RB=y 190CONFIG_CPU_HAS_SR_RB=y
191CONFIG_CPU_HAS_FPU=y
195 192
196# 193#
197# Board support 194# Board support
198# 195#
196CONFIG_SH_X3PROTO=y
199 197
200# 198#
201# Timer and clock configuration 199# Timer and clock configuration
@@ -204,13 +202,25 @@ CONFIG_SH_TMU=y
204CONFIG_SH_TIMER_IRQ=16 202CONFIG_SH_TIMER_IRQ=16
205CONFIG_SH_PCLK_FREQ=50000000 203CONFIG_SH_PCLK_FREQ=50000000
206CONFIG_TICK_ONESHOT=y 204CONFIG_TICK_ONESHOT=y
207CONFIG_NO_HZ=y 205# CONFIG_NO_HZ is not set
208CONFIG_HIGH_RES_TIMERS=y 206CONFIG_HIGH_RES_TIMERS=y
209 207
210# 208#
211# CPU Frequency scaling 209# CPU Frequency scaling
212# 210#
213# CONFIG_CPU_FREQ is not set 211CONFIG_CPU_FREQ=y
212CONFIG_CPU_FREQ_TABLE=y
213# CONFIG_CPU_FREQ_DEBUG is not set
214CONFIG_CPU_FREQ_STAT=y
215# CONFIG_CPU_FREQ_STAT_DETAILS is not set
216CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
217# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
218CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
219CONFIG_CPU_FREQ_GOV_POWERSAVE=m
220CONFIG_CPU_FREQ_GOV_USERSPACE=m
221CONFIG_CPU_FREQ_GOV_ONDEMAND=m
222CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
223CONFIG_SH_CPU_FREQ=y
214 224
215# 225#
216# DMA support 226# DMA support
@@ -237,6 +247,7 @@ CONFIG_HZ_250=y
237CONFIG_HZ=250 247CONFIG_HZ=250
238CONFIG_KEXEC=y 248CONFIG_KEXEC=y
239# CONFIG_CRASH_DUMP is not set 249# CONFIG_CRASH_DUMP is not set
250# CONFIG_SMP is not set
240# CONFIG_PREEMPT_NONE is not set 251# CONFIG_PREEMPT_NONE is not set
241# CONFIG_PREEMPT_VOLUNTARY is not set 252# CONFIG_PREEMPT_VOLUNTARY is not set
242CONFIG_PREEMPT=y 253CONFIG_PREEMPT=y
@@ -249,7 +260,7 @@ CONFIG_ZERO_PAGE_OFFSET=0x00001000
249CONFIG_BOOT_LINK_OFFSET=0x00800000 260CONFIG_BOOT_LINK_OFFSET=0x00800000
250# CONFIG_UBC_WAKEUP is not set 261# CONFIG_UBC_WAKEUP is not set
251CONFIG_CMDLINE_BOOL=y 262CONFIG_CMDLINE_BOOL=y
252CONFIG_CMDLINE="console=ttySC0,115200 ip=192.168.1.2:::255.255.255.0 root=/dev/nfs nfsroot=192.168.1.1:/exports/devel/rfs/mobiler noaliencache earlyprintk=bios ignore_loglevel" 263CONFIG_CMDLINE="console=ttySC0,115200 earlyprintk=bios ignore_loglevel"
253 264
254# 265#
255# Bus options 266# Bus options
@@ -265,12 +276,106 @@ CONFIG_CMDLINE="console=ttySC0,115200 ip=192.168.1.2:::255.255.255.0 root=/dev/n
265# Executable file formats 276# Executable file formats
266# 277#
267CONFIG_BINFMT_ELF=y 278CONFIG_BINFMT_ELF=y
268# CONFIG_BINFMT_MISC is not set 279CONFIG_BINFMT_MISC=y
269 280
270# 281#
271# Networking 282# Networking
272# 283#
273# CONFIG_NET is not set 284CONFIG_NET=y
285
286#
287# Networking options
288#
289# CONFIG_PACKET is not set
290# CONFIG_UNIX is not set
291CONFIG_XFRM=y
292# CONFIG_XFRM_USER is not set
293# CONFIG_XFRM_SUB_POLICY is not set
294# CONFIG_XFRM_MIGRATE is not set
295# CONFIG_NET_KEY is not set
296CONFIG_INET=y
297# CONFIG_IP_MULTICAST is not set
298# CONFIG_IP_ADVANCED_ROUTER is not set
299CONFIG_IP_FIB_HASH=y
300CONFIG_IP_PNP=y
301CONFIG_IP_PNP_DHCP=y
302# CONFIG_IP_PNP_BOOTP is not set
303# CONFIG_IP_PNP_RARP is not set
304# CONFIG_NET_IPIP is not set
305# CONFIG_NET_IPGRE is not set
306# CONFIG_ARPD is not set
307# CONFIG_SYN_COOKIES is not set
308# CONFIG_INET_AH is not set
309# CONFIG_INET_ESP is not set
310# CONFIG_INET_IPCOMP is not set
311# CONFIG_INET_XFRM_TUNNEL is not set
312CONFIG_INET_TUNNEL=m
313CONFIG_INET_XFRM_MODE_TRANSPORT=y
314CONFIG_INET_XFRM_MODE_TUNNEL=y
315CONFIG_INET_XFRM_MODE_BEET=y
316CONFIG_INET_DIAG=y
317CONFIG_INET_TCP_DIAG=y
318# CONFIG_TCP_CONG_ADVANCED is not set
319CONFIG_TCP_CONG_CUBIC=y
320CONFIG_DEFAULT_TCP_CONG="cubic"
321# CONFIG_TCP_MD5SIG is not set
322CONFIG_IPV6=m
323# CONFIG_IPV6_PRIVACY is not set
324# CONFIG_IPV6_ROUTER_PREF is not set
325# CONFIG_IPV6_OPTIMISTIC_DAD is not set
326# CONFIG_INET6_AH is not set
327# CONFIG_INET6_ESP is not set
328# CONFIG_INET6_IPCOMP is not set
329# CONFIG_IPV6_MIP6 is not set
330# CONFIG_INET6_XFRM_TUNNEL is not set
331# CONFIG_INET6_TUNNEL is not set
332CONFIG_INET6_XFRM_MODE_TRANSPORT=m
333CONFIG_INET6_XFRM_MODE_TUNNEL=m
334CONFIG_INET6_XFRM_MODE_BEET=m
335# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
336CONFIG_IPV6_SIT=m
337# CONFIG_IPV6_TUNNEL is not set
338# CONFIG_IPV6_MULTIPLE_TABLES is not set
339# CONFIG_NETWORK_SECMARK is not set
340# CONFIG_NETFILTER is not set
341# CONFIG_IP_DCCP is not set
342# CONFIG_IP_SCTP is not set
343# CONFIG_TIPC is not set
344# CONFIG_ATM is not set
345# CONFIG_BRIDGE is not set
346# CONFIG_VLAN_8021Q is not set
347# CONFIG_DECNET is not set
348# CONFIG_LLC2 is not set
349# CONFIG_IPX is not set
350# CONFIG_ATALK is not set
351# CONFIG_X25 is not set
352# CONFIG_LAPB is not set
353# CONFIG_ECONET is not set
354# CONFIG_WAN_ROUTER is not set
355
356#
357# QoS and/or fair queueing
358#
359# CONFIG_NET_SCHED is not set
360
361#
362# Network testing
363#
364# CONFIG_NET_PKTGEN is not set
365# CONFIG_HAMRADIO is not set
366# CONFIG_IRDA is not set
367# CONFIG_BT is not set
368# CONFIG_AF_RXRPC is not set
369
370#
371# Wireless
372#
373# CONFIG_CFG80211 is not set
374# CONFIG_WIRELESS_EXT is not set
375# CONFIG_MAC80211 is not set
376# CONFIG_IEEE80211 is not set
377# CONFIG_RFKILL is not set
378# CONFIG_NET_9P is not set
274 379
275# 380#
276# Device Drivers 381# Device Drivers
@@ -285,37 +390,21 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
285# CONFIG_DEBUG_DRIVER is not set 390# CONFIG_DEBUG_DRIVER is not set
286# CONFIG_DEBUG_DEVRES is not set 391# CONFIG_DEBUG_DEVRES is not set
287# CONFIG_SYS_HYPERVISOR is not set 392# CONFIG_SYS_HYPERVISOR is not set
288 393# CONFIG_CONNECTOR is not set
289#
290# Connector - unified userspace <-> kernelspace linker
291#
292# CONFIG_MTD is not set 394# CONFIG_MTD is not set
293
294#
295# Parallel port support
296#
297# CONFIG_PARPORT is not set 395# CONFIG_PARPORT is not set
298 396CONFIG_BLK_DEV=y
299#
300# Plug and Play support
301#
302# CONFIG_PNPACPI is not set
303
304#
305# Block devices
306#
307# CONFIG_BLK_DEV_COW_COMMON is not set 397# CONFIG_BLK_DEV_COW_COMMON is not set
308# CONFIG_BLK_DEV_LOOP is not set 398# CONFIG_BLK_DEV_LOOP is not set
399# CONFIG_BLK_DEV_NBD is not set
309CONFIG_BLK_DEV_RAM=y 400CONFIG_BLK_DEV_RAM=y
310CONFIG_BLK_DEV_RAM_COUNT=16 401CONFIG_BLK_DEV_RAM_COUNT=16
311CONFIG_BLK_DEV_RAM_SIZE=4096 402CONFIG_BLK_DEV_RAM_SIZE=4096
312CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 403CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
313# CONFIG_CDROM_PKTCDVD is not set 404# CONFIG_CDROM_PKTCDVD is not set
314 405# CONFIG_ATA_OVER_ETH is not set
315# 406CONFIG_MISC_DEVICES=y
316# Misc devices 407# CONFIG_EEPROM_93CX6 is not set
317#
318# CONFIG_BLINK is not set
319# CONFIG_IDE is not set 408# CONFIG_IDE is not set
320 409
321# 410#
@@ -323,6 +412,7 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
323# 412#
324# CONFIG_RAID_ATTRS is not set 413# CONFIG_RAID_ATTRS is not set
325CONFIG_SCSI=y 414CONFIG_SCSI=y
415CONFIG_SCSI_DMA=y
326# CONFIG_SCSI_TGT is not set 416# CONFIG_SCSI_TGT is not set
327# CONFIG_SCSI_NETLINK is not set 417# CONFIG_SCSI_NETLINK is not set
328CONFIG_SCSI_PROC_FS=y 418CONFIG_SCSI_PROC_FS=y
@@ -351,73 +441,54 @@ CONFIG_SCSI_WAIT_SCAN=m
351# 441#
352# CONFIG_SCSI_SPI_ATTRS is not set 442# CONFIG_SCSI_SPI_ATTRS is not set
353# CONFIG_SCSI_FC_ATTRS is not set 443# CONFIG_SCSI_FC_ATTRS is not set
354# CONFIG_SCSI_SAS_ATTRS is not set 444# CONFIG_SCSI_ISCSI_ATTRS is not set
355# CONFIG_SCSI_SAS_LIBSAS is not set 445# CONFIG_SCSI_SAS_LIBSAS is not set
356 446CONFIG_SCSI_LOWLEVEL=y
357# 447# CONFIG_ISCSI_TCP is not set
358# SCSI low-level drivers
359#
360# CONFIG_SCSI_DEBUG is not set 448# CONFIG_SCSI_DEBUG is not set
361CONFIG_ATA=y 449CONFIG_ATA=y
362# CONFIG_ATA_NONSTANDARD is not set 450# CONFIG_ATA_NONSTANDARD is not set
363CONFIG_PATA_PLATFORM=y 451CONFIG_PATA_PLATFORM=y
364
365#
366# Multi-device support (RAID and LVM)
367#
368# CONFIG_MD is not set 452# CONFIG_MD is not set
369 453CONFIG_NETDEVICES=y
370# 454# CONFIG_NETDEVICES_MULTIQUEUE is not set
371# ISDN subsystem 455# CONFIG_DUMMY is not set
372# 456# CONFIG_BONDING is not set
373 457# CONFIG_MACVLAN is not set
374# 458# CONFIG_EQUALIZER is not set
375# Telephony Support 459# CONFIG_TUN is not set
376# 460# CONFIG_PHYLIB is not set
461CONFIG_NET_ETHERNET=y
462CONFIG_MII=y
463# CONFIG_STNIC is not set
464CONFIG_SMC91X=y
465# CONFIG_NETDEV_1000 is not set
466# CONFIG_NETDEV_10000 is not set
467
468#
469# Wireless LAN
470#
471# CONFIG_WLAN_PRE80211 is not set
472# CONFIG_WLAN_80211 is not set
473# CONFIG_WAN is not set
474# CONFIG_PPP is not set
475# CONFIG_SLIP is not set
476# CONFIG_SHAPER is not set
477# CONFIG_NETCONSOLE is not set
478# CONFIG_NETPOLL is not set
479# CONFIG_NET_POLL_CONTROLLER is not set
480# CONFIG_ISDN is not set
377# CONFIG_PHONE is not set 481# CONFIG_PHONE is not set
378 482
379# 483#
380# Input device support 484# Input device support
381# 485#
382CONFIG_INPUT=y 486# CONFIG_INPUT is not set
383# CONFIG_INPUT_FF_MEMLESS is not set
384
385#
386# Userland interfaces
387#
388CONFIG_INPUT_MOUSEDEV=y
389# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
390CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
391CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
392# CONFIG_INPUT_JOYDEV is not set
393# CONFIG_INPUT_TSDEV is not set
394# CONFIG_INPUT_EVDEV is not set
395# CONFIG_INPUT_EVBUG is not set
396
397#
398# Input Device Drivers
399#
400CONFIG_INPUT_KEYBOARD=y
401CONFIG_KEYBOARD_ATKBD=y
402# CONFIG_KEYBOARD_SUNKBD is not set
403# CONFIG_KEYBOARD_LKKBD is not set
404# CONFIG_KEYBOARD_XTKBD is not set
405# CONFIG_KEYBOARD_NEWTON is not set
406# CONFIG_KEYBOARD_STOWAWAY is not set
407# CONFIG_INPUT_MOUSE is not set
408# CONFIG_INPUT_JOYSTICK is not set
409# CONFIG_INPUT_TABLET is not set
410# CONFIG_INPUT_TOUCHSCREEN is not set
411# CONFIG_INPUT_MISC is not set
412 487
413# 488#
414# Hardware I/O ports 489# Hardware I/O ports
415# 490#
416CONFIG_SERIO=y 491# CONFIG_SERIO is not set
417# CONFIG_SERIO_I8042 is not set
418# CONFIG_SERIO_SERPORT is not set
419CONFIG_SERIO_LIBPS2=y
420# CONFIG_SERIO_RAW is not set
421# CONFIG_GAMEPORT is not set 492# CONFIG_GAMEPORT is not set
422 493
423# 494#
@@ -442,19 +513,18 @@ CONFIG_SERIAL_CORE_CONSOLE=y
442CONFIG_UNIX98_PTYS=y 513CONFIG_UNIX98_PTYS=y
443CONFIG_LEGACY_PTYS=y 514CONFIG_LEGACY_PTYS=y
444CONFIG_LEGACY_PTY_COUNT=256 515CONFIG_LEGACY_PTY_COUNT=256
516# CONFIG_IPMI_HANDLER is not set
517CONFIG_WATCHDOG=y
518# CONFIG_WATCHDOG_NOWAYOUT is not set
445 519
446# 520#
447# IPMI 521# Watchdog Device Drivers
448# 522#
449# CONFIG_IPMI_HANDLER is not set 523# CONFIG_SOFT_WATCHDOG is not set
450# CONFIG_WATCHDOG is not set 524# CONFIG_SH_WDT is not set
451CONFIG_HW_RANDOM=y 525# CONFIG_HW_RANDOM is not set
452# CONFIG_R3964 is not set 526# CONFIG_R3964 is not set
453# CONFIG_RAW_DRIVER is not set 527# CONFIG_RAW_DRIVER is not set
454
455#
456# TPM devices
457#
458# CONFIG_TCG_TPM is not set 528# CONFIG_TCG_TPM is not set
459# CONFIG_I2C is not set 529# CONFIG_I2C is not set
460 530
@@ -463,11 +533,8 @@ CONFIG_HW_RANDOM=y
463# 533#
464# CONFIG_SPI is not set 534# CONFIG_SPI is not set
465# CONFIG_SPI_MASTER is not set 535# CONFIG_SPI_MASTER is not set
466
467#
468# Dallas's 1-wire bus
469#
470# CONFIG_W1 is not set 536# CONFIG_W1 is not set
537# CONFIG_POWER_SUPPLY is not set
471# CONFIG_HWMON is not set 538# CONFIG_HWMON is not set
472 539
473# 540#
@@ -479,6 +546,7 @@ CONFIG_HW_RANDOM=y
479# Multimedia devices 546# Multimedia devices
480# 547#
481# CONFIG_VIDEO_DEV is not set 548# CONFIG_VIDEO_DEV is not set
549# CONFIG_DVB_CORE is not set
482# CONFIG_DAB is not set 550# CONFIG_DAB is not set
483 551
484# 552#
@@ -491,24 +559,18 @@ CONFIG_HW_RANDOM=y
491# 559#
492# CONFIG_DISPLAY_SUPPORT is not set 560# CONFIG_DISPLAY_SUPPORT is not set
493# CONFIG_VGASTATE is not set 561# CONFIG_VGASTATE is not set
562CONFIG_VIDEO_OUTPUT_CONTROL=m
494# CONFIG_FB is not set 563# CONFIG_FB is not set
495 564
496# 565#
497# Sound 566# Sound
498# 567#
499# CONFIG_SOUND is not set 568# CONFIG_SOUND is not set
500 569CONFIG_USB_SUPPORT=y
501# 570CONFIG_USB_ARCH_HAS_HCD=y
502# HID Devices
503#
504# CONFIG_HID is not set
505
506#
507# USB support
508#
509# CONFIG_USB_ARCH_HAS_HCD is not set
510# CONFIG_USB_ARCH_HAS_OHCI is not set 571# CONFIG_USB_ARCH_HAS_OHCI is not set
511# CONFIG_USB_ARCH_HAS_EHCI is not set 572# CONFIG_USB_ARCH_HAS_EHCI is not set
573# CONFIG_USB is not set
512 574
513# 575#
514# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 576# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -517,68 +579,32 @@ CONFIG_HW_RANDOM=y
517# 579#
518# USB Gadget Support 580# USB Gadget Support
519# 581#
520# CONFIG_USB_GADGET is not set 582CONFIG_USB_GADGET=y
583# CONFIG_USB_GADGET_DEBUG is not set
584# CONFIG_USB_GADGET_DEBUG_FILES is not set
585CONFIG_USB_GADGET_SELECTED=y
586# CONFIG_USB_GADGET_AMD5536UDC is not set
587# CONFIG_USB_GADGET_FSL_USB2 is not set
588# CONFIG_USB_GADGET_NET2280 is not set
589# CONFIG_USB_GADGET_PXA2XX is not set
590CONFIG_USB_GADGET_M66592=y
591CONFIG_USB_M66592=y
592# CONFIG_USB_GADGET_GOKU is not set
593# CONFIG_USB_GADGET_LH7A40X is not set
594# CONFIG_USB_GADGET_OMAP is not set
595# CONFIG_USB_GADGET_S3C2410 is not set
596# CONFIG_USB_GADGET_AT91 is not set
597# CONFIG_USB_GADGET_DUMMY_HCD is not set
598CONFIG_USB_GADGET_DUALSPEED=y
599# CONFIG_USB_ZERO is not set
600# CONFIG_USB_ETH is not set
601# CONFIG_USB_GADGETFS is not set
602# CONFIG_USB_FILE_STORAGE is not set
603# CONFIG_USB_G_SERIAL is not set
604# CONFIG_USB_MIDI_GADGET is not set
521# CONFIG_MMC is not set 605# CONFIG_MMC is not set
522
523#
524# LED devices
525#
526# CONFIG_NEW_LEDS is not set 606# CONFIG_NEW_LEDS is not set
527 607# CONFIG_RTC_CLASS is not set
528#
529# LED drivers
530#
531
532#
533# LED Triggers
534#
535
536#
537# InfiniBand support
538#
539
540#
541# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
542#
543
544#
545# Real Time Clock
546#
547CONFIG_RTC_LIB=y
548CONFIG_RTC_CLASS=y
549CONFIG_RTC_HCTOSYS=y
550CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
551# CONFIG_RTC_DEBUG is not set
552
553#
554# RTC interfaces
555#
556CONFIG_RTC_INTF_SYSFS=y
557CONFIG_RTC_INTF_PROC=y
558CONFIG_RTC_INTF_DEV=y
559# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
560# CONFIG_RTC_DRV_TEST is not set
561
562#
563# I2C RTC drivers
564#
565
566#
567# SPI RTC drivers
568#
569
570#
571# Platform RTC drivers
572#
573# CONFIG_RTC_DRV_DS1553 is not set
574# CONFIG_RTC_DRV_DS1742 is not set
575# CONFIG_RTC_DRV_M48T86 is not set
576# CONFIG_RTC_DRV_V3020 is not set
577
578#
579# on-CPU RTC drivers
580#
581CONFIG_RTC_DRV_SH=y
582 608
583# 609#
584# DMA Engine support 610# DMA Engine support
@@ -594,6 +620,11 @@ CONFIG_RTC_DRV_SH=y
594# 620#
595 621
596# 622#
623# Userspace I/O
624#
625CONFIG_UIO=m
626
627#
597# File systems 628# File systems
598# 629#
599CONFIG_EXT2_FS=y 630CONFIG_EXT2_FS=y
@@ -612,6 +643,7 @@ CONFIG_FS_MBCACHE=y
612# CONFIG_FS_POSIX_ACL is not set 643# CONFIG_FS_POSIX_ACL is not set
613# CONFIG_XFS_FS is not set 644# CONFIG_XFS_FS is not set
614# CONFIG_GFS2_FS is not set 645# CONFIG_GFS2_FS is not set
646# CONFIG_OCFS2_FS is not set
615# CONFIG_MINIX_FS is not set 647# CONFIG_MINIX_FS is not set
616# CONFIG_ROMFS_FS is not set 648# CONFIG_ROMFS_FS is not set
617CONFIG_INOTIFY=y 649CONFIG_INOTIFY=y
@@ -667,6 +699,17 @@ CONFIG_RAMFS=y
667# CONFIG_UFS_FS is not set 699# CONFIG_UFS_FS is not set
668 700
669# 701#
702# Network File Systems
703#
704# CONFIG_NFS_FS is not set
705# CONFIG_NFSD is not set
706# CONFIG_SMB_FS is not set
707# CONFIG_CIFS is not set
708# CONFIG_NCP_FS is not set
709# CONFIG_CODA_FS is not set
710# CONFIG_AFS_FS is not set
711
712#
670# Partition Types 713# Partition Types
671# 714#
672# CONFIG_PARTITION_ADVANCED is not set 715# CONFIG_PARTITION_ADVANCED is not set
@@ -678,6 +721,11 @@ CONFIG_MSDOS_PARTITION=y
678# CONFIG_NLS is not set 721# CONFIG_NLS is not set
679 722
680# 723#
724# Distributed Lock Manager
725#
726# CONFIG_DLM is not set
727
728#
681# Profiling support 729# Profiling support
682# 730#
683CONFIG_PROFILING=y 731CONFIG_PROFILING=y
@@ -687,31 +735,28 @@ CONFIG_PROFILING=y
687# Kernel hacking 735# Kernel hacking
688# 736#
689CONFIG_TRACE_IRQFLAGS_SUPPORT=y 737CONFIG_TRACE_IRQFLAGS_SUPPORT=y
690CONFIG_PRINTK_TIME=y 738# CONFIG_PRINTK_TIME is not set
691# CONFIG_ENABLE_MUST_CHECK is not set 739# CONFIG_ENABLE_MUST_CHECK is not set
692CONFIG_MAGIC_SYSRQ=y 740CONFIG_MAGIC_SYSRQ=y
693# CONFIG_UNUSED_SYMBOLS is not set 741# CONFIG_UNUSED_SYMBOLS is not set
694CONFIG_DEBUG_FS=y 742CONFIG_DEBUG_FS=y
695# CONFIG_HEADERS_CHECK is not set 743# CONFIG_HEADERS_CHECK is not set
696CONFIG_DEBUG_KERNEL=y 744CONFIG_DEBUG_KERNEL=y
697# CONFIG_DEBUG_SHIRQ is not set 745CONFIG_DEBUG_SHIRQ=y
698CONFIG_DETECT_SOFTLOCKUP=y 746CONFIG_DETECT_SOFTLOCKUP=y
747CONFIG_SCHED_DEBUG=y
699# CONFIG_SCHEDSTATS is not set 748# CONFIG_SCHEDSTATS is not set
700# CONFIG_TIMER_STATS is not set 749# CONFIG_TIMER_STATS is not set
701CONFIG_DEBUG_SLAB=y
702CONFIG_DEBUG_SLAB_LEAK=y
703CONFIG_DEBUG_PREEMPT=y 750CONFIG_DEBUG_PREEMPT=y
704# CONFIG_DEBUG_RT_MUTEXES is not set 751# CONFIG_DEBUG_RT_MUTEXES is not set
705# CONFIG_RT_MUTEX_TESTER is not set 752# CONFIG_RT_MUTEX_TESTER is not set
706CONFIG_DEBUG_SPINLOCK=y 753# CONFIG_DEBUG_SPINLOCK is not set
707CONFIG_DEBUG_MUTEXES=y 754# CONFIG_DEBUG_MUTEXES is not set
708CONFIG_DEBUG_LOCK_ALLOC=y 755# CONFIG_DEBUG_LOCK_ALLOC is not set
709# CONFIG_PROVE_LOCKING is not set 756# CONFIG_PROVE_LOCKING is not set
710CONFIG_LOCKDEP=y 757# CONFIG_LOCK_STAT is not set
711CONFIG_DEBUG_LOCKDEP=y
712# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 758# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
713# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 759# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
714CONFIG_STACKTRACE=y
715# CONFIG_DEBUG_KOBJECT is not set 760# CONFIG_DEBUG_KOBJECT is not set
716CONFIG_DEBUG_BUGVERBOSE=y 761CONFIG_DEBUG_BUGVERBOSE=y
717# CONFIG_DEBUG_INFO is not set 762# CONFIG_DEBUG_INFO is not set
@@ -735,10 +780,6 @@ CONFIG_DEBUG_STACK_USAGE=y
735# 780#
736# CONFIG_KEYS is not set 781# CONFIG_KEYS is not set
737# CONFIG_SECURITY is not set 782# CONFIG_SECURITY is not set
738
739#
740# Cryptographic options
741#
742# CONFIG_CRYPTO is not set 783# CONFIG_CRYPTO is not set
743 784
744# 785#
@@ -749,6 +790,7 @@ CONFIG_BITREVERSE=y
749# CONFIG_CRC16 is not set 790# CONFIG_CRC16 is not set
750# CONFIG_CRC_ITU_T is not set 791# CONFIG_CRC_ITU_T is not set
751CONFIG_CRC32=y 792CONFIG_CRC32=y
793# CONFIG_CRC7 is not set
752# CONFIG_LIBCRC32C is not set 794# CONFIG_LIBCRC32C is not set
753CONFIG_PLIST=y 795CONFIG_PLIST=y
754CONFIG_HAS_IOMEM=y 796CONFIG_HAS_IOMEM=y
diff --git a/arch/sh/drivers/dma/Kconfig b/arch/sh/drivers/dma/Kconfig
index ee711431e504..4e711a0c3dae 100644
--- a/arch/sh/drivers/dma/Kconfig
+++ b/arch/sh/drivers/dma/Kconfig
@@ -12,6 +12,7 @@ config SH_DMA
12config NR_ONCHIP_DMA_CHANNELS 12config NR_ONCHIP_DMA_CHANNELS
13 int 13 int
14 depends on SH_DMA 14 depends on SH_DMA
15 default "6" if CPU_SUBTYPE_SH7720
15 default "8" if CPU_SUBTYPE_SH7750R || CPU_SUBTYPE_SH7751R 16 default "8" if CPU_SUBTYPE_SH7750R || CPU_SUBTYPE_SH7751R
16 default "12" if CPU_SUBTYPE_SH7780 17 default "12" if CPU_SUBTYPE_SH7780
17 default "4" 18 default "4"
diff --git a/arch/sh/drivers/dma/dma-sh.c b/arch/sh/drivers/dma/dma-sh.c
index 06ed0609a95d..958bac1c585a 100644
--- a/arch/sh/drivers/dma/dma-sh.c
+++ b/arch/sh/drivers/dma/dma-sh.c
@@ -24,13 +24,19 @@ static int dmte_irq_map[] = {
24 DMTE1_IRQ, 24 DMTE1_IRQ,
25 DMTE2_IRQ, 25 DMTE2_IRQ,
26 DMTE3_IRQ, 26 DMTE3_IRQ,
27#if defined(CONFIG_CPU_SUBTYPE_SH7751R) || \ 27#if defined(CONFIG_CPU_SUBTYPE_SH7720) || \
28 defined(CONFIG_CPU_SUBTYPE_SH7751R) || \
28 defined(CONFIG_CPU_SUBTYPE_SH7760) || \ 29 defined(CONFIG_CPU_SUBTYPE_SH7760) || \
30 defined(CONFIG_CPU_SUBTYPE_SH7709) || \
29 defined(CONFIG_CPU_SUBTYPE_SH7780) 31 defined(CONFIG_CPU_SUBTYPE_SH7780)
30 DMTE4_IRQ, 32 DMTE4_IRQ,
31 DMTE5_IRQ, 33 DMTE5_IRQ,
34#endif
35#if defined(CONFIG_CPU_SUBTYPE_SH7751R) || \
36 defined(CONFIG_CPU_SUBTYPE_SH7760) || \
37 defined(CONFIG_CPU_SUBTYPE_SH7780)
32 DMTE6_IRQ, 38 DMTE6_IRQ,
33 DMTE7_IRQ, 39 DMTE7_IRQ,
34#endif 40#endif
35}; 41};
36 42
@@ -196,7 +202,8 @@ static int sh_dmac_get_dma_residue(struct dma_channel *chan)
196 return ctrl_inl(DMATCR[chan->chan]) << calc_xmit_shift(chan); 202 return ctrl_inl(DMATCR[chan->chan]) << calc_xmit_shift(chan);
197} 203}
198 204
199#ifdef CONFIG_CPU_SUBTYPE_SH7780 205#if defined(CONFIG_CPU_SUBTYPE_SH7720) || \
206 defined(CONFIG_CPU_SUBTYPE_SH7780)
200#define dmaor_read_reg() ctrl_inw(DMAOR) 207#define dmaor_read_reg() ctrl_inw(DMAOR)
201#define dmaor_write_reg(data) ctrl_outw(data, DMAOR) 208#define dmaor_write_reg(data) ctrl_outw(data, DMAOR)
202#else 209#else
diff --git a/arch/sh/drivers/heartbeat.c b/arch/sh/drivers/heartbeat.c
index 10c1828c9ff5..b76a14f12ce2 100644
--- a/arch/sh/drivers/heartbeat.c
+++ b/arch/sh/drivers/heartbeat.c
@@ -24,24 +24,44 @@
24#include <linux/sched.h> 24#include <linux/sched.h>
25#include <linux/timer.h> 25#include <linux/timer.h>
26#include <linux/io.h> 26#include <linux/io.h>
27#include <asm/heartbeat.h>
27 28
28#define DRV_NAME "heartbeat" 29#define DRV_NAME "heartbeat"
29#define DRV_VERSION "0.1.0" 30#define DRV_VERSION "0.1.1"
30 31
31struct heartbeat_data { 32static unsigned char default_bit_pos[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
32 void __iomem *base; 33
33 unsigned char bit_pos[8]; 34static inline void heartbeat_toggle_bit(struct heartbeat_data *hd,
34 struct timer_list timer; 35 unsigned bit, unsigned int inverted)
35}; 36{
37 unsigned int new;
38
39 new = (1 << hd->bit_pos[bit]);
40 if (inverted)
41 new = ~new;
42
43 switch (hd->regsize) {
44 case 32:
45 iowrite32(new, hd->base);
46 break;
47 case 16:
48 iowrite16(new, hd->base);
49 break;
50 default:
51 iowrite8(new, hd->base);
52 break;
53 }
54}
36 55
37static void heartbeat_timer(unsigned long data) 56static void heartbeat_timer(unsigned long data)
38{ 57{
39 struct heartbeat_data *hd = (struct heartbeat_data *)data; 58 struct heartbeat_data *hd = (struct heartbeat_data *)data;
40 static unsigned bit = 0, up = 1; 59 static unsigned bit = 0, up = 1;
41 60
42 ctrl_outw(1 << hd->bit_pos[bit], (unsigned long)hd->base); 61 heartbeat_toggle_bit(hd, bit, hd->flags & HEARTBEAT_INVERTED);
62
43 bit += up; 63 bit += up;
44 if ((bit == 0) || (bit == ARRAY_SIZE(hd->bit_pos)-1)) 64 if ((bit == 0) || (bit == (hd->nr_bits)-1))
45 up = -up; 65 up = -up;
46 66
47 mod_timer(&hd->timer, jiffies + (110 - ((300 << FSHIFT) / 67 mod_timer(&hd->timer, jiffies + (110 - ((300 << FSHIFT) /
@@ -64,21 +84,31 @@ static int heartbeat_drv_probe(struct platform_device *pdev)
64 return -EINVAL; 84 return -EINVAL;
65 } 85 }
66 86
67 hd = kmalloc(sizeof(struct heartbeat_data), GFP_KERNEL);
68 if (unlikely(!hd))
69 return -ENOMEM;
70
71 if (pdev->dev.platform_data) { 87 if (pdev->dev.platform_data) {
72 memcpy(hd->bit_pos, pdev->dev.platform_data, 88 hd = pdev->dev.platform_data;
73 ARRAY_SIZE(hd->bit_pos));
74 } else { 89 } else {
75 int i; 90 hd = kzalloc(sizeof(struct heartbeat_data), GFP_KERNEL);
91 if (unlikely(!hd))
92 return -ENOMEM;
93 }
94
95 hd->base = ioremap_nocache(res->start, res->end - res->start + 1);
96 if (!unlikely(hd->base)) {
97 dev_err(&pdev->dev, "ioremap failed\n");
98
99 if (!pdev->dev.platform_data)
100 kfree(hd);
101
102 return -ENXIO;
103 }
76 104
77 for (i = 0; i < ARRAY_SIZE(hd->bit_pos); i++) 105 if (!hd->nr_bits) {
78 hd->bit_pos[i] = i; 106 hd->bit_pos = default_bit_pos;
107 hd->nr_bits = ARRAY_SIZE(default_bit_pos);
79 } 108 }
80 109
81 hd->base = (void __iomem *)(unsigned long)res->start; 110 if (!hd->regsize)
111 hd->regsize = 8; /* default access size */
82 112
83 setup_timer(&hd->timer, heartbeat_timer, (unsigned long)hd); 113 setup_timer(&hd->timer, heartbeat_timer, (unsigned long)hd);
84 platform_set_drvdata(pdev, hd); 114 platform_set_drvdata(pdev, hd);
@@ -91,10 +121,12 @@ static int heartbeat_drv_remove(struct platform_device *pdev)
91 struct heartbeat_data *hd = platform_get_drvdata(pdev); 121 struct heartbeat_data *hd = platform_get_drvdata(pdev);
92 122
93 del_timer_sync(&hd->timer); 123 del_timer_sync(&hd->timer);
124 iounmap(hd->base);
94 125
95 platform_set_drvdata(pdev, NULL); 126 platform_set_drvdata(pdev, NULL);
96 127
97 kfree(hd); 128 if (!pdev->dev.platform_data)
129 kfree(hd);
98 130
99 return 0; 131 return 0;
100} 132}
diff --git a/arch/sh/drivers/pci/ops-rts7751r2d.c b/arch/sh/drivers/pci/ops-rts7751r2d.c
index 4a518d948049..ec8430c8d2d1 100644
--- a/arch/sh/drivers/pci/ops-rts7751r2d.c
+++ b/arch/sh/drivers/pci/ops-rts7751r2d.c
@@ -19,10 +19,10 @@
19#include "pci-sh4.h" 19#include "pci-sh4.h"
20 20
21static u8 rts7751r2d_irq_tab[] __initdata = { 21static u8 rts7751r2d_irq_tab[] __initdata = {
22 IRQ_PCISLOT1, 22 IRQ_PCI_INTA,
23 IRQ_PCISLOT2, 23 IRQ_PCI_INTB,
24 IRQ_PCMCIA, 24 IRQ_PCI_INTC,
25 IRQ_PCIETH, 25 IRQ_PCI_INTD,
26}; 26};
27 27
28int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) 28int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
diff --git a/arch/sh/drivers/pci/pci-sh7780.c b/arch/sh/drivers/pci/pci-sh7780.c
index 5508e45d4838..e516087fb435 100644
--- a/arch/sh/drivers/pci/pci-sh7780.c
+++ b/arch/sh/drivers/pci/pci-sh7780.c
@@ -79,19 +79,6 @@ static int __init sh7780_pci_init(void)
79 ctrl_outl(0xAAAA0000, INTC_ICR1); 79 ctrl_outl(0xAAAA0000, INTC_ICR1);
80 /* INTPRI: priority=3(all) */ 80 /* INTPRI: priority=3(all) */
81 ctrl_outl(0x33333333, INTC_INTPRI); 81 ctrl_outl(0x33333333, INTC_INTPRI);
82 } else {
83 /* INTC SH-4 Mode */
84 ctrl_outl(0x00200000, INTC_ICR0);
85 /* enable PCIINTA - PCIINTD */
86 ctrl_outl(0x00078000, INTC_INT2MSKCR);
87 /* disable IRL4-7 Interrupt */
88 ctrl_outl(0x40000000, INTC_INTMSK1);
89 /* disable IRL4-7 Interrupt */
90 ctrl_outl(0x0000fffe, INTC_INTMSK2);
91 /* enable IRL0-3 Interrupt */
92 ctrl_outl(0x80000000, INTC_INTMSKCLR1);
93 /* enable IRL0-3 Interrupt */
94 ctrl_outl(0xfffe0000, INTC_INTMSKCLR2);
95 } 82 }
96 83
97 if ((ret = sh4_pci_check_direct()) != 0) 84 if ((ret = sh4_pci_check_direct()) != 0)
diff --git a/arch/sh/kernel/cpu/clock.c b/arch/sh/kernel/cpu/clock.c
index 92807ffa8e20..b5f1e23ed57c 100644
--- a/arch/sh/kernel/cpu/clock.c
+++ b/arch/sh/kernel/cpu/clock.c
@@ -83,6 +83,8 @@ static void propagate_rate(struct clk *clk)
83 continue; 83 continue;
84 if (likely(clkp->ops && clkp->ops->recalc)) 84 if (likely(clkp->ops && clkp->ops->recalc))
85 clkp->ops->recalc(clkp); 85 clkp->ops->recalc(clkp);
86 if (unlikely(clkp->flags & CLK_RATE_PROPAGATES))
87 propagate_rate(clkp);
86 } 88 }
87} 89}
88 90
diff --git a/arch/sh/kernel/cpu/init.c b/arch/sh/kernel/cpu/init.c
index 9172e97dc26a..c217c4bf0085 100644
--- a/arch/sh/kernel/cpu/init.c
+++ b/arch/sh/kernel/cpu/init.c
@@ -22,6 +22,7 @@
22#include <asm/cache.h> 22#include <asm/cache.h>
23#include <asm/io.h> 23#include <asm/io.h>
24#include <asm/ubc.h> 24#include <asm/ubc.h>
25#include <asm/smp.h>
25 26
26/* 27/*
27 * Generic wrapper for command line arguments to disable on-chip 28 * Generic wrapper for command line arguments to disable on-chip
@@ -143,12 +144,15 @@ static void __init cache_init(void)
143 flags &= ~CCR_CACHE_EMODE; 144 flags &= ~CCR_CACHE_EMODE;
144#endif 145#endif
145 146
146#ifdef CONFIG_SH_WRITETHROUGH 147#if defined(CONFIG_CACHE_WRITETHROUGH)
147 /* Turn on Write-through caching */ 148 /* Write-through */
148 flags |= CCR_CACHE_WT; 149 flags |= CCR_CACHE_WT;
149#else 150#elif defined(CONFIG_CACHE_WRITEBACK)
150 /* .. or default to Write-back */ 151 /* Write-back */
151 flags |= CCR_CACHE_CB; 152 flags |= CCR_CACHE_CB;
153#else
154 /* Off */
155 flags &= ~CCR_CACHE_ENABLE;
152#endif 156#endif
153 157
154 ctrl_outl(flags, CCR); 158 ctrl_outl(flags, CCR);
@@ -213,8 +217,11 @@ static void __init dsp_init(void)
213 * Each processor family is still responsible for doing its own probing 217 * Each processor family is still responsible for doing its own probing
214 * and cache configuration in detect_cpu_and_cache_system(). 218 * and cache configuration in detect_cpu_and_cache_system().
215 */ 219 */
216asmlinkage void __init sh_cpu_init(void) 220
221asmlinkage void __cpuinit sh_cpu_init(void)
217{ 222{
223 current_thread_info()->cpu = hard_smp_processor_id();
224
218 /* First, probe the CPU */ 225 /* First, probe the CPU */
219 detect_cpu_and_cache_system(); 226 detect_cpu_and_cache_system();
220 227
@@ -224,9 +231,10 @@ asmlinkage void __init sh_cpu_init(void)
224 /* Init the cache */ 231 /* Init the cache */
225 cache_init(); 232 cache_init();
226 233
227 shm_align_mask = max_t(unsigned long, 234 if (raw_smp_processor_id() == 0)
228 current_cpu_data.dcache.way_size - 1, 235 shm_align_mask = max_t(unsigned long,
229 PAGE_SIZE - 1); 236 current_cpu_data.dcache.way_size - 1,
237 PAGE_SIZE - 1);
230 238
231 /* Disable the FPU */ 239 /* Disable the FPU */
232 if (fpu_disabled) { 240 if (fpu_disabled) {
@@ -265,6 +273,7 @@ asmlinkage void __init sh_cpu_init(void)
265 * like PTRACE_SINGLESTEP or doing hardware watchpoints in GDB. So .. 273 * like PTRACE_SINGLESTEP or doing hardware watchpoints in GDB. So ..
266 * we wake it up and hope that all is well. 274 * we wake it up and hope that all is well.
267 */ 275 */
268 ubc_wakeup(); 276 if (raw_smp_processor_id() == 0)
277 ubc_wakeup();
269 speculative_execution_init(); 278 speculative_execution_init();
270} 279}
diff --git a/arch/sh/kernel/cpu/irq/Makefile b/arch/sh/kernel/cpu/irq/Makefile
index 60bfc05cf354..8da8e178f09c 100644
--- a/arch/sh/kernel/cpu/irq/Makefile
+++ b/arch/sh/kernel/cpu/irq/Makefile
@@ -1,9 +1,7 @@
1# 1#
2# Makefile for the Linux/SuperH CPU-specifc IRQ handlers. 2# Makefile for the Linux/SuperH CPU-specifc IRQ handlers.
3# 3#
4obj-y += imask.o 4obj-y += imask.o intc.o
5 5
6obj-$(CONFIG_CPU_HAS_IPR_IRQ) += ipr.o 6obj-$(CONFIG_CPU_HAS_IPR_IRQ) += ipr.o
7obj-$(CONFIG_CPU_HAS_MASKREG_IRQ) += maskreg.o 7obj-$(CONFIG_CPU_HAS_MASKREG_IRQ) += maskreg.o
8obj-$(CONFIG_CPU_HAS_INTC_IRQ) += intc.o
9obj-$(CONFIG_CPU_HAS_INTC2_IRQ) += intc2.o
diff --git a/arch/sh/kernel/cpu/irq/intc.c b/arch/sh/kernel/cpu/irq/intc.c
index 9345a7130e9e..6ac018c15e03 100644
--- a/arch/sh/kernel/cpu/irq/intc.c
+++ b/arch/sh/kernel/cpu/irq/intc.c
@@ -20,145 +20,258 @@
20#include <linux/module.h> 20#include <linux/module.h>
21#include <linux/io.h> 21#include <linux/io.h>
22#include <linux/interrupt.h> 22#include <linux/interrupt.h>
23#include <linux/bootmem.h>
24
25#define _INTC_MK(fn, mode, addr_e, addr_d, width, shift) \
26 ((shift) | ((width) << 5) | ((fn) << 9) | ((mode) << 13) | \
27 ((addr_e) << 16) | ((addr_d << 24)))
28
29#define _INTC_SHIFT(h) (h & 0x1f)
30#define _INTC_WIDTH(h) ((h >> 5) & 0xf)
31#define _INTC_FN(h) ((h >> 9) & 0xf)
32#define _INTC_MODE(h) ((h >> 13) & 0x7)
33#define _INTC_ADDR_E(h) ((h >> 16) & 0xff)
34#define _INTC_ADDR_D(h) ((h >> 24) & 0xff)
35
36struct intc_handle_int {
37 unsigned int irq;
38 unsigned long handle;
39};
40
41struct intc_desc_int {
42 unsigned long *reg;
43#ifdef CONFIG_SMP
44 unsigned long *smp;
45#endif
46 unsigned int nr_reg;
47 struct intc_handle_int *prio;
48 unsigned int nr_prio;
49 struct intc_handle_int *sense;
50 unsigned int nr_sense;
51 struct irq_chip chip;
52};
23 53
24#define _INTC_MK(fn, idx, bit, value) \ 54#ifdef CONFIG_SMP
25 ((fn) << 24 | ((value) << 16) | ((idx) << 8) | (bit)) 55#define IS_SMP(x) x.smp
26#define _INTC_FN(h) (h >> 24) 56#define INTC_REG(d, x, c) (d->reg[(x)] + ((d->smp[(x)] & 0xff) * c))
27#define _INTC_VALUE(h) ((h >> 16) & 0xff) 57#define SMP_NR(d, x) ((d->smp[(x)] >> 8) ? (d->smp[(x)] >> 8) : 1)
28#define _INTC_IDX(h) ((h >> 8) & 0xff) 58#else
29#define _INTC_BIT(h) (h & 0xff) 59#define IS_SMP(x) 0
60#define INTC_REG(d, x, c) (d->reg[(x)])
61#define SMP_NR(d, x) 1
62#endif
30 63
31#define _INTC_PTR(desc, member, data) \ 64static unsigned int intc_prio_level[NR_IRQS]; /* for now */
32 (desc->member + _INTC_IDX(data))
33 65
34static inline struct intc_desc *get_intc_desc(unsigned int irq) 66static inline struct intc_desc_int *get_intc_desc(unsigned int irq)
35{ 67{
36 struct irq_chip *chip = get_irq_chip(irq); 68 struct irq_chip *chip = get_irq_chip(irq);
37 return (void *)((char *)chip - offsetof(struct intc_desc, chip)); 69 return (void *)((char *)chip - offsetof(struct intc_desc_int, chip));
38} 70}
39 71
40static inline unsigned int set_field(unsigned int value, 72static inline unsigned int set_field(unsigned int value,
41 unsigned int field_value, 73 unsigned int field_value,
42 unsigned int width, 74 unsigned int handle)
43 unsigned int shift)
44{ 75{
76 unsigned int width = _INTC_WIDTH(handle);
77 unsigned int shift = _INTC_SHIFT(handle);
78
45 value &= ~(((1 << width) - 1) << shift); 79 value &= ~(((1 << width) - 1) << shift);
46 value |= field_value << shift; 80 value |= field_value << shift;
47 return value; 81 return value;
48} 82}
49 83
50static inline unsigned int set_prio_field(struct intc_desc *desc, 84static void write_8(unsigned long addr, unsigned long h, unsigned long data)
51 unsigned int value,
52 unsigned int priority,
53 unsigned int data)
54{ 85{
55 unsigned int width = _INTC_PTR(desc, prio_regs, data)->field_width; 86 ctrl_outb(set_field(0, data, h), addr);
56
57 return set_field(value, priority, width, _INTC_BIT(data));
58} 87}
59 88
60static void disable_prio_16(struct intc_desc *desc, unsigned int data) 89static void write_16(unsigned long addr, unsigned long h, unsigned long data)
61{ 90{
62 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->reg; 91 ctrl_outw(set_field(0, data, h), addr);
63
64 ctrl_outw(set_prio_field(desc, ctrl_inw(addr), 0, data), addr);
65} 92}
66 93
67static void enable_prio_16(struct intc_desc *desc, unsigned int data) 94static void write_32(unsigned long addr, unsigned long h, unsigned long data)
68{ 95{
69 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->reg; 96 ctrl_outl(set_field(0, data, h), addr);
70 unsigned int prio = _INTC_VALUE(data);
71
72 ctrl_outw(set_prio_field(desc, ctrl_inw(addr), prio, data), addr);
73} 97}
74 98
75static void disable_prio_32(struct intc_desc *desc, unsigned int data) 99static void modify_8(unsigned long addr, unsigned long h, unsigned long data)
76{ 100{
77 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->reg; 101 ctrl_outb(set_field(ctrl_inb(addr), data, h), addr);
78
79 ctrl_outl(set_prio_field(desc, ctrl_inl(addr), 0, data), addr);
80} 102}
81 103
82static void enable_prio_32(struct intc_desc *desc, unsigned int data) 104static void modify_16(unsigned long addr, unsigned long h, unsigned long data)
83{ 105{
84 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->reg; 106 ctrl_outw(set_field(ctrl_inw(addr), data, h), addr);
85 unsigned int prio = _INTC_VALUE(data);
86
87 ctrl_outl(set_prio_field(desc, ctrl_inl(addr), prio, data), addr);
88} 107}
89 108
90static void disable_mask_8(struct intc_desc *desc, unsigned int data) 109static void modify_32(unsigned long addr, unsigned long h, unsigned long data)
91{ 110{
92 ctrl_outb(1 << _INTC_BIT(data), 111 ctrl_outl(set_field(ctrl_inl(addr), data, h), addr);
93 _INTC_PTR(desc, mask_regs, data)->set_reg);
94} 112}
95 113
96static void enable_mask_8(struct intc_desc *desc, unsigned int data) 114enum { REG_FN_ERR = 0, REG_FN_WRITE_BASE = 1, REG_FN_MODIFY_BASE = 5 };
115
116static void (*intc_reg_fns[])(unsigned long addr,
117 unsigned long h,
118 unsigned long data) = {
119 [REG_FN_WRITE_BASE + 0] = write_8,
120 [REG_FN_WRITE_BASE + 1] = write_16,
121 [REG_FN_WRITE_BASE + 3] = write_32,
122 [REG_FN_MODIFY_BASE + 0] = modify_8,
123 [REG_FN_MODIFY_BASE + 1] = modify_16,
124 [REG_FN_MODIFY_BASE + 3] = modify_32,
125};
126
127enum { MODE_ENABLE_REG = 0, /* Bit(s) set -> interrupt enabled */
128 MODE_MASK_REG, /* Bit(s) set -> interrupt disabled */
129 MODE_DUAL_REG, /* Two registers, set bit to enable / disable */
130 MODE_PRIO_REG, /* Priority value written to enable interrupt */
131 MODE_PCLR_REG, /* Above plus all bits set to disable interrupt */
132};
133
134static void intc_mode_field(unsigned long addr,
135 unsigned long handle,
136 void (*fn)(unsigned long,
137 unsigned long,
138 unsigned long),
139 unsigned int irq)
97{ 140{
98 ctrl_outb(1 << _INTC_BIT(data), 141 fn(addr, handle, ((1 << _INTC_WIDTH(handle)) - 1));
99 _INTC_PTR(desc, mask_regs, data)->clr_reg);
100} 142}
101 143
102static void disable_mask_32(struct intc_desc *desc, unsigned int data) 144static void intc_mode_zero(unsigned long addr,
145 unsigned long handle,
146 void (*fn)(unsigned long,
147 unsigned long,
148 unsigned long),
149 unsigned int irq)
103{ 150{
104 ctrl_outl(1 << _INTC_BIT(data), 151 fn(addr, handle, 0);
105 _INTC_PTR(desc, mask_regs, data)->set_reg);
106} 152}
107 153
108static void enable_mask_32(struct intc_desc *desc, unsigned int data) 154static void intc_mode_prio(unsigned long addr,
155 unsigned long handle,
156 void (*fn)(unsigned long,
157 unsigned long,
158 unsigned long),
159 unsigned int irq)
109{ 160{
110 ctrl_outl(1 << _INTC_BIT(data), 161 fn(addr, handle, intc_prio_level[irq]);
111 _INTC_PTR(desc, mask_regs, data)->clr_reg);
112} 162}
113 163
114enum { REG_FN_ERROR=0, 164static void (*intc_enable_fns[])(unsigned long addr,
115 REG_FN_MASK_8, REG_FN_MASK_32, 165 unsigned long handle,
116 REG_FN_PRIO_16, REG_FN_PRIO_32 }; 166 void (*fn)(unsigned long,
117 167 unsigned long,
118static struct { 168 unsigned long),
119 void (*enable)(struct intc_desc *, unsigned int); 169 unsigned int irq) = {
120 void (*disable)(struct intc_desc *, unsigned int); 170 [MODE_ENABLE_REG] = intc_mode_field,
121} intc_reg_fns[] = { 171 [MODE_MASK_REG] = intc_mode_zero,
122 [REG_FN_MASK_8] = { enable_mask_8, disable_mask_8 }, 172 [MODE_DUAL_REG] = intc_mode_field,
123 [REG_FN_MASK_32] = { enable_mask_32, disable_mask_32 }, 173 [MODE_PRIO_REG] = intc_mode_prio,
124 [REG_FN_PRIO_16] = { enable_prio_16, disable_prio_16 }, 174 [MODE_PCLR_REG] = intc_mode_prio,
125 [REG_FN_PRIO_32] = { enable_prio_32, disable_prio_32 },
126}; 175};
127 176
128static void intc_enable(unsigned int irq) 177static void (*intc_disable_fns[])(unsigned long addr,
178 unsigned long handle,
179 void (*fn)(unsigned long,
180 unsigned long,
181 unsigned long),
182 unsigned int irq) = {
183 [MODE_ENABLE_REG] = intc_mode_zero,
184 [MODE_MASK_REG] = intc_mode_field,
185 [MODE_DUAL_REG] = intc_mode_field,
186 [MODE_PRIO_REG] = intc_mode_zero,
187 [MODE_PCLR_REG] = intc_mode_field,
188};
189
190static inline void _intc_enable(unsigned int irq, unsigned long handle)
129{ 191{
130 struct intc_desc *desc = get_intc_desc(irq); 192 struct intc_desc_int *d = get_intc_desc(irq);
131 unsigned int data = (unsigned int) get_irq_chip_data(irq); 193 unsigned long addr;
194 unsigned int cpu;
195
196 for (cpu = 0; cpu < SMP_NR(d, _INTC_ADDR_E(handle)); cpu++) {
197 addr = INTC_REG(d, _INTC_ADDR_E(handle), cpu);
198 intc_enable_fns[_INTC_MODE(handle)](addr, handle, intc_reg_fns\
199 [_INTC_FN(handle)], irq);
200 }
201}
132 202
133 intc_reg_fns[_INTC_FN(data)].enable(desc, data); 203static void intc_enable(unsigned int irq)
204{
205 _intc_enable(irq, (unsigned long)get_irq_chip_data(irq));
134} 206}
135 207
136static void intc_disable(unsigned int irq) 208static void intc_disable(unsigned int irq)
137{ 209{
138 struct intc_desc *desc = get_intc_desc(irq); 210 struct intc_desc_int *d = get_intc_desc(irq);
139 unsigned int data = (unsigned int) get_irq_chip_data(irq); 211 unsigned long handle = (unsigned long) get_irq_chip_data(irq);
140 212 unsigned long addr;
141 intc_reg_fns[_INTC_FN(data)].disable(desc, data); 213 unsigned int cpu;
214
215 for (cpu = 0; cpu < SMP_NR(d, _INTC_ADDR_D(handle)); cpu++) {
216 addr = INTC_REG(d, _INTC_ADDR_D(handle), cpu);
217 intc_disable_fns[_INTC_MODE(handle)](addr, handle,intc_reg_fns\
218 [_INTC_FN(handle)], irq);
219 }
142} 220}
143 221
144static void set_sense_16(struct intc_desc *desc, unsigned int data) 222static struct intc_handle_int *intc_find_irq(struct intc_handle_int *hp,
223 unsigned int nr_hp,
224 unsigned int irq)
145{ 225{
146 unsigned long addr = _INTC_PTR(desc, sense_regs, data)->reg; 226 int i;
147 unsigned int width = _INTC_PTR(desc, sense_regs, data)->field_width; 227
148 unsigned int bit = _INTC_BIT(data); 228 /* this doesn't scale well, but...
149 unsigned int value = _INTC_VALUE(data); 229 *
230 * this function should only be used for cerain uncommon
231 * operations such as intc_set_priority() and intc_set_sense()
232 * and in those rare cases performance doesn't matter that much.
233 * keeping the memory footprint low is more important.
234 *
235 * one rather simple way to speed this up and still keep the
236 * memory footprint down is to make sure the array is sorted
237 * and then perform a bisect to lookup the irq.
238 */
150 239
151 ctrl_outw(set_field(ctrl_inw(addr), value, width, bit), addr); 240 for (i = 0; i < nr_hp; i++) {
241 if ((hp + i)->irq != irq)
242 continue;
243
244 return hp + i;
245 }
246
247 return NULL;
152} 248}
153 249
154static void set_sense_32(struct intc_desc *desc, unsigned int data) 250int intc_set_priority(unsigned int irq, unsigned int prio)
155{ 251{
156 unsigned long addr = _INTC_PTR(desc, sense_regs, data)->reg; 252 struct intc_desc_int *d = get_intc_desc(irq);
157 unsigned int width = _INTC_PTR(desc, sense_regs, data)->field_width; 253 struct intc_handle_int *ihp;
158 unsigned int bit = _INTC_BIT(data); 254
159 unsigned int value = _INTC_VALUE(data); 255 if (!intc_prio_level[irq] || prio <= 1)
256 return -EINVAL;
257
258 ihp = intc_find_irq(d->prio, d->nr_prio, irq);
259 if (ihp) {
260 if (prio >= (1 << _INTC_WIDTH(ihp->handle)))
261 return -EINVAL;
160 262
161 ctrl_outl(set_field(ctrl_inl(addr), value, width, bit), addr); 263 intc_prio_level[irq] = prio;
264
265 /*
266 * only set secondary masking method directly
267 * primary masking method is using intc_prio_level[irq]
268 * priority level will be set during next enable()
269 */
270
271 if (_INTC_FN(ihp->handle) != REG_FN_ERR)
272 _intc_enable(irq, ihp->handle);
273 }
274 return 0;
162} 275}
163 276
164#define VALID(x) (x | 0x80) 277#define VALID(x) (x | 0x80)
@@ -172,79 +285,38 @@ static unsigned char intc_irq_sense_table[IRQ_TYPE_SENSE_MASK + 1] = {
172 285
173static int intc_set_sense(unsigned int irq, unsigned int type) 286static int intc_set_sense(unsigned int irq, unsigned int type)
174{ 287{
175 struct intc_desc *desc = get_intc_desc(irq); 288 struct intc_desc_int *d = get_intc_desc(irq);
176 unsigned char value = intc_irq_sense_table[type & IRQ_TYPE_SENSE_MASK]; 289 unsigned char value = intc_irq_sense_table[type & IRQ_TYPE_SENSE_MASK];
177 unsigned int i, j, data, bit; 290 struct intc_handle_int *ihp;
178 intc_enum enum_id = 0; 291 unsigned long addr;
179
180 for (i = 0; i < desc->nr_vectors; i++) {
181 struct intc_vect *vect = desc->vectors + i;
182
183 if (evt2irq(vect->vect) != irq)
184 continue;
185 292
186 enum_id = vect->enum_id; 293 if (!value)
187 break;
188 }
189
190 if (!enum_id || !value)
191 return -EINVAL; 294 return -EINVAL;
192 295
193 value ^= VALID(0); 296 ihp = intc_find_irq(d->sense, d->nr_sense, irq);
194 297 if (ihp) {
195 for (i = 0; i < desc->nr_sense_regs; i++) { 298 addr = INTC_REG(d, _INTC_ADDR_E(ihp->handle), 0);
196 struct intc_sense_reg *sr = desc->sense_regs + i; 299 intc_reg_fns[_INTC_FN(ihp->handle)](addr, ihp->handle, value);
197
198 for (j = 0; j < ARRAY_SIZE(sr->enum_ids); j++) {
199 if (sr->enum_ids[j] != enum_id)
200 continue;
201
202 bit = sr->reg_width - ((j + 1) * sr->field_width);
203 data = _INTC_MK(0, i, bit, value);
204
205 switch(sr->reg_width) {
206 case 16:
207 set_sense_16(desc, data);
208 break;
209 case 32:
210 set_sense_32(desc, data);
211 break;
212 }
213
214 return 0;
215 }
216 } 300 }
217 301 return 0;
218 return -EINVAL;
219} 302}
220 303
221static unsigned int __init intc_find_mask_handler(unsigned int width) 304static unsigned int __init intc_get_reg(struct intc_desc_int *d,
305 unsigned long address)
222{ 306{
223 switch (width) { 307 unsigned int k;
224 case 8:
225 return REG_FN_MASK_8;
226 case 32:
227 return REG_FN_MASK_32;
228 }
229 308
230 BUG(); 309 for (k = 0; k < d->nr_reg; k++) {
231 return REG_FN_ERROR; 310 if (d->reg[k] == address)
232} 311 return k;
233
234static unsigned int __init intc_find_prio_handler(unsigned int width)
235{
236 switch (width) {
237 case 16:
238 return REG_FN_PRIO_16;
239 case 32:
240 return REG_FN_PRIO_32;
241 } 312 }
242 313
243 BUG(); 314 BUG();
244 return REG_FN_ERROR; 315 return 0;
245} 316}
246 317
247static intc_enum __init intc_grp_id(struct intc_desc *desc, intc_enum enum_id) 318static intc_enum __init intc_grp_id(struct intc_desc *desc,
319 intc_enum enum_id)
248{ 320{
249 struct intc_group *g = desc->groups; 321 struct intc_group *g = desc->groups;
250 unsigned int i, j; 322 unsigned int i, j;
@@ -289,10 +361,12 @@ static unsigned int __init intc_prio_value(struct intc_desc *desc,
289} 361}
290 362
291static unsigned int __init intc_mask_data(struct intc_desc *desc, 363static unsigned int __init intc_mask_data(struct intc_desc *desc,
364 struct intc_desc_int *d,
292 intc_enum enum_id, int do_grps) 365 intc_enum enum_id, int do_grps)
293{ 366{
294 struct intc_mask_reg *mr = desc->mask_regs; 367 struct intc_mask_reg *mr = desc->mask_regs;
295 unsigned int i, j, fn; 368 unsigned int i, j, fn, mode;
369 unsigned long reg_e, reg_d;
296 370
297 for (i = 0; mr && enum_id && i < desc->nr_mask_regs; i++) { 371 for (i = 0; mr && enum_id && i < desc->nr_mask_regs; i++) {
298 mr = desc->mask_regs + i; 372 mr = desc->mask_regs + i;
@@ -301,25 +375,46 @@ static unsigned int __init intc_mask_data(struct intc_desc *desc,
301 if (mr->enum_ids[j] != enum_id) 375 if (mr->enum_ids[j] != enum_id)
302 continue; 376 continue;
303 377
304 fn = intc_find_mask_handler(mr->reg_width); 378 if (mr->set_reg && mr->clr_reg) {
305 if (fn == REG_FN_ERROR) 379 fn = REG_FN_WRITE_BASE;
306 return 0; 380 mode = MODE_DUAL_REG;
381 reg_e = mr->clr_reg;
382 reg_d = mr->set_reg;
383 } else {
384 fn = REG_FN_MODIFY_BASE;
385 if (mr->set_reg) {
386 mode = MODE_ENABLE_REG;
387 reg_e = mr->set_reg;
388 reg_d = mr->set_reg;
389 } else {
390 mode = MODE_MASK_REG;
391 reg_e = mr->clr_reg;
392 reg_d = mr->clr_reg;
393 }
394 }
307 395
308 return _INTC_MK(fn, i, (mr->reg_width - 1) - j, 0); 396 fn += (mr->reg_width >> 3) - 1;
397 return _INTC_MK(fn, mode,
398 intc_get_reg(d, reg_e),
399 intc_get_reg(d, reg_d),
400 1,
401 (mr->reg_width - 1) - j);
309 } 402 }
310 } 403 }
311 404
312 if (do_grps) 405 if (do_grps)
313 return intc_mask_data(desc, intc_grp_id(desc, enum_id), 0); 406 return intc_mask_data(desc, d, intc_grp_id(desc, enum_id), 0);
314 407
315 return 0; 408 return 0;
316} 409}
317 410
318static unsigned int __init intc_prio_data(struct intc_desc *desc, 411static unsigned int __init intc_prio_data(struct intc_desc *desc,
412 struct intc_desc_int *d,
319 intc_enum enum_id, int do_grps) 413 intc_enum enum_id, int do_grps)
320{ 414{
321 struct intc_prio_reg *pr = desc->prio_regs; 415 struct intc_prio_reg *pr = desc->prio_regs;
322 unsigned int i, j, fn, bit, prio; 416 unsigned int i, j, fn, mode, bit;
417 unsigned long reg_e, reg_d;
323 418
324 for (i = 0; pr && enum_id && i < desc->nr_prio_regs; i++) { 419 for (i = 0; pr && enum_id && i < desc->nr_prio_regs; i++) {
325 pr = desc->prio_regs + i; 420 pr = desc->prio_regs + i;
@@ -328,28 +423,72 @@ static unsigned int __init intc_prio_data(struct intc_desc *desc,
328 if (pr->enum_ids[j] != enum_id) 423 if (pr->enum_ids[j] != enum_id)
329 continue; 424 continue;
330 425
331 fn = intc_find_prio_handler(pr->reg_width); 426 if (pr->set_reg && pr->clr_reg) {
332 if (fn == REG_FN_ERROR) 427 fn = REG_FN_WRITE_BASE;
333 return 0; 428 mode = MODE_PCLR_REG;
429 reg_e = pr->set_reg;
430 reg_d = pr->clr_reg;
431 } else {
432 fn = REG_FN_MODIFY_BASE;
433 mode = MODE_PRIO_REG;
434 if (!pr->set_reg)
435 BUG();
436 reg_e = pr->set_reg;
437 reg_d = pr->set_reg;
438 }
334 439
335 prio = intc_prio_value(desc, enum_id, 1); 440 fn += (pr->reg_width >> 3) - 1;
336 bit = pr->reg_width - ((j + 1) * pr->field_width); 441 bit = pr->reg_width - ((j + 1) * pr->field_width);
337 442
338 BUG_ON(bit < 0); 443 BUG_ON(bit < 0);
339 444
340 return _INTC_MK(fn, i, bit, prio); 445 return _INTC_MK(fn, mode,
446 intc_get_reg(d, reg_e),
447 intc_get_reg(d, reg_d),
448 pr->field_width, bit);
341 } 449 }
342 } 450 }
343 451
344 if (do_grps) 452 if (do_grps)
345 return intc_prio_data(desc, intc_grp_id(desc, enum_id), 0); 453 return intc_prio_data(desc, d, intc_grp_id(desc, enum_id), 0);
346 454
347 return 0; 455 return 0;
348} 456}
349 457
350static void __init intc_register_irq(struct intc_desc *desc, intc_enum enum_id, 458static unsigned int __init intc_sense_data(struct intc_desc *desc,
459 struct intc_desc_int *d,
460 intc_enum enum_id)
461{
462 struct intc_sense_reg *sr = desc->sense_regs;
463 unsigned int i, j, fn, bit;
464
465 for (i = 0; sr && enum_id && i < desc->nr_sense_regs; i++) {
466 sr = desc->sense_regs + i;
467
468 for (j = 0; j < ARRAY_SIZE(sr->enum_ids); j++) {
469 if (sr->enum_ids[j] != enum_id)
470 continue;
471
472 fn = REG_FN_MODIFY_BASE;
473 fn += (sr->reg_width >> 3) - 1;
474 bit = sr->reg_width - ((j + 1) * sr->field_width);
475
476 BUG_ON(bit < 0);
477
478 return _INTC_MK(fn, 0, intc_get_reg(d, sr->reg),
479 0, sr->field_width, bit);
480 }
481 }
482
483 return 0;
484}
485
486static void __init intc_register_irq(struct intc_desc *desc,
487 struct intc_desc_int *d,
488 intc_enum enum_id,
351 unsigned int irq) 489 unsigned int irq)
352{ 490{
491 struct intc_handle_int *hp;
353 unsigned int data[2], primary; 492 unsigned int data[2], primary;
354 493
355 /* Prefer single interrupt source bitmap over other combinations: 494 /* Prefer single interrupt source bitmap over other combinations:
@@ -359,15 +498,15 @@ static void __init intc_register_irq(struct intc_desc *desc, intc_enum enum_id,
359 * 4. priority, multiple interrupt sources (groups) 498 * 4. priority, multiple interrupt sources (groups)
360 */ 499 */
361 500
362 data[0] = intc_mask_data(desc, enum_id, 0); 501 data[0] = intc_mask_data(desc, d, enum_id, 0);
363 data[1] = intc_prio_data(desc, enum_id, 0); 502 data[1] = intc_prio_data(desc, d, enum_id, 0);
364 503
365 primary = 0; 504 primary = 0;
366 if (!data[0] && data[1]) 505 if (!data[0] && data[1])
367 primary = 1; 506 primary = 1;
368 507
369 data[0] = data[0] ? data[0] : intc_mask_data(desc, enum_id, 1); 508 data[0] = data[0] ? data[0] : intc_mask_data(desc, d, enum_id, 1);
370 data[1] = data[1] ? data[1] : intc_prio_data(desc, enum_id, 1); 509 data[1] = data[1] ? data[1] : intc_prio_data(desc, d, enum_id, 1);
371 510
372 if (!data[primary]) 511 if (!data[primary])
373 primary ^= 1; 512 primary ^= 1;
@@ -375,31 +514,118 @@ static void __init intc_register_irq(struct intc_desc *desc, intc_enum enum_id,
375 BUG_ON(!data[primary]); /* must have primary masking method */ 514 BUG_ON(!data[primary]); /* must have primary masking method */
376 515
377 disable_irq_nosync(irq); 516 disable_irq_nosync(irq);
378 set_irq_chip_and_handler_name(irq, &desc->chip, 517 set_irq_chip_and_handler_name(irq, &d->chip,
379 handle_level_irq, "level"); 518 handle_level_irq, "level");
380 set_irq_chip_data(irq, (void *)data[primary]); 519 set_irq_chip_data(irq, (void *)data[primary]);
381 520
521 /* record the desired priority level */
522 intc_prio_level[irq] = intc_prio_value(desc, enum_id, 1);
523
382 /* enable secondary masking method if present */ 524 /* enable secondary masking method if present */
383 if (data[!primary]) 525 if (data[!primary])
384 intc_reg_fns[_INTC_FN(data[!primary])].enable(desc, 526 _intc_enable(irq, data[!primary]);
385 data[!primary]); 527
528 /* add irq to d->prio list if priority is available */
529 if (data[1]) {
530 hp = d->prio + d->nr_prio;
531 hp->irq = irq;
532 hp->handle = data[1];
533
534 if (primary) {
535 /*
536 * only secondary priority should access registers, so
537 * set _INTC_FN(h) = REG_FN_ERR for intc_set_priority()
538 */
539
540 hp->handle &= ~_INTC_MK(0x0f, 0, 0, 0, 0, 0);
541 hp->handle |= _INTC_MK(REG_FN_ERR, 0, 0, 0, 0, 0);
542 }
543 d->nr_prio++;
544 }
545
546 /* add irq to d->sense list if sense is available */
547 data[0] = intc_sense_data(desc, d, enum_id);
548 if (data[0]) {
549 (d->sense + d->nr_sense)->irq = irq;
550 (d->sense + d->nr_sense)->handle = data[0];
551 d->nr_sense++;
552 }
386 553
387 /* irq should be disabled by default */ 554 /* irq should be disabled by default */
388 desc->chip.mask(irq); 555 d->chip.mask(irq);
389} 556}
390 557
558static unsigned int __init save_reg(struct intc_desc_int *d,
559 unsigned int cnt,
560 unsigned long value,
561 unsigned int smp)
562{
563 if (value) {
564 d->reg[cnt] = value;
565#ifdef CONFIG_SMP
566 d->smp[cnt] = smp;
567#endif
568 return 1;
569 }
570
571 return 0;
572}
573
574
391void __init register_intc_controller(struct intc_desc *desc) 575void __init register_intc_controller(struct intc_desc *desc)
392{ 576{
393 unsigned int i; 577 unsigned int i, k, smp;
578 struct intc_desc_int *d;
579
580 d = alloc_bootmem(sizeof(*d));
581
582 d->nr_reg = desc->mask_regs ? desc->nr_mask_regs * 2 : 0;
583 d->nr_reg += desc->prio_regs ? desc->nr_prio_regs * 2 : 0;
584 d->nr_reg += desc->sense_regs ? desc->nr_sense_regs : 0;
585
586 d->reg = alloc_bootmem(d->nr_reg * sizeof(*d->reg));
587#ifdef CONFIG_SMP
588 d->smp = alloc_bootmem(d->nr_reg * sizeof(*d->smp));
589#endif
590 k = 0;
591
592 if (desc->mask_regs) {
593 for (i = 0; i < desc->nr_mask_regs; i++) {
594 smp = IS_SMP(desc->mask_regs[i]);
595 k += save_reg(d, k, desc->mask_regs[i].set_reg, smp);
596 k += save_reg(d, k, desc->mask_regs[i].clr_reg, smp);
597 }
598 }
599
600 if (desc->prio_regs) {
601 d->prio = alloc_bootmem(desc->nr_vectors * sizeof(*d->prio));
602
603 for (i = 0; i < desc->nr_prio_regs; i++) {
604 smp = IS_SMP(desc->prio_regs[i]);
605 k += save_reg(d, k, desc->prio_regs[i].set_reg, smp);
606 k += save_reg(d, k, desc->prio_regs[i].clr_reg, smp);
607 }
608 }
609
610 if (desc->sense_regs) {
611 d->sense = alloc_bootmem(desc->nr_vectors * sizeof(*d->sense));
612
613 for (i = 0; i < desc->nr_sense_regs; i++) {
614 k += save_reg(d, k, desc->sense_regs[i].reg, 0);
615 }
616 }
617
618 BUG_ON(k > 256); /* _INTC_ADDR_E() and _INTC_ADDR_D() are 8 bits */
394 619
395 desc->chip.mask = intc_disable; 620 d->chip.name = desc->name;
396 desc->chip.unmask = intc_enable; 621 d->chip.mask = intc_disable;
397 desc->chip.mask_ack = intc_disable; 622 d->chip.unmask = intc_enable;
398 desc->chip.set_type = intc_set_sense; 623 d->chip.mask_ack = intc_disable;
624 d->chip.set_type = intc_set_sense;
399 625
400 for (i = 0; i < desc->nr_vectors; i++) { 626 for (i = 0; i < desc->nr_vectors; i++) {
401 struct intc_vect *vect = desc->vectors + i; 627 struct intc_vect *vect = desc->vectors + i;
402 628
403 intc_register_irq(desc, vect->enum_id, evt2irq(vect->vect)); 629 intc_register_irq(desc, d, vect->enum_id, evt2irq(vect->vect));
404 } 630 }
405} 631}
diff --git a/arch/sh/kernel/cpu/irq/intc2.c b/arch/sh/kernel/cpu/irq/intc2.c
deleted file mode 100644
index cc5221390e09..000000000000
--- a/arch/sh/kernel/cpu/irq/intc2.c
+++ /dev/null
@@ -1,86 +0,0 @@
1/*
2 * Interrupt handling for INTC2-based IRQ.
3 *
4 * Copyright (C) 2001 David J. Mckay (david.mckay@st.com)
5 * Copyright (C) 2005, 2006 Paul Mundt (lethal@linux-sh.org)
6 *
7 * May be copied or modified under the terms of the GNU General Public
8 * License. See linux/COPYING for more information.
9 *
10 * These are the "new Hitachi style" interrupts, as present on the
11 * Hitachi 7751, the STM ST40 STB1, SH7760, and SH7780.
12 */
13#include <linux/kernel.h>
14#include <linux/interrupt.h>
15#include <linux/io.h>
16#include <asm/smp.h>
17
18static inline struct intc2_desc *get_intc2_desc(unsigned int irq)
19{
20 struct irq_chip *chip = get_irq_chip(irq);
21 return (void *)((char *)chip - offsetof(struct intc2_desc, chip));
22}
23
24static void disable_intc2_irq(unsigned int irq)
25{
26 struct intc2_data *p = get_irq_chip_data(irq);
27 struct intc2_desc *d = get_intc2_desc(irq);
28
29 ctrl_outl(1 << p->msk_shift, d->msk_base + p->msk_offset +
30 (hard_smp_processor_id() * 4));
31}
32
33static void enable_intc2_irq(unsigned int irq)
34{
35 struct intc2_data *p = get_irq_chip_data(irq);
36 struct intc2_desc *d = get_intc2_desc(irq);
37
38 ctrl_outl(1 << p->msk_shift, d->mskclr_base + p->msk_offset +
39 (hard_smp_processor_id() * 4));
40}
41
42/*
43 * Setup an INTC2 style interrupt.
44 * NOTE: Unlike IPR interrupts, parameters are not shifted by this code,
45 * allowing the use of the numbers straight out of the datasheet.
46 * For example:
47 * PIO1 which is INTPRI00[19,16] and INTMSK00[13]
48 * would be: ^ ^ ^ ^
49 * | | | |
50 * { 84, 0, 16, 0, 13 },
51 *
52 * in the intc2_data table.
53 */
54void register_intc2_controller(struct intc2_desc *desc)
55{
56 int i;
57
58 desc->chip.mask = disable_intc2_irq;
59 desc->chip.unmask = enable_intc2_irq;
60 desc->chip.mask_ack = disable_intc2_irq;
61
62 for (i = 0; i < desc->nr_irqs; i++) {
63 unsigned long ipr, flags;
64 struct intc2_data *p = desc->intc2_data + i;
65
66 disable_irq_nosync(p->irq);
67
68 if (desc->prio_base) {
69 /* Set the priority level */
70 local_irq_save(flags);
71
72 ipr = ctrl_inl(desc->prio_base + p->ipr_offset);
73 ipr &= ~(0xf << p->ipr_shift);
74 ipr |= p->priority << p->ipr_shift;
75 ctrl_outl(ipr, desc->prio_base + p->ipr_offset);
76
77 local_irq_restore(flags);
78 }
79
80 set_irq_chip_and_handler_name(p->irq, &desc->chip,
81 handle_level_irq, "level");
82 set_irq_chip_data(p->irq, p);
83
84 disable_intc2_irq(p->irq);
85 }
86}
diff --git a/arch/sh/kernel/cpu/sh2/probe.c b/arch/sh/kernel/cpu/sh2/probe.c
index abbf17427e52..5916d9096b99 100644
--- a/arch/sh/kernel/cpu/sh2/probe.c
+++ b/arch/sh/kernel/cpu/sh2/probe.c
@@ -10,26 +10,25 @@
10 * for more details. 10 * for more details.
11 */ 11 */
12#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/smp.h>
14#include <asm/processor.h> 13#include <asm/processor.h>
15#include <asm/cache.h> 14#include <asm/cache.h>
16 15
17int __init detect_cpu_and_cache_system(void) 16int __init detect_cpu_and_cache_system(void)
18{ 17{
19#if defined(CONFIG_CPU_SUBTYPE_SH7619) 18#if defined(CONFIG_CPU_SUBTYPE_SH7619)
20 current_cpu_data.type = CPU_SH7619; 19 boot_cpu_data.type = CPU_SH7619;
21 current_cpu_data.dcache.ways = 4; 20 boot_cpu_data.dcache.ways = 4;
22 current_cpu_data.dcache.way_incr = (1<<12); 21 boot_cpu_data.dcache.way_incr = (1<<12);
23 current_cpu_data.dcache.sets = 256; 22 boot_cpu_data.dcache.sets = 256;
24 current_cpu_data.dcache.entry_shift = 4; 23 boot_cpu_data.dcache.entry_shift = 4;
25 current_cpu_data.dcache.linesz = L1_CACHE_BYTES; 24 boot_cpu_data.dcache.linesz = L1_CACHE_BYTES;
26 current_cpu_data.dcache.flags = 0; 25 boot_cpu_data.dcache.flags = 0;
27#endif 26#endif
28 /* 27 /*
29 * SH-2 doesn't have separate caches 28 * SH-2 doesn't have separate caches
30 */ 29 */
31 current_cpu_data.dcache.flags |= SH_CACHE_COMBINED; 30 boot_cpu_data.dcache.flags |= SH_CACHE_COMBINED;
32 current_cpu_data.icache = current_cpu_data.dcache; 31 boot_cpu_data.icache = boot_cpu_data.dcache;
33 32
34 return 0; 33 return 0;
35} 34}
diff --git a/arch/sh/kernel/cpu/sh2/setup-sh7619.c b/arch/sh/kernel/cpu/sh2/setup-sh7619.c
index a979b981e6a3..ec6adc3f306f 100644
--- a/arch/sh/kernel/cpu/sh2/setup-sh7619.c
+++ b/arch/sh/kernel/cpu/sh2/setup-sh7619.c
@@ -12,6 +12,61 @@
12#include <linux/serial.h> 12#include <linux/serial.h>
13#include <asm/sci.h> 13#include <asm/sci.h>
14 14
15enum {
16 UNUSED = 0,
17
18 /* interrupt sources */
19 IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
20 WDT, EDMAC, CMT0, CMT1,
21 SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI,
22 SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI,
23 SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI,
24 HIF_HIFI, HIF_HIFBI,
25 DMAC0, DMAC1, DMAC2, DMAC3,
26 SIOF,
27
28 /* interrupt groups */
29 SCIF0, SCIF1, SCIF2,
30};
31
32static struct intc_vect vectors[] __initdata = {
33 INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65),
34 INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67),
35 INTC_IRQ(IRQ4, 80), INTC_IRQ(IRQ5, 81),
36 INTC_IRQ(IRQ6, 82), INTC_IRQ(IRQ7, 83),
37 INTC_IRQ(WDT, 84), INTC_IRQ(EDMAC, 85),
38 INTC_IRQ(CMT0, 86), INTC_IRQ(CMT1, 87),
39 INTC_IRQ(SCIF0_ERI, 88), INTC_IRQ(SCIF0_RXI, 89),
40 INTC_IRQ(SCIF0_BRI, 90), INTC_IRQ(SCIF0_TXI, 91),
41 INTC_IRQ(SCIF1_ERI, 92), INTC_IRQ(SCIF1_RXI, 93),
42 INTC_IRQ(SCIF1_BRI, 94), INTC_IRQ(SCIF1_TXI, 95),
43 INTC_IRQ(SCIF2_ERI, 96), INTC_IRQ(SCIF2_RXI, 97),
44 INTC_IRQ(SCIF2_BRI, 98), INTC_IRQ(SCIF2_TXI, 99),
45 INTC_IRQ(HIF_HIFI, 100), INTC_IRQ(HIF_HIFBI, 101),
46 INTC_IRQ(DMAC0, 104), INTC_IRQ(DMAC1, 105),
47 INTC_IRQ(DMAC2, 106), INTC_IRQ(DMAC3, 107),
48 INTC_IRQ(SIOF, 108),
49};
50
51static struct intc_group groups[] __initdata = {
52 INTC_GROUP(SCIF0, SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI),
53 INTC_GROUP(SCIF1, SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI),
54 INTC_GROUP(SCIF2, SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI),
55};
56
57static struct intc_prio_reg prio_registers[] __initdata = {
58 { 0xf8140006, 0, 16, 4, /* IPRA */ { IRQ0, IRQ1, IRQ2, IRQ3 } },
59 { 0xf8140008, 0, 16, 4, /* IPRB */ { IRQ4, IRQ5, IRQ6, IRQ7 } },
60 { 0xf8080000, 0, 16, 4, /* IPRC */ { WDT, EDMAC, CMT0, CMT1 } },
61 { 0xf8080002, 0, 16, 4, /* IPRD */ { SCIF0, SCIF1, SCIF2 } },
62 { 0xf8080004, 0, 16, 4, /* IPRE */ { HIF_HIFI, HIF_HIFBI } },
63 { 0xf8080006, 0, 16, 4, /* IPRF */ { DMAC0, DMAC1, DMAC2, DMAC3 } },
64 { 0xf8080008, 0, 16, 4, /* IPRG */ { SIOF } },
65};
66
67static DECLARE_INTC_DESC(intc_desc, "sh7619", vectors, groups,
68 NULL, NULL, prio_registers, NULL);
69
15static struct plat_sci_port sci_platform_data[] = { 70static struct plat_sci_port sci_platform_data[] = {
16 { 71 {
17 .mapbase = 0xf8400000, 72 .mapbase = 0xf8400000,
@@ -52,43 +107,7 @@ static int __init sh7619_devices_setup(void)
52} 107}
53__initcall(sh7619_devices_setup); 108__initcall(sh7619_devices_setup);
54 109
55static struct ipr_data ipr_irq_table[] = {
56 { 86, 0, 4, 2 }, /* CMI0 */
57 { 88, 1, 12, 3 }, /* SCIF0_ERI */
58 { 89, 1, 12, 3 }, /* SCIF0_RXI */
59 { 90, 1, 12, 3 }, /* SCIF0_BRI */
60 { 91, 1, 12, 3 }, /* SCIF0_TXI */
61 { 92, 1, 8, 3 }, /* SCIF1_ERI */
62 { 93, 1, 8, 3 }, /* SCIF1_RXI */
63 { 94, 1, 8, 3 }, /* SCIF1_BRI */
64 { 95, 1, 8, 3 }, /* SCIF1_TXI */
65 { 96, 1, 4, 3 }, /* SCIF2_ERI */
66 { 97, 1, 4, 3 }, /* SCIF2_RXI */
67 { 98, 1, 4, 3 }, /* SCIF2_BRI */
68 { 99, 1, 4, 3 }, /* SCIF2_TXI */
69};
70
71static unsigned long ipr_offsets[] = {
72 0xf8080000, /* IPRC */
73 0xf8080002, /* IPRD */
74 0xf8080004, /* IPRE */
75 0xf8080006, /* IPRF */
76 0xf8080008, /* IPRG */
77};
78
79static struct ipr_desc ipr_irq_desc = {
80 .ipr_offsets = ipr_offsets,
81 .nr_offsets = ARRAY_SIZE(ipr_offsets),
82
83 .ipr_data = ipr_irq_table,
84 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
85
86 .chip = {
87 .name = "IPR-sh7619",
88 },
89};
90
91void __init plat_irq_setup(void) 110void __init plat_irq_setup(void)
92{ 111{
93 register_ipr_controller(&ipr_irq_desc); 112 register_intc_controller(&intc_desc);
94} 113}
diff --git a/arch/sh/kernel/cpu/sh2a/probe.c b/arch/sh/kernel/cpu/sh2a/probe.c
index f455c3509789..6d02465704b9 100644
--- a/arch/sh/kernel/cpu/sh2a/probe.c
+++ b/arch/sh/kernel/cpu/sh2a/probe.c
@@ -17,15 +17,15 @@
17int __init detect_cpu_and_cache_system(void) 17int __init detect_cpu_and_cache_system(void)
18{ 18{
19 /* Just SH7206 for now .. */ 19 /* Just SH7206 for now .. */
20 current_cpu_data.type = CPU_SH7206; 20 boot_cpu_data.type = CPU_SH7206;
21 current_cpu_data.flags |= CPU_HAS_OP32; 21 boot_cpu_data.flags |= CPU_HAS_OP32;
22 22
23 current_cpu_data.dcache.ways = 4; 23 boot_cpu_data.dcache.ways = 4;
24 current_cpu_data.dcache.way_incr = (1 << 11); 24 boot_cpu_data.dcache.way_incr = (1 << 11);
25 current_cpu_data.dcache.sets = 128; 25 boot_cpu_data.dcache.sets = 128;
26 current_cpu_data.dcache.entry_shift = 4; 26 boot_cpu_data.dcache.entry_shift = 4;
27 current_cpu_data.dcache.linesz = L1_CACHE_BYTES; 27 boot_cpu_data.dcache.linesz = L1_CACHE_BYTES;
28 current_cpu_data.dcache.flags = 0; 28 boot_cpu_data.dcache.flags = 0;
29 29
30 /* 30 /*
31 * The icache is the same as the dcache as far as this setup is 31 * The icache is the same as the dcache as far as this setup is
@@ -33,7 +33,7 @@ int __init detect_cpu_and_cache_system(void)
33 * lacks the U bit that the dcache has, none of this has any bearing 33 * lacks the U bit that the dcache has, none of this has any bearing
34 * on the cache info. 34 * on the cache info.
35 */ 35 */
36 current_cpu_data.icache = current_cpu_data.dcache; 36 boot_cpu_data.icache = boot_cpu_data.dcache;
37 37
38 return 0; 38 return 0;
39} 39}
diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7206.c b/arch/sh/kernel/cpu/sh2a/setup-sh7206.c
index deab16500167..bd745aa87222 100644
--- a/arch/sh/kernel/cpu/sh2a/setup-sh7206.c
+++ b/arch/sh/kernel/cpu/sh2a/setup-sh7206.c
@@ -12,27 +12,184 @@
12#include <linux/serial.h> 12#include <linux/serial.h>
13#include <asm/sci.h> 13#include <asm/sci.h>
14 14
15enum {
16 UNUSED = 0,
17
18 /* interrupt sources */
19 IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
20 PINT0, PINT1, PINT2, PINT3, PINT4, PINT5, PINT6, PINT7,
21 ADC_ADI0, ADC_ADI1,
22 DMAC0_DEI, DMAC0_HEI, DMAC1_DEI, DMAC1_HEI,
23 DMAC2_DEI, DMAC2_HEI, DMAC3_DEI, DMAC3_HEI,
24 DMAC4_DEI, DMAC4_HEI, DMAC5_DEI, DMAC5_HEI,
25 DMAC6_DEI, DMAC6_HEI, DMAC7_DEI, DMAC7_HEI,
26 CMT0, CMT1, BSC, WDT,
27 MTU2_TGI0A, MTU2_TGI0B, MTU2_TGI0C, MTU2_TGI0D,
28 MTU2_TCI0V, MTU2_TGI0E, MTU2_TGI0F,
29 MTU2_TGI1A, MTU2_TGI1B, MTU2_TCI1V, MTU2_TCI1U,
30 MTU2_TGI2A, MTU2_TGI2B, MTU2_TCI2V, MTU2_TCI2U,
31 MTU2_TGI3A, MTU2_TGI3B, MTU2_TGI3C, MTU2_TGI3D, MTU2_TCI3V,
32 MTU2_TGI4A, MTU2_TGI4B, MTU2_TGI4C, MTU2_TGI4D, MTU2_TCI4V,
33 MTU2_TGI5U, MTU2_TGI5V, MTU2_TGI5W,
34 POE2_OEI1, POE2_OEI2,
35 MTU2S_TGI3A, MTU2S_TGI3B, MTU2S_TGI3C, MTU2S_TGI3D, MTU2S_TCI3V,
36 MTU2S_TGI4A, MTU2S_TGI4B, MTU2S_TGI4C, MTU2S_TGI4D, MTU2S_TCI4V,
37 MTU2S_TGI5U, MTU2S_TGI5V, MTU2S_TGI5W,
38 POE2_OEI3,
39 IIC3_STPI, IIC3_NAKI, IIC3_RXI, IIC3_TXI, IIC3_TEI,
40 SCIF0_BRI, SCIF0_ERI, SCIF0_RXI, SCIF0_TXI,
41 SCIF1_BRI, SCIF1_ERI, SCIF1_RXI, SCIF1_TXI,
42 SCIF2_BRI, SCIF2_ERI, SCIF2_RXI, SCIF2_TXI,
43 SCIF3_BRI, SCIF3_ERI, SCIF3_RXI, SCIF3_TXI,
44
45 /* interrupt groups */
46 PINT, DMAC0, DMAC1, DMAC2, DMAC3, DMAC4, DMAC5, DMAC6, DMAC7,
47 MTU0_ABCD, MTU0_VEF, MTU1_AB, MTU1_VU, MTU2_AB, MTU2_VU,
48 MTU3_ABCD, MTU4_ABCD, MTU5, POE2_12, MTU3S_ABCD, MTU4S_ABCD, MTU5S,
49 IIC3, SCIF0, SCIF1, SCIF2, SCIF3,
50};
51
52static struct intc_vect vectors[] __initdata = {
53 INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65),
54 INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67),
55 INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69),
56 INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71),
57 INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81),
58 INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83),
59 INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85),
60 INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87),
61 INTC_IRQ(ADC_ADI0, 92), INTC_IRQ(ADC_ADI1, 96),
62 INTC_IRQ(DMAC0_DEI, 108), INTC_IRQ(DMAC0_HEI, 109),
63 INTC_IRQ(DMAC1_DEI, 112), INTC_IRQ(DMAC1_HEI, 113),
64 INTC_IRQ(DMAC2_DEI, 116), INTC_IRQ(DMAC2_HEI, 117),
65 INTC_IRQ(DMAC3_DEI, 120), INTC_IRQ(DMAC3_HEI, 121),
66 INTC_IRQ(DMAC4_DEI, 124), INTC_IRQ(DMAC4_HEI, 125),
67 INTC_IRQ(DMAC5_DEI, 128), INTC_IRQ(DMAC5_HEI, 129),
68 INTC_IRQ(DMAC6_DEI, 132), INTC_IRQ(DMAC6_HEI, 133),
69 INTC_IRQ(DMAC7_DEI, 136), INTC_IRQ(DMAC7_HEI, 137),
70 INTC_IRQ(CMT0, 140), INTC_IRQ(CMT1, 144),
71 INTC_IRQ(BSC, 148), INTC_IRQ(WDT, 152),
72 INTC_IRQ(MTU2_TGI0A, 156), INTC_IRQ(MTU2_TGI0B, 157),
73 INTC_IRQ(MTU2_TGI0C, 158), INTC_IRQ(MTU2_TGI0D, 159),
74 INTC_IRQ(MTU2_TCI0V, 160),
75 INTC_IRQ(MTU2_TGI0E, 161), INTC_IRQ(MTU2_TGI0F, 162),
76 INTC_IRQ(MTU2_TGI1A, 164), INTC_IRQ(MTU2_TGI1B, 165),
77 INTC_IRQ(MTU2_TCI1V, 168), INTC_IRQ(MTU2_TCI1U, 169),
78 INTC_IRQ(MTU2_TGI2A, 172), INTC_IRQ(MTU2_TGI2B, 173),
79 INTC_IRQ(MTU2_TCI2V, 176), INTC_IRQ(MTU2_TCI2U, 177),
80 INTC_IRQ(MTU2_TGI3A, 180), INTC_IRQ(MTU2_TGI3B, 181),
81 INTC_IRQ(MTU2_TGI3C, 182), INTC_IRQ(MTU2_TGI3D, 183),
82 INTC_IRQ(MTU2_TCI3V, 184),
83 INTC_IRQ(MTU2_TGI4A, 188), INTC_IRQ(MTU2_TGI4B, 189),
84 INTC_IRQ(MTU2_TGI4C, 190), INTC_IRQ(MTU2_TGI4D, 191),
85 INTC_IRQ(MTU2_TCI4V, 192),
86 INTC_IRQ(MTU2_TGI5U, 196), INTC_IRQ(MTU2_TGI5V, 197),
87 INTC_IRQ(MTU2_TGI5W, 198),
88 INTC_IRQ(POE2_OEI1, 200), INTC_IRQ(POE2_OEI2, 201),
89 INTC_IRQ(MTU2S_TGI3A, 204), INTC_IRQ(MTU2S_TGI3B, 205),
90 INTC_IRQ(MTU2S_TGI3C, 206), INTC_IRQ(MTU2S_TGI3D, 207),
91 INTC_IRQ(MTU2S_TCI3V, 208),
92 INTC_IRQ(MTU2S_TGI4A, 212), INTC_IRQ(MTU2S_TGI4B, 213),
93 INTC_IRQ(MTU2S_TGI4C, 214), INTC_IRQ(MTU2S_TGI4D, 215),
94 INTC_IRQ(MTU2S_TCI4V, 216),
95 INTC_IRQ(MTU2S_TGI5U, 220), INTC_IRQ(MTU2S_TGI5V, 221),
96 INTC_IRQ(MTU2S_TGI5W, 222),
97 INTC_IRQ(POE2_OEI3, 224),
98 INTC_IRQ(IIC3_STPI, 228), INTC_IRQ(IIC3_NAKI, 229),
99 INTC_IRQ(IIC3_RXI, 230), INTC_IRQ(IIC3_TXI, 231),
100 INTC_IRQ(IIC3_TEI, 232),
101 INTC_IRQ(SCIF0_BRI, 240), INTC_IRQ(SCIF0_ERI, 241),
102 INTC_IRQ(SCIF0_RXI, 242), INTC_IRQ(SCIF0_TXI, 243),
103 INTC_IRQ(SCIF1_BRI, 244), INTC_IRQ(SCIF1_ERI, 245),
104 INTC_IRQ(SCIF1_RXI, 246), INTC_IRQ(SCIF1_TXI, 247),
105 INTC_IRQ(SCIF2_BRI, 248), INTC_IRQ(SCIF2_ERI, 249),
106 INTC_IRQ(SCIF2_RXI, 250), INTC_IRQ(SCIF2_TXI, 251),
107 INTC_IRQ(SCIF3_BRI, 252), INTC_IRQ(SCIF3_ERI, 253),
108 INTC_IRQ(SCIF3_RXI, 254), INTC_IRQ(SCIF3_TXI, 255),
109};
110
111static struct intc_group groups[] __initdata = {
112 INTC_GROUP(PINT, PINT0, PINT1, PINT2, PINT3,
113 PINT4, PINT5, PINT6, PINT7),
114 INTC_GROUP(DMAC0, DMAC0_DEI, DMAC0_HEI),
115 INTC_GROUP(DMAC1, DMAC1_DEI, DMAC1_HEI),
116 INTC_GROUP(DMAC2, DMAC2_DEI, DMAC2_HEI),
117 INTC_GROUP(DMAC3, DMAC3_DEI, DMAC3_HEI),
118 INTC_GROUP(DMAC4, DMAC4_DEI, DMAC4_HEI),
119 INTC_GROUP(DMAC5, DMAC5_DEI, DMAC5_HEI),
120 INTC_GROUP(DMAC6, DMAC6_DEI, DMAC6_HEI),
121 INTC_GROUP(DMAC7, DMAC7_DEI, DMAC7_HEI),
122 INTC_GROUP(MTU0_ABCD, MTU2_TGI0A, MTU2_TGI0B, MTU2_TGI0C, MTU2_TGI0D),
123 INTC_GROUP(MTU0_VEF, MTU2_TCI0V, MTU2_TGI0E, MTU2_TGI0F),
124 INTC_GROUP(MTU1_AB, MTU2_TGI1A, MTU2_TGI1B),
125 INTC_GROUP(MTU1_VU, MTU2_TCI1V, MTU2_TCI1U),
126 INTC_GROUP(MTU2_AB, MTU2_TGI2A, MTU2_TGI2B),
127 INTC_GROUP(MTU2_VU, MTU2_TCI2V, MTU2_TCI2U),
128 INTC_GROUP(MTU3_ABCD, MTU2_TGI3A, MTU2_TGI3B, MTU2_TGI3C, MTU2_TGI3D),
129 INTC_GROUP(MTU4_ABCD, MTU2_TGI4A, MTU2_TGI4B, MTU2_TGI4C, MTU2_TGI4D),
130 INTC_GROUP(MTU5, MTU2_TGI5U, MTU2_TGI5V, MTU2_TGI5W),
131 INTC_GROUP(POE2_12, POE2_OEI1, POE2_OEI2),
132 INTC_GROUP(MTU3S_ABCD, MTU2S_TGI3A, MTU2S_TGI3B,
133 MTU2S_TGI3C, MTU2S_TGI3D),
134 INTC_GROUP(MTU4S_ABCD, MTU2S_TGI4A, MTU2S_TGI4B,
135 MTU2S_TGI4C, MTU2S_TGI4D),
136 INTC_GROUP(MTU5S, MTU2S_TGI5U, MTU2S_TGI5V, MTU2S_TGI5W),
137 INTC_GROUP(IIC3, IIC3_STPI, IIC3_NAKI, IIC3_RXI, IIC3_TXI, IIC3_TEI),
138 INTC_GROUP(SCIF0, SCIF0_BRI, SCIF0_ERI, SCIF0_RXI, SCIF0_TXI),
139 INTC_GROUP(SCIF1, SCIF1_BRI, SCIF1_ERI, SCIF1_RXI, SCIF1_TXI),
140 INTC_GROUP(SCIF2, SCIF2_BRI, SCIF2_ERI, SCIF2_RXI, SCIF2_TXI),
141 INTC_GROUP(SCIF3, SCIF3_BRI, SCIF3_ERI, SCIF3_RXI, SCIF3_TXI),
142};
143
144static struct intc_prio_reg prio_registers[] __initdata = {
145 { 0xfffe0818, 0, 16, 4, /* IPR01 */ { IRQ0, IRQ1, IRQ2, IRQ3 } },
146 { 0xfffe081a, 0, 16, 4, /* IPR02 */ { IRQ4, IRQ5, IRQ6, IRQ7 } },
147 { 0xfffe0820, 0, 16, 4, /* IPR05 */ { PINT, 0, ADC_ADI0, ADC_ADI1 } },
148 { 0xfffe0c00, 0, 16, 4, /* IPR06 */ { DMAC0, DMAC1, DMAC2, DMAC3 } },
149 { 0xfffe0c02, 0, 16, 4, /* IPR07 */ { DMAC4, DMAC5, DMAC6, DMAC7 } },
150 { 0xfffe0c04, 0, 16, 4, /* IPR08 */ { CMT0, CMT1, BSC, WDT } },
151 { 0xfffe0c06, 0, 16, 4, /* IPR09 */ { MTU0_ABCD, MTU0_VEF,
152 MTU1_AB, MTU1_VU } },
153 { 0xfffe0c08, 0, 16, 4, /* IPR10 */ { MTU2_AB, MTU2_VU,
154 MTU3_ABCD, MTU2_TCI3V } },
155 { 0xfffe0c0a, 0, 16, 4, /* IPR11 */ { MTU4_ABCD, MTU2_TCI4V,
156 MTU5, POE2_12 } },
157 { 0xfffe0c0c, 0, 16, 4, /* IPR12 */ { MTU3S_ABCD, MTU2S_TCI3V,
158 MTU4S_ABCD, MTU2S_TCI4V } },
159 { 0xfffe0c0e, 0, 16, 4, /* IPR13 */ { MTU5S, POE2_OEI3, IIC3, 0 } },
160 { 0xfffe0c10, 0, 16, 4, /* IPR14 */ { SCIF0, SCIF1, SCIF2, SCIF3 } },
161};
162
163static struct intc_mask_reg mask_registers[] __initdata = {
164 { 0xfffe0808, 0, 16, /* PINTER */
165 { 0, 0, 0, 0, 0, 0, 0, 0,
166 PINT7, PINT6, PINT5, PINT4, PINT3, PINT2, PINT1, PINT0 } },
167};
168
169static DECLARE_INTC_DESC(intc_desc, "sh7206", vectors, groups,
170 NULL, mask_registers, prio_registers, NULL);
171
15static struct plat_sci_port sci_platform_data[] = { 172static struct plat_sci_port sci_platform_data[] = {
16 { 173 {
17 .mapbase = 0xfffe8000, 174 .mapbase = 0xfffe8000,
18 .flags = UPF_BOOT_AUTOCONF, 175 .flags = UPF_BOOT_AUTOCONF,
19 .type = PORT_SCIF, 176 .type = PORT_SCIF,
20 .irqs = { 241, 242, 243, 240}, 177 .irqs = { 241, 242, 243, 240 },
21 }, { 178 }, {
22 .mapbase = 0xfffe8800, 179 .mapbase = 0xfffe8800,
23 .flags = UPF_BOOT_AUTOCONF, 180 .flags = UPF_BOOT_AUTOCONF,
24 .type = PORT_SCIF, 181 .type = PORT_SCIF,
25 .irqs = { 247, 244, 245, 246}, 182 .irqs = { 245, 246, 247, 244 },
26 }, { 183 }, {
27 .mapbase = 0xfffe9000, 184 .mapbase = 0xfffe9000,
28 .flags = UPF_BOOT_AUTOCONF, 185 .flags = UPF_BOOT_AUTOCONF,
29 .type = PORT_SCIF, 186 .type = PORT_SCIF,
30 .irqs = { 249, 250, 251, 248}, 187 .irqs = { 249, 250, 251, 248 },
31 }, { 188 }, {
32 .mapbase = 0xfffe9800, 189 .mapbase = 0xfffe9800,
33 .flags = UPF_BOOT_AUTOCONF, 190 .flags = UPF_BOOT_AUTOCONF,
34 .type = PORT_SCIF, 191 .type = PORT_SCIF,
35 .irqs = { 253, 254, 255, 252}, 192 .irqs = { 253, 254, 255, 252 },
36 }, { 193 }, {
37 .flags = 0, 194 .flags = 0,
38 } 195 }
@@ -57,57 +214,7 @@ static int __init sh7206_devices_setup(void)
57} 214}
58__initcall(sh7206_devices_setup); 215__initcall(sh7206_devices_setup);
59 216
60static struct ipr_data ipr_irq_table[] = {
61 { 140, 7, 12, 2 }, /* CMI0 */
62 { 164, 8, 4, 2 }, /* MTU2_TGI1A */
63 { 240, 13, 12, 3 }, /* SCIF0_BRI */
64 { 241, 13, 12, 3 }, /* SCIF0_ERI */
65 { 242, 13, 12, 3 }, /* SCIF0_RXI */
66 { 243, 13, 12, 3 }, /* SCIF0_TXI */
67 { 244, 13, 8, 3 }, /* SCIF1_BRI */
68 { 245, 13, 8, 3 }, /* SCIF1_ERI */
69 { 246, 13, 8, 3 }, /* SCIF1_RXI */
70 { 247, 13, 8, 3 }, /* SCIF1_TXI */
71 { 248, 13, 4, 3 }, /* SCIF2_BRI */
72 { 249, 13, 4, 3 }, /* SCIF2_ERI */
73 { 250, 13, 4, 3 }, /* SCIF2_RXI */
74 { 251, 13, 4, 3 }, /* SCIF2_TXI */
75 { 252, 13, 0, 3 }, /* SCIF3_BRI */
76 { 253, 13, 0, 3 }, /* SCIF3_ERI */
77 { 254, 13, 0, 3 }, /* SCIF3_RXI */
78 { 255, 13, 0, 3 }, /* SCIF3_TXI */
79};
80
81static unsigned long ipr_offsets[] = {
82 0xfffe0818, /* IPR01 */
83 0xfffe081a, /* IPR02 */
84 0, /* unused */
85 0, /* unused */
86 0xfffe0820, /* IPR05 */
87 0xfffe0c00, /* IPR06 */
88 0xfffe0c02, /* IPR07 */
89 0xfffe0c04, /* IPR08 */
90 0xfffe0c06, /* IPR09 */
91 0xfffe0c08, /* IPR10 */
92 0xfffe0c0a, /* IPR11 */
93 0xfffe0c0c, /* IPR12 */
94 0xfffe0c0e, /* IPR13 */
95 0xfffe0c10, /* IPR14 */
96};
97
98static struct ipr_desc ipr_irq_desc = {
99 .ipr_offsets = ipr_offsets,
100 .nr_offsets = ARRAY_SIZE(ipr_offsets),
101
102 .ipr_data = ipr_irq_table,
103 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
104
105 .chip = {
106 .name = "IPR-sh7206",
107 },
108};
109
110void __init plat_irq_setup(void) 217void __init plat_irq_setup(void)
111{ 218{
112 register_ipr_controller(&ipr_irq_desc); 219 register_intc_controller(&intc_desc);
113} 220}
diff --git a/arch/sh/kernel/cpu/sh3/Makefile b/arch/sh/kernel/cpu/sh3/Makefile
index 55b750763f66..646eb6933614 100644
--- a/arch/sh/kernel/cpu/sh3/Makefile
+++ b/arch/sh/kernel/cpu/sh3/Makefile
@@ -6,12 +6,13 @@ obj-y := ex.o probe.o entry.o
6 6
7# CPU subtype setup 7# CPU subtype setup
8obj-$(CONFIG_CPU_SUBTYPE_SH7705) += setup-sh7705.o 8obj-$(CONFIG_CPU_SUBTYPE_SH7705) += setup-sh7705.o
9obj-$(CONFIG_CPU_SUBTYPE_SH7706) += setup-sh7709.o 9obj-$(CONFIG_CPU_SUBTYPE_SH7706) += setup-sh770x.o
10obj-$(CONFIG_CPU_SUBTYPE_SH7707) += setup-sh7709.o 10obj-$(CONFIG_CPU_SUBTYPE_SH7707) += setup-sh770x.o
11obj-$(CONFIG_CPU_SUBTYPE_SH7708) += setup-sh7708.o 11obj-$(CONFIG_CPU_SUBTYPE_SH7708) += setup-sh770x.o
12obj-$(CONFIG_CPU_SUBTYPE_SH7709) += setup-sh7709.o 12obj-$(CONFIG_CPU_SUBTYPE_SH7709) += setup-sh770x.o
13obj-$(CONFIG_CPU_SUBTYPE_SH7710) += setup-sh7710.o 13obj-$(CONFIG_CPU_SUBTYPE_SH7710) += setup-sh7710.o
14obj-$(CONFIG_CPU_SUBTYPE_SH7712) += setup-sh7710.o 14obj-$(CONFIG_CPU_SUBTYPE_SH7712) += setup-sh7710.o
15obj-$(CONFIG_CPU_SUBTYPE_SH7720) += setup-sh7720.o
15 16
16# Primary on-chip clocks (common) 17# Primary on-chip clocks (common)
17clock-$(CONFIG_CPU_SH3) := clock-sh3.o 18clock-$(CONFIG_CPU_SH3) := clock-sh3.o
@@ -19,5 +20,6 @@ clock-$(CONFIG_CPU_SUBTYPE_SH7705) := clock-sh7705.o
19clock-$(CONFIG_CPU_SUBTYPE_SH7706) := clock-sh7706.o 20clock-$(CONFIG_CPU_SUBTYPE_SH7706) := clock-sh7706.o
20clock-$(CONFIG_CPU_SUBTYPE_SH7709) := clock-sh7709.o 21clock-$(CONFIG_CPU_SUBTYPE_SH7709) := clock-sh7709.o
21clock-$(CONFIG_CPU_SUBTYPE_SH7710) := clock-sh7710.o 22clock-$(CONFIG_CPU_SUBTYPE_SH7710) := clock-sh7710.o
23clock-$(CONFIG_CPU_SUBTYPE_SH7720) := clock-sh7710.o
22 24
23obj-y += $(clock-y) 25obj-y += $(clock-y)
diff --git a/arch/sh/kernel/cpu/sh3/probe.c b/arch/sh/kernel/cpu/sh3/probe.c
index 647623b22edc..bf579e061e09 100644
--- a/arch/sh/kernel/cpu/sh3/probe.c
+++ b/arch/sh/kernel/cpu/sh3/probe.c
@@ -50,44 +50,47 @@ int __init detect_cpu_and_cache_system(void)
50 50
51 back_to_P1(); 51 back_to_P1();
52 52
53 current_cpu_data.dcache.ways = 4; 53 boot_cpu_data.dcache.ways = 4;
54 current_cpu_data.dcache.entry_shift = 4; 54 boot_cpu_data.dcache.entry_shift = 4;
55 current_cpu_data.dcache.linesz = L1_CACHE_BYTES; 55 boot_cpu_data.dcache.linesz = L1_CACHE_BYTES;
56 current_cpu_data.dcache.flags = 0; 56 boot_cpu_data.dcache.flags = 0;
57 57
58 /* 58 /*
59 * 7709A/7729 has 16K cache (256-entry), while 7702 has only 59 * 7709A/7729 has 16K cache (256-entry), while 7702 has only
60 * 2K(direct) 7702 is not supported (yet) 60 * 2K(direct) 7702 is not supported (yet)
61 */ 61 */
62 if (data0 == data1 && data2 == data3) { /* Shadow */ 62 if (data0 == data1 && data2 == data3) { /* Shadow */
63 current_cpu_data.dcache.way_incr = (1 << 11); 63 boot_cpu_data.dcache.way_incr = (1 << 11);
64 current_cpu_data.dcache.entry_mask = 0x7f0; 64 boot_cpu_data.dcache.entry_mask = 0x7f0;
65 current_cpu_data.dcache.sets = 128; 65 boot_cpu_data.dcache.sets = 128;
66 current_cpu_data.type = CPU_SH7708; 66 boot_cpu_data.type = CPU_SH7708;
67 67
68 current_cpu_data.flags |= CPU_HAS_MMU_PAGE_ASSOC; 68 boot_cpu_data.flags |= CPU_HAS_MMU_PAGE_ASSOC;
69 } else { /* 7709A or 7729 */ 69 } else { /* 7709A or 7729 */
70 current_cpu_data.dcache.way_incr = (1 << 12); 70 boot_cpu_data.dcache.way_incr = (1 << 12);
71 current_cpu_data.dcache.entry_mask = 0xff0; 71 boot_cpu_data.dcache.entry_mask = 0xff0;
72 current_cpu_data.dcache.sets = 256; 72 boot_cpu_data.dcache.sets = 256;
73 current_cpu_data.type = CPU_SH7729; 73 boot_cpu_data.type = CPU_SH7729;
74 74
75#if defined(CONFIG_CPU_SUBTYPE_SH7706) 75#if defined(CONFIG_CPU_SUBTYPE_SH7706)
76 current_cpu_data.type = CPU_SH7706; 76 boot_cpu_data.type = CPU_SH7706;
77#endif 77#endif
78#if defined(CONFIG_CPU_SUBTYPE_SH7710) 78#if defined(CONFIG_CPU_SUBTYPE_SH7710)
79 current_cpu_data.type = CPU_SH7710; 79 boot_cpu_data.type = CPU_SH7710;
80#endif 80#endif
81#if defined(CONFIG_CPU_SUBTYPE_SH7712) 81#if defined(CONFIG_CPU_SUBTYPE_SH7712)
82 current_cpu_data.type = CPU_SH7712; 82 boot_cpu_data.type = CPU_SH7712;
83#endif
84#if defined(CONFIG_CPU_SUBTYPE_SH7720)
85 boot_cpu_data.type = CPU_SH7720;
83#endif 86#endif
84#if defined(CONFIG_CPU_SUBTYPE_SH7705) 87#if defined(CONFIG_CPU_SUBTYPE_SH7705)
85 current_cpu_data.type = CPU_SH7705; 88 boot_cpu_data.type = CPU_SH7705;
86 89
87#if defined(CONFIG_SH7705_CACHE_32KB) 90#if defined(CONFIG_SH7705_CACHE_32KB)
88 current_cpu_data.dcache.way_incr = (1 << 13); 91 boot_cpu_data.dcache.way_incr = (1 << 13);
89 current_cpu_data.dcache.entry_mask = 0x1ff0; 92 boot_cpu_data.dcache.entry_mask = 0x1ff0;
90 current_cpu_data.dcache.sets = 512; 93 boot_cpu_data.dcache.sets = 512;
91 ctrl_outl(CCR_CACHE_32KB, CCR3); 94 ctrl_outl(CCR_CACHE_32KB, CCR3);
92#else 95#else
93 ctrl_outl(CCR_CACHE_16KB, CCR3); 96 ctrl_outl(CCR_CACHE_16KB, CCR3);
@@ -98,9 +101,8 @@ int __init detect_cpu_and_cache_system(void)
98 /* 101 /*
99 * SH-3 doesn't have separate caches 102 * SH-3 doesn't have separate caches
100 */ 103 */
101 current_cpu_data.dcache.flags |= SH_CACHE_COMBINED; 104 boot_cpu_data.dcache.flags |= SH_CACHE_COMBINED;
102 current_cpu_data.icache = current_cpu_data.dcache; 105 boot_cpu_data.icache = boot_cpu_data.dcache;
103 106
104 return 0; 107 return 0;
105} 108}
106
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7705.c b/arch/sh/kernel/cpu/sh3/setup-sh7705.c
index ebd9d06d8bdd..f6c65f2659e9 100644
--- a/arch/sh/kernel/cpu/sh3/setup-sh7705.c
+++ b/arch/sh/kernel/cpu/sh3/setup-sh7705.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * SH7705 Setup 2 * SH7705 Setup
3 * 3 *
4 * Copyright (C) 2006 Paul Mundt 4 * Copyright (C) 2006, 2007 Paul Mundt
5 * Copyright (C) 2007 Nobuhiro Iwamatsu 5 * Copyright (C) 2007 Nobuhiro Iwamatsu
6 * 6 *
7 * This file is subject to the terms and conditions of the GNU General Public 7 * This file is subject to the terms and conditions of the GNU General Public
@@ -10,8 +10,90 @@
10 */ 10 */
11#include <linux/platform_device.h> 11#include <linux/platform_device.h>
12#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/irq.h>
13#include <linux/serial.h> 14#include <linux/serial.h>
14#include <asm/sci.h> 15#include <asm/sci.h>
16#include <asm/rtc.h>
17
18enum {
19 UNUSED = 0,
20
21 /* interrupt sources */
22 IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5,
23 PINT07, PINT815,
24 DMAC_DEI0, DMAC_DEI1, DMAC_DEI2, DMAC_DEI3,
25 SCIF0_ERI, SCIF0_RXI, SCIF0_TXI,
26 SCIF2_ERI, SCIF2_RXI, SCIF2_TXI,
27 ADC_ADI,
28 USB_USI0, USB_USI1,
29 TPU0, TPU1, TPU2, TPU3,
30 TMU0, TMU1, TMU2_TUNI, TMU2_TICPI,
31 RTC_ATI, RTC_PRI, RTC_CUI,
32 WDT,
33 REF_RCMI,
34
35 /* interrupt groups */
36 RTC, TMU2, DMAC, USB, SCIF2, SCIF0,
37};
38
39static struct intc_vect vectors[] __initdata = {
40 INTC_VECT(IRQ4, 0x680), INTC_VECT(IRQ5, 0x6a0),
41 INTC_VECT(PINT07, 0x700), INTC_VECT(PINT815, 0x720),
42 INTC_VECT(DMAC_DEI0, 0x800), INTC_VECT(DMAC_DEI1, 0x820),
43 INTC_VECT(DMAC_DEI2, 0x840), INTC_VECT(DMAC_DEI3, 0x860),
44 INTC_VECT(SCIF0_ERI, 0x880), INTC_VECT(SCIF0_RXI, 0x8a0),
45 INTC_VECT(SCIF0_TXI, 0x8e0),
46 INTC_VECT(SCIF2_ERI, 0x900), INTC_VECT(SCIF2_RXI, 0x920),
47 INTC_VECT(SCIF2_TXI, 0x960),
48 INTC_VECT(ADC_ADI, 0x980),
49 INTC_VECT(USB_USI0, 0xa20), INTC_VECT(USB_USI1, 0xa40),
50 INTC_VECT(TPU0, 0xc00), INTC_VECT(TPU1, 0xc20),
51 INTC_VECT(TPU3, 0xc80), INTC_VECT(TPU1, 0xca0),
52 INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
53 INTC_VECT(TMU2_TUNI, 0x440), INTC_VECT(TMU2_TICPI, 0x460),
54 INTC_VECT(RTC_ATI, 0x480), INTC_VECT(RTC_PRI, 0x4a0),
55 INTC_VECT(RTC_CUI, 0x4c0),
56 INTC_VECT(WDT, 0x560),
57 INTC_VECT(REF_RCMI, 0x580),
58};
59
60static struct intc_group groups[] __initdata = {
61 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI),
62 INTC_GROUP(TMU2, TMU2_TUNI, TMU2_TICPI),
63 INTC_GROUP(DMAC, DMAC_DEI0, DMAC_DEI1, DMAC_DEI2, DMAC_DEI3),
64 INTC_GROUP(USB, USB_USI0, USB_USI1),
65 INTC_GROUP(SCIF0, SCIF0_ERI, SCIF0_RXI, SCIF0_TXI),
66 INTC_GROUP(SCIF2, SCIF2_ERI, SCIF2_RXI, SCIF2_TXI),
67};
68
69static struct intc_prio priorities[] __initdata = {
70 INTC_PRIO(DMAC, 7),
71 INTC_PRIO(SCIF2, 3),
72 INTC_PRIO(SCIF0, 3),
73};
74
75static struct intc_prio_reg prio_registers[] __initdata = {
76 { 0xfffffee2, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },
77 { 0xfffffee4, 0, 16, 4, /* IPRB */ { WDT, REF_RCMI, 0, 0 } },
78 { 0xa4000016, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } },
79 { 0xa4000018, 0, 16, 4, /* IPRD */ { PINT07, PINT815, IRQ5, IRQ4 } },
80 { 0xa400001a, 0, 16, 4, /* IPRE */ { DMAC, SCIF0, SCIF2, ADC_ADI } },
81 { 0xa4080000, 0, 16, 4, /* IPRF */ { 0, 0, USB } },
82 { 0xa4080002, 0, 16, 4, /* IPRG */ { TPU0, TPU1 } },
83 { 0xa4080004, 0, 16, 4, /* IPRH */ { TPU2, TPU3 } },
84
85};
86
87static DECLARE_INTC_DESC(intc_desc, "sh7705", vectors, groups,
88 priorities, NULL, prio_registers, NULL);
89
90static struct intc_vect vectors_irq[] __initdata = {
91 INTC_VECT(IRQ0, 0x600), INTC_VECT(IRQ1, 0x620),
92 INTC_VECT(IRQ2, 0x640), INTC_VECT(IRQ3, 0x660),
93};
94
95static DECLARE_INTC_DESC(intc_desc_irq, "sh7705-irq", vectors_irq, NULL,
96 priorities, NULL, prio_registers, NULL);
15 97
16static struct plat_sci_port sci_platform_data[] = { 98static struct plat_sci_port sci_platform_data[] = {
17 { 99 {
@@ -37,8 +119,43 @@ static struct platform_device sci_device = {
37 }, 119 },
38}; 120};
39 121
122static struct resource rtc_resources[] = {
123 [0] = {
124 .start = 0xfffffec0,
125 .end = 0xfffffec0 + 0x1e,
126 .flags = IORESOURCE_IO,
127 },
128 [1] = {
129 .start = 20,
130 .flags = IORESOURCE_IRQ,
131 },
132 [2] = {
133 .start = 21,
134 .flags = IORESOURCE_IRQ,
135 },
136 [3] = {
137 .start = 22,
138 .flags = IORESOURCE_IRQ,
139 },
140};
141
142static struct sh_rtc_platform_info rtc_info = {
143 .capabilities = RTC_CAP_4_DIGIT_YEAR,
144};
145
146static struct platform_device rtc_device = {
147 .name = "sh-rtc",
148 .id = -1,
149 .num_resources = ARRAY_SIZE(rtc_resources),
150 .resource = rtc_resources,
151 .dev = {
152 .platform_data = &rtc_info,
153 },
154};
155
40static struct platform_device *sh7705_devices[] __initdata = { 156static struct platform_device *sh7705_devices[] __initdata = {
41 &sci_device, 157 &sci_device,
158 &rtc_device,
42}; 159};
43 160
44static int __init sh7705_devices_setup(void) 161static int __init sh7705_devices_setup(void)
@@ -48,51 +165,16 @@ static int __init sh7705_devices_setup(void)
48} 165}
49__initcall(sh7705_devices_setup); 166__initcall(sh7705_devices_setup);
50 167
51static struct ipr_data ipr_irq_table[] = { 168void __init plat_irq_setup_pins(int mode)
52 /* IRQ, IPR-idx, shift, priority */ 169{
53 { 16, 0, 12, 2 }, /* TMU0 TUNI*/ 170 if (mode == IRQ_MODE_IRQ) {
54 { 17, 0, 8, 2 }, /* TMU1 TUNI */ 171 register_intc_controller(&intc_desc_irq);
55 { 18, 0, 4, 2 }, /* TMU2 TUNI */ 172 return;
56 { 27, 1, 12, 2 }, /* WDT ITI */ 173 }
57 { 20, 0, 0, 2 }, /* RTC ATI (alarm) */ 174 BUG();
58 { 21, 0, 0, 2 }, /* RTC PRI (period) */ 175}
59 { 22, 0, 0, 2 }, /* RTC CUI (carry) */
60 { 48, 4, 12, 7 }, /* DMAC DMTE0 */
61 { 49, 4, 12, 7 }, /* DMAC DMTE1 */
62 { 50, 4, 12, 7 }, /* DMAC DMTE2 */
63 { 51, 4, 12, 7 }, /* DMAC DMTE3 */
64 { 52, 4, 8, 3 }, /* SCIF0 ERI */
65 { 53, 4, 8, 3 }, /* SCIF0 RXI */
66 { 55, 4, 8, 3 }, /* SCIF0 TXI */
67 { 56, 4, 4, 3 }, /* SCIF1 ERI */
68 { 57, 4, 4, 3 }, /* SCIF1 RXI */
69 { 59, 4, 4, 3 }, /* SCIF1 TXI */
70};
71
72static unsigned long ipr_offsets[] = {
73 0xFFFFFEE2, /* 0: IPRA */
74 0xFFFFFEE4, /* 1: IPRB */
75 0xA4000016, /* 2: IPRC */
76 0xA4000018, /* 3: IPRD */
77 0xA400001A, /* 4: IPRE */
78 0xA4080000, /* 5: IPRF */
79 0xA4080002, /* 6: IPRG */
80 0xA4080004, /* 7: IPRH */
81};
82
83static struct ipr_desc ipr_irq_desc = {
84 .ipr_offsets = ipr_offsets,
85 .nr_offsets = ARRAY_SIZE(ipr_offsets),
86
87 .ipr_data = ipr_irq_table,
88 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
89
90 .chip = {
91 .name = "IPR-sh7705",
92 },
93};
94 176
95void __init plat_irq_setup(void) 177void __init plat_irq_setup(void)
96{ 178{
97 register_ipr_controller(&ipr_irq_desc); 179 register_intc_controller(&intc_desc);
98} 180}
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7708.c b/arch/sh/kernel/cpu/sh3/setup-sh7708.c
deleted file mode 100644
index f933723911ca..000000000000
--- a/arch/sh/kernel/cpu/sh3/setup-sh7708.c
+++ /dev/null
@@ -1,43 +0,0 @@
1/*
2 * SH7708 Setup
3 *
4 * Copyright (C) 2006 Paul Mundt
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10#include <linux/platform_device.h>
11#include <linux/init.h>
12#include <linux/serial.h>
13#include <asm/sci.h>
14
15static struct plat_sci_port sci_platform_data[] = {
16 {
17 .mapbase = 0xfffffe80,
18 .flags = UPF_BOOT_AUTOCONF,
19 .type = PORT_SCI,
20 .irqs = { 23, 24, 25, 0 },
21 }, {
22 .flags = 0,
23 }
24};
25
26static struct platform_device sci_device = {
27 .name = "sh-sci",
28 .id = -1,
29 .dev = {
30 .platform_data = sci_platform_data,
31 },
32};
33
34static struct platform_device *sh7708_devices[] __initdata = {
35 &sci_device,
36};
37
38static int __init sh7708_devices_setup(void)
39{
40 return platform_add_devices(sh7708_devices,
41 ARRAY_SIZE(sh7708_devices));
42}
43__initcall(sh7708_devices_setup);
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7709.c b/arch/sh/kernel/cpu/sh3/setup-sh7709.c
deleted file mode 100644
index 086f8e2545af..000000000000
--- a/arch/sh/kernel/cpu/sh3/setup-sh7709.c
+++ /dev/null
@@ -1,145 +0,0 @@
1/*
2 * SH7707/SH7709 Setup
3 *
4 * Copyright (C) 2006 Paul Mundt
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10#include <linux/platform_device.h>
11#include <linux/init.h>
12#include <linux/serial.h>
13#include <asm/sci.h>
14
15static struct resource rtc_resources[] = {
16 [0] = {
17 .start = 0xfffffec0,
18 .end = 0xfffffec0 + 0x1e,
19 .flags = IORESOURCE_IO,
20 },
21 [1] = {
22 .start = 20,
23 .flags = IORESOURCE_IRQ,
24 },
25 [2] = {
26 .start = 21,
27 .flags = IORESOURCE_IRQ,
28 },
29 [3] = {
30 .start = 22,
31 .flags = IORESOURCE_IRQ,
32 },
33};
34
35static struct plat_sci_port sci_platform_data[] = {
36 {
37 .mapbase = 0xfffffe80,
38 .flags = UPF_BOOT_AUTOCONF,
39 .type = PORT_SCI,
40 .irqs = { 23, 24, 25, 0 },
41 }, {
42 .mapbase = 0xa4000150,
43 .flags = UPF_BOOT_AUTOCONF,
44 .type = PORT_SCIF,
45 .irqs = { 56, 57, 59, 58 },
46 }, {
47 .mapbase = 0xa4000140,
48 .flags = UPF_BOOT_AUTOCONF,
49 .type = PORT_IRDA,
50 .irqs = { 52, 53, 55, 54 },
51 }, {
52 .flags = 0,
53 }
54};
55
56static struct platform_device sci_device = {
57 .name = "sh-sci",
58 .id = -1,
59 .dev = {
60 .platform_data = sci_platform_data,
61 },
62};
63
64static struct platform_device rtc_device = {
65 .name = "sh-rtc",
66 .id = -1,
67 .num_resources = ARRAY_SIZE(rtc_resources),
68 .resource = rtc_resources,
69};
70
71static struct platform_device *sh7709_devices[] __initdata = {
72 &sci_device,
73 &rtc_device,
74};
75
76static int __init sh7709_devices_setup(void)
77{
78 return platform_add_devices(sh7709_devices,
79 ARRAY_SIZE(sh7709_devices));
80}
81__initcall(sh7709_devices_setup);
82
83static struct ipr_data ipr_irq_table[] = {
84 { 16, 0, 12, 2 }, /* TMU TUNI0 */
85 { 17, 0, 8, 4 }, /* TMU TUNI1 */
86 { 18, 0, 4, 1 }, /* TMU TUNI1 */
87 { 19, 0, 4, 1 }, /* TMU TUNI1 */
88 { 20, 0, 0, 2 }, /* RTC CUI */
89 { 21, 0, 0, 2 }, /* RTC CUI */
90 { 22, 0, 0, 2 }, /* RTC CUI */
91
92 { 23, 1, 4, 3 }, /* SCI */
93 { 24, 1, 4, 3 }, /* SCI */
94 { 25, 1, 4, 3 }, /* SCI */
95 { 26, 1, 4, 3 }, /* SCI */
96 { 27, 1, 12, 3 }, /* WDT ITI */
97
98 { 32, 2, 0, 1 }, /* IRQ 0 */
99 { 33, 2, 4, 1 }, /* IRQ 1 */
100 { 34, 2, 8, 1 }, /* IRQ 2 APM */
101 { 35, 2, 12, 1 }, /* IRQ 3 TOUCHSCREEN */
102
103 { 36, 3, 0, 1 }, /* IRQ 4 */
104 { 37, 3, 4, 1 }, /* IRQ 5 */
105
106 { 48, 4, 12, 7 }, /* DMA */
107 { 49, 4, 12, 7 }, /* DMA */
108 { 50, 4, 12, 7 }, /* DMA */
109 { 51, 4, 12, 7 }, /* DMA */
110
111 { 52, 4, 8, 3 }, /* IRDA */
112 { 53, 4, 8, 3 }, /* IRDA */
113 { 54, 4, 8, 3 }, /* IRDA */
114 { 55, 4, 8, 3 }, /* IRDA */
115
116 { 56, 4, 4, 3 }, /* SCIF */
117 { 57, 4, 4, 3 }, /* SCIF */
118 { 58, 4, 4, 3 }, /* SCIF */
119 { 59, 4, 4, 3 }, /* SCIF */
120};
121
122static unsigned long ipr_offsets[] = {
123 0xfffffee2, /* 0: IPRA */
124 0xfffffee4, /* 1: IPRB */
125 0xa4000016, /* 2: IPRC */
126 0xa4000018, /* 3: IPRD */
127 0xa400001a, /* 4: IPRE */
128};
129
130static struct ipr_desc ipr_irq_desc = {
131 .ipr_offsets = ipr_offsets,
132 .nr_offsets = ARRAY_SIZE(ipr_offsets),
133
134 .ipr_data = ipr_irq_table,
135 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
136
137 .chip = {
138 .name = "IPR-sh7709",
139 },
140};
141
142void __init plat_irq_setup(void)
143{
144 register_ipr_controller(&ipr_irq_desc);
145}
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh770x.c b/arch/sh/kernel/cpu/sh3/setup-sh770x.c
new file mode 100644
index 000000000000..60b04b1f9453
--- /dev/null
+++ b/arch/sh/kernel/cpu/sh3/setup-sh770x.c
@@ -0,0 +1,224 @@
1/*
2 * SH3 Setup code for SH7706, SH7707, SH7708, SH7709
3 *
4 * Copyright (C) 2007 Magnus Damm
5 *
6 * Based on setup-sh7709.c
7 *
8 * Copyright (C) 2006 Paul Mundt
9 *
10 * This file is subject to the terms and conditions of the GNU General Public
11 * License. See the file "COPYING" in the main directory of this archive
12 * for more details.
13 */
14#include <linux/init.h>
15#include <linux/io.h>
16#include <linux/irq.h>
17#include <linux/platform_device.h>
18#include <linux/serial.h>
19#include <asm/sci.h>
20
21enum {
22 UNUSED = 0,
23
24 /* interrupt sources */
25 IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5,
26 PINT07, PINT815,
27 DMAC_DEI0, DMAC_DEI1, DMAC_DEI2, DMAC_DEI3,
28 SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI,
29 SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI,
30 SCI_ERI, SCI_RXI, SCI_TXI, SCI_TEI,
31 ADC_ADI,
32 LCDC, PCC0, PCC1,
33 TMU0, TMU1, TMU2_TUNI, TMU2_TICPI,
34 RTC_ATI, RTC_PRI, RTC_CUI,
35 WDT,
36 REF_RCMI, REF_ROVI,
37
38 /* interrupt groups */
39 RTC, REF, TMU2, DMAC, SCI, SCIF2, SCIF0,
40};
41
42static struct intc_vect vectors[] __initdata = {
43 INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
44 INTC_VECT(TMU2_TUNI, 0x440), INTC_VECT(TMU2_TICPI, 0x460),
45 INTC_VECT(RTC_ATI, 0x480), INTC_VECT(RTC_PRI, 0x4a0),
46 INTC_VECT(RTC_CUI, 0x4c0),
47 INTC_VECT(SCI_ERI, 0x4e0), INTC_VECT(SCI_RXI, 0x500),
48 INTC_VECT(SCI_TXI, 0x520), INTC_VECT(SCI_TEI, 0x540),
49 INTC_VECT(WDT, 0x560),
50 INTC_VECT(REF_RCMI, 0x580),
51 INTC_VECT(REF_ROVI, 0x5a0),
52#if defined(CONFIG_CPU_SUBTYPE_SH7706) || \
53 defined(CONFIG_CPU_SUBTYPE_SH7707) || \
54 defined(CONFIG_CPU_SUBTYPE_SH7709)
55 INTC_VECT(IRQ4, 0x680), INTC_VECT(IRQ5, 0x6a0),
56 INTC_VECT(DMAC_DEI0, 0x800), INTC_VECT(DMAC_DEI1, 0x820),
57 INTC_VECT(DMAC_DEI2, 0x840), INTC_VECT(DMAC_DEI3, 0x860),
58 INTC_VECT(ADC_ADI, 0x980),
59 INTC_VECT(SCIF2_ERI, 0x900), INTC_VECT(SCIF2_RXI, 0x920),
60 INTC_VECT(SCIF2_BRI, 0x940), INTC_VECT(SCIF2_TXI, 0x960),
61#endif
62#if defined(CONFIG_CPU_SUBTYPE_SH7707) || \
63 defined(CONFIG_CPU_SUBTYPE_SH7709)
64 INTC_VECT(PINT07, 0x700), INTC_VECT(PINT815, 0x720),
65 INTC_VECT(SCIF0_ERI, 0x880), INTC_VECT(SCIF0_RXI, 0x8a0),
66 INTC_VECT(SCIF0_BRI, 0x8c0), INTC_VECT(SCIF0_TXI, 0x8e0),
67#endif
68#if defined(CONFIG_CPU_SUBTYPE_SH7707)
69 INTC_VECT(LCDC, 0x9a0),
70 INTC_VECT(PCC0, 0x9c0), INTC_VECT(PCC1, 0x9e0),
71#endif
72};
73
74static struct intc_group groups[] __initdata = {
75 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI),
76 INTC_GROUP(TMU2, TMU2_TUNI, TMU2_TICPI),
77 INTC_GROUP(REF, REF_RCMI, REF_ROVI),
78 INTC_GROUP(DMAC, DMAC_DEI0, DMAC_DEI1, DMAC_DEI2, DMAC_DEI3),
79 INTC_GROUP(SCI, SCI_ERI, SCI_RXI, SCI_TXI, SCI_TEI),
80 INTC_GROUP(SCIF0, SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI),
81 INTC_GROUP(SCIF2, SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI),
82};
83
84static struct intc_prio priorities[] __initdata = {
85 INTC_PRIO(DMAC, 7),
86 INTC_PRIO(SCI, 3),
87 INTC_PRIO(SCIF2, 3),
88 INTC_PRIO(SCIF0, 3),
89};
90
91static struct intc_prio_reg prio_registers[] __initdata = {
92 { 0xfffffee2, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },
93 { 0xfffffee4, 0, 16, 4, /* IPRB */ { WDT, REF, SCI, 0 } },
94#if defined(CONFIG_CPU_SUBTYPE_SH7706) || \
95 defined(CONFIG_CPU_SUBTYPE_SH7707) || \
96 defined(CONFIG_CPU_SUBTYPE_SH7709)
97 { 0xa4000016, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } },
98 { 0xa4000018, 0, 16, 4, /* IPRD */ { 0, 0, IRQ5, IRQ4 } },
99 { 0xa400001a, 0, 16, 4, /* IPRE */ { DMAC, 0, SCIF2, ADC_ADI } },
100#endif
101#if defined(CONFIG_CPU_SUBTYPE_SH7707) || \
102 defined(CONFIG_CPU_SUBTYPE_SH7709)
103 { 0xa4000018, 0, 16, 4, /* IPRD */ { PINT07, PINT815, } },
104 { 0xa400001a, 0, 16, 4, /* IPRE */ { 0, SCIF0 } },
105#endif
106#if defined(CONFIG_CPU_SUBTYPE_SH7707)
107 { 0xa400001c, 0, 16, 4, /* IPRF */ { 0, LCDC, PCC0, PCC1, } },
108#endif
109};
110
111static DECLARE_INTC_DESC(intc_desc, "sh770x", vectors, groups,
112 priorities, NULL, prio_registers, NULL);
113
114#if defined(CONFIG_CPU_SUBTYPE_SH7706) || \
115 defined(CONFIG_CPU_SUBTYPE_SH7707) || \
116 defined(CONFIG_CPU_SUBTYPE_SH7709)
117static struct intc_vect vectors_irq[] __initdata = {
118 INTC_VECT(IRQ0, 0x600), INTC_VECT(IRQ1, 0x620),
119 INTC_VECT(IRQ2, 0x640), INTC_VECT(IRQ3, 0x660),
120};
121
122static DECLARE_INTC_DESC(intc_desc_irq, "sh770x-irq", vectors_irq, NULL,
123 priorities, NULL, prio_registers, NULL);
124#endif
125
126static struct resource rtc_resources[] = {
127 [0] = {
128 .start = 0xfffffec0,
129 .end = 0xfffffec0 + 0x1e,
130 .flags = IORESOURCE_IO,
131 },
132 [1] = {
133 .start = 20,
134 .flags = IORESOURCE_IRQ,
135 },
136 [2] = {
137 .start = 21,
138 .flags = IORESOURCE_IRQ,
139 },
140 [3] = {
141 .start = 22,
142 .flags = IORESOURCE_IRQ,
143 },
144};
145
146static struct platform_device rtc_device = {
147 .name = "sh-rtc",
148 .id = -1,
149 .num_resources = ARRAY_SIZE(rtc_resources),
150 .resource = rtc_resources,
151};
152
153static struct plat_sci_port sci_platform_data[] = {
154 {
155 .mapbase = 0xfffffe80,
156 .flags = UPF_BOOT_AUTOCONF,
157 .type = PORT_SCI,
158 .irqs = { 23, 24, 25, 0 },
159 },
160#if defined(CONFIG_CPU_SUBTYPE_SH7706) || \
161 defined(CONFIG_CPU_SUBTYPE_SH7707) || \
162 defined(CONFIG_CPU_SUBTYPE_SH7709)
163 {
164 .mapbase = 0xa4000150,
165 .flags = UPF_BOOT_AUTOCONF,
166 .type = PORT_SCIF,
167 .irqs = { 56, 57, 59, 58 },
168 },
169#endif
170#if defined(CONFIG_CPU_SUBTYPE_SH7707) || \
171 defined(CONFIG_CPU_SUBTYPE_SH7709)
172 {
173 .mapbase = 0xa4000140,
174 .flags = UPF_BOOT_AUTOCONF,
175 .type = PORT_IRDA,
176 .irqs = { 52, 53, 55, 54 },
177 },
178#endif
179 {
180 .flags = 0,
181 }
182};
183
184static struct platform_device sci_device = {
185 .name = "sh-sci",
186 .id = -1,
187 .dev = {
188 .platform_data = sci_platform_data,
189 },
190};
191
192static struct platform_device *sh770x_devices[] __initdata = {
193 &sci_device,
194 &rtc_device,
195};
196
197static int __init sh770x_devices_setup(void)
198{
199 return platform_add_devices(sh770x_devices,
200 ARRAY_SIZE(sh770x_devices));
201}
202__initcall(sh770x_devices_setup);
203
204#define INTC_ICR1 0xa4000010UL
205#define INTC_ICR1_IRQLVL (1<<14)
206
207void __init plat_irq_setup_pins(int mode)
208{
209 if (mode == IRQ_MODE_IRQ) {
210#if defined(CONFIG_CPU_SUBTYPE_SH7706) || \
211 defined(CONFIG_CPU_SUBTYPE_SH7707) || \
212 defined(CONFIG_CPU_SUBTYPE_SH7709)
213 ctrl_outw(ctrl_inw(INTC_ICR1) & ~INTC_ICR1_IRQLVL, INTC_ICR1);
214 register_intc_controller(&intc_desc_irq);
215 return;
216#endif
217 }
218 BUG();
219}
220
221void __init plat_irq_setup(void)
222{
223 register_intc_controller(&intc_desc);
224}
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7710.c b/arch/sh/kernel/cpu/sh3/setup-sh7710.c
index 132284893373..84e5629fa841 100644
--- a/arch/sh/kernel/cpu/sh3/setup-sh7710.c
+++ b/arch/sh/kernel/cpu/sh3/setup-sh7710.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * SH7710 Setup 2 * SH3 Setup code for SH7710, SH7712
3 * 3 *
4 * Copyright (C) 2006 Paul Mundt 4 * Copyright (C) 2006, 2007 Paul Mundt
5 * Copyright (C) 2007 Nobuhiro Iwamatsu 5 * Copyright (C) 2007 Nobuhiro Iwamatsu
6 * 6 *
7 * This file is subject to the terms and conditions of the GNU General Public 7 * This file is subject to the terms and conditions of the GNU General Public
@@ -10,8 +10,140 @@
10 */ 10 */
11#include <linux/platform_device.h> 11#include <linux/platform_device.h>
12#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/irq.h>
13#include <linux/serial.h> 14#include <linux/serial.h>
14#include <asm/sci.h> 15#include <asm/sci.h>
16#include <asm/rtc.h>
17
18enum {
19 UNUSED = 0,
20
21 /* interrupt sources */
22 IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5,
23 DMAC_DEI0, DMAC_DEI1, DMAC_DEI2, DMAC_DEI3,
24 SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI,
25 SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI,
26 DMAC_DEI4, DMAC_DEI5,
27 IPSEC,
28 EDMAC0, EDMAC1, EDMAC2,
29 SIOF0_ERI, SIOF0_TXI, SIOF0_RXI, SIOF0_CCI,
30 SIOF1_ERI, SIOF1_TXI, SIOF1_RXI, SIOF1_CCI,
31 TMU0, TMU1, TMU2,
32 RTC_ATI, RTC_PRI, RTC_CUI,
33 WDT,
34 REF,
35
36 /* interrupt groups */
37 RTC, DMAC1, SCIF0, SCIF1, DMAC2, SIOF0, SIOF1,
38};
39
40static struct intc_vect vectors[] __initdata = {
41 INTC_VECT(IRQ4, 0x680), INTC_VECT(IRQ5, 0x6a0),
42 INTC_VECT(DMAC_DEI0, 0x800), INTC_VECT(DMAC_DEI1, 0x820),
43 INTC_VECT(DMAC_DEI2, 0x840), INTC_VECT(DMAC_DEI3, 0x860),
44 INTC_VECT(SCIF0_ERI, 0x880), INTC_VECT(SCIF0_RXI, 0x8a0),
45 INTC_VECT(SCIF0_BRI, 0x8c0), INTC_VECT(SCIF0_TXI, 0x8e0),
46 INTC_VECT(SCIF1_ERI, 0x900), INTC_VECT(SCIF1_RXI, 0x920),
47 INTC_VECT(SCIF1_BRI, 0x940), INTC_VECT(SCIF1_TXI, 0x960),
48 INTC_VECT(DMAC_DEI4, 0xb80), INTC_VECT(DMAC_DEI5, 0xba0),
49#ifdef CONFIG_CPU_SUBTYPE_SH7710
50 INTC_VECT(IPSEC, 0xbe0),
51#endif
52 INTC_VECT(EDMAC0, 0xc00), INTC_VECT(EDMAC1, 0xc20),
53 INTC_VECT(EDMAC2, 0xc40),
54 INTC_VECT(SIOF0_ERI, 0xe00), INTC_VECT(SIOF0_TXI, 0xe20),
55 INTC_VECT(SIOF0_RXI, 0xe40), INTC_VECT(SIOF0_CCI, 0xe60),
56 INTC_VECT(SIOF1_ERI, 0xe80), INTC_VECT(SIOF1_TXI, 0xea0),
57 INTC_VECT(SIOF1_RXI, 0xec0), INTC_VECT(SIOF1_CCI, 0xee0),
58 INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
59 INTC_VECT(TMU2, 0x440),
60 INTC_VECT(RTC_ATI, 0x480), INTC_VECT(RTC_PRI, 0x4a0),
61 INTC_VECT(RTC_CUI, 0x4c0),
62 INTC_VECT(WDT, 0x560),
63 INTC_VECT(REF, 0x580),
64};
65
66static struct intc_group groups[] __initdata = {
67 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI),
68 INTC_GROUP(DMAC1, DMAC_DEI0, DMAC_DEI1, DMAC_DEI2, DMAC_DEI3),
69 INTC_GROUP(SCIF0, SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI),
70 INTC_GROUP(SCIF1, SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI),
71 INTC_GROUP(DMAC2, DMAC_DEI4, DMAC_DEI5),
72 INTC_GROUP(SIOF0, SIOF0_ERI, SIOF0_TXI, SIOF0_RXI, SIOF0_CCI),
73 INTC_GROUP(SIOF1, SIOF1_ERI, SIOF1_TXI, SIOF1_RXI, SIOF1_CCI),
74};
75
76static struct intc_prio priorities[] __initdata = {
77 INTC_PRIO(DMAC1, 7),
78 INTC_PRIO(DMAC2, 7),
79 INTC_PRIO(SCIF0, 3),
80 INTC_PRIO(SCIF1, 3),
81 INTC_PRIO(SIOF0, 3),
82 INTC_PRIO(SIOF1, 3),
83 INTC_PRIO(EDMAC0, 5),
84 INTC_PRIO(EDMAC1, 5),
85 INTC_PRIO(EDMAC2, 5),
86};
87
88static struct intc_prio_reg prio_registers[] __initdata = {
89 { 0xfffffee2, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },
90 { 0xfffffee4, 0, 16, 4, /* IPRB */ { WDT, REF, 0, 0 } },
91 { 0xa4000016, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } },
92 { 0xa4000018, 0, 16, 4, /* IPRD */ { 0, 0, IRQ5, IRQ4 } },
93 { 0xa400001a, 0, 16, 4, /* IPRE */ { DMAC1, SCIF0, SCIF1 } },
94 { 0xa4080000, 0, 16, 4, /* IPRF */ { 0, DMAC2 } },
95#ifdef CONFIG_CPU_SUBTYPE_SH7710
96 { 0xa4080000, 0, 16, 4, /* IPRF */ { IPSEC } },
97#endif
98 { 0xa4080002, 0, 16, 4, /* IPRG */ { EDMAC0, EDMAC1, EDMAC2 } },
99 { 0xa4080004, 0, 16, 4, /* IPRH */ { 0, 0, 0, SIOF0 } },
100 { 0xa4080006, 0, 16, 4, /* IPRI */ { 0, 0, SIOF1 } },
101};
102
103static DECLARE_INTC_DESC(intc_desc, "sh7710", vectors, groups,
104 priorities, NULL, prio_registers, NULL);
105
106static struct intc_vect vectors_irq[] __initdata = {
107 INTC_VECT(IRQ0, 0x600), INTC_VECT(IRQ1, 0x620),
108 INTC_VECT(IRQ2, 0x640), INTC_VECT(IRQ3, 0x660),
109};
110
111static DECLARE_INTC_DESC(intc_desc_irq, "sh7710-irq", vectors_irq, NULL,
112 priorities, NULL, prio_registers, NULL);
113
114static struct resource rtc_resources[] = {
115 [0] = {
116 .start = 0xa413fec0,
117 .end = 0xa413fec0 + 0x1e,
118 .flags = IORESOURCE_IO,
119 },
120 [1] = {
121 .start = 20,
122 .flags = IORESOURCE_IRQ,
123 },
124 [2] = {
125 .start = 21,
126 .flags = IORESOURCE_IRQ,
127 },
128 [3] = {
129 .start = 22,
130 .flags = IORESOURCE_IRQ,
131 },
132};
133
134static struct sh_rtc_platform_info rtc_info = {
135 .capabilities = RTC_CAP_4_DIGIT_YEAR,
136};
137
138static struct platform_device rtc_device = {
139 .name = "sh-rtc",
140 .id = -1,
141 .num_resources = ARRAY_SIZE(rtc_resources),
142 .resource = rtc_resources,
143 .dev = {
144 .platform_data = &rtc_info,
145 },
146};
15 147
16static struct plat_sci_port sci_platform_data[] = { 148static struct plat_sci_port sci_platform_data[] = {
17 { 149 {
@@ -20,7 +152,7 @@ static struct plat_sci_port sci_platform_data[] = {
20 .type = PORT_SCIF, 152 .type = PORT_SCIF,
21 .irqs = { 52, 53, 55, 54 }, 153 .irqs = { 52, 53, 55, 54 },
22 }, { 154 }, {
23 .mapbase = 0xa4420000, 155 .mapbase = 0xa4410000,
24 .flags = UPF_BOOT_AUTOCONF, 156 .flags = UPF_BOOT_AUTOCONF,
25 .type = PORT_SCIF, 157 .type = PORT_SCIF,
26 .irqs = { 56, 57, 59, 58 }, 158 .irqs = { 56, 57, 59, 58 },
@@ -40,6 +172,7 @@ static struct platform_device sci_device = {
40 172
41static struct platform_device *sh7710_devices[] __initdata = { 173static struct platform_device *sh7710_devices[] __initdata = {
42 &sci_device, 174 &sci_device,
175 &rtc_device,
43}; 176};
44 177
45static int __init sh7710_devices_setup(void) 178static int __init sh7710_devices_setup(void)
@@ -49,59 +182,16 @@ static int __init sh7710_devices_setup(void)
49} 182}
50__initcall(sh7710_devices_setup); 183__initcall(sh7710_devices_setup);
51 184
52static struct ipr_data ipr_irq_table[] = { 185void __init plat_irq_setup_pins(int mode)
53 /* IRQ, IPR-idx, shift, priority */ 186{
54 { 16, 0, 12, 2 }, /* TMU0 TUNI*/ 187 if (mode == IRQ_MODE_IRQ) {
55 { 17, 0, 8, 2 }, /* TMU1 TUNI */ 188 register_intc_controller(&intc_desc_irq);
56 { 18, 0, 4, 2 }, /* TMU2 TUNI */ 189 return;
57 { 27, 1, 12, 2 }, /* WDT ITI */ 190 }
58 { 20, 0, 0, 2 }, /* RTC ATI (alarm) */ 191 BUG();
59 { 21, 0, 0, 2 }, /* RTC PRI (period) */ 192}
60 { 22, 0, 0, 2 }, /* RTC CUI (carry) */
61 { 48, 4, 12, 7 }, /* DMAC DMTE0 */
62 { 49, 4, 12, 7 }, /* DMAC DMTE1 */
63 { 50, 4, 12, 7 }, /* DMAC DMTE2 */
64 { 51, 4, 12, 7 }, /* DMAC DMTE3 */
65 { 52, 4, 8, 3 }, /* SCIF0 ERI */
66 { 53, 4, 8, 3 }, /* SCIF0 RXI */
67 { 54, 4, 8, 3 }, /* SCIF0 BRI */
68 { 55, 4, 8, 3 }, /* SCIF0 TXI */
69 { 56, 4, 4, 3 }, /* SCIF1 ERI */
70 { 57, 4, 4, 3 }, /* SCIF1 RXI */
71 { 58, 4, 4, 3 }, /* SCIF1 BRI */
72 { 59, 4, 4, 3 }, /* SCIF1 TXI */
73 { 76, 5, 8, 7 }, /* DMAC DMTE4 */
74 { 77, 5, 8, 7 }, /* DMAC DMTE5 */
75 { 80, 6, 12, 5 }, /* EDMAC EINT0 */
76 { 81, 6, 8, 5 }, /* EDMAC EINT1 */
77 { 82, 6, 4, 5 }, /* EDMAC EINT2 */
78};
79
80static unsigned long ipr_offsets[] = {
81 0xA414FEE2, /* 0: IPRA */
82 0xA414FEE4, /* 1: IPRB */
83 0xA4140016, /* 2: IPRC */
84 0xA4140018, /* 3: IPRD */
85 0xA414001A, /* 4: IPRE */
86 0xA4080000, /* 5: IPRF */
87 0xA4080002, /* 6: IPRG */
88 0xA4080004, /* 7: IPRH */
89 0xA4080006, /* 8: IPRI */
90};
91
92static struct ipr_desc ipr_irq_desc = {
93 .ipr_offsets = ipr_offsets,
94 .nr_offsets = ARRAY_SIZE(ipr_offsets),
95
96 .ipr_data = ipr_irq_table,
97 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
98
99 .chip = {
100 .name = "IPR-sh7710",
101 },
102};
103 193
104void __init plat_irq_setup(void) 194void __init plat_irq_setup(void)
105{ 195{
106 register_ipr_controller(&ipr_irq_desc); 196 register_intc_controller(&intc_desc);
107} 197}
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7720.c b/arch/sh/kernel/cpu/sh3/setup-sh7720.c
new file mode 100644
index 000000000000..a0929b8a95ae
--- /dev/null
+++ b/arch/sh/kernel/cpu/sh3/setup-sh7720.c
@@ -0,0 +1,210 @@
1/*
2 * SH7720 Setup
3 *
4 * Copyright (C) 2007 Markus Brunner, Mark Jonas
5 *
6 * Based on arch/sh/kernel/cpu/sh4/setup-sh7750.c:
7 *
8 * Copyright (C) 2006 Paul Mundt
9 * Copyright (C) 2006 Jamie Lenehan
10 *
11 * This file is subject to the terms and conditions of the GNU General Public
12 * License. See the file "COPYING" in the main directory of this archive
13 * for more details.
14 */
15#include <linux/platform_device.h>
16#include <linux/init.h>
17#include <linux/serial.h>
18#include <linux/io.h>
19#include <asm/sci.h>
20#include <asm/rtc.h>
21
22#define INTC_ICR1 0xA4140010UL
23#define INTC_ICR_IRLM 0x4000
24#define INTC_ICR_IRQ (~INTC_ICR_IRLM)
25
26static struct resource rtc_resources[] = {
27 [0] = {
28 .start = 0xa413fec0,
29 .end = 0xa413fec0 + 0x28 - 1,
30 .flags = IORESOURCE_IO,
31 },
32 [1] = {
33 /* Period IRQ */
34 .start = 21,
35 .flags = IORESOURCE_IRQ,
36 },
37 [2] = {
38 /* Carry IRQ */
39 .start = 22,
40 .flags = IORESOURCE_IRQ,
41 },
42 [3] = {
43 /* Alarm IRQ */
44 .start = 20,
45 .flags = IORESOURCE_IRQ,
46 },
47};
48
49static struct sh_rtc_platform_info rtc_info = {
50 .capabilities = RTC_CAP_4_DIGIT_YEAR,
51};
52
53static struct platform_device rtc_device = {
54 .name = "sh-rtc",
55 .id = -1,
56 .num_resources = ARRAY_SIZE(rtc_resources),
57 .resource = rtc_resources,
58 .dev = {
59 .platform_data = &rtc_info,
60 },
61};
62
63static struct plat_sci_port sci_platform_data[] = {
64 {
65 .mapbase = 0xa4430000,
66 .flags = UPF_BOOT_AUTOCONF,
67 .type = PORT_SCIF,
68 .irqs = { 80, 80, 80, 80 },
69 }, {
70 .mapbase = 0xa4438000,
71 .flags = UPF_BOOT_AUTOCONF,
72 .type = PORT_SCIF,
73 .irqs = { 81, 81, 81, 81 },
74 }, {
75
76 .flags = 0,
77 }
78};
79
80static struct platform_device sci_device = {
81 .name = "sh-sci",
82 .id = -1,
83 .dev = {
84 .platform_data = sci_platform_data,
85 },
86};
87
88static struct platform_device *sh7720_devices[] __initdata = {
89 &rtc_device,
90 &sci_device,
91};
92
93static int __init sh7720_devices_setup(void)
94{
95 return platform_add_devices(sh7720_devices,
96 ARRAY_SIZE(sh7720_devices));
97}
98__initcall(sh7720_devices_setup);
99
100enum {
101 UNUSED = 0,
102
103 /* interrupt sources */
104 TMU0, TMU1, TMU2, RTC_ATI, RTC_PRI, RTC_CUI,
105 WDT, REF_RCMI, SIM_ERI, SIM_RXI, SIM_TXI, SIM_TEND,
106 IRQ0, IRQ1, IRQ2, IRQ3,
107 USBF_SPD, TMU_SUNI, IRQ5, IRQ4,
108 DMAC1_DEI0, DMAC1_DEI1, DMAC1_DEI2, DMAC1_DEI3, LCDC, SSL,
109 ADC, DMAC2_DEI4, DMAC2_DEI5, USBFI0, USBFI1, CMT,
110 SCIF0, SCIF1,
111 PINT07, PINT815, TPU0, TPU1, TPU2, TPU3, IIC,
112 SIOF0, SIOF1, MMCI0, MMCI1, MMCI2, MMCI3, PCC,
113 USBHI, AFEIF,
114 H_UDI,
115 /* interrupt groups */
116 TMU, RTC, SIM, DMAC1, USBFI, DMAC2, USB, TPU, MMC,
117};
118
119static struct intc_vect vectors[] __initdata = {
120 INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
121 INTC_VECT(TMU2, 0x440), INTC_VECT(RTC_ATI, 0x480),
122 INTC_VECT(RTC_PRI, 0x4a0), INTC_VECT(RTC_CUI, 0x4c0),
123 INTC_VECT(SIM_ERI, 0x4e0), INTC_VECT(SIM_RXI, 0x500),
124 INTC_VECT(SIM_TXI, 0x520), INTC_VECT(SIM_TEND, 0x540),
125 INTC_VECT(WDT, 0x560), INTC_VECT(REF_RCMI, 0x580),
126 /* H_UDI cannot be masked */ INTC_VECT(TMU_SUNI, 0x6c0),
127 INTC_VECT(USBF_SPD, 0x6e0), INTC_VECT(DMAC1_DEI0, 0x800),
128 INTC_VECT(DMAC1_DEI1, 0x820), INTC_VECT(DMAC1_DEI2, 0x840),
129 INTC_VECT(DMAC1_DEI3, 0x860), INTC_VECT(LCDC, 0x900),
130 INTC_VECT(SSL, 0x980), INTC_VECT(USBFI0, 0xa20),
131 INTC_VECT(USBFI1, 0xa40), INTC_VECT(USBHI, 0xa60),
132 INTC_VECT(DMAC2_DEI4, 0xb80), INTC_VECT(DMAC2_DEI5, 0xba0),
133 INTC_VECT(ADC, 0xbe0), INTC_VECT(SCIF0, 0xc00),
134 INTC_VECT(SCIF1, 0xc20), INTC_VECT(PINT07, 0xc80),
135 INTC_VECT(PINT815, 0xca0), INTC_VECT(SIOF0, 0xd00),
136 INTC_VECT(SIOF1, 0xd20), INTC_VECT(TPU0, 0xd80),
137 INTC_VECT(TPU1, 0xda0), INTC_VECT(TPU2, 0xdc0),
138 INTC_VECT(TPU3, 0xde0), INTC_VECT(IIC, 0xe00),
139 INTC_VECT(MMCI0, 0xe80), INTC_VECT(MMCI1, 0xea0),
140 INTC_VECT(MMCI2, 0xec0), INTC_VECT(MMCI3, 0xee0),
141 INTC_VECT(CMT, 0xf00), INTC_VECT(PCC, 0xf60),
142 INTC_VECT(AFEIF, 0xfe0),
143};
144
145static struct intc_group groups[] __initdata = {
146 INTC_GROUP(TMU, TMU0, TMU1, TMU2),
147 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI),
148 INTC_GROUP(SIM, SIM_ERI, SIM_RXI, SIM_TXI, SIM_TEND),
149 INTC_GROUP(DMAC1, DMAC1_DEI0, DMAC1_DEI1, DMAC1_DEI2, DMAC1_DEI3),
150 INTC_GROUP(USBFI, USBFI0, USBFI1),
151 INTC_GROUP(DMAC2, DMAC2_DEI4, DMAC2_DEI5),
152 INTC_GROUP(TPU, TPU0, TPU1, TPU2, TPU3),
153 INTC_GROUP(MMC, MMCI0, MMCI1, MMCI2, MMCI3),
154};
155
156static struct intc_prio priorities[] __initdata = {
157 INTC_PRIO(SCIF0, 2),
158 INTC_PRIO(SCIF1, 2),
159 INTC_PRIO(DMAC1, 1),
160 INTC_PRIO(DMAC2, 1),
161 INTC_PRIO(RTC, 2),
162 INTC_PRIO(TMU, 2),
163 INTC_PRIO(TPU, 2),
164};
165
166static struct intc_prio_reg prio_registers[] __initdata = {
167 { 0xA414FEE2UL, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },
168 { 0xA414FEE4UL, 0, 16, 4, /* IPRB */ { WDT, REF_RCMI, SIM, 0 } },
169 { 0xA4140016UL, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } },
170 { 0xA4140018UL, 0, 16, 4, /* IPRD */ { USBF_SPD, TMU_SUNI, IRQ5, IRQ4 } },
171 { 0xA414001AUL, 0, 16, 4, /* IPRE */ { DMAC1, 0, LCDC, SSL } },
172 { 0xA4080000UL, 0, 16, 4, /* IPRF */ { ADC, DMAC2, USBFI, CMT } },
173 { 0xA4080002UL, 0, 16, 4, /* IPRG */ { SCIF0, SCIF1, 0, 0 } },
174 { 0xA4080004UL, 0, 16, 4, /* IPRH */ { PINT07, PINT815, TPU, IIC } },
175 { 0xA4080006UL, 0, 16, 4, /* IPRI */ { SIOF0, SIOF1, MMC, PCC } },
176 { 0xA4080008UL, 0, 16, 4, /* IPRJ */ { 0, USBHI, 0, AFEIF } },
177};
178
179static DECLARE_INTC_DESC(intc_desc, "sh7720", vectors, groups,
180 priorities, NULL, prio_registers, NULL);
181
182static struct intc_sense_reg sense_registers[] __initdata = {
183 { INTC_ICR1, 16, 2, { 0, 0, IRQ5, IRQ4, IRQ3, IRQ2, IRQ1, IRQ0 } },
184};
185
186static struct intc_vect vectors_irq[] __initdata = {
187 INTC_VECT(IRQ0, 0x600), INTC_VECT(IRQ1, 0x620),
188 INTC_VECT(IRQ2, 0x640), INTC_VECT(IRQ3, 0x660),
189 INTC_VECT(IRQ4, 0x680), INTC_VECT(IRQ5, 0x6a0),
190};
191
192static DECLARE_INTC_DESC(intc_irq_desc, "sh7720-irq", vectors_irq,
193 NULL, priorities, NULL, prio_registers, sense_registers);
194
195void __init plat_irq_setup_pins(int mode)
196{
197 switch (mode) {
198 case IRQ_MODE_IRQ:
199 ctrl_outw(ctrl_inw(INTC_ICR1) & INTC_ICR_IRQ, INTC_ICR1);
200 register_intc_controller(&intc_irq_desc);
201 break;
202 default:
203 BUG();
204 }
205}
206
207void __init plat_irq_setup(void)
208{
209 register_intc_controller(&intc_desc);
210}
diff --git a/arch/sh/kernel/cpu/sh4/probe.c b/arch/sh/kernel/cpu/sh4/probe.c
index 98d28fb1ce16..21375d777e99 100644
--- a/arch/sh/kernel/cpu/sh4/probe.c
+++ b/arch/sh/kernel/cpu/sh4/probe.c
@@ -3,7 +3,7 @@
3 * 3 *
4 * CPU Subtype Probing for SH-4. 4 * CPU Subtype Probing for SH-4.
5 * 5 *
6 * Copyright (C) 2001 - 2006 Paul Mundt 6 * Copyright (C) 2001 - 2007 Paul Mundt
7 * Copyright (C) 2003 Richard Curnow 7 * Copyright (C) 2003 Richard Curnow
8 * 8 *
9 * This file is subject to the terms and conditions of the GNU General Public 9 * This file is subject to the terms and conditions of the GNU General Public
@@ -12,7 +12,6 @@
12 */ 12 */
13#include <linux/init.h> 13#include <linux/init.h>
14#include <linux/io.h> 14#include <linux/io.h>
15#include <linux/smp.h>
16#include <asm/processor.h> 15#include <asm/processor.h>
17#include <asm/cache.h> 16#include <asm/cache.h>
18 17
@@ -36,37 +35,34 @@ int __init detect_cpu_and_cache_system(void)
36 /* 35 /*
37 * Setup some sane SH-4 defaults for the icache 36 * Setup some sane SH-4 defaults for the icache
38 */ 37 */
39 current_cpu_data.icache.way_incr = (1 << 13); 38 boot_cpu_data.icache.way_incr = (1 << 13);
40 current_cpu_data.icache.entry_shift = 5; 39 boot_cpu_data.icache.entry_shift = 5;
41 current_cpu_data.icache.sets = 256; 40 boot_cpu_data.icache.sets = 256;
42 current_cpu_data.icache.ways = 1; 41 boot_cpu_data.icache.ways = 1;
43 current_cpu_data.icache.linesz = L1_CACHE_BYTES; 42 boot_cpu_data.icache.linesz = L1_CACHE_BYTES;
44 43
45 /* 44 /*
46 * And again for the dcache .. 45 * And again for the dcache ..
47 */ 46 */
48 current_cpu_data.dcache.way_incr = (1 << 14); 47 boot_cpu_data.dcache.way_incr = (1 << 14);
49 current_cpu_data.dcache.entry_shift = 5; 48 boot_cpu_data.dcache.entry_shift = 5;
50 current_cpu_data.dcache.sets = 512; 49 boot_cpu_data.dcache.sets = 512;
51 current_cpu_data.dcache.ways = 1; 50 boot_cpu_data.dcache.ways = 1;
52 current_cpu_data.dcache.linesz = L1_CACHE_BYTES; 51 boot_cpu_data.dcache.linesz = L1_CACHE_BYTES;
53 52
54 /* 53 /*
55 * Setup some generic flags we can probe 54 * Setup some generic flags we can probe on SH-4A parts
56 * (L2 and DSP detection only work on SH-4A)
57 */ 55 */
58 if (((pvr >> 16) & 0xff) == 0x10) { 56 if (((pvr >> 16) & 0xff) == 0x10) {
59 if ((cvr & 0x02000000) == 0)
60 current_cpu_data.flags |= CPU_HAS_L2_CACHE;
61 if ((cvr & 0x10000000) == 0) 57 if ((cvr & 0x10000000) == 0)
62 current_cpu_data.flags |= CPU_HAS_DSP; 58 boot_cpu_data.flags |= CPU_HAS_DSP;
63 59
64 current_cpu_data.flags |= CPU_HAS_LLSC; 60 boot_cpu_data.flags |= CPU_HAS_LLSC;
65 } 61 }
66 62
67 /* FPU detection works for everyone */ 63 /* FPU detection works for everyone */
68 if ((cvr & 0x20000000) == 1) 64 if ((cvr & 0x20000000) == 1)
69 current_cpu_data.flags |= CPU_HAS_FPU; 65 boot_cpu_data.flags |= CPU_HAS_FPU;
70 66
71 /* Mask off the upper chip ID */ 67 /* Mask off the upper chip ID */
72 pvr &= 0xffff; 68 pvr &= 0xffff;
@@ -77,140 +73,140 @@ int __init detect_cpu_and_cache_system(void)
77 */ 73 */
78 switch (pvr) { 74 switch (pvr) {
79 case 0x205: 75 case 0x205:
80 current_cpu_data.type = CPU_SH7750; 76 boot_cpu_data.type = CPU_SH7750;
81 current_cpu_data.flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU | 77 boot_cpu_data.flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU |
82 CPU_HAS_PERF_COUNTER; 78 CPU_HAS_PERF_COUNTER;
83 break; 79 break;
84 case 0x206: 80 case 0x206:
85 current_cpu_data.type = CPU_SH7750S; 81 boot_cpu_data.type = CPU_SH7750S;
86 current_cpu_data.flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU | 82 boot_cpu_data.flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU |
87 CPU_HAS_PERF_COUNTER; 83 CPU_HAS_PERF_COUNTER;
88 break; 84 break;
89 case 0x1100: 85 case 0x1100:
90 current_cpu_data.type = CPU_SH7751; 86 boot_cpu_data.type = CPU_SH7751;
91 current_cpu_data.flags |= CPU_HAS_FPU; 87 boot_cpu_data.flags |= CPU_HAS_FPU;
92 break; 88 break;
93 case 0x2001: 89 case 0x2001:
94 case 0x2004: 90 case 0x2004:
95 current_cpu_data.type = CPU_SH7770; 91 boot_cpu_data.type = CPU_SH7770;
96 current_cpu_data.icache.ways = 4; 92 boot_cpu_data.icache.ways = 4;
97 current_cpu_data.dcache.ways = 4; 93 boot_cpu_data.dcache.ways = 4;
98 94
99 current_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_LLSC; 95 boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_LLSC;
100 break; 96 break;
101 case 0x2006: 97 case 0x2006:
102 case 0x200A: 98 case 0x200A:
103 if (prr == 0x61) 99 if (prr == 0x61)
104 current_cpu_data.type = CPU_SH7781; 100 boot_cpu_data.type = CPU_SH7781;
105 else 101 else
106 current_cpu_data.type = CPU_SH7780; 102 boot_cpu_data.type = CPU_SH7780;
107 103
108 current_cpu_data.icache.ways = 4; 104 boot_cpu_data.icache.ways = 4;
109 current_cpu_data.dcache.ways = 4; 105 boot_cpu_data.dcache.ways = 4;
110 106
111 current_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER | 107 boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER |
112 CPU_HAS_LLSC; 108 CPU_HAS_LLSC;
113 break; 109 break;
114 case 0x3000: 110 case 0x3000:
115 case 0x3003: 111 case 0x3003:
116 case 0x3009: 112 case 0x3009:
117 current_cpu_data.type = CPU_SH7343; 113 boot_cpu_data.type = CPU_SH7343;
118 current_cpu_data.icache.ways = 4; 114 boot_cpu_data.icache.ways = 4;
119 current_cpu_data.dcache.ways = 4; 115 boot_cpu_data.dcache.ways = 4;
120 current_cpu_data.flags |= CPU_HAS_LLSC; 116 boot_cpu_data.flags |= CPU_HAS_LLSC;
121 break; 117 break;
122 case 0x3004: 118 case 0x3004:
123 case 0x3007: 119 case 0x3007:
124 current_cpu_data.type = CPU_SH7785; 120 boot_cpu_data.type = CPU_SH7785;
125 current_cpu_data.icache.ways = 4; 121 boot_cpu_data.icache.ways = 4;
126 current_cpu_data.dcache.ways = 4; 122 boot_cpu_data.dcache.ways = 4;
127 current_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER | 123 boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER |
128 CPU_HAS_LLSC; 124 CPU_HAS_LLSC;
129 break; 125 break;
130 case 0x3008: 126 case 0x3008:
131 if (prr == 0xa0) { 127 if (prr == 0xa0) {
132 current_cpu_data.type = CPU_SH7722; 128 boot_cpu_data.type = CPU_SH7722;
133 current_cpu_data.icache.ways = 4; 129 boot_cpu_data.icache.ways = 4;
134 current_cpu_data.dcache.ways = 4; 130 boot_cpu_data.dcache.ways = 4;
135 current_cpu_data.flags |= CPU_HAS_LLSC; 131 boot_cpu_data.flags |= CPU_HAS_LLSC;
136 } 132 }
137 break; 133 break;
138 case 0x4000: /* 1st cut */ 134 case 0x4000: /* 1st cut */
139 case 0x4001: /* 2nd cut */ 135 case 0x4001: /* 2nd cut */
140 current_cpu_data.type = CPU_SHX3; 136 boot_cpu_data.type = CPU_SHX3;
141 current_cpu_data.icache.ways = 4; 137 boot_cpu_data.icache.ways = 4;
142 current_cpu_data.dcache.ways = 4; 138 boot_cpu_data.dcache.ways = 4;
143 current_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER | 139 boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER |
144 CPU_HAS_LLSC; 140 CPU_HAS_LLSC;
145 break; 141 break;
146 case 0x8000: 142 case 0x8000:
147 current_cpu_data.type = CPU_ST40RA; 143 boot_cpu_data.type = CPU_ST40RA;
148 current_cpu_data.flags |= CPU_HAS_FPU; 144 boot_cpu_data.flags |= CPU_HAS_FPU;
149 break; 145 break;
150 case 0x8100: 146 case 0x8100:
151 current_cpu_data.type = CPU_ST40GX1; 147 boot_cpu_data.type = CPU_ST40GX1;
152 current_cpu_data.flags |= CPU_HAS_FPU; 148 boot_cpu_data.flags |= CPU_HAS_FPU;
153 break; 149 break;
154 case 0x700: 150 case 0x700:
155 current_cpu_data.type = CPU_SH4_501; 151 boot_cpu_data.type = CPU_SH4_501;
156 current_cpu_data.icache.ways = 2; 152 boot_cpu_data.icache.ways = 2;
157 current_cpu_data.dcache.ways = 2; 153 boot_cpu_data.dcache.ways = 2;
158 break; 154 break;
159 case 0x600: 155 case 0x600:
160 current_cpu_data.type = CPU_SH4_202; 156 boot_cpu_data.type = CPU_SH4_202;
161 current_cpu_data.icache.ways = 2; 157 boot_cpu_data.icache.ways = 2;
162 current_cpu_data.dcache.ways = 2; 158 boot_cpu_data.dcache.ways = 2;
163 current_cpu_data.flags |= CPU_HAS_FPU; 159 boot_cpu_data.flags |= CPU_HAS_FPU;
164 break; 160 break;
165 case 0x500 ... 0x501: 161 case 0x500 ... 0x501:
166 switch (prr) { 162 switch (prr) {
167 case 0x10: 163 case 0x10:
168 current_cpu_data.type = CPU_SH7750R; 164 boot_cpu_data.type = CPU_SH7750R;
169 break; 165 break;
170 case 0x11: 166 case 0x11:
171 current_cpu_data.type = CPU_SH7751R; 167 boot_cpu_data.type = CPU_SH7751R;
172 break; 168 break;
173 case 0x50 ... 0x5f: 169 case 0x50 ... 0x5f:
174 current_cpu_data.type = CPU_SH7760; 170 boot_cpu_data.type = CPU_SH7760;
175 break; 171 break;
176 } 172 }
177 173
178 current_cpu_data.icache.ways = 2; 174 boot_cpu_data.icache.ways = 2;
179 current_cpu_data.dcache.ways = 2; 175 boot_cpu_data.dcache.ways = 2;
180 176
181 current_cpu_data.flags |= CPU_HAS_FPU; 177 boot_cpu_data.flags |= CPU_HAS_FPU;
182 178
183 break; 179 break;
184 default: 180 default:
185 current_cpu_data.type = CPU_SH_NONE; 181 boot_cpu_data.type = CPU_SH_NONE;
186 break; 182 break;
187 } 183 }
188 184
189#ifdef CONFIG_SH_DIRECT_MAPPED 185#ifdef CONFIG_SH_DIRECT_MAPPED
190 current_cpu_data.icache.ways = 1; 186 boot_cpu_data.icache.ways = 1;
191 current_cpu_data.dcache.ways = 1; 187 boot_cpu_data.dcache.ways = 1;
192#endif 188#endif
193 189
194#ifdef CONFIG_CPU_HAS_PTEA 190#ifdef CONFIG_CPU_HAS_PTEA
195 current_cpu_data.flags |= CPU_HAS_PTEA; 191 boot_cpu_data.flags |= CPU_HAS_PTEA;
196#endif 192#endif
197 193
198 /* 194 /*
199 * On anything that's not a direct-mapped cache, look to the CVR 195 * On anything that's not a direct-mapped cache, look to the CVR
200 * for I/D-cache specifics. 196 * for I/D-cache specifics.
201 */ 197 */
202 if (current_cpu_data.icache.ways > 1) { 198 if (boot_cpu_data.icache.ways > 1) {
203 size = sizes[(cvr >> 20) & 0xf]; 199 size = sizes[(cvr >> 20) & 0xf];
204 current_cpu_data.icache.way_incr = (size >> 1); 200 boot_cpu_data.icache.way_incr = (size >> 1);
205 current_cpu_data.icache.sets = (size >> 6); 201 boot_cpu_data.icache.sets = (size >> 6);
206 202
207 } 203 }
208 204
209 /* And the rest of the D-cache */ 205 /* And the rest of the D-cache */
210 if (current_cpu_data.dcache.ways > 1) { 206 if (boot_cpu_data.dcache.ways > 1) {
211 size = sizes[(cvr >> 16) & 0xf]; 207 size = sizes[(cvr >> 16) & 0xf];
212 current_cpu_data.dcache.way_incr = (size >> 1); 208 boot_cpu_data.dcache.way_incr = (size >> 1);
213 current_cpu_data.dcache.sets = (size >> 6); 209 boot_cpu_data.dcache.sets = (size >> 6);
214 } 210 }
215 211
216 /* 212 /*
@@ -218,7 +214,7 @@ int __init detect_cpu_and_cache_system(void)
218 * 214 *
219 * SH-4A's have an optional PIPT L2. 215 * SH-4A's have an optional PIPT L2.
220 */ 216 */
221 if (current_cpu_data.flags & CPU_HAS_L2_CACHE) { 217 if (boot_cpu_data.flags & CPU_HAS_L2_CACHE) {
222 /* 218 /*
223 * Size calculation is much more sensible 219 * Size calculation is much more sensible
224 * than it is for the L1. 220 * than it is for the L1.
@@ -229,22 +225,22 @@ int __init detect_cpu_and_cache_system(void)
229 225
230 BUG_ON(!size); 226 BUG_ON(!size);
231 227
232 current_cpu_data.scache.way_incr = (1 << 16); 228 boot_cpu_data.scache.way_incr = (1 << 16);
233 current_cpu_data.scache.entry_shift = 5; 229 boot_cpu_data.scache.entry_shift = 5;
234 current_cpu_data.scache.ways = 4; 230 boot_cpu_data.scache.ways = 4;
235 current_cpu_data.scache.linesz = L1_CACHE_BYTES; 231 boot_cpu_data.scache.linesz = L1_CACHE_BYTES;
236 232
237 current_cpu_data.scache.entry_mask = 233 boot_cpu_data.scache.entry_mask =
238 (current_cpu_data.scache.way_incr - 234 (boot_cpu_data.scache.way_incr -
239 current_cpu_data.scache.linesz); 235 boot_cpu_data.scache.linesz);
240 236
241 current_cpu_data.scache.sets = size / 237 boot_cpu_data.scache.sets = size /
242 (current_cpu_data.scache.linesz * 238 (boot_cpu_data.scache.linesz *
243 current_cpu_data.scache.ways); 239 boot_cpu_data.scache.ways);
244 240
245 current_cpu_data.scache.way_size = 241 boot_cpu_data.scache.way_size =
246 (current_cpu_data.scache.sets * 242 (boot_cpu_data.scache.sets *
247 current_cpu_data.scache.linesz); 243 boot_cpu_data.scache.linesz);
248 } 244 }
249 245
250 return 0; 246 return 0;
diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7750.c b/arch/sh/kernel/cpu/sh4/setup-sh7750.c
index f2286de22bd5..523f68a9ce0e 100644
--- a/arch/sh/kernel/cpu/sh4/setup-sh7750.c
+++ b/arch/sh/kernel/cpu/sh4/setup-sh7750.c
@@ -104,7 +104,7 @@ enum {
104 DMAC, PCIC1, TMU2, RTC, SCI1, SCIF, REF, 104 DMAC, PCIC1, TMU2, RTC, SCI1, SCIF, REF,
105}; 105};
106 106
107static struct intc_vect vectors[] = { 107static struct intc_vect vectors[] __initdata = {
108 INTC_VECT(HUDI, 0x600), INTC_VECT(GPIOI, 0x620), 108 INTC_VECT(HUDI, 0x600), INTC_VECT(GPIOI, 0x620),
109 INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420), 109 INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
110 INTC_VECT(TMU2_TUNI, 0x440), INTC_VECT(TMU2_TICPI, 0x460), 110 INTC_VECT(TMU2_TUNI, 0x440), INTC_VECT(TMU2_TICPI, 0x460),
@@ -118,7 +118,7 @@ static struct intc_vect vectors[] = {
118 INTC_VECT(REF_RCMI, 0x580), INTC_VECT(REF_ROVI, 0x5a0), 118 INTC_VECT(REF_RCMI, 0x580), INTC_VECT(REF_ROVI, 0x5a0),
119}; 119};
120 120
121static struct intc_group groups[] = { 121static struct intc_group groups[] __initdata = {
122 INTC_GROUP(TMU2, TMU2_TUNI, TMU2_TICPI), 122 INTC_GROUP(TMU2, TMU2_TUNI, TMU2_TICPI),
123 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI), 123 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI),
124 INTC_GROUP(SCI1, SCI1_ERI, SCI1_RXI, SCI1_TXI, SCI1_TEI), 124 INTC_GROUP(SCI1, SCI1_ERI, SCI1_RXI, SCI1_TXI, SCI1_TEI),
@@ -126,20 +126,20 @@ static struct intc_group groups[] = {
126 INTC_GROUP(REF, REF_RCMI, REF_ROVI), 126 INTC_GROUP(REF, REF_RCMI, REF_ROVI),
127}; 127};
128 128
129static struct intc_prio priorities[] = { 129static struct intc_prio priorities[] __initdata = {
130 INTC_PRIO(SCIF, 3), 130 INTC_PRIO(SCIF, 3),
131 INTC_PRIO(SCI1, 3), 131 INTC_PRIO(SCI1, 3),
132 INTC_PRIO(DMAC, 7), 132 INTC_PRIO(DMAC, 7),
133}; 133};
134 134
135static struct intc_prio_reg prio_registers[] = { 135static struct intc_prio_reg prio_registers[] __initdata = {
136 { 0xffd00004, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } }, 136 { 0xffd00004, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },
137 { 0xffd00008, 16, 4, /* IPRB */ { WDT, REF, SCI1, 0 } }, 137 { 0xffd00008, 0, 16, 4, /* IPRB */ { WDT, REF, SCI1, 0 } },
138 { 0xffd0000c, 16, 4, /* IPRC */ { GPIOI, DMAC, SCIF, HUDI } }, 138 { 0xffd0000c, 0, 16, 4, /* IPRC */ { GPIOI, DMAC, SCIF, HUDI } },
139 { 0xffd00010, 16, 4, /* IPRD */ { IRL0, IRL1, IRL2, IRL3 } }, 139 { 0xffd00010, 0, 16, 4, /* IPRD */ { IRL0, IRL1, IRL2, IRL3 } },
140 { 0xfe080000, 32, 4, /* INTPRI00 */ { 0, 0, 0, 0, 140 { 0xfe080000, 0, 32, 4, /* INTPRI00 */ { 0, 0, 0, 0,
141 TMU4, TMU3, 141 TMU4, TMU3,
142 PCIC1, PCIC0_PCISERR } }, 142 PCIC1, PCIC0_PCISERR } },
143}; 143};
144 144
145static DECLARE_INTC_DESC(intc_desc, "sh7750", vectors, groups, 145static DECLARE_INTC_DESC(intc_desc, "sh7750", vectors, groups,
@@ -150,13 +150,13 @@ static DECLARE_INTC_DESC(intc_desc, "sh7750", vectors, groups,
150 defined(CONFIG_CPU_SUBTYPE_SH7750S) || \ 150 defined(CONFIG_CPU_SUBTYPE_SH7750S) || \
151 defined(CONFIG_CPU_SUBTYPE_SH7751) || \ 151 defined(CONFIG_CPU_SUBTYPE_SH7751) || \
152 defined(CONFIG_CPU_SUBTYPE_SH7091) 152 defined(CONFIG_CPU_SUBTYPE_SH7091)
153static struct intc_vect vectors_dma4[] = { 153static struct intc_vect vectors_dma4[] __initdata = {
154 INTC_VECT(DMAC_DMTE0, 0x640), INTC_VECT(DMAC_DMTE1, 0x660), 154 INTC_VECT(DMAC_DMTE0, 0x640), INTC_VECT(DMAC_DMTE1, 0x660),
155 INTC_VECT(DMAC_DMTE2, 0x680), INTC_VECT(DMAC_DMTE3, 0x6a0), 155 INTC_VECT(DMAC_DMTE2, 0x680), INTC_VECT(DMAC_DMTE3, 0x6a0),
156 INTC_VECT(DMAC_DMAE, 0x6c0), 156 INTC_VECT(DMAC_DMAE, 0x6c0),
157}; 157};
158 158
159static struct intc_group groups_dma4[] = { 159static struct intc_group groups_dma4[] __initdata = {
160 INTC_GROUP(DMAC, DMAC_DMTE0, DMAC_DMTE1, DMAC_DMTE2, 160 INTC_GROUP(DMAC, DMAC_DMTE0, DMAC_DMTE1, DMAC_DMTE2,
161 DMAC_DMTE3, DMAC_DMAE), 161 DMAC_DMTE3, DMAC_DMAE),
162}; 162};
@@ -168,7 +168,7 @@ static DECLARE_INTC_DESC(intc_desc_dma4, "sh7750_dma4",
168 168
169/* SH7750R and SH7751R both have 8-channel DMA controllers */ 169/* SH7750R and SH7751R both have 8-channel DMA controllers */
170#if defined(CONFIG_CPU_SUBTYPE_SH7750R) || defined(CONFIG_CPU_SUBTYPE_SH7751R) 170#if defined(CONFIG_CPU_SUBTYPE_SH7750R) || defined(CONFIG_CPU_SUBTYPE_SH7751R)
171static struct intc_vect vectors_dma8[] = { 171static struct intc_vect vectors_dma8[] __initdata = {
172 INTC_VECT(DMAC_DMTE0, 0x640), INTC_VECT(DMAC_DMTE1, 0x660), 172 INTC_VECT(DMAC_DMTE0, 0x640), INTC_VECT(DMAC_DMTE1, 0x660),
173 INTC_VECT(DMAC_DMTE2, 0x680), INTC_VECT(DMAC_DMTE3, 0x6a0), 173 INTC_VECT(DMAC_DMTE2, 0x680), INTC_VECT(DMAC_DMTE3, 0x6a0),
174 INTC_VECT(DMAC_DMTE4, 0x780), INTC_VECT(DMAC_DMTE5, 0x7a0), 174 INTC_VECT(DMAC_DMTE4, 0x780), INTC_VECT(DMAC_DMTE5, 0x7a0),
@@ -176,7 +176,7 @@ static struct intc_vect vectors_dma8[] = {
176 INTC_VECT(DMAC_DMAE, 0x6c0), 176 INTC_VECT(DMAC_DMAE, 0x6c0),
177}; 177};
178 178
179static struct intc_group groups_dma8[] = { 179static struct intc_group groups_dma8[] __initdata = {
180 INTC_GROUP(DMAC, DMAC_DMTE0, DMAC_DMTE1, DMAC_DMTE2, 180 INTC_GROUP(DMAC, DMAC_DMTE0, DMAC_DMTE1, DMAC_DMTE2,
181 DMAC_DMTE3, DMAC_DMTE4, DMAC_DMTE5, 181 DMAC_DMTE3, DMAC_DMTE4, DMAC_DMTE5,
182 DMAC_DMTE6, DMAC_DMTE7, DMAC_DMAE), 182 DMAC_DMTE6, DMAC_DMTE7, DMAC_DMAE),
@@ -191,11 +191,11 @@ static DECLARE_INTC_DESC(intc_desc_dma8, "sh7750_dma8",
191#if defined(CONFIG_CPU_SUBTYPE_SH7750R) || \ 191#if defined(CONFIG_CPU_SUBTYPE_SH7750R) || \
192 defined(CONFIG_CPU_SUBTYPE_SH7751) || \ 192 defined(CONFIG_CPU_SUBTYPE_SH7751) || \
193 defined(CONFIG_CPU_SUBTYPE_SH7751R) 193 defined(CONFIG_CPU_SUBTYPE_SH7751R)
194static struct intc_vect vectors_tmu34[] = { 194static struct intc_vect vectors_tmu34[] __initdata = {
195 INTC_VECT(TMU3, 0xb00), INTC_VECT(TMU4, 0xb80), 195 INTC_VECT(TMU3, 0xb00), INTC_VECT(TMU4, 0xb80),
196}; 196};
197 197
198static struct intc_mask_reg mask_registers[] = { 198static struct intc_mask_reg mask_registers[] __initdata = {
199 { 0xfe080040, 0xfe080060, 32, /* INTMSK00 / INTMSKCLR00 */ 199 { 0xfe080040, 0xfe080060, 32, /* INTMSK00 / INTMSKCLR00 */
200 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
201 0, 0, 0, 0, 0, 0, TMU4, TMU3, 201 0, 0, 0, 0, 0, 0, TMU4, TMU3,
@@ -210,7 +210,7 @@ static DECLARE_INTC_DESC(intc_desc_tmu34, "sh7750_tmu34",
210#endif 210#endif
211 211
212/* SH7750S, SH7750R, SH7751 and SH7751R all have IRLM priority registers */ 212/* SH7750S, SH7750R, SH7751 and SH7751R all have IRLM priority registers */
213static struct intc_vect vectors_irlm[] = { 213static struct intc_vect vectors_irlm[] __initdata = {
214 INTC_VECT(IRL0, 0x240), INTC_VECT(IRL1, 0x2a0), 214 INTC_VECT(IRL0, 0x240), INTC_VECT(IRL1, 0x2a0),
215 INTC_VECT(IRL2, 0x300), INTC_VECT(IRL3, 0x360), 215 INTC_VECT(IRL2, 0x300), INTC_VECT(IRL3, 0x360),
216}; 216};
@@ -220,14 +220,14 @@ static DECLARE_INTC_DESC(intc_desc_irlm, "sh7750_irlm", vectors_irlm, NULL,
220 220
221/* SH7751 and SH7751R both have PCI */ 221/* SH7751 and SH7751R both have PCI */
222#if defined(CONFIG_CPU_SUBTYPE_SH7751) || defined(CONFIG_CPU_SUBTYPE_SH7751R) 222#if defined(CONFIG_CPU_SUBTYPE_SH7751) || defined(CONFIG_CPU_SUBTYPE_SH7751R)
223static struct intc_vect vectors_pci[] = { 223static struct intc_vect vectors_pci[] __initdata = {
224 INTC_VECT(PCIC0_PCISERR, 0xa00), INTC_VECT(PCIC1_PCIERR, 0xae0), 224 INTC_VECT(PCIC0_PCISERR, 0xa00), INTC_VECT(PCIC1_PCIERR, 0xae0),
225 INTC_VECT(PCIC1_PCIPWDWN, 0xac0), INTC_VECT(PCIC1_PCIPWON, 0xaa0), 225 INTC_VECT(PCIC1_PCIPWDWN, 0xac0), INTC_VECT(PCIC1_PCIPWON, 0xaa0),
226 INTC_VECT(PCIC1_PCIDMA0, 0xa80), INTC_VECT(PCIC1_PCIDMA1, 0xa60), 226 INTC_VECT(PCIC1_PCIDMA0, 0xa80), INTC_VECT(PCIC1_PCIDMA1, 0xa60),
227 INTC_VECT(PCIC1_PCIDMA2, 0xa40), INTC_VECT(PCIC1_PCIDMA3, 0xa20), 227 INTC_VECT(PCIC1_PCIDMA2, 0xa40), INTC_VECT(PCIC1_PCIDMA3, 0xa20),
228}; 228};
229 229
230static struct intc_group groups_pci[] = { 230static struct intc_group groups_pci[] __initdata = {
231 INTC_GROUP(PCIC1, PCIC1_PCIERR, PCIC1_PCIPWDWN, PCIC1_PCIPWON, 231 INTC_GROUP(PCIC1, PCIC1_PCIERR, PCIC1_PCIPWDWN, PCIC1_PCIPWON,
232 PCIC1_PCIDMA0, PCIC1_PCIDMA1, PCIC1_PCIDMA2, PCIC1_PCIDMA3), 232 PCIC1_PCIDMA0, PCIC1_PCIDMA1, PCIC1_PCIDMA2, PCIC1_PCIDMA3),
233}; 233};
@@ -282,13 +282,19 @@ void __init plat_irq_setup(void)
282#define INTC_ICR 0xffd00000UL 282#define INTC_ICR 0xffd00000UL
283#define INTC_ICR_IRLM (1<<7) 283#define INTC_ICR_IRLM (1<<7)
284 284
285/* enable individual interrupt mode for external interupts */ 285void __init plat_irq_setup_pins(int mode)
286void __init ipr_irq_enable_irlm(void)
287{ 286{
288#if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7091) 287#if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7091)
289 BUG(); /* impossible to mask interrupts on SH7750 and SH7091 */ 288 BUG(); /* impossible to mask interrupts on SH7750 and SH7091 */
289 return;
290#endif 290#endif
291 register_intc_controller(&intc_desc_irlm);
292 291
293 ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); 292 switch (mode) {
293 case IRQ_MODE_IRQ: /* individual interrupt mode for IRL3-0 */
294 ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR);
295 register_intc_controller(&intc_desc_irlm);
296 break;
297 default:
298 BUG();
299 }
294} 300}
diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7760.c b/arch/sh/kernel/cpu/sh4/setup-sh7760.c
index 47fa27056253..7a898cb1d940 100644
--- a/arch/sh/kernel/cpu/sh4/setup-sh7760.c
+++ b/arch/sh/kernel/cpu/sh4/setup-sh7760.c
@@ -12,6 +12,136 @@
12#include <linux/serial.h> 12#include <linux/serial.h>
13#include <asm/sci.h> 13#include <asm/sci.h>
14 14
15enum {
16 UNUSED = 0,
17
18 /* interrupt sources */
19 IRL0, IRL1, IRL2, IRL3,
20 HUDI, GPIOI,
21 DMAC_DMTE0, DMAC_DMTE1, DMAC_DMTE2, DMAC_DMTE3,
22 DMAC_DMTE4, DMAC_DMTE5, DMAC_DMTE6, DMAC_DMTE7,
23 DMAC_DMAE,
24 IRQ4, IRQ5, IRQ6, IRQ7,
25 HCAN20, HCAN21,
26 SSI0, SSI1,
27 HAC0, HAC1,
28 I2C0, I2C1,
29 USB, LCDC,
30 DMABRG0, DMABRG1, DMABRG2,
31 SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI,
32 SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI,
33 SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI,
34 SIM_ERI, SIM_RXI, SIM_TXI, SIM_TEI,
35 HSPI,
36 MMCIF0, MMCIF1, MMCIF2, MMCIF3,
37 MFI, ADC, CMT,
38 TMU0, TMU1, TMU2_TUNI, TMU2_TICPI,
39 WDT,
40 REF_RCMI, REF_ROVI,
41
42 /* interrupt groups */
43 DMAC, DMABRG, SCIF0, SCIF1, SCIF2, SIM, MMCIF, TMU2, REF,
44};
45
46static struct intc_vect vectors[] __initdata = {
47 INTC_VECT(HUDI, 0x600), INTC_VECT(GPIOI, 0x620),
48 INTC_VECT(DMAC_DMTE0, 0x640), INTC_VECT(DMAC_DMTE1, 0x660),
49 INTC_VECT(DMAC_DMTE2, 0x680), INTC_VECT(DMAC_DMTE3, 0x6a0),
50 INTC_VECT(DMAC_DMTE4, 0x780), INTC_VECT(DMAC_DMTE5, 0x7a0),
51 INTC_VECT(DMAC_DMTE6, 0x7c0), INTC_VECT(DMAC_DMTE7, 0x7e0),
52 INTC_VECT(DMAC_DMAE, 0x6c0),
53 INTC_VECT(IRQ4, 0x800), INTC_VECT(IRQ5, 0x820),
54 INTC_VECT(IRQ6, 0x840), INTC_VECT(IRQ6, 0x860),
55 INTC_VECT(HCAN20, 0x900), INTC_VECT(HCAN21, 0x920),
56 INTC_VECT(SSI0, 0x940), INTC_VECT(SSI1, 0x960),
57 INTC_VECT(HAC0, 0x980), INTC_VECT(HAC1, 0x9a0),
58 INTC_VECT(I2C0, 0x9c0), INTC_VECT(I2C1, 0x9e0),
59 INTC_VECT(USB, 0xa00), INTC_VECT(LCDC, 0xa20),
60 INTC_VECT(DMABRG0, 0xa80), INTC_VECT(DMABRG1, 0xaa0),
61 INTC_VECT(DMABRG2, 0xac0),
62 INTC_VECT(SCIF0_ERI, 0x880), INTC_VECT(SCIF0_RXI, 0x8a0),
63 INTC_VECT(SCIF0_BRI, 0x8c0), INTC_VECT(SCIF0_TXI, 0x8e0),
64 INTC_VECT(SCIF1_ERI, 0xb00), INTC_VECT(SCIF1_RXI, 0xb20),
65 INTC_VECT(SCIF1_BRI, 0xb40), INTC_VECT(SCIF1_TXI, 0xb60),
66 INTC_VECT(SCIF2_ERI, 0xb80), INTC_VECT(SCIF2_RXI, 0xba0),
67 INTC_VECT(SCIF2_BRI, 0xbc0), INTC_VECT(SCIF2_TXI, 0xbe0),
68 INTC_VECT(SIM_ERI, 0xc00), INTC_VECT(SIM_RXI, 0xc20),
69 INTC_VECT(SIM_TXI, 0xc40), INTC_VECT(SIM_TEI, 0xc60),
70 INTC_VECT(HSPI, 0xc80),
71 INTC_VECT(MMCIF0, 0xd00), INTC_VECT(MMCIF1, 0xd20),
72 INTC_VECT(MMCIF2, 0xd40), INTC_VECT(MMCIF3, 0xd60),
73 INTC_VECT(MFI, 0xe80), /* 0xf80 according to data sheet */
74 INTC_VECT(ADC, 0xf80), INTC_VECT(CMT, 0xfa0),
75 INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
76 INTC_VECT(TMU2_TUNI, 0x440), INTC_VECT(TMU2_TICPI, 0x460),
77 INTC_VECT(WDT, 0x560),
78 INTC_VECT(REF_RCMI, 0x580), INTC_VECT(REF_ROVI, 0x5a0),
79};
80
81static struct intc_group groups[] __initdata = {
82 INTC_GROUP(DMAC, DMAC_DMTE0, DMAC_DMTE1, DMAC_DMTE2,
83 DMAC_DMTE3, DMAC_DMTE4, DMAC_DMTE5,
84 DMAC_DMTE6, DMAC_DMTE7, DMAC_DMAE),
85 INTC_GROUP(DMABRG, DMABRG0, DMABRG1, DMABRG2),
86 INTC_GROUP(SCIF0, SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI),
87 INTC_GROUP(SCIF1, SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI),
88 INTC_GROUP(SCIF2, SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI),
89 INTC_GROUP(SIM, SIM_ERI, SIM_RXI, SIM_TXI, SIM_TEI),
90 INTC_GROUP(MMCIF, MMCIF0, MMCIF1, MMCIF2, MMCIF3),
91 INTC_GROUP(TMU2, TMU2_TUNI, TMU2_TICPI),
92 INTC_GROUP(REF, REF_RCMI, REF_ROVI),
93};
94
95static struct intc_prio priorities[] __initdata = {
96 INTC_PRIO(SCIF0, 3),
97 INTC_PRIO(SCIF1, 3),
98 INTC_PRIO(SCIF2, 3),
99 INTC_PRIO(SIM, 3),
100 INTC_PRIO(DMAC, 7),
101 INTC_PRIO(DMABRG, 13),
102};
103
104static struct intc_mask_reg mask_registers[] __initdata = {
105 { 0xfe080040, 0xfe080060, 32, /* INTMSK00 / INTMSKCLR00 */
106 { IRQ4, IRQ5, IRQ6, IRQ7, 0, 0, HCAN20, HCAN21,
107 SSI0, SSI1, HAC0, HAC1, I2C0, I2C1, USB, LCDC,
108 0, DMABRG0, DMABRG1, DMABRG2,
109 SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI,
110 SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI,
111 SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI, } },
112 { 0xfe080044, 0xfe080064, 32, /* INTMSK04 / INTMSKCLR04 */
113 { 0, 0, 0, 0, 0, 0, 0, 0,
114 SIM_ERI, SIM_RXI, SIM_TXI, SIM_TEI,
115 HSPI, MMCIF0, MMCIF1, MMCIF2,
116 MMCIF3, 0, 0, 0, 0, 0, 0, 0,
117 0, MFI, 0, 0, 0, 0, ADC, CMT, } },
118};
119
120static struct intc_prio_reg prio_registers[] __initdata = {
121 { 0xffd00004, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2 } },
122 { 0xffd00008, 0, 16, 4, /* IPRB */ { WDT, REF, 0, 0 } },
123 { 0xffd0000c, 0, 16, 4, /* IPRC */ { GPIOI, DMAC, 0, HUDI } },
124 { 0xffd00010, 0, 16, 4, /* IPRD */ { IRL0, IRL1, IRL2, IRL3 } },
125 { 0xfe080000, 0, 32, 4, /* INTPRI00 */ { IRQ4, IRQ5, IRQ6, IRQ7 } },
126 { 0xfe080004, 0, 32, 4, /* INTPRI04 */ { HCAN20, HCAN21, SSI0, SSI1,
127 HAC0, HAC1, I2C0, I2C1 } },
128 { 0xfe080008, 0, 32, 4, /* INTPRI08 */ { USB, LCDC, DMABRG, SCIF0,
129 SCIF1, SCIF2, SIM, HSPI } },
130 { 0xfe08000c, 0, 32, 4, /* INTPRI0C */ { 0, 0, MMCIF, 0,
131 MFI, 0, ADC, CMT } },
132};
133
134static DECLARE_INTC_DESC(intc_desc, "sh7760", vectors, groups,
135 priorities, mask_registers, prio_registers, NULL);
136
137static struct intc_vect vectors_irq[] __initdata = {
138 INTC_VECT(IRL0, 0x240), INTC_VECT(IRL1, 0x2a0),
139 INTC_VECT(IRL2, 0x300), INTC_VECT(IRL3, 0x360),
140};
141
142static DECLARE_INTC_DESC(intc_desc_irq, "sh7760-irq", vectors_irq, groups,
143 priorities, mask_registers, prio_registers, NULL);
144
15static struct plat_sci_port sci_platform_data[] = { 145static struct plat_sci_port sci_platform_data[] = {
16 { 146 {
17 .mapbase = 0xfe600000, 147 .mapbase = 0xfe600000,
@@ -29,6 +159,11 @@ static struct plat_sci_port sci_platform_data[] = {
29 .type = PORT_SCIF, 159 .type = PORT_SCIF,
30 .irqs = { 76, 77, 79, 78 }, 160 .irqs = { 76, 77, 79, 78 },
31 }, { 161 }, {
162 .mapbase = 0xfe480000,
163 .flags = UPF_BOOT_AUTOCONF,
164 .type = PORT_SCI,
165 .irqs = { 80, 81, 82, 0 },
166 }, {
32 .flags = 0, 167 .flags = 0,
33 } 168 }
34}; 169};
@@ -52,114 +187,18 @@ static int __init sh7760_devices_setup(void)
52} 187}
53__initcall(sh7760_devices_setup); 188__initcall(sh7760_devices_setup);
54 189
55static struct intc2_data intc2_irq_table[] = { 190void __init plat_irq_setup_pins(int mode)
56 {48, 0, 28, 0, 31, 3}, /* IRQ 4 */ 191{
57 {49, 0, 24, 0, 30, 3}, /* IRQ 3 */ 192 switch (mode) {
58 {50, 0, 20, 0, 29, 3}, /* IRQ 2 */ 193 case IRQ_MODE_IRQ:
59 {51, 0, 16, 0, 28, 3}, /* IRQ 1 */ 194 register_intc_controller(&intc_desc_irq);
60 {56, 4, 28, 0, 25, 3}, /* HCAN2_CHAN0 */ 195 break;
61 {57, 4, 24, 0, 24, 3}, /* HCAN2_CHAN1 */ 196 default:
62 {58, 4, 20, 0, 23, 3}, /* I2S_CHAN0 */ 197 BUG();
63 {59, 4, 16, 0, 22, 3}, /* I2S_CHAN1 */ 198 }
64 {60, 4, 12, 0, 21, 3}, /* AC97_CHAN0 */ 199}
65 {61, 4, 8, 0, 20, 3}, /* AC97_CHAN1 */
66 {62, 4, 4, 0, 19, 3}, /* I2C_CHAN0 */
67 {63, 4, 0, 0, 18, 3}, /* I2C_CHAN1 */
68 {52, 8, 16, 0, 11, 3}, /* SCIF0_ERI_IRQ */
69 {53, 8, 16, 0, 10, 3}, /* SCIF0_RXI_IRQ */
70 {54, 8, 16, 0, 9, 3}, /* SCIF0_BRI_IRQ */
71 {55, 8, 16, 0, 8, 3}, /* SCIF0_TXI_IRQ */
72 {64, 8, 28, 0, 17, 3}, /* USBHI_IRQ */
73 {65, 8, 24, 0, 16, 3}, /* LCDC */
74 {68, 8, 20, 0, 14, 13}, /* DMABRGI0_IRQ */
75 {69, 8, 20, 0, 13, 13}, /* DMABRGI1_IRQ */
76 {70, 8, 20, 0, 12, 13}, /* DMABRGI2_IRQ */
77 {72, 8, 12, 0, 7, 3}, /* SCIF1_ERI_IRQ */
78 {73, 8, 12, 0, 6, 3}, /* SCIF1_RXI_IRQ */
79 {74, 8, 12, 0, 5, 3}, /* SCIF1_BRI_IRQ */
80 {75, 8, 12, 0, 4, 3}, /* SCIF1_TXI_IRQ */
81 {76, 8, 8, 0, 3, 3}, /* SCIF2_ERI_IRQ */
82 {77, 8, 8, 0, 2, 3}, /* SCIF2_RXI_IRQ */
83 {78, 8, 8, 0, 1, 3}, /* SCIF2_BRI_IRQ */
84 {79, 8, 8, 0, 0, 3}, /* SCIF2_TXI_IRQ */
85 {80, 8, 4, 4, 23, 3}, /* SIM_ERI */
86 {81, 8, 4, 4, 22, 3}, /* SIM_RXI */
87 {82, 8, 4, 4, 21, 3}, /* SIM_TXI */
88 {83, 8, 4, 4, 20, 3}, /* SIM_TEI */
89 {84, 8, 0, 4, 19, 3}, /* HSPII */
90 {88, 12, 20, 4, 18, 3}, /* MMCI0 */
91 {89, 12, 20, 4, 17, 3}, /* MMCI1 */
92 {90, 12, 20, 4, 16, 3}, /* MMCI2 */
93 {91, 12, 20, 4, 15, 3}, /* MMCI3 */
94 {92, 12, 12, 4, 6, 3}, /* MFI */
95 {108,12, 4, 4, 1, 3}, /* ADC */
96 {109,12, 0, 4, 0, 3}, /* CMTI */
97};
98
99static struct intc2_desc intc2_irq_desc __read_mostly = {
100 .prio_base = 0xfe080000,
101 .msk_base = 0xfe080040,
102 .mskclr_base = 0xfe080060,
103
104 .intc2_data = intc2_irq_table,
105 .nr_irqs = ARRAY_SIZE(intc2_irq_table),
106
107 .chip = {
108 .name = "INTC2-sh7760",
109 },
110};
111
112static struct ipr_data ipr_irq_table[] = {
113 /* IRQ, IPR-idx, shift, priority */
114 { 16, 0, 12, 2 }, /* TMU0 TUNI*/
115 { 17, 0, 8, 2 }, /* TMU1 TUNI */
116 { 18, 0, 4, 2 }, /* TMU2 TUNI */
117 { 19, 0, 4, 2 }, /* TMU2 TIPCI */
118 { 27, 1, 12, 2 }, /* WDT ITI */
119 { 28, 1, 8, 2 }, /* REF RCMI */
120 { 29, 1, 8, 2 }, /* REF ROVI */
121 { 32, 2, 0, 7 }, /* HUDI */
122 { 33, 2, 12, 7 }, /* GPIOI */
123 { 34, 2, 8, 7 }, /* DMAC DMTE0 */
124 { 35, 2, 8, 7 }, /* DMAC DMTE1 */
125 { 36, 2, 8, 7 }, /* DMAC DMTE2 */
126 { 37, 2, 8, 7 }, /* DMAC DMTE3 */
127 { 38, 2, 8, 7 }, /* DMAC DMAE */
128 { 44, 2, 8, 7 }, /* DMAC DMTE4 */
129 { 45, 2, 8, 7 }, /* DMAC DMTE5 */
130 { 46, 2, 8, 7 }, /* DMAC DMTE6 */
131 { 47, 2, 8, 7 }, /* DMAC DMTE7 */
132/* these here are only valid if INTC_ICR bit 7 is set to 1!
133 * XXX: maybe CONFIG_SH_IRLMODE symbol? SH7751 could use it too */
134#if 0
135 { 2, 3, 12, 3 }, /* IRL0 */
136 { 5, 3, 8, 3 }, /* IRL1 */
137 { 8, 3, 4, 3 }, /* IRL2 */
138 { 11, 3, 0, 3 }, /* IRL3 */
139#endif
140};
141
142static unsigned long ipr_offsets[] = {
143 0xffd00004UL, /* 0: IPRA */
144 0xffd00008UL, /* 1: IPRB */
145 0xffd0000cUL, /* 2: IPRC */
146 0xffd00010UL, /* 3: IPRD */
147};
148
149static struct ipr_desc ipr_irq_desc = {
150 .ipr_offsets = ipr_offsets,
151 .nr_offsets = ARRAY_SIZE(ipr_offsets),
152
153 .ipr_data = ipr_irq_table,
154 .nr_irqs = ARRAY_SIZE(ipr_irq_table),
155
156 .chip = {
157 .name = "IPR-sh7760",
158 },
159};
160 200
161void __init plat_irq_setup(void) 201void __init plat_irq_setup(void)
162{ 202{
163 register_intc2_controller(&intc2_irq_desc); 203 register_intc_controller(&intc_desc);
164 register_ipr_controller(&ipr_irq_desc);
165} 204}
diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c
index c21512c6044e..b22a78c807e6 100644
--- a/arch/sh/kernel/cpu/sh4/sq.c
+++ b/arch/sh/kernel/cpu/sh4/sq.c
@@ -58,11 +58,11 @@ do { \
58 */ 58 */
59void sq_flush_range(unsigned long start, unsigned int len) 59void sq_flush_range(unsigned long start, unsigned int len)
60{ 60{
61 volatile unsigned long *sq = (unsigned long *)start; 61 unsigned long *sq = (unsigned long *)start;
62 62
63 /* Flush the queues */ 63 /* Flush the queues */
64 for (len >>= 5; len--; sq += 8) 64 for (len >>= 5; len--; sq += 8)
65 prefetchw((void *)sq); 65 prefetchw(sq);
66 66
67 /* Wait for completion */ 67 /* Wait for completion */
68 store_queue_barrier(); 68 store_queue_barrier();
diff --git a/arch/sh/kernel/cpu/sh4a/Makefile b/arch/sh/kernel/cpu/sh4a/Makefile
index e6a1fb5f8484..24539873943a 100644
--- a/arch/sh/kernel/cpu/sh4a/Makefile
+++ b/arch/sh/kernel/cpu/sh4a/Makefile
@@ -10,6 +10,9 @@ obj-$(CONFIG_CPU_SUBTYPE_SH7343) += setup-sh7343.o
10obj-$(CONFIG_CPU_SUBTYPE_SH7722) += setup-sh7722.o 10obj-$(CONFIG_CPU_SUBTYPE_SH7722) += setup-sh7722.o
11obj-$(CONFIG_CPU_SUBTYPE_SHX3) += setup-shx3.o 11obj-$(CONFIG_CPU_SUBTYPE_SHX3) += setup-shx3.o
12 12
13# SMP setup
14smp-$(CONFIG_CPU_SUBTYPE_SHX3) := smp-shx3.o
15
13# Primary on-chip clocks (common) 16# Primary on-chip clocks (common)
14clock-$(CONFIG_CPU_SUBTYPE_SH7770) := clock-sh7770.o 17clock-$(CONFIG_CPU_SUBTYPE_SH7770) := clock-sh7770.o
15clock-$(CONFIG_CPU_SUBTYPE_SH7780) := clock-sh7780.o 18clock-$(CONFIG_CPU_SUBTYPE_SH7780) := clock-sh7780.o
@@ -18,4 +21,5 @@ clock-$(CONFIG_CPU_SUBTYPE_SH7343) := clock-sh7343.o
18clock-$(CONFIG_CPU_SUBTYPE_SH7722) := clock-sh7722.o 21clock-$(CONFIG_CPU_SUBTYPE_SH7722) := clock-sh7722.o
19clock-$(CONFIG_CPU_SUBTYPE_SHX3) := clock-shx3.o 22clock-$(CONFIG_CPU_SUBTYPE_SHX3) := clock-shx3.o
20 23
21obj-y += $(clock-y) 24obj-y += $(clock-y)
25obj-$(CONFIG_SMP) += $(smp-y)
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7343.c b/arch/sh/kernel/cpu/sh4a/setup-sh7343.c
index 91d61cf91ba1..c0a3f079dfdc 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7343.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7343.c
@@ -41,3 +41,7 @@ static int __init sh7343_devices_setup(void)
41 ARRAY_SIZE(sh7343_devices)); 41 ARRAY_SIZE(sh7343_devices));
42} 42}
43__initcall(sh7343_devices_setup); 43__initcall(sh7343_devices_setup);
44
45void __init plat_irq_setup(void)
46{
47}
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
index 25b913e07e2c..55f66104431d 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
@@ -84,7 +84,7 @@ enum {
84 SIM, RTC, DMAC0123, VIOVOU, USB, DMAC45, FLCTL, I2C, SDHI, 84 SIM, RTC, DMAC0123, VIOVOU, USB, DMAC45, FLCTL, I2C, SDHI,
85}; 85};
86 86
87static struct intc_vect vectors[] = { 87static struct intc_vect vectors[] __initdata = {
88 INTC_VECT(IRQ0, 0x600), INTC_VECT(IRQ1, 0x620), 88 INTC_VECT(IRQ0, 0x600), INTC_VECT(IRQ1, 0x620),
89 INTC_VECT(IRQ2, 0x640), INTC_VECT(IRQ3, 0x660), 89 INTC_VECT(IRQ2, 0x640), INTC_VECT(IRQ3, 0x660),
90 INTC_VECT(IRQ4, 0x680), INTC_VECT(IRQ5, 0x6a0), 90 INTC_VECT(IRQ4, 0x680), INTC_VECT(IRQ5, 0x6a0),
@@ -117,7 +117,7 @@ static struct intc_vect vectors[] = {
117 INTC_VECT(JPU, 0x560), INTC_VECT(LCDC, 0x580), 117 INTC_VECT(JPU, 0x560), INTC_VECT(LCDC, 0x580),
118}; 118};
119 119
120static struct intc_group groups[] = { 120static struct intc_group groups[] __initdata = {
121 INTC_GROUP(SIM, SIM_ERI, SIM_RXI, SIM_TXI, SIM_TEI), 121 INTC_GROUP(SIM, SIM_ERI, SIM_RXI, SIM_TXI, SIM_TEI),
122 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI), 122 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI),
123 INTC_GROUP(DMAC0123, DMAC0, DMAC1, DMAC2, DMAC3), 123 INTC_GROUP(DMAC0123, DMAC0, DMAC1, DMAC2, DMAC3),
@@ -130,7 +130,7 @@ static struct intc_group groups[] = {
130 INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2, SDHI3), 130 INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2, SDHI3),
131}; 131};
132 132
133static struct intc_prio priorities[] = { 133static struct intc_prio priorities[] __initdata = {
134 INTC_PRIO(SCIF0, 3), 134 INTC_PRIO(SCIF0, 3),
135 INTC_PRIO(SCIF1, 3), 135 INTC_PRIO(SCIF1, 3),
136 INTC_PRIO(SCIF2, 3), 136 INTC_PRIO(SCIF2, 3),
@@ -138,7 +138,7 @@ static struct intc_prio priorities[] = {
138 INTC_PRIO(TMU1, 2), 138 INTC_PRIO(TMU1, 2),
139}; 139};
140 140
141static struct intc_mask_reg mask_registers[] = { 141static struct intc_mask_reg mask_registers[] __initdata = {
142 { 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */ 142 { 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */
143 { } }, 143 { } },
144 { 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */ 144 { 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */
@@ -168,24 +168,24 @@ static struct intc_mask_reg mask_registers[] = {
168 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } }, 168 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
169}; 169};
170 170
171static struct intc_prio_reg prio_registers[] = { 171static struct intc_prio_reg prio_registers[] __initdata = {
172 { 0xa4080000, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, IRDA } }, 172 { 0xa4080000, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, IRDA } },
173 { 0xa4080004, 16, 4, /* IPRB */ { JPU, LCDC, SIM } }, 173 { 0xa4080004, 0, 16, 4, /* IPRB */ { JPU, LCDC, SIM } },
174 { 0xa4080008, 16, 4, /* IPRC */ { } }, 174 { 0xa4080008, 0, 16, 4, /* IPRC */ { } },
175 { 0xa408000c, 16, 4, /* IPRD */ { } }, 175 { 0xa408000c, 0, 16, 4, /* IPRD */ { } },
176 { 0xa4080010, 16, 4, /* IPRE */ { DMAC0123, VIOVOU, 0, VPU } }, 176 { 0xa4080010, 0, 16, 4, /* IPRE */ { DMAC0123, VIOVOU, 0, VPU } },
177 { 0xa4080014, 16, 4, /* IPRF */ { KEYSC, DMAC45, USB, CMT } }, 177 { 0xa4080014, 0, 16, 4, /* IPRF */ { KEYSC, DMAC45, USB, CMT } },
178 { 0xa4080018, 16, 4, /* IPRG */ { SCIF0, SCIF1, SCIF2 } }, 178 { 0xa4080018, 0, 16, 4, /* IPRG */ { SCIF0, SCIF1, SCIF2 } },
179 { 0xa408001c, 16, 4, /* IPRH */ { SIOF0, SIOF1, FLCTL, I2C } }, 179 { 0xa408001c, 0, 16, 4, /* IPRH */ { SIOF0, SIOF1, FLCTL, I2C } },
180 { 0xa4080020, 16, 4, /* IPRI */ { SIO, 0, TSIF, RTC } }, 180 { 0xa4080020, 0, 16, 4, /* IPRI */ { SIO, 0, TSIF, RTC } },
181 { 0xa4080024, 16, 4, /* IPRJ */ { 0, 0, SIU } }, 181 { 0xa4080024, 0, 16, 4, /* IPRJ */ { 0, 0, SIU } },
182 { 0xa4080028, 16, 4, /* IPRK */ { 0, 0, 0, SDHI } }, 182 { 0xa4080028, 0, 16, 4, /* IPRK */ { 0, 0, 0, SDHI } },
183 { 0xa408002c, 16, 4, /* IPRL */ { TWODG, 0, TPU } }, 183 { 0xa408002c, 0, 16, 4, /* IPRL */ { TWODG, 0, TPU } },
184 { 0xa4140010, 32, 4, /* INTPRI00 */ 184 { 0xa4140010, 0, 32, 4, /* INTPRI00 */
185 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } }, 185 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
186}; 186};
187 187
188static struct intc_sense_reg sense_registers[] = { 188static struct intc_sense_reg sense_registers[] __initdata = {
189 { 0xa414001c, 16, 2, /* ICR1 */ 189 { 0xa414001c, 16, 2, /* ICR1 */
190 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } }, 190 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
191}; 191};
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7770.c b/arch/sh/kernel/cpu/sh4a/setup-sh7770.c
index 6a04cc5f5aca..32f4f59a837b 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7770.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7770.c
@@ -51,3 +51,7 @@ static int __init sh7770_devices_setup(void)
51 ARRAY_SIZE(sh7770_devices)); 51 ARRAY_SIZE(sh7770_devices));
52} 52}
53__initcall(sh7770_devices_setup); 53__initcall(sh7770_devices_setup);
54
55void __init plat_irq_setup(void)
56{
57}
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c
index a4127ec15203..e8fd33ff0605 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c
@@ -10,6 +10,7 @@
10#include <linux/platform_device.h> 10#include <linux/platform_device.h>
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/serial.h> 12#include <linux/serial.h>
13#include <linux/io.h>
13#include <asm/sci.h> 14#include <asm/sci.h>
14 15
15static struct resource rtc_resources[] = { 16static struct resource rtc_resources[] = {
@@ -114,7 +115,7 @@ enum {
114 PCIC5, SCIF1, MMCIF, TMU345, FLCTL, GPIO, 115 PCIC5, SCIF1, MMCIF, TMU345, FLCTL, GPIO,
115}; 116};
116 117
117static struct intc_vect vectors[] = { 118static struct intc_vect vectors[] __initdata = {
118 INTC_VECT(RTC_ATI, 0x480), INTC_VECT(RTC_PRI, 0x4a0), 119 INTC_VECT(RTC_ATI, 0x480), INTC_VECT(RTC_PRI, 0x4a0),
119 INTC_VECT(RTC_CUI, 0x4c0), 120 INTC_VECT(RTC_CUI, 0x4c0),
120 INTC_VECT(WDT, 0x560), 121 INTC_VECT(WDT, 0x560),
@@ -150,7 +151,7 @@ static struct intc_vect vectors[] = {
150 INTC_VECT(GPIOI2, 0xfc0), INTC_VECT(GPIOI3, 0xfe0), 151 INTC_VECT(GPIOI2, 0xfc0), INTC_VECT(GPIOI3, 0xfe0),
151}; 152};
152 153
153static struct intc_group groups[] = { 154static struct intc_group groups[] __initdata = {
154 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI), 155 INTC_GROUP(RTC, RTC_ATI, RTC_PRI, RTC_CUI),
155 INTC_GROUP(TMU012, TMU0, TMU1, TMU2, TMU2_TICPI), 156 INTC_GROUP(TMU012, TMU0, TMU1, TMU2, TMU2_TICPI),
156 INTC_GROUP(DMAC0, DMAC0_DMINT0, DMAC0_DMINT1, DMAC0_DMINT2, 157 INTC_GROUP(DMAC0, DMAC0_DMINT0, DMAC0_DMINT1, DMAC0_DMINT2,
@@ -167,12 +168,12 @@ static struct intc_group groups[] = {
167 INTC_GROUP(GPIO, GPIOI0, GPIOI1, GPIOI2, GPIOI3), 168 INTC_GROUP(GPIO, GPIOI0, GPIOI1, GPIOI2, GPIOI3),
168}; 169};
169 170
170static struct intc_prio priorities[] = { 171static struct intc_prio priorities[] __initdata = {
171 INTC_PRIO(SCIF0, 3), 172 INTC_PRIO(SCIF0, 3),
172 INTC_PRIO(SCIF1, 3), 173 INTC_PRIO(SCIF1, 3),
173}; 174};
174 175
175static struct intc_mask_reg mask_registers[] = { 176static struct intc_mask_reg mask_registers[] __initdata = {
176 { 0xffd40038, 0xffd4003c, 32, /* INT2MSKR / INT2MSKCR */ 177 { 0xffd40038, 0xffd4003c, 32, /* INT2MSKR / INT2MSKCR */
177 { 0, 0, 0, 0, 0, 0, GPIO, FLCTL, 178 { 0, 0, 0, 0, 0, 0, GPIO, FLCTL,
178 SSI, MMCIF, HSPI, SIOF, PCIC5, PCIINTD, PCIINTC, PCIINTB, 179 SSI, MMCIF, HSPI, SIOF, PCIC5, PCIINTD, PCIINTC, PCIINTB,
@@ -180,16 +181,18 @@ static struct intc_mask_reg mask_registers[] = {
180 HUDI, 0, WDT, SCIF1, SCIF0, RTC, TMU345, TMU012 } }, 181 HUDI, 0, WDT, SCIF1, SCIF0, RTC, TMU345, TMU012 } },
181}; 182};
182 183
183static struct intc_prio_reg prio_registers[] = { 184static struct intc_prio_reg prio_registers[] __initdata = {
184 { 0xffd40000, 32, 8, /* INT2PRI0 */ { TMU0, TMU1, TMU2, TMU2_TICPI } }, 185 { 0xffd40000, 0, 32, 8, /* INT2PRI0 */ { TMU0, TMU1,
185 { 0xffd40004, 32, 8, /* INT2PRI1 */ { TMU3, TMU4, TMU5, RTC } }, 186 TMU2, TMU2_TICPI } },
186 { 0xffd40008, 32, 8, /* INT2PRI2 */ { SCIF0, SCIF1, WDT } }, 187 { 0xffd40004, 0, 32, 8, /* INT2PRI1 */ { TMU3, TMU4, TMU5, RTC } },
187 { 0xffd4000c, 32, 8, /* INT2PRI3 */ { HUDI, DMAC0, DMAC1 } }, 188 { 0xffd40008, 0, 32, 8, /* INT2PRI2 */ { SCIF0, SCIF1, WDT } },
188 { 0xffd40010, 32, 8, /* INT2PRI4 */ { CMT, HAC, PCISERR, PCIINTA, } }, 189 { 0xffd4000c, 0, 32, 8, /* INT2PRI3 */ { HUDI, DMAC0, DMAC1 } },
189 { 0xffd40014, 32, 8, /* INT2PRI5 */ { PCIINTB, PCIINTC, 190 { 0xffd40010, 0, 32, 8, /* INT2PRI4 */ { CMT, HAC,
190 PCIINTD, PCIC5 } }, 191 PCISERR, PCIINTA, } },
191 { 0xffd40018, 32, 8, /* INT2PRI6 */ { SIOF, HSPI, MMCIF, SSI } }, 192 { 0xffd40014, 0, 32, 8, /* INT2PRI5 */ { PCIINTB, PCIINTC,
192 { 0xffd4001c, 32, 8, /* INT2PRI7 */ { FLCTL, GPIO } }, 193 PCIINTD, PCIC5 } },
194 { 0xffd40018, 0, 32, 8, /* INT2PRI6 */ { SIOF, HSPI, MMCIF, SSI } },
195 { 0xffd4001c, 0, 32, 8, /* INT2PRI7 */ { FLCTL, GPIO } },
193}; 196};
194 197
195static DECLARE_INTC_DESC(intc_desc, "sh7780", vectors, groups, priorities, 198static DECLARE_INTC_DESC(intc_desc, "sh7780", vectors, groups, priorities,
@@ -197,24 +200,24 @@ static DECLARE_INTC_DESC(intc_desc, "sh7780", vectors, groups, priorities,
197 200
198/* Support for external interrupt pins in IRQ mode */ 201/* Support for external interrupt pins in IRQ mode */
199 202
200static struct intc_vect irq_vectors[] = { 203static struct intc_vect irq_vectors[] __initdata = {
201 INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280), 204 INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280),
202 INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300), 205 INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300),
203 INTC_VECT(IRQ4, 0x340), INTC_VECT(IRQ5, 0x380), 206 INTC_VECT(IRQ4, 0x340), INTC_VECT(IRQ5, 0x380),
204 INTC_VECT(IRQ6, 0x3c0), INTC_VECT(IRQ7, 0x200), 207 INTC_VECT(IRQ6, 0x3c0), INTC_VECT(IRQ7, 0x200),
205}; 208};
206 209
207static struct intc_mask_reg irq_mask_registers[] = { 210static struct intc_mask_reg irq_mask_registers[] __initdata = {
208 { 0xffd00044, 0xffd00064, 32, /* INTMSK0 / INTMSKCLR0 */ 211 { 0xffd00044, 0xffd00064, 32, /* INTMSK0 / INTMSKCLR0 */
209 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } }, 212 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
210}; 213};
211 214
212static struct intc_prio_reg irq_prio_registers[] = { 215static struct intc_prio_reg irq_prio_registers[] __initdata = {
213 { 0xffd00010, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3, 216 { 0xffd00010, 0, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3,
214 IRQ4, IRQ5, IRQ6, IRQ7 } }, 217 IRQ4, IRQ5, IRQ6, IRQ7 } },
215}; 218};
216 219
217static struct intc_sense_reg irq_sense_registers[] = { 220static struct intc_sense_reg irq_sense_registers[] __initdata = {
218 { 0xffd0001c, 32, 2, /* ICR1 */ { IRQ0, IRQ1, IRQ2, IRQ3, 221 { 0xffd0001c, 32, 2, /* ICR1 */ { IRQ0, IRQ1, IRQ2, IRQ3,
219 IRQ4, IRQ5, IRQ6, IRQ7 } }, 222 IRQ4, IRQ5, IRQ6, IRQ7 } },
220}; 223};
@@ -225,7 +228,7 @@ static DECLARE_INTC_DESC(intc_irq_desc, "sh7780-irq", irq_vectors,
225 228
226/* External interrupt pins in IRL mode */ 229/* External interrupt pins in IRL mode */
227 230
228static struct intc_vect irl_vectors[] = { 231static struct intc_vect irl_vectors[] __initdata = {
229 INTC_VECT(IRL_LLLL, 0x200), INTC_VECT(IRL_LLLH, 0x220), 232 INTC_VECT(IRL_LLLL, 0x200), INTC_VECT(IRL_LLLH, 0x220),
230 INTC_VECT(IRL_LLHL, 0x240), INTC_VECT(IRL_LLHH, 0x260), 233 INTC_VECT(IRL_LLHL, 0x240), INTC_VECT(IRL_LLHH, 0x260),
231 INTC_VECT(IRL_LHLL, 0x280), INTC_VECT(IRL_LHLH, 0x2a0), 234 INTC_VECT(IRL_LHLL, 0x280), INTC_VECT(IRL_LHLH, 0x2a0),
@@ -236,16 +239,16 @@ static struct intc_vect irl_vectors[] = {
236 INTC_VECT(IRL_HHHL, 0x3c0), 239 INTC_VECT(IRL_HHHL, 0x3c0),
237}; 240};
238 241
239static struct intc_mask_reg irl3210_mask_registers[] = { 242static struct intc_mask_reg irl3210_mask_registers[] __initdata = {
240 { 0xffd00080, 0xffd00084, 32, /* INTMSK2 / INTMSKCLR2 */ 243 { 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
241 { IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH, 244 { IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH,
242 IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH, 245 IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH,
243 IRL_HLLL, IRL_HLLH, IRL_HLHL, IRL_HLHH, 246 IRL_HLLL, IRL_HLLH, IRL_HLHL, IRL_HLHH,
244 IRL_HHLL, IRL_HHLH, IRL_HHHL, } }, 247 IRL_HHLL, IRL_HHLH, IRL_HHHL, } },
245}; 248};
246 249
247static struct intc_mask_reg irl7654_mask_registers[] = { 250static struct intc_mask_reg irl7654_mask_registers[] __initdata = {
248 { 0xffd00080, 0xffd00084, 32, /* INTMSK2 / INTMSKCLR2 */ 251 { 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
249 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
250 IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH, 253 IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH,
251 IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH, 254 IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH,
@@ -259,8 +262,28 @@ static DECLARE_INTC_DESC(intc_irl7654_desc, "sh7780-irl7654", irl_vectors,
259static DECLARE_INTC_DESC(intc_irl3210_desc, "sh7780-irl3210", irl_vectors, 262static DECLARE_INTC_DESC(intc_irl3210_desc, "sh7780-irl3210", irl_vectors,
260 NULL, NULL, irl3210_mask_registers, NULL, NULL); 263 NULL, NULL, irl3210_mask_registers, NULL, NULL);
261 264
265#define INTC_ICR0 0xffd00000
266#define INTC_INTMSK0 0xffd00044
267#define INTC_INTMSK1 0xffd00048
268#define INTC_INTMSK2 0xffd40080
269#define INTC_INTMSKCLR1 0xffd00068
270#define INTC_INTMSKCLR2 0xffd40084
271
262void __init plat_irq_setup(void) 272void __init plat_irq_setup(void)
263{ 273{
274 /* disable IRQ7-0 */
275 ctrl_outl(0xff000000, INTC_INTMSK0);
276
277 /* disable IRL3-0 + IRL7-4 */
278 ctrl_outl(0xc0000000, INTC_INTMSK1);
279 ctrl_outl(0xfffefffe, INTC_INTMSK2);
280
281 /* select IRL mode for IRL3-0 + IRL7-4 */
282 ctrl_outl(ctrl_inl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);
283
284 /* disable holding function, ie enable "SH-4 Mode" */
285 ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00200000, INTC_ICR0);
286
264 register_intc_controller(&intc_desc); 287 register_intc_controller(&intc_desc);
265} 288}
266 289
@@ -268,12 +291,28 @@ void __init plat_irq_setup_pins(int mode)
268{ 291{
269 switch (mode) { 292 switch (mode) {
270 case IRQ_MODE_IRQ: 293 case IRQ_MODE_IRQ:
294 /* select IRQ mode for IRL3-0 + IRL7-4 */
295 ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00c00000, INTC_ICR0);
271 register_intc_controller(&intc_irq_desc); 296 register_intc_controller(&intc_irq_desc);
272 break; 297 break;
273 case IRQ_MODE_IRL7654: 298 case IRQ_MODE_IRL7654:
274 register_intc_controller(&intc_irl7654_desc); 299 /* enable IRL7-4 but don't provide any masking */
300 ctrl_outl(0x40000000, INTC_INTMSKCLR1);
301 ctrl_outl(0x0000fffe, INTC_INTMSKCLR2);
275 break; 302 break;
276 case IRQ_MODE_IRL3210: 303 case IRQ_MODE_IRL3210:
304 /* enable IRL0-3 but don't provide any masking */
305 ctrl_outl(0x80000000, INTC_INTMSKCLR1);
306 ctrl_outl(0xfffe0000, INTC_INTMSKCLR2);
307 break;
308 case IRQ_MODE_IRL7654_MASK:
309 /* enable IRL7-4 and mask using cpu intc controller */
310 ctrl_outl(0x40000000, INTC_INTMSKCLR1);
311 register_intc_controller(&intc_irl7654_desc);
312 break;
313 case IRQ_MODE_IRL3210_MASK:
314 /* enable IRL0-3 and mask using cpu intc controller */
315 ctrl_outl(0x80000000, INTC_INTMSKCLR1);
277 register_intc_controller(&intc_irl3210_desc); 316 register_intc_controller(&intc_irl3210_desc);
278 break; 317 break;
279 default: 318 default:
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
index cf047562e43f..39b215d6cee5 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
@@ -10,6 +10,9 @@
10#include <linux/platform_device.h> 10#include <linux/platform_device.h>
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/serial.h> 12#include <linux/serial.h>
13#include <linux/io.h>
14#include <linux/mm.h>
15#include <asm/mmzone.h>
13#include <asm/sci.h> 16#include <asm/sci.h>
14 17
15static struct plat_sci_port sci_platform_data[] = { 18static struct plat_sci_port sci_platform_data[] = {
@@ -72,46 +75,281 @@ static int __init sh7785_devices_setup(void)
72} 75}
73__initcall(sh7785_devices_setup); 76__initcall(sh7785_devices_setup);
74 77
75static struct intc2_data intc2_irq_table[] = { 78enum {
76 { 28, 0, 24, 0, 0, 2 }, /* TMU0 */ 79 UNUSED = 0,
77 80
78 { 40, 8, 24, 0, 2, 3 }, /* SCIF0 ERI */ 81 /* interrupt sources */
79 { 41, 8, 24, 0, 2, 3 }, /* SCIF0 RXI */ 82
80 { 42, 8, 24, 0, 2, 3 }, /* SCIF0 BRI */ 83 IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,
81 { 43, 8, 24, 0, 2, 3 }, /* SCIF0 TXI */ 84 IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,
82 85 IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,
83 { 44, 8, 16, 0, 3, 3 }, /* SCIF1 ERI */ 86 IRL0_HHLL, IRL0_HHLH, IRL0_HHHL,
84 { 45, 8, 16, 0, 3, 3 }, /* SCIF1 RXI */ 87
85 { 46, 8, 16, 0, 3, 3 }, /* SCIF1 BRI */ 88 IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,
86 { 47, 8, 16, 0, 3, 3 }, /* SCIF1 TXI */ 89 IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,
87 90 IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,
88 { 64, 0x14, 8, 0, 14, 2 }, /* PCIC0 */ 91 IRL4_HHLL, IRL4_HHLH, IRL4_HHHL,
89 { 65, 0x14, 0, 0, 15, 2 }, /* PCIC1 */ 92
90 { 66, 0x18, 24, 0, 16, 2 }, /* PCIC2 */ 93 IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
91 { 67, 0x18, 16, 0, 17, 2 }, /* PCIC3 */ 94 WDT,
92 { 68, 0x18, 8, 0, 18, 2 }, /* PCIC4 */ 95 TMU0, TMU1, TMU2, TMU2_TICPI,
93 96 HUDI,
94 { 60, 8, 8, 0, 4, 3 }, /* SCIF2 ERI, RXI, BRI, TXI */ 97 DMAC0_DMINT0, DMAC0_DMINT1, DMAC0_DMINT2, DMAC0_DMINT3,
95 { 60, 8, 0, 0, 5, 3 }, /* SCIF3 ERI, RXI, BRI, TXI */ 98 DMAC0_DMINT4, DMAC0_DMINT5, DMAC0_DMAE,
96 { 60, 12, 24, 0, 6, 3 }, /* SCIF4 ERI, RXI, BRI, TXI */ 99 SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI,
97 { 60, 12, 16, 0, 7, 3 }, /* SCIF5 ERI, RXI, BRI, TXI */ 100 SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI,
101 DMAC1_DMINT6, DMAC1_DMINT7, DMAC1_DMINT8, DMAC1_DMINT9,
102 DMAC1_DMINT10, DMAC1_DMINT11, DMAC1_DMAE,
103 HSPI,
104 SCIF2, SCIF3, SCIF4, SCIF5,
105 PCISERR, PCIINTA, PCIINTB, PCIINTC, PCIINTD,
106 PCIERR, PCIPWD3, PCIPWD2, PCIPWD1, PCIPWD0,
107 SIOF,
108 MMCIF_FSTAT, MMCIF_TRAN, MMCIF_ERR, MMCIF_FRDY,
109 DU,
110 GDTA_GACLI, GDTA_GAMCI, GDTA_GAERI,
111 TMU3, TMU4, TMU5,
112 SSI0, SSI1,
113 HAC0, HAC1,
114 FLCTL_FLSTE, FLCTL_FLEND, FLCTL_FLTRQ0, FLCTL_FLTRQ1,
115 GPIOI0, GPIOI1, GPIOI2, GPIOI3,
116
117 /* interrupt groups */
118
119 TMU012, DMAC0, SCIF0, SCIF1, DMAC1,
120 PCIC5, MMCIF, GDTA, TMU345, FLCTL, GPIO
98}; 121};
99 122
100static struct intc2_desc intc2_irq_desc __read_mostly = { 123static struct intc_vect vectors[] __initdata = {
101 .prio_base = 0xffd40000, 124 INTC_VECT(WDT, 0x560),
102 .msk_base = 0xffd40038, 125 INTC_VECT(TMU0, 0x580), INTC_VECT(TMU1, 0x5a0),
103 .mskclr_base = 0xffd4003c, 126 INTC_VECT(TMU2, 0x5c0), INTC_VECT(TMU2_TICPI, 0x5e0),
127 INTC_VECT(HUDI, 0x600),
128 INTC_VECT(DMAC0_DMINT0, 0x620), INTC_VECT(DMAC0_DMINT1, 0x640),
129 INTC_VECT(DMAC0_DMINT2, 0x660), INTC_VECT(DMAC0_DMINT3, 0x680),
130 INTC_VECT(DMAC0_DMINT4, 0x6a0), INTC_VECT(DMAC0_DMINT5, 0x6c0),
131 INTC_VECT(DMAC0_DMAE, 0x6e0),
132 INTC_VECT(SCIF0_ERI, 0x700), INTC_VECT(SCIF0_RXI, 0x720),
133 INTC_VECT(SCIF0_BRI, 0x740), INTC_VECT(SCIF0_TXI, 0x760),
134 INTC_VECT(SCIF1_ERI, 0x780), INTC_VECT(SCIF1_RXI, 0x7a0),
135 INTC_VECT(SCIF1_BRI, 0x7c0), INTC_VECT(SCIF1_TXI, 0x7e0),
136 INTC_VECT(DMAC1_DMINT6, 0x880), INTC_VECT(DMAC1_DMINT7, 0x8a0),
137 INTC_VECT(DMAC1_DMINT8, 0x8c0), INTC_VECT(DMAC1_DMINT9, 0x8e0),
138 INTC_VECT(DMAC1_DMINT10, 0x900), INTC_VECT(DMAC1_DMINT11, 0x920),
139 INTC_VECT(DMAC1_DMAE, 0x940),
140 INTC_VECT(HSPI, 0x960),
141 INTC_VECT(SCIF2, 0x980), INTC_VECT(SCIF3, 0x9a0),
142 INTC_VECT(SCIF4, 0x9c0), INTC_VECT(SCIF5, 0x9e0),
143 INTC_VECT(PCISERR, 0xa00), INTC_VECT(PCIINTA, 0xa20),
144 INTC_VECT(PCIINTB, 0xa40), INTC_VECT(PCIINTC, 0xa60),
145 INTC_VECT(PCIINTD, 0xa80), INTC_VECT(PCIERR, 0xaa0),
146 INTC_VECT(PCIPWD3, 0xac0), INTC_VECT(PCIPWD2, 0xae0),
147 INTC_VECT(PCIPWD1, 0xb00), INTC_VECT(PCIPWD0, 0xb20),
148 INTC_VECT(SIOF, 0xc00),
149 INTC_VECT(MMCIF_FSTAT, 0xd00), INTC_VECT(MMCIF_TRAN, 0xd20),
150 INTC_VECT(MMCIF_ERR, 0xd40), INTC_VECT(MMCIF_FRDY, 0xd60),
151 INTC_VECT(DU, 0xd80),
152 INTC_VECT(GDTA_GACLI, 0xda0), INTC_VECT(GDTA_GAMCI, 0xdc0),
153 INTC_VECT(GDTA_GAERI, 0xde0),
154 INTC_VECT(TMU3, 0xe00), INTC_VECT(TMU4, 0xe20),
155 INTC_VECT(TMU5, 0xe40),
156 INTC_VECT(SSI0, 0xe80), INTC_VECT(SSI1, 0xea0),
157 INTC_VECT(HAC0, 0xec0), INTC_VECT(HAC1, 0xee0),
158 INTC_VECT(FLCTL_FLSTE, 0xf00), INTC_VECT(FLCTL_FLEND, 0xf20),
159 INTC_VECT(FLCTL_FLTRQ0, 0xf40), INTC_VECT(FLCTL_FLTRQ1, 0xf60),
160 INTC_VECT(GPIOI0, 0xf80), INTC_VECT(GPIOI1, 0xfa0),
161 INTC_VECT(GPIOI2, 0xfc0), INTC_VECT(GPIOI3, 0xfe0),
162};
104 163
105 .intc2_data = intc2_irq_table, 164static struct intc_group groups[] __initdata = {
106 .nr_irqs = ARRAY_SIZE(intc2_irq_table), 165 INTC_GROUP(TMU012, TMU0, TMU1, TMU2, TMU2_TICPI),
166 INTC_GROUP(DMAC0, DMAC0_DMINT0, DMAC0_DMINT1, DMAC0_DMINT2,
167 DMAC0_DMINT3, DMAC0_DMINT4, DMAC0_DMINT5, DMAC0_DMAE),
168 INTC_GROUP(SCIF0, SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI),
169 INTC_GROUP(SCIF1, SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI),
170 INTC_GROUP(DMAC1, DMAC1_DMINT6, DMAC1_DMINT7, DMAC1_DMINT8,
171 DMAC1_DMINT9, DMAC1_DMINT10, DMAC1_DMINT11, DMAC1_DMAE),
172 INTC_GROUP(PCIC5, PCIERR, PCIPWD3, PCIPWD2, PCIPWD1, PCIPWD0),
173 INTC_GROUP(MMCIF, MMCIF_FSTAT, MMCIF_TRAN, MMCIF_ERR, MMCIF_FRDY),
174 INTC_GROUP(GDTA, GDTA_GACLI, GDTA_GAMCI, GDTA_GAERI),
175 INTC_GROUP(TMU345, TMU3, TMU4, TMU5),
176 INTC_GROUP(FLCTL, FLCTL_FLSTE, FLCTL_FLEND,
177 FLCTL_FLTRQ0, FLCTL_FLTRQ1),
178 INTC_GROUP(GPIO, GPIOI0, GPIOI1, GPIOI2, GPIOI3),
179};
107 180
108 .chip = { 181static struct intc_prio priorities[] __initdata = {
109 .name = "INTC2-sh7785", 182 INTC_PRIO(SCIF0, 3),
110 }, 183 INTC_PRIO(SCIF1, 3),
184 INTC_PRIO(SCIF2, 3),
185 INTC_PRIO(SCIF3, 3),
186 INTC_PRIO(SCIF4, 3),
187 INTC_PRIO(SCIF5, 3),
188};
189
190static struct intc_mask_reg mask_registers[] __initdata = {
191 { 0xffd00044, 0xffd00064, 32, /* INTMSK0 / INTMSKCLR0 */
192 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
193
194 { 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
195 { IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,
196 IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,
197 IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,
198 IRL0_HHLL, IRL0_HHLH, IRL0_HHHL, 0,
199 IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,
200 IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,
201 IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,
202 IRL4_HHLL, IRL4_HHLH, IRL4_HHHL, 0, } },
203
204 { 0xffd40038, 0xffd4003c, 32, /* INT2MSKR / INT2MSKCR */
205 { 0, 0, 0, GDTA, DU, SSI0, SSI1, GPIO,
206 FLCTL, MMCIF, HSPI, SIOF, PCIC5, PCIINTD, PCIINTC, PCIINTB,
207 PCIINTA, PCISERR, HAC1, HAC0, DMAC1, DMAC0, HUDI, WDT,
208 SCIF5, SCIF4, SCIF3, SCIF2, SCIF1, SCIF0, TMU345, TMU012 } },
209};
210
211static struct intc_prio_reg prio_registers[] __initdata = {
212 { 0xffd00010, 0, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3,
213 IRQ4, IRQ5, IRQ6, IRQ7 } },
214 { 0xffd40000, 0, 32, 8, /* INT2PRI0 */ { TMU0, TMU1,
215 TMU2, TMU2_TICPI } },
216 { 0xffd40004, 0, 32, 8, /* INT2PRI1 */ { TMU3, TMU4, TMU5, } },
217 { 0xffd40008, 0, 32, 8, /* INT2PRI2 */ { SCIF0, SCIF1,
218 SCIF2, SCIF3 } },
219 { 0xffd4000c, 0, 32, 8, /* INT2PRI3 */ { SCIF4, SCIF5, WDT, } },
220 { 0xffd40010, 0, 32, 8, /* INT2PRI4 */ { HUDI, DMAC0, DMAC1, } },
221 { 0xffd40014, 0, 32, 8, /* INT2PRI5 */ { HAC0, HAC1,
222 PCISERR, PCIINTA } },
223 { 0xffd40018, 0, 32, 8, /* INT2PRI6 */ { PCIINTB, PCIINTC,
224 PCIINTD, PCIC5 } },
225 { 0xffd4001c, 0, 32, 8, /* INT2PRI7 */ { SIOF, HSPI, MMCIF, } },
226 { 0xffd40020, 0, 32, 8, /* INT2PRI8 */ { FLCTL, GPIO, SSI0, SSI1, } },
227 { 0xffd40024, 0, 32, 8, /* INT2PRI9 */ { DU, GDTA, } },
111}; 228};
112 229
230static DECLARE_INTC_DESC(intc_desc, "sh7785", vectors, groups, priorities,
231 mask_registers, prio_registers, NULL);
232
233/* Support for external interrupt pins in IRQ mode */
234
235static struct intc_vect vectors_irq0123[] __initdata = {
236 INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280),
237 INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300),
238};
239
240static struct intc_vect vectors_irq4567[] __initdata = {
241 INTC_VECT(IRQ4, 0x340), INTC_VECT(IRQ5, 0x380),
242 INTC_VECT(IRQ6, 0x3c0), INTC_VECT(IRQ7, 0x200),
243};
244
245static struct intc_sense_reg sense_registers[] __initdata = {
246 { 0xffd0001c, 32, 2, /* ICR1 */ { IRQ0, IRQ1, IRQ2, IRQ3,
247 IRQ4, IRQ5, IRQ6, IRQ7 } },
248};
249
250static DECLARE_INTC_DESC(intc_desc_irq0123, "sh7785-irq0123", vectors_irq0123,
251 NULL, NULL, mask_registers, prio_registers,
252 sense_registers);
253
254static DECLARE_INTC_DESC(intc_desc_irq4567, "sh7785-irq4567", vectors_irq4567,
255 NULL, NULL, mask_registers, prio_registers,
256 sense_registers);
257
258/* External interrupt pins in IRL mode */
259
260static struct intc_vect vectors_irl0123[] __initdata = {
261 INTC_VECT(IRL0_LLLL, 0x200), INTC_VECT(IRL0_LLLH, 0x220),
262 INTC_VECT(IRL0_LLHL, 0x240), INTC_VECT(IRL0_LLHH, 0x260),
263 INTC_VECT(IRL0_LHLL, 0x280), INTC_VECT(IRL0_LHLH, 0x2a0),
264 INTC_VECT(IRL0_LHHL, 0x2c0), INTC_VECT(IRL0_LHHH, 0x2e0),
265 INTC_VECT(IRL0_HLLL, 0x300), INTC_VECT(IRL0_HLLH, 0x320),
266 INTC_VECT(IRL0_HLHL, 0x340), INTC_VECT(IRL0_HLHH, 0x360),
267 INTC_VECT(IRL0_HHLL, 0x380), INTC_VECT(IRL0_HHLH, 0x3a0),
268 INTC_VECT(IRL0_HHHL, 0x3c0),
269};
270
271static struct intc_vect vectors_irl4567[] __initdata = {
272 INTC_VECT(IRL4_LLLL, 0xb00), INTC_VECT(IRL4_LLLH, 0xb20),
273 INTC_VECT(IRL4_LLHL, 0xb40), INTC_VECT(IRL4_LLHH, 0xb60),
274 INTC_VECT(IRL4_LHLL, 0xb80), INTC_VECT(IRL4_LHLH, 0xba0),
275 INTC_VECT(IRL4_LHHL, 0xbc0), INTC_VECT(IRL4_LHHH, 0xbe0),
276 INTC_VECT(IRL4_HLLL, 0xc00), INTC_VECT(IRL4_HLLH, 0xc20),
277 INTC_VECT(IRL4_HLHL, 0xc40), INTC_VECT(IRL4_HLHH, 0xc60),
278 INTC_VECT(IRL4_HHLL, 0xc80), INTC_VECT(IRL4_HHLH, 0xca0),
279 INTC_VECT(IRL4_HHHL, 0xcc0),
280};
281
282static DECLARE_INTC_DESC(intc_desc_irl0123, "sh7785-irl0123", vectors_irl0123,
283 NULL, NULL, mask_registers, NULL, NULL);
284
285static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7785-irl4567", vectors_irl4567,
286 NULL, NULL, mask_registers, NULL, NULL);
287
288#define INTC_ICR0 0xffd00000
289#define INTC_INTMSK0 0xffd00044
290#define INTC_INTMSK1 0xffd00048
291#define INTC_INTMSK2 0xffd40080
292#define INTC_INTMSKCLR1 0xffd00068
293#define INTC_INTMSKCLR2 0xffd40084
294
113void __init plat_irq_setup(void) 295void __init plat_irq_setup(void)
114{ 296{
115 register_intc2_controller(&intc2_irq_desc); 297 /* disable IRQ3-0 + IRQ7-4 */
298 ctrl_outl(0xff000000, INTC_INTMSK0);
299
300 /* disable IRL3-0 + IRL7-4 */
301 ctrl_outl(0xc0000000, INTC_INTMSK1);
302 ctrl_outl(0xfffefffe, INTC_INTMSK2);
303
304 /* select IRL mode for IRL3-0 + IRL7-4 */
305 ctrl_outl(ctrl_inl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);
306
307 /* disable holding function, ie enable "SH-4 Mode" */
308 ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00200000, INTC_ICR0);
309
310 register_intc_controller(&intc_desc);
311}
312
313void __init plat_irq_setup_pins(int mode)
314{
315 switch (mode) {
316 case IRQ_MODE_IRQ7654:
317 /* select IRQ mode for IRL7-4 */
318 ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00400000, INTC_ICR0);
319 register_intc_controller(&intc_desc_irq4567);
320 break;
321 case IRQ_MODE_IRQ3210:
322 /* select IRQ mode for IRL3-0 */
323 ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00800000, INTC_ICR0);
324 register_intc_controller(&intc_desc_irq0123);
325 break;
326 case IRQ_MODE_IRL7654:
327 /* enable IRL7-4 but don't provide any masking */
328 ctrl_outl(0x40000000, INTC_INTMSKCLR1);
329 ctrl_outl(0x0000fffe, INTC_INTMSKCLR2);
330 break;
331 case IRQ_MODE_IRL3210:
332 /* enable IRL0-3 but don't provide any masking */
333 ctrl_outl(0x80000000, INTC_INTMSKCLR1);
334 ctrl_outl(0xfffe0000, INTC_INTMSKCLR2);
335 break;
336 case IRQ_MODE_IRL7654_MASK:
337 /* enable IRL7-4 and mask using cpu intc controller */
338 ctrl_outl(0x40000000, INTC_INTMSKCLR1);
339 register_intc_controller(&intc_desc_irl4567);
340 break;
341 case IRQ_MODE_IRL3210_MASK:
342 /* enable IRL0-3 and mask using cpu intc controller */
343 ctrl_outl(0x80000000, INTC_INTMSKCLR1);
344 register_intc_controller(&intc_desc_irl0123);
345 break;
346 default:
347 BUG();
348 }
116} 349}
117 350
351void __init plat_mem_setup(void)
352{
353 /* Register the URAM space as Node 1 */
354 setup_bootmem_node(1, 0xe55f0000, 0xe5610000);
355}
diff --git a/arch/sh/kernel/cpu/sh4a/setup-shx3.c b/arch/sh/kernel/cpu/sh4a/setup-shx3.c
index 704c064f70dc..c6cdd7e3b049 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-shx3.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-shx3.c
@@ -11,6 +11,7 @@
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/serial.h> 12#include <linux/serial.h>
13#include <linux/io.h> 13#include <linux/io.h>
14#include <asm/mmzone.h>
14#include <asm/sci.h> 15#include <asm/sci.h>
15 16
16static struct plat_sci_port sci_platform_data[] = { 17static struct plat_sci_port sci_platform_data[] = {
@@ -58,28 +59,229 @@ static int __init shx3_devices_setup(void)
58} 59}
59__initcall(shx3_devices_setup); 60__initcall(shx3_devices_setup);
60 61
61static struct intc2_data intc2_irq_table[] = { 62enum {
62 { 16, 0, 0, 0, 1, 2 }, /* TMU0 */ 63 UNUSED = 0,
63 { 40, 4, 0, 0x20, 0, 3 }, /* SCIF0 ERI */ 64
64 { 41, 4, 0, 0x20, 1, 3 }, /* SCIF0 RXI */ 65 /* interrupt sources */
65 { 42, 4, 0, 0x20, 2, 3 }, /* SCIF0 BRI */ 66 IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH,
66 { 43, 4, 0, 0x20, 3, 3 }, /* SCIF0 TXI */ 67 IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH,
68 IRL_HLLL, IRL_HLLH, IRL_HLHL, IRL_HLHH,
69 IRL_HHLL, IRL_HHLH, IRL_HHHL,
70 IRQ0, IRQ1, IRQ2, IRQ3,
71 HUDII,
72 TMU0, TMU1, TMU2, TMU3, TMU4, TMU5,
73 PCII0, PCII1, PCII2, PCII3, PCII4,
74 PCII5, PCII6, PCII7, PCII8, PCII9,
75 SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI,
76 SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI,
77 SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI,
78 SCIF3_ERI, SCIF3_RXI, SCIF3_BRI, SCIF3_TXI,
79 DMAC0_DMINT0, DMAC0_DMINT1, DMAC0_DMINT2, DMAC0_DMINT3,
80 DMAC0_DMINT4, DMAC0_DMINT5, DMAC0_DMAE,
81 DU,
82 DMAC1_DMINT6, DMAC1_DMINT7, DMAC1_DMINT8, DMAC1_DMINT9,
83 DMAC1_DMINT10, DMAC1_DMINT11, DMAC1_DMAE,
84 IIC, VIN0, VIN1, VCORE0, ATAPI,
85 DTU0_TEND, DTU0_AE, DTU0_TMISS,
86 DTU1_TEND, DTU1_AE, DTU1_TMISS,
87 DTU2_TEND, DTU2_AE, DTU2_TMISS,
88 DTU3_TEND, DTU3_AE, DTU3_TMISS,
89 FE0, FE1,
90 GPIO0, GPIO1, GPIO2, GPIO3,
91 PAM, IRM,
92 INTICI0, INTICI1, INTICI2, INTICI3,
93 INTICI4, INTICI5, INTICI6, INTICI7,
94
95 /* interrupt groups */
96 IRL, PCII56789, SCIF0, SCIF1, SCIF2, SCIF3,
97 DMAC0, DMAC1, DTU0, DTU1, DTU2, DTU3,
98};
99
100static struct intc_vect vectors[] __initdata = {
101 INTC_VECT(HUDII, 0x3e0),
102 INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
103 INTC_VECT(TMU2, 0x440), INTC_VECT(TMU3, 0x460),
104 INTC_VECT(TMU4, 0x480), INTC_VECT(TMU5, 0x4a0),
105 INTC_VECT(PCII0, 0x500), INTC_VECT(PCII1, 0x520),
106 INTC_VECT(PCII2, 0x540), INTC_VECT(PCII3, 0x560),
107 INTC_VECT(PCII4, 0x580), INTC_VECT(PCII5, 0x5a0),
108 INTC_VECT(PCII6, 0x5c0), INTC_VECT(PCII7, 0x5e0),
109 INTC_VECT(PCII8, 0x600), INTC_VECT(PCII9, 0x620),
110 INTC_VECT(SCIF0_ERI, 0x700), INTC_VECT(SCIF0_RXI, 0x720),
111 INTC_VECT(SCIF0_BRI, 0x740), INTC_VECT(SCIF0_TXI, 0x760),
112 INTC_VECT(SCIF1_ERI, 0x780), INTC_VECT(SCIF1_RXI, 0x7a0),
113 INTC_VECT(SCIF1_BRI, 0x7c0), INTC_VECT(SCIF1_TXI, 0x7e0),
114 INTC_VECT(SCIF2_ERI, 0x800), INTC_VECT(SCIF2_RXI, 0x820),
115 INTC_VECT(SCIF2_BRI, 0x840), INTC_VECT(SCIF2_TXI, 0x860),
116 INTC_VECT(SCIF3_ERI, 0x880), INTC_VECT(SCIF3_RXI, 0x8a0),
117 INTC_VECT(SCIF3_BRI, 0x8c0), INTC_VECT(SCIF3_TXI, 0x8e0),
118 INTC_VECT(DMAC0_DMINT0, 0x900), INTC_VECT(DMAC0_DMINT1, 0x920),
119 INTC_VECT(DMAC0_DMINT2, 0x940), INTC_VECT(DMAC0_DMINT3, 0x960),
120 INTC_VECT(DMAC0_DMINT4, 0x980), INTC_VECT(DMAC0_DMINT5, 0x9a0),
121 INTC_VECT(DMAC0_DMAE, 0x9c0),
122 INTC_VECT(DU, 0x9e0),
123 INTC_VECT(DMAC1_DMINT6, 0xa00), INTC_VECT(DMAC1_DMINT7, 0xa20),
124 INTC_VECT(DMAC1_DMINT8, 0xa40), INTC_VECT(DMAC1_DMINT9, 0xa60),
125 INTC_VECT(DMAC1_DMINT10, 0xa80), INTC_VECT(DMAC1_DMINT11, 0xaa0),
126 INTC_VECT(DMAC1_DMAE, 0xac0),
127 INTC_VECT(IIC, 0xae0),
128 INTC_VECT(VIN0, 0xb00), INTC_VECT(VIN1, 0xb20),
129 INTC_VECT(VCORE0, 0xb00), INTC_VECT(ATAPI, 0xb60),
130 INTC_VECT(DTU0_TEND, 0xc00), INTC_VECT(DTU0_AE, 0xc20),
131 INTC_VECT(DTU0_TMISS, 0xc40),
132 INTC_VECT(DTU1_TEND, 0xc60), INTC_VECT(DTU1_AE, 0xc80),
133 INTC_VECT(DTU1_TMISS, 0xca0),
134 INTC_VECT(DTU2_TEND, 0xcc0), INTC_VECT(DTU2_AE, 0xce0),
135 INTC_VECT(DTU2_TMISS, 0xd00),
136 INTC_VECT(DTU3_TEND, 0xd20), INTC_VECT(DTU3_AE, 0xd40),
137 INTC_VECT(DTU3_TMISS, 0xd60),
138 INTC_VECT(FE0, 0xe00), INTC_VECT(FE1, 0xe20),
139 INTC_VECT(GPIO0, 0xe40), INTC_VECT(GPIO1, 0xe60),
140 INTC_VECT(GPIO2, 0xe80), INTC_VECT(GPIO3, 0xea0),
141 INTC_VECT(PAM, 0xec0), INTC_VECT(IRM, 0xee0),
142 INTC_VECT(INTICI0, 0xf00), INTC_VECT(INTICI1, 0xf20),
143 INTC_VECT(INTICI2, 0xf40), INTC_VECT(INTICI3, 0xf60),
144 INTC_VECT(INTICI4, 0xf80), INTC_VECT(INTICI5, 0xfa0),
145 INTC_VECT(INTICI6, 0xfc0), INTC_VECT(INTICI7, 0xfe0),
67}; 146};
68 147
69static struct intc2_desc intc2_irq_desc __read_mostly = { 148static struct intc_group groups[] __initdata = {
70 .prio_base = 0xfe410000, 149 INTC_GROUP(IRL, IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH,
71 .msk_base = 0xfe410820, 150 IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH,
72 .mskclr_base = 0xfe410850, 151 IRL_HLLL, IRL_HLLH, IRL_HLHL, IRL_HLHH,
152 IRL_HHLL, IRL_HHLH, IRL_HHHL),
153 INTC_GROUP(PCII56789, PCII5, PCII6, PCII7, PCII8, PCII9),
154 INTC_GROUP(SCIF0, SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI),
155 INTC_GROUP(SCIF1, SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI),
156 INTC_GROUP(SCIF2, SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI),
157 INTC_GROUP(SCIF3, SCIF3_ERI, SCIF3_RXI, SCIF3_BRI, SCIF3_TXI),
158 INTC_GROUP(DMAC0, DMAC0_DMINT0, DMAC0_DMINT1, DMAC0_DMINT2,
159 DMAC0_DMINT3, DMAC0_DMINT4, DMAC0_DMINT5, DMAC0_DMAE),
160 INTC_GROUP(DMAC1, DMAC1_DMINT6, DMAC1_DMINT7, DMAC1_DMINT8,
161 DMAC1_DMINT9, DMAC1_DMINT10, DMAC1_DMINT11),
162 INTC_GROUP(DTU0, DTU0_TEND, DTU0_AE, DTU0_TMISS),
163 INTC_GROUP(DTU1, DTU1_TEND, DTU1_AE, DTU1_TMISS),
164 INTC_GROUP(DTU2, DTU2_TEND, DTU2_AE, DTU2_TMISS),
165 INTC_GROUP(DTU3, DTU3_TEND, DTU3_AE, DTU3_TMISS),
166};
73 167
74 .intc2_data = intc2_irq_table, 168static struct intc_prio priorities[] __initdata = {
75 .nr_irqs = ARRAY_SIZE(intc2_irq_table), 169 INTC_PRIO(SCIF0, 3),
170 INTC_PRIO(SCIF1, 3),
171 INTC_PRIO(SCIF2, 3),
172 INTC_PRIO(SCIF3, 3),
173};
76 174
77 .chip = { 175static struct intc_mask_reg mask_registers[] __initdata = {
78 .name = "INTC2-SHX3", 176 { 0xfe410030, 0xfe410050, 32, /* CnINTMSK0 / CnINTMSKCLR0 */
79 }, 177 { IRQ0, IRQ1, IRQ2, IRQ3 } },
178 { 0xfe410040, 0xfe410060, 32, /* CnINTMSK1 / CnINTMSKCLR1 */
179 { IRL } },
180 { 0xfe410820, 0xfe410850, 32, /* CnINT2MSK0 / CnINT2MSKCLR0 */
181 { FE1, FE0, 0, ATAPI, VCORE0, VIN1, VIN0, IIC,
182 DU, GPIO3, GPIO2, GPIO1, GPIO0, PAM, 0, 0,
183 0, 0, 0, 0, 0, 0, 0, 0, /* HUDI bits ignored */
184 0, TMU5, TMU4, TMU3, TMU2, TMU1, TMU0, 0, } },
185 { 0xfe410830, 0xfe410860, 32, /* CnINT2MSK1 / CnINT2MSKCLR1 */
186 { 0, 0, 0, 0, DTU3, DTU2, DTU1, DTU0, /* IRM bits ignored */
187 PCII9, PCII8, PCII7, PCII6, PCII5, PCII4, PCII3, PCII2,
188 PCII1, PCII0, DMAC1_DMAE, DMAC1_DMINT11,
189 DMAC1_DMINT10, DMAC1_DMINT9, DMAC1_DMINT8, DMAC1_DMINT7,
190 DMAC1_DMINT6, DMAC0_DMAE, DMAC0_DMINT5, DMAC0_DMINT4,
191 DMAC0_DMINT3, DMAC0_DMINT2, DMAC0_DMINT1, DMAC0_DMINT0 } },
192 { 0xfe410840, 0xfe410870, 32, /* CnINT2MSK2 / CnINT2MSKCLR2 */
193 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
194 SCIF3_TXI, SCIF3_BRI, SCIF3_RXI, SCIF3_ERI,
195 SCIF2_TXI, SCIF2_BRI, SCIF2_RXI, SCIF2_ERI,
196 SCIF1_TXI, SCIF1_BRI, SCIF1_RXI, SCIF1_ERI,
197 SCIF0_TXI, SCIF0_BRI, SCIF0_RXI, SCIF0_ERI } },
198};
199
200static struct intc_prio_reg prio_registers[] __initdata = {
201 { 0xfe410010, 0, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3 } },
202
203 { 0xfe410800, 0, 32, 4, /* INT2PRI0 */ { 0, HUDII, TMU5, TMU4,
204 TMU3, TMU2, TMU1, TMU0 } },
205 { 0xfe410804, 0, 32, 4, /* INT2PRI1 */ { DTU3, DTU2, DTU1, DTU0,
206 SCIF3, SCIF2,
207 SCIF1, SCIF0 } },
208 { 0xfe410808, 0, 32, 4, /* INT2PRI2 */ { DMAC1, DMAC0,
209 PCII56789, PCII4,
210 PCII3, PCII2,
211 PCII1, PCII0 } },
212 { 0xfe41080c, 0, 32, 4, /* INT2PRI3 */ { FE1, FE0, ATAPI, VCORE0,
213 VIN1, VIN0, IIC, DU} },
214 { 0xfe410810, 0, 32, 4, /* INT2PRI4 */ { 0, 0, PAM, GPIO3,
215 GPIO2, GPIO1, GPIO0, IRM } },
216 { 0xfe410090, 0xfe4100a0, 32, 4, /* CnICIPRI / CnICIPRICLR */
217 { INTICI7, INTICI6, INTICI5, INTICI4,
218 INTICI3, INTICI2, INTICI1, INTICI0 }, INTC_SMP(4, 4) },
219};
220
221static DECLARE_INTC_DESC(intc_desc, "shx3", vectors, groups, priorities,
222 mask_registers, prio_registers, NULL);
223
224/* Support for external interrupt pins in IRQ mode */
225static struct intc_vect vectors_irq[] __initdata = {
226 INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280),
227 INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300),
228};
229
230static struct intc_sense_reg sense_registers[] __initdata = {
231 { 0xfe41001c, 32, 2, /* ICR1 */ { IRQ0, IRQ1, IRQ2, IRQ3 } },
80}; 232};
81 233
234static DECLARE_INTC_DESC(intc_desc_irq, "shx3-irq", vectors_irq, groups,
235 priorities, mask_registers, prio_registers,
236 sense_registers);
237
238/* External interrupt pins in IRL mode */
239static struct intc_vect vectors_irl[] __initdata = {
240 INTC_VECT(IRL_LLLL, 0x200), INTC_VECT(IRL_LLLH, 0x220),
241 INTC_VECT(IRL_LLHL, 0x240), INTC_VECT(IRL_LLHH, 0x260),
242 INTC_VECT(IRL_LHLL, 0x280), INTC_VECT(IRL_LHLH, 0x2a0),
243 INTC_VECT(IRL_LHHL, 0x2c0), INTC_VECT(IRL_LHHH, 0x2e0),
244 INTC_VECT(IRL_HLLL, 0x300), INTC_VECT(IRL_HLLH, 0x320),
245 INTC_VECT(IRL_HLHL, 0x340), INTC_VECT(IRL_HLHH, 0x360),
246 INTC_VECT(IRL_HHLL, 0x380), INTC_VECT(IRL_HHLH, 0x3a0),
247 INTC_VECT(IRL_HHHL, 0x3c0),
248};
249
250static DECLARE_INTC_DESC(intc_desc_irl, "shx3-irl", vectors_irl, groups,
251 priorities, mask_registers, prio_registers, NULL);
252
253void __init plat_irq_setup_pins(int mode)
254{
255 switch (mode) {
256 case IRQ_MODE_IRQ:
257 register_intc_controller(&intc_desc_irq);
258 break;
259 case IRQ_MODE_IRL3210:
260 register_intc_controller(&intc_desc_irl);
261 break;
262 default:
263 BUG();
264 }
265}
266
82void __init plat_irq_setup(void) 267void __init plat_irq_setup(void)
83{ 268{
84 register_intc2_controller(&intc2_irq_desc); 269 register_intc_controller(&intc_desc);
270}
271
272void __init plat_mem_setup(void)
273{
274 unsigned int nid = 1;
275
276 /* Register CPU#0 URAM space as Node 1 */
277 setup_bootmem_node(nid++, 0x145f0000, 0x14610000); /* CPU0 */
278
279#if 0
280 /* XXX: Not yet.. */
281 setup_bootmem_node(nid++, 0x14df0000, 0x14e10000); /* CPU1 */
282 setup_bootmem_node(nid++, 0x155f0000, 0x15610000); /* CPU2 */
283 setup_bootmem_node(nid++, 0x15df0000, 0x15e10000); /* CPU3 */
284#endif
285
286 setup_bootmem_node(nid++, 0x16000000, 0x16020000); /* CSM */
85} 287}
diff --git a/arch/sh/kernel/cpu/sh4a/smp-shx3.c b/arch/sh/kernel/cpu/sh4a/smp-shx3.c
new file mode 100644
index 000000000000..e5e06845fa43
--- /dev/null
+++ b/arch/sh/kernel/cpu/sh4a/smp-shx3.c
@@ -0,0 +1,120 @@
1/*
2 * SH-X3 SMP
3 *
4 * Copyright (C) 2007 Paul Mundt
5 * Copyright (C) 2007 Magnus Damm
6 *
7 * This file is subject to the terms and conditions of the GNU General Public
8 * License. See the file "COPYING" in the main directory of this archive
9 * for more details.
10 */
11#include <linux/init.h>
12#include <linux/cpumask.h>
13#include <linux/smp.h>
14#include <linux/interrupt.h>
15#include <linux/io.h>
16
17void __init plat_smp_setup(void)
18{
19 unsigned int cpu = 0;
20 int i, num;
21
22 cpus_clear(cpu_possible_map);
23 cpu_set(cpu, cpu_possible_map);
24
25 __cpu_number_map[0] = 0;
26 __cpu_logical_map[0] = 0;
27
28 /*
29 * Do this stupidly for now.. we don't have an easy way to probe
30 * for the total number of cores.
31 */
32 for (i = 1, num = 0; i < NR_CPUS; i++) {
33 cpu_set(i, cpu_possible_map);
34 __cpu_number_map[i] = ++num;
35 __cpu_logical_map[num] = i;
36 }
37
38 printk(KERN_INFO "Detected %i available secondary CPU(s)\n", num);
39}
40
41void __init plat_prepare_cpus(unsigned int max_cpus)
42{
43}
44
45#define STBCR_REG(phys_id) (0xfe400004 | (phys_id << 12))
46#define RESET_REG(phys_id) (0xfe400008 | (phys_id << 12))
47
48#define STBCR_MSTP 0x00000001
49#define STBCR_RESET 0x00000002
50#define STBCR_LTSLP 0x80000000
51
52#define STBCR_AP_VAL (STBCR_RESET | STBCR_LTSLP)
53
54void plat_start_cpu(unsigned int cpu, unsigned long entry_point)
55{
56 ctrl_outl(entry_point, RESET_REG(cpu));
57
58 if (!(ctrl_inl(STBCR_REG(cpu)) & STBCR_MSTP))
59 ctrl_outl(STBCR_MSTP, STBCR_REG(cpu));
60
61 while (!(ctrl_inl(STBCR_REG(cpu)) & STBCR_MSTP))
62 ;
63
64 /* Start up secondary processor by sending a reset */
65 ctrl_outl(STBCR_AP_VAL, STBCR_REG(cpu));
66}
67
68int plat_smp_processor_id(void)
69{
70 return ctrl_inl(0xff000048); /* CPIDR */
71}
72
73void plat_send_ipi(unsigned int cpu, unsigned int message)
74{
75 unsigned long addr = 0xfe410070 + (cpu * 4);
76
77 BUG_ON(cpu >= 4);
78 BUG_ON(message >= SMP_MSG_NR);
79
80 ctrl_outl(1 << (message << 2), addr); /* C0INTICI..CnINTICI */
81}
82
83struct ipi_data {
84 void (*handler)(void *);
85 void *arg;
86 unsigned int message;
87};
88
89static irqreturn_t ipi_interrupt_handler(int irq, void *arg)
90{
91 struct ipi_data *id = arg;
92 unsigned int cpu = hard_smp_processor_id();
93 unsigned int offs = 4 * cpu;
94 unsigned int x;
95
96 x = ctrl_inl(0xfe410070 + offs); /* C0INITICI..CnINTICI */
97 x &= (1 << (id->message << 2));
98 ctrl_outl(x, 0xfe410080 + offs); /* C0INTICICLR..CnINTICICLR */
99
100 id->handler(id->arg);
101
102 return IRQ_HANDLED;
103}
104
105static struct ipi_data ipi_handlers[SMP_MSG_NR];
106
107int plat_register_ipi_handler(unsigned int message,
108 void (*handler)(void *), void *arg)
109{
110 struct ipi_data *id = &ipi_handlers[message];
111
112 BUG_ON(SMP_MSG_NR >= 8);
113 BUG_ON(message >= SMP_MSG_NR);
114
115 id->handler = handler;
116 id->arg = arg;
117 id->message = message;
118
119 return request_irq(104 + message, ipi_interrupt_handler, 0, "IPI", id);
120}
diff --git a/arch/sh/kernel/cpufreq.c b/arch/sh/kernel/cpufreq.c
index 71d1c427b907..e0590ffebd73 100644
--- a/arch/sh/kernel/cpufreq.c
+++ b/arch/sh/kernel/cpufreq.c
@@ -77,8 +77,6 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy,
77 77
78static int sh_cpufreq_cpu_init(struct cpufreq_policy *policy) 78static int sh_cpufreq_cpu_init(struct cpufreq_policy *policy)
79{ 79{
80 printk(KERN_INFO "cpufreq: SuperH CPU frequency driver.\n");
81
82 if (!cpu_online(policy->cpu)) 80 if (!cpu_online(policy->cpu))
83 return -ENODEV; 81 return -ENODEV;
84 82
@@ -143,6 +141,7 @@ static struct cpufreq_driver sh_cpufreq_driver = {
143 141
144static int __init sh_cpufreq_module_init(void) 142static int __init sh_cpufreq_module_init(void)
145{ 143{
144 printk(KERN_INFO "cpufreq: SuperH CPU frequency driver.\n");
146 return cpufreq_register_driver(&sh_cpufreq_driver); 145 return cpufreq_register_driver(&sh_cpufreq_driver);
147} 146}
148 147
diff --git a/arch/sh/kernel/early_printk.c b/arch/sh/kernel/early_printk.c
index 80b637c30203..2f30977558ad 100644
--- a/arch/sh/kernel/early_printk.c
+++ b/arch/sh/kernel/early_printk.c
@@ -3,7 +3,7 @@
3 * 3 *
4 * Copyright (C) 1999, 2000 Niibe Yutaka 4 * Copyright (C) 1999, 2000 Niibe Yutaka
5 * Copyright (C) 2002 M. R. Brown 5 * Copyright (C) 2002 M. R. Brown
6 * Copyright (C) 2004 - 2006 Paul Mundt 6 * Copyright (C) 2004 - 2007 Paul Mundt
7 * 7 *
8 * This file is subject to the terms and conditions of the GNU General Public 8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file "COPYING" in the main directory of this archive 9 * License. See the file "COPYING" in the main directory of this archive
@@ -13,6 +13,7 @@
13#include <linux/tty.h> 13#include <linux/tty.h>
14#include <linux/init.h> 14#include <linux/init.h>
15#include <linux/io.h> 15#include <linux/io.h>
16#include <linux/delay.h>
16 17
17#ifdef CONFIG_SH_STANDARD_BIOS 18#ifdef CONFIG_SH_STANDARD_BIOS
18#include <asm/sh_bios.h> 19#include <asm/sh_bios.h>
@@ -62,6 +63,16 @@ static struct console bios_console = {
62#include <linux/serial_core.h> 63#include <linux/serial_core.h>
63#include "../../../drivers/serial/sh-sci.h" 64#include "../../../drivers/serial/sh-sci.h"
64 65
66#if defined(CONFIG_CPU_SUBTYPE_SH7720)
67#define EPK_SCSMR_VALUE 0x000
68#define EPK_SCBRR_VALUE 0x00C
69#define EPK_FIFO_SIZE 64
70#define EPK_FIFO_BITS (0x7f00 >> 8)
71#else
72#define EPK_FIFO_SIZE 16
73#define EPK_FIFO_BITS (0x1f00 >> 8)
74#endif
75
65static struct uart_port scif_port = { 76static struct uart_port scif_port = {
66 .mapbase = CONFIG_EARLY_SCIF_CONSOLE_PORT, 77 .mapbase = CONFIG_EARLY_SCIF_CONSOLE_PORT,
67 .membase = (char __iomem *)CONFIG_EARLY_SCIF_CONSOLE_PORT, 78 .membase = (char __iomem *)CONFIG_EARLY_SCIF_CONSOLE_PORT,
@@ -69,7 +80,7 @@ static struct uart_port scif_port = {
69 80
70static void scif_sercon_putc(int c) 81static void scif_sercon_putc(int c)
71{ 82{
72 while (((sci_in(&scif_port, SCFDR) & 0x1f00 >> 8) == 16)) 83 while (((sci_in(&scif_port, SCFDR) & EPK_FIFO_BITS) >= EPK_FIFO_SIZE))
73 ; 84 ;
74 85
75 sci_out(&scif_port, SCxTDR, c); 86 sci_out(&scif_port, SCxTDR, c);
@@ -105,7 +116,22 @@ static struct console scif_console = {
105 .index = -1, 116 .index = -1,
106}; 117};
107 118
108#if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SH_STANDARD_BIOS) 119#if !defined(CONFIG_SH_STANDARD_BIOS)
120#if defined(CONFIG_CPU_SUBTYPE_SH7720)
121static void scif_sercon_init(char *s)
122{
123 sci_out(&scif_port, SCSCR, 0x0000); /* clear TE and RE */
124 sci_out(&scif_port, SCFCR, 0x4006); /* reset */
125 sci_out(&scif_port, SCSCR, 0x0000); /* select internal clock */
126 sci_out(&scif_port, SCSMR, EPK_SCSMR_VALUE);
127 sci_out(&scif_port, SCBRR, EPK_SCBRR_VALUE);
128
129 mdelay(1); /* wait 1-bit time */
130
131 sci_out(&scif_port, SCFCR, 0x0030); /* TTRG=b'11 */
132 sci_out(&scif_port, SCSCR, 0x0030); /* TE, RE */
133}
134#elif defined(CONFIG_CPU_SH4)
109#define DEFAULT_BAUD 115200 135#define DEFAULT_BAUD 115200
110/* 136/*
111 * Simple SCIF init, primarily aimed at SH7750 and other similar SH-4 137 * Simple SCIF init, primarily aimed at SH7750 and other similar SH-4
@@ -146,7 +172,8 @@ static void scif_sercon_init(char *s)
146 ctrl_outw(0, scif_port.mapbase + 36); 172 ctrl_outw(0, scif_port.mapbase + 36);
147 ctrl_outw(0x30, scif_port.mapbase + 8); 173 ctrl_outw(0x30, scif_port.mapbase + 8);
148} 174}
149#endif /* CONFIG_CPU_SH4 && !CONFIG_SH_STANDARD_BIOS */ 175#endif /* defined(CONFIG_CPU_SUBTYPE_SH7720) */
176#endif /* !defined(CONFIG_SH_STANDARD_BIOS) */
150#endif /* CONFIG_EARLY_SCIF_CONSOLE */ 177#endif /* CONFIG_EARLY_SCIF_CONSOLE */
151 178
152/* 179/*
@@ -163,17 +190,12 @@ static struct console *early_console =
163#endif 190#endif
164 ; 191 ;
165 192
166static int __initdata keep_early; 193static int __init setup_early_printk(char *buf)
167static int early_console_initialized;
168
169int __init setup_early_printk(char *buf)
170{ 194{
171 if (!buf) 195 int keep_early = 0;
172 return 0;
173 196
174 if (early_console_initialized) 197 if (!buf)
175 return 0; 198 return 0;
176 early_console_initialized = 1;
177 199
178 if (strstr(buf, "keep")) 200 if (strstr(buf, "keep"))
179 keep_early = 1; 201 keep_early = 1;
@@ -186,7 +208,8 @@ int __init setup_early_printk(char *buf)
186 if (!strncmp(buf, "serial", 6)) { 208 if (!strncmp(buf, "serial", 6)) {
187 early_console = &scif_console; 209 early_console = &scif_console;
188 210
189#if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SH_STANDARD_BIOS) 211#if (defined(CONFIG_CPU_SH4) || defined(CONFIG_CPU_SUBTYPE_SH7720)) && \
212 !defined(CONFIG_SH_STANDARD_BIOS)
190 scif_sercon_init(buf + 6); 213 scif_sercon_init(buf + 6);
191#endif 214#endif
192 } 215 }
diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S
index b46728027195..e0317ed080c3 100644
--- a/arch/sh/kernel/entry-common.S
+++ b/arch/sh/kernel/entry-common.S
@@ -176,7 +176,7 @@ work_notifysig:
176 jmp @r1 176 jmp @r1
177 lds r0, pr 177 lds r0, pr
178work_resched: 178work_resched:
179#ifndef CONFIG_PREEMPT 179#if defined(CONFIG_GUSA) && !defined(CONFIG_PREEMPT)
180 ! gUSA handling 180 ! gUSA handling
181 mov.l @(OFF_SP,r15), r0 ! get user space stack pointer 181 mov.l @(OFF_SP,r15), r0 ! get user space stack pointer
182 mov r0, r1 182 mov r0, r1
diff --git a/arch/sh/kernel/head.S b/arch/sh/kernel/head.S
index 0bccc0ca5a0f..3338239717f1 100644
--- a/arch/sh/kernel/head.S
+++ b/arch/sh/kernel/head.S
@@ -54,8 +54,8 @@ ENTRY(_stext)
54 mov.l 1f, r0 ! MD=1, RB=0, BL=0, IMASK=0xF 54 mov.l 1f, r0 ! MD=1, RB=0, BL=0, IMASK=0xF
55 ldc r0, sr 55 ldc r0, sr
56 ! Initialize global interrupt mask 56 ! Initialize global interrupt mask
57 mov #0, r0
58#ifdef CONFIG_CPU_HAS_SR_RB 57#ifdef CONFIG_CPU_HAS_SR_RB
58 mov #0, r0
59 ldc r0, r6_bank 59 ldc r0, r6_bank
60#endif 60#endif
61 61
@@ -72,15 +72,18 @@ ENTRY(_stext)
72 ! 72 !
73 mov.l 2f, r0 73 mov.l 2f, r0
74 mov r0, r15 ! Set initial r15 (stack pointer) 74 mov r0, r15 ! Set initial r15 (stack pointer)
75 mov #(THREAD_SIZE >> 10), r1
76 shll8 r1 ! r1 = THREAD_SIZE
77 shll2 r1
78 sub r1, r0 !
79#ifdef CONFIG_CPU_HAS_SR_RB 75#ifdef CONFIG_CPU_HAS_SR_RB
76 mov.l 7f, r0
80 ldc r0, r7_bank ! ... and initial thread_info 77 ldc r0, r7_bank ! ... and initial thread_info
81#endif 78#endif
82 79
83 ! Clear BSS area 80 ! Clear BSS area
81#ifdef CONFIG_SMP
82 mov.l 3f, r0
83 cmp/eq #0, r0 ! skip clear if set to zero
84 bt 10f
85#endif
86
84 mov.l 3f, r1 87 mov.l 3f, r1
85 add #4, r1 88 add #4, r1
86 mov.l 4f, r2 89 mov.l 4f, r2
@@ -89,13 +92,14 @@ ENTRY(_stext)
89 bf/s 9b ! while (r1 < r2) 92 bf/s 9b ! while (r1 < r2)
90 mov.l r0,@-r2 93 mov.l r0,@-r2
91 94
9510:
92 ! Additional CPU initialization 96 ! Additional CPU initialization
93 mov.l 6f, r0 97 mov.l 6f, r0
94 jsr @r0 98 jsr @r0
95 nop 99 nop
96 100
97 SYNCO() ! Wait for pending instructions.. 101 SYNCO() ! Wait for pending instructions..
98 102
99 ! Start kernel 103 ! Start kernel
100 mov.l 5f, r0 104 mov.l 5f, r0
101 jmp @r0 105 jmp @r0
@@ -107,8 +111,10 @@ ENTRY(_stext)
107#else 111#else
1081: .long 0x400080F0 ! MD=1, RB=0, BL=0, FD=1, IMASK=0xF 1121: .long 0x400080F0 ! MD=1, RB=0, BL=0, FD=1, IMASK=0xF
109#endif 113#endif
114ENTRY(stack_start)
1102: .long init_thread_union+THREAD_SIZE 1152: .long init_thread_union+THREAD_SIZE
1113: .long __bss_start 1163: .long __bss_start
1124: .long _end 1174: .long _end
1135: .long start_kernel 1185: .long start_kernel
1146: .long sh_cpu_init 1196: .long sh_cpu_init
1207: .long init_thread_union
diff --git a/arch/sh/kernel/kgdb_stub.c b/arch/sh/kernel/kgdb_stub.c
index edd1ec214e6d..2fdc700dfd6e 100644
--- a/arch/sh/kernel/kgdb_stub.c
+++ b/arch/sh/kernel/kgdb_stub.c
@@ -150,13 +150,6 @@ struct kgdb_regs trap_registers;
150char kgdb_in_gdb_mode; 150char kgdb_in_gdb_mode;
151char in_nmi; /* Set during NMI to prevent reentry */ 151char in_nmi; /* Set during NMI to prevent reentry */
152int kgdb_nofault; /* Boolean to ignore bus errs (i.e. in GDB) */ 152int kgdb_nofault; /* Boolean to ignore bus errs (i.e. in GDB) */
153int kgdb_enabled = 1; /* Default to enabled, cmdline can disable */
154
155/* Exposed for user access */
156struct task_struct *kgdb_current;
157unsigned int kgdb_g_imask;
158int kgdb_trapa_val;
159int kgdb_excode;
160 153
161/* Default values for SCI (can override via kernel args in setup.c) */ 154/* Default values for SCI (can override via kernel args in setup.c) */
162#ifndef CONFIG_KGDB_DEFPORT 155#ifndef CONFIG_KGDB_DEFPORT
@@ -616,7 +609,7 @@ static short *get_step_address(void)
616 else 609 else
617 addr = trap_registers.pc + 2; 610 addr = trap_registers.pc + 2;
618 611
619 kgdb_flush_icache_range(addr, addr + 2); 612 flush_icache_range(addr, addr + 2);
620 return (short *) addr; 613 return (short *) addr;
621} 614}
622 615
@@ -639,8 +632,7 @@ static void do_single_step(void)
639 *addr = STEP_OPCODE; 632 *addr = STEP_OPCODE;
640 633
641 /* Flush and return */ 634 /* Flush and return */
642 kgdb_flush_icache_range((long) addr, (long) addr + 2); 635 flush_icache_range((long) addr, (long) addr + 2);
643 return;
644} 636}
645 637
646/* Undo a single step */ 638/* Undo a single step */
@@ -650,7 +642,7 @@ static void undo_single_step(void)
650 /* Use stepped_address in case we stopped elsewhere */ 642 /* Use stepped_address in case we stopped elsewhere */
651 if (stepped_opcode != 0) { 643 if (stepped_opcode != 0) {
652 *(short*)stepped_address = stepped_opcode; 644 *(short*)stepped_address = stepped_opcode;
653 kgdb_flush_icache_range(stepped_address, stepped_address + 2); 645 flush_icache_range(stepped_address, stepped_address + 2);
654 } 646 }
655 stepped_opcode = 0; 647 stepped_opcode = 0;
656} 648}
@@ -736,7 +728,7 @@ static void write_mem_msg(int binary)
736 ebin_to_mem(ptr, (char*)addr, length); 728 ebin_to_mem(ptr, (char*)addr, length);
737 else 729 else
738 hex_to_mem(ptr, (char*)addr, length); 730 hex_to_mem(ptr, (char*)addr, length);
739 kgdb_flush_icache_range(addr, addr + length); 731 flush_icache_range(addr, addr + length);
740 ptr = 0; 732 ptr = 0;
741 send_ok_msg(); 733 send_ok_msg();
742 } 734 }
@@ -815,14 +807,10 @@ static void set_regs_msg(void)
815/* 807/*
816 * Bring up the ports.. 808 * Bring up the ports..
817 */ 809 */
818static int kgdb_serial_setup(void) 810static int __init kgdb_serial_setup(void)
819{ 811{
820 extern int kgdb_console_setup(struct console *co, char *options);
821 struct console dummy; 812 struct console dummy;
822 813 return kgdb_console_setup(&dummy, 0);
823 kgdb_console_setup(&dummy, 0);
824
825 return 0;
826} 814}
827#else 815#else
828#define kgdb_serial_setup() 0 816#define kgdb_serial_setup() 0
@@ -833,22 +821,6 @@ static void kgdb_command_loop(const int excep_code, const int trapa_value)
833{ 821{
834 int sigval; 822 int sigval;
835 823
836 if (excep_code == NMI_VEC) {
837#ifndef CONFIG_KGDB_NMI
838 printk(KERN_NOTICE "KGDB: Ignoring unexpected NMI?\n");
839 return;
840#else /* CONFIG_KGDB_NMI */
841 if (!kgdb_enabled) {
842 kgdb_enabled = 1;
843 kgdb_init();
844 }
845#endif /* CONFIG_KGDB_NMI */
846 }
847
848 /* Ignore if we're disabled */
849 if (!kgdb_enabled)
850 return;
851
852 /* Enter GDB mode (e.g. after detach) */ 824 /* Enter GDB mode (e.g. after detach) */
853 if (!kgdb_in_gdb_mode) { 825 if (!kgdb_in_gdb_mode) {
854 /* Do serial setup, notify user, issue preemptive ack */ 826 /* Do serial setup, notify user, issue preemptive ack */
@@ -959,18 +931,10 @@ static void handle_exception(struct pt_regs *regs)
959 931
960 /* Get excode for command loop call, user access */ 932 /* Get excode for command loop call, user access */
961 asm("stc r2_bank, %0":"=r"(excep_code)); 933 asm("stc r2_bank, %0":"=r"(excep_code));
962 kgdb_excode = excep_code;
963
964 /* Other interesting environment items for reference */
965 asm("stc r6_bank, %0":"=r"(kgdb_g_imask));
966 kgdb_current = current;
967 kgdb_trapa_val = trapa_value;
968 934
969 /* Act on the exception */ 935 /* Act on the exception */
970 kgdb_command_loop(excep_code, trapa_value); 936 kgdb_command_loop(excep_code, trapa_value);
971 937
972 kgdb_current = NULL;
973
974 /* Copy back the (maybe modified) registers */ 938 /* Copy back the (maybe modified) registers */
975 for (count = 0; count < 16; count++) 939 for (count = 0; count < 16; count++)
976 regs->regs[count] = trap_registers.regs[count]; 940 regs->regs[count] = trap_registers.regs[count];
@@ -994,11 +958,8 @@ asmlinkage void kgdb_handle_exception(unsigned long r4, unsigned long r5,
994} 958}
995 959
996/* Initialise the KGDB data structures and serial configuration */ 960/* Initialise the KGDB data structures and serial configuration */
997int kgdb_init(void) 961int __init kgdb_init(void)
998{ 962{
999 if (!kgdb_enabled)
1000 return 1;
1001
1002 in_nmi = 0; 963 in_nmi = 0;
1003 kgdb_nofault = 0; 964 kgdb_nofault = 0;
1004 stepped_opcode = 0; 965 stepped_opcode = 0;
diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
index 15ae322dbd74..b4469992d6b2 100644
--- a/arch/sh/kernel/process.c
+++ b/arch/sh/kernel/process.c
@@ -19,6 +19,7 @@
19#include <linux/tick.h> 19#include <linux/tick.h>
20#include <linux/reboot.h> 20#include <linux/reboot.h>
21#include <linux/fs.h> 21#include <linux/fs.h>
22#include <linux/preempt.h>
22#include <asm/uaccess.h> 23#include <asm/uaccess.h>
23#include <asm/mmu_context.h> 24#include <asm/mmu_context.h>
24#include <asm/pgalloc.h> 25#include <asm/pgalloc.h>
@@ -349,12 +350,11 @@ struct task_struct *__switch_to(struct task_struct *prev,
349 unlazy_fpu(prev, task_pt_regs(prev)); 350 unlazy_fpu(prev, task_pt_regs(prev));
350#endif 351#endif
351 352
352#ifdef CONFIG_PREEMPT 353#if defined(CONFIG_GUSA) && defined(CONFIG_PREEMPT)
353 { 354 {
354 unsigned long flags;
355 struct pt_regs *regs; 355 struct pt_regs *regs;
356 356
357 local_irq_save(flags); 357 preempt_disable();
358 regs = task_pt_regs(prev); 358 regs = task_pt_regs(prev);
359 if (user_mode(regs) && regs->regs[15] >= 0xc0000000) { 359 if (user_mode(regs) && regs->regs[15] >= 0xc0000000) {
360 int offset = (int)regs->regs[15]; 360 int offset = (int)regs->regs[15];
@@ -365,7 +365,7 @@ struct task_struct *__switch_to(struct task_struct *prev,
365 /* Go to rewind point */ 365 /* Go to rewind point */
366 regs->pc = regs->regs[0] + offset; 366 regs->pc = regs->regs[0] + offset;
367 } 367 }
368 local_irq_restore(flags); 368 preempt_enable_no_resched();
369 } 369 }
370#endif 370#endif
371 371
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
index 2cf7dec0d690..b3027a6775b9 100644
--- a/arch/sh/kernel/setup.c
+++ b/arch/sh/kernel/setup.c
@@ -22,6 +22,7 @@
22#include <linux/mm.h> 22#include <linux/mm.h>
23#include <linux/kexec.h> 23#include <linux/kexec.h>
24#include <linux/module.h> 24#include <linux/module.h>
25#include <linux/smp.h>
25#include <asm/uaccess.h> 26#include <asm/uaccess.h>
26#include <asm/io.h> 27#include <asm/io.h>
27#include <asm/page.h> 28#include <asm/page.h>
@@ -42,7 +43,13 @@ extern void * __rd_start, * __rd_end;
42 * This value will be used at the very early stage of serial setup. 43 * This value will be used at the very early stage of serial setup.
43 * The bigger value means no problem. 44 * The bigger value means no problem.
44 */ 45 */
45struct sh_cpuinfo boot_cpu_data = { CPU_SH_NONE, 10000000, }; 46struct sh_cpuinfo cpu_data[NR_CPUS] __read_mostly = {
47 [0] = {
48 .type = CPU_SH_NONE,
49 .loops_per_jiffy = 10000000,
50 },
51};
52EXPORT_SYMBOL(cpu_data);
46 53
47/* 54/*
48 * The machine vector. First entry in .machvec.init, or clobbered by 55 * The machine vector. First entry in .machvec.init, or clobbered by
@@ -272,6 +279,10 @@ void __init setup_arch(char **cmdline_p)
272 sh_mv.mv_setup(cmdline_p); 279 sh_mv.mv_setup(cmdline_p);
273 280
274 paging_init(); 281 paging_init();
282
283#ifdef CONFIG_SMP
284 plat_smp_setup();
285#endif
275} 286}
276 287
277static const char *cpu_name[] = { 288static const char *cpu_name[] = {
@@ -279,7 +290,7 @@ static const char *cpu_name[] = {
279 [CPU_SH7705] = "SH7705", [CPU_SH7706] = "SH7706", 290 [CPU_SH7705] = "SH7705", [CPU_SH7706] = "SH7706",
280 [CPU_SH7707] = "SH7707", [CPU_SH7708] = "SH7708", 291 [CPU_SH7707] = "SH7707", [CPU_SH7708] = "SH7708",
281 [CPU_SH7709] = "SH7709", [CPU_SH7710] = "SH7710", 292 [CPU_SH7709] = "SH7709", [CPU_SH7710] = "SH7710",
282 [CPU_SH7712] = "SH7712", 293 [CPU_SH7712] = "SH7712", [CPU_SH7720] = "SH7720",
283 [CPU_SH7729] = "SH7729", [CPU_SH7750] = "SH7750", 294 [CPU_SH7729] = "SH7729", [CPU_SH7750] = "SH7750",
284 [CPU_SH7750S] = "SH7750S", [CPU_SH7750R] = "SH7750R", 295 [CPU_SH7750S] = "SH7750S", [CPU_SH7750R] = "SH7750R",
285 [CPU_SH7751] = "SH7751", [CPU_SH7751R] = "SH7751R", 296 [CPU_SH7751] = "SH7751", [CPU_SH7751R] = "SH7751R",
diff --git a/arch/sh/kernel/sh_ksyms.c b/arch/sh/kernel/sh_ksyms.c
index 37aef0a85197..548e4285b375 100644
--- a/arch/sh/kernel/sh_ksyms.c
+++ b/arch/sh/kernel/sh_ksyms.c
@@ -8,7 +8,7 @@
8#include <linux/vmalloc.h> 8#include <linux/vmalloc.h>
9#include <linux/pci.h> 9#include <linux/pci.h>
10#include <linux/irq.h> 10#include <linux/irq.h>
11 11#include <asm/sections.h>
12#include <asm/semaphore.h> 12#include <asm/semaphore.h>
13#include <asm/processor.h> 13#include <asm/processor.h>
14#include <asm/uaccess.h> 14#include <asm/uaccess.h>
@@ -43,7 +43,6 @@ EXPORT_SYMBOL(memcpy);
43EXPORT_SYMBOL(memset); 43EXPORT_SYMBOL(memset);
44EXPORT_SYMBOL(memmove); 44EXPORT_SYMBOL(memmove);
45EXPORT_SYMBOL(__copy_user); 45EXPORT_SYMBOL(__copy_user);
46EXPORT_SYMBOL(boot_cpu_data);
47 46
48#ifdef CONFIG_MMU 47#ifdef CONFIG_MMU
49EXPORT_SYMBOL(get_vm_area); 48EXPORT_SYMBOL(get_vm_area);
@@ -53,6 +52,7 @@ EXPORT_SYMBOL(get_vm_area);
53EXPORT_SYMBOL(__up); 52EXPORT_SYMBOL(__up);
54EXPORT_SYMBOL(__down); 53EXPORT_SYMBOL(__down);
55EXPORT_SYMBOL(__down_interruptible); 54EXPORT_SYMBOL(__down_interruptible);
55EXPORT_SYMBOL(__down_trylock);
56 56
57EXPORT_SYMBOL(__udelay); 57EXPORT_SYMBOL(__udelay);
58EXPORT_SYMBOL(__ndelay); 58EXPORT_SYMBOL(__ndelay);
@@ -128,7 +128,8 @@ DECLARE_EXPORT(__movstrSI12_i4);
128#endif /* __GNUC__ == 4 */ 128#endif /* __GNUC__ == 4 */
129#endif 129#endif
130 130
131#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB) 131#if !defined(CONFIG_CACHE_OFF) && (defined(CONFIG_CPU_SH4) || \
132 defined(CONFIG_SH7705_CACHE_32KB))
132/* needed by some modules */ 133/* needed by some modules */
133EXPORT_SYMBOL(flush_cache_all); 134EXPORT_SYMBOL(flush_cache_all);
134EXPORT_SYMBOL(flush_cache_range); 135EXPORT_SYMBOL(flush_cache_range);
@@ -136,17 +137,11 @@ EXPORT_SYMBOL(flush_dcache_page);
136EXPORT_SYMBOL(__flush_purge_region); 137EXPORT_SYMBOL(__flush_purge_region);
137#endif 138#endif
138 139
139#if defined(CONFIG_MMU) && (defined(CONFIG_CPU_SH4) || \ 140#if !defined(CONFIG_CACHE_OFF) && defined(CONFIG_MMU) && \
140 defined(CONFIG_SH7705_CACHE_32KB)) 141 (defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB))
141EXPORT_SYMBOL(clear_user_page); 142EXPORT_SYMBOL(clear_user_page);
142#endif 143#endif
143 144
144EXPORT_SYMBOL(__down_trylock);
145
146#ifdef CONFIG_SMP
147EXPORT_SYMBOL(synchronize_irq);
148#endif
149
150EXPORT_SYMBOL(csum_partial); 145EXPORT_SYMBOL(csum_partial);
151EXPORT_SYMBOL(csum_partial_copy_generic); 146EXPORT_SYMBOL(csum_partial_copy_generic);
152#ifdef CONFIG_IPV6 147#ifdef CONFIG_IPV6
@@ -154,3 +149,4 @@ EXPORT_SYMBOL(csum_ipv6_magic);
154#endif 149#endif
155EXPORT_SYMBOL(clear_page); 150EXPORT_SYMBOL(clear_page);
156EXPORT_SYMBOL(__clear_user); 151EXPORT_SYMBOL(__clear_user);
152EXPORT_SYMBOL(_ebss);
diff --git a/arch/sh/kernel/signal.c b/arch/sh/kernel/signal.c
index 706d81ccd101..2f42442cf164 100644
--- a/arch/sh/kernel/signal.c
+++ b/arch/sh/kernel/signal.c
@@ -507,13 +507,11 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
507 ctrl_inw(regs->pc - 4)); 507 ctrl_inw(regs->pc - 4));
508 break; 508 break;
509 } 509 }
510#ifdef CONFIG_GUSA
510 } else { 511 } else {
511 /* gUSA handling */ 512 /* gUSA handling */
512#ifdef CONFIG_PREEMPT 513 preempt_disable();
513 unsigned long flags;
514 514
515 local_irq_save(flags);
516#endif
517 if (regs->regs[15] >= 0xc0000000) { 515 if (regs->regs[15] >= 0xc0000000) {
518 int offset = (int)regs->regs[15]; 516 int offset = (int)regs->regs[15];
519 517
@@ -524,8 +522,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
524 regs->pc = regs->regs[0] + offset - 522 regs->pc = regs->regs[0] + offset -
525 instruction_size(ctrl_inw(regs->pc-4)); 523 instruction_size(ctrl_inw(regs->pc-4));
526 } 524 }
527#ifdef CONFIG_PREEMPT 525
528 local_irq_restore(flags); 526 preempt_enable_no_resched();
529#endif 527#endif
530 } 528 }
531 529
diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c
index 283e1425ced5..94075e1a1e61 100644
--- a/arch/sh/kernel/smp.c
+++ b/arch/sh/kernel/smp.c
@@ -3,68 +3,40 @@
3 * 3 *
4 * SMP support for the SuperH processors. 4 * SMP support for the SuperH processors.
5 * 5 *
6 * Copyright (C) 2002, 2003 Paul Mundt 6 * Copyright (C) 2002 - 2007 Paul Mundt
7 * Copyright (C) 2006 - 2007 Akio Idehara
7 * 8 *
8 * This program is free software; you can redistribute it and/or modify it 9 * This file is subject to the terms and conditions of the GNU General Public
9 * under the terms of the GNU General Public License as published by the 10 * License. See the file "COPYING" in the main directory of this archive
10 * Free Software Foundation; either version 2 of the License, or (at your 11 * for more details.
11 * option) any later version.
12 */ 12 */
13
14#include <linux/err.h> 13#include <linux/err.h>
15#include <linux/cache.h> 14#include <linux/cache.h>
16#include <linux/cpumask.h> 15#include <linux/cpumask.h>
17#include <linux/delay.h> 16#include <linux/delay.h>
18#include <linux/init.h> 17#include <linux/init.h>
19#include <linux/interrupt.h>
20#include <linux/spinlock.h> 18#include <linux/spinlock.h>
21#include <linux/threads.h> 19#include <linux/mm.h>
22#include <linux/module.h> 20#include <linux/module.h>
23#include <linux/time.h> 21#include <linux/interrupt.h>
24#include <linux/timex.h>
25#include <linux/sched.h>
26#include <linux/module.h>
27
28#include <asm/atomic.h> 22#include <asm/atomic.h>
29#include <asm/processor.h> 23#include <asm/processor.h>
30#include <asm/system.h> 24#include <asm/system.h>
31#include <asm/mmu_context.h> 25#include <asm/mmu_context.h>
32#include <asm/smp.h> 26#include <asm/smp.h>
27#include <asm/cacheflush.h>
28#include <asm/sections.h>
33 29
34/* 30int __cpu_number_map[NR_CPUS]; /* Map physical to logical */
35 * This was written with the Sega Saturn (SMP SH-2 7604) in mind, 31int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */
36 * but is designed to be usable regardless if there's an MMU
37 * present or not.
38 */
39struct sh_cpuinfo cpu_data[NR_CPUS];
40
41extern void per_cpu_trap_init(void);
42 32
43cpumask_t cpu_possible_map; 33cpumask_t cpu_possible_map;
44EXPORT_SYMBOL(cpu_possible_map); 34EXPORT_SYMBOL(cpu_possible_map);
45 35
46cpumask_t cpu_online_map; 36cpumask_t cpu_online_map;
47EXPORT_SYMBOL(cpu_online_map); 37EXPORT_SYMBOL(cpu_online_map);
48static atomic_t cpus_booted = ATOMIC_INIT(0);
49 38
50/* These are defined by the board-specific code. */ 39static atomic_t cpus_booted = ATOMIC_INIT(0);
51
52/*
53 * Cause the function described by call_data to be executed on the passed
54 * cpu. When the function has finished, increment the finished field of
55 * call_data.
56 */
57void __smp_send_ipi(unsigned int cpu, unsigned int action);
58
59/*
60 * Find the number of available processors
61 */
62unsigned int __smp_probe_cpus(void);
63
64/*
65 * Start a particular processor
66 */
67void __smp_slave_init(unsigned int cpu);
68 40
69/* 41/*
70 * Run specified function on a particular processor. 42 * Run specified function on a particular processor.
@@ -73,74 +45,123 @@ void __smp_call_function(unsigned int cpu);
73 45
74static inline void __init smp_store_cpu_info(unsigned int cpu) 46static inline void __init smp_store_cpu_info(unsigned int cpu)
75{ 47{
76 cpu_data[cpu].loops_per_jiffy = loops_per_jiffy; 48 struct sh_cpuinfo *c = cpu_data + cpu;
49
50 c->loops_per_jiffy = loops_per_jiffy;
77} 51}
78 52
79void __init smp_prepare_cpus(unsigned int max_cpus) 53void __init smp_prepare_cpus(unsigned int max_cpus)
80{ 54{
81 unsigned int cpu = smp_processor_id(); 55 unsigned int cpu = smp_processor_id();
82 int i;
83 56
84 atomic_set(&cpus_booted, 1); 57 init_new_context(current, &init_mm);
85 smp_store_cpu_info(cpu); 58 current_thread_info()->cpu = cpu;
86 59 plat_prepare_cpus(max_cpus);
87 for (i = 0; i < __smp_probe_cpus(); i++) 60
88 cpu_set(i, cpu_possible_map); 61#ifndef CONFIG_HOTPLUG_CPU
62 cpu_present_map = cpu_possible_map;
63#endif
89} 64}
90 65
91void __devinit smp_prepare_boot_cpu(void) 66void __devinit smp_prepare_boot_cpu(void)
92{ 67{
93 unsigned int cpu = smp_processor_id(); 68 unsigned int cpu = smp_processor_id();
94 69
70 __cpu_number_map[0] = cpu;
71 __cpu_logical_map[0] = cpu;
72
95 cpu_set(cpu, cpu_online_map); 73 cpu_set(cpu, cpu_online_map);
96 cpu_set(cpu, cpu_possible_map); 74 cpu_set(cpu, cpu_possible_map);
97} 75}
98 76
99int __cpu_up(unsigned int cpu) 77asmlinkage void __cpuinit start_secondary(void)
100{ 78{
101 struct task_struct *tsk; 79 unsigned int cpu;
80 struct mm_struct *mm = &init_mm;
102 81
103 tsk = fork_idle(cpu); 82 atomic_inc(&mm->mm_count);
83 atomic_inc(&mm->mm_users);
84 current->active_mm = mm;
85 BUG_ON(current->mm);
86 enter_lazy_tlb(mm, current);
104 87
105 if (IS_ERR(tsk)) 88 per_cpu_trap_init();
106 panic("Failed forking idle task for cpu %d\n", cpu); 89
107 90 preempt_disable();
108 task_thread_info(tsk)->cpu = cpu; 91
92 local_irq_enable();
93
94 calibrate_delay();
95
96 cpu = smp_processor_id();
97 smp_store_cpu_info(cpu);
109 98
110 cpu_set(cpu, cpu_online_map); 99 cpu_set(cpu, cpu_online_map);
111 100
112 return 0; 101 cpu_idle();
113} 102}
114 103
115int start_secondary(void *unused) 104extern struct {
105 unsigned long sp;
106 unsigned long bss_start;
107 unsigned long bss_end;
108 void *start_kernel_fn;
109 void *cpu_init_fn;
110 void *thread_info;
111} stack_start;
112
113int __cpuinit __cpu_up(unsigned int cpu)
116{ 114{
117 unsigned int cpu; 115 struct task_struct *tsk;
116 unsigned long timeout;
118 117
119 cpu = smp_processor_id(); 118 tsk = fork_idle(cpu);
119 if (IS_ERR(tsk)) {
120 printk(KERN_ERR "Failed forking idle task for cpu %d\n", cpu);
121 return PTR_ERR(tsk);
122 }
120 123
121 atomic_inc(&init_mm.mm_count); 124 /* Fill in data in head.S for secondary cpus */
122 current->active_mm = &init_mm; 125 stack_start.sp = tsk->thread.sp;
126 stack_start.thread_info = tsk->stack;
127 stack_start.bss_start = 0; /* don't clear bss for secondary cpus */
128 stack_start.start_kernel_fn = start_secondary;
123 129
124 smp_store_cpu_info(cpu); 130 flush_cache_all();
125 131
126 __smp_slave_init(cpu); 132 plat_start_cpu(cpu, (unsigned long)_stext);
127 preempt_disable();
128 per_cpu_trap_init();
129
130 atomic_inc(&cpus_booted);
131 133
132 cpu_idle(); 134 timeout = jiffies + HZ;
133 return 0; 135 while (time_before(jiffies, timeout)) {
136 if (cpu_online(cpu))
137 break;
138
139 udelay(10);
140 }
141
142 if (cpu_online(cpu))
143 return 0;
144
145 return -ENOENT;
134} 146}
135 147
136void __init smp_cpus_done(unsigned int max_cpus) 148void __init smp_cpus_done(unsigned int max_cpus)
137{ 149{
138 smp_mb(); 150 unsigned long bogosum = 0;
151 int cpu;
152
153 for_each_online_cpu(cpu)
154 bogosum += cpu_data[cpu].loops_per_jiffy;
155
156 printk(KERN_INFO "SMP: Total of %d processors activated "
157 "(%lu.%02lu BogoMIPS).\n", num_online_cpus(),
158 bogosum / (500000/HZ),
159 (bogosum / (5000/HZ)) % 100);
139} 160}
140 161
141void smp_send_reschedule(int cpu) 162void smp_send_reschedule(int cpu)
142{ 163{
143 __smp_send_ipi(cpu, SMP_MSG_RESCHEDULE); 164 plat_send_ipi(cpu, SMP_MSG_RESCHEDULE);
144} 165}
145 166
146static void stop_this_cpu(void *unused) 167static void stop_this_cpu(void *unused)
@@ -157,7 +178,6 @@ void smp_send_stop(void)
157 smp_call_function(stop_this_cpu, 0, 1, 0); 178 smp_call_function(stop_this_cpu, 0, 1, 0);
158} 179}
159 180
160
161struct smp_fn_call_struct smp_fn_call = { 181struct smp_fn_call_struct smp_fn_call = {
162 .lock = SPIN_LOCK_UNLOCKED, 182 .lock = SPIN_LOCK_UNLOCKED,
163 .finished = ATOMIC_INIT(0), 183 .finished = ATOMIC_INIT(0),
@@ -175,9 +195,6 @@ int smp_call_function(void (*func)(void *info), void *info, int retry, int wait)
175 unsigned int nr_cpus = atomic_read(&cpus_booted); 195 unsigned int nr_cpus = atomic_read(&cpus_booted);
176 int i; 196 int i;
177 197
178 if (nr_cpus < 2)
179 return 0;
180
181 /* Can deadlock when called with interrupts disabled */ 198 /* Can deadlock when called with interrupts disabled */
182 WARN_ON(irqs_disabled()); 199 WARN_ON(irqs_disabled());
183 200
@@ -189,7 +206,7 @@ int smp_call_function(void (*func)(void *info), void *info, int retry, int wait)
189 206
190 for (i = 0; i < nr_cpus; i++) 207 for (i = 0; i < nr_cpus; i++)
191 if (i != smp_processor_id()) 208 if (i != smp_processor_id())
192 __smp_call_function(i); 209 plat_send_ipi(i, SMP_MSG_FUNCTION);
193 210
194 if (wait) 211 if (wait)
195 while (atomic_read(&smp_fn_call.finished) != (nr_cpus - 1)); 212 while (atomic_read(&smp_fn_call.finished) != (nr_cpus - 1));
@@ -205,3 +222,143 @@ int setup_profiling_timer(unsigned int multiplier)
205 return 0; 222 return 0;
206} 223}
207 224
225static void flush_tlb_all_ipi(void *info)
226{
227 local_flush_tlb_all();
228}
229
230void flush_tlb_all(void)
231{
232 on_each_cpu(flush_tlb_all_ipi, 0, 1, 1);
233}
234
235static void flush_tlb_mm_ipi(void *mm)
236{
237 local_flush_tlb_mm((struct mm_struct *)mm);
238}
239
240/*
241 * The following tlb flush calls are invoked when old translations are
242 * being torn down, or pte attributes are changing. For single threaded
243 * address spaces, a new context is obtained on the current cpu, and tlb
244 * context on other cpus are invalidated to force a new context allocation
245 * at switch_mm time, should the mm ever be used on other cpus. For
246 * multithreaded address spaces, intercpu interrupts have to be sent.
247 * Another case where intercpu interrupts are required is when the target
248 * mm might be active on another cpu (eg debuggers doing the flushes on
249 * behalf of debugees, kswapd stealing pages from another process etc).
250 * Kanoj 07/00.
251 */
252
253void flush_tlb_mm(struct mm_struct *mm)
254{
255 preempt_disable();
256
257 if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) {
258 smp_call_function(flush_tlb_mm_ipi, (void *)mm, 1, 1);
259 } else {
260 int i;
261 for (i = 0; i < num_online_cpus(); i++)
262 if (smp_processor_id() != i)
263 cpu_context(i, mm) = 0;
264 }
265 local_flush_tlb_mm(mm);
266
267 preempt_enable();
268}
269
270struct flush_tlb_data {
271 struct vm_area_struct *vma;
272 unsigned long addr1;
273 unsigned long addr2;
274};
275
276static void flush_tlb_range_ipi(void *info)
277{
278 struct flush_tlb_data *fd = (struct flush_tlb_data *)info;
279
280 local_flush_tlb_range(fd->vma, fd->addr1, fd->addr2);
281}
282
283void flush_tlb_range(struct vm_area_struct *vma,
284 unsigned long start, unsigned long end)
285{
286 struct mm_struct *mm = vma->vm_mm;
287
288 preempt_disable();
289 if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) {
290 struct flush_tlb_data fd;
291
292 fd.vma = vma;
293 fd.addr1 = start;
294 fd.addr2 = end;
295 smp_call_function(flush_tlb_range_ipi, (void *)&fd, 1, 1);
296 } else {
297 int i;
298 for (i = 0; i < num_online_cpus(); i++)
299 if (smp_processor_id() != i)
300 cpu_context(i, mm) = 0;
301 }
302 local_flush_tlb_range(vma, start, end);
303 preempt_enable();
304}
305
306static void flush_tlb_kernel_range_ipi(void *info)
307{
308 struct flush_tlb_data *fd = (struct flush_tlb_data *)info;
309
310 local_flush_tlb_kernel_range(fd->addr1, fd->addr2);
311}
312
313void flush_tlb_kernel_range(unsigned long start, unsigned long end)
314{
315 struct flush_tlb_data fd;
316
317 fd.addr1 = start;
318 fd.addr2 = end;
319 on_each_cpu(flush_tlb_kernel_range_ipi, (void *)&fd, 1, 1);
320}
321
322static void flush_tlb_page_ipi(void *info)
323{
324 struct flush_tlb_data *fd = (struct flush_tlb_data *)info;
325
326 local_flush_tlb_page(fd->vma, fd->addr1);
327}
328
329void flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
330{
331 preempt_disable();
332 if ((atomic_read(&vma->vm_mm->mm_users) != 1) ||
333 (current->mm != vma->vm_mm)) {
334 struct flush_tlb_data fd;
335
336 fd.vma = vma;
337 fd.addr1 = page;
338 smp_call_function(flush_tlb_page_ipi, (void *)&fd, 1, 1);
339 } else {
340 int i;
341 for (i = 0; i < num_online_cpus(); i++)
342 if (smp_processor_id() != i)
343 cpu_context(i, vma->vm_mm) = 0;
344 }
345 local_flush_tlb_page(vma, page);
346 preempt_enable();
347}
348
349static void flush_tlb_one_ipi(void *info)
350{
351 struct flush_tlb_data *fd = (struct flush_tlb_data *)info;
352 local_flush_tlb_one(fd->addr1, fd->addr2);
353}
354
355void flush_tlb_one(unsigned long asid, unsigned long vaddr)
356{
357 struct flush_tlb_data fd;
358
359 fd.addr1 = asid;
360 fd.addr2 = vaddr;
361
362 smp_call_function(flush_tlb_one_ipi, (void *)&fd, 1, 1);
363 local_flush_tlb_one(asid, vaddr);
364}
diff --git a/arch/sh/kernel/syscalls.S b/arch/sh/kernel/syscalls.S
index 91fb7024e06f..10bec45415ba 100644
--- a/arch/sh/kernel/syscalls.S
+++ b/arch/sh/kernel/syscalls.S
@@ -14,24 +14,6 @@
14#include <linux/sys.h> 14#include <linux/sys.h>
15#include <linux/linkage.h> 15#include <linux/linkage.h>
16 16
17#if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE)
18#define sys_nfsservctl sys_ni_syscall
19#endif
20
21#if !defined(CONFIG_MMU)
22#define sys_madvise sys_ni_syscall
23#define sys_readahead sys_ni_syscall
24#define sys_mprotect sys_ni_syscall
25#define sys_msync sys_ni_syscall
26#define sys_mlock sys_ni_syscall
27#define sys_munlock sys_ni_syscall
28#define sys_mlockall sys_ni_syscall
29#define sys_munlockall sys_ni_syscall
30#define sys_mremap sys_ni_syscall
31#define sys_mincore sys_ni_syscall
32#define sys_remap_file_pages sys_ni_syscall
33#endif
34
35 .data 17 .data
36ENTRY(sys_call_table) 18ENTRY(sys_call_table)
37 .long sys_restart_syscall /* 0 - old "setup()" system call*/ 19 .long sys_restart_syscall /* 0 - old "setup()" system call*/
diff --git a/arch/sh/kernel/timers/timer-tmu.c b/arch/sh/kernel/timers/timer-tmu.c
index 8a545d54e2d3..628ec9a15e38 100644
--- a/arch/sh/kernel/timers/timer-tmu.c
+++ b/arch/sh/kernel/timers/timer-tmu.c
@@ -173,7 +173,8 @@ static int tmu_timer_init(void)
173 173
174 tmu_timer_stop(); 174 tmu_timer_stop();
175 175
176#if !defined(CONFIG_CPU_SUBTYPE_SH7760) && \ 176#if !defined(CONFIG_CPU_SUBTYPE_SH7720) && \
177 !defined(CONFIG_CPU_SUBTYPE_SH7760) && \
177 !defined(CONFIG_CPU_SUBTYPE_SH7785) && \ 178 !defined(CONFIG_CPU_SUBTYPE_SH7785) && \
178 !defined(CONFIG_CPU_SUBTYPE_SHX3) 179 !defined(CONFIG_CPU_SUBTYPE_SHX3)
179 ctrl_outb(TMU_TOCR_INIT, TMU_TOCR); 180 ctrl_outb(TMU_TOCR_INIT, TMU_TOCR);
diff --git a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c
index 67015044d74a..dcb46e71da1c 100644
--- a/arch/sh/kernel/traps.c
+++ b/arch/sh/kernel/traps.c
@@ -807,12 +807,13 @@ static inline void __init gdb_vbr_init(void)
807} 807}
808#endif 808#endif
809 809
810void __init per_cpu_trap_init(void) 810void __cpuinit per_cpu_trap_init(void)
811{ 811{
812 extern void *vbr_base; 812 extern void *vbr_base;
813 813
814#ifdef CONFIG_SH_STANDARD_BIOS 814#ifdef CONFIG_SH_STANDARD_BIOS
815 gdb_vbr_init(); 815 if (raw_smp_processor_id() == 0)
816 gdb_vbr_init();
816#endif 817#endif
817 818
818 /* NOTE: The VBR value should be at P1 819 /* NOTE: The VBR value should be at P1
diff --git a/arch/sh/kernel/vmlinux.lds.S b/arch/sh/kernel/vmlinux.lds.S
index 9cb95af7b090..6d5abba2ee27 100644
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -62,6 +62,8 @@ SECTIONS
62 __nosave_end = .; 62 __nosave_end = .;
63 63
64 PERCPU(PAGE_SIZE) 64 PERCPU(PAGE_SIZE)
65
66 . = ALIGN(L1_CACHE_BYTES);
65 .data.cacheline_aligned : { *(.data.cacheline_aligned) } 67 .data.cacheline_aligned : { *(.data.cacheline_aligned) }
66 68
67 _edata = .; /* End of data section */ 69 _edata = .; /* End of data section */
@@ -89,7 +91,14 @@ SECTIONS
89 __con_initcall_end = .; 91 __con_initcall_end = .;
90 SECURITY_INIT 92 SECURITY_INIT
91 93
94 /* .exit.text is discarded at runtime, not link time, to deal with
95 references from .rodata */
96 .exit.text : { *(.exit.text) }
97 .exit.data : { *(.exit.data) }
98
92#ifdef CONFIG_BLK_DEV_INITRD 99#ifdef CONFIG_BLK_DEV_INITRD
100 . = ALIGN(PAGE_SIZE);
101
93 __initramfs_start = .; 102 __initramfs_start = .;
94 .init.ramfs : { *(.init.ramfs) } 103 .init.ramfs : { *(.init.ramfs) }
95 __initramfs_end = .; 104 __initramfs_end = .;
@@ -107,6 +116,7 @@ SECTIONS
107 *(.bss.page_aligned) 116 *(.bss.page_aligned)
108 *(.bss) 117 *(.bss)
109 . = ALIGN(4); 118 . = ALIGN(4);
119 _ebss = .; /* uClinux MTD sucks */
110 _end = . ; 120 _end = . ;
111 } 121 }
112 122
diff --git a/arch/sh/mm/Kconfig b/arch/sh/mm/Kconfig
index 43f3972a5fb9..cf446bbab5b0 100644
--- a/arch/sh/mm/Kconfig
+++ b/arch/sh/mm/Kconfig
@@ -2,7 +2,6 @@
2# Processor families 2# Processor families
3# 3#
4config CPU_SH2 4config CPU_SH2
5 select SH_WRITETHROUGH if !CPU_SH2A
6 bool 5 bool
7 6
8config CPU_SH2A 7config CPU_SH2A
@@ -19,6 +18,7 @@ config CPU_SH4
19 select CPU_HAS_INTEVT 18 select CPU_HAS_INTEVT
20 select CPU_HAS_SR_RB 19 select CPU_HAS_SR_RB
21 select CPU_HAS_PTEA if (!CPU_SUBTYPE_ST40 && !CPU_SH4A) || CPU_SHX2 20 select CPU_HAS_PTEA if (!CPU_SUBTYPE_ST40 && !CPU_SH4A) || CPU_SHX2
21 select CPU_HAS_FPU if !CPU_SH4AL_DSP
22 22
23config CPU_SH4A 23config CPU_SH4A
24 bool 24 bool
@@ -32,7 +32,6 @@ config CPU_SH4AL_DSP
32config CPU_SUBTYPE_ST40 32config CPU_SUBTYPE_ST40
33 bool 33 bool
34 select CPU_SH4 34 select CPU_SH4
35 select CPU_HAS_INTC2_IRQ
36 35
37config CPU_SHX2 36config CPU_SHX2
38 bool 37 bool
@@ -52,26 +51,22 @@ choice
52config CPU_SUBTYPE_SH7619 51config CPU_SUBTYPE_SH7619
53 bool "Support SH7619 processor" 52 bool "Support SH7619 processor"
54 select CPU_SH2 53 select CPU_SH2
55 select CPU_HAS_IPR_IRQ
56 54
57# SH-2A Processor Support 55# SH-2A Processor Support
58 56
59config CPU_SUBTYPE_SH7206 57config CPU_SUBTYPE_SH7206
60 bool "Support SH7206 processor" 58 bool "Support SH7206 processor"
61 select CPU_SH2A 59 select CPU_SH2A
62 select CPU_HAS_IPR_IRQ
63 60
64# SH-3 Processor Support 61# SH-3 Processor Support
65 62
66config CPU_SUBTYPE_SH7705 63config CPU_SUBTYPE_SH7705
67 bool "Support SH7705 processor" 64 bool "Support SH7705 processor"
68 select CPU_SH3 65 select CPU_SH3
69 select CPU_HAS_IPR_IRQ
70 66
71config CPU_SUBTYPE_SH7706 67config CPU_SUBTYPE_SH7706
72 bool "Support SH7706 processor" 68 bool "Support SH7706 processor"
73 select CPU_SH3 69 select CPU_SH3
74 select CPU_HAS_IPR_IRQ
75 help 70 help
76 Select SH7706 if you have a 133 Mhz SH-3 HD6417706 CPU. 71 Select SH7706 if you have a 133 Mhz SH-3 HD6417706 CPU.
77 72
@@ -91,14 +86,12 @@ config CPU_SUBTYPE_SH7708
91config CPU_SUBTYPE_SH7709 86config CPU_SUBTYPE_SH7709
92 bool "Support SH7709 processor" 87 bool "Support SH7709 processor"
93 select CPU_SH3 88 select CPU_SH3
94 select CPU_HAS_IPR_IRQ
95 help 89 help
96 Select SH7709 if you have a 80 Mhz SH-3 HD6417709 CPU. 90 Select SH7709 if you have a 80 Mhz SH-3 HD6417709 CPU.
97 91
98config CPU_SUBTYPE_SH7710 92config CPU_SUBTYPE_SH7710
99 bool "Support SH7710 processor" 93 bool "Support SH7710 processor"
100 select CPU_SH3 94 select CPU_SH3
101 select CPU_HAS_IPR_IRQ
102 select CPU_HAS_DSP 95 select CPU_HAS_DSP
103 help 96 help
104 Select SH7710 if you have a SH3-DSP SH7710 CPU. 97 Select SH7710 if you have a SH3-DSP SH7710 CPU.
@@ -106,24 +99,28 @@ config CPU_SUBTYPE_SH7710
106config CPU_SUBTYPE_SH7712 99config CPU_SUBTYPE_SH7712
107 bool "Support SH7712 processor" 100 bool "Support SH7712 processor"
108 select CPU_SH3 101 select CPU_SH3
109 select CPU_HAS_IPR_IRQ
110 select CPU_HAS_DSP 102 select CPU_HAS_DSP
111 help 103 help
112 Select SH7712 if you have a SH3-DSP SH7712 CPU. 104 Select SH7712 if you have a SH3-DSP SH7712 CPU.
113 105
106config CPU_SUBTYPE_SH7720
107 bool "Support SH7720 processor"
108 select CPU_SH3
109 select CPU_HAS_DSP
110 help
111 Select SH7720 if you have a SH3-DSP SH7720 CPU.
112
114# SH-4 Processor Support 113# SH-4 Processor Support
115 114
116config CPU_SUBTYPE_SH7750 115config CPU_SUBTYPE_SH7750
117 bool "Support SH7750 processor" 116 bool "Support SH7750 processor"
118 select CPU_SH4 117 select CPU_SH4
119 select CPU_HAS_INTC_IRQ
120 help 118 help
121 Select SH7750 if you have a 200 Mhz SH-4 HD6417750 CPU. 119 Select SH7750 if you have a 200 Mhz SH-4 HD6417750 CPU.
122 120
123config CPU_SUBTYPE_SH7091 121config CPU_SUBTYPE_SH7091
124 bool "Support SH7091 processor" 122 bool "Support SH7091 processor"
125 select CPU_SH4 123 select CPU_SH4
126 select CPU_HAS_INTC_IRQ
127 help 124 help
128 Select SH7091 if you have an SH-4 based Sega device (such as 125 Select SH7091 if you have an SH-4 based Sega device (such as
129 the Dreamcast, Naomi, and Naomi 2). 126 the Dreamcast, Naomi, and Naomi 2).
@@ -131,17 +128,14 @@ config CPU_SUBTYPE_SH7091
131config CPU_SUBTYPE_SH7750R 128config CPU_SUBTYPE_SH7750R
132 bool "Support SH7750R processor" 129 bool "Support SH7750R processor"
133 select CPU_SH4 130 select CPU_SH4
134 select CPU_HAS_INTC_IRQ
135 131
136config CPU_SUBTYPE_SH7750S 132config CPU_SUBTYPE_SH7750S
137 bool "Support SH7750S processor" 133 bool "Support SH7750S processor"
138 select CPU_SH4 134 select CPU_SH4
139 select CPU_HAS_INTC_IRQ
140 135
141config CPU_SUBTYPE_SH7751 136config CPU_SUBTYPE_SH7751
142 bool "Support SH7751 processor" 137 bool "Support SH7751 processor"
143 select CPU_SH4 138 select CPU_SH4
144 select CPU_HAS_INTC_IRQ
145 help 139 help
146 Select SH7751 if you have a 166 Mhz SH-4 HD6417751 CPU, 140 Select SH7751 if you have a 166 Mhz SH-4 HD6417751 CPU,
147 or if you have a HD6417751R CPU. 141 or if you have a HD6417751R CPU.
@@ -149,13 +143,10 @@ config CPU_SUBTYPE_SH7751
149config CPU_SUBTYPE_SH7751R 143config CPU_SUBTYPE_SH7751R
150 bool "Support SH7751R processor" 144 bool "Support SH7751R processor"
151 select CPU_SH4 145 select CPU_SH4
152 select CPU_HAS_INTC_IRQ
153 146
154config CPU_SUBTYPE_SH7760 147config CPU_SUBTYPE_SH7760
155 bool "Support SH7760 processor" 148 bool "Support SH7760 processor"
156 select CPU_SH4 149 select CPU_SH4
157 select CPU_HAS_INTC2_IRQ
158 select CPU_HAS_IPR_IRQ
159 150
160config CPU_SUBTYPE_SH4_202 151config CPU_SUBTYPE_SH4_202
161 bool "Support SH4-202 processor" 152 bool "Support SH4-202 processor"
@@ -185,19 +176,21 @@ config CPU_SUBTYPE_SH7770
185config CPU_SUBTYPE_SH7780 176config CPU_SUBTYPE_SH7780
186 bool "Support SH7780 processor" 177 bool "Support SH7780 processor"
187 select CPU_SH4A 178 select CPU_SH4A
188 select CPU_HAS_INTC_IRQ
189 179
190config CPU_SUBTYPE_SH7785 180config CPU_SUBTYPE_SH7785
191 bool "Support SH7785 processor" 181 bool "Support SH7785 processor"
192 select CPU_SH4A 182 select CPU_SH4A
193 select CPU_SHX2 183 select CPU_SHX2
194 select CPU_HAS_INTC2_IRQ 184 select ARCH_SPARSEMEM_ENABLE
185 select SYS_SUPPORTS_NUMA
195 186
196config CPU_SUBTYPE_SHX3 187config CPU_SUBTYPE_SHX3
197 bool "Support SH-X3 processor" 188 bool "Support SH-X3 processor"
198 select CPU_SH4A 189 select CPU_SH4A
199 select CPU_SHX3 190 select CPU_SHX3
200 select CPU_HAS_INTC2_IRQ 191 select ARCH_SPARSEMEM_ENABLE
192 select SYS_SUPPORTS_NUMA
193 select SYS_SUPPORTS_SMP
201 194
202# SH4AL-DSP Processor Support 195# SH4AL-DSP Processor Support
203 196
@@ -209,7 +202,6 @@ config CPU_SUBTYPE_SH7722
209 bool "Support SH7722 processor" 202 bool "Support SH7722 processor"
210 select CPU_SH4AL_DSP 203 select CPU_SH4AL_DSP
211 select CPU_SHX2 204 select CPU_SHX2
212 select CPU_HAS_INTC_IRQ
213 select ARCH_SPARSEMEM_ENABLE 205 select ARCH_SPARSEMEM_ENABLE
214 select SYS_SUPPORTS_NUMA 206 select SYS_SUPPORTS_NUMA
215 207
@@ -274,7 +266,7 @@ config 32BIT
274 266
275config X2TLB 267config X2TLB
276 bool "Enable extended TLB mode" 268 bool "Enable extended TLB mode"
277 depends on CPU_SHX2 && MMU && EXPERIMENTAL 269 depends on (CPU_SHX2 || CPU_SHX3) && MMU && EXPERIMENTAL
278 help 270 help
279 Selecting this option will enable the extended mode of the SH-X2 271 Selecting this option will enable the extended mode of the SH-X2
280 TLB. For legacy SH-X behaviour and interoperability, say N. For 272 TLB. For legacy SH-X behaviour and interoperability, say N. For
@@ -307,6 +299,7 @@ config NUMA
307 299
308config NODES_SHIFT 300config NODES_SHIFT
309 int 301 int
302 default "3" if CPU_SUBTYPE_SHX3
310 default "1" 303 default "1"
311 depends on NEED_MULTIPLE_NODES 304 depends on NEED_MULTIPLE_NODES
312 305
@@ -323,7 +316,9 @@ config ARCH_SPARSEMEM_DEFAULT
323 316
324config MAX_ACTIVE_REGIONS 317config MAX_ACTIVE_REGIONS
325 int 318 int
326 default "2" if (CPU_SUBTYPE_SH7722 && SPARSEMEM) 319 default "6" if (CPU_SUBTYPE_SHX3 && SPARSEMEM)
320 default "2" if SPARSEMEM && (CPU_SUBTYPE_SH7722 || \
321 CPU_SUBTYPE_SH7785)
327 default "1" 322 default "1"
328 323
329config ARCH_POPULATES_NODE_MAP 324config ARCH_POPULATES_NODE_MAP
@@ -342,25 +337,27 @@ config ARCH_MEMORY_PROBE
342 337
343choice 338choice
344 prompt "Kernel page size" 339 prompt "Kernel page size"
340 default PAGE_SIZE_8KB if X2TLB
345 default PAGE_SIZE_4KB 341 default PAGE_SIZE_4KB
346 342
347config PAGE_SIZE_4KB 343config PAGE_SIZE_4KB
348 bool "4kB" 344 bool "4kB"
345 depends on !X2TLB
349 help 346 help
350 This is the default page size used by all SuperH CPUs. 347 This is the default page size used by all SuperH CPUs.
351 348
352config PAGE_SIZE_8KB 349config PAGE_SIZE_8KB
353 bool "8kB" 350 bool "8kB"
354 depends on EXPERIMENTAL && X2TLB 351 depends on X2TLB
355 help 352 help
356 This enables 8kB pages as supported by SH-X2 and later MMUs. 353 This enables 8kB pages as supported by SH-X2 and later MMUs.
357 354
358config PAGE_SIZE_64KB 355config PAGE_SIZE_64KB
359 bool "64kB" 356 bool "64kB"
360 depends on EXPERIMENTAL && CPU_SH4 357 depends on CPU_SH4
361 help 358 help
362 This enables support for 64kB pages, possible on all SH-4 359 This enables support for 64kB pages, possible on all SH-4
363 CPUs and later. Highly experimental, not recommended. 360 CPUs and later.
364 361
365endchoice 362endchoice
366 363
@@ -412,8 +409,17 @@ config SH_DIRECT_MAPPED
412 Turn this option off for platforms that do not have a direct-mapped 409 Turn this option off for platforms that do not have a direct-mapped
413 cache, and you have no need to run the caches in such a configuration. 410 cache, and you have no need to run the caches in such a configuration.
414 411
415config SH_WRITETHROUGH 412choice
416 bool "Use write-through caching" 413 prompt "Cache mode"
414 default CACHE_WRITEBACK if CPU_SH2A || CPU_SH3 || CPU_SH4
415 default CACHE_WRITETHROUGH if (CPU_SH2 && !CPU_SH2A)
416
417config CACHE_WRITEBACK
418 bool "Write-back"
419 depends on CPU_SH2A || CPU_SH3 || CPU_SH4
420
421config CACHE_WRITETHROUGH
422 bool "Write-through"
417 help 423 help
418 Selecting this option will configure the caches in write-through 424 Selecting this option will configure the caches in write-through
419 mode, as opposed to the default write-back configuration. 425 mode, as opposed to the default write-back configuration.
@@ -424,4 +430,9 @@ config SH_WRITETHROUGH
424 430
425 If unsure, say N. 431 If unsure, say N.
426 432
433config CACHE_OFF
434 bool "Off"
435
436endchoice
437
427endmenu 438endmenu
diff --git a/arch/sh/mm/Makefile b/arch/sh/mm/Makefile
index 4061e89d84d0..ee30fb44dfe1 100644
--- a/arch/sh/mm/Makefile
+++ b/arch/sh/mm/Makefile
@@ -4,29 +4,32 @@
4 4
5obj-y := init.o extable.o consistent.o 5obj-y := init.o extable.o consistent.o
6 6
7obj-$(CONFIG_CPU_SH2) += cache-sh2.o 7ifndef CONFIG_CACHE_OFF
8obj-$(CONFIG_CPU_SH3) += cache-sh3.o 8obj-$(CONFIG_CPU_SH2) += cache-sh2.o
9obj-$(CONFIG_CPU_SH4) += cache-sh4.o 9obj-$(CONFIG_CPU_SH3) += cache-sh3.o
10obj-$(CONFIG_CPU_SH4) += cache-sh4.o
11obj-$(CONFIG_SH7705_CACHE_32KB) += cache-sh7705.o
12endif
10 13
11mmu-y := tlb-nommu.o pg-nommu.o 14mmu-y := tlb-nommu.o pg-nommu.o
12mmu-$(CONFIG_CPU_SH3) += fault-nommu.o
13mmu-$(CONFIG_CPU_SH4) += fault-nommu.o
14mmu-$(CONFIG_MMU) := fault.o clear_page.o copy_page.o tlb-flush.o \ 15mmu-$(CONFIG_MMU) := fault.o clear_page.o copy_page.o tlb-flush.o \
15 ioremap.o 16 ioremap.o
16 17
17obj-y += $(mmu-y) 18obj-y += $(mmu-y)
18 19
19ifdef CONFIG_DEBUG_FS 20ifdef CONFIG_DEBUG_FS
20obj-$(CONFIG_CPU_SH4) += cache-debugfs.o 21obj-$(CONFIG_CPU_SH4) += cache-debugfs.o
21endif 22endif
22 23
23ifdef CONFIG_MMU 24ifdef CONFIG_MMU
24obj-$(CONFIG_CPU_SH3) += tlb-sh3.o 25obj-$(CONFIG_CPU_SH3) += tlb-sh3.o
25obj-$(CONFIG_CPU_SH4) += tlb-sh4.o pg-sh4.o 26obj-$(CONFIG_CPU_SH4) += tlb-sh4.o
26obj-$(CONFIG_SH7705_CACHE_32KB) += pg-sh7705.o 27ifndef CONFIG_CACHE_OFF
28obj-$(CONFIG_CPU_SH4) += pg-sh4.o
29obj-$(CONFIG_SH7705_CACHE_32KB) += pg-sh7705.o
30endif
27endif 31endif
28 32
29obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o 33obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
30obj-$(CONFIG_SH7705_CACHE_32KB) += cache-sh7705.o
31obj-$(CONFIG_32BIT) += pmb.o 34obj-$(CONFIG_32BIT) += pmb.o
32obj-$(CONFIG_NUMA) += numa.o 35obj-$(CONFIG_NUMA) += numa.o
diff --git a/arch/sh/mm/cache-sh4.c b/arch/sh/mm/cache-sh4.c
index 86486326ef1d..226b190c5b9c 100644
--- a/arch/sh/mm/cache-sh4.c
+++ b/arch/sh/mm/cache-sh4.c
@@ -2,7 +2,7 @@
2 * arch/sh/mm/cache-sh4.c 2 * arch/sh/mm/cache-sh4.c
3 * 3 *
4 * Copyright (C) 1999, 2000, 2002 Niibe Yutaka 4 * Copyright (C) 1999, 2000, 2002 Niibe Yutaka
5 * Copyright (C) 2001 - 2006 Paul Mundt 5 * Copyright (C) 2001 - 2007 Paul Mundt
6 * Copyright (C) 2003 Richard Curnow 6 * Copyright (C) 2003 Richard Curnow
7 * 7 *
8 * This file is subject to the terms and conditions of the GNU General Public 8 * This file is subject to the terms and conditions of the GNU General Public
@@ -44,7 +44,7 @@ static void (*__flush_dcache_segment_fn)(unsigned long, unsigned long) =
44static void compute_alias(struct cache_info *c) 44static void compute_alias(struct cache_info *c)
45{ 45{
46 c->alias_mask = ((c->sets - 1) << c->entry_shift) & ~(PAGE_SIZE - 1); 46 c->alias_mask = ((c->sets - 1) << c->entry_shift) & ~(PAGE_SIZE - 1);
47 c->n_aliases = (c->alias_mask >> PAGE_SHIFT) + 1; 47 c->n_aliases = c->alias_mask ? (c->alias_mask >> PAGE_SHIFT) + 1 : 0;
48} 48}
49 49
50static void __init emit_cache_params(void) 50static void __init emit_cache_params(void)
@@ -54,21 +54,35 @@ static void __init emit_cache_params(void)
54 ctrl_inl(CCN_CVR), 54 ctrl_inl(CCN_CVR),
55 ctrl_inl(CCN_PRR)); 55 ctrl_inl(CCN_PRR));
56 printk("I-cache : n_ways=%d n_sets=%d way_incr=%d\n", 56 printk("I-cache : n_ways=%d n_sets=%d way_incr=%d\n",
57 current_cpu_data.icache.ways, 57 boot_cpu_data.icache.ways,
58 current_cpu_data.icache.sets, 58 boot_cpu_data.icache.sets,
59 current_cpu_data.icache.way_incr); 59 boot_cpu_data.icache.way_incr);
60 printk("I-cache : entry_mask=0x%08x alias_mask=0x%08x n_aliases=%d\n", 60 printk("I-cache : entry_mask=0x%08x alias_mask=0x%08x n_aliases=%d\n",
61 current_cpu_data.icache.entry_mask, 61 boot_cpu_data.icache.entry_mask,
62 current_cpu_data.icache.alias_mask, 62 boot_cpu_data.icache.alias_mask,
63 current_cpu_data.icache.n_aliases); 63 boot_cpu_data.icache.n_aliases);
64 printk("D-cache : n_ways=%d n_sets=%d way_incr=%d\n", 64 printk("D-cache : n_ways=%d n_sets=%d way_incr=%d\n",
65 current_cpu_data.dcache.ways, 65 boot_cpu_data.dcache.ways,
66 current_cpu_data.dcache.sets, 66 boot_cpu_data.dcache.sets,
67 current_cpu_data.dcache.way_incr); 67 boot_cpu_data.dcache.way_incr);
68 printk("D-cache : entry_mask=0x%08x alias_mask=0x%08x n_aliases=%d\n", 68 printk("D-cache : entry_mask=0x%08x alias_mask=0x%08x n_aliases=%d\n",
69 current_cpu_data.dcache.entry_mask, 69 boot_cpu_data.dcache.entry_mask,
70 current_cpu_data.dcache.alias_mask, 70 boot_cpu_data.dcache.alias_mask,
71 current_cpu_data.dcache.n_aliases); 71 boot_cpu_data.dcache.n_aliases);
72
73 /*
74 * Emit Secondary Cache parameters if the CPU has a probed L2.
75 */
76 if (boot_cpu_data.flags & CPU_HAS_L2_CACHE) {
77 printk("S-cache : n_ways=%d n_sets=%d way_incr=%d\n",
78 boot_cpu_data.scache.ways,
79 boot_cpu_data.scache.sets,
80 boot_cpu_data.scache.way_incr);
81 printk("S-cache : entry_mask=0x%08x alias_mask=0x%08x n_aliases=%d\n",
82 boot_cpu_data.scache.entry_mask,
83 boot_cpu_data.scache.alias_mask,
84 boot_cpu_data.scache.n_aliases);
85 }
72 86
73 if (!__flush_dcache_segment_fn) 87 if (!__flush_dcache_segment_fn)
74 panic("unknown number of cache ways\n"); 88 panic("unknown number of cache ways\n");
@@ -79,10 +93,11 @@ static void __init emit_cache_params(void)
79 */ 93 */
80void __init p3_cache_init(void) 94void __init p3_cache_init(void)
81{ 95{
82 compute_alias(&current_cpu_data.icache); 96 compute_alias(&boot_cpu_data.icache);
83 compute_alias(&current_cpu_data.dcache); 97 compute_alias(&boot_cpu_data.dcache);
98 compute_alias(&boot_cpu_data.scache);
84 99
85 switch (current_cpu_data.dcache.ways) { 100 switch (boot_cpu_data.dcache.ways) {
86 case 1: 101 case 1:
87 __flush_dcache_segment_fn = __flush_dcache_segment_1way; 102 __flush_dcache_segment_fn = __flush_dcache_segment_1way;
88 break; 103 break;
@@ -187,13 +202,13 @@ void flush_cache_sigtramp(unsigned long addr)
187 : "m" (__m(v))); 202 : "m" (__m(v)));
188 203
189 index = CACHE_IC_ADDRESS_ARRAY | 204 index = CACHE_IC_ADDRESS_ARRAY |
190 (v & current_cpu_data.icache.entry_mask); 205 (v & boot_cpu_data.icache.entry_mask);
191 206
192 local_irq_save(flags); 207 local_irq_save(flags);
193 jump_to_P2(); 208 jump_to_P2();
194 209
195 for (i = 0; i < current_cpu_data.icache.ways; 210 for (i = 0; i < boot_cpu_data.icache.ways;
196 i++, index += current_cpu_data.icache.way_incr) 211 i++, index += boot_cpu_data.icache.way_incr)
197 ctrl_outl(0, index); /* Clear out Valid-bit */ 212 ctrl_outl(0, index); /* Clear out Valid-bit */
198 213
199 back_to_P1(); 214 back_to_P1();
@@ -210,7 +225,7 @@ static inline void flush_cache_4096(unsigned long start,
210 * All types of SH-4 require PC to be in P2 to operate on the I-cache. 225 * All types of SH-4 require PC to be in P2 to operate on the I-cache.
211 * Some types of SH-4 require PC to be in P2 to operate on the D-cache. 226 * Some types of SH-4 require PC to be in P2 to operate on the D-cache.
212 */ 227 */
213 if ((current_cpu_data.flags & CPU_HAS_P2_FLUSH_BUG) || 228 if ((boot_cpu_data.flags & CPU_HAS_P2_FLUSH_BUG) ||
214 (start < CACHE_OC_ADDRESS_ARRAY)) 229 (start < CACHE_OC_ADDRESS_ARRAY))
215 exec_offset = 0x20000000; 230 exec_offset = 0x20000000;
216 231
@@ -232,7 +247,7 @@ void flush_dcache_page(struct page *page)
232 int i, n; 247 int i, n;
233 248
234 /* Loop all the D-cache */ 249 /* Loop all the D-cache */
235 n = current_cpu_data.dcache.n_aliases; 250 n = boot_cpu_data.dcache.n_aliases;
236 for (i = 0; i < n; i++, addr += 4096) 251 for (i = 0; i < n; i++, addr += 4096)
237 flush_cache_4096(addr, phys); 252 flush_cache_4096(addr, phys);
238 } 253 }
@@ -264,7 +279,7 @@ static inline void flush_icache_all(void)
264 279
265void flush_dcache_all(void) 280void flush_dcache_all(void)
266{ 281{
267 (*__flush_dcache_segment_fn)(0UL, current_cpu_data.dcache.way_size); 282 (*__flush_dcache_segment_fn)(0UL, boot_cpu_data.dcache.way_size);
268 wmb(); 283 wmb();
269} 284}
270 285
@@ -278,8 +293,8 @@ static void __flush_cache_mm(struct mm_struct *mm, unsigned long start,
278 unsigned long end) 293 unsigned long end)
279{ 294{
280 unsigned long d = 0, p = start & PAGE_MASK; 295 unsigned long d = 0, p = start & PAGE_MASK;
281 unsigned long alias_mask = current_cpu_data.dcache.alias_mask; 296 unsigned long alias_mask = boot_cpu_data.dcache.alias_mask;
282 unsigned long n_aliases = current_cpu_data.dcache.n_aliases; 297 unsigned long n_aliases = boot_cpu_data.dcache.n_aliases;
283 unsigned long select_bit; 298 unsigned long select_bit;
284 unsigned long all_aliases_mask; 299 unsigned long all_aliases_mask;
285 unsigned long addr_offset; 300 unsigned long addr_offset;
@@ -366,7 +381,7 @@ void flush_cache_mm(struct mm_struct *mm)
366 * If cache is only 4k-per-way, there are never any 'aliases'. Since 381 * If cache is only 4k-per-way, there are never any 'aliases'. Since
367 * the cache is physically tagged, the data can just be left in there. 382 * the cache is physically tagged, the data can just be left in there.
368 */ 383 */
369 if (current_cpu_data.dcache.n_aliases == 0) 384 if (boot_cpu_data.dcache.n_aliases == 0)
370 return; 385 return;
371 386
372 /* 387 /*
@@ -403,7 +418,7 @@ void flush_cache_page(struct vm_area_struct *vma, unsigned long address,
403 unsigned long phys = pfn << PAGE_SHIFT; 418 unsigned long phys = pfn << PAGE_SHIFT;
404 unsigned int alias_mask; 419 unsigned int alias_mask;
405 420
406 alias_mask = current_cpu_data.dcache.alias_mask; 421 alias_mask = boot_cpu_data.dcache.alias_mask;
407 422
408 /* We only need to flush D-cache when we have alias */ 423 /* We only need to flush D-cache when we have alias */
409 if ((address^phys) & alias_mask) { 424 if ((address^phys) & alias_mask) {
@@ -417,7 +432,7 @@ void flush_cache_page(struct vm_area_struct *vma, unsigned long address,
417 phys); 432 phys);
418 } 433 }
419 434
420 alias_mask = current_cpu_data.icache.alias_mask; 435 alias_mask = boot_cpu_data.icache.alias_mask;
421 if (vma->vm_flags & VM_EXEC) { 436 if (vma->vm_flags & VM_EXEC) {
422 /* 437 /*
423 * Evict entries from the portion of the cache from which code 438 * Evict entries from the portion of the cache from which code
@@ -449,7 +464,7 @@ void flush_cache_range(struct vm_area_struct *vma, unsigned long start,
449 * If cache is only 4k-per-way, there are never any 'aliases'. Since 464 * If cache is only 4k-per-way, there are never any 'aliases'. Since
450 * the cache is physically tagged, the data can just be left in there. 465 * the cache is physically tagged, the data can just be left in there.
451 */ 466 */
452 if (current_cpu_data.dcache.n_aliases == 0) 467 if (boot_cpu_data.dcache.n_aliases == 0)
453 return; 468 return;
454 469
455 /* 470 /*
@@ -510,7 +525,7 @@ static void __flush_cache_4096(unsigned long addr, unsigned long phys,
510 unsigned long a, ea, p; 525 unsigned long a, ea, p;
511 unsigned long temp_pc; 526 unsigned long temp_pc;
512 527
513 dcache = &current_cpu_data.dcache; 528 dcache = &boot_cpu_data.dcache;
514 /* Write this way for better assembly. */ 529 /* Write this way for better assembly. */
515 way_count = dcache->ways; 530 way_count = dcache->ways;
516 way_incr = dcache->way_incr; 531 way_incr = dcache->way_incr;
@@ -585,7 +600,7 @@ static void __flush_dcache_segment_1way(unsigned long start,
585 base_addr = ((base_addr >> 16) << 16); 600 base_addr = ((base_addr >> 16) << 16);
586 base_addr |= start; 601 base_addr |= start;
587 602
588 dcache = &current_cpu_data.dcache; 603 dcache = &boot_cpu_data.dcache;
589 linesz = dcache->linesz; 604 linesz = dcache->linesz;
590 way_incr = dcache->way_incr; 605 way_incr = dcache->way_incr;
591 way_size = dcache->way_size; 606 way_size = dcache->way_size;
@@ -627,7 +642,7 @@ static void __flush_dcache_segment_2way(unsigned long start,
627 base_addr = ((base_addr >> 16) << 16); 642 base_addr = ((base_addr >> 16) << 16);
628 base_addr |= start; 643 base_addr |= start;
629 644
630 dcache = &current_cpu_data.dcache; 645 dcache = &boot_cpu_data.dcache;
631 linesz = dcache->linesz; 646 linesz = dcache->linesz;
632 way_incr = dcache->way_incr; 647 way_incr = dcache->way_incr;
633 way_size = dcache->way_size; 648 way_size = dcache->way_size;
@@ -686,7 +701,7 @@ static void __flush_dcache_segment_4way(unsigned long start,
686 base_addr = ((base_addr >> 16) << 16); 701 base_addr = ((base_addr >> 16) << 16);
687 base_addr |= start; 702 base_addr |= start;
688 703
689 dcache = &current_cpu_data.dcache; 704 dcache = &boot_cpu_data.dcache;
690 linesz = dcache->linesz; 705 linesz = dcache->linesz;
691 way_incr = dcache->way_incr; 706 way_incr = dcache->way_incr;
692 way_size = dcache->way_size; 707 way_size = dcache->way_size;
diff --git a/arch/sh/mm/copy_page.S b/arch/sh/mm/copy_page.S
index ae039f2da162..a81dbdb05596 100644
--- a/arch/sh/mm/copy_page.S
+++ b/arch/sh/mm/copy_page.S
@@ -141,47 +141,38 @@ ENTRY(__copy_user_page)
141 .long 9999b, 6000f ; \ 141 .long 9999b, 6000f ; \
142 .previous 142 .previous
143ENTRY(__copy_user) 143ENTRY(__copy_user)
144 tst r6,r6 ! Check explicitly for zero 144 ! Check if small number of bytes
145 bf 1f 145 mov #11,r0
146 rts
147 mov #0,r0 ! normal return
1481:
149 mov.l r10,@-r15
150 mov.l r9,@-r15
151 mov.l r8,@-r15
152 mov r4,r3 146 mov r4,r3
153 add r6,r3 ! last destination address 147 cmp/gt r0,r6 ! r6 (len) > r0 (11)
154 mov #12,r0 ! Check if small number of bytes 148 bf/s .L_cleanup_loop_no_pop
155 cmp/gt r0,r6 149 add r6,r3 ! last destination address
156 bt 2f 150
157 bra .L_cleanup_loop 151 ! Calculate bytes needed to align to src
158 nop 152 mov.l r11,@-r15
1592: 153 neg r5,r0
160 neg r5,r0 ! Calculate bytes needed to align source 154 mov.l r10,@-r15
161 add #4,r0 155 add #4,r0
156 mov.l r9,@-r15
162 and #3,r0 157 and #3,r0
158 mov.l r8,@-r15
163 tst r0,r0 159 tst r0,r0
164 bt .L_jump 160 bt 2f
165 mov r0,r1
166 161
167.L_loop1: 1621:
168 ! Copy bytes to align source 163 ! Copy bytes to long word align src
169EX( mov.b @r5+,r0 ) 164EX( mov.b @r5+,r1 )
170 dt r1 165 dt r0
171EX( mov.b r0,@r4 )
172 add #-1,r6 166 add #-1,r6
173 bf/s .L_loop1 167EX( mov.b r1,@r4 )
168 bf/s 1b
174 add #1,r4 169 add #1,r4
175 170
176.L_jump: 171 ! Jump to appropriate routine depending on dest
177 mov r6,r2 ! Calculate number of longwords to copy 1722: mov #3,r1
173 mov r6, r2
174 and r4,r1
178 shlr2 r2 175 shlr2 r2
179 tst r2,r2
180 bt .L_cleanup
181
182 mov r4,r0 ! Jump to appropriate routine
183 and #3,r0
184 mov r0,r1
185 shll2 r1 176 shll2 r1
186 mova .L_jump_tbl,r0 177 mova .L_jump_tbl,r0
187 mov.l @(r0,r1),r1 178 mov.l @(r0,r1),r1
@@ -195,43 +186,97 @@ EX( mov.b r0,@r4 )
195 .long .L_dest10 186 .long .L_dest10
196 .long .L_dest11 187 .long .L_dest11
197 188
189/*
190 * Come here if there are less than 12 bytes to copy
191 *
192 * Keep the branch target close, so the bf/s callee doesn't overflow
193 * and result in a more expensive branch being inserted. This is the
194 * fast-path for small copies, the jump via the jump table will hit the
195 * default slow-path cleanup. -PFM.
196 */
197.L_cleanup_loop_no_pop:
198 tst r6,r6 ! Check explicitly for zero
199 bt 1f
200
2012:
202EX( mov.b @r5+,r0 )
203 dt r6
204EX( mov.b r0,@r4 )
205 bf/s 2b
206 add #1,r4
207
2081: mov #0,r0 ! normal return
2095000:
210
211# Exception handler:
212.section .fixup, "ax"
2136000:
214 mov.l 8000f,r1
215 mov r3,r0
216 jmp @r1
217 sub r4,r0
218 .align 2
2198000: .long 5000b
220
221.previous
222 rts
223 nop
224
198! Destination = 00 225! Destination = 00
199 226
200.L_dest00: 227.L_dest00:
201 mov r2,r7 228 ! Skip the large copy for small transfers
202 shlr2 r7 229 mov #(32+32-4), r0
203 shlr r7 230 cmp/gt r6, r0 ! r0 (60) > r6 (len)
204 tst r7,r7 231 bt 1f
205 mov #7,r0 232
206 bt/s 1f 233 ! Align dest to a 32 byte boundary
207 and r0,r2 234 neg r4,r0
208 .align 2 235 add #0x20, r0
236 and #0x1f, r0
237 tst r0, r0
238 bt 2f
239
240 sub r0, r6
241 shlr2 r0
2423:
243EX( mov.l @r5+,r1 )
244 dt r0
245EX( mov.l r1,@r4 )
246 bf/s 3b
247 add #4,r4
248
2092: 2492:
210EX( mov.l @r5+,r0 ) 250EX( mov.l @r5+,r0 )
251EX( mov.l @r5+,r1 )
252EX( mov.l @r5+,r2 )
253EX( mov.l @r5+,r7 )
211EX( mov.l @r5+,r8 ) 254EX( mov.l @r5+,r8 )
212EX( mov.l @r5+,r9 ) 255EX( mov.l @r5+,r9 )
213EX( mov.l @r5+,r10 ) 256EX( mov.l @r5+,r10 )
214EX( mov.l r0,@r4 ) 257EX( mov.l @r5+,r11 )
215EX( mov.l r8,@(4,r4) ) 258EX( movca.l r0,@r4 )
216EX( mov.l r9,@(8,r4) ) 259 add #-32, r6
217EX( mov.l r10,@(12,r4) ) 260EX( mov.l r1,@(4,r4) )
218EX( mov.l @r5+,r0 ) 261 mov #32, r0
219EX( mov.l @r5+,r8 ) 262EX( mov.l r2,@(8,r4) )
220EX( mov.l @r5+,r9 ) 263 cmp/gt r6, r0 ! r0 (32) > r6 (len)
221EX( mov.l @r5+,r10 ) 264EX( mov.l r7,@(12,r4) )
222 dt r7 265EX( mov.l r8,@(16,r4) )
223EX( mov.l r0,@(16,r4) ) 266EX( mov.l r9,@(20,r4) )
224EX( mov.l r8,@(20,r4) ) 267EX( mov.l r10,@(24,r4) )
225EX( mov.l r9,@(24,r4) ) 268EX( mov.l r11,@(28,r4) )
226EX( mov.l r10,@(28,r4) )
227 bf/s 2b 269 bf/s 2b
228 add #32,r4 270 add #32,r4
229 tst r2,r2 271
2721: mov r6, r0
273 shlr2 r0
274 tst r0, r0
230 bt .L_cleanup 275 bt .L_cleanup
2311: 2761:
232EX( mov.l @r5+,r0 ) 277EX( mov.l @r5+,r1 )
233 dt r2 278 dt r0
234EX( mov.l r0,@r4 ) 279EX( mov.l r1,@r4 )
235 bf/s 1b 280 bf/s 1b
236 add #4,r4 281 add #4,r4
237 282
@@ -250,7 +295,7 @@ EX( mov.l r0,@r4 )
250 and r0,r2 295 and r0,r2
2512: 2962:
252 dt r7 297 dt r7
253#ifdef __LITTLE_ENDIAN__ 298#ifdef CONFIG_CPU_LITTLE_ENDIAN
254EX( mov.l @r5+,r0 ) 299EX( mov.l @r5+,r0 )
255EX( mov.l @r5+,r1 ) 300EX( mov.l @r5+,r1 )
256EX( mov.l @r5+,r8 ) 301EX( mov.l @r5+,r8 )
@@ -320,7 +365,7 @@ EX( mov.w r0,@(2,r4) )
3201: ! Read longword, write two words per iteration 3651: ! Read longword, write two words per iteration
321EX( mov.l @r5+,r0 ) 366EX( mov.l @r5+,r0 )
322 dt r2 367 dt r2
323#ifdef __LITTLE_ENDIAN__ 368#ifdef CONFIG_CPU_LITTLE_ENDIAN
324EX( mov.w r0,@r4 ) 369EX( mov.w r0,@r4 )
325 shlr16 r0 370 shlr16 r0
326EX( mov.w r0,@(2,r4) ) 371EX( mov.w r0,@(2,r4) )
@@ -342,7 +387,7 @@ EX( mov.w r0,@r4 )
342 ! Read longword, write byte, word, byte per iteration 387 ! Read longword, write byte, word, byte per iteration
343EX( mov.l @r5+,r0 ) 388EX( mov.l @r5+,r0 )
344 dt r2 389 dt r2
345#ifdef __LITTLE_ENDIAN__ 390#ifdef CONFIG_CPU_LITTLE_ENDIAN
346EX( mov.b r0,@r4 ) 391EX( mov.b r0,@r4 )
347 shlr8 r0 392 shlr8 r0
348 add #1,r4 393 add #1,r4
@@ -379,6 +424,7 @@ EX( mov.b r0,@r4 )
379 424
380.L_exit: 425.L_exit:
381 mov #0,r0 ! normal return 426 mov #0,r0 ! normal return
427
3825000: 4285000:
383 429
384# Exception handler: 430# Exception handler:
@@ -394,5 +440,6 @@ EX( mov.b r0,@r4 )
394.previous 440.previous
395 mov.l @r15+,r8 441 mov.l @r15+,r8
396 mov.l @r15+,r9 442 mov.l @r15+,r9
443 mov.l @r15+,r10
397 rts 444 rts
398 mov.l @r15+,r10 445 mov.l @r15+,r11
diff --git a/arch/sh/mm/fault-nommu.c b/arch/sh/mm/fault-nommu.c
deleted file mode 100644
index c6f5b51ec2c7..000000000000
--- a/arch/sh/mm/fault-nommu.c
+++ /dev/null
@@ -1,64 +0,0 @@
1/*
2 * arch/sh/mm/fault-nommu.c
3 *
4 * Copyright (C) 2002 - 2007 Paul Mundt
5 *
6 * Based on linux/arch/sh/mm/fault.c:
7 * Copyright (C) 1999 Niibe Yutaka
8 *
9 * Released under the terms of the GNU GPL v2.0.
10 */
11#include <linux/kernel.h>
12#include <linux/mm.h>
13#include <linux/hardirq.h>
14#include <linux/kprobes.h>
15#include <asm/system.h>
16#include <asm/ptrace.h>
17#include <asm/kgdb.h>
18
19/*
20 * This routine handles page faults. It determines the address,
21 * and the problem, and then passes it off to one of the appropriate
22 * routines.
23 */
24asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
25 unsigned long writeaccess,
26 unsigned long address)
27{
28 trace_hardirqs_on();
29 local_irq_enable();
30
31#if defined(CONFIG_SH_KGDB)
32 if (kgdb_nofault && kgdb_bus_err_hook)
33 kgdb_bus_err_hook();
34#endif
35
36 /*
37 * Oops. The kernel tried to access some bad page. We'll have to
38 * terminate things with extreme prejudice.
39 *
40 */
41 if (address < PAGE_SIZE) {
42 printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
43 } else {
44 printk(KERN_ALERT "Unable to handle kernel paging request");
45 }
46
47 printk(" at virtual address %08lx\n", address);
48 printk(KERN_ALERT "pc = %08lx\n", regs->pc);
49
50 die("Oops", regs, writeaccess);
51 do_exit(SIGKILL);
52}
53
54asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs,
55 unsigned long writeaccess,
56 unsigned long address)
57{
58#if defined(CONFIG_SH_KGDB)
59 if (kgdb_nofault && kgdb_bus_err_hook)
60 kgdb_bus_err_hook();
61#endif
62
63 return (address >= TASK_SIZE);
64}
diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c
index a08a4a958add..7d43758dc244 100644
--- a/arch/sh/mm/pmb.c
+++ b/arch/sh/mm/pmb.c
@@ -145,7 +145,7 @@ repeat:
145 145
146 ctrl_outl(vpn | PMB_V, mk_pmb_addr(pos)); 146 ctrl_outl(vpn | PMB_V, mk_pmb_addr(pos));
147 147
148#ifdef CONFIG_SH_WRITETHROUGH 148#ifdef CONFIG_CACHE_WRITETHROUGH
149 /* 149 /*
150 * When we are in 32-bit address extended mode, CCR.CB becomes 150 * When we are in 32-bit address extended mode, CCR.CB becomes
151 * invalid, so care must be taken to manually adjust cacheable 151 * invalid, so care must be taken to manually adjust cacheable
diff --git a/arch/sh/mm/tlb-sh4.c b/arch/sh/mm/tlb-sh4.c
index f74cf667c8fa..2d1dd6044307 100644
--- a/arch/sh/mm/tlb-sh4.c
+++ b/arch/sh/mm/tlb-sh4.c
@@ -4,27 +4,14 @@
4 * SH-4 specific TLB operations 4 * SH-4 specific TLB operations
5 * 5 *
6 * Copyright (C) 1999 Niibe Yutaka 6 * Copyright (C) 1999 Niibe Yutaka
7 * Copyright (C) 2002 Paul Mundt 7 * Copyright (C) 2002 - 2007 Paul Mundt
8 * 8 *
9 * Released under the terms of the GNU GPL v2.0. 9 * Released under the terms of the GNU GPL v2.0.
10 */ 10 */
11#include <linux/signal.h>
12#include <linux/sched.h>
13#include <linux/kernel.h> 11#include <linux/kernel.h>
14#include <linux/errno.h>
15#include <linux/string.h>
16#include <linux/types.h>
17#include <linux/ptrace.h>
18#include <linux/mman.h>
19#include <linux/mm.h> 12#include <linux/mm.h>
20#include <linux/smp.h> 13#include <linux/io.h>
21#include <linux/smp_lock.h>
22#include <linux/interrupt.h>
23
24#include <asm/system.h> 14#include <asm/system.h>
25#include <asm/io.h>
26#include <asm/uaccess.h>
27#include <asm/pgalloc.h>
28#include <asm/mmu_context.h> 15#include <asm/mmu_context.h>
29#include <asm/cacheflush.h> 16#include <asm/cacheflush.h>
30 17
@@ -34,22 +21,27 @@ void update_mmu_cache(struct vm_area_struct * vma,
34 unsigned long flags; 21 unsigned long flags;
35 unsigned long pteval; 22 unsigned long pteval;
36 unsigned long vpn; 23 unsigned long vpn;
37 struct page *page;
38 unsigned long pfn;
39 24
40 /* Ptrace may call this routine. */ 25 /* Ptrace may call this routine. */
41 if (vma && current->active_mm != vma->vm_mm) 26 if (vma && current->active_mm != vma->vm_mm)
42 return; 27 return;
43 28
44 pfn = pte_pfn(pte); 29#ifndef CONFIG_CACHE_OFF
45 if (pfn_valid(pfn)) { 30 {
46 page = pfn_to_page(pfn); 31 unsigned long pfn = pte_pfn(pte);
47 if (!test_bit(PG_mapped, &page->flags)) { 32
48 unsigned long phys = pte_val(pte) & PTE_PHYS_MASK; 33 if (pfn_valid(pfn)) {
49 __flush_wback_region((void *)P1SEGADDR(phys), PAGE_SIZE); 34 struct page *page = pfn_to_page(pfn);
50 __set_bit(PG_mapped, &page->flags); 35
36 if (!test_bit(PG_mapped, &page->flags)) {
37 unsigned long phys = pte_val(pte) & PTE_PHYS_MASK;
38 __flush_wback_region((void *)P1SEGADDR(phys),
39 PAGE_SIZE);
40 __set_bit(PG_mapped, &page->flags);
41 }
51 } 42 }
52 } 43 }
44#endif
53 45
54 local_irq_save(flags); 46 local_irq_save(flags);
55 47
@@ -57,16 +49,26 @@ void update_mmu_cache(struct vm_area_struct * vma,
57 vpn = (address & MMU_VPN_MASK) | get_asid(); 49 vpn = (address & MMU_VPN_MASK) | get_asid();
58 ctrl_outl(vpn, MMU_PTEH); 50 ctrl_outl(vpn, MMU_PTEH);
59 51
60 pteval = pte_val(pte); 52 pteval = pte.pte_low;
61 53
62 /* Set PTEA register */ 54 /* Set PTEA register */
55#ifdef CONFIG_X2TLB
56 /*
57 * For the extended mode TLB this is trivial, only the ESZ and
58 * EPR bits need to be written out to PTEA, with the remainder of
59 * the protection bits (with the exception of the compat-mode SZ
60 * and PR bits, which are cleared) being written out in PTEL.
61 */
62 ctrl_outl(pte.pte_high, MMU_PTEA);
63#else
63 if (cpu_data->flags & CPU_HAS_PTEA) 64 if (cpu_data->flags & CPU_HAS_PTEA)
64 /* TODO: make this look less hacky */ 65 /* TODO: make this look less hacky */
65 ctrl_outl(((pteval >> 28) & 0xe) | (pteval & 0x1), MMU_PTEA); 66 ctrl_outl(((pteval >> 28) & 0xe) | (pteval & 0x1), MMU_PTEA);
67#endif
66 68
67 /* Set PTEL register */ 69 /* Set PTEL register */
68 pteval &= _PAGE_FLAGS_HARDWARE_MASK; /* drop software flags */ 70 pteval &= _PAGE_FLAGS_HARDWARE_MASK; /* drop software flags */
69#ifdef CONFIG_SH_WRITETHROUGH 71#ifdef CONFIG_CACHE_WRITETHROUGH
70 pteval |= _PAGE_WT; 72 pteval |= _PAGE_WT;
71#endif 73#endif
72 /* conveniently, we want all the software flags to be 0 anyway */ 74 /* conveniently, we want all the software flags to be 0 anyway */
@@ -93,4 +95,3 @@ void local_flush_tlb_one(unsigned long asid, unsigned long page)
93 ctrl_outl(data, addr); 95 ctrl_outl(data, addr);
94 back_to_P1(); 96 back_to_P1();
95} 97}
96
diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c
index 93ee05eeaeba..78277a118b67 100644
--- a/drivers/rtc/rtc-sh.c
+++ b/drivers/rtc/rtc-sh.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * SuperH On-Chip RTC Support 2 * SuperH On-Chip RTC Support
3 * 3 *
4 * Copyright (C) 2006 Paul Mundt 4 * Copyright (C) 2006, 2007 Paul Mundt
5 * Copyright (C) 2006 Jamie Lenehan 5 * Copyright (C) 2006 Jamie Lenehan
6 * 6 *
7 * Based on the old arch/sh/kernel/cpu/rtc.c by: 7 * Based on the old arch/sh/kernel/cpu/rtc.c by:
@@ -23,16 +23,19 @@
23#include <linux/interrupt.h> 23#include <linux/interrupt.h>
24#include <linux/spinlock.h> 24#include <linux/spinlock.h>
25#include <linux/io.h> 25#include <linux/io.h>
26#include <asm/rtc.h>
26 27
27#define DRV_NAME "sh-rtc" 28#define DRV_NAME "sh-rtc"
28#define DRV_VERSION "0.1.2" 29#define DRV_VERSION "0.1.3"
29 30
30#ifdef CONFIG_CPU_SH3 31#ifdef CONFIG_CPU_SH3
31#define rtc_reg_size sizeof(u16) 32#define rtc_reg_size sizeof(u16)
32#define RTC_BIT_INVERTED 0 /* No bug on SH7708, SH7709A */ 33#define RTC_BIT_INVERTED 0 /* No bug on SH7708, SH7709A */
34#define RTC_DEF_CAPABILITIES 0UL
33#elif defined(CONFIG_CPU_SH4) 35#elif defined(CONFIG_CPU_SH4)
34#define rtc_reg_size sizeof(u32) 36#define rtc_reg_size sizeof(u32)
35#define RTC_BIT_INVERTED 0x40 /* bug on SH7750, SH7750S */ 37#define RTC_BIT_INVERTED 0x40 /* bug on SH7750, SH7750S */
38#define RTC_DEF_CAPABILITIES RTC_CAP_4_DIGIT_YEAR
36#endif 39#endif
37 40
38#define RTC_REG(r) ((r) * rtc_reg_size) 41#define RTC_REG(r) ((r) * rtc_reg_size)
@@ -80,6 +83,7 @@ struct sh_rtc {
80 struct rtc_device *rtc_dev; 83 struct rtc_device *rtc_dev;
81 spinlock_t lock; 84 spinlock_t lock;
82 int rearm_aie; 85 int rearm_aie;
86 unsigned long capabilities; /* See asm-sh/rtc.h for cap bits */
83}; 87};
84 88
85static irqreturn_t sh_rtc_interrupt(int irq, void *dev_id) 89static irqreturn_t sh_rtc_interrupt(int irq, void *dev_id)
@@ -319,14 +323,14 @@ static int sh_rtc_read_time(struct device *dev, struct rtc_time *tm)
319 tm->tm_mday = BCD2BIN(readb(rtc->regbase + RDAYCNT)); 323 tm->tm_mday = BCD2BIN(readb(rtc->regbase + RDAYCNT));
320 tm->tm_mon = BCD2BIN(readb(rtc->regbase + RMONCNT)) - 1; 324 tm->tm_mon = BCD2BIN(readb(rtc->regbase + RMONCNT)) - 1;
321 325
322#if defined(CONFIG_CPU_SH4) 326 if (rtc->capabilities & RTC_CAP_4_DIGIT_YEAR) {
323 yr = readw(rtc->regbase + RYRCNT); 327 yr = readw(rtc->regbase + RYRCNT);
324 yr100 = BCD2BIN(yr >> 8); 328 yr100 = BCD2BIN(yr >> 8);
325 yr &= 0xff; 329 yr &= 0xff;
326#else 330 } else {
327 yr = readb(rtc->regbase + RYRCNT); 331 yr = readb(rtc->regbase + RYRCNT);
328 yr100 = BCD2BIN((yr == 0x99) ? 0x19 : 0x20); 332 yr100 = BCD2BIN((yr == 0x99) ? 0x19 : 0x20);
329#endif 333 }
330 334
331 tm->tm_year = (yr100 * 100 + BCD2BIN(yr)) - 1900; 335 tm->tm_year = (yr100 * 100 + BCD2BIN(yr)) - 1900;
332 336
@@ -375,14 +379,14 @@ static int sh_rtc_set_time(struct device *dev, struct rtc_time *tm)
375 writeb(BIN2BCD(tm->tm_mday), rtc->regbase + RDAYCNT); 379 writeb(BIN2BCD(tm->tm_mday), rtc->regbase + RDAYCNT);
376 writeb(BIN2BCD(tm->tm_mon + 1), rtc->regbase + RMONCNT); 380 writeb(BIN2BCD(tm->tm_mon + 1), rtc->regbase + RMONCNT);
377 381
378#ifdef CONFIG_CPU_SH3 382 if (rtc->capabilities & RTC_CAP_4_DIGIT_YEAR) {
379 year = tm->tm_year % 100; 383 year = (BIN2BCD((tm->tm_year + 1900) / 100) << 8) |
380 writeb(BIN2BCD(year), rtc->regbase + RYRCNT); 384 BIN2BCD(tm->tm_year % 100);
381#else 385 writew(year, rtc->regbase + RYRCNT);
382 year = (BIN2BCD((tm->tm_year + 1900) / 100) << 8) | 386 } else {
383 BIN2BCD(tm->tm_year % 100); 387 year = tm->tm_year % 100;
384 writew(year, rtc->regbase + RYRCNT); 388 writeb(BIN2BCD(year), rtc->regbase + RYRCNT);
385#endif 389 }
386 390
387 /* Start RTC */ 391 /* Start RTC */
388 tmp = readb(rtc->regbase + RCR2); 392 tmp = readb(rtc->regbase + RCR2);
@@ -589,6 +593,17 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
589 goto err_badmap; 593 goto err_badmap;
590 } 594 }
591 595
596 rtc->capabilities = RTC_DEF_CAPABILITIES;
597 if (pdev->dev.platform_data) {
598 struct sh_rtc_platform_info *pinfo = pdev->dev.platform_data;
599
600 /*
601 * Some CPUs have special capabilities in addition to the
602 * default set. Add those in here.
603 */
604 rtc->capabilities |= pinfo->capabilities;
605 }
606
592 platform_set_drvdata(pdev, rtc); 607 platform_set_drvdata(pdev, rtc);
593 608
594 return 0; 609 return 0;
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c
index 053fca41b08a..73440e26834b 100644
--- a/drivers/serial/sh-sci.c
+++ b/drivers/serial/sh-sci.c
@@ -4,6 +4,7 @@
4 * SuperH on-chip serial module support. (SCI with no FIFO / with FIFO) 4 * SuperH on-chip serial module support. (SCI with no FIFO / with FIFO)
5 * 5 *
6 * Copyright (C) 2002 - 2006 Paul Mundt 6 * Copyright (C) 2002 - 2006 Paul Mundt
7 * Modified to support SH7720 SCIF. Markus Brunner, Mark Jonas (Jul 2007).
7 * 8 *
8 * based off of the old drivers/char/sh-sci.c by: 9 * based off of the old drivers/char/sh-sci.c by:
9 * 10 *
@@ -301,6 +302,38 @@ static void sci_init_pins_scif(struct uart_port* port, unsigned int cflag)
301 } 302 }
302 sci_out(port, SCFCR, fcr_val); 303 sci_out(port, SCFCR, fcr_val);
303} 304}
305#elif defined(CONFIG_CPU_SUBTYPE_SH7720)
306static void sci_init_pins_scif(struct uart_port *port, unsigned int cflag)
307{
308 unsigned int fcr_val = 0;
309 unsigned short data;
310
311 if (cflag & CRTSCTS) {
312 /* enable RTS/CTS */
313 if (port->mapbase == 0xa4430000) { /* SCIF0 */
314 /* Clear PTCR bit 9-2; enable all scif pins but sck */
315 data = ctrl_inw(PORT_PTCR);
316 ctrl_outw((data & 0xfc03), PORT_PTCR);
317 } else if (port->mapbase == 0xa4438000) { /* SCIF1 */
318 /* Clear PVCR bit 9-2 */
319 data = ctrl_inw(PORT_PVCR);
320 ctrl_outw((data & 0xfc03), PORT_PVCR);
321 }
322 fcr_val |= SCFCR_MCE;
323 } else {
324 if (port->mapbase == 0xa4430000) { /* SCIF0 */
325 /* Clear PTCR bit 5-2; enable only tx and rx */
326 data = ctrl_inw(PORT_PTCR);
327 ctrl_outw((data & 0xffc3), PORT_PTCR);
328 } else if (port->mapbase == 0xa4438000) { /* SCIF1 */
329 /* Clear PVCR bit 5-2 */
330 data = ctrl_inw(PORT_PVCR);
331 ctrl_outw((data & 0xffc3), PORT_PVCR);
332 }
333 }
334 sci_out(port, SCFCR, fcr_val);
335}
336
304#elif defined(CONFIG_CPU_SH3) 337#elif defined(CONFIG_CPU_SH3)
305/* For SH7705, SH7706, SH7707, SH7709, SH7709A, SH7729 */ 338/* For SH7705, SH7706, SH7707, SH7709, SH7709A, SH7729 */
306static void sci_init_pins_scif(struct uart_port *port, unsigned int cflag) 339static void sci_init_pins_scif(struct uart_port *port, unsigned int cflag)
@@ -1276,7 +1309,7 @@ static int __init sci_console_init(void)
1276console_initcall(sci_console_init); 1309console_initcall(sci_console_init);
1277#endif /* CONFIG_SERIAL_SH_SCI_CONSOLE */ 1310#endif /* CONFIG_SERIAL_SH_SCI_CONSOLE */
1278 1311
1279#ifdef CONFIG_SH_KGDB 1312#ifdef CONFIG_SH_KGDB_CONSOLE
1280/* 1313/*
1281 * FIXME: Most of this can go away.. at the moment, we rely on 1314 * FIXME: Most of this can go away.. at the moment, we rely on
1282 * arch/sh/kernel/setup.c to do the command line parsing for kgdb, though 1315 * arch/sh/kernel/setup.c to do the command line parsing for kgdb, though
@@ -1334,9 +1367,7 @@ int __init kgdb_console_setup(struct console *co, char *options)
1334 1367
1335 return uart_set_options(port, co, baud, parity, bits, flow); 1368 return uart_set_options(port, co, baud, parity, bits, flow);
1336} 1369}
1337#endif /* CONFIG_SH_KGDB */
1338 1370
1339#ifdef CONFIG_SH_KGDB_CONSOLE
1340static struct console kgdb_console = { 1371static struct console kgdb_console = {
1341 .name = "ttySC", 1372 .name = "ttySC",
1342 .device = uart_console_device, 1373 .device = uart_console_device,
@@ -1432,7 +1463,7 @@ static int __devinit sci_probe(struct platform_device *dev)
1432 1463
1433#ifdef CONFIG_CPU_FREQ 1464#ifdef CONFIG_CPU_FREQ
1434 cpufreq_register_notifier(&sci_nb, CPUFREQ_TRANSITION_NOTIFIER); 1465 cpufreq_register_notifier(&sci_nb, CPUFREQ_TRANSITION_NOTIFIER);
1435 dev_info(&dev->dev, "sci: CPU frequency notifier registered\n"); 1466 dev_info(&dev->dev, "CPU frequency notifier registered\n");
1436#endif 1467#endif
1437 1468
1438#ifdef CONFIG_SH_STANDARD_BIOS 1469#ifdef CONFIG_SH_STANDARD_BIOS
diff --git a/drivers/serial/sh-sci.h b/drivers/serial/sh-sci.h
index cf75466ebf57..e89ae29645d6 100644
--- a/drivers/serial/sh-sci.h
+++ b/drivers/serial/sh-sci.h
@@ -10,19 +10,19 @@
10 * Modified to support SH7300(SH-Mobile) SCIF. Takashi Kusuda (Jun 2003). 10 * Modified to support SH7300(SH-Mobile) SCIF. Takashi Kusuda (Jun 2003).
11 * Modified to support H8/300 Series Yoshinori Sato (Feb 2004). 11 * Modified to support H8/300 Series Yoshinori Sato (Feb 2004).
12 * Removed SH7300 support (Jul 2007). 12 * Removed SH7300 support (Jul 2007).
13 * Modified to support SH7720 SCIF. Markus Brunner, Mark Jonas (Aug 2007).
13 */ 14 */
14#include <linux/serial_core.h> 15#include <linux/serial_core.h>
15#include <asm/io.h> 16#include <asm/io.h>
16 17
17#if defined(__H8300H__) || defined(__H8300S__)
18#include <asm/gpio.h> 18#include <asm/gpio.h>
19
19#if defined(CONFIG_H83007) || defined(CONFIG_H83068) 20#if defined(CONFIG_H83007) || defined(CONFIG_H83068)
20#include <asm/regs306x.h> 21#include <asm/regs306x.h>
21#endif 22#endif
22#if defined(CONFIG_H8S2678) 23#if defined(CONFIG_H8S2678)
23#include <asm/regs267x.h> 24#include <asm/regs267x.h>
24#endif 25#endif
25#endif
26 26
27#if defined(CONFIG_CPU_SUBTYPE_SH7706) || \ 27#if defined(CONFIG_CPU_SUBTYPE_SH7706) || \
28 defined(CONFIG_CPU_SUBTYPE_SH7707) || \ 28 defined(CONFIG_CPU_SUBTYPE_SH7707) || \
@@ -46,6 +46,10 @@
46 */ 46 */
47# define SCSCR_INIT(port) (port->mapbase == SCIF2) ? 0xF3 : 0xF0 47# define SCSCR_INIT(port) (port->mapbase == SCIF2) ? 0xF3 : 0xF0
48# define SCIF_ONLY 48# define SCIF_ONLY
49#elif defined(CONFIG_CPU_SUBTYPE_SH7720)
50# define SCSCR_INIT(port) 0x0030 /* TIE=0,RIE=0,TE=1,RE=1 */
51# define SCIF_ONLY
52#define SCIF_ORER 0x0200 /* overrun error bit */
49#elif defined(CONFIG_SH_RTS7751R2D) 53#elif defined(CONFIG_SH_RTS7751R2D)
50# define SCSPTR2 0xFFE80020 /* 16 bit SCIF */ 54# define SCSPTR2 0xFFE80020 /* 16 bit SCIF */
51# define SCIF_ORER 0x0001 /* overrun error bit */ 55# define SCIF_ORER 0x0001 /* overrun error bit */
@@ -217,7 +221,8 @@
217#define SCIF_RDF 0x0002 /* 7705 SCIF, 7707 SCIF, 7709 SCIF, 7750 SCIF */ 221#define SCIF_RDF 0x0002 /* 7705 SCIF, 7707 SCIF, 7709 SCIF, 7750 SCIF */
218#define SCIF_DR 0x0001 /* 7705 SCIF, 7707 SCIF, 7709 SCIF, 7750 SCIF */ 222#define SCIF_DR 0x0001 /* 7705 SCIF, 7707 SCIF, 7709 SCIF, 7750 SCIF */
219 223
220#if defined(CONFIG_CPU_SUBTYPE_SH7705) 224#if defined(CONFIG_CPU_SUBTYPE_SH7705) || \
225 defined(CONFIG_CPU_SUBTYPE_SH7720)
221#define SCIF_ORER 0x0200 226#define SCIF_ORER 0x0200
222#define SCIF_ERRORS ( SCIF_PER | SCIF_FER | SCIF_ER | SCIF_BRK | SCIF_ORER) 227#define SCIF_ERRORS ( SCIF_PER | SCIF_FER | SCIF_ER | SCIF_BRK | SCIF_ORER)
223#define SCIF_RFDC_MASK 0x007f 228#define SCIF_RFDC_MASK 0x007f
@@ -254,7 +259,8 @@
254# define SCxSR_FER(port) SCIF_FER 259# define SCxSR_FER(port) SCIF_FER
255# define SCxSR_PER(port) SCIF_PER 260# define SCxSR_PER(port) SCIF_PER
256# define SCxSR_BRK(port) SCIF_BRK 261# define SCxSR_BRK(port) SCIF_BRK
257#if defined(CONFIG_CPU_SUBTYPE_SH7705) 262#if defined(CONFIG_CPU_SUBTYPE_SH7705) || \
263 defined(CONFIG_CPU_SUBTYPE_SH7720)
258# define SCxSR_RDxF_CLEAR(port) (sci_in(port,SCxSR)&0xfffc) 264# define SCxSR_RDxF_CLEAR(port) (sci_in(port,SCxSR)&0xfffc)
259# define SCxSR_ERROR_CLEAR(port) (sci_in(port,SCxSR)&0xfd73) 265# define SCxSR_ERROR_CLEAR(port) (sci_in(port,SCxSR)&0xfd73)
260# define SCxSR_TDxE_CLEAR(port) (sci_in(port,SCxSR)&0xffdf) 266# define SCxSR_TDxE_CLEAR(port) (sci_in(port,SCxSR)&0xffdf)
@@ -362,7 +368,8 @@
362 CPU_SCIx_FNS(name, sh4_sci_offset, sh4_sci_size, sh4_scif_offset, sh4_scif_size) 368 CPU_SCIx_FNS(name, sh4_sci_offset, sh4_sci_size, sh4_scif_offset, sh4_scif_size)
363#define SCIF_FNS(name, sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size) \ 369#define SCIF_FNS(name, sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size) \
364 CPU_SCIF_FNS(name, sh4_scif_offset, sh4_scif_size) 370 CPU_SCIF_FNS(name, sh4_scif_offset, sh4_scif_size)
365#elif defined(CONFIG_CPU_SUBTYPE_SH7705) 371#elif defined(CONFIG_CPU_SUBTYPE_SH7705) || \
372 defined(CONFIG_CPU_SUBTYPE_SH7720)
366#define SCIF_FNS(name, scif_offset, scif_size) \ 373#define SCIF_FNS(name, scif_offset, scif_size) \
367 CPU_SCIF_FNS(name, scif_offset, scif_size) 374 CPU_SCIF_FNS(name, scif_offset, scif_size)
368#else 375#else
@@ -388,7 +395,8 @@
388 CPU_SCIF_FNS(name, sh4_scif_offset, sh4_scif_size) 395 CPU_SCIF_FNS(name, sh4_scif_offset, sh4_scif_size)
389#endif 396#endif
390 397
391#if defined(CONFIG_CPU_SUBTYPE_SH7705) 398#if defined(CONFIG_CPU_SUBTYPE_SH7705) || \
399 defined(CONFIG_CPU_SUBTYPE_SH7720)
392 400
393SCIF_FNS(SCSMR, 0x00, 16) 401SCIF_FNS(SCSMR, 0x00, 16)
394SCIF_FNS(SCBRR, 0x04, 8) 402SCIF_FNS(SCBRR, 0x04, 8)
@@ -510,7 +518,15 @@ static inline void set_sh771x_scif_pfc(struct uart_port *port)
510 return; 518 return;
511 } 519 }
512} 520}
513 521#elif defined(CONFIG_CPU_SUBTYPE_SH7720)
522static inline int sci_rxd_in(struct uart_port *port)
523{
524 if (port->mapbase == 0xa4430000)
525 return sci_in(port, SCxSR) & 0x0003 ? 1 : 0;
526 else if (port->mapbase == 0xa4438000)
527 return sci_in(port, SCxSR) & 0x0003 ? 1 : 0;
528 return 1;
529}
514#elif defined(CONFIG_CPU_SUBTYPE_SH7750) || \ 530#elif defined(CONFIG_CPU_SUBTYPE_SH7750) || \
515 defined(CONFIG_CPU_SUBTYPE_SH7751) || \ 531 defined(CONFIG_CPU_SUBTYPE_SH7751) || \
516 defined(CONFIG_CPU_SUBTYPE_SH7751R) || \ 532 defined(CONFIG_CPU_SUBTYPE_SH7751R) || \
@@ -653,6 +669,7 @@ static inline int sci_rxd_in(struct uart_port *port)
653 return ctrl_inw(SCSPTR2) & 0x0001 ? 1 : 0; /* SCIF */ 669 return ctrl_inw(SCSPTR2) & 0x0001 ? 1 : 0; /* SCIF */
654 if (port->mapbase == 0xffc60000) 670 if (port->mapbase == 0xffc60000)
655 return ctrl_inw(SCSPTR3) & 0x0001 ? 1 : 0; /* SCIF */ 671 return ctrl_inw(SCSPTR3) & 0x0001 ? 1 : 0; /* SCIF */
672 return 1;
656} 673}
657#endif 674#endif
658 675
@@ -691,7 +708,8 @@ static inline int sci_rxd_in(struct uart_port *port)
691#if defined(CONFIG_CPU_SUBTYPE_SH7780) || \ 708#if defined(CONFIG_CPU_SUBTYPE_SH7780) || \
692 defined(CONFIG_CPU_SUBTYPE_SH7785) 709 defined(CONFIG_CPU_SUBTYPE_SH7785)
693#define SCBRR_VALUE(bps, clk) ((clk+16*bps)/(16*bps)-1) 710#define SCBRR_VALUE(bps, clk) ((clk+16*bps)/(16*bps)-1)
694#elif defined(CONFIG_CPU_SUBTYPE_SH7705) 711#elif defined(CONFIG_CPU_SUBTYPE_SH7705) || \
712 defined(CONFIG_CPU_SUBTYPE_SH7720)
695#define SCBRR_VALUE(bps, clk) (((clk*2)+16*bps)/(32*bps)-1) 713#define SCBRR_VALUE(bps, clk) (((clk*2)+16*bps)/(32*bps)-1)
696#elif defined(__H8300H__) || defined(__H8300S__) 714#elif defined(__H8300H__) || defined(__H8300S__)
697#define SCBRR_VALUE(bps) (((CONFIG_CPU_CLOCK*1000/32)/bps)-1) 715#define SCBRR_VALUE(bps) (((CONFIG_CPU_CLOCK*1000/32)/bps)-1)
diff --git a/drivers/sh/Makefile b/drivers/sh/Makefile
index 8a143894e33f..a96f4a8cfeb8 100644
--- a/drivers/sh/Makefile
+++ b/drivers/sh/Makefile
@@ -2,5 +2,5 @@
2# Makefile for the SuperH specific drivers. 2# Makefile for the SuperH specific drivers.
3# 3#
4 4
5obj-$(CONFIG_SUPERHYWAY) += superhyway/ 5obj-$(CONFIG_SUPERHYWAY) += superhyway/
6 6obj-$(CONFIG_MAPLE) += maple/
diff --git a/drivers/sh/maple/Makefile b/drivers/sh/maple/Makefile
new file mode 100644
index 000000000000..65dfeeb610ef
--- /dev/null
+++ b/drivers/sh/maple/Makefile
@@ -0,0 +1,3 @@
1# Makefile for Maple Bus
2
3obj-$(CONFIG_MAPLE) := maple.o
diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c
new file mode 100644
index 000000000000..161d1021b7eb
--- /dev/null
+++ b/drivers/sh/maple/maple.c
@@ -0,0 +1,735 @@
1/*
2 * Core maple bus functionality
3 *
4 * Copyright (C) 2007 Adrian McMenamin
5 *
6 * Based on 2.4 code by:
7 *
8 * Copyright (C) 2000-2001 YAEGASHI Takeshi
9 * Copyright (C) 2001 M. R. Brown
10 * Copyright (C) 2001 Paul Mundt
11 *
12 * and others.
13 *
14 * This file is subject to the terms and conditions of the GNU General Public
15 * License. See the file "COPYING" in the main directory of this archive
16 * for more details.
17 */
18#include <linux/init.h>
19#include <linux/kernel.h>
20#include <linux/device.h>
21#include <linux/module.h>
22#include <linux/interrupt.h>
23#include <linux/list.h>
24#include <linux/io.h>
25#include <linux/slab.h>
26#include <linux/maple.h>
27#include <linux/dma-mapping.h>
28#include <asm/cacheflush.h>
29#include <asm/dma.h>
30#include <asm/io.h>
31#include <asm/mach/dma.h>
32#include <asm/mach/sysasic.h>
33#include <asm/mach/maple.h>
34
35MODULE_AUTHOR("Yaegshi Takeshi, Paul Mundt, M.R. Brown, Adrian McMenamin");
36MODULE_DESCRIPTION("Maple bus driver for Dreamcast");
37MODULE_LICENSE("GPL v2");
38MODULE_SUPPORTED_DEVICE("{{SEGA, Dreamcast/Maple}}");
39
40static void maple_dma_handler(struct work_struct *work);
41static void maple_vblank_handler(struct work_struct *work);
42
43static DECLARE_WORK(maple_dma_process, maple_dma_handler);
44static DECLARE_WORK(maple_vblank_process, maple_vblank_handler);
45
46static LIST_HEAD(maple_waitq);
47static LIST_HEAD(maple_sentq);
48
49static DEFINE_MUTEX(maple_list_lock);
50
51static struct maple_driver maple_dummy_driver;
52static struct device maple_bus;
53static int subdevice_map[MAPLE_PORTS];
54static unsigned long *maple_sendbuf, *maple_sendptr, *maple_lastptr;
55static unsigned long maple_pnp_time;
56static int started, scanning, liststatus;
57static struct kmem_cache *maple_queue_cache;
58
59struct maple_device_specify {
60 int port;
61 int unit;
62};
63
64/**
65 * maple_driver_register - register a device driver
66 * automatically makes the driver bus a maple bus
67 * @drv: the driver to be registered
68 */
69int maple_driver_register(struct device_driver *drv)
70{
71 if (!drv)
72 return -EINVAL;
73 drv->bus = &maple_bus_type;
74 return driver_register(drv);
75}
76EXPORT_SYMBOL_GPL(maple_driver_register);
77
78/* set hardware registers to enable next round of dma */
79static void maplebus_dma_reset(void)
80{
81 ctrl_outl(MAPLE_MAGIC, MAPLE_RESET);
82 /* set trig type to 0 for software trigger, 1 for hardware (VBLANK) */
83 ctrl_outl(1, MAPLE_TRIGTYPE);
84 ctrl_outl(MAPLE_2MBPS | MAPLE_TIMEOUT(50000), MAPLE_SPEED);
85 ctrl_outl(PHYSADDR(maple_sendbuf), MAPLE_DMAADDR);
86 ctrl_outl(1, MAPLE_ENABLE);
87}
88
89/**
90 * maple_getcond_callback - setup handling MAPLE_COMMAND_GETCOND
91 * @dev: device responding
92 * @callback: handler callback
93 * @interval: interval in jiffies between callbacks
94 * @function: the function code for the device
95 */
96void maple_getcond_callback(struct maple_device *dev,
97 void (*callback) (struct mapleq * mq),
98 unsigned long interval, unsigned long function)
99{
100 dev->callback = callback;
101 dev->interval = interval;
102 dev->function = cpu_to_be32(function);
103 dev->when = jiffies;
104}
105EXPORT_SYMBOL_GPL(maple_getcond_callback);
106
107static int maple_dma_done(void)
108{
109 return (ctrl_inl(MAPLE_STATE) & 1) == 0;
110}
111
112static void maple_release_device(struct device *dev)
113{
114 if (dev->type) {
115 kfree(dev->type->name);
116 kfree(dev->type);
117 }
118}
119
120/**
121 * maple_add_packet - add a single instruction to the queue
122 * @mq: instruction to add to waiting queue
123 */
124void maple_add_packet(struct mapleq *mq)
125{
126 mutex_lock(&maple_list_lock);
127 list_add(&mq->list, &maple_waitq);
128 mutex_unlock(&maple_list_lock);
129}
130EXPORT_SYMBOL_GPL(maple_add_packet);
131
132static struct mapleq *maple_allocq(struct maple_device *dev)
133{
134 struct mapleq *mq;
135
136 mq = kmalloc(sizeof(*mq), GFP_KERNEL);
137 if (!mq)
138 return NULL;
139
140 mq->dev = dev;
141 mq->recvbufdcsp = kmem_cache_zalloc(maple_queue_cache, GFP_KERNEL);
142 mq->recvbuf = (void *) P2SEGADDR(mq->recvbufdcsp);
143 if (!mq->recvbuf) {
144 kfree(mq);
145 return NULL;
146 }
147
148 return mq;
149}
150
151static struct maple_device *maple_alloc_dev(int port, int unit)
152{
153 struct maple_device *dev;
154
155 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
156 if (!dev)
157 return NULL;
158
159 dev->port = port;
160 dev->unit = unit;
161 dev->mq = maple_allocq(dev);
162
163 if (!dev->mq) {
164 kfree(dev);
165 return NULL;
166 }
167
168 return dev;
169}
170
171static void maple_free_dev(struct maple_device *mdev)
172{
173 if (!mdev)
174 return;
175 if (mdev->mq) {
176 kmem_cache_free(maple_queue_cache, mdev->mq->recvbufdcsp);
177 kfree(mdev->mq);
178 }
179 kfree(mdev);
180}
181
182/* process the command queue into a maple command block
183 * terminating command has bit 32 of first long set to 0
184 */
185static void maple_build_block(struct mapleq *mq)
186{
187 int port, unit, from, to, len;
188 unsigned long *lsendbuf = mq->sendbuf;
189
190 port = mq->dev->port & 3;
191 unit = mq->dev->unit;
192 len = mq->length;
193 from = port << 6;
194 to = (port << 6) | (unit > 0 ? (1 << (unit - 1)) & 0x1f : 0x20);
195
196 *maple_lastptr &= 0x7fffffff;
197 maple_lastptr = maple_sendptr;
198
199 *maple_sendptr++ = (port << 16) | len | 0x80000000;
200 *maple_sendptr++ = PHYSADDR(mq->recvbuf);
201 *maple_sendptr++ =
202 mq->command | (to << 8) | (from << 16) | (len << 24);
203
204 while (len-- > 0)
205 *maple_sendptr++ = *lsendbuf++;
206}
207
208/* build up command queue */
209static void maple_send(void)
210{
211 int i;
212 int maple_packets;
213 struct mapleq *mq, *nmq;
214
215 if (!list_empty(&maple_sentq))
216 return;
217 if (list_empty(&maple_waitq) || !maple_dma_done())
218 return;
219 maple_packets = 0;
220 maple_sendptr = maple_lastptr = maple_sendbuf;
221 list_for_each_entry_safe(mq, nmq, &maple_waitq, list) {
222 maple_build_block(mq);
223 list_move(&mq->list, &maple_sentq);
224 if (maple_packets++ > MAPLE_MAXPACKETS)
225 break;
226 }
227 if (maple_packets > 0) {
228 for (i = 0; i < (1 << MAPLE_DMA_PAGES); i++)
229 dma_cache_sync(0, maple_sendbuf + i * PAGE_SIZE,
230 PAGE_SIZE, DMA_BIDIRECTIONAL);
231 }
232}
233
234static int attach_matching_maple_driver(struct device_driver *driver,
235 void *devptr)
236{
237 struct maple_driver *maple_drv;
238 struct maple_device *mdev;
239
240 mdev = devptr;
241 maple_drv = to_maple_driver(driver);
242 if (mdev->devinfo.function & be32_to_cpu(maple_drv->function)) {
243 if (maple_drv->connect(mdev) == 0) {
244 mdev->driver = maple_drv;
245 return 1;
246 }
247 }
248 return 0;
249}
250
251static void maple_detach_driver(struct maple_device *mdev)
252{
253 if (!mdev)
254 return;
255 if (mdev->driver) {
256 if (mdev->driver->disconnect)
257 mdev->driver->disconnect(mdev);
258 }
259 mdev->driver = NULL;
260 if (mdev->registered) {
261 maple_release_device(&mdev->dev);
262 device_unregister(&mdev->dev);
263 }
264 mdev->registered = 0;
265 maple_free_dev(mdev);
266}
267
268/* process initial MAPLE_COMMAND_DEVINFO for each device or port */
269static void maple_attach_driver(struct maple_device *dev)
270{
271 char *p;
272
273 char *recvbuf;
274 unsigned long function;
275 int matched, retval;
276
277 recvbuf = dev->mq->recvbuf;
278 memcpy(&dev->devinfo, recvbuf + 4, sizeof(dev->devinfo));
279 memcpy(dev->product_name, dev->devinfo.product_name, 30);
280 memcpy(dev->product_licence, dev->devinfo.product_licence, 60);
281 dev->product_name[30] = '\0';
282 dev->product_licence[60] = '\0';
283
284 for (p = dev->product_name + 29; dev->product_name <= p; p--)
285 if (*p == ' ')
286 *p = '\0';
287 else
288 break;
289
290 for (p = dev->product_licence + 59; dev->product_licence <= p; p--)
291 if (*p == ' ')
292 *p = '\0';
293 else
294 break;
295
296 function = be32_to_cpu(dev->devinfo.function);
297
298 if (function > 0x200) {
299 /* Do this silently - as not a real device */
300 function = 0;
301 dev->driver = &maple_dummy_driver;
302 sprintf(dev->dev.bus_id, "%d:0.port", dev->port);
303 } else {
304 printk(KERN_INFO
305 "Maple bus at (%d, %d): Connected function 0x%lX\n",
306 dev->port, dev->unit, function);
307
308 matched =
309 bus_for_each_drv(&maple_bus_type, NULL, dev,
310 attach_matching_maple_driver);
311
312 if (matched == 0) {
313 /* Driver does not exist yet */
314 printk(KERN_INFO
315 "No maple driver found for this device\n");
316 dev->driver = &maple_dummy_driver;
317 }
318
319 sprintf(dev->dev.bus_id, "%d:0%d.%lX", dev->port,
320 dev->unit, function);
321 }
322 dev->function = function;
323 dev->dev.bus = &maple_bus_type;
324 dev->dev.parent = &maple_bus;
325 dev->dev.release = &maple_release_device;
326 retval = device_register(&dev->dev);
327 if (retval) {
328 printk(KERN_INFO
329 "Maple bus: Attempt to register device (%x, %x) failed.\n",
330 dev->port, dev->unit);
331 maple_free_dev(dev);
332 }
333 dev->registered = 1;
334}
335
336/*
337 * if device has been registered for the given
338 * port and unit then return 1 - allows identification
339 * of which devices need to be attached or detached
340 */
341static int detach_maple_device(struct device *device, void *portptr)
342{
343 struct maple_device_specify *ds;
344 struct maple_device *mdev;
345
346 ds = portptr;
347 mdev = to_maple_dev(device);
348 if (mdev->port == ds->port && mdev->unit == ds->unit)
349 return 1;
350 return 0;
351}
352
353static int setup_maple_commands(struct device *device, void *ignored)
354{
355 struct maple_device *maple_dev = to_maple_dev(device);
356
357 if ((maple_dev->interval > 0)
358 && time_after(jiffies, maple_dev->when)) {
359 maple_dev->when = jiffies + maple_dev->interval;
360 maple_dev->mq->command = MAPLE_COMMAND_GETCOND;
361 maple_dev->mq->sendbuf = &maple_dev->function;
362 maple_dev->mq->length = 1;
363 maple_add_packet(maple_dev->mq);
364 liststatus++;
365 } else {
366 if (time_after(jiffies, maple_pnp_time)) {
367 maple_dev->mq->command = MAPLE_COMMAND_DEVINFO;
368 maple_dev->mq->length = 0;
369 maple_add_packet(maple_dev->mq);
370 liststatus++;
371 }
372 }
373
374 return 0;
375}
376
377/* VBLANK bottom half - implemented via workqueue */
378static void maple_vblank_handler(struct work_struct *work)
379{
380 if (!maple_dma_done())
381 return;
382 if (!list_empty(&maple_sentq))
383 return;
384 ctrl_outl(0, MAPLE_ENABLE);
385 liststatus = 0;
386 bus_for_each_dev(&maple_bus_type, NULL, NULL,
387 setup_maple_commands);
388 if (time_after(jiffies, maple_pnp_time))
389 maple_pnp_time = jiffies + MAPLE_PNP_INTERVAL;
390 if (liststatus && list_empty(&maple_sentq)) {
391 INIT_LIST_HEAD(&maple_sentq);
392 maple_send();
393 }
394 maplebus_dma_reset();
395}
396
397/* handle devices added via hotplugs - placing them on queue for DEVINFO*/
398static void maple_map_subunits(struct maple_device *mdev, int submask)
399{
400 int retval, k, devcheck;
401 struct maple_device *mdev_add;
402 struct maple_device_specify ds;
403
404 for (k = 0; k < 5; k++) {
405 ds.port = mdev->port;
406 ds.unit = k + 1;
407 retval =
408 bus_for_each_dev(&maple_bus_type, NULL, &ds,
409 detach_maple_device);
410 if (retval) {
411 submask = submask >> 1;
412 continue;
413 }
414 devcheck = submask & 0x01;
415 if (devcheck) {
416 mdev_add = maple_alloc_dev(mdev->port, k + 1);
417 if (!mdev_add)
418 return;
419 mdev_add->mq->command = MAPLE_COMMAND_DEVINFO;
420 mdev_add->mq->length = 0;
421 maple_add_packet(mdev_add->mq);
422 scanning = 1;
423 }
424 submask = submask >> 1;
425 }
426}
427
428/* mark a device as removed */
429static void maple_clean_submap(struct maple_device *mdev)
430{
431 int killbit;
432
433 killbit = (mdev->unit > 0 ? (1 << (mdev->unit - 1)) & 0x1f : 0x20);
434 killbit = ~killbit;
435 killbit &= 0xFF;
436 subdevice_map[mdev->port] = subdevice_map[mdev->port] & killbit;
437}
438
439/* handle empty port or hotplug removal */
440static void maple_response_none(struct maple_device *mdev,
441 struct mapleq *mq)
442{
443 if (mdev->unit != 0) {
444 list_del(&mq->list);
445 maple_clean_submap(mdev);
446 printk(KERN_INFO
447 "Maple bus device detaching at (%d, %d)\n",
448 mdev->port, mdev->unit);
449 maple_detach_driver(mdev);
450 return;
451 }
452 if (!started) {
453 printk(KERN_INFO "No maple devices attached to port %d\n",
454 mdev->port);
455 return;
456 }
457 maple_clean_submap(mdev);
458}
459
460/* preprocess hotplugs or scans */
461static void maple_response_devinfo(struct maple_device *mdev,
462 char *recvbuf)
463{
464 char submask;
465 if ((!started) || (scanning == 2)) {
466 maple_attach_driver(mdev);
467 return;
468 }
469 if (mdev->unit == 0) {
470 submask = recvbuf[2] & 0x1F;
471 if (submask ^ subdevice_map[mdev->port]) {
472 maple_map_subunits(mdev, submask);
473 subdevice_map[mdev->port] = submask;
474 }
475 }
476}
477
478/* maple dma end bottom half - implemented via workqueue */
479static void maple_dma_handler(struct work_struct *work)
480{
481 struct mapleq *mq, *nmq;
482 struct maple_device *dev;
483 char *recvbuf;
484 enum maple_code code;
485
486 if (!maple_dma_done())
487 return;
488 ctrl_outl(0, MAPLE_ENABLE);
489 if (!list_empty(&maple_sentq)) {
490 list_for_each_entry_safe(mq, nmq, &maple_sentq, list) {
491 recvbuf = mq->recvbuf;
492 code = recvbuf[0];
493 dev = mq->dev;
494 switch (code) {
495 case MAPLE_RESPONSE_NONE:
496 maple_response_none(dev, mq);
497 break;
498
499 case MAPLE_RESPONSE_DEVINFO:
500 maple_response_devinfo(dev, recvbuf);
501 break;
502
503 case MAPLE_RESPONSE_DATATRF:
504 if (dev->callback)
505 dev->callback(mq);
506 break;
507
508 case MAPLE_RESPONSE_FILEERR:
509 case MAPLE_RESPONSE_AGAIN:
510 case MAPLE_RESPONSE_BADCMD:
511 case MAPLE_RESPONSE_BADFUNC:
512 printk(KERN_DEBUG
513 "Maple non-fatal error 0x%X\n",
514 code);
515 break;
516
517 case MAPLE_RESPONSE_ALLINFO:
518 printk(KERN_DEBUG
519 "Maple - extended device information not supported\n");
520 break;
521
522 case MAPLE_RESPONSE_OK:
523 break;
524
525 default:
526 break;
527 }
528 }
529 INIT_LIST_HEAD(&maple_sentq);
530 if (scanning == 1) {
531 maple_send();
532 scanning = 2;
533 } else
534 scanning = 0;
535
536 if (started == 0)
537 started = 1;
538 }
539 maplebus_dma_reset();
540}
541
542static irqreturn_t maplebus_dma_interrupt(int irq, void *dev_id)
543{
544 /* Load everything into the bottom half */
545 schedule_work(&maple_dma_process);
546 return IRQ_HANDLED;
547}
548
549static irqreturn_t maplebus_vblank_interrupt(int irq, void *dev_id)
550{
551 schedule_work(&maple_vblank_process);
552 return IRQ_HANDLED;
553}
554
555static struct irqaction maple_dma_irq = {
556 .name = "maple bus DMA handler",
557 .handler = maplebus_dma_interrupt,
558 .flags = IRQF_SHARED,
559};
560
561static struct irqaction maple_vblank_irq = {
562 .name = "maple bus VBLANK handler",
563 .handler = maplebus_vblank_interrupt,
564 .flags = IRQF_SHARED,
565};
566
567static int maple_set_dma_interrupt_handler(void)
568{
569 return setup_irq(HW_EVENT_MAPLE_DMA, &maple_dma_irq);
570}
571
572static int maple_set_vblank_interrupt_handler(void)
573{
574 return setup_irq(HW_EVENT_VSYNC, &maple_vblank_irq);
575}
576
577static int maple_get_dma_buffer(void)
578{
579 maple_sendbuf =
580 (void *) __get_free_pages(GFP_KERNEL | __GFP_ZERO,
581 MAPLE_DMA_PAGES);
582 if (!maple_sendbuf)
583 return -ENOMEM;
584 return 0;
585}
586
587static int match_maple_bus_driver(struct device *devptr,
588 struct device_driver *drvptr)
589{
590 struct maple_driver *maple_drv;
591 struct maple_device *maple_dev;
592
593 maple_drv = container_of(drvptr, struct maple_driver, drv);
594 maple_dev = container_of(devptr, struct maple_device, dev);
595 /* Trap empty port case */
596 if (maple_dev->devinfo.function == 0xFFFFFFFF)
597 return 0;
598 else if (maple_dev->devinfo.function &
599 be32_to_cpu(maple_drv->function))
600 return 1;
601 return 0;
602}
603
604static int maple_bus_uevent(struct device *dev, char **envp,
605 int num_envp, char *buffer, int buffer_size)
606{
607 return 0;
608}
609
610static void maple_bus_release(struct device *dev)
611{
612}
613
614static struct maple_driver maple_dummy_driver = {
615 .drv = {
616 .name = "maple_dummy_driver",
617 .bus = &maple_bus_type,
618 },
619};
620
621struct bus_type maple_bus_type = {
622 .name = "maple",
623 .match = match_maple_bus_driver,
624 .uevent = maple_bus_uevent,
625};
626EXPORT_SYMBOL_GPL(maple_bus_type);
627
628static struct device maple_bus = {
629 .bus_id = "maple",
630 .release = maple_bus_release,
631};
632
633static int __init maple_bus_init(void)
634{
635 int retval, i;
636 struct maple_device *mdev[MAPLE_PORTS];
637 ctrl_outl(0, MAPLE_STATE);
638
639 retval = device_register(&maple_bus);
640 if (retval)
641 goto cleanup;
642
643 retval = bus_register(&maple_bus_type);
644 if (retval)
645 goto cleanup_device;
646
647 retval = driver_register(&maple_dummy_driver.drv);
648
649 if (retval)
650 goto cleanup_bus;
651
652 /* allocate memory for maple bus dma */
653 retval = maple_get_dma_buffer();
654 if (retval) {
655 printk(KERN_INFO
656 "Maple bus: Failed to allocate Maple DMA buffers\n");
657 goto cleanup_basic;
658 }
659
660 /* set up DMA interrupt handler */
661 retval = maple_set_dma_interrupt_handler();
662 if (retval) {
663 printk(KERN_INFO
664 "Maple bus: Failed to grab maple DMA IRQ\n");
665 goto cleanup_dma;
666 }
667
668 /* set up VBLANK interrupt handler */
669 retval = maple_set_vblank_interrupt_handler();
670 if (retval) {
671 printk(KERN_INFO "Maple bus: Failed to grab VBLANK IRQ\n");
672 goto cleanup_irq;
673 }
674
675 maple_queue_cache =
676 kmem_cache_create("maple_queue_cache", 0x400, 0,
677 SLAB_HWCACHE_ALIGN, NULL);
678
679 if (!maple_queue_cache)
680 goto cleanup_bothirqs;
681
682 /* setup maple ports */
683 for (i = 0; i < MAPLE_PORTS; i++) {
684 mdev[i] = maple_alloc_dev(i, 0);
685 if (!mdev[i]) {
686 while (i-- > 0)
687 maple_free_dev(mdev[i]);
688 goto cleanup_cache;
689 }
690 mdev[i]->registered = 0;
691 mdev[i]->mq->command = MAPLE_COMMAND_DEVINFO;
692 mdev[i]->mq->length = 0;
693 maple_attach_driver(mdev[i]);
694 maple_add_packet(mdev[i]->mq);
695 subdevice_map[i] = 0;
696 }
697
698 /* setup maplebus hardware */
699 maplebus_dma_reset();
700
701 /* initial detection */
702 maple_send();
703
704 maple_pnp_time = jiffies;
705
706 printk(KERN_INFO "Maple bus core now registered.\n");
707
708 return 0;
709
710cleanup_cache:
711 kmem_cache_destroy(maple_queue_cache);
712
713cleanup_bothirqs:
714 free_irq(HW_EVENT_VSYNC, 0);
715
716cleanup_irq:
717 free_irq(HW_EVENT_MAPLE_DMA, 0);
718
719cleanup_dma:
720 free_pages((unsigned long) maple_sendbuf, MAPLE_DMA_PAGES);
721
722cleanup_basic:
723 driver_unregister(&maple_dummy_driver.drv);
724
725cleanup_bus:
726 bus_unregister(&maple_bus_type);
727
728cleanup_device:
729 device_unregister(&maple_bus);
730
731cleanup:
732 printk(KERN_INFO "Maple bus registration failed\n");
733 return retval;
734}
735subsys_initcall(maple_bus_init);
diff --git a/drivers/video/backlight/hp680_bl.c b/drivers/video/backlight/hp680_bl.c
index 0899fccbd570..fbea2bd129c7 100644
--- a/drivers/video/backlight/hp680_bl.c
+++ b/drivers/video/backlight/hp680_bl.c
@@ -125,8 +125,8 @@ static int hp680bl_remove(struct platform_device *pdev)
125{ 125{
126 struct backlight_device *bd = platform_get_drvdata(pdev); 126 struct backlight_device *bd = platform_get_drvdata(pdev);
127 127
128 hp680bl_data.brightness = 0; 128 bd->props.brightness = 0;
129 hp680bl_data.power = 0; 129 bd->props.power = 0;
130 hp680bl_send_intensity(bd); 130 hp680bl_send_intensity(bd);
131 131
132 backlight_device_unregister(bd); 132 backlight_device_unregister(bd);
diff --git a/drivers/video/pvr2fb.c b/drivers/video/pvr2fb.c
index 7d6c29800d14..06805c9b237b 100644
--- a/drivers/video/pvr2fb.c
+++ b/drivers/video/pvr2fb.c
@@ -667,6 +667,8 @@ static int pvr2_init_cable(void)
667 related */ 667 related */
668 if (cable_type == CT_COMPOSITE) 668 if (cable_type == CT_COMPOSITE)
669 fb_writel(3 << 8, VOUTC); 669 fb_writel(3 << 8, VOUTC);
670 else if (cable_type == CT_RGB)
671 fb_writel(1 << 9, VOUTC);
670 else 672 else
671 fb_writel(0, VOUTC); 673 fb_writel(0, VOUTC);
672 674
@@ -890,7 +892,7 @@ static int __init pvr2fb_dc_init(void)
890 pvr2_fix.mmio_start = 0xa05f8000; /* registers start here */ 892 pvr2_fix.mmio_start = 0xa05f8000; /* registers start here */
891 pvr2_fix.mmio_len = 0x2000; 893 pvr2_fix.mmio_len = 0x2000;
892 894
893 if (request_irq(HW_EVENT_VSYNC, pvr2fb_interrupt, 0, 895 if (request_irq(HW_EVENT_VSYNC, pvr2fb_interrupt, IRQF_SHARED,
894 "pvr2 VBL handler", fb_info)) { 896 "pvr2 VBL handler", fb_info)) {
895 return -EBUSY; 897 return -EBUSY;
896 } 898 }
diff --git a/include/asm-sh/cacheflush.h b/include/asm-sh/cacheflush.h
index 07f62ec9ff0c..aa558da08471 100644
--- a/include/asm-sh/cacheflush.h
+++ b/include/asm-sh/cacheflush.h
@@ -1,16 +1,47 @@
1#ifndef __ASM_SH_CACHEFLUSH_H 1#ifndef __ASM_SH_CACHEFLUSH_H
2#define __ASM_SH_CACHEFLUSH_H 2#define __ASM_SH_CACHEFLUSH_H
3
3#ifdef __KERNEL__ 4#ifdef __KERNEL__
4 5
5#include <linux/mm.h> 6#ifdef CONFIG_CACHE_OFF
7/*
8 * Nothing to do when the cache is disabled, initial flush and explicit
9 * disabling is handled at CPU init time.
10 *
11 * See arch/sh/kernel/cpu/init.c:cache_init().
12 */
13#define p3_cache_init() do { } while (0)
14#define flush_cache_all() do { } while (0)
15#define flush_cache_mm(mm) do { } while (0)
16#define flush_cache_dup_mm(mm) do { } while (0)
17#define flush_cache_range(vma, start, end) do { } while (0)
18#define flush_cache_page(vma, vmaddr, pfn) do { } while (0)
19#define flush_dcache_page(page) do { } while (0)
20#define flush_icache_range(start, end) do { } while (0)
21#define flush_icache_page(vma,pg) do { } while (0)
22#define flush_dcache_mmap_lock(mapping) do { } while (0)
23#define flush_dcache_mmap_unlock(mapping) do { } while (0)
24#define flush_cache_sigtramp(vaddr) do { } while (0)
25#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
26#define __flush_wback_region(start, size) do { (void)(start); } while (0)
27#define __flush_purge_region(start, size) do { (void)(start); } while (0)
28#define __flush_invalidate_region(start, size) do { (void)(start); } while (0)
29#else
6#include <asm/cpu/cacheflush.h> 30#include <asm/cpu/cacheflush.h>
7 31
32/*
33 * Consistent DMA requires that the __flush_xxx() primitives must be set
34 * for any of the enabled non-coherent caches (most of the UP CPUs),
35 * regardless of PIPT or VIPT cache configurations.
36 */
37
8/* Flush (write-back only) a region (smaller than a page) */ 38/* Flush (write-back only) a region (smaller than a page) */
9extern void __flush_wback_region(void *start, int size); 39extern void __flush_wback_region(void *start, int size);
10/* Flush (write-back & invalidate) a region (smaller than a page) */ 40/* Flush (write-back & invalidate) a region (smaller than a page) */
11extern void __flush_purge_region(void *start, int size); 41extern void __flush_purge_region(void *start, int size);
12/* Flush (invalidate only) a region (smaller than a page) */ 42/* Flush (invalidate only) a region (smaller than a page) */
13extern void __flush_invalidate_region(void *start, int size); 43extern void __flush_invalidate_region(void *start, int size);
44#endif
14 45
15#define flush_cache_vmap(start, end) flush_cache_all() 46#define flush_cache_vmap(start, end) flush_cache_all()
16#define flush_cache_vunmap(start, end) flush_cache_all() 47#define flush_cache_vunmap(start, end) flush_cache_all()
diff --git a/include/asm-sh/cpu-sh3/cache.h b/include/asm-sh/cpu-sh3/cache.h
index ffe08d2813f9..255016fc91f0 100644
--- a/include/asm-sh/cpu-sh3/cache.h
+++ b/include/asm-sh/cpu-sh3/cache.h
@@ -26,7 +26,9 @@
26#define CCR_CACHE_ENABLE CCR_CACHE_CE 26#define CCR_CACHE_ENABLE CCR_CACHE_CE
27#define CCR_CACHE_INVALIDATE CCR_CACHE_CF 27#define CCR_CACHE_INVALIDATE CCR_CACHE_CF
28 28
29#if defined(CONFIG_CPU_SUBTYPE_SH7705) || defined(CONFIG_CPU_SUBTYPE_SH7710) 29#if defined(CONFIG_CPU_SUBTYPE_SH7705) || \
30 defined(CONFIG_CPU_SUBTYPE_SH7710) || \
31 defined(CONFIG_CPU_SUBTYPE_SH7720)
30#define CCR3 0xa40000b4 32#define CCR3 0xa40000b4
31#define CCR_CACHE_16KB 0x00010000 33#define CCR_CACHE_16KB 0x00010000
32#define CCR_CACHE_32KB 0x00020000 34#define CCR_CACHE_32KB 0x00020000
diff --git a/include/asm-sh/cpu-sh3/dma.h b/include/asm-sh/cpu-sh3/dma.h
index 3a66dc458023..54bfece328c2 100644
--- a/include/asm-sh/cpu-sh3/dma.h
+++ b/include/asm-sh/cpu-sh3/dma.h
@@ -1,7 +1,20 @@
1#ifndef __ASM_CPU_SH3_DMA_H 1#ifndef __ASM_CPU_SH3_DMA_H
2#define __ASM_CPU_SH3_DMA_H 2#define __ASM_CPU_SH3_DMA_H
3 3
4
5#if defined(CONFIG_CPU_SUBTYPE_SH7720) || defined(CONFIG_CPU_SUBTYPE_SH7709)
6#define SH_DMAC_BASE 0xa4010020
7
8#define DMTE0_IRQ 48
9#define DMTE1_IRQ 49
10#define DMTE2_IRQ 50
11#define DMTE3_IRQ 51
12#define DMTE4_IRQ 76
13#define DMTE5_IRQ 77
14
15#else
4#define SH_DMAC_BASE 0xa4000020 16#define SH_DMAC_BASE 0xa4000020
17#endif
5 18
6/* Definitions for the SuperH DMAC */ 19/* Definitions for the SuperH DMAC */
7#define TM_BURST 0x00000020 20#define TM_BURST 0x00000020
diff --git a/include/asm-sh/cpu-sh3/gpio.h b/include/asm-sh/cpu-sh3/gpio.h
new file mode 100644
index 000000000000..48770c1c7bdf
--- /dev/null
+++ b/include/asm-sh/cpu-sh3/gpio.h
@@ -0,0 +1,66 @@
1/*
2 * include/asm-sh/cpu-sh3/gpio.h
3 *
4 * Copyright (C) 2007 Markus Brunner, Mark Jonas
5 *
6 * Addresses for the Pin Function Controller
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file "COPYING" in the main directory of this archive
10 * for more details.
11 */
12#ifndef _CPU_SH3_GPIO_H
13#define _CPU_SH3_GPIO_H
14
15#if defined(CONFIG_CPU_SUBTYPE_SH7720)
16
17/* Control registers */
18#define PORT_PACR 0xA4050100UL
19#define PORT_PBCR 0xA4050102UL
20#define PORT_PCCR 0xA4050104UL
21#define PORT_PDCR 0xA4050106UL
22#define PORT_PECR 0xA4050108UL
23#define PORT_PFCR 0xA405010AUL
24#define PORT_PGCR 0xA405010CUL
25#define PORT_PHCR 0xA405010EUL
26#define PORT_PJCR 0xA4050110UL
27#define PORT_PKCR 0xA4050112UL
28#define PORT_PLCR 0xA4050114UL
29#define PORT_PMCR 0xA4050116UL
30#define PORT_PPCR 0xA4050118UL
31#define PORT_PRCR 0xA405011AUL
32#define PORT_PSCR 0xA405011CUL
33#define PORT_PTCR 0xA405011EUL
34#define PORT_PUCR 0xA4050120UL
35#define PORT_PVCR 0xA4050122UL
36
37/* Data registers */
38#define PORT_PADR 0xA4050140UL
39/* Address of PORT_PBDR is wrong in the datasheet, see errata 2005-09-21 */
40#define PORT_PBDR 0xA4050142UL
41#define PORT_PCDR 0xA4050144UL
42#define PORT_PDDR 0xA4050146UL
43#define PORT_PEDR 0xA4050148UL
44#define PORT_PFDR 0xA405014AUL
45#define PORT_PGDR 0xA405014CUL
46#define PORT_PHDR 0xA405014EUL
47#define PORT_PJDR 0xA4050150UL
48#define PORT_PKDR 0xA4050152UL
49#define PORT_PLDR 0xA4050154UL
50#define PORT_PMDR 0xA4050156UL
51#define PORT_PPDR 0xA4050158UL
52#define PORT_PRDR 0xA405015AUL
53#define PORT_PSDR 0xA405015CUL
54#define PORT_PTDR 0xA405015EUL
55#define PORT_PUDR 0xA4050160UL
56#define PORT_PVDR 0xA4050162UL
57
58/* Pin Select Registers */
59#define PORT_PSELA 0xA4050124UL
60#define PORT_PSELB 0xA4050126UL
61#define PORT_PSELC 0xA4050128UL
62#define PORT_PSELD 0xA405012AUL
63
64#endif
65
66#endif
diff --git a/include/asm-sh/cpu-sh3/mmu_context.h b/include/asm-sh/cpu-sh3/mmu_context.h
index b20786d42d09..16c2d63b7e39 100644
--- a/include/asm-sh/cpu-sh3/mmu_context.h
+++ b/include/asm-sh/cpu-sh3/mmu_context.h
@@ -27,12 +27,13 @@
27#define TRA 0xffffffd0 27#define TRA 0xffffffd0
28#define EXPEVT 0xffffffd4 28#define EXPEVT 0xffffffd4
29 29
30#if defined(CONFIG_CPU_SUBTYPE_SH7707) || \ 30#if defined(CONFIG_CPU_SUBTYPE_SH7705) || \
31 defined(CONFIG_CPU_SUBTYPE_SH7709) || \
32 defined(CONFIG_CPU_SUBTYPE_SH7706) || \ 31 defined(CONFIG_CPU_SUBTYPE_SH7706) || \
33 defined(CONFIG_CPU_SUBTYPE_SH7705) || \ 32 defined(CONFIG_CPU_SUBTYPE_SH7707) || \
33 defined(CONFIG_CPU_SUBTYPE_SH7709) || \
34 defined(CONFIG_CPU_SUBTYPE_SH7710) || \
34 defined(CONFIG_CPU_SUBTYPE_SH7712) || \ 35 defined(CONFIG_CPU_SUBTYPE_SH7712) || \
35 defined(CONFIG_CPU_SUBTYPE_SH7710) 36 defined(CONFIG_CPU_SUBTYPE_SH7720)
36#define INTEVT 0xa4000000 /* INTEVTE2(0xa4000000) */ 37#define INTEVT 0xa4000000 /* INTEVTE2(0xa4000000) */
37#else 38#else
38#define INTEVT 0xffffffd8 39#define INTEVT 0xffffffd8
diff --git a/include/asm-sh/cpu-sh3/timer.h b/include/asm-sh/cpu-sh3/timer.h
index b6c2020a2ad3..3880ce047fe0 100644
--- a/include/asm-sh/cpu-sh3/timer.h
+++ b/include/asm-sh/cpu-sh3/timer.h
@@ -23,11 +23,13 @@
23 * --------------------------------------------------------------------------- 23 * ---------------------------------------------------------------------------
24 */ 24 */
25 25
26#if !defined(CONFIG_CPU_SUBTYPE_SH7727) 26#if !defined(CONFIG_CPU_SUBTYPE_SH7720) && \
27 !defined(CONFIG_CPU_SUBTYPE_SH7727)
27#define TMU_TOCR 0xfffffe90 /* Byte access */ 28#define TMU_TOCR 0xfffffe90 /* Byte access */
28#endif 29#endif
29 30
30#if defined(CONFIG_CPU_SUBTYPE_SH7710) 31#if defined(CONFIG_CPU_SUBTYPE_SH7710) || \
32 defined(CONFIG_CPU_SUBTYPE_SH7720)
31#define TMU_012_TSTR 0xa412fe92 /* Byte access */ 33#define TMU_012_TSTR 0xa412fe92 /* Byte access */
32 34
33#define TMU0_TCOR 0xa412fe94 /* Long access */ 35#define TMU0_TCOR 0xa412fe94 /* Long access */
@@ -56,7 +58,8 @@
56#define TMU2_TCOR 0xfffffeac /* Long access */ 58#define TMU2_TCOR 0xfffffeac /* Long access */
57#define TMU2_TCNT 0xfffffeb0 /* Long access */ 59#define TMU2_TCNT 0xfffffeb0 /* Long access */
58#define TMU2_TCR 0xfffffeb4 /* Word access */ 60#define TMU2_TCR 0xfffffeb4 /* Word access */
59#if !defined(CONFIG_CPU_SUBTYPE_SH7727) 61#if !defined(CONFIG_CPU_SUBTYPE_SH7720) && \
62 !defined(CONFIG_CPU_SUBTYPE_SH7727)
60#define TMU2_TCPR2 0xfffffeb8 /* Long access */ 63#define TMU2_TCPR2 0xfffffeb8 /* Long access */
61#endif 64#endif
62#endif 65#endif
diff --git a/include/asm-sh/cpu-sh3/ubc.h b/include/asm-sh/cpu-sh3/ubc.h
index 9d308cbe9b29..18467c574534 100644
--- a/include/asm-sh/cpu-sh3/ubc.h
+++ b/include/asm-sh/cpu-sh3/ubc.h
@@ -11,7 +11,8 @@
11#ifndef __ASM_CPU_SH3_UBC_H 11#ifndef __ASM_CPU_SH3_UBC_H
12#define __ASM_CPU_SH3_UBC_H 12#define __ASM_CPU_SH3_UBC_H
13 13
14#if defined(CONFIG_CPU_SUBTYPE_SH7710) 14#if defined(CONFIG_CPU_SUBTYPE_SH7710) || \
15 defined(CONFIG_CPU_SUBTYPE_SH7720)
15#define UBC_BARA 0xa4ffffb0 16#define UBC_BARA 0xa4ffffb0
16#define UBC_BAMRA 0xa4ffffb4 17#define UBC_BAMRA 0xa4ffffb4
17#define UBC_BBRA 0xa4ffffb8 18#define UBC_BBRA 0xa4ffffb8
diff --git a/include/asm-sh/cpu-sh4/dma.h b/include/asm-sh/cpu-sh4/dma.h
index 36e26a964765..aaf71b018c28 100644
--- a/include/asm-sh/cpu-sh4/dma.h
+++ b/include/asm-sh/cpu-sh4/dma.h
@@ -31,7 +31,7 @@
31#define TS_32 0x00000030 31#define TS_32 0x00000030
32#define TS_64 0x00000000 32#define TS_64 0x00000000
33 33
34#define CHCR_TS_MASK 0x30 34#define CHCR_TS_MASK 0x70
35#define CHCR_TS_SHIFT 4 35#define CHCR_TS_SHIFT 4
36 36
37#define DMAOR_COD 0x00000008 37#define DMAOR_COD 0x00000008
diff --git a/include/asm-sh/cpu-sh4/mmu_context.h b/include/asm-sh/cpu-sh4/mmu_context.h
index ff4c5fbbfaf0..979acddc0f8e 100644
--- a/include/asm-sh/cpu-sh4/mmu_context.h
+++ b/include/asm-sh/cpu-sh4/mmu_context.h
@@ -22,13 +22,21 @@
22#define MMU_UTLB_ADDRESS_ARRAY 0xF6000000 22#define MMU_UTLB_ADDRESS_ARRAY 0xF6000000
23#define MMU_PAGE_ASSOC_BIT 0x80 23#define MMU_PAGE_ASSOC_BIT 0x80
24 24
25#define MMU_NTLB_ENTRIES 64 /* for 7750 */ 25#ifdef CONFIG_X2TLB
26#define MMUCR_ME (1 << 7)
27#else
28#define MMUCR_ME (0)
29#endif
30
26#ifdef CONFIG_SH_STORE_QUEUES 31#ifdef CONFIG_SH_STORE_QUEUES
27#define MMU_CONTROL_INIT 0x05 /* SQMD=0, SV=0, TI=1, AT=1 */ 32#define MMUCR_SQMD (1 << 9)
28#else 33#else
29#define MMU_CONTROL_INIT 0x205 /* SQMD=1, SV=0, TI=1, AT=1 */ 34#define MMUCR_SQMD (0)
30#endif 35#endif
31 36
37#define MMU_NTLB_ENTRIES 64
38#define MMU_CONTROL_INIT (0x05|MMUCR_SQMD|MMUCR_ME)
39
32#define MMU_ITLB_DATA_ARRAY 0xF3000000 40#define MMU_ITLB_DATA_ARRAY 0xF3000000
33#define MMU_UTLB_DATA_ARRAY 0xF7000000 41#define MMU_UTLB_DATA_ARRAY 0xF7000000
34 42
diff --git a/include/asm-sh/dma.h b/include/asm-sh/dma.h
index 4c75b70b6414..a65b02fd186e 100644
--- a/include/asm-sh/dma.h
+++ b/include/asm-sh/dma.h
@@ -152,14 +152,9 @@ extern struct dma_info *get_dma_info_by_name(const char *dmac_name);
152extern int dma_extend(unsigned int chan, unsigned long op, void *param); 152extern int dma_extend(unsigned int chan, unsigned long op, void *param);
153extern int register_chan_caps(const char *dmac, struct dma_chan_caps *capslist); 153extern int register_chan_caps(const char *dmac, struct dma_chan_caps *capslist);
154 154
155#ifdef CONFIG_SYSFS
156/* arch/sh/drivers/dma/dma-sysfs.c */ 155/* arch/sh/drivers/dma/dma-sysfs.c */
157extern int dma_create_sysfs_files(struct dma_channel *, struct dma_info *); 156extern int dma_create_sysfs_files(struct dma_channel *, struct dma_info *);
158extern void dma_remove_sysfs_files(struct dma_channel *, struct dma_info *); 157extern void dma_remove_sysfs_files(struct dma_channel *, struct dma_info *);
159#else
160#define dma_create_sysfs_file(channel, info) do { } while (0)
161#define dma_remove_sysfs_file(channel, info) do { } while (0)
162#endif
163 158
164#ifdef CONFIG_PCI 159#ifdef CONFIG_PCI
165extern int isa_dma_bridge_buggy; 160extern int isa_dma_bridge_buggy;
diff --git a/include/asm-sh/dreamcast/maple.h b/include/asm-sh/dreamcast/maple.h
new file mode 100644
index 000000000000..51f6a87f1f11
--- /dev/null
+++ b/include/asm-sh/dreamcast/maple.h
@@ -0,0 +1,37 @@
1#ifndef __ASM_MAPLE_H
2#define __ASM_MAPLE_H
3
4#define MAPLE_PORTS 4
5#define MAPLE_PNP_INTERVAL HZ
6#define MAPLE_MAXPACKETS 8
7#define MAPLE_DMA_ORDER 14
8#define MAPLE_DMA_SIZE (1 << MAPLE_DMA_ORDER)
9#define MAPLE_DMA_PAGES ((MAPLE_DMA_ORDER > PAGE_SHIFT) ? \
10 MAPLE_DMA_ORDER - PAGE_SHIFT : 0)
11
12/* Maple Bus registers */
13#define MAPLE_BASE 0xa05f6c00
14#define MAPLE_DMAADDR (MAPLE_BASE+0x04)
15#define MAPLE_TRIGTYPE (MAPLE_BASE+0x10)
16#define MAPLE_ENABLE (MAPLE_BASE+0x14)
17#define MAPLE_STATE (MAPLE_BASE+0x18)
18#define MAPLE_SPEED (MAPLE_BASE+0x80)
19#define MAPLE_RESET (MAPLE_BASE+0x8c)
20
21#define MAPLE_MAGIC 0x6155404f
22#define MAPLE_2MBPS 0
23#define MAPLE_TIMEOUT(n) ((n)<<15)
24
25/* Function codes */
26#define MAPLE_FUNC_CONTROLLER 0x001
27#define MAPLE_FUNC_MEMCARD 0x002
28#define MAPLE_FUNC_LCD 0x004
29#define MAPLE_FUNC_CLOCK 0x008
30#define MAPLE_FUNC_MICROPHONE 0x010
31#define MAPLE_FUNC_ARGUN 0x020
32#define MAPLE_FUNC_KEYBOARD 0x040
33#define MAPLE_FUNC_LIGHTGUN 0x080
34#define MAPLE_FUNC_PURUPURU 0x100
35#define MAPLE_FUNC_MOUSE 0x200
36
37#endif /* __ASM_MAPLE_H */
diff --git a/include/asm-sh/gpio.h b/include/asm-sh/gpio.h
new file mode 100644
index 000000000000..9bb27e0f11a4
--- /dev/null
+++ b/include/asm-sh/gpio.h
@@ -0,0 +1,19 @@
1/*
2 * include/asm-sh/gpio.h
3 *
4 * Copyright (C) 2007 Markus Brunner, Mark Jonas
5 *
6 * Addresses for the Pin Function Controller
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file "COPYING" in the main directory of this archive
10 * for more details.
11 */
12#ifndef __ASM_SH_GPIO_H
13#define __ASM_SH_GPIO_H
14
15#if defined(CONFIG_CPU_SH3)
16#include <asm/cpu/gpio.h>
17#endif
18
19#endif /* __ASM_SH_GPIO_H */
diff --git a/include/asm-sh/hd64461.h b/include/asm-sh/hd64461.h
index 4dd8592ca014..342ca55a266a 100644
--- a/include/asm-sh/hd64461.h
+++ b/include/asm-sh/hd64461.h
@@ -226,6 +226,7 @@
226#define HD64461_NIMR (CONFIG_HD64461_IOBASE + 0x5002) 226#define HD64461_NIMR (CONFIG_HD64461_IOBASE + 0x5002)
227 227
228#define HD64461_IRQBASE OFFCHIP_IRQ_BASE 228#define HD64461_IRQBASE OFFCHIP_IRQ_BASE
229#define OFFCHIP_IRQ_BASE 64
229#define HD64461_IRQ_NUM 16 230#define HD64461_IRQ_NUM 16
230 231
231#define HD64461_IRQ_UART (HD64461_IRQBASE+5) 232#define HD64461_IRQ_UART (HD64461_IRQBASE+5)
diff --git a/include/asm-sh/heartbeat.h b/include/asm-sh/heartbeat.h
new file mode 100644
index 000000000000..724a43ed245e
--- /dev/null
+++ b/include/asm-sh/heartbeat.h
@@ -0,0 +1,17 @@
1#ifndef __ASM_SH_HEARTBEAT_H
2#define __ASM_SH_HEARTBEAT_H
3
4#include <linux/timer.h>
5
6#define HEARTBEAT_INVERTED (1 << 0)
7
8struct heartbeat_data {
9 void __iomem *base;
10 unsigned char *bit_pos;
11 unsigned int nr_bits;
12 struct timer_list timer;
13 unsigned int regsize;
14 unsigned long flags;
15};
16
17#endif /* __ASM_SH_HEARTBEAT_H */
diff --git a/include/asm-sh/hw_irq.h b/include/asm-sh/hw_irq.h
index 20d42959f52a..cb0b6c9f7020 100644
--- a/include/asm-sh/hw_irq.h
+++ b/include/asm-sh/hw_irq.h
@@ -6,24 +6,6 @@
6 6
7extern atomic_t irq_err_count; 7extern atomic_t irq_err_count;
8 8
9struct intc2_data {
10 unsigned short irq;
11 unsigned char ipr_offset, ipr_shift;
12 unsigned char msk_offset, msk_shift;
13 unsigned char priority;
14};
15
16struct intc2_desc {
17 unsigned long prio_base;
18 unsigned long msk_base;
19 unsigned long mskclr_base;
20 struct intc2_data *intc2_data;
21 unsigned int nr_irqs;
22 struct irq_chip chip;
23};
24
25void register_intc2_controller(struct intc2_desc *);
26
27struct ipr_data { 9struct ipr_data {
28 unsigned char irq; 10 unsigned char irq;
29 unsigned char ipr_idx; /* Index for the IPR registered */ 11 unsigned char ipr_idx; /* Index for the IPR registered */
@@ -41,11 +23,6 @@ struct ipr_desc {
41 23
42void register_ipr_controller(struct ipr_desc *); 24void register_ipr_controller(struct ipr_desc *);
43 25
44/*
45 * Enable individual interrupt mode for external IPR IRQs.
46 */
47void __init ipr_irq_enable_irlm(void);
48
49typedef unsigned char intc_enum; 26typedef unsigned char intc_enum;
50 27
51struct intc_vect { 28struct intc_vect {
@@ -54,6 +31,7 @@ struct intc_vect {
54}; 31};
55 32
56#define INTC_VECT(enum_id, vect) { enum_id, vect } 33#define INTC_VECT(enum_id, vect) { enum_id, vect }
34#define INTC_IRQ(enum_id, irq) INTC_VECT(enum_id, irq2evt(irq))
57 35
58struct intc_prio { 36struct intc_prio {
59 intc_enum enum_id; 37 intc_enum enum_id;
@@ -64,19 +42,25 @@ struct intc_prio {
64 42
65struct intc_group { 43struct intc_group {
66 intc_enum enum_id; 44 intc_enum enum_id;
67 intc_enum *enum_ids; 45 intc_enum enum_ids[32];
68}; 46};
69 47
70#define INTC_GROUP(enum_id, ids...) { enum_id, (intc_enum []) { ids, 0 } } 48#define INTC_GROUP(enum_id, ids...) { enum_id, { ids } }
71 49
72struct intc_mask_reg { 50struct intc_mask_reg {
73 unsigned long set_reg, clr_reg, reg_width; 51 unsigned long set_reg, clr_reg, reg_width;
74 intc_enum enum_ids[32]; 52 intc_enum enum_ids[32];
53#ifdef CONFIG_SMP
54 unsigned long smp;
55#endif
75}; 56};
76 57
77struct intc_prio_reg { 58struct intc_prio_reg {
78 unsigned long reg, reg_width, field_width; 59 unsigned long set_reg, clr_reg, reg_width, field_width;
79 intc_enum enum_ids[16]; 60 intc_enum enum_ids[16];
61#ifdef CONFIG_SMP
62 unsigned long smp;
63#endif
80}; 64};
81 65
82struct intc_sense_reg { 66struct intc_sense_reg {
@@ -84,6 +68,12 @@ struct intc_sense_reg {
84 intc_enum enum_ids[16]; 68 intc_enum enum_ids[16];
85}; 69};
86 70
71#ifdef CONFIG_SMP
72#define INTC_SMP(stride, nr) .smp = (stride) | ((nr) << 8)
73#else
74#define INTC_SMP(stride, nr)
75#endif
76
87struct intc_desc { 77struct intc_desc {
88 struct intc_vect *vectors; 78 struct intc_vect *vectors;
89 unsigned int nr_vectors; 79 unsigned int nr_vectors;
@@ -97,25 +87,28 @@ struct intc_desc {
97 unsigned int nr_prio_regs; 87 unsigned int nr_prio_regs;
98 struct intc_sense_reg *sense_regs; 88 struct intc_sense_reg *sense_regs;
99 unsigned int nr_sense_regs; 89 unsigned int nr_sense_regs;
100 struct irq_chip chip; 90 char *name;
101}; 91};
102 92
103#define _INTC_ARRAY(a) a, sizeof(a)/sizeof(*a) 93#define _INTC_ARRAY(a) a, sizeof(a)/sizeof(*a)
104#define DECLARE_INTC_DESC(symbol, chipname, vectors, groups, \ 94#define DECLARE_INTC_DESC(symbol, chipname, vectors, groups, \
105 priorities, mask_regs, prio_regs, sense_regs) \ 95 priorities, mask_regs, prio_regs, sense_regs) \
106struct intc_desc symbol = { \ 96struct intc_desc symbol __initdata = { \
107 _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \ 97 _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \
108 _INTC_ARRAY(priorities), \ 98 _INTC_ARRAY(priorities), \
109 _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \ 99 _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \
110 _INTC_ARRAY(sense_regs), \ 100 _INTC_ARRAY(sense_regs), \
111 .chip.name = chipname, \ 101 chipname, \
112} 102}
113 103
114void __init register_intc_controller(struct intc_desc *desc); 104void __init register_intc_controller(struct intc_desc *desc);
105int intc_set_priority(unsigned int irq, unsigned int prio);
115 106
116void __init plat_irq_setup(void); 107void __init plat_irq_setup(void);
117 108
118enum { IRQ_MODE_IRQ, IRQ_MODE_IRL7654, IRQ_MODE_IRL3210 }; 109enum { IRQ_MODE_IRQ, IRQ_MODE_IRQ7654, IRQ_MODE_IRQ3210,
110 IRQ_MODE_IRL7654_MASK, IRQ_MODE_IRL3210_MASK,
111 IRQ_MODE_IRL7654, IRQ_MODE_IRL3210 };
119void __init plat_irq_setup_pins(int mode); 112void __init plat_irq_setup_pins(int mode);
120 113
121#endif /* __ASM_SH_HW_IRQ_H */ 114#endif /* __ASM_SH_HW_IRQ_H */
diff --git a/include/asm-sh/ilsel.h b/include/asm-sh/ilsel.h
new file mode 100644
index 000000000000..e3d304b280f6
--- /dev/null
+++ b/include/asm-sh/ilsel.h
@@ -0,0 +1,45 @@
1#ifndef __ASM_SH_ILSEL_H
2#define __ASM_SH_ILSEL_H
3
4typedef enum {
5 ILSEL_NONE,
6 ILSEL_LAN,
7 ILSEL_USBH_I,
8 ILSEL_USBH_S,
9 ILSEL_USBH_V,
10 ILSEL_RTC,
11 ILSEL_USBP_I,
12 ILSEL_USBP_S,
13 ILSEL_USBP_V,
14 ILSEL_KEY,
15
16 /*
17 * ILSEL Aliases - corner cases for interleaved level tables.
18 *
19 * Someone thought this was a good idea and less hassle than
20 * demuxing a shared vector, really.
21 */
22
23 /* ILSEL0 and 2 */
24 ILSEL_FPGA0,
25 ILSEL_FPGA1,
26 ILSEL_EX1,
27 ILSEL_EX2,
28 ILSEL_EX3,
29 ILSEL_EX4,
30
31 /* ILSEL1 and 3 */
32 ILSEL_FPGA2 = ILSEL_FPGA0,
33 ILSEL_FPGA3 = ILSEL_FPGA1,
34 ILSEL_EX5 = ILSEL_EX1,
35 ILSEL_EX6 = ILSEL_EX2,
36 ILSEL_EX7 = ILSEL_EX3,
37 ILSEL_EX8 = ILSEL_EX4,
38} ilsel_source_t;
39
40/* arch/sh/boards/renesas/x3proto/ilsel.c */
41int ilsel_enable(ilsel_source_t set);
42int ilsel_enable_fixed(ilsel_source_t set, unsigned int level);
43void ilsel_disable(unsigned int irq);
44
45#endif /* __ASM_SH_ILSEL_H */
diff --git a/include/asm-sh/io.h b/include/asm-sh/io.h
index e6a1877dcb20..1a336cdc75fe 100644
--- a/include/asm-sh/io.h
+++ b/include/asm-sh/io.h
@@ -135,6 +135,32 @@ void __raw_readsl(unsigned long addr, void *data, int longlen);
135# define writel(v,a) ({ __raw_writel((v),(a)); mb(); }) 135# define writel(v,a) ({ __raw_writel((v),(a)); mb(); })
136#endif 136#endif
137 137
138#define __BUILD_MEMORY_STRING(bwlq, type) \
139 \
140static inline void writes##bwlq(volatile void __iomem *mem, \
141 const void *addr, unsigned int count) \
142{ \
143 const volatile type *__addr = addr; \
144 \
145 while (count--) { \
146 __raw_write##bwlq(*__addr, mem); \
147 __addr++; \
148 } \
149} \
150 \
151static inline void reads##bwlq(volatile void __iomem *mem, void *addr, \
152 unsigned int count) \
153{ \
154 volatile type *__addr = addr; \
155 \
156 while (count--) { \
157 *__addr = __raw_read##bwlq(mem); \
158 __addr++; \
159 } \
160}
161
162__BUILD_MEMORY_STRING(b, u8)
163__BUILD_MEMORY_STRING(w, u16)
138#define writesl __raw_writesl 164#define writesl __raw_writesl
139#define readsl __raw_readsl 165#define readsl __raw_readsl
140 166
diff --git a/include/asm-sh/kgdb.h b/include/asm-sh/kgdb.h
index 74bd0953e5ce..4bc8cb187d11 100644
--- a/include/asm-sh/kgdb.h
+++ b/include/asm-sh/kgdb.h
@@ -17,9 +17,6 @@
17#define __KGDB_H 17#define __KGDB_H
18 18
19#include <asm/ptrace.h> 19#include <asm/ptrace.h>
20#include <asm/cacheflush.h>
21
22struct console;
23 20
24/* Same as pt_regs but has vbr in place of syscall_nr */ 21/* Same as pt_regs but has vbr in place of syscall_nr */
25struct kgdb_regs { 22struct kgdb_regs {
@@ -35,10 +32,7 @@ struct kgdb_regs {
35 32
36/* State info */ 33/* State info */
37extern char kgdb_in_gdb_mode; 34extern char kgdb_in_gdb_mode;
38extern int kgdb_done_init;
39extern int kgdb_enabled;
40extern int kgdb_nofault; /* Ignore bus errors (in gdb mem access) */ 35extern int kgdb_nofault; /* Ignore bus errors (in gdb mem access) */
41extern int kgdb_halt; /* Execute initial breakpoint at startup */
42extern char in_nmi; /* Debounce flag to prevent NMI reentry*/ 36extern char in_nmi; /* Debounce flag to prevent NMI reentry*/
43 37
44/* SCI */ 38/* SCI */
@@ -59,6 +53,7 @@ extern kgdb_debug_hook_t *kgdb_debug_hook;
59extern kgdb_bus_error_hook_t *kgdb_bus_err_hook; 53extern kgdb_bus_error_hook_t *kgdb_bus_err_hook;
60 54
61/* Console */ 55/* Console */
56struct console;
62void kgdb_console_write(struct console *co, const char *s, unsigned count); 57void kgdb_console_write(struct console *co, const char *s, unsigned count);
63extern int kgdb_console_setup(struct console *, char *); 58extern int kgdb_console_setup(struct console *, char *);
64 59
@@ -69,22 +64,7 @@ extern void longjmp(jmp_buf __jmpb, int __retval);
69extern int setjmp(jmp_buf __jmpb); 64extern int setjmp(jmp_buf __jmpb);
70 65
71/* Forced breakpoint */ 66/* Forced breakpoint */
72#define breakpoint() \ 67#define breakpoint() __asm__ __volatile__("trapa #0x3c")
73do { \
74 if (kgdb_enabled) \
75 __asm__ __volatile__("trapa #0x3c"); \
76} while (0)
77
78/* KGDB should be able to flush all kernel text space */
79#if defined(CONFIG_CPU_SH4)
80#define kgdb_flush_icache_range(start, end) \
81{ \
82 __flush_purge_region((void*)(start), (int)(end) - (int)(start));\
83 flush_icache_range((start), (end)); \
84}
85#else
86#define kgdb_flush_icache_range(start, end) do { } while (0)
87#endif
88 68
89/* Taken from sh-stub.c of GDB 4.18 */ 69/* Taken from sh-stub.c of GDB 4.18 */
90static const char hexchars[] = "0123456789abcdef"; 70static const char hexchars[] = "0123456789abcdef";
diff --git a/include/asm-sh/magicpanelr2.h b/include/asm-sh/magicpanelr2.h
new file mode 100644
index 000000000000..c644a77ee357
--- /dev/null
+++ b/include/asm-sh/magicpanelr2.h
@@ -0,0 +1,67 @@
1/*
2 * include/asm-sh/magicpanelr2.h
3 *
4 * Copyright (C) 2007 Markus Brunner, Mark Jonas
5 *
6 * I/O addresses and bitmasks for Magic Panel Release 2 board
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file "COPYING" in the main directory of this archive
10 * for more details.
11 */
12
13#ifndef __ASM_SH_MAGICPANELR2_H
14#define __ASM_SH_MAGICPANELR2_H
15
16#include <asm/gpio.h>
17
18#define __IO_PREFIX mpr2
19#include <asm/io_generic.h>
20
21
22#define SETBITS_OUTB(mask, reg) ctrl_outb(ctrl_inb(reg) | mask, reg)
23#define SETBITS_OUTW(mask, reg) ctrl_outw(ctrl_inw(reg) | mask, reg)
24#define SETBITS_OUTL(mask, reg) ctrl_outl(ctrl_inl(reg) | mask, reg)
25#define CLRBITS_OUTB(mask, reg) ctrl_outb(ctrl_inb(reg) & ~mask, reg)
26#define CLRBITS_OUTW(mask, reg) ctrl_outw(ctrl_inw(reg) & ~mask, reg)
27#define CLRBITS_OUTL(mask, reg) ctrl_outl(ctrl_inl(reg) & ~mask, reg)
28
29
30#define PA_LED PORT_PADR /* LED */
31
32
33/* BSC */
34#define CMNCR 0xA4FD0000UL
35#define CS0BCR 0xA4FD0004UL
36#define CS2BCR 0xA4FD0008UL
37#define CS3BCR 0xA4FD000CUL
38#define CS4BCR 0xA4FD0010UL
39#define CS5ABCR 0xA4FD0014UL
40#define CS5BBCR 0xA4FD0018UL
41#define CS6ABCR 0xA4FD001CUL
42#define CS6BBCR 0xA4FD0020UL
43#define CS0WCR 0xA4FD0024UL
44#define CS2WCR 0xA4FD0028UL
45#define CS3WCR 0xA4FD002CUL
46#define CS4WCR 0xA4FD0030UL
47#define CS5AWCR 0xA4FD0034UL
48#define CS5BWCR 0xA4FD0038UL
49#define CS6AWCR 0xA4FD003CUL
50#define CS6BWCR 0xA4FD0040UL
51
52
53/* usb */
54
55#define PORT_UTRCTL 0xA405012CUL
56#define PORT_UCLKCR_W 0xA40A0008UL
57
58#define INTC_ICR0 0xA414FEE0UL
59#define INTC_ICR1 0xA4140010UL
60#define INTC_ICR2 0xA4140012UL
61
62/* MTD */
63
64#define MPR2_MTD_BOOTLOADER_SIZE 0x00060000UL
65#define MPR2_MTD_KERNEL_SIZE 0x00200000UL
66
67#endif /* __ASM_SH_MAGICPANELR2_H */
diff --git a/include/asm-sh/page.h b/include/asm-sh/page.h
index 6bc9bba10105..cb3d46c59eab 100644
--- a/include/asm-sh/page.h
+++ b/include/asm-sh/page.h
@@ -70,14 +70,14 @@ extern void clear_page_nommu(void *to);
70extern void copy_page_nommu(void *to, void *from); 70extern void copy_page_nommu(void *to, void *from);
71#endif 71#endif
72 72
73#if defined(CONFIG_MMU) && (defined(CONFIG_CPU_SH4) || \ 73#if !defined(CONFIG_CACHE_OFF) && defined(CONFIG_MMU) && \
74 defined(CONFIG_SH7705_CACHE_32KB)) 74 (defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB))
75struct page; 75struct page;
76extern void clear_user_page(void *to, unsigned long address, struct page *pg); 76extern void clear_user_page(void *to, unsigned long address, struct page *pg);
77extern void copy_user_page(void *to, void *from, unsigned long address, struct page *pg); 77extern void copy_user_page(void *to, void *from, unsigned long address, struct page *pg);
78extern void __clear_user_page(void *to, void *orig_to); 78extern void __clear_user_page(void *to, void *orig_to);
79extern void __copy_user_page(void *to, void *from, void *orig_to); 79extern void __copy_user_page(void *to, void *from, void *orig_to);
80#elif defined(CONFIG_CPU_SH2) || defined(CONFIG_CPU_SH3) || !defined(CONFIG_MMU) 80#else
81#define clear_user_page(page, vaddr, pg) clear_page(page) 81#define clear_user_page(page, vaddr, pg) clear_page(page)
82#define copy_user_page(to, from, vaddr, pg) copy_page(to, from) 82#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
83#endif 83#endif
@@ -88,6 +88,7 @@ extern void __copy_user_page(void *to, void *from, void *orig_to);
88#ifdef CONFIG_X2TLB 88#ifdef CONFIG_X2TLB
89typedef struct { unsigned long pte_low, pte_high; } pte_t; 89typedef struct { unsigned long pte_low, pte_high; } pte_t;
90typedef struct { unsigned long long pgprot; } pgprot_t; 90typedef struct { unsigned long long pgprot; } pgprot_t;
91typedef struct { unsigned long long pgd; } pgd_t;
91#define pte_val(x) \ 92#define pte_val(x) \
92 ((x).pte_low | ((unsigned long long)(x).pte_high << 32)) 93 ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
93#define __pte(x) \ 94#define __pte(x) \
@@ -95,12 +96,11 @@ typedef struct { unsigned long long pgprot; } pgprot_t;
95#else 96#else
96typedef struct { unsigned long pte_low; } pte_t; 97typedef struct { unsigned long pte_low; } pte_t;
97typedef struct { unsigned long pgprot; } pgprot_t; 98typedef struct { unsigned long pgprot; } pgprot_t;
99typedef struct { unsigned long pgd; } pgd_t;
98#define pte_val(x) ((x).pte_low) 100#define pte_val(x) ((x).pte_low)
99#define __pte(x) ((pte_t) { (x) } ) 101#define __pte(x) ((pte_t) { (x) } )
100#endif 102#endif
101 103
102typedef struct { unsigned long pgd; } pgd_t;
103
104#define pgd_val(x) ((x).pgd) 104#define pgd_val(x) ((x).pgd)
105#define pgprot_val(x) ((x).pgprot) 105#define pgprot_val(x) ((x).pgprot)
106 106
diff --git a/include/asm-sh/pgtable.h b/include/asm-sh/pgtable.h
index e3fae12c0e49..cf0dd2b648c2 100644
--- a/include/asm-sh/pgtable.h
+++ b/include/asm-sh/pgtable.h
@@ -42,13 +42,12 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
42 42
43/* PGD bits */ 43/* PGD bits */
44#define PGDIR_SHIFT (PTE_SHIFT + PTE_BITS) 44#define PGDIR_SHIFT (PTE_SHIFT + PTE_BITS)
45#define PGDIR_BITS (32 - PGDIR_SHIFT)
46#define PGDIR_SIZE (1UL << PGDIR_SHIFT) 45#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
47#define PGDIR_MASK (~(PGDIR_SIZE-1)) 46#define PGDIR_MASK (~(PGDIR_SIZE-1))
48 47
49/* Entries per level */ 48/* Entries per level */
50#define PTRS_PER_PTE (PAGE_SIZE / (1 << PTE_MAGNITUDE)) 49#define PTRS_PER_PTE (PAGE_SIZE / (1 << PTE_MAGNITUDE))
51#define PTRS_PER_PGD (PAGE_SIZE / 4) 50#define PTRS_PER_PGD (PAGE_SIZE / sizeof(pgd_t))
52 51
53#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE) 52#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE)
54#define FIRST_USER_ADDRESS 0 53#define FIRST_USER_ADDRESS 0
@@ -100,17 +99,18 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
100#define _PAGE_HW_SHARED 0x002 /* SH-bit : shared among processes */ 99#define _PAGE_HW_SHARED 0x002 /* SH-bit : shared among processes */
101#define _PAGE_DIRTY 0x004 /* D-bit : page changed */ 100#define _PAGE_DIRTY 0x004 /* D-bit : page changed */
102#define _PAGE_CACHABLE 0x008 /* C-bit : cachable */ 101#define _PAGE_CACHABLE 0x008 /* C-bit : cachable */
103#ifndef CONFIG_X2TLB 102#define _PAGE_SZ0 0x010 /* SZ0-bit : Size of page */
104# define _PAGE_SZ0 0x010 /* SZ0-bit : Size of page */ 103#define _PAGE_RW 0x020 /* PR0-bit : write access allowed */
105# define _PAGE_RW 0x020 /* PR0-bit : write access allowed */ 104#define _PAGE_USER 0x040 /* PR1-bit : user space access allowed*/
106# define _PAGE_USER 0x040 /* PR1-bit : user space access allowed*/ 105#define _PAGE_SZ1 0x080 /* SZ1-bit : Size of page (on SH-4) */
107# define _PAGE_SZ1 0x080 /* SZ1-bit : Size of page (on SH-4) */
108#endif
109#define _PAGE_PRESENT 0x100 /* V-bit : page is valid */ 106#define _PAGE_PRESENT 0x100 /* V-bit : page is valid */
110#define _PAGE_PROTNONE 0x200 /* software: if not present */ 107#define _PAGE_PROTNONE 0x200 /* software: if not present */
111#define _PAGE_ACCESSED 0x400 /* software: page referenced */ 108#define _PAGE_ACCESSED 0x400 /* software: page referenced */
112#define _PAGE_FILE _PAGE_WT /* software: pagecache or swap? */ 109#define _PAGE_FILE _PAGE_WT /* software: pagecache or swap? */
113 110
111#define _PAGE_SZ_MASK (_PAGE_SZ0 | _PAGE_SZ1)
112#define _PAGE_PR_MASK (_PAGE_RW | _PAGE_USER)
113
114/* Extended mode bits */ 114/* Extended mode bits */
115#define _PAGE_EXT_ESZ0 0x0010 /* ESZ0-bit: Size of page */ 115#define _PAGE_EXT_ESZ0 0x0010 /* ESZ0-bit: Size of page */
116#define _PAGE_EXT_ESZ1 0x0020 /* ESZ1-bit: Size of page */ 116#define _PAGE_EXT_ESZ1 0x0020 /* ESZ1-bit: Size of page */
@@ -126,11 +126,7 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
126#define _PAGE_EXT_KERN_READ 0x2000 /* EPR5-bit: Kernel space readable */ 126#define _PAGE_EXT_KERN_READ 0x2000 /* EPR5-bit: Kernel space readable */
127 127
128/* Wrapper for extended mode pgprot twiddling */ 128/* Wrapper for extended mode pgprot twiddling */
129#ifdef CONFIG_X2TLB 129#define _PAGE_EXT(x) ((unsigned long long)(x) << 32)
130# define _PAGE_EXT(x) ((unsigned long long)(x) << 32)
131#else
132# define _PAGE_EXT(x) (0)
133#endif
134 130
135/* software: moves to PTEA.TC (Timing Control) */ 131/* software: moves to PTEA.TC (Timing Control) */
136#define _PAGE_PCC_AREA5 0x00000000 /* use BSC registers for area5 */ 132#define _PAGE_PCC_AREA5 0x00000000 /* use BSC registers for area5 */
@@ -146,10 +142,14 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
146#define _PAGE_PCC_ATR16 0x60000001 /* Attribute Memory space, 6 bit bus */ 142#define _PAGE_PCC_ATR16 0x60000001 /* Attribute Memory space, 6 bit bus */
147 143
148/* Mask which drops unused bits from the PTEL value */ 144/* Mask which drops unused bits from the PTEL value */
149#ifdef CONFIG_CPU_SH3 145#if defined(CONFIG_CPU_SH3)
150#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED| \ 146#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED| \
151 _PAGE_FILE | _PAGE_SZ1 | \ 147 _PAGE_FILE | _PAGE_SZ1 | \
152 _PAGE_HW_SHARED) 148 _PAGE_HW_SHARED)
149#elif defined(CONFIG_X2TLB)
150/* Get rid of the legacy PR/SZ bits when using extended mode */
151#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | \
152 _PAGE_FILE | _PAGE_PR_MASK | _PAGE_SZ_MASK)
153#else 153#else
154#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_FILE) 154#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_FILE)
155#endif 155#endif
@@ -212,27 +212,36 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
212 212
213#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ 213#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \
214 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ 214 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \
215 _PAGE_EXT(_PAGE_EXT_USER_READ | \ 215 _PAGE_EXT(_PAGE_EXT_KERN_READ | \
216 _PAGE_EXT_KERN_WRITE | \
217 _PAGE_EXT_USER_READ | \
216 _PAGE_EXT_USER_WRITE)) 218 _PAGE_EXT_USER_WRITE))
217 219
218#define PAGE_EXECREAD __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ 220#define PAGE_EXECREAD __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \
219 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ 221 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \
220 _PAGE_EXT(_PAGE_EXT_USER_EXEC | \ 222 _PAGE_EXT(_PAGE_EXT_KERN_EXEC | \
223 _PAGE_EXT_KERN_READ | \
224 _PAGE_EXT_USER_EXEC | \
221 _PAGE_EXT_USER_READ)) 225 _PAGE_EXT_USER_READ))
222 226
223#define PAGE_COPY PAGE_EXECREAD 227#define PAGE_COPY PAGE_EXECREAD
224 228
225#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ 229#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \
226 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ 230 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \
227 _PAGE_EXT(_PAGE_EXT_USER_READ)) 231 _PAGE_EXT(_PAGE_EXT_KERN_READ | \
232 _PAGE_EXT_USER_READ))
228 233
229#define PAGE_WRITEONLY __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ 234#define PAGE_WRITEONLY __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \
230 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ 235 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \
231 _PAGE_EXT(_PAGE_EXT_USER_WRITE)) 236 _PAGE_EXT(_PAGE_EXT_KERN_WRITE | \
237 _PAGE_EXT_USER_WRITE))
232 238
233#define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ 239#define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \
234 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ 240 _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \
235 _PAGE_EXT(_PAGE_EXT_USER_WRITE | \ 241 _PAGE_EXT(_PAGE_EXT_KERN_WRITE | \
242 _PAGE_EXT_KERN_READ | \
243 _PAGE_EXT_KERN_EXEC | \
244 _PAGE_EXT_USER_WRITE | \
236 _PAGE_EXT_USER_READ | \ 245 _PAGE_EXT_USER_READ | \
237 _PAGE_EXT_USER_EXEC)) 246 _PAGE_EXT_USER_EXEC))
238 247
@@ -373,11 +382,15 @@ static inline void set_pte(pte_t *ptep, pte_t pte)
373#define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) 382#define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval)
374 383
375#define pte_pfn(x) ((unsigned long)(((x).pte_low >> PAGE_SHIFT))) 384#define pte_pfn(x) ((unsigned long)(((x).pte_low >> PAGE_SHIFT)))
376#define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
377#define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
378 385
379#define pte_none(x) (!pte_val(x)) 386#define pfn_pte(pfn, prot) \
380#define pte_present(x) (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE)) 387 __pte(((unsigned long long)(pfn) << PAGE_SHIFT) | pgprot_val(prot))
388#define pfn_pmd(pfn, prot) \
389 __pmd(((unsigned long long)(pfn) << PAGE_SHIFT) | pgprot_val(prot))
390
391#define pte_none(x) (!pte_val(x))
392#define pte_present(x) ((x).pte_low & (_PAGE_PRESENT | _PAGE_PROTNONE))
393
381#define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0) 394#define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)
382 395
383#define pmd_none(x) (!pmd_val(x)) 396#define pmd_none(x) (!pmd_val(x))
@@ -392,15 +405,15 @@ static inline void set_pte(pte_t *ptep, pte_t pte)
392 * The following only work if pte_present() is true. 405 * The following only work if pte_present() is true.
393 * Undefined behaviour if not.. 406 * Undefined behaviour if not..
394 */ 407 */
395#define pte_not_present(pte) (!(pte_val(pte) & _PAGE_PRESENT)) 408#define pte_not_present(pte) (!((pte).pte_low & _PAGE_PRESENT))
396#define pte_dirty(pte) (pte_val(pte) & _PAGE_DIRTY) 409#define pte_dirty(pte) ((pte).pte_low & _PAGE_DIRTY)
397#define pte_young(pte) (pte_val(pte) & _PAGE_ACCESSED) 410#define pte_young(pte) ((pte).pte_low & _PAGE_ACCESSED)
398#define pte_file(pte) (pte_val(pte) & _PAGE_FILE) 411#define pte_file(pte) ((pte).pte_low & _PAGE_FILE)
399 412
400#ifdef CONFIG_X2TLB 413#ifdef CONFIG_X2TLB
401#define pte_write(pte) ((pte).pte_high & _PAGE_EXT_USER_WRITE) 414#define pte_write(pte) ((pte).pte_high & _PAGE_EXT_USER_WRITE)
402#else 415#else
403#define pte_write(pte) (pte_val(pte) & _PAGE_RW) 416#define pte_write(pte) ((pte).pte_low & _PAGE_RW)
404#endif 417#endif
405 418
406#define PTE_BIT_FUNC(h,fn,op) \ 419#define PTE_BIT_FUNC(h,fn,op) \
@@ -429,17 +442,10 @@ PTE_BIT_FUNC(low, mkyoung, |= _PAGE_ACCESSED);
429/* 442/*
430 * Macro and implementation to make a page protection as uncachable. 443 * Macro and implementation to make a page protection as uncachable.
431 */ 444 */
432#define pgprot_noncached pgprot_noncached 445#define pgprot_writecombine(prot) \
446 __pgprot(pgprot_val(prot) & ~_PAGE_CACHABLE)
433 447
434static inline pgprot_t pgprot_noncached(pgprot_t _prot) 448#define pgprot_noncached pgprot_writecombine
435{
436 unsigned long prot = pgprot_val(_prot);
437
438 prot &= ~_PAGE_CACHABLE;
439 return __pgprot(prot);
440}
441
442#define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~_PAGE_CACHABLE)
443 449
444/* 450/*
445 * Conversion functions: convert a page and protection to a page entry, 451 * Conversion functions: convert a page and protection to a page entry,
@@ -451,28 +457,33 @@ static inline pgprot_t pgprot_noncached(pgprot_t _prot)
451 457
452static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) 458static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
453{ 459{
454 set_pte(&pte, __pte((pte_val(pte) & _PAGE_CHG_MASK) | 460 pte.pte_low &= _PAGE_CHG_MASK;
455 pgprot_val(newprot))); 461 pte.pte_low |= pgprot_val(newprot);
462
463#ifdef CONFIG_X2TLB
464 pte.pte_high |= pgprot_val(newprot) >> 32;
465#endif
466
456 return pte; 467 return pte;
457} 468}
458 469
459#define pmd_page_vaddr(pmd) pmd_val(pmd) 470#define pmd_page_vaddr(pmd) ((unsigned long)pmd_val(pmd))
460#define pmd_page(pmd) (virt_to_page(pmd_val(pmd))) 471#define pmd_page(pmd) (virt_to_page(pmd_val(pmd)))
461 472
462/* to find an entry in a page-table-directory. */ 473/* to find an entry in a page-table-directory. */
463#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) 474#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
464#define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) 475#define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address))
465 476
466/* to find an entry in a kernel page-table-directory */ 477/* to find an entry in a kernel page-table-directory */
467#define pgd_offset_k(address) pgd_offset(&init_mm, address) 478#define pgd_offset_k(address) pgd_offset(&init_mm, address)
468 479
469/* Find an entry in the third-level page table.. */ 480/* Find an entry in the third-level page table.. */
470#define pte_index(address) \ 481#define pte_index(address) ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
471 ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
472#define pte_offset_kernel(dir, address) \ 482#define pte_offset_kernel(dir, address) \
473 ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(address)) 483 ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(address))
474#define pte_offset_map(dir, address) pte_offset_kernel(dir, address) 484#define pte_offset_map(dir, address) pte_offset_kernel(dir, address)
475#define pte_offset_map_nested(dir, address) pte_offset_kernel(dir, address) 485#define pte_offset_map_nested(dir, address) pte_offset_kernel(dir, address)
486
476#define pte_unmap(pte) do { } while (0) 487#define pte_unmap(pte) do { } while (0)
477#define pte_unmap_nested(pte) do { } while (0) 488#define pte_unmap_nested(pte) do { } while (0)
478 489
@@ -480,13 +491,14 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
480#define pte_ERROR(e) \ 491#define pte_ERROR(e) \
481 printk("%s:%d: bad pte %p(%08lx%08lx).\n", __FILE__, __LINE__, \ 492 printk("%s:%d: bad pte %p(%08lx%08lx).\n", __FILE__, __LINE__, \
482 &(e), (e).pte_high, (e).pte_low) 493 &(e), (e).pte_high, (e).pte_low)
494#define pgd_ERROR(e) \
495 printk("%s:%d: bad pgd %016llx.\n", __FILE__, __LINE__, pgd_val(e))
483#else 496#else
484#define pte_ERROR(e) \ 497#define pte_ERROR(e) \
485 printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) 498 printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e))
486#endif
487
488#define pgd_ERROR(e) \ 499#define pgd_ERROR(e) \
489 printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) 500 printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
501#endif
490 502
491struct vm_area_struct; 503struct vm_area_struct;
492extern void update_mmu_cache(struct vm_area_struct * vma, 504extern void update_mmu_cache(struct vm_area_struct * vma,
@@ -563,7 +575,8 @@ struct mm_struct;
563extern unsigned int kobjsize(const void *objp); 575extern unsigned int kobjsize(const void *objp);
564#endif /* !CONFIG_MMU */ 576#endif /* !CONFIG_MMU */
565 577
566#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB) 578#if !defined(CONFIG_CACHE_OFF) && (defined(CONFIG_CPU_SH4) || \
579 defined(CONFIG_SH7705_CACHE_32KB))
567#define __HAVE_ARCH_PTEP_GET_AND_CLEAR 580#define __HAVE_ARCH_PTEP_GET_AND_CLEAR
568extern pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); 581extern pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep);
569#endif 582#endif
diff --git a/include/asm-sh/processor.h b/include/asm-sh/processor.h
index 26d52174f4b4..4f2922a1979c 100644
--- a/include/asm-sh/processor.h
+++ b/include/asm-sh/processor.h
@@ -45,7 +45,7 @@ enum cpu_type {
45 CPU_SH7705, CPU_SH7706, CPU_SH7707, 45 CPU_SH7705, CPU_SH7706, CPU_SH7707,
46 CPU_SH7708, CPU_SH7708S, CPU_SH7708R, 46 CPU_SH7708, CPU_SH7708S, CPU_SH7708R,
47 CPU_SH7709, CPU_SH7709A, CPU_SH7710, CPU_SH7712, 47 CPU_SH7709, CPU_SH7709A, CPU_SH7710, CPU_SH7712,
48 CPU_SH7729, 48 CPU_SH7720, CPU_SH7729,
49 49
50 /* SH-4 types */ 50 /* SH-4 types */
51 CPU_SH7750, CPU_SH7750S, CPU_SH7750R, CPU_SH7751, CPU_SH7751R, 51 CPU_SH7750, CPU_SH7750S, CPU_SH7750R, CPU_SH7751, CPU_SH7751R,
@@ -73,15 +73,10 @@ struct sh_cpuinfo {
73 unsigned long flags; 73 unsigned long flags;
74} __attribute__ ((aligned(SMP_CACHE_BYTES))); 74} __attribute__ ((aligned(SMP_CACHE_BYTES)));
75 75
76extern struct sh_cpuinfo boot_cpu_data;
77
78#ifdef CONFIG_SMP
79extern struct sh_cpuinfo cpu_data[]; 76extern struct sh_cpuinfo cpu_data[];
77#define boot_cpu_data cpu_data[0]
80#define current_cpu_data cpu_data[smp_processor_id()] 78#define current_cpu_data cpu_data[smp_processor_id()]
81#else 79#define raw_current_cpu_data cpu_data[raw_smp_processor_id()]
82#define cpu_data (&boot_cpu_data)
83#define current_cpu_data boot_cpu_data
84#endif
85 80
86/* 81/*
87 * User space process size: 2GB. 82 * User space process size: 2GB.
diff --git a/include/asm-sh/r7780rp.h b/include/asm-sh/r7780rp.h
index 4083b5949928..de37f933aa42 100644
--- a/include/asm-sh/r7780rp.h
+++ b/include/asm-sh/r7780rp.h
@@ -65,24 +65,6 @@
65#define PA_PMR (PA_BCR+0x0900) /* */ 65#define PA_PMR (PA_BCR+0x0900) /* */
66 66
67#define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */ 67#define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */
68
69#define IRQ_PCISLOT1 65 /* PCI Slot #1 IRQ */
70#define IRQ_PCISLOT2 66 /* PCI Slot #2 IRQ */
71#define IRQ_PCISLOT3 67 /* PCI Slot #3 IRQ */
72#define IRQ_PCISLOT4 68 /* PCI Slot #4 IRQ */
73#define IRQ_TP 2 /* Touch Panel IRQ */
74#define IRQ_SCI1 3 /* SCI1 IRQ */
75#define IRQ_SCI0 4 /* SCI0 IRQ */
76#define IRQ_2SERIAL 5 /* Serial IRQ */
77#define IRQ_RTC 6 /* RTC A / B IRQ */
78#define IRQ_EXTENTION6 7 /* EXT6n IRQ */
79#define IRQ_EXTENTION5 8 /* EXT5n IRQ */
80#define IRQ_EXTENTION4 9 /* EXT4n IRQ */
81#define IRQ_EXTENTION2 10 /* EXT2n IRQ */
82#define IRQ_EXTENTION1 11 /* EXT1n IRQ */
83#define IRQ_ONETH 13 /* On board Ethernet IRQ */
84#define IRQ_PSW 14 /* Push Switch IRQ */
85
86#define IVDR_CK_ON 8 /* iVDR Clock ON */ 68#define IVDR_CK_ON 8 /* iVDR Clock ON */
87 69
88#elif defined(CONFIG_SH_R7780RP) 70#elif defined(CONFIG_SH_R7780RP)
@@ -203,11 +185,24 @@
203#define PA_MMSR (PA_BCR+0x0400) 185#define PA_MMSR (PA_BCR+0x0400)
204 186
205#define IVDR_CK_ON 4 /* iVDR Clock ON */ 187#define IVDR_CK_ON 4 /* iVDR Clock ON */
188#endif
206 189
190#define HL_FPGA_IRQ_BASE 200
191#define HL_NR_IRL 15
192
193#define IRQ_AX88796 (HL_FPGA_IRQ_BASE + 0)
194#define IRQ_CF (HL_FPGA_IRQ_BASE + 1)
195#ifndef IRQ_PSW
196#define IRQ_PSW (HL_FPGA_IRQ_BASE + 2)
207#endif 197#endif
198#define IRQ_EXT1 (HL_FPGA_IRQ_BASE + 3)
199#define IRQ_EXT4 (HL_FPGA_IRQ_BASE + 4)
208 200
209void make_r7780rp_irq(unsigned int irq); 201void make_r7780rp_irq(unsigned int irq);
210void highlander_init_irq(void); 202
203unsigned char *highlander_init_irq_r7780mp(void);
204unsigned char *highlander_init_irq_r7780rp(void);
205unsigned char *highlander_init_irq_r7785rp(void);
211 206
212#define __IO_PREFIX r7780rp 207#define __IO_PREFIX r7780rp
213#include <asm/io_generic.h> 208#include <asm/io_generic.h>
diff --git a/include/asm-sh/rtc.h b/include/asm-sh/rtc.h
index 91aacc96151b..858da99d37e0 100644
--- a/include/asm-sh/rtc.h
+++ b/include/asm-sh/rtc.h
@@ -5,4 +5,10 @@ extern void (*board_time_init)(void);
5extern void (*rtc_sh_get_time)(struct timespec *); 5extern void (*rtc_sh_get_time)(struct timespec *);
6extern int (*rtc_sh_set_time)(const time_t); 6extern int (*rtc_sh_set_time)(const time_t);
7 7
8#define RTC_CAP_4_DIGIT_YEAR (1 << 0)
9
10struct sh_rtc_platform_info {
11 unsigned long capabilities;
12};
13
8#endif /* _ASM_RTC_H */ 14#endif /* _ASM_RTC_H */
diff --git a/include/asm-sh/rts7751r2d.h b/include/asm-sh/rts7751r2d.h
index 5d7800aa31b5..83b9c111f171 100644
--- a/include/asm-sh/rts7751r2d.h
+++ b/include/asm-sh/rts7751r2d.h
@@ -9,7 +9,7 @@
9 * Renesas Technology Sales RTS7751R2D support 9 * Renesas Technology Sales RTS7751R2D support
10 */ 10 */
11 11
12/* Box specific addresses. */ 12/* Board specific addresses. */
13 13
14#define PA_BCR 0xa4000000 /* FPGA */ 14#define PA_BCR 0xa4000000 /* FPGA */
15#define PA_IRLMON 0xa4000002 /* Interrupt Status control */ 15#define PA_IRLMON 0xa4000002 /* Interrupt Status control */
@@ -20,19 +20,19 @@
20#define PA_RTCCE 0xa400000c /* RTC(9701) Enable control */ 20#define PA_RTCCE 0xa400000c /* RTC(9701) Enable control */
21#define PA_PCICD 0xa400000e /* PCI Extention detect control */ 21#define PA_PCICD 0xa400000e /* PCI Extention detect control */
22#define PA_VOYAGERRTS 0xa4000020 /* VOYAGER Reset control */ 22#define PA_VOYAGERRTS 0xa4000020 /* VOYAGER Reset control */
23#if defined(CONFIG_RTS7751R2D_REV11) 23
24#define PA_AXRST 0xa4000022 /* AX_LAN Reset control */ 24#define PA_R2D1_AXRST 0xa4000022 /* AX_LAN Reset control */
25#define PA_CFRST 0xa4000024 /* CF Reset control */ 25#define PA_R2D1_CFRST 0xa4000024 /* CF Reset control */
26#define PA_ADMRTS 0xa4000026 /* SD Reset control */ 26#define PA_R2D1_ADMRTS 0xa4000026 /* SD Reset control */
27#define PA_EXTRST 0xa4000028 /* Extention Reset control */ 27#define PA_R2D1_EXTRST 0xa4000028 /* Extention Reset control */
28#define PA_CFCDINTCLR 0xa400002a /* CF Insert Interrupt clear */ 28#define PA_R2D1_CFCDINTCLR 0xa400002a /* CF Insert Interrupt clear */
29#else 29
30#define PA_CFRST 0xa4000022 /* CF Reset control */ 30#define PA_R2DPLUS_CFRST 0xa4000022 /* CF Reset control */
31#define PA_ADMRTS 0xa4000024 /* SD Reset control */ 31#define PA_R2DPLUS_ADMRTS 0xa4000024 /* SD Reset control */
32#define PA_EXTRST 0xa4000026 /* Extention Reset control */ 32#define PA_R2DPLUS_EXTRST 0xa4000026 /* Extention Reset control */
33#define PA_CFCDINTCLR 0xa4000028 /* CF Insert Interrupt clear */ 33#define PA_R2DPLUS_CFCDINTCLR 0xa4000028 /* CF Insert Interrupt clear */
34#define PA_KEYCTLCLR 0xa400002a /* Key Interrupt clear */ 34#define PA_R2DPLUS_KEYCTLCLR 0xa400002a /* Key Interrupt clear */
35#endif 35
36#define PA_POWOFF 0xa4000030 /* Board Power OFF control */ 36#define PA_POWOFF 0xa4000030 /* Board Power OFF control */
37#define PA_VERREG 0xa4000032 /* FPGA Version Register */ 37#define PA_VERREG 0xa4000032 /* FPGA Version Register */
38#define PA_INPORT 0xa4000034 /* KEY Input Port control */ 38#define PA_INPORT 0xa4000034 /* KEY Input Port control */
@@ -46,27 +46,22 @@
46 46
47#define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */ 47#define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */
48 48
49#if defined(CONFIG_RTS7751R2D_REV11) 49#define R2D_FPGA_IRQ_BASE 100
50#define IRQ_PCIETH 0 /* PCI Ethernet IRQ */ 50
51#define IRQ_CFCARD 1 /* CF Card IRQ */ 51#define IRQ_VOYAGER (R2D_FPGA_IRQ_BASE + 0)
52#define IRQ_CFINST 2 /* CF Card Insert IRQ */ 52#define IRQ_EXT (R2D_FPGA_IRQ_BASE + 1)
53#define IRQ_PCMCIA 3 /* PCMCIA IRQ */ 53#define IRQ_TP (R2D_FPGA_IRQ_BASE + 2)
54#define IRQ_VOYAGER 4 /* VOYAGER IRQ */ 54#define IRQ_RTC_T (R2D_FPGA_IRQ_BASE + 3)
55#define IRQ_ONETH 5 /* On board Ethernet IRQ */ 55#define IRQ_RTC_A (R2D_FPGA_IRQ_BASE + 4)
56#else 56#define IRQ_SDCARD (R2D_FPGA_IRQ_BASE + 5)
57#define IRQ_KEYIN 0 /* Key Input IRQ */ 57#define IRQ_CF_CD (R2D_FPGA_IRQ_BASE + 6)
58#define IRQ_PCIETH 1 /* PCI Ethernet IRQ */ 58#define IRQ_CF_IDE (R2D_FPGA_IRQ_BASE + 7)
59#define IRQ_CFCARD 2 /* CF Card IRQ */ 59#define IRQ_AX88796 (R2D_FPGA_IRQ_BASE + 8)
60#define IRQ_CFINST 3 /* CF Card Insert IRQ */ 60#define IRQ_KEY (R2D_FPGA_IRQ_BASE + 9)
61#define IRQ_PCMCIA 4 /* PCMCIA IRQ */ 61#define IRQ_PCI_INTA (R2D_FPGA_IRQ_BASE + 10)
62#define IRQ_VOYAGER 5 /* VOYAGER IRQ */ 62#define IRQ_PCI_INTB (R2D_FPGA_IRQ_BASE + 11)
63#endif 63#define IRQ_PCI_INTC (R2D_FPGA_IRQ_BASE + 12)
64#define IRQ_RTCALM 6 /* RTC Alarm IRQ */ 64#define IRQ_PCI_INTD (R2D_FPGA_IRQ_BASE + 13)
65#define IRQ_RTCTIME 7 /* RTC Timer IRQ */
66#define IRQ_SDCARD 8 /* SD Card IRQ */
67#define IRQ_PCISLOT1 9 /* PCI Slot #1 IRQ */
68#define IRQ_PCISLOT2 10 /* PCI Slot #2 IRQ */
69#define IRQ_EXTENTION 11 /* EXTn IRQ */
70 65
71/* arch/sh/boards/renesas/rts7751r2d/irq.c */ 66/* arch/sh/boards/renesas/rts7751r2d/irq.c */
72void init_rts7751r2d_IRQ(void); 67void init_rts7751r2d_IRQ(void);
diff --git a/include/asm-sh/sections.h b/include/asm-sh/sections.h
index 2a696b8ee4f5..bd9cbc967c2a 100644
--- a/include/asm-sh/sections.h
+++ b/include/asm-sh/sections.h
@@ -4,6 +4,7 @@
4#include <asm-generic/sections.h> 4#include <asm-generic/sections.h>
5 5
6extern long __machvec_start, __machvec_end; 6extern long __machvec_start, __machvec_end;
7extern char _ebss[];
7 8
8#endif /* __ASM_SH_SECTIONS_H */ 9#endif /* __ASM_SH_SECTIONS_H */
9 10
diff --git a/include/asm-sh/sh03/io.h b/include/asm-sh/sh03/io.h
index 4ff1eb900301..c39c785bba94 100644
--- a/include/asm-sh/sh03/io.h
+++ b/include/asm-sh/sh03/io.h
@@ -11,22 +11,13 @@
11 11
12#include <linux/time.h> 12#include <linux/time.h>
13 13
14#define INTC_IPRD 0xffd00010UL
15
16#define IRL0_IRQ 2 14#define IRL0_IRQ 2
17#define IRL0_IPR_POS 3
18#define IRL0_PRIORITY 13 15#define IRL0_PRIORITY 13
19
20#define IRL1_IRQ 5 16#define IRL1_IRQ 5
21#define IRL1_IPR_POS 2
22#define IRL1_PRIORITY 10 17#define IRL1_PRIORITY 10
23
24#define IRL2_IRQ 8 18#define IRL2_IRQ 8
25#define IRL2_IPR_POS 1
26#define IRL2_PRIORITY 7 19#define IRL2_PRIORITY 7
27
28#define IRL3_IRQ 11 20#define IRL3_IRQ 11
29#define IRL3_IPR_POS 0
30#define IRL3_PRIORITY 4 21#define IRL3_PRIORITY 4
31 22
32void heartbeat_sh03(void); 23void heartbeat_sh03(void);
diff --git a/include/asm-sh/smp.h b/include/asm-sh/smp.h
index b99ca786c0c1..9c8d34b07ebf 100644
--- a/include/asm-sh/smp.h
+++ b/include/asm-sh/smp.h
@@ -1,12 +1,3 @@
1/*
2 * include/asm-sh/smp.h
3 *
4 * Copyright (C) 2002, 2003 Paul Mundt
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive for
8 * more details.
9 */
10#ifndef __ASM_SH_SMP_H 1#ifndef __ASM_SH_SMP_H
11#define __ASM_SH_SMP_H 2#define __ASM_SH_SMP_H
12 3
@@ -20,6 +11,15 @@
20#include <asm/current.h> 11#include <asm/current.h>
21 12
22#define raw_smp_processor_id() (current_thread_info()->cpu) 13#define raw_smp_processor_id() (current_thread_info()->cpu)
14#define hard_smp_processor_id() plat_smp_processor_id()
15
16/* Map from cpu id to sequential logical cpu number. */
17extern int __cpu_number_map[NR_CPUS];
18#define cpu_number_map(cpu) __cpu_number_map[cpu]
19
20/* The reverse map from sequential logical cpu number to cpu id. */
21extern int __cpu_logical_map[NR_CPUS];
22#define cpu_logical_map(cpu) __cpu_logical_map[cpu]
23 23
24/* I've no idea what the real meaning of this is */ 24/* I've no idea what the real meaning of this is */
25#define PROC_CHANGE_PENALTY 20 25#define PROC_CHANGE_PENALTY 20
@@ -35,10 +35,22 @@ struct smp_fn_call_struct {
35 35
36extern struct smp_fn_call_struct smp_fn_call; 36extern struct smp_fn_call_struct smp_fn_call;
37 37
38#define SMP_MSG_RESCHEDULE 0x0001 38#define SMP_MSG_FUNCTION 0
39#define SMP_MSG_RESCHEDULE 1
40#define SMP_MSG_NR 2
39 41
40#endif /* CONFIG_SMP */ 42void plat_smp_setup(void);
43void plat_prepare_cpus(unsigned int max_cpus);
44int plat_smp_processor_id(void);
45void plat_start_cpu(unsigned int cpu, unsigned long entry_point);
46void plat_send_ipi(unsigned int cpu, unsigned int message);
47int plat_register_ipi_handler(unsigned int message,
48 void (*handler)(void *), void *arg);
49
50#else
41 51
42#define hard_smp_processor_id() (0) 52#define hard_smp_processor_id() (0)
43 53
54#endif /* CONFIG_SMP */
55
44#endif /* __ASM_SH_SMP_H */ 56#endif /* __ASM_SH_SMP_H */
diff --git a/include/asm-sh/snapgear.h b/include/asm-sh/snapgear.h
index 3554e3a74e99..042d95f51c4d 100644
--- a/include/asm-sh/snapgear.h
+++ b/include/asm-sh/snapgear.h
@@ -19,20 +19,16 @@
19 * is the interrupt :-) 19 * is the interrupt :-)
20 */ 20 */
21 21
22#define IRL0_IRQ 2 22#define IRL0_IRQ 2
23#define IRL0_IPR_POS 3
24#define IRL0_PRIORITY 13 23#define IRL0_PRIORITY 13
25 24
26#define IRL1_IRQ 5 25#define IRL1_IRQ 5
27#define IRL1_IPR_POS 2
28#define IRL1_PRIORITY 10 26#define IRL1_PRIORITY 10
29 27
30#define IRL2_IRQ 8 28#define IRL2_IRQ 8
31#define IRL2_IPR_POS 1
32#define IRL2_PRIORITY 7 29#define IRL2_PRIORITY 7
33 30
34#define IRL3_IRQ 11 31#define IRL3_IRQ 11
35#define IRL3_IPR_POS 0
36#define IRL3_PRIORITY 4 32#define IRL3_PRIORITY 4
37#endif 33#endif
38 34
diff --git a/include/asm-sh/spinlock.h b/include/asm-sh/spinlock.h
index 92f6e2008b2e..e793181d64da 100644
--- a/include/asm-sh/spinlock.h
+++ b/include/asm-sh/spinlock.h
@@ -2,6 +2,7 @@
2 * include/asm-sh/spinlock.h 2 * include/asm-sh/spinlock.h
3 * 3 *
4 * Copyright (C) 2002, 2003 Paul Mundt 4 * Copyright (C) 2002, 2003 Paul Mundt
5 * Copyright (C) 2006, 2007 Akio Idehara
5 * 6 *
6 * This file is subject to the terms and conditions of the GNU General Public 7 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive 8 * License. See the file "COPYING" in the main directory of this archive
@@ -10,17 +11,22 @@
10#ifndef __ASM_SH_SPINLOCK_H 11#ifndef __ASM_SH_SPINLOCK_H
11#define __ASM_SH_SPINLOCK_H 12#define __ASM_SH_SPINLOCK_H
12 13
13#include <asm/atomic.h> 14/*
14#include <asm/spinlock_types.h> 15 * The only locking implemented here uses SH-4A opcodes. For others,
16 * split this out as per atomic-*.h.
17 */
18#ifndef CONFIG_CPU_SH4A
19#error "Need movli.l/movco.l for spinlocks"
20#endif
15 21
16/* 22/*
17 * Your basic SMP spinlocks, allowing only a single CPU anywhere 23 * Your basic SMP spinlocks, allowing only a single CPU anywhere
18 */ 24 */
19 25
20#define __raw_spin_is_locked(x) ((x)->lock != 0) 26#define __raw_spin_is_locked(x) ((x)->lock <= 0)
21#define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) 27#define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock)
22#define __raw_spin_unlock_wait(x) \ 28#define __raw_spin_unlock_wait(x) \
23 do { cpu_relax(); } while (__raw_spin_is_locked(x)) 29 do { cpu_relax(); } while ((x)->lock)
24 30
25/* 31/*
26 * Simple spin lock operations. There are two variants, one clears IRQ's 32 * Simple spin lock operations. There are two variants, one clears IRQ's
@@ -30,12 +36,19 @@
30 */ 36 */
31static inline void __raw_spin_lock(raw_spinlock_t *lock) 37static inline void __raw_spin_lock(raw_spinlock_t *lock)
32{ 38{
39 unsigned long tmp;
40 unsigned long oldval;
41
33 __asm__ __volatile__ ( 42 __asm__ __volatile__ (
34 "1:\n\t" 43 "1: \n\t"
35 "tas.b @%0\n\t" 44 "movli.l @%2, %0 ! __raw_spin_lock \n\t"
36 "bf/s 1b\n\t" 45 "mov %0, %1 \n\t"
37 "nop\n\t" 46 "mov #0, %0 \n\t"
38 : "=r" (lock->lock) 47 "movco.l %0, @%2 \n\t"
48 "bf 1b \n\t"
49 "cmp/pl %1 \n\t"
50 "bf 1b \n\t"
51 : "=&z" (tmp), "=&r" (oldval)
39 : "r" (&lock->lock) 52 : "r" (&lock->lock)
40 : "t", "memory" 53 : "t", "memory"
41 ); 54 );
@@ -43,12 +56,36 @@ static inline void __raw_spin_lock(raw_spinlock_t *lock)
43 56
44static inline void __raw_spin_unlock(raw_spinlock_t *lock) 57static inline void __raw_spin_unlock(raw_spinlock_t *lock)
45{ 58{
46 //assert_spin_locked(lock); 59 unsigned long tmp;
47 60
48 lock->lock = 0; 61 __asm__ __volatile__ (
62 "mov #1, %0 ! __raw_spin_unlock \n\t"
63 "mov.l %0, @%1 \n\t"
64 : "=&z" (tmp)
65 : "r" (&lock->lock)
66 : "t", "memory"
67 );
49} 68}
50 69
51#define __raw_spin_trylock(x) (!test_and_set_bit(0, &(x)->lock)) 70static inline int __raw_spin_trylock(raw_spinlock_t *lock)
71{
72 unsigned long tmp, oldval;
73
74 __asm__ __volatile__ (
75 "1: \n\t"
76 "movli.l @%2, %0 ! __raw_spin_trylock \n\t"
77 "mov %0, %1 \n\t"
78 "mov #0, %0 \n\t"
79 "movco.l %0, @%2 \n\t"
80 "bf 1b \n\t"
81 "synco \n\t"
82 : "=&z" (tmp), "=&r" (oldval)
83 : "r" (&lock->lock)
84 : "t", "memory"
85 );
86
87 return oldval;
88}
52 89
53/* 90/*
54 * Read-write spinlocks, allowing multiple readers but only one writer. 91 * Read-write spinlocks, allowing multiple readers but only one writer.
@@ -59,58 +96,124 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock)
59 * read-locks. 96 * read-locks.
60 */ 97 */
61 98
99/**
100 * read_can_lock - would read_trylock() succeed?
101 * @lock: the rwlock in question.
102 */
103#define __raw_read_can_lock(x) ((x)->lock > 0)
104
105/**
106 * write_can_lock - would write_trylock() succeed?
107 * @lock: the rwlock in question.
108 */
109#define __raw_write_can_lock(x) ((x)->lock == RW_LOCK_BIAS)
110
62static inline void __raw_read_lock(raw_rwlock_t *rw) 111static inline void __raw_read_lock(raw_rwlock_t *rw)
63{ 112{
64 __raw_spin_lock(&rw->lock); 113 unsigned long tmp;
65
66 atomic_inc(&rw->counter);
67 114
68 __raw_spin_unlock(&rw->lock); 115 __asm__ __volatile__ (
116 "1: \n\t"
117 "movli.l @%1, %0 ! __raw_read_lock \n\t"
118 "cmp/pl %0 \n\t"
119 "bf 1b \n\t"
120 "add #-1, %0 \n\t"
121 "movco.l %0, @%1 \n\t"
122 "bf 1b \n\t"
123 : "=&z" (tmp)
124 : "r" (&rw->lock)
125 : "t", "memory"
126 );
69} 127}
70 128
71static inline void __raw_read_unlock(raw_rwlock_t *rw) 129static inline void __raw_read_unlock(raw_rwlock_t *rw)
72{ 130{
73 __raw_spin_lock(&rw->lock); 131 unsigned long tmp;
74
75 atomic_dec(&rw->counter);
76 132
77 __raw_spin_unlock(&rw->lock); 133 __asm__ __volatile__ (
134 "1: \n\t"
135 "movli.l @%1, %0 ! __raw_read_unlock \n\t"
136 "add #1, %0 \n\t"
137 "movco.l %0, @%1 \n\t"
138 "bf 1b \n\t"
139 : "=&z" (tmp)
140 : "r" (&rw->lock)
141 : "t", "memory"
142 );
78} 143}
79 144
80static inline void __raw_write_lock(raw_rwlock_t *rw) 145static inline void __raw_write_lock(raw_rwlock_t *rw)
81{ 146{
82 __raw_spin_lock(&rw->lock); 147 unsigned long tmp;
83 atomic_set(&rw->counter, -1); 148
149 __asm__ __volatile__ (
150 "1: \n\t"
151 "movli.l @%1, %0 ! __raw_write_lock \n\t"
152 "cmp/hs %2, %0 \n\t"
153 "bf 1b \n\t"
154 "sub %2, %0 \n\t"
155 "movco.l %0, @%1 \n\t"
156 "bf 1b \n\t"
157 : "=&z" (tmp)
158 : "r" (&rw->lock), "r" (RW_LOCK_BIAS)
159 : "t", "memory"
160 );
84} 161}
85 162
86static inline void __raw_write_unlock(raw_rwlock_t *rw) 163static inline void __raw_write_unlock(raw_rwlock_t *rw)
87{ 164{
88 atomic_set(&rw->counter, 0); 165 __asm__ __volatile__ (
89 __raw_spin_unlock(&rw->lock); 166 "mov.l %1, @%0 ! __raw_write_unlock \n\t"
167 :
168 : "r" (&rw->lock), "r" (RW_LOCK_BIAS)
169 : "t", "memory"
170 );
90} 171}
91 172
92static inline int __raw_write_can_lock(raw_rwlock_t *rw) 173static inline int __raw_read_trylock(raw_rwlock_t *rw)
93{ 174{
94 return (atomic_read(&rw->counter) == RW_LOCK_BIAS); 175 unsigned long tmp, oldval;
95}
96 176
97static inline int __raw_read_trylock(raw_rwlock_t *lock) 177 __asm__ __volatile__ (
98{ 178 "1: \n\t"
99 atomic_t *count = (atomic_t*)lock; 179 "movli.l @%2, %0 ! __raw_read_trylock \n\t"
100 if (atomic_dec_return(count) >= 0) 180 "mov %0, %1 \n\t"
101 return 1; 181 "cmp/pl %0 \n\t"
102 atomic_inc(count); 182 "bf 2f \n\t"
103 return 0; 183 "add #-1, %0 \n\t"
184 "movco.l %0, @%2 \n\t"
185 "bf 1b \n\t"
186 "2: \n\t"
187 "synco \n\t"
188 : "=&z" (tmp), "=&r" (oldval)
189 : "r" (&rw->lock)
190 : "t", "memory"
191 );
192
193 return (oldval > 0);
104} 194}
105 195
106static inline int __raw_write_trylock(raw_rwlock_t *rw) 196static inline int __raw_write_trylock(raw_rwlock_t *rw)
107{ 197{
108 if (atomic_sub_and_test(RW_LOCK_BIAS, &rw->counter)) 198 unsigned long tmp, oldval;
109 return 1; 199
110 200 __asm__ __volatile__ (
111 atomic_add(RW_LOCK_BIAS, &rw->counter); 201 "1: \n\t"
202 "movli.l @%2, %0 ! __raw_write_trylock \n\t"
203 "mov %0, %1 \n\t"
204 "cmp/hs %3, %0 \n\t"
205 "bf 2f \n\t"
206 "sub %3, %0 \n\t"
207 "2: \n\t"
208 "movco.l %0, @%2 \n\t"
209 "bf 1b \n\t"
210 "synco \n\t"
211 : "=&z" (tmp), "=&r" (oldval)
212 : "r" (&rw->lock), "r" (RW_LOCK_BIAS)
213 : "t", "memory"
214 );
112 215
113 return 0; 216 return (oldval > (RW_LOCK_BIAS - 1));
114} 217}
115 218
116#define _raw_spin_relax(lock) cpu_relax() 219#define _raw_spin_relax(lock) cpu_relax()
diff --git a/include/asm-sh/spinlock_types.h b/include/asm-sh/spinlock_types.h
index 5c58134f2c4e..b4d244e7b60c 100644
--- a/include/asm-sh/spinlock_types.h
+++ b/include/asm-sh/spinlock_types.h
@@ -6,19 +6,16 @@
6#endif 6#endif
7 7
8typedef struct { 8typedef struct {
9 volatile unsigned long lock; 9 volatile unsigned int lock;
10} raw_spinlock_t; 10} raw_spinlock_t;
11 11
12#define __RAW_SPIN_LOCK_UNLOCKED { 1 } 12#define __RAW_SPIN_LOCK_UNLOCKED { 1 }
13
14#include <asm/atomic.h>
15 13
16typedef struct { 14typedef struct {
17 raw_spinlock_t lock; 15 volatile unsigned int lock;
18 atomic_t counter;
19} raw_rwlock_t; 16} raw_rwlock_t;
20 17
21#define RW_LOCK_BIAS 0x01000000 18#define RW_LOCK_BIAS 0x01000000
22#define __RAW_RW_LOCK_UNLOCKED { { 0 }, { RW_LOCK_BIAS } } 19#define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS }
23 20
24#endif 21#endif
diff --git a/include/asm-sh/system.h b/include/asm-sh/system.h
index 245042537205..9d849e6df268 100644
--- a/include/asm-sh/system.h
+++ b/include/asm-sh/system.h
@@ -266,6 +266,7 @@ void disable_hlt(void);
266void enable_hlt(void); 266void enable_hlt(void);
267 267
268void default_idle(void); 268void default_idle(void);
269void per_cpu_trap_init(void);
269 270
270asmlinkage void break_point_trap(void); 271asmlinkage void break_point_trap(void);
271asmlinkage void debug_trap_handler(unsigned long r4, unsigned long r5, 272asmlinkage void debug_trap_handler(unsigned long r4, unsigned long r5,
diff --git a/include/asm-sh/voyagergx.h b/include/asm-sh/voyagergx.h
index 64c936b22715..d825596562df 100644
--- a/include/asm-sh/voyagergx.h
+++ b/include/asm-sh/voyagergx.h
@@ -27,13 +27,35 @@
27#define VOYAGER_UART_BASE (0x30000 + VOYAGER_BASE) 27#define VOYAGER_UART_BASE (0x30000 + VOYAGER_BASE)
28#define VOYAGER_AC97_BASE (0xa0000 + VOYAGER_BASE) 28#define VOYAGER_AC97_BASE (0xa0000 + VOYAGER_BASE)
29 29
30#define VOYAGER_IRQ_NUM 32 30#define VOYAGER_IRQ_NUM 26
31#define VOYAGER_IRQ_BASE 50 31#define VOYAGER_IRQ_BASE 200
32#define VOYAGER_USBH_IRQ VOYAGER_IRQ_BASE + 6 32
33#define VOYAGER_8051_IRQ VOYAGER_IRQ_BASE + 10 33#define IRQ_SM501_UP (VOYAGER_IRQ_BASE + 0)
34#define VOYAGER_UART0_IRQ VOYAGER_IRQ_BASE + 12 34#define IRQ_SM501_G54 (VOYAGER_IRQ_BASE + 1)
35#define VOYAGER_UART1_IRQ VOYAGER_IRQ_BASE + 13 35#define IRQ_SM501_G53 (VOYAGER_IRQ_BASE + 2)
36#define VOYAGER_AC97_IRQ VOYAGER_IRQ_BASE + 17 36#define IRQ_SM501_G52 (VOYAGER_IRQ_BASE + 3)
37#define IRQ_SM501_G51 (VOYAGER_IRQ_BASE + 4)
38#define IRQ_SM501_G50 (VOYAGER_IRQ_BASE + 5)
39#define IRQ_SM501_G49 (VOYAGER_IRQ_BASE + 6)
40#define IRQ_SM501_G48 (VOYAGER_IRQ_BASE + 7)
41#define IRQ_SM501_I2C (VOYAGER_IRQ_BASE + 8)
42#define IRQ_SM501_PW (VOYAGER_IRQ_BASE + 9)
43#define IRQ_SM501_DMA (VOYAGER_IRQ_BASE + 10)
44#define IRQ_SM501_PCI (VOYAGER_IRQ_BASE + 11)
45#define IRQ_SM501_I2S (VOYAGER_IRQ_BASE + 12)
46#define IRQ_SM501_AC (VOYAGER_IRQ_BASE + 13)
47#define IRQ_SM501_US (VOYAGER_IRQ_BASE + 14)
48#define IRQ_SM501_U1 (VOYAGER_IRQ_BASE + 15)
49#define IRQ_SM501_U0 (VOYAGER_IRQ_BASE + 16)
50#define IRQ_SM501_CV (VOYAGER_IRQ_BASE + 17)
51#define IRQ_SM501_MC (VOYAGER_IRQ_BASE + 18)
52#define IRQ_SM501_S1 (VOYAGER_IRQ_BASE + 19)
53#define IRQ_SM501_S0 (VOYAGER_IRQ_BASE + 20)
54#define IRQ_SM501_UH (VOYAGER_IRQ_BASE + 21)
55#define IRQ_SM501_2D (VOYAGER_IRQ_BASE + 22)
56#define IRQ_SM501_ZD (VOYAGER_IRQ_BASE + 23)
57#define IRQ_SM501_PV (VOYAGER_IRQ_BASE + 24)
58#define IRQ_SM501_CI (VOYAGER_IRQ_BASE + 25)
37 59
38/* ----- MISC controle register ------------------------------ */ 60/* ----- MISC controle register ------------------------------ */
39#define MISC_CTRL (0x000004 + VOYAGER_BASE) 61#define MISC_CTRL (0x000004 + VOYAGER_BASE)
@@ -313,4 +335,7 @@
313void *voyagergx_consistent_alloc(struct device *, size_t, dma_addr_t *, gfp_t); 335void *voyagergx_consistent_alloc(struct device *, size_t, dma_addr_t *, gfp_t);
314int voyagergx_consistent_free(struct device *, size_t, void *, dma_addr_t); 336int voyagergx_consistent_free(struct device *, size_t, void *, dma_addr_t);
315 337
338/* arch/sh/cchips/voyagergx/irq.c */
339void setup_voyagergx_irq(void);
340
316#endif /* _VOYAGER_GX_REG_H */ 341#endif /* _VOYAGER_GX_REG_H */
diff --git a/include/asm-sh64/gpio.h b/include/asm-sh64/gpio.h
new file mode 100644
index 000000000000..6bc5a13d8415
--- /dev/null
+++ b/include/asm-sh64/gpio.h
@@ -0,0 +1,8 @@
1#ifndef __ASM_SH64_GPIO_H
2#define __ASM_SH64_GPIO_H
3
4/*
5 * This is just a stub, so that every arch using sh-sci has a gpio.h
6 */
7
8#endif /* __ASM_SH64_GPIO_H */
diff --git a/include/linux/maple.h b/include/linux/maple.h
new file mode 100644
index 000000000000..bad9a7b319de
--- /dev/null
+++ b/include/linux/maple.h
@@ -0,0 +1,80 @@
1#ifndef __LINUX_MAPLE_H
2#define __LINUX_MAPLE_H
3
4#include <linux/device.h>
5
6extern struct bus_type maple_bus_type;
7
8/* Maple Bus command and response codes */
9enum maple_code {
10 MAPLE_RESPONSE_FILEERR = -5,
11 MAPLE_RESPONSE_AGAIN = -4, /* request should be retransmitted */
12 MAPLE_RESPONSE_BADCMD = -3,
13 MAPLE_RESPONSE_BADFUNC = -2,
14 MAPLE_RESPONSE_NONE = -1, /* unit didn't respond at all */
15 MAPLE_COMMAND_DEVINFO = 1,
16 MAPLE_COMMAND_ALLINFO = 2,
17 MAPLE_COMMAND_RESET = 3,
18 MAPLE_COMMAND_KILL = 4,
19 MAPLE_RESPONSE_DEVINFO = 5,
20 MAPLE_RESPONSE_ALLINFO = 6,
21 MAPLE_RESPONSE_OK = 7,
22 MAPLE_RESPONSE_DATATRF = 8,
23 MAPLE_COMMAND_GETCOND = 9,
24 MAPLE_COMMAND_GETMINFO = 10,
25 MAPLE_COMMAND_BREAD = 11,
26 MAPLE_COMMAND_BWRITE = 12,
27 MAPLE_COMMAND_SETCOND = 14
28};
29
30struct mapleq {
31 struct list_head list;
32 struct maple_device *dev;
33 void *sendbuf, *recvbuf, *recvbufdcsp;
34 unsigned char length;
35 enum maple_code command;
36};
37
38struct maple_devinfo {
39 unsigned long function;
40 unsigned long function_data[3];
41 unsigned char area_code;
42 unsigned char connector_directon;
43 char product_name[31];
44 char product_licence[61];
45 unsigned short standby_power;
46 unsigned short max_power;
47};
48
49struct maple_device {
50 struct maple_driver *driver;
51 struct mapleq *mq;
52 void *private_data;
53 void (*callback) (struct mapleq * mq);
54 unsigned long when, interval, function;
55 struct maple_devinfo devinfo;
56 unsigned char port, unit;
57 char product_name[32];
58 char product_licence[64];
59 int registered;
60 struct device dev;
61};
62
63struct maple_driver {
64 unsigned long function;
65 int (*connect) (struct maple_device * dev);
66 void (*disconnect) (struct maple_device * dev);
67 struct device_driver drv;
68};
69
70void maple_getcond_callback(struct maple_device *dev,
71 void (*callback) (struct mapleq * mq),
72 unsigned long interval,
73 unsigned long function);
74int maple_driver_register(struct device_driver *drv);
75void maple_add_packet(struct mapleq *mq);
76
77#define to_maple_dev(n) container_of(n, struct maple_device, dev)
78#define to_maple_driver(n) container_of(n, struct maple_driver, drv)
79
80#endif /* __LINUX_MAPLE_H */