aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh')
-rw-r--r--arch/sh/Kconfig19
-rw-r--r--arch/sh/Kconfig.cpu4
-rw-r--r--arch/sh/Kconfig.debug3
-rw-r--r--arch/sh/Makefile1
-rw-r--r--arch/sh/boards/renesas/migor/Makefile1
-rw-r--r--arch/sh/boards/renesas/migor/setup.c61
-rw-r--r--arch/sh/boards/renesas/r7780rp/setup.c47
-rw-r--r--arch/sh/boards/renesas/rts7751r2d/setup.c45
-rw-r--r--arch/sh/boards/renesas/sdk7780/Kconfig7
-rw-r--r--arch/sh/cchips/hd6446x/hd64465/setup.c47
-rw-r--r--arch/sh/configs/migor_defconfig824
-rw-r--r--arch/sh/configs/rts7751r2d1_defconfig340
-rw-r--r--arch/sh/configs/rts7751r2dplus_defconfig340
-rw-r--r--arch/sh/configs/se7705_defconfig1
-rw-r--r--arch/sh/drivers/dma/dma-api.c2
-rw-r--r--arch/sh/drivers/pci/fixups-lboxre2.c4
-rw-r--r--arch/sh/drivers/pci/fixups-rts7751r2d.c4
-rw-r--r--arch/sh/drivers/pci/ops-dreamcast.c44
-rw-r--r--arch/sh/drivers/pci/ops-rts7751r2d.c3
-rw-r--r--arch/sh/drivers/pci/pci-sh4.h4
-rw-r--r--arch/sh/drivers/pci/pci-sh7751.c16
-rw-r--r--arch/sh/drivers/pci/pci-sh7780.c2
-rw-r--r--arch/sh/kernel/Makefile_321
-rw-r--r--arch/sh/kernel/Makefile_641
-rw-r--r--arch/sh/kernel/cpu/irq/Makefile1
-rw-r--r--arch/sh/kernel/cpu/irq/intc-sh5.c27
-rw-r--r--arch/sh/kernel/cpu/irq/maskreg.c93
-rw-r--r--arch/sh/kernel/cpu/sh4/probe.c8
-rw-r--r--arch/sh/kernel/cpu/sh4a/Makefile2
-rw-r--r--arch/sh/kernel/cpu/sh4a/clock-sh7722.c10
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7366.c177
-rw-r--r--arch/sh/kernel/cpu/sh5/probe.c61
-rw-r--r--arch/sh/kernel/io.c8
-rw-r--r--arch/sh/kernel/io_generic.c24
-rw-r--r--arch/sh/kernel/io_trapped.c276
-rw-r--r--arch/sh/kernel/irq.c3
-rw-r--r--arch/sh/kernel/process_64.c9
-rw-r--r--arch/sh/kernel/ptrace_32.c4
-rw-r--r--arch/sh/kernel/setup.c2
-rw-r--r--arch/sh/kernel/syscalls_32.S4
-rw-r--r--arch/sh/kernel/syscalls_64.S4
-rw-r--r--arch/sh/kernel/time_32.c19
-rw-r--r--arch/sh/kernel/time_64.c31
-rw-r--r--arch/sh/kernel/timers/timer-cmt.c9
-rw-r--r--arch/sh/kernel/timers/timer-mtu2.c3
-rw-r--r--arch/sh/kernel/traps_32.c164
-rw-r--r--arch/sh/kernel/traps_64.c4
-rw-r--r--arch/sh/kernel/vmlinux_64.lds.S2
-rw-r--r--arch/sh/mm/cache-sh5.c1019
-rw-r--r--arch/sh/mm/consistent.c32
-rw-r--r--arch/sh/mm/fault_32.c11
-rw-r--r--arch/sh/mm/init.c2
-rw-r--r--arch/sh/tools/mach-types2
53 files changed, 2627 insertions, 1205 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index d87d4bf88803..b3400b5ad5c6 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -93,6 +93,9 @@ config ARCH_NO_VIRT_TO_BUS
93config ARCH_SUPPORTS_AOUT 93config ARCH_SUPPORTS_AOUT
94 def_bool y 94 def_bool y
95 95
96config IO_TRAPPED
97 bool
98
96source "init/Kconfig" 99source "init/Kconfig"
97 100
98menu "System type" 101menu "System type"
@@ -312,6 +315,13 @@ config CPU_SUBTYPE_SH7722
312 select ARCH_SPARSEMEM_ENABLE 315 select ARCH_SPARSEMEM_ENABLE
313 select SYS_SUPPORTS_NUMA 316 select SYS_SUPPORTS_NUMA
314 317
318config CPU_SUBTYPE_SH7366
319 bool "Support SH7366 processor"
320 select CPU_SH4AL_DSP
321 select CPU_SHX2
322 select ARCH_SPARSEMEM_ENABLE
323 select SYS_SUPPORTS_NUMA
324
315# SH-5 Processor Support 325# SH-5 Processor Support
316 326
317config CPU_SUBTYPE_SH5_101 327config CPU_SUBTYPE_SH5_101
@@ -456,6 +466,7 @@ config SH_RTS7751R2D
456 bool "RTS7751R2D" 466 bool "RTS7751R2D"
457 depends on CPU_SUBTYPE_SH7751R 467 depends on CPU_SUBTYPE_SH7751R
458 select SYS_SUPPORTS_PCI 468 select SYS_SUPPORTS_PCI
469 select IO_TRAPPED
459 help 470 help
460 Select RTS7751R2D if configuring for a Renesas Technology 471 Select RTS7751R2D if configuring for a Renesas Technology
461 Sales SH-Graphics board. 472 Sales SH-Graphics board.
@@ -472,6 +483,14 @@ config SH_HIGHLANDER
472 bool "Highlander" 483 bool "Highlander"
473 depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 484 depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785
474 select SYS_SUPPORTS_PCI 485 select SYS_SUPPORTS_PCI
486 select IO_TRAPPED
487
488config SH_MIGOR
489 bool "Migo-R"
490 depends on CPU_SUBTYPE_SH7722
491 help
492 Select Migo-R if configuring for the SH7722 Migo-R platform
493 by Renesas System Solutions Asia Pte. Ltd.
475 494
476config SH_EDOSK7705 495config SH_EDOSK7705
477 bool "EDOSK7705" 496 bool "EDOSK7705"
diff --git a/arch/sh/Kconfig.cpu b/arch/sh/Kconfig.cpu
index d850184d0694..0e27fe3b182b 100644
--- a/arch/sh/Kconfig.cpu
+++ b/arch/sh/Kconfig.cpu
@@ -12,6 +12,7 @@ config CPU_LITTLE_ENDIAN
12 12
13config CPU_BIG_ENDIAN 13config CPU_BIG_ENDIAN
14 bool "Big Endian" 14 bool "Big Endian"
15 depends on !CPU_SH5
15 16
16endchoice 17endchoice
17 18
@@ -87,9 +88,6 @@ config SH64_ID2815_WORKAROUND
87config CPU_HAS_INTEVT 88config CPU_HAS_INTEVT
88 bool 89 bool
89 90
90config CPU_HAS_MASKREG_IRQ
91 bool
92
93config CPU_HAS_IPR_IRQ 91config CPU_HAS_IPR_IRQ
94 bool 92 bool
95 93
diff --git a/arch/sh/Kconfig.debug b/arch/sh/Kconfig.debug
index f7c716166ce8..5dcb74b947a9 100644
--- a/arch/sh/Kconfig.debug
+++ b/arch/sh/Kconfig.debug
@@ -29,7 +29,8 @@ config EARLY_SCIF_CONSOLE
29config EARLY_SCIF_CONSOLE_PORT 29config EARLY_SCIF_CONSOLE_PORT
30 hex 30 hex
31 depends on EARLY_SCIF_CONSOLE 31 depends on EARLY_SCIF_CONSOLE
32 default "0xffe00000" if CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7763 32 default "0xffe00000" if CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7763
33 default "0xffe00000" if CPU_SUBTYPE_SH7722 || CPU_SUBTYPE_SH7366
33 default "0xffea0000" if CPU_SUBTYPE_SH7785 34 default "0xffea0000" if CPU_SUBTYPE_SH7785
34 default "0xfffe8000" if CPU_SUBTYPE_SH7203 35 default "0xfffe8000" if CPU_SUBTYPE_SH7203
35 default "0xfffe9800" if CPU_SUBTYPE_SH7206 || CPU_SUBTYPE_SH7263 36 default "0xfffe9800" if CPU_SUBTYPE_SH7206 || CPU_SUBTYPE_SH7263
diff --git a/arch/sh/Makefile b/arch/sh/Makefile
index 17fc36186bf4..81381e5773c8 100644
--- a/arch/sh/Makefile
+++ b/arch/sh/Makefile
@@ -116,6 +116,7 @@ machdir-$(CONFIG_SH_RTS7751R2D) += renesas/rts7751r2d
116machdir-$(CONFIG_SH_7751_SYSTEMH) += renesas/systemh 116machdir-$(CONFIG_SH_7751_SYSTEMH) += renesas/systemh
117machdir-$(CONFIG_SH_EDOSK7705) += renesas/edosk7705 117machdir-$(CONFIG_SH_EDOSK7705) += renesas/edosk7705
118machdir-$(CONFIG_SH_HIGHLANDER) += renesas/r7780rp 118machdir-$(CONFIG_SH_HIGHLANDER) += renesas/r7780rp
119machdir-$(CONFIG_SH_MIGOR) += renesas/migor
119machdir-$(CONFIG_SH_SDK7780) += renesas/sdk7780 120machdir-$(CONFIG_SH_SDK7780) += renesas/sdk7780
120machdir-$(CONFIG_SH_7710VOIPGW) += renesas/sh7710voipgw 121machdir-$(CONFIG_SH_7710VOIPGW) += renesas/sh7710voipgw
121machdir-$(CONFIG_SH_X3PROTO) += renesas/x3proto 122machdir-$(CONFIG_SH_X3PROTO) += renesas/x3proto
diff --git a/arch/sh/boards/renesas/migor/Makefile b/arch/sh/boards/renesas/migor/Makefile
new file mode 100644
index 000000000000..77037567633b
--- /dev/null
+++ b/arch/sh/boards/renesas/migor/Makefile
@@ -0,0 +1 @@
obj-y := setup.o
diff --git a/arch/sh/boards/renesas/migor/setup.c b/arch/sh/boards/renesas/migor/setup.c
new file mode 100644
index 000000000000..21ab8c8fb590
--- /dev/null
+++ b/arch/sh/boards/renesas/migor/setup.c
@@ -0,0 +1,61 @@
1/*
2 * Renesas System Solutions Asia Pte. Ltd - Migo-R
3 *
4 * Copyright (C) 2008 Magnus Damm
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/init.h>
11#include <linux/platform_device.h>
12#include <linux/interrupt.h>
13#include <asm/machvec.h>
14#include <asm/io.h>
15
16/* Address IRQ Size Bus Description
17 * 0x00000000 64MB 16 NOR Flash (SP29PL256N)
18 * 0x0c000000 64MB 64 SDRAM (2xK4M563233G)
19 * 0x10000000 IRQ0 16 Ethernet (SMC91C111)
20 * 0x14000000 IRQ4 16 USB 2.0 Host Controller (M66596)
21 * 0x18000000 8GB 8 NAND Flash (K9K8G08U0A)
22 */
23
24static struct resource smc91x_eth_resources[] = {
25 [0] = {
26 .name = "smc91x-regs" ,
27 .start = P2SEGADDR(0x10000300),
28 .end = P2SEGADDR(0x1000030f),
29 .flags = IORESOURCE_MEM,
30 },
31 [1] = {
32 .start = 32, /* IRQ0 */
33 .flags = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH,
34 },
35};
36
37static struct platform_device smc91x_eth_device = {
38 .name = "smc91x",
39 .num_resources = ARRAY_SIZE(smc91x_eth_resources),
40 .resource = smc91x_eth_resources,
41};
42
43static struct platform_device *migor_devices[] __initdata = {
44 &smc91x_eth_device,
45};
46
47static int __init migor_devices_setup(void)
48{
49 return platform_add_devices(migor_devices, ARRAY_SIZE(migor_devices));
50}
51__initcall(migor_devices_setup);
52
53static void __init migor_setup(char **cmdline_p)
54{
55 ctrl_outw(0x1000, 0xa4050110); /* Enable IRQ0 in PJCR */
56}
57
58static struct sh_machine_vector mv_migor __initmv = {
59 .mv_name = "Migo-R",
60 .mv_setup = migor_setup,
61};
diff --git a/arch/sh/boards/renesas/r7780rp/setup.c b/arch/sh/boards/renesas/r7780rp/setup.c
index f7a8d5c9d510..2f68bea7890c 100644
--- a/arch/sh/boards/renesas/r7780rp/setup.c
+++ b/arch/sh/boards/renesas/r7780rp/setup.c
@@ -23,6 +23,7 @@
23#include <asm/clock.h> 23#include <asm/clock.h>
24#include <asm/heartbeat.h> 24#include <asm/heartbeat.h>
25#include <asm/io.h> 25#include <asm/io.h>
26#include <asm/io_trapped.h>
26 27
27static struct resource r8a66597_usb_host_resources[] = { 28static struct resource r8a66597_usb_host_resources[] = {
28 [0] = { 29 [0] = {
@@ -181,13 +182,27 @@ static struct platform_device *r7780rp_devices[] __initdata = {
181 &m66592_usb_peripheral_device, 182 &m66592_usb_peripheral_device,
182 &heartbeat_device, 183 &heartbeat_device,
183#ifndef CONFIG_SH_R7780RP 184#ifndef CONFIG_SH_R7780RP
184 &cf_ide_device,
185 &ax88796_device, 185 &ax88796_device,
186#endif 186#endif
187}; 187};
188 188
189/*
190 * The CF is connected using a 16-bit bus where 8-bit operations are
191 * unsupported. The linux ata driver is however using 8-bit operations, so
192 * insert a trapped io filter to convert 8-bit operations into 16-bit.
193 */
194static struct trapped_io cf_trapped_io = {
195 .resource = cf_ide_resources,
196 .num_resources = 2,
197 .minimum_bus_width = 16,
198};
199
189static int __init r7780rp_devices_setup(void) 200static int __init r7780rp_devices_setup(void)
190{ 201{
202#ifndef CONFIG_SH_R7780RP
203 if (register_trapped_io(&cf_trapped_io) == 0)
204 platform_device_register(&cf_ide_device);
205#endif
191 return platform_add_devices(r7780rp_devices, 206 return platform_add_devices(r7780rp_devices,
192 ARRAY_SIZE(r7780rp_devices)); 207 ARRAY_SIZE(r7780rp_devices));
193} 208}
@@ -226,34 +241,6 @@ static void r7780rp_power_off(void)
226 ctrl_outw(0x0001, PA_POFF); 241 ctrl_outw(0x0001, PA_POFF);
227} 242}
228 243
229static inline unsigned char is_ide_ioaddr(unsigned long addr)
230{
231 return ((cf_ide_resources[0].start <= addr &&
232 addr <= cf_ide_resources[0].end) ||
233 (cf_ide_resources[1].start <= addr &&
234 addr <= cf_ide_resources[1].end));
235}
236
237void highlander_writeb(u8 b, void __iomem *addr)
238{
239 unsigned long tmp = (unsigned long __force)addr;
240
241 if (is_ide_ioaddr(tmp))
242 ctrl_outw((u16)b, tmp);
243 else
244 ctrl_outb(b, tmp);
245}
246
247u8 highlander_readb(void __iomem *addr)
248{
249 unsigned long tmp = (unsigned long __force)addr;
250
251 if (is_ide_ioaddr(tmp))
252 return ctrl_inw(tmp) & 0xff;
253 else
254 return ctrl_inb(tmp);
255}
256
257/* 244/*
258 * Initialize the board 245 * Initialize the board
259 */ 246 */
@@ -338,6 +325,4 @@ static struct sh_machine_vector mv_highlander __initmv = {
338 .mv_setup = highlander_setup, 325 .mv_setup = highlander_setup,
339 .mv_init_irq = highlander_init_irq, 326 .mv_init_irq = highlander_init_irq,
340 .mv_irq_demux = highlander_irq_demux, 327 .mv_irq_demux = highlander_irq_demux,
341 .mv_readb = highlander_readb,
342 .mv_writeb = highlander_writeb,
343}; 328};
diff --git a/arch/sh/boards/renesas/rts7751r2d/setup.c b/arch/sh/boards/renesas/rts7751r2d/setup.c
index a0ef81b7de37..f21ee49ef3a5 100644
--- a/arch/sh/boards/renesas/rts7751r2d/setup.c
+++ b/arch/sh/boards/renesas/rts7751r2d/setup.c
@@ -21,6 +21,7 @@
21#include <asm/machvec.h> 21#include <asm/machvec.h>
22#include <asm/rts7751r2d.h> 22#include <asm/rts7751r2d.h>
23#include <asm/io.h> 23#include <asm/io.h>
24#include <asm/io_trapped.h>
24#include <asm/spi.h> 25#include <asm/spi.h>
25 26
26static struct resource cf_ide_resources[] = { 27static struct resource cf_ide_resources[] = {
@@ -214,13 +215,25 @@ static struct platform_device *rts7751r2d_devices[] __initdata = {
214 &uart_device, 215 &uart_device,
215 &sm501_device, 216 &sm501_device,
216#endif 217#endif
217 &cf_ide_device,
218 &heartbeat_device, 218 &heartbeat_device,
219 &spi_sh_sci_device, 219 &spi_sh_sci_device,
220}; 220};
221 221
222/*
223 * The CF is connected with a 16-bit bus where 8-bit operations are
224 * unsupported. The linux ata driver is however using 8-bit operations, so
225 * insert a trapped io filter to convert 8-bit operations into 16-bit.
226 */
227static struct trapped_io cf_trapped_io = {
228 .resource = cf_ide_resources,
229 .num_resources = 2,
230 .minimum_bus_width = 16,
231};
232
222static int __init rts7751r2d_devices_setup(void) 233static int __init rts7751r2d_devices_setup(void)
223{ 234{
235 if (register_trapped_io(&cf_trapped_io) == 0)
236 platform_device_register(&cf_ide_device);
224 spi_register_board_info(spi_bus, ARRAY_SIZE(spi_bus)); 237 spi_register_board_info(spi_bus, ARRAY_SIZE(spi_bus));
225 return platform_add_devices(rts7751r2d_devices, 238 return platform_add_devices(rts7751r2d_devices,
226 ARRAY_SIZE(rts7751r2d_devices)); 239 ARRAY_SIZE(rts7751r2d_devices));
@@ -232,34 +245,6 @@ static void rts7751r2d_power_off(void)
232 ctrl_outw(0x0001, PA_POWOFF); 245 ctrl_outw(0x0001, PA_POWOFF);
233} 246}
234 247
235static inline unsigned char is_ide_ioaddr(unsigned long addr)
236{
237 return ((cf_ide_resources[0].start <= addr &&
238 addr <= cf_ide_resources[0].end) ||
239 (cf_ide_resources[1].start <= addr &&
240 addr <= cf_ide_resources[1].end));
241}
242
243void rts7751r2d_writeb(u8 b, void __iomem *addr)
244{
245 unsigned long tmp = (unsigned long __force)addr;
246
247 if (is_ide_ioaddr(tmp))
248 ctrl_outw((u16)b, tmp);
249 else
250 ctrl_outb(b, tmp);
251}
252
253u8 rts7751r2d_readb(void __iomem *addr)
254{
255 unsigned long tmp = (unsigned long __force)addr;
256
257 if (is_ide_ioaddr(tmp))
258 return ctrl_inw(tmp) & 0xff;
259 else
260 return ctrl_inb(tmp);
261}
262
263/* 248/*
264 * Initialize the board 249 * Initialize the board
265 */ 250 */
@@ -310,6 +295,4 @@ static struct sh_machine_vector mv_rts7751r2d __initmv = {
310 .mv_setup = rts7751r2d_setup, 295 .mv_setup = rts7751r2d_setup,
311 .mv_init_irq = init_rts7751r2d_IRQ, 296 .mv_init_irq = init_rts7751r2d_IRQ,
312 .mv_irq_demux = rts7751r2d_irq_demux, 297 .mv_irq_demux = rts7751r2d_irq_demux,
313 .mv_writeb = rts7751r2d_writeb,
314 .mv_readb = rts7751r2d_readb,
315}; 298};
diff --git a/arch/sh/boards/renesas/sdk7780/Kconfig b/arch/sh/boards/renesas/sdk7780/Kconfig
index e4f5b6985be1..065f1df09bf1 100644
--- a/arch/sh/boards/renesas/sdk7780/Kconfig
+++ b/arch/sh/boards/renesas/sdk7780/Kconfig
@@ -4,13 +4,6 @@ choice
4 prompt "SDK7780 options" 4 prompt "SDK7780 options"
5 default SH_SDK7780_BASE 5 default SH_SDK7780_BASE
6 6
7config SH_SDK7780_STANDALONE
8 bool "SDK7780 board support"
9 depends on CPU_SUBTYPE_SH7780
10 help
11 Selecting this option will enable support for the
12 standalone version of the SDK7780. If in doubt, say Y.
13
14config SH_SDK7780_BASE 7config SH_SDK7780_BASE
15 bool "SDK7780 with base-board support" 8 bool "SDK7780 with base-board support"
16 depends on CPU_SUBTYPE_SH7780 9 depends on CPU_SUBTYPE_SH7780
diff --git a/arch/sh/cchips/hd6446x/hd64465/setup.c b/arch/sh/cchips/hd6446x/hd64465/setup.c
index 5cef0db4018b..9b8820c36701 100644
--- a/arch/sh/cchips/hd6446x/hd64465/setup.c
+++ b/arch/sh/cchips/hd6446x/hd64465/setup.c
@@ -17,10 +17,8 @@
17#include <linux/interrupt.h> 17#include <linux/interrupt.h>
18#include <linux/init.h> 18#include <linux/init.h>
19#include <linux/irq.h> 19#include <linux/irq.h>
20
21#include <asm/io.h> 20#include <asm/io.h>
22#include <asm/irq.h> 21#include <asm/irq.h>
23
24#include <asm/hd64465/hd64465.h> 22#include <asm/hd64465/hd64465.h>
25 23
26static void disable_hd64465_irq(unsigned int irq) 24static void disable_hd64465_irq(unsigned int irq)
@@ -28,51 +26,45 @@ static void disable_hd64465_irq(unsigned int irq)
28 unsigned short nimr; 26 unsigned short nimr;
29 unsigned short mask = 1 << (irq - HD64465_IRQ_BASE); 27 unsigned short mask = 1 << (irq - HD64465_IRQ_BASE);
30 28
31 pr_debug("disable_hd64465_irq(%d): mask=%x\n", irq, mask); 29 pr_debug("disable_hd64465_irq(%d): mask=%x\n", irq, mask);
32 nimr = inw(HD64465_REG_NIMR); 30 nimr = inw(HD64465_REG_NIMR);
33 nimr |= mask; 31 nimr |= mask;
34 outw(nimr, HD64465_REG_NIMR); 32 outw(nimr, HD64465_REG_NIMR);
35} 33}
36 34
37
38static void enable_hd64465_irq(unsigned int irq) 35static void enable_hd64465_irq(unsigned int irq)
39{ 36{
40 unsigned short nimr; 37 unsigned short nimr;
41 unsigned short mask = 1 << (irq - HD64465_IRQ_BASE); 38 unsigned short mask = 1 << (irq - HD64465_IRQ_BASE);
42 39
43 pr_debug("enable_hd64465_irq(%d): mask=%x\n", irq, mask); 40 pr_debug("enable_hd64465_irq(%d): mask=%x\n", irq, mask);
44 nimr = inw(HD64465_REG_NIMR); 41 nimr = inw(HD64465_REG_NIMR);
45 nimr &= ~mask; 42 nimr &= ~mask;
46 outw(nimr, HD64465_REG_NIMR); 43 outw(nimr, HD64465_REG_NIMR);
47} 44}
48 45
49
50static void mask_and_ack_hd64465(unsigned int irq) 46static void mask_and_ack_hd64465(unsigned int irq)
51{ 47{
52 disable_hd64465_irq(irq); 48 disable_hd64465_irq(irq);
53} 49}
54 50
55
56static void end_hd64465_irq(unsigned int irq) 51static void end_hd64465_irq(unsigned int irq)
57{ 52{
58 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) 53 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
59 enable_hd64465_irq(irq); 54 enable_hd64465_irq(irq);
60} 55}
61 56
62
63static unsigned int startup_hd64465_irq(unsigned int irq) 57static unsigned int startup_hd64465_irq(unsigned int irq)
64{ 58{
65 enable_hd64465_irq(irq); 59 enable_hd64465_irq(irq);
66 return 0; 60 return 0;
67} 61}
68 62
69
70static void shutdown_hd64465_irq(unsigned int irq) 63static void shutdown_hd64465_irq(unsigned int irq)
71{ 64{
72 disable_hd64465_irq(irq); 65 disable_hd64465_irq(irq);
73} 66}
74 67
75
76static struct hw_interrupt_type hd64465_irq_type = { 68static struct hw_interrupt_type hd64465_irq_type = {
77 .typename = "HD64465-IRQ", 69 .typename = "HD64465-IRQ",
78 .startup = startup_hd64465_irq, 70 .startup = startup_hd64465_irq,
@@ -83,7 +75,6 @@ static struct hw_interrupt_type hd64465_irq_type = {
83 .end = end_hd64465_irq, 75 .end = end_hd64465_irq,
84}; 76};
85 77
86
87static irqreturn_t hd64465_interrupt(int irq, void *dev_id) 78static irqreturn_t hd64465_interrupt(int irq, void *dev_id)
88{ 79{
89 printk(KERN_INFO 80 printk(KERN_INFO
@@ -93,9 +84,6 @@ static irqreturn_t hd64465_interrupt(int irq, void *dev_id)
93 return IRQ_NONE; 84 return IRQ_NONE;
94} 85}
95 86
96
97/*====================================================*/
98
99/* 87/*
100 * Support for a secondary IRQ demux step. This is necessary 88 * Support for a secondary IRQ demux step. This is necessary
101 * because the HD64465 presents a very thin interface to the 89 * because the HD64465 presents a very thin interface to the
@@ -103,8 +91,7 @@ static irqreturn_t hd64465_interrupt(int irq, void *dev_id)
103 * normally done in hardware by other PCMCIA host bridges is 91 * normally done in hardware by other PCMCIA host bridges is
104 * instead done in software. 92 * instead done in software.
105 */ 93 */
106static struct 94static struct {
107{
108 int (*func)(int, void *); 95 int (*func)(int, void *);
109 void *dev; 96 void *dev;
110} hd64465_demux[HD64465_IRQ_NUM]; 97} hd64465_demux[HD64465_IRQ_NUM];
@@ -112,19 +99,17 @@ static struct
112void hd64465_register_irq_demux(int irq, 99void hd64465_register_irq_demux(int irq,
113 int (*demux)(int irq, void *dev), void *dev) 100 int (*demux)(int irq, void *dev), void *dev)
114{ 101{
115 hd64465_demux[irq - HD64465_IRQ_BASE].func = demux; 102 hd64465_demux[irq - HD64465_IRQ_BASE].func = demux;
116 hd64465_demux[irq - HD64465_IRQ_BASE].dev = dev; 103 hd64465_demux[irq - HD64465_IRQ_BASE].dev = dev;
117} 104}
118EXPORT_SYMBOL(hd64465_register_irq_demux); 105EXPORT_SYMBOL(hd64465_register_irq_demux);
119 106
120void hd64465_unregister_irq_demux(int irq) 107void hd64465_unregister_irq_demux(int irq)
121{ 108{
122 hd64465_demux[irq - HD64465_IRQ_BASE].func = 0; 109 hd64465_demux[irq - HD64465_IRQ_BASE].func = 0;
123} 110}
124EXPORT_SYMBOL(hd64465_unregister_irq_demux); 111EXPORT_SYMBOL(hd64465_unregister_irq_demux);
125 112
126
127
128int hd64465_irq_demux(int irq) 113int hd64465_irq_demux(int irq)
129{ 114{
130 if (irq == CONFIG_HD64465_IRQ) { 115 if (irq == CONFIG_HD64465_IRQ) {
@@ -132,16 +117,16 @@ int hd64465_irq_demux(int irq)
132 unsigned short nirr = inw(HD64465_REG_NIRR); 117 unsigned short nirr = inw(HD64465_REG_NIRR);
133 unsigned short nimr = inw(HD64465_REG_NIMR); 118 unsigned short nimr = inw(HD64465_REG_NIMR);
134 119
135 pr_debug("hd64465_irq_demux, nirr=%04x, nimr=%04x\n", nirr, nimr); 120 pr_debug("hd64465_irq_demux, nirr=%04x, nimr=%04x\n", nirr, nimr);
136 nirr &= ~nimr; 121 nirr &= ~nimr;
137 for (bit = 1, i = 0 ; i < HD64465_IRQ_NUM ; bit <<= 1, i++) 122 for (bit = 1, i = 0 ; i < HD64465_IRQ_NUM ; bit <<= 1, i++)
138 if (nirr & bit) 123 if (nirr & bit)
139 break; 124 break;
140 125
141 if (i < HD64465_IRQ_NUM) { 126 if (i < HD64465_IRQ_NUM) {
142 irq = HD64465_IRQ_BASE + i; 127 irq = HD64465_IRQ_BASE + i;
143 if (hd64465_demux[i].func != 0) 128 if (hd64465_demux[i].func != 0)
144 irq = hd64465_demux[i].func(irq, hd64465_demux[i].dev); 129 irq = hd64465_demux[i].func(irq, hd64465_demux[i].dev);
145 } 130 }
146 } 131 }
147 return irq; 132 return irq;
@@ -154,7 +139,6 @@ static struct irqaction irq0 = {
154 .name = "HD64465", 139 .name = "HD64465",
155}; 140};
156 141
157
158static int __init setup_hd64465(void) 142static int __init setup_hd64465(void)
159{ 143{
160 int i; 144 int i;
@@ -176,8 +160,8 @@ static int __init setup_hd64465(void)
176 160
177 rev = inw(HD64465_REG_SRR); 161 rev = inw(HD64465_REG_SRR);
178 printk(KERN_INFO "HD64465 hardware revision %d.%d\n", (rev >> 8) & 0xff, rev & 0xff); 162 printk(KERN_INFO "HD64465 hardware revision %d.%d\n", (rev >> 8) & 0xff, rev & 0xff);
179 163
180 outw(0xffff, HD64465_REG_NIMR); /* mask all interrupts */ 164 outw(0xffff, HD64465_REG_NIMR); /* mask all interrupts */
181 165
182 for (i = 0; i < HD64465_IRQ_NUM ; i++) { 166 for (i = 0; i < HD64465_IRQ_NUM ; i++) {
183 irq_desc[HD64465_IRQ_BASE + i].chip = &hd64465_irq_type; 167 irq_desc[HD64465_IRQ_BASE + i].chip = &hd64465_irq_type;
@@ -185,16 +169,13 @@ static int __init setup_hd64465(void)
185 169
186 setup_irq(CONFIG_HD64465_IRQ, &irq0); 170 setup_irq(CONFIG_HD64465_IRQ, &irq0);
187 171
188#ifdef CONFIG_SERIAL
189 /* wake up the UART from STANDBY at this point */ 172 /* wake up the UART from STANDBY at this point */
190 smscr = inw(HD64465_REG_SMSCR); 173 smscr = inw(HD64465_REG_SMSCR);
191 outw(smscr & (~HD64465_SMSCR_UARTST), HD64465_REG_SMSCR); 174 outw(smscr & (~HD64465_SMSCR_UARTST), HD64465_REG_SMSCR);
192 175
193 /* remap IO ports for first ISA serial port to HD64465 UART */ 176 /* remap IO ports for first ISA serial port to HD64465 UART */
194 hd64465_port_map(0x3f8, 8, CONFIG_HD64465_IOBASE + 0x8000, 1); 177 hd64465_port_map(0x3f8, 8, CONFIG_HD64465_IOBASE + 0x8000, 1);
195#endif
196 178
197 return 0; 179 return 0;
198} 180}
199
200module_init(setup_hd64465); 181module_init(setup_hd64465);
diff --git a/arch/sh/configs/migor_defconfig b/arch/sh/configs/migor_defconfig
new file mode 100644
index 000000000000..ee5900817f8f
--- /dev/null
+++ b/arch/sh/configs/migor_defconfig
@@ -0,0 +1,824 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24
4# Wed Feb 6 21:52:20 2008
5#
6CONFIG_SUPERH=y
7CONFIG_SUPERH32=y
8CONFIG_RWSEM_GENERIC_SPINLOCK=y
9CONFIG_GENERIC_BUG=y
10CONFIG_GENERIC_FIND_NEXT_BIT=y
11CONFIG_GENERIC_HWEIGHT=y
12CONFIG_GENERIC_HARDIRQS=y
13CONFIG_GENERIC_IRQ_PROBE=y
14CONFIG_GENERIC_CALIBRATE_DELAY=y
15CONFIG_GENERIC_TIME=y
16CONFIG_GENERIC_CLOCKEVENTS=y
17CONFIG_SYS_SUPPORTS_NUMA=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
23CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
24
25#
26# General setup
27#
28CONFIG_EXPERIMENTAL=y
29CONFIG_BROKEN_ON_SMP=y
30CONFIG_INIT_ENV_ARG_LIMIT=32
31CONFIG_LOCALVERSION=""
32CONFIG_LOCALVERSION_AUTO=y
33CONFIG_SWAP=y
34CONFIG_SYSVIPC=y
35CONFIG_SYSVIPC_SYSCTL=y
36# CONFIG_POSIX_MQUEUE is not set
37# CONFIG_BSD_PROCESS_ACCT is not set
38# CONFIG_TASKSTATS is not set
39# CONFIG_USER_NS is not set
40# CONFIG_PID_NS is not set
41# CONFIG_AUDIT is not set
42CONFIG_IKCONFIG=y
43CONFIG_IKCONFIG_PROC=y
44CONFIG_LOG_BUF_SHIFT=14
45# CONFIG_CGROUPS is not set
46CONFIG_FAIR_GROUP_SCHED=y
47CONFIG_FAIR_USER_SCHED=y
48# CONFIG_FAIR_CGROUP_SCHED is not set
49CONFIG_SYSFS_DEPRECATED=y
50# CONFIG_RELAY is not set
51CONFIG_BLK_DEV_INITRD=y
52CONFIG_INITRAMFS_SOURCE=""
53# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
54CONFIG_SYSCTL=y
55CONFIG_EMBEDDED=y
56CONFIG_UID16=y
57# CONFIG_SYSCTL_SYSCALL is not set
58CONFIG_KALLSYMS=y
59# CONFIG_KALLSYMS_EXTRA_PASS is not set
60CONFIG_HOTPLUG=y
61CONFIG_PRINTK=y
62CONFIG_BUG=y
63CONFIG_ELF_CORE=y
64CONFIG_BASE_FULL=y
65CONFIG_FUTEX=y
66CONFIG_ANON_INODES=y
67CONFIG_EPOLL=y
68CONFIG_SIGNALFD=y
69CONFIG_EVENTFD=y
70CONFIG_SHMEM=y
71CONFIG_VM_EVENT_COUNTERS=y
72CONFIG_SLAB=y
73# CONFIG_SLUB is not set
74# CONFIG_SLOB is not set
75CONFIG_PROFILING=y
76# CONFIG_MARKERS is not set
77CONFIG_OPROFILE=y
78CONFIG_HAVE_OPROFILE=y
79# CONFIG_HAVE_KPROBES is not set
80CONFIG_SLABINFO=y
81CONFIG_RT_MUTEXES=y
82# CONFIG_TINY_SHMEM is not set
83CONFIG_BASE_SMALL=0
84CONFIG_MODULES=y
85# CONFIG_MODULE_UNLOAD is not set
86# CONFIG_MODVERSIONS is not set
87# CONFIG_MODULE_SRCVERSION_ALL is not set
88# CONFIG_KMOD is not set
89CONFIG_BLOCK=y
90# CONFIG_LBD is not set
91# CONFIG_BLK_DEV_IO_TRACE is not set
92# CONFIG_LSF is not set
93# CONFIG_BLK_DEV_BSG is not set
94
95#
96# IO Schedulers
97#
98CONFIG_IOSCHED_NOOP=y
99CONFIG_IOSCHED_AS=y
100CONFIG_IOSCHED_DEADLINE=y
101CONFIG_IOSCHED_CFQ=y
102CONFIG_DEFAULT_AS=y
103# CONFIG_DEFAULT_DEADLINE is not set
104# CONFIG_DEFAULT_CFQ is not set
105# CONFIG_DEFAULT_NOOP is not set
106CONFIG_DEFAULT_IOSCHED="anticipatory"
107CONFIG_CLASSIC_RCU=y
108# CONFIG_PREEMPT_RCU is not set
109
110#
111# System type
112#
113CONFIG_CPU_SH4=y
114CONFIG_CPU_SH4A=y
115CONFIG_CPU_SH4AL_DSP=y
116CONFIG_CPU_SHX2=y
117# CONFIG_CPU_SUBTYPE_SH7619 is not set
118# CONFIG_CPU_SUBTYPE_SH7203 is not set
119# CONFIG_CPU_SUBTYPE_SH7206 is not set
120# CONFIG_CPU_SUBTYPE_SH7263 is not set
121# CONFIG_CPU_SUBTYPE_SH7705 is not set
122# CONFIG_CPU_SUBTYPE_SH7706 is not set
123# CONFIG_CPU_SUBTYPE_SH7707 is not set
124# CONFIG_CPU_SUBTYPE_SH7708 is not set
125# CONFIG_CPU_SUBTYPE_SH7709 is not set
126# CONFIG_CPU_SUBTYPE_SH7710 is not set
127# CONFIG_CPU_SUBTYPE_SH7712 is not set
128# CONFIG_CPU_SUBTYPE_SH7720 is not set
129# CONFIG_CPU_SUBTYPE_SH7721 is not set
130# CONFIG_CPU_SUBTYPE_SH7750 is not set
131# CONFIG_CPU_SUBTYPE_SH7091 is not set
132# CONFIG_CPU_SUBTYPE_SH7750R is not set
133# CONFIG_CPU_SUBTYPE_SH7750S is not set
134# CONFIG_CPU_SUBTYPE_SH7751 is not set
135# CONFIG_CPU_SUBTYPE_SH7751R is not set
136# CONFIG_CPU_SUBTYPE_SH7760 is not set
137# CONFIG_CPU_SUBTYPE_SH4_202 is not set
138# CONFIG_CPU_SUBTYPE_SH7763 is not set
139# CONFIG_CPU_SUBTYPE_SH7770 is not set
140# CONFIG_CPU_SUBTYPE_SH7780 is not set
141# CONFIG_CPU_SUBTYPE_SH7785 is not set
142# CONFIG_CPU_SUBTYPE_SHX3 is not set
143# CONFIG_CPU_SUBTYPE_SH7343 is not set
144CONFIG_CPU_SUBTYPE_SH7722=y
145# CONFIG_CPU_SUBTYPE_SH5_101 is not set
146# CONFIG_CPU_SUBTYPE_SH5_103 is not set
147
148#
149# Memory management options
150#
151CONFIG_QUICKLIST=y
152CONFIG_MMU=y
153CONFIG_PAGE_OFFSET=0x80000000
154CONFIG_MEMORY_START=0x0c000000
155CONFIG_MEMORY_SIZE=0x04000000
156CONFIG_29BIT=y
157# CONFIG_X2TLB is not set
158CONFIG_VSYSCALL=y
159CONFIG_NUMA=y
160CONFIG_NODES_SHIFT=1
161CONFIG_ARCH_SPARSEMEM_ENABLE=y
162CONFIG_ARCH_SPARSEMEM_DEFAULT=y
163CONFIG_MAX_ACTIVE_REGIONS=2
164CONFIG_ARCH_POPULATES_NODE_MAP=y
165CONFIG_ARCH_SELECT_MEMORY_MODEL=y
166CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
167CONFIG_PAGE_SIZE_4KB=y
168# CONFIG_PAGE_SIZE_8KB is not set
169# CONFIG_PAGE_SIZE_64KB is not set
170CONFIG_SELECT_MEMORY_MODEL=y
171# CONFIG_FLATMEM_MANUAL is not set
172# CONFIG_DISCONTIGMEM_MANUAL is not set
173CONFIG_SPARSEMEM_MANUAL=y
174CONFIG_SPARSEMEM=y
175CONFIG_NEED_MULTIPLE_NODES=y
176CONFIG_HAVE_MEMORY_PRESENT=y
177CONFIG_SPARSEMEM_STATIC=y
178# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
179# CONFIG_MEMORY_HOTPLUG is not set
180CONFIG_SPLIT_PTLOCK_CPUS=4
181# CONFIG_MIGRATION is not set
182# CONFIG_RESOURCES_64BIT is not set
183CONFIG_ZONE_DMA_FLAG=0
184CONFIG_NR_QUICK=2
185
186#
187# Cache configuration
188#
189# CONFIG_SH_DIRECT_MAPPED is not set
190CONFIG_CACHE_WRITEBACK=y
191# CONFIG_CACHE_WRITETHROUGH is not set
192# CONFIG_CACHE_OFF is not set
193
194#
195# Processor features
196#
197CONFIG_CPU_LITTLE_ENDIAN=y
198# CONFIG_CPU_BIG_ENDIAN is not set
199# CONFIG_SH_FPU_EMU is not set
200CONFIG_SH_DSP=y
201# CONFIG_SH_STORE_QUEUES is not set
202CONFIG_CPU_HAS_INTEVT=y
203CONFIG_CPU_HAS_SR_RB=y
204CONFIG_CPU_HAS_PTEA=y
205CONFIG_CPU_HAS_DSP=y
206
207#
208# Board support
209#
210# CONFIG_SH_7722_SOLUTION_ENGINE is not set
211CONFIG_SH_MIGOR=y
212
213#
214# Timer and clock configuration
215#
216CONFIG_SH_TMU=y
217CONFIG_SH_TIMER_IRQ=16
218CONFIG_SH_PCLK_FREQ=33333333
219# CONFIG_TICK_ONESHOT is not set
220# CONFIG_NO_HZ is not set
221# CONFIG_HIGH_RES_TIMERS is not set
222CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
223
224#
225# CPU Frequency scaling
226#
227# CONFIG_CPU_FREQ is not set
228
229#
230# DMA support
231#
232# CONFIG_SH_DMA is not set
233
234#
235# Companion Chips
236#
237
238#
239# Additional SuperH Device Drivers
240#
241# CONFIG_HEARTBEAT is not set
242# CONFIG_PUSH_SWITCH is not set
243
244#
245# Kernel features
246#
247# CONFIG_HZ_100 is not set
248CONFIG_HZ_250=y
249# CONFIG_HZ_300 is not set
250# CONFIG_HZ_1000 is not set
251CONFIG_HZ=250
252# CONFIG_SCHED_HRTICK is not set
253# CONFIG_KEXEC is not set
254# CONFIG_CRASH_DUMP is not set
255CONFIG_PREEMPT_NONE=y
256# CONFIG_PREEMPT_VOLUNTARY is not set
257# CONFIG_PREEMPT is not set
258CONFIG_RCU_TRACE=y
259CONFIG_GUSA=y
260
261#
262# Boot options
263#
264CONFIG_ZERO_PAGE_OFFSET=0x00001000
265CONFIG_BOOT_LINK_OFFSET=0x00800000
266CONFIG_CMDLINE_BOOL=y
267CONFIG_CMDLINE="console=ttySC0,115200 earlyprintk=serial ip=on"
268
269#
270# Bus options
271#
272# CONFIG_ARCH_SUPPORTS_MSI is not set
273# CONFIG_PCCARD is not set
274
275#
276# Executable file formats
277#
278CONFIG_BINFMT_ELF=y
279# CONFIG_BINFMT_MISC is not set
280
281#
282# Networking
283#
284CONFIG_NET=y
285
286#
287# Networking options
288#
289CONFIG_PACKET=y
290# CONFIG_PACKET_MMAP is not set
291CONFIG_UNIX=y
292CONFIG_XFRM=y
293# CONFIG_XFRM_USER is not set
294# CONFIG_XFRM_SUB_POLICY is not set
295# CONFIG_XFRM_MIGRATE is not set
296# CONFIG_XFRM_STATISTICS is not set
297# CONFIG_NET_KEY is not set
298CONFIG_INET=y
299# CONFIG_IP_MULTICAST is not set
300# CONFIG_IP_ADVANCED_ROUTER is not set
301CONFIG_IP_FIB_HASH=y
302CONFIG_IP_PNP=y
303CONFIG_IP_PNP_DHCP=y
304# CONFIG_IP_PNP_BOOTP is not set
305# CONFIG_IP_PNP_RARP is not set
306# CONFIG_NET_IPIP is not set
307# CONFIG_NET_IPGRE is not set
308# CONFIG_ARPD is not set
309# CONFIG_SYN_COOKIES is not set
310# CONFIG_INET_AH is not set
311# CONFIG_INET_ESP is not set
312# CONFIG_INET_IPCOMP is not set
313# CONFIG_INET_XFRM_TUNNEL is not set
314# CONFIG_INET_TUNNEL is not set
315CONFIG_INET_XFRM_MODE_TRANSPORT=y
316CONFIG_INET_XFRM_MODE_TUNNEL=y
317CONFIG_INET_XFRM_MODE_BEET=y
318# CONFIG_INET_LRO is not set
319CONFIG_INET_DIAG=y
320CONFIG_INET_TCP_DIAG=y
321# CONFIG_TCP_CONG_ADVANCED is not set
322CONFIG_TCP_CONG_CUBIC=y
323CONFIG_DEFAULT_TCP_CONG="cubic"
324# CONFIG_TCP_MD5SIG is not set
325# CONFIG_IPV6 is not set
326# CONFIG_INET6_XFRM_TUNNEL is not set
327# CONFIG_INET6_TUNNEL is not set
328# CONFIG_NETWORK_SECMARK is not set
329# CONFIG_NETFILTER is not set
330# CONFIG_IP_DCCP is not set
331# CONFIG_IP_SCTP is not set
332# CONFIG_TIPC is not set
333# CONFIG_ATM is not set
334# CONFIG_BRIDGE is not set
335# CONFIG_VLAN_8021Q is not set
336# CONFIG_DECNET is not set
337# CONFIG_LLC2 is not set
338# CONFIG_IPX is not set
339# CONFIG_ATALK is not set
340# CONFIG_X25 is not set
341# CONFIG_LAPB is not set
342# CONFIG_ECONET is not set
343# CONFIG_WAN_ROUTER is not set
344# CONFIG_NET_SCHED is not set
345
346#
347# Network testing
348#
349# CONFIG_NET_PKTGEN is not set
350# CONFIG_HAMRADIO is not set
351# CONFIG_CAN is not set
352# CONFIG_IRDA is not set
353# CONFIG_BT is not set
354# CONFIG_AF_RXRPC is not set
355
356#
357# Wireless
358#
359# CONFIG_CFG80211 is not set
360CONFIG_WIRELESS_EXT=y
361# CONFIG_MAC80211 is not set
362# CONFIG_IEEE80211 is not set
363# CONFIG_RFKILL is not set
364# CONFIG_NET_9P is not set
365
366#
367# Device Drivers
368#
369
370#
371# Generic Driver Options
372#
373CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
374CONFIG_STANDALONE=y
375CONFIG_PREVENT_FIRMWARE_BUILD=y
376CONFIG_FW_LOADER=m
377# CONFIG_SYS_HYPERVISOR is not set
378# CONFIG_CONNECTOR is not set
379# CONFIG_MTD is not set
380# CONFIG_PARPORT is not set
381CONFIG_BLK_DEV=y
382# CONFIG_BLK_DEV_COW_COMMON is not set
383# CONFIG_BLK_DEV_LOOP is not set
384# CONFIG_BLK_DEV_NBD is not set
385CONFIG_BLK_DEV_RAM=y
386CONFIG_BLK_DEV_RAM_COUNT=16
387CONFIG_BLK_DEV_RAM_SIZE=4096
388CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
389# CONFIG_CDROM_PKTCDVD is not set
390# CONFIG_ATA_OVER_ETH is not set
391CONFIG_MISC_DEVICES=y
392# CONFIG_EEPROM_93CX6 is not set
393# CONFIG_IDE is not set
394
395#
396# SCSI device support
397#
398# CONFIG_RAID_ATTRS is not set
399CONFIG_SCSI=y
400CONFIG_SCSI_DMA=y
401# CONFIG_SCSI_TGT is not set
402# CONFIG_SCSI_NETLINK is not set
403CONFIG_SCSI_PROC_FS=y
404
405#
406# SCSI support type (disk, tape, CD-ROM)
407#
408CONFIG_BLK_DEV_SD=y
409# CONFIG_CHR_DEV_ST is not set
410# CONFIG_CHR_DEV_OSST is not set
411# CONFIG_BLK_DEV_SR is not set
412# CONFIG_CHR_DEV_SG is not set
413# CONFIG_CHR_DEV_SCH is not set
414
415#
416# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
417#
418# CONFIG_SCSI_MULTI_LUN is not set
419# CONFIG_SCSI_CONSTANTS is not set
420# CONFIG_SCSI_LOGGING is not set
421# CONFIG_SCSI_SCAN_ASYNC is not set
422CONFIG_SCSI_WAIT_SCAN=m
423
424#
425# SCSI Transports
426#
427# CONFIG_SCSI_SPI_ATTRS is not set
428# CONFIG_SCSI_FC_ATTRS is not set
429# CONFIG_SCSI_ISCSI_ATTRS is not set
430# CONFIG_SCSI_SAS_LIBSAS is not set
431# CONFIG_SCSI_SRP_ATTRS is not set
432CONFIG_SCSI_LOWLEVEL=y
433# CONFIG_ISCSI_TCP is not set
434# CONFIG_SCSI_DEBUG is not set
435# CONFIG_ATA is not set
436# CONFIG_MD is not set
437CONFIG_NETDEVICES=y
438# CONFIG_NETDEVICES_MULTIQUEUE is not set
439# CONFIG_DUMMY is not set
440# CONFIG_BONDING is not set
441# CONFIG_MACVLAN is not set
442# CONFIG_EQUALIZER is not set
443# CONFIG_TUN is not set
444# CONFIG_VETH is not set
445# CONFIG_PHYLIB is not set
446CONFIG_NET_ETHERNET=y
447CONFIG_MII=y
448# CONFIG_AX88796 is not set
449# CONFIG_STNIC is not set
450CONFIG_SMC91X=y
451# CONFIG_IBM_NEW_EMAC_ZMII is not set
452# CONFIG_IBM_NEW_EMAC_RGMII is not set
453# CONFIG_IBM_NEW_EMAC_TAH is not set
454# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
455# CONFIG_B44 is not set
456# CONFIG_NETDEV_1000 is not set
457# CONFIG_NETDEV_10000 is not set
458
459#
460# Wireless LAN
461#
462# CONFIG_WLAN_PRE80211 is not set
463# CONFIG_WLAN_80211 is not set
464# CONFIG_WAN is not set
465# CONFIG_PPP is not set
466# CONFIG_SLIP is not set
467# CONFIG_NETCONSOLE is not set
468# CONFIG_NETPOLL is not set
469# CONFIG_NET_POLL_CONTROLLER is not set
470# CONFIG_ISDN is not set
471# CONFIG_PHONE is not set
472
473#
474# Input device support
475#
476CONFIG_INPUT=y
477# CONFIG_INPUT_FF_MEMLESS is not set
478# CONFIG_INPUT_POLLDEV is not set
479
480#
481# Userland interfaces
482#
483# CONFIG_INPUT_MOUSEDEV is not set
484# CONFIG_INPUT_JOYDEV is not set
485# CONFIG_INPUT_EVDEV is not set
486# CONFIG_INPUT_EVBUG is not set
487
488#
489# Input Device Drivers
490#
491# CONFIG_INPUT_KEYBOARD is not set
492# CONFIG_INPUT_MOUSE is not set
493# CONFIG_INPUT_JOYSTICK is not set
494# CONFIG_INPUT_TABLET is not set
495# CONFIG_INPUT_TOUCHSCREEN is not set
496# CONFIG_INPUT_MISC is not set
497
498#
499# Hardware I/O ports
500#
501# CONFIG_SERIO is not set
502# CONFIG_GAMEPORT is not set
503
504#
505# Character devices
506#
507CONFIG_VT=y
508CONFIG_VT_CONSOLE=y
509CONFIG_HW_CONSOLE=y
510CONFIG_VT_HW_CONSOLE_BINDING=y
511# CONFIG_SERIAL_NONSTANDARD is not set
512
513#
514# Serial drivers
515#
516# CONFIG_SERIAL_8250 is not set
517
518#
519# Non-8250 serial port support
520#
521CONFIG_SERIAL_SH_SCI=y
522CONFIG_SERIAL_SH_SCI_NR_UARTS=3
523CONFIG_SERIAL_SH_SCI_CONSOLE=y
524CONFIG_SERIAL_CORE=y
525CONFIG_SERIAL_CORE_CONSOLE=y
526CONFIG_UNIX98_PTYS=y
527CONFIG_LEGACY_PTYS=y
528CONFIG_LEGACY_PTY_COUNT=256
529# CONFIG_IPMI_HANDLER is not set
530CONFIG_HW_RANDOM=y
531# CONFIG_R3964 is not set
532# CONFIG_RAW_DRIVER is not set
533# CONFIG_TCG_TPM is not set
534# CONFIG_I2C is not set
535
536#
537# SPI support
538#
539# CONFIG_SPI is not set
540# CONFIG_SPI_MASTER is not set
541# CONFIG_W1 is not set
542# CONFIG_POWER_SUPPLY is not set
543# CONFIG_HWMON is not set
544# CONFIG_WATCHDOG is not set
545
546#
547# Sonics Silicon Backplane
548#
549CONFIG_SSB_POSSIBLE=y
550# CONFIG_SSB is not set
551
552#
553# Multifunction device drivers
554#
555# CONFIG_MFD_SM501 is not set
556
557#
558# Multimedia devices
559#
560# CONFIG_VIDEO_DEV is not set
561# CONFIG_DVB_CORE is not set
562# CONFIG_DAB is not set
563
564#
565# Graphics support
566#
567# CONFIG_VGASTATE is not set
568# CONFIG_VIDEO_OUTPUT_CONTROL is not set
569# CONFIG_FB is not set
570# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
571
572#
573# Display device support
574#
575# CONFIG_DISPLAY_SUPPORT is not set
576
577#
578# Console display driver support
579#
580CONFIG_DUMMY_CONSOLE=y
581
582#
583# Sound
584#
585# CONFIG_SOUND is not set
586CONFIG_HID_SUPPORT=y
587CONFIG_HID=y
588# CONFIG_HID_DEBUG is not set
589# CONFIG_HIDRAW is not set
590CONFIG_USB_SUPPORT=y
591CONFIG_USB_ARCH_HAS_HCD=y
592# CONFIG_USB_ARCH_HAS_OHCI is not set
593# CONFIG_USB_ARCH_HAS_EHCI is not set
594# CONFIG_USB is not set
595
596#
597# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
598#
599CONFIG_USB_GADGET=y
600# CONFIG_USB_GADGET_DEBUG_FILES is not set
601# CONFIG_USB_GADGET_DEBUG_FS is not set
602CONFIG_USB_GADGET_SELECTED=y
603# CONFIG_USB_GADGET_AMD5536UDC is not set
604# CONFIG_USB_GADGET_ATMEL_USBA is not set
605# CONFIG_USB_GADGET_FSL_USB2 is not set
606# CONFIG_USB_GADGET_NET2280 is not set
607# CONFIG_USB_GADGET_PXA2XX is not set
608CONFIG_USB_GADGET_M66592=y
609CONFIG_USB_M66592=y
610CONFIG_SUPERH_BUILT_IN_M66592=y
611# CONFIG_USB_GADGET_GOKU is not set
612# CONFIG_USB_GADGET_LH7A40X is not set
613# CONFIG_USB_GADGET_OMAP is not set
614# CONFIG_USB_GADGET_S3C2410 is not set
615# CONFIG_USB_GADGET_AT91 is not set
616# CONFIG_USB_GADGET_DUMMY_HCD is not set
617CONFIG_USB_GADGET_DUALSPEED=y
618# CONFIG_USB_ZERO is not set
619# CONFIG_USB_ETH is not set
620# CONFIG_USB_GADGETFS is not set
621# CONFIG_USB_FILE_STORAGE is not set
622CONFIG_USB_G_SERIAL=y
623# CONFIG_USB_MIDI_GADGET is not set
624# CONFIG_USB_G_PRINTER is not set
625# CONFIG_MMC is not set
626# CONFIG_NEW_LEDS is not set
627CONFIG_RTC_LIB=y
628CONFIG_RTC_CLASS=y
629CONFIG_RTC_HCTOSYS=y
630CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
631# CONFIG_RTC_DEBUG is not set
632
633#
634# RTC interfaces
635#
636CONFIG_RTC_INTF_SYSFS=y
637CONFIG_RTC_INTF_PROC=y
638CONFIG_RTC_INTF_DEV=y
639# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
640# CONFIG_RTC_DRV_TEST is not set
641
642#
643# SPI RTC drivers
644#
645
646#
647# Platform RTC drivers
648#
649# CONFIG_RTC_DRV_DS1553 is not set
650# CONFIG_RTC_DRV_STK17TA8 is not set
651# CONFIG_RTC_DRV_DS1742 is not set
652# CONFIG_RTC_DRV_M48T86 is not set
653# CONFIG_RTC_DRV_M48T59 is not set
654# CONFIG_RTC_DRV_V3020 is not set
655
656#
657# on-CPU RTC drivers
658#
659CONFIG_RTC_DRV_SH=y
660
661#
662# Userspace I/O
663#
664# CONFIG_UIO is not set
665
666#
667# File systems
668#
669# CONFIG_EXT2_FS is not set
670# CONFIG_EXT3_FS is not set
671# CONFIG_EXT4DEV_FS is not set
672# CONFIG_REISERFS_FS is not set
673# CONFIG_JFS_FS is not set
674# CONFIG_FS_POSIX_ACL is not set
675# CONFIG_XFS_FS is not set
676# CONFIG_GFS2_FS is not set
677# CONFIG_OCFS2_FS is not set
678# CONFIG_MINIX_FS is not set
679# CONFIG_ROMFS_FS is not set
680# CONFIG_INOTIFY is not set
681# CONFIG_QUOTA is not set
682# CONFIG_DNOTIFY is not set
683# CONFIG_AUTOFS_FS is not set
684# CONFIG_AUTOFS4_FS is not set
685# CONFIG_FUSE_FS is not set
686
687#
688# CD-ROM/DVD Filesystems
689#
690# CONFIG_ISO9660_FS is not set
691# CONFIG_UDF_FS is not set
692
693#
694# DOS/FAT/NT Filesystems
695#
696# CONFIG_MSDOS_FS is not set
697# CONFIG_VFAT_FS is not set
698# CONFIG_NTFS_FS is not set
699
700#
701# Pseudo filesystems
702#
703CONFIG_PROC_FS=y
704CONFIG_PROC_KCORE=y
705CONFIG_PROC_SYSCTL=y
706CONFIG_SYSFS=y
707CONFIG_TMPFS=y
708# CONFIG_TMPFS_POSIX_ACL is not set
709# CONFIG_HUGETLBFS is not set
710# CONFIG_HUGETLB_PAGE is not set
711# CONFIG_CONFIGFS_FS is not set
712
713#
714# Miscellaneous filesystems
715#
716# CONFIG_ADFS_FS is not set
717# CONFIG_AFFS_FS is not set
718# CONFIG_HFS_FS is not set
719# CONFIG_HFSPLUS_FS is not set
720# CONFIG_BEFS_FS is not set
721# CONFIG_BFS_FS is not set
722# CONFIG_EFS_FS is not set
723# CONFIG_CRAMFS is not set
724# CONFIG_VXFS_FS is not set
725# CONFIG_HPFS_FS is not set
726# CONFIG_QNX4FS_FS is not set
727# CONFIG_SYSV_FS is not set
728# CONFIG_UFS_FS is not set
729# CONFIG_NETWORK_FILESYSTEMS is not set
730
731#
732# Partition Types
733#
734# CONFIG_PARTITION_ADVANCED is not set
735CONFIG_MSDOS_PARTITION=y
736# CONFIG_NLS is not set
737# CONFIG_DLM is not set
738
739#
740# Kernel hacking
741#
742CONFIG_TRACE_IRQFLAGS_SUPPORT=y
743# CONFIG_PRINTK_TIME is not set
744CONFIG_ENABLE_WARN_DEPRECATED=y
745CONFIG_ENABLE_MUST_CHECK=y
746# CONFIG_MAGIC_SYSRQ is not set
747# CONFIG_UNUSED_SYMBOLS is not set
748CONFIG_DEBUG_FS=y
749# CONFIG_HEADERS_CHECK is not set
750# CONFIG_DEBUG_KERNEL is not set
751# CONFIG_DEBUG_BUGVERBOSE is not set
752# CONFIG_SAMPLES is not set
753# CONFIG_SH_STANDARD_BIOS is not set
754CONFIG_EARLY_SCIF_CONSOLE=y
755CONFIG_EARLY_SCIF_CONSOLE_PORT=0xffe00000
756CONFIG_EARLY_PRINTK=y
757# CONFIG_SH_KGDB is not set
758
759#
760# Security options
761#
762# CONFIG_KEYS is not set
763# CONFIG_SECURITY is not set
764# CONFIG_SECURITY_FILE_CAPABILITIES is not set
765CONFIG_CRYPTO=y
766# CONFIG_CRYPTO_SEQIV is not set
767# CONFIG_CRYPTO_MANAGER is not set
768# CONFIG_CRYPTO_HMAC is not set
769# CONFIG_CRYPTO_XCBC is not set
770# CONFIG_CRYPTO_NULL is not set
771# CONFIG_CRYPTO_MD4 is not set
772# CONFIG_CRYPTO_MD5 is not set
773# CONFIG_CRYPTO_SHA1 is not set
774# CONFIG_CRYPTO_SHA256 is not set
775# CONFIG_CRYPTO_SHA512 is not set
776# CONFIG_CRYPTO_WP512 is not set
777# CONFIG_CRYPTO_TGR192 is not set
778# CONFIG_CRYPTO_GF128MUL is not set
779# CONFIG_CRYPTO_ECB is not set
780# CONFIG_CRYPTO_CBC is not set
781# CONFIG_CRYPTO_PCBC is not set
782# CONFIG_CRYPTO_LRW is not set
783# CONFIG_CRYPTO_XTS is not set
784# CONFIG_CRYPTO_CTR is not set
785# CONFIG_CRYPTO_GCM is not set
786# CONFIG_CRYPTO_CCM is not set
787# CONFIG_CRYPTO_CRYPTD is not set
788# CONFIG_CRYPTO_DES is not set
789# CONFIG_CRYPTO_FCRYPT is not set
790# CONFIG_CRYPTO_BLOWFISH is not set
791# CONFIG_CRYPTO_TWOFISH is not set
792# CONFIG_CRYPTO_SERPENT is not set
793# CONFIG_CRYPTO_AES is not set
794# CONFIG_CRYPTO_CAST5 is not set
795# CONFIG_CRYPTO_CAST6 is not set
796# CONFIG_CRYPTO_TEA is not set
797# CONFIG_CRYPTO_ARC4 is not set
798# CONFIG_CRYPTO_KHAZAD is not set
799# CONFIG_CRYPTO_ANUBIS is not set
800# CONFIG_CRYPTO_SEED is not set
801# CONFIG_CRYPTO_SALSA20 is not set
802# CONFIG_CRYPTO_DEFLATE is not set
803# CONFIG_CRYPTO_MICHAEL_MIC is not set
804# CONFIG_CRYPTO_CRC32C is not set
805# CONFIG_CRYPTO_CAMELLIA is not set
806# CONFIG_CRYPTO_TEST is not set
807# CONFIG_CRYPTO_AUTHENC is not set
808# CONFIG_CRYPTO_LZO is not set
809CONFIG_CRYPTO_HW=y
810
811#
812# Library routines
813#
814CONFIG_BITREVERSE=y
815# CONFIG_CRC_CCITT is not set
816# CONFIG_CRC16 is not set
817# CONFIG_CRC_ITU_T is not set
818CONFIG_CRC32=y
819# CONFIG_CRC7 is not set
820# CONFIG_LIBCRC32C is not set
821CONFIG_PLIST=y
822CONFIG_HAS_IOMEM=y
823CONFIG_HAS_IOPORT=y
824CONFIG_HAS_DMA=y
diff --git a/arch/sh/configs/rts7751r2d1_defconfig b/arch/sh/configs/rts7751r2d1_defconfig
index 2dc754e5b733..3a915fd436d9 100644
--- a/arch/sh/configs/rts7751r2d1_defconfig
+++ b/arch/sh/configs/rts7751r2d1_defconfig
@@ -1,9 +1,10 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.23-rc2 3# Linux kernel version: 2.6.24
4# Tue Aug 14 18:04:44 2007 4# Thu Feb 7 16:25:55 2008
5# 5#
6CONFIG_SUPERH=y 6CONFIG_SUPERH=y
7CONFIG_SUPERH32=y
7CONFIG_RWSEM_GENERIC_SPINLOCK=y 8CONFIG_RWSEM_GENERIC_SPINLOCK=y
8CONFIG_GENERIC_BUG=y 9CONFIG_GENERIC_BUG=y
9CONFIG_GENERIC_FIND_NEXT_BIT=y 10CONFIG_GENERIC_FIND_NEXT_BIT=y
@@ -36,9 +37,14 @@ CONFIG_SYSVIPC_SYSCTL=y
36# CONFIG_BSD_PROCESS_ACCT is not set 37# CONFIG_BSD_PROCESS_ACCT is not set
37# CONFIG_TASKSTATS is not set 38# CONFIG_TASKSTATS is not set
38# CONFIG_USER_NS is not set 39# CONFIG_USER_NS is not set
40# CONFIG_PID_NS is not set
39# CONFIG_AUDIT is not set 41# CONFIG_AUDIT is not set
40# CONFIG_IKCONFIG is not set 42# CONFIG_IKCONFIG is not set
41CONFIG_LOG_BUF_SHIFT=14 43CONFIG_LOG_BUF_SHIFT=14
44# CONFIG_CGROUPS is not set
45CONFIG_FAIR_GROUP_SCHED=y
46CONFIG_FAIR_USER_SCHED=y
47# CONFIG_FAIR_CGROUP_SCHED is not set
42CONFIG_SYSFS_DEPRECATED=y 48CONFIG_SYSFS_DEPRECATED=y
43# CONFIG_RELAY is not set 49# CONFIG_RELAY is not set
44# CONFIG_BLK_DEV_INITRD is not set 50# CONFIG_BLK_DEV_INITRD is not set
@@ -53,6 +59,7 @@ CONFIG_HOTPLUG=y
53CONFIG_PRINTK=y 59CONFIG_PRINTK=y
54CONFIG_BUG=y 60CONFIG_BUG=y
55CONFIG_ELF_CORE=y 61CONFIG_ELF_CORE=y
62CONFIG_COMPAT_BRK=y
56CONFIG_BASE_FULL=y 63CONFIG_BASE_FULL=y
57CONFIG_FUTEX=y 64CONFIG_FUTEX=y
58CONFIG_ANON_INODES=y 65CONFIG_ANON_INODES=y
@@ -65,6 +72,13 @@ CONFIG_VM_EVENT_COUNTERS=y
65CONFIG_SLAB=y 72CONFIG_SLAB=y
66# CONFIG_SLUB is not set 73# CONFIG_SLUB is not set
67# CONFIG_SLOB is not set 74# CONFIG_SLOB is not set
75CONFIG_PROFILING=y
76# CONFIG_MARKERS is not set
77CONFIG_OPROFILE=y
78CONFIG_HAVE_OPROFILE=y
79# CONFIG_HAVE_KPROBES is not set
80CONFIG_PROC_PAGE_MONITOR=y
81CONFIG_SLABINFO=y
68CONFIG_RT_MUTEXES=y 82CONFIG_RT_MUTEXES=y
69# CONFIG_TINY_SHMEM is not set 83# CONFIG_TINY_SHMEM is not set
70CONFIG_BASE_SMALL=0 84CONFIG_BASE_SMALL=0
@@ -91,13 +105,17 @@ CONFIG_DEFAULT_AS=y
91# CONFIG_DEFAULT_CFQ is not set 105# CONFIG_DEFAULT_CFQ is not set
92# CONFIG_DEFAULT_NOOP is not set 106# CONFIG_DEFAULT_NOOP is not set
93CONFIG_DEFAULT_IOSCHED="anticipatory" 107CONFIG_DEFAULT_IOSCHED="anticipatory"
108CONFIG_CLASSIC_RCU=y
109# CONFIG_PREEMPT_RCU is not set
94 110
95# 111#
96# System type 112# System type
97# 113#
98CONFIG_CPU_SH4=y 114CONFIG_CPU_SH4=y
99# CONFIG_CPU_SUBTYPE_SH7619 is not set 115# CONFIG_CPU_SUBTYPE_SH7619 is not set
116# CONFIG_CPU_SUBTYPE_SH7203 is not set
100# CONFIG_CPU_SUBTYPE_SH7206 is not set 117# CONFIG_CPU_SUBTYPE_SH7206 is not set
118# CONFIG_CPU_SUBTYPE_SH7263 is not set
101# CONFIG_CPU_SUBTYPE_SH7705 is not set 119# CONFIG_CPU_SUBTYPE_SH7705 is not set
102# CONFIG_CPU_SUBTYPE_SH7706 is not set 120# CONFIG_CPU_SUBTYPE_SH7706 is not set
103# CONFIG_CPU_SUBTYPE_SH7707 is not set 121# CONFIG_CPU_SUBTYPE_SH7707 is not set
@@ -105,6 +123,8 @@ CONFIG_CPU_SH4=y
105# CONFIG_CPU_SUBTYPE_SH7709 is not set 123# CONFIG_CPU_SUBTYPE_SH7709 is not set
106# CONFIG_CPU_SUBTYPE_SH7710 is not set 124# CONFIG_CPU_SUBTYPE_SH7710 is not set
107# CONFIG_CPU_SUBTYPE_SH7712 is not set 125# CONFIG_CPU_SUBTYPE_SH7712 is not set
126# CONFIG_CPU_SUBTYPE_SH7720 is not set
127# CONFIG_CPU_SUBTYPE_SH7721 is not set
108# CONFIG_CPU_SUBTYPE_SH7750 is not set 128# CONFIG_CPU_SUBTYPE_SH7750 is not set
109# CONFIG_CPU_SUBTYPE_SH7091 is not set 129# CONFIG_CPU_SUBTYPE_SH7091 is not set
110# CONFIG_CPU_SUBTYPE_SH7750R is not set 130# CONFIG_CPU_SUBTYPE_SH7750R is not set
@@ -113,14 +133,15 @@ CONFIG_CPU_SH4=y
113CONFIG_CPU_SUBTYPE_SH7751R=y 133CONFIG_CPU_SUBTYPE_SH7751R=y
114# CONFIG_CPU_SUBTYPE_SH7760 is not set 134# CONFIG_CPU_SUBTYPE_SH7760 is not set
115# CONFIG_CPU_SUBTYPE_SH4_202 is not set 135# CONFIG_CPU_SUBTYPE_SH4_202 is not set
116# CONFIG_CPU_SUBTYPE_ST40STB1 is not set 136# CONFIG_CPU_SUBTYPE_SH7763 is not set
117# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
118# CONFIG_CPU_SUBTYPE_SH7770 is not set 137# CONFIG_CPU_SUBTYPE_SH7770 is not set
119# CONFIG_CPU_SUBTYPE_SH7780 is not set 138# CONFIG_CPU_SUBTYPE_SH7780 is not set
120# CONFIG_CPU_SUBTYPE_SH7785 is not set 139# CONFIG_CPU_SUBTYPE_SH7785 is not set
121# CONFIG_CPU_SUBTYPE_SHX3 is not set 140# CONFIG_CPU_SUBTYPE_SHX3 is not set
122# CONFIG_CPU_SUBTYPE_SH7343 is not set 141# CONFIG_CPU_SUBTYPE_SH7343 is not set
123# CONFIG_CPU_SUBTYPE_SH7722 is not set 142# CONFIG_CPU_SUBTYPE_SH7722 is not set
143# CONFIG_CPU_SUBTYPE_SH5_101 is not set
144# CONFIG_CPU_SUBTYPE_SH5_103 is not set
124 145
125# 146#
126# Memory management options 147# Memory management options
@@ -130,6 +151,7 @@ CONFIG_MMU=y
130CONFIG_PAGE_OFFSET=0x80000000 151CONFIG_PAGE_OFFSET=0x80000000
131CONFIG_MEMORY_START=0x0c000000 152CONFIG_MEMORY_START=0x0c000000
132CONFIG_MEMORY_SIZE=0x04000000 153CONFIG_MEMORY_SIZE=0x04000000
154CONFIG_29BIT=y
133CONFIG_VSYSCALL=y 155CONFIG_VSYSCALL=y
134CONFIG_ARCH_FLATMEM_ENABLE=y 156CONFIG_ARCH_FLATMEM_ENABLE=y
135CONFIG_ARCH_SPARSEMEM_ENABLE=y 157CONFIG_ARCH_SPARSEMEM_ENABLE=y
@@ -147,6 +169,7 @@ CONFIG_FLATMEM_MANUAL=y
147CONFIG_FLATMEM=y 169CONFIG_FLATMEM=y
148CONFIG_FLAT_NODE_MEM_MAP=y 170CONFIG_FLAT_NODE_MEM_MAP=y
149CONFIG_SPARSEMEM_STATIC=y 171CONFIG_SPARSEMEM_STATIC=y
172# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
150CONFIG_SPLIT_PTLOCK_CPUS=4 173CONFIG_SPLIT_PTLOCK_CPUS=4
151# CONFIG_RESOURCES_64BIT is not set 174# CONFIG_RESOURCES_64BIT is not set
152CONFIG_ZONE_DMA_FLAG=0 175CONFIG_ZONE_DMA_FLAG=0
@@ -168,23 +191,22 @@ CONFIG_CPU_LITTLE_ENDIAN=y
168CONFIG_SH_FPU=y 191CONFIG_SH_FPU=y
169# CONFIG_SH_STORE_QUEUES is not set 192# CONFIG_SH_STORE_QUEUES is not set
170CONFIG_CPU_HAS_INTEVT=y 193CONFIG_CPU_HAS_INTEVT=y
171CONFIG_CPU_HAS_INTC_IRQ=y
172CONFIG_CPU_HAS_SR_RB=y 194CONFIG_CPU_HAS_SR_RB=y
173CONFIG_CPU_HAS_PTEA=y 195CONFIG_CPU_HAS_PTEA=y
196CONFIG_CPU_HAS_FPU=y
174 197
175# 198#
176# Board support 199# Board support
177# 200#
178# CONFIG_SH_7751_SYSTEMH is not set 201# CONFIG_SH_7751_SYSTEMH is not set
179# CONFIG_SH_SECUREEDGE5410 is not set 202# CONFIG_SH_SECUREEDGE5410 is not set
180# CONFIG_SH_HS7751RVOIP is not set
181CONFIG_SH_RTS7751R2D=y 203CONFIG_SH_RTS7751R2D=y
182# CONFIG_SH_LANDISK is not set 204# CONFIG_SH_LANDISK is not set
183# CONFIG_SH_TITAN is not set 205# CONFIG_SH_TITAN is not set
184# CONFIG_SH_LBOX_RE2 is not set 206# CONFIG_SH_LBOX_RE2 is not set
185 207
186# 208#
187# RTS7751R2D options 209# RTS7751R2D Board Revision
188# 210#
189# CONFIG_RTS7751R2D_PLUS is not set 211# CONFIG_RTS7751R2D_PLUS is not set
190CONFIG_RTS7751R2D_1=y 212CONFIG_RTS7751R2D_1=y
@@ -198,6 +220,7 @@ CONFIG_SH_PCLK_FREQ=60000000
198# CONFIG_TICK_ONESHOT is not set 220# CONFIG_TICK_ONESHOT is not set
199# CONFIG_NO_HZ is not set 221# CONFIG_NO_HZ is not set
200# CONFIG_HIGH_RES_TIMERS is not set 222# CONFIG_HIGH_RES_TIMERS is not set
223CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
201 224
202# 225#
203# CPU Frequency scaling 226# CPU Frequency scaling
@@ -227,11 +250,15 @@ CONFIG_HZ_250=y
227# CONFIG_HZ_300 is not set 250# CONFIG_HZ_300 is not set
228# CONFIG_HZ_1000 is not set 251# CONFIG_HZ_1000 is not set
229CONFIG_HZ=250 252CONFIG_HZ=250
253# CONFIG_SCHED_HRTICK is not set
230# CONFIG_KEXEC is not set 254# CONFIG_KEXEC is not set
231# CONFIG_CRASH_DUMP is not set 255# CONFIG_CRASH_DUMP is not set
232CONFIG_PREEMPT_NONE=y 256CONFIG_PREEMPT_NONE=y
233# CONFIG_PREEMPT_VOLUNTARY is not set 257# CONFIG_PREEMPT_VOLUNTARY is not set
234# CONFIG_PREEMPT is not set 258# CONFIG_PREEMPT is not set
259CONFIG_RCU_TRACE=y
260CONFIG_GUSA=y
261# CONFIG_GUSA_RB is not set
235 262
236# 263#
237# Boot options 264# Boot options
@@ -250,10 +277,7 @@ CONFIG_SH_PCIDMA_NONCOHERENT=y
250CONFIG_PCI_AUTO=y 277CONFIG_PCI_AUTO=y
251CONFIG_PCI_AUTO_UPDATE_RESOURCES=y 278CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
252# CONFIG_ARCH_SUPPORTS_MSI is not set 279# CONFIG_ARCH_SUPPORTS_MSI is not set
253 280CONFIG_PCI_LEGACY=y
254#
255# PCCARD (PCMCIA/CardBus) support
256#
257# CONFIG_PCCARD is not set 281# CONFIG_PCCARD is not set
258CONFIG_HOTPLUG_PCI=y 282CONFIG_HOTPLUG_PCI=y
259# CONFIG_HOTPLUG_PCI_FAKE is not set 283# CONFIG_HOTPLUG_PCI_FAKE is not set
@@ -281,6 +305,7 @@ CONFIG_XFRM=y
281# CONFIG_XFRM_USER is not set 305# CONFIG_XFRM_USER is not set
282# CONFIG_XFRM_SUB_POLICY is not set 306# CONFIG_XFRM_SUB_POLICY is not set
283# CONFIG_XFRM_MIGRATE is not set 307# CONFIG_XFRM_MIGRATE is not set
308# CONFIG_XFRM_STATISTICS is not set
284# CONFIG_NET_KEY is not set 309# CONFIG_NET_KEY is not set
285CONFIG_INET=y 310CONFIG_INET=y
286# CONFIG_IP_MULTICAST is not set 311# CONFIG_IP_MULTICAST is not set
@@ -299,6 +324,7 @@ CONFIG_IP_FIB_HASH=y
299CONFIG_INET_XFRM_MODE_TRANSPORT=y 324CONFIG_INET_XFRM_MODE_TRANSPORT=y
300CONFIG_INET_XFRM_MODE_TUNNEL=y 325CONFIG_INET_XFRM_MODE_TUNNEL=y
301CONFIG_INET_XFRM_MODE_BEET=y 326CONFIG_INET_XFRM_MODE_BEET=y
327# CONFIG_INET_LRO is not set
302CONFIG_INET_DIAG=y 328CONFIG_INET_DIAG=y
303CONFIG_INET_TCP_DIAG=y 329CONFIG_INET_TCP_DIAG=y
304# CONFIG_TCP_CONG_ADVANCED is not set 330# CONFIG_TCP_CONG_ADVANCED is not set
@@ -324,10 +350,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
324# CONFIG_LAPB is not set 350# CONFIG_LAPB is not set
325# CONFIG_ECONET is not set 351# CONFIG_ECONET is not set
326# CONFIG_WAN_ROUTER is not set 352# CONFIG_WAN_ROUTER is not set
327
328#
329# QoS and/or fair queueing
330#
331# CONFIG_NET_SCHED is not set 353# CONFIG_NET_SCHED is not set
332 354
333# 355#
@@ -335,6 +357,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
335# 357#
336# CONFIG_NET_PKTGEN is not set 358# CONFIG_NET_PKTGEN is not set
337# CONFIG_HAMRADIO is not set 359# CONFIG_HAMRADIO is not set
360# CONFIG_CAN is not set
338# CONFIG_IRDA is not set 361# CONFIG_IRDA is not set
339# CONFIG_BT is not set 362# CONFIG_BT is not set
340# CONFIG_AF_RXRPC is not set 363# CONFIG_AF_RXRPC is not set
@@ -356,6 +379,7 @@ CONFIG_WIRELESS_EXT=y
356# 379#
357# Generic Driver Options 380# Generic Driver Options
358# 381#
382CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
359CONFIG_STANDALONE=y 383CONFIG_STANDALONE=y
360CONFIG_PREVENT_FIRMWARE_BUILD=y 384CONFIG_PREVENT_FIRMWARE_BUILD=y
361CONFIG_FW_LOADER=m 385CONFIG_FW_LOADER=m
@@ -371,6 +395,7 @@ CONFIG_BLK_DEV=y
371# CONFIG_BLK_DEV_LOOP is not set 395# CONFIG_BLK_DEV_LOOP is not set
372# CONFIG_BLK_DEV_NBD is not set 396# CONFIG_BLK_DEV_NBD is not set
373# CONFIG_BLK_DEV_SX8 is not set 397# CONFIG_BLK_DEV_SX8 is not set
398# CONFIG_BLK_DEV_UB is not set
374CONFIG_BLK_DEV_RAM=y 399CONFIG_BLK_DEV_RAM=y
375CONFIG_BLK_DEV_RAM_COUNT=16 400CONFIG_BLK_DEV_RAM_COUNT=16
376CONFIG_BLK_DEV_RAM_SIZE=4096 401CONFIG_BLK_DEV_RAM_SIZE=4096
@@ -420,6 +445,7 @@ CONFIG_SCSI_WAIT_SCAN=m
420# CONFIG_SCSI_FC_ATTRS is not set 445# CONFIG_SCSI_FC_ATTRS is not set
421# CONFIG_SCSI_ISCSI_ATTRS is not set 446# CONFIG_SCSI_ISCSI_ATTRS is not set
422# CONFIG_SCSI_SAS_LIBSAS is not set 447# CONFIG_SCSI_SAS_LIBSAS is not set
448# CONFIG_SCSI_SRP_ATTRS is not set
423CONFIG_SCSI_LOWLEVEL=y 449CONFIG_SCSI_LOWLEVEL=y
424# CONFIG_ISCSI_TCP is not set 450# CONFIG_ISCSI_TCP is not set
425# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 451# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -493,7 +519,9 @@ CONFIG_ATA=y
493# CONFIG_PATA_MPIIX is not set 519# CONFIG_PATA_MPIIX is not set
494# CONFIG_PATA_OLDPIIX is not set 520# CONFIG_PATA_OLDPIIX is not set
495# CONFIG_PATA_NETCELL is not set 521# CONFIG_PATA_NETCELL is not set
522# CONFIG_PATA_NINJA32 is not set
496# CONFIG_PATA_NS87410 is not set 523# CONFIG_PATA_NS87410 is not set
524# CONFIG_PATA_NS87415 is not set
497# CONFIG_PATA_OPTI is not set 525# CONFIG_PATA_OPTI is not set
498# CONFIG_PATA_OPTIDMA is not set 526# CONFIG_PATA_OPTIDMA is not set
499# CONFIG_PATA_PDC_OLD is not set 527# CONFIG_PATA_PDC_OLD is not set
@@ -508,14 +536,7 @@ CONFIG_ATA=y
508# CONFIG_PATA_WINBOND is not set 536# CONFIG_PATA_WINBOND is not set
509CONFIG_PATA_PLATFORM=y 537CONFIG_PATA_PLATFORM=y
510# CONFIG_MD is not set 538# CONFIG_MD is not set
511
512#
513# Fusion MPT device support
514#
515# CONFIG_FUSION is not set 539# 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 540
520# 541#
521# IEEE 1394 (FireWire) support 542# IEEE 1394 (FireWire) support
@@ -530,25 +551,31 @@ CONFIG_NETDEVICES=y
530# CONFIG_MACVLAN is not set 551# CONFIG_MACVLAN is not set
531# CONFIG_EQUALIZER is not set 552# CONFIG_EQUALIZER is not set
532# CONFIG_TUN is not set 553# CONFIG_TUN is not set
554# CONFIG_VETH is not set
533# CONFIG_ARCNET is not set 555# CONFIG_ARCNET is not set
534# CONFIG_PHYLIB is not set 556# CONFIG_PHYLIB is not set
535CONFIG_NET_ETHERNET=y 557CONFIG_NET_ETHERNET=y
536CONFIG_MII=y 558CONFIG_MII=y
559# CONFIG_AX88796 is not set
537# CONFIG_STNIC is not set 560# CONFIG_STNIC is not set
538# CONFIG_HAPPYMEAL is not set 561# CONFIG_HAPPYMEAL is not set
539# CONFIG_SUNGEM is not set 562# CONFIG_SUNGEM is not set
540# CONFIG_CASSINI is not set 563# CONFIG_CASSINI is not set
541# CONFIG_NET_VENDOR_3COM is not set 564# CONFIG_NET_VENDOR_3COM is not set
542# CONFIG_SMC91X is not set 565# CONFIG_SMC91X is not set
566# CONFIG_ENC28J60 is not set
543# CONFIG_NET_TULIP is not set 567# CONFIG_NET_TULIP is not set
544# CONFIG_HP100 is not set 568# CONFIG_HP100 is not set
569# CONFIG_IBM_NEW_EMAC_ZMII is not set
570# CONFIG_IBM_NEW_EMAC_RGMII is not set
571# CONFIG_IBM_NEW_EMAC_TAH is not set
572# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
545CONFIG_NET_PCI=y 573CONFIG_NET_PCI=y
546# CONFIG_PCNET32 is not set 574# CONFIG_PCNET32 is not set
547# CONFIG_AMD8111_ETH is not set 575# CONFIG_AMD8111_ETH is not set
548# CONFIG_ADAPTEC_STARFIRE is not set 576# CONFIG_ADAPTEC_STARFIRE is not set
549# CONFIG_B44 is not set 577# CONFIG_B44 is not set
550# CONFIG_FORCEDETH is not set 578# CONFIG_FORCEDETH is not set
551# CONFIG_DGRS is not set
552# CONFIG_EEPRO100 is not set 579# CONFIG_EEPRO100 is not set
553# CONFIG_E100 is not set 580# CONFIG_E100 is not set
554# CONFIG_FEALNX is not set 581# CONFIG_FEALNX is not set
@@ -560,6 +587,7 @@ CONFIG_8139TOO=y
560# CONFIG_8139TOO_TUNE_TWISTER is not set 587# CONFIG_8139TOO_TUNE_TWISTER is not set
561# CONFIG_8139TOO_8129 is not set 588# CONFIG_8139TOO_8129 is not set
562# CONFIG_8139_OLD_RX_RESET is not set 589# CONFIG_8139_OLD_RX_RESET is not set
590# CONFIG_R6040 is not set
563# CONFIG_SIS900 is not set 591# CONFIG_SIS900 is not set
564# CONFIG_EPIC100 is not set 592# CONFIG_EPIC100 is not set
565# CONFIG_SUNDANCE is not set 593# CONFIG_SUNDANCE is not set
@@ -570,6 +598,10 @@ CONFIG_NETDEV_1000=y
570# CONFIG_ACENIC is not set 598# CONFIG_ACENIC is not set
571# CONFIG_DL2K is not set 599# CONFIG_DL2K is not set
572# CONFIG_E1000 is not set 600# CONFIG_E1000 is not set
601# CONFIG_E1000E is not set
602# CONFIG_E1000E_ENABLED is not set
603# CONFIG_IP1000 is not set
604# CONFIG_IGB is not set
573# CONFIG_NS83820 is not set 605# CONFIG_NS83820 is not set
574# CONFIG_HAMACHI is not set 606# CONFIG_HAMACHI is not set
575# CONFIG_YELLOWFIN is not set 607# CONFIG_YELLOWFIN is not set
@@ -577,6 +609,7 @@ CONFIG_NETDEV_1000=y
577# CONFIG_SIS190 is not set 609# CONFIG_SIS190 is not set
578# CONFIG_SKGE is not set 610# CONFIG_SKGE is not set
579# CONFIG_SKY2 is not set 611# CONFIG_SKY2 is not set
612# CONFIG_SK98LIN is not set
580# CONFIG_VIA_VELOCITY is not set 613# CONFIG_VIA_VELOCITY is not set
581# CONFIG_TIGON3 is not set 614# CONFIG_TIGON3 is not set
582# CONFIG_BNX2 is not set 615# CONFIG_BNX2 is not set
@@ -585,11 +618,15 @@ CONFIG_NETDEV_1000=y
585CONFIG_NETDEV_10000=y 618CONFIG_NETDEV_10000=y
586# CONFIG_CHELSIO_T1 is not set 619# CONFIG_CHELSIO_T1 is not set
587# CONFIG_CHELSIO_T3 is not set 620# CONFIG_CHELSIO_T3 is not set
621# CONFIG_IXGBE is not set
588# CONFIG_IXGB is not set 622# CONFIG_IXGB is not set
589# CONFIG_S2IO is not set 623# CONFIG_S2IO is not set
590# CONFIG_MYRI10GE is not set 624# CONFIG_MYRI10GE is not set
591# CONFIG_NETXEN_NIC is not set 625# CONFIG_NETXEN_NIC is not set
626# CONFIG_NIU is not set
592# CONFIG_MLX4_CORE is not set 627# CONFIG_MLX4_CORE is not set
628# CONFIG_TEHUTI is not set
629# CONFIG_BNX2X is not set
593# CONFIG_TR is not set 630# CONFIG_TR is not set
594 631
595# 632#
@@ -597,13 +634,21 @@ CONFIG_NETDEV_10000=y
597# 634#
598# CONFIG_WLAN_PRE80211 is not set 635# CONFIG_WLAN_PRE80211 is not set
599# CONFIG_WLAN_80211 is not set 636# CONFIG_WLAN_80211 is not set
637
638#
639# USB Network Adapters
640#
641# CONFIG_USB_CATC is not set
642# CONFIG_USB_KAWETH is not set
643# CONFIG_USB_PEGASUS is not set
644# CONFIG_USB_RTL8150 is not set
645# CONFIG_USB_USBNET is not set
600# CONFIG_WAN is not set 646# CONFIG_WAN is not set
601# CONFIG_FDDI is not set 647# CONFIG_FDDI is not set
602# CONFIG_HIPPI is not set 648# CONFIG_HIPPI is not set
603# CONFIG_PPP is not set 649# CONFIG_PPP is not set
604# CONFIG_SLIP is not set 650# CONFIG_SLIP is not set
605# CONFIG_NET_FC is not set 651# CONFIG_NET_FC is not set
606# CONFIG_SHAPER is not set
607# CONFIG_NETCONSOLE is not set 652# CONFIG_NETCONSOLE is not set
608# CONFIG_NETPOLL is not set 653# CONFIG_NETPOLL is not set
609# CONFIG_NET_POLL_CONTROLLER is not set 654# CONFIG_NET_POLL_CONTROLLER is not set
@@ -622,7 +667,6 @@ CONFIG_INPUT=y
622# 667#
623# CONFIG_INPUT_MOUSEDEV is not set 668# CONFIG_INPUT_MOUSEDEV is not set
624# CONFIG_INPUT_JOYDEV is not set 669# CONFIG_INPUT_JOYDEV is not set
625# CONFIG_INPUT_TSDEV is not set
626# CONFIG_INPUT_EVDEV is not set 670# CONFIG_INPUT_EVDEV is not set
627# CONFIG_INPUT_EVBUG is not set 671# CONFIG_INPUT_EVBUG is not set
628 672
@@ -650,6 +694,7 @@ CONFIG_VT_CONSOLE=y
650CONFIG_HW_CONSOLE=y 694CONFIG_HW_CONSOLE=y
651CONFIG_VT_HW_CONSOLE_BINDING=y 695CONFIG_VT_HW_CONSOLE_BINDING=y
652# CONFIG_SERIAL_NONSTANDARD is not set 696# CONFIG_SERIAL_NONSTANDARD is not set
697# CONFIG_NOZOMI is not set
653 698
654# 699#
655# Serial drivers 700# Serial drivers
@@ -674,11 +719,9 @@ CONFIG_UNIX98_PTYS=y
674CONFIG_LEGACY_PTYS=y 719CONFIG_LEGACY_PTYS=y
675CONFIG_LEGACY_PTY_COUNT=256 720CONFIG_LEGACY_PTY_COUNT=256
676# CONFIG_IPMI_HANDLER is not set 721# CONFIG_IPMI_HANDLER is not set
677# CONFIG_WATCHDOG is not set
678CONFIG_HW_RANDOM=y 722CONFIG_HW_RANDOM=y
679# CONFIG_R3964 is not set 723# CONFIG_R3964 is not set
680# CONFIG_APPLICOM is not set 724# CONFIG_APPLICOM is not set
681# CONFIG_DRM is not set
682# CONFIG_RAW_DRIVER is not set 725# CONFIG_RAW_DRIVER is not set
683# CONFIG_TCG_TPM is not set 726# CONFIG_TCG_TPM is not set
684CONFIG_DEVPORT=y 727CONFIG_DEVPORT=y
@@ -687,16 +730,30 @@ CONFIG_DEVPORT=y
687# 730#
688# SPI support 731# SPI support
689# 732#
690# CONFIG_SPI is not set 733CONFIG_SPI=y
691# CONFIG_SPI_MASTER is not set 734CONFIG_SPI_MASTER=y
735
736#
737# SPI Master Controller Drivers
738#
739CONFIG_SPI_BITBANG=y
740CONFIG_SPI_SH_SCI=y
741
742#
743# SPI Protocol Masters
744#
745# CONFIG_SPI_AT25 is not set
746# CONFIG_SPI_SPIDEV is not set
747# CONFIG_SPI_TLE62X0 is not set
692# CONFIG_W1 is not set 748# CONFIG_W1 is not set
693# CONFIG_POWER_SUPPLY is not set 749# CONFIG_POWER_SUPPLY is not set
694CONFIG_HWMON=y 750CONFIG_HWMON=y
695# CONFIG_HWMON_VID is not set 751# CONFIG_HWMON_VID is not set
696# CONFIG_SENSORS_ABITUGURU is not set 752# CONFIG_SENSORS_I5K_AMB is not set
697# CONFIG_SENSORS_ABITUGURU3 is not set
698# CONFIG_SENSORS_F71805F is not set 753# CONFIG_SENSORS_F71805F is not set
754# CONFIG_SENSORS_F71882FG is not set
699# CONFIG_SENSORS_IT87 is not set 755# CONFIG_SENSORS_IT87 is not set
756# CONFIG_SENSORS_LM70 is not set
700# CONFIG_SENSORS_PC87360 is not set 757# CONFIG_SENSORS_PC87360 is not set
701# CONFIG_SENSORS_PC87427 is not set 758# CONFIG_SENSORS_PC87427 is not set
702# CONFIG_SENSORS_SIS5595 is not set 759# CONFIG_SENSORS_SIS5595 is not set
@@ -708,6 +765,13 @@ CONFIG_HWMON=y
708# CONFIG_SENSORS_W83627HF is not set 765# CONFIG_SENSORS_W83627HF is not set
709# CONFIG_SENSORS_W83627EHF is not set 766# CONFIG_SENSORS_W83627EHF is not set
710# CONFIG_HWMON_DEBUG_CHIP is not set 767# CONFIG_HWMON_DEBUG_CHIP is not set
768# CONFIG_WATCHDOG is not set
769
770#
771# Sonics Silicon Backplane
772#
773CONFIG_SSB_POSSIBLE=y
774# CONFIG_SSB is not set
711 775
712# 776#
713# Multifunction device drivers 777# Multifunction device drivers
@@ -720,16 +784,12 @@ CONFIG_MFD_SM501=y
720# CONFIG_VIDEO_DEV is not set 784# CONFIG_VIDEO_DEV is not set
721# CONFIG_DVB_CORE is not set 785# CONFIG_DVB_CORE is not set
722CONFIG_DAB=y 786CONFIG_DAB=y
787# CONFIG_USB_DABUSB is not set
723 788
724# 789#
725# Graphics support 790# Graphics support
726# 791#
727# CONFIG_BACKLIGHT_LCD_SUPPORT is not set 792# CONFIG_DRM is not set
728
729#
730# Display device support
731#
732# CONFIG_DISPLAY_SUPPORT is not set
733# CONFIG_VGASTATE is not set 793# CONFIG_VGASTATE is not set
734CONFIG_VIDEO_OUTPUT_CONTROL=m 794CONFIG_VIDEO_OUTPUT_CONTROL=m
735CONFIG_FB=y 795CONFIG_FB=y
@@ -738,6 +798,7 @@ CONFIG_FB=y
738CONFIG_FB_CFB_FILLRECT=y 798CONFIG_FB_CFB_FILLRECT=y
739CONFIG_FB_CFB_COPYAREA=y 799CONFIG_FB_CFB_COPYAREA=y
740CONFIG_FB_CFB_IMAGEBLIT=y 800CONFIG_FB_CFB_IMAGEBLIT=y
801# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
741# CONFIG_FB_SYS_FILLRECT is not set 802# CONFIG_FB_SYS_FILLRECT is not set
742# CONFIG_FB_SYS_COPYAREA is not set 803# CONFIG_FB_SYS_COPYAREA is not set
743# CONFIG_FB_SYS_IMAGEBLIT is not set 804# CONFIG_FB_SYS_IMAGEBLIT is not set
@@ -777,6 +838,12 @@ CONFIG_FB_DEFERRED_IO=y
777# CONFIG_FB_PM3 is not set 838# CONFIG_FB_PM3 is not set
778CONFIG_FB_SM501=y 839CONFIG_FB_SM501=y
779# CONFIG_FB_VIRTUAL is not set 840# CONFIG_FB_VIRTUAL is not set
841# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
842
843#
844# Display device support
845#
846# CONFIG_DISPLAY_SUPPORT is not set
780 847
781# 848#
782# Console display driver support 849# Console display driver support
@@ -844,6 +911,7 @@ CONFIG_SND_AC97_CODEC=m
844# CONFIG_SND_BT87X is not set 911# CONFIG_SND_BT87X is not set
845# CONFIG_SND_CA0106 is not set 912# CONFIG_SND_CA0106 is not set
846# CONFIG_SND_CMIPCI is not set 913# CONFIG_SND_CMIPCI is not set
914# CONFIG_SND_OXYGEN is not set
847# CONFIG_SND_CS4281 is not set 915# CONFIG_SND_CS4281 is not set
848# CONFIG_SND_CS46XX is not set 916# CONFIG_SND_CS46XX is not set
849# CONFIG_SND_DARLA20 is not set 917# CONFIG_SND_DARLA20 is not set
@@ -868,6 +936,7 @@ CONFIG_SND_AC97_CODEC=m
868# CONFIG_SND_HDA_INTEL is not set 936# CONFIG_SND_HDA_INTEL is not set
869# CONFIG_SND_HDSP is not set 937# CONFIG_SND_HDSP is not set
870# CONFIG_SND_HDSPM is not set 938# CONFIG_SND_HDSPM is not set
939# CONFIG_SND_HIFIER is not set
871# CONFIG_SND_ICE1712 is not set 940# CONFIG_SND_ICE1712 is not set
872# CONFIG_SND_ICE1724 is not set 941# CONFIG_SND_ICE1724 is not set
873# CONFIG_SND_INTEL8X0 is not set 942# CONFIG_SND_INTEL8X0 is not set
@@ -885,16 +954,27 @@ CONFIG_SND_AC97_CODEC=m
885# CONFIG_SND_TRIDENT is not set 954# CONFIG_SND_TRIDENT is not set
886# CONFIG_SND_VIA82XX is not set 955# CONFIG_SND_VIA82XX is not set
887# CONFIG_SND_VIA82XX_MODEM is not set 956# CONFIG_SND_VIA82XX_MODEM is not set
957# CONFIG_SND_VIRTUOSO is not set
888# CONFIG_SND_VX222 is not set 958# CONFIG_SND_VX222 is not set
889CONFIG_SND_YMFPCI=m 959CONFIG_SND_YMFPCI=m
890CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y 960CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
891# CONFIG_SND_AC97_POWER_SAVE is not set 961# CONFIG_SND_AC97_POWER_SAVE is not set
892 962
893# 963#
964# SPI devices
965#
966
967#
894# SUPERH devices 968# SUPERH devices
895# 969#
896 970
897# 971#
972# USB devices
973#
974# CONFIG_SND_USB_AUDIO is not set
975# CONFIG_SND_USB_CAIAQ is not set
976
977#
898# System on Chip audio support 978# System on Chip audio support
899# 979#
900# CONFIG_SND_SOC is not set 980# CONFIG_SND_SOC is not set
@@ -904,6 +984,10 @@ CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
904# 984#
905 985
906# 986#
987# ALSA SoC audio for Freescale SOCs
988#
989
990#
907# Open Sound System 991# Open Sound System
908# 992#
909CONFIG_SOUND_PRIME=m 993CONFIG_SOUND_PRIME=m
@@ -914,19 +998,104 @@ CONFIG_AC97_BUS=m
914CONFIG_HID_SUPPORT=y 998CONFIG_HID_SUPPORT=y
915CONFIG_HID=y 999CONFIG_HID=y
916# CONFIG_HID_DEBUG is not set 1000# CONFIG_HID_DEBUG is not set
1001# CONFIG_HIDRAW is not set
1002
1003#
1004# USB Input Devices
1005#
1006CONFIG_USB_HID=y
1007# CONFIG_USB_HIDINPUT_POWERBOOK is not set
1008# CONFIG_HID_FF is not set
1009# CONFIG_USB_HIDDEV is not set
917CONFIG_USB_SUPPORT=y 1010CONFIG_USB_SUPPORT=y
918CONFIG_USB_ARCH_HAS_HCD=y 1011CONFIG_USB_ARCH_HAS_HCD=y
919CONFIG_USB_ARCH_HAS_OHCI=y 1012CONFIG_USB_ARCH_HAS_OHCI=y
920CONFIG_USB_ARCH_HAS_EHCI=y 1013CONFIG_USB_ARCH_HAS_EHCI=y
921# CONFIG_USB is not set 1014CONFIG_USB=y
1015# CONFIG_USB_DEBUG is not set
1016CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
1017
1018#
1019# Miscellaneous USB options
1020#
1021# CONFIG_USB_DEVICEFS is not set
1022CONFIG_USB_DEVICE_CLASS=y
1023# CONFIG_USB_DYNAMIC_MINORS is not set
1024# CONFIG_USB_OTG is not set
1025
1026#
1027# USB Host Controller Drivers
1028#
1029# CONFIG_USB_EHCI_HCD is not set
1030# CONFIG_USB_ISP116X_HCD is not set
1031CONFIG_USB_OHCI_HCD=y
1032# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1033# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1034CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1035# CONFIG_USB_UHCI_HCD is not set
1036# CONFIG_USB_SL811_HCD is not set
1037# CONFIG_USB_R8A66597_HCD is not set
1038
1039#
1040# USB Device Class drivers
1041#
1042# CONFIG_USB_ACM is not set
1043# CONFIG_USB_PRINTER is not set
922 1044
923# 1045#
924# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 1046# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
925# 1047#
926 1048
927# 1049#
928# USB Gadget Support 1050# may also be needed; see USB_STORAGE Help for more information
1051#
1052CONFIG_USB_STORAGE=y
1053# CONFIG_USB_STORAGE_DEBUG is not set
1054# CONFIG_USB_STORAGE_DATAFAB is not set
1055# CONFIG_USB_STORAGE_FREECOM is not set
1056# CONFIG_USB_STORAGE_ISD200 is not set
1057# CONFIG_USB_STORAGE_DPCM is not set
1058# CONFIG_USB_STORAGE_USBAT is not set
1059# CONFIG_USB_STORAGE_SDDR09 is not set
1060# CONFIG_USB_STORAGE_SDDR55 is not set
1061# CONFIG_USB_STORAGE_JUMPSHOT is not set
1062# CONFIG_USB_STORAGE_ALAUDA is not set
1063# CONFIG_USB_STORAGE_KARMA is not set
1064CONFIG_USB_LIBUSUAL=y
1065
1066#
1067# USB Imaging devices
1068#
1069# CONFIG_USB_MDC800 is not set
1070# CONFIG_USB_MICROTEK is not set
1071# CONFIG_USB_MON is not set
1072
1073#
1074# USB port drivers
1075#
1076# CONFIG_USB_SERIAL is not set
1077
1078#
1079# USB Miscellaneous drivers
929# 1080#
1081# CONFIG_USB_EMI62 is not set
1082# CONFIG_USB_EMI26 is not set
1083# CONFIG_USB_ADUTUX is not set
1084# CONFIG_USB_AUERSWALD is not set
1085# CONFIG_USB_RIO500 is not set
1086# CONFIG_USB_LEGOTOWER is not set
1087# CONFIG_USB_LCD is not set
1088# CONFIG_USB_BERRY_CHARGE is not set
1089# CONFIG_USB_LED is not set
1090# CONFIG_USB_CYPRESS_CY7C63 is not set
1091# CONFIG_USB_CYTHERM is not set
1092# CONFIG_USB_PHIDGET is not set
1093# CONFIG_USB_IDMOUSE is not set
1094# CONFIG_USB_FTDI_ELAN is not set
1095# CONFIG_USB_APPLEDISPLAY is not set
1096# CONFIG_USB_LD is not set
1097# CONFIG_USB_TRANCEVIBRATOR is not set
1098# CONFIG_USB_IOWARRIOR is not set
930# CONFIG_USB_GADGET is not set 1099# CONFIG_USB_GADGET is not set
931# CONFIG_MMC is not set 1100# CONFIG_MMC is not set
932# CONFIG_NEW_LEDS is not set 1101# CONFIG_NEW_LEDS is not set
@@ -949,13 +1118,17 @@ CONFIG_RTC_INTF_DEV=y
949# 1118#
950# SPI RTC drivers 1119# SPI RTC drivers
951# 1120#
1121# CONFIG_RTC_DRV_MAX6902 is not set
1122CONFIG_RTC_DRV_R9701=y
1123# CONFIG_RTC_DRV_RS5C348 is not set
952 1124
953# 1125#
954# Platform RTC drivers 1126# Platform RTC drivers
955# 1127#
1128# CONFIG_RTC_DRV_DS1511 is not set
956# CONFIG_RTC_DRV_DS1553 is not set 1129# CONFIG_RTC_DRV_DS1553 is not set
957# CONFIG_RTC_DRV_STK17TA8 is not set
958# CONFIG_RTC_DRV_DS1742 is not set 1130# CONFIG_RTC_DRV_DS1742 is not set
1131# CONFIG_RTC_DRV_STK17TA8 is not set
959# CONFIG_RTC_DRV_M48T86 is not set 1132# CONFIG_RTC_DRV_M48T86 is not set
960# CONFIG_RTC_DRV_M48T59 is not set 1133# CONFIG_RTC_DRV_M48T59 is not set
961# CONFIG_RTC_DRV_V3020 is not set 1134# CONFIG_RTC_DRV_V3020 is not set
@@ -963,20 +1136,7 @@ CONFIG_RTC_INTF_DEV=y
963# 1136#
964# on-CPU RTC drivers 1137# on-CPU RTC drivers
965# 1138#
966CONFIG_RTC_DRV_SH=y 1139# CONFIG_RTC_DRV_SH is not set
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 1140
981# 1141#
982# Userspace I/O 1142# Userspace I/O
@@ -1034,7 +1194,6 @@ CONFIG_TMPFS=y
1034# CONFIG_TMPFS_POSIX_ACL is not set 1194# CONFIG_TMPFS_POSIX_ACL is not set
1035# CONFIG_HUGETLBFS is not set 1195# CONFIG_HUGETLBFS is not set
1036# CONFIG_HUGETLB_PAGE is not set 1196# CONFIG_HUGETLB_PAGE is not set
1037CONFIG_RAMFS=y
1038# CONFIG_CONFIGFS_FS is not set 1197# CONFIG_CONFIGFS_FS is not set
1039 1198
1040# 1199#
@@ -1053,10 +1212,7 @@ CONFIG_RAMFS=y
1053# CONFIG_QNX4FS_FS is not set 1212# CONFIG_QNX4FS_FS is not set
1054# CONFIG_SYSV_FS is not set 1213# CONFIG_SYSV_FS is not set
1055# CONFIG_UFS_FS is not set 1214# CONFIG_UFS_FS is not set
1056 1215CONFIG_NETWORK_FILESYSTEMS=y
1057#
1058# Network File Systems
1059#
1060# CONFIG_NFS_FS is not set 1216# CONFIG_NFS_FS is not set
1061# CONFIG_NFSD is not set 1217# CONFIG_NFSD is not set
1062# CONFIG_SMB_FS is not set 1218# CONFIG_SMB_FS is not set
@@ -1070,10 +1226,6 @@ CONFIG_RAMFS=y
1070# 1226#
1071# CONFIG_PARTITION_ADVANCED is not set 1227# CONFIG_PARTITION_ADVANCED is not set
1072CONFIG_MSDOS_PARTITION=y 1228CONFIG_MSDOS_PARTITION=y
1073
1074#
1075# Native Language Support
1076#
1077CONFIG_NLS=y 1229CONFIG_NLS=y
1078CONFIG_NLS_DEFAULT="iso8859-1" 1230CONFIG_NLS_DEFAULT="iso8859-1"
1079# CONFIG_NLS_CODEPAGE_437 is not set 1231# CONFIG_NLS_CODEPAGE_437 is not set
@@ -1114,30 +1266,22 @@ CONFIG_NLS_CODEPAGE_932=y
1114# CONFIG_NLS_KOI8_R is not set 1266# CONFIG_NLS_KOI8_R is not set
1115# CONFIG_NLS_KOI8_U is not set 1267# CONFIG_NLS_KOI8_U is not set
1116# CONFIG_NLS_UTF8 is not set 1268# CONFIG_NLS_UTF8 is not set
1117
1118#
1119# Distributed Lock Manager
1120#
1121# CONFIG_DLM is not set 1269# CONFIG_DLM is not set
1122 1270
1123# 1271#
1124# Profiling support
1125#
1126CONFIG_PROFILING=y
1127CONFIG_OPROFILE=y
1128
1129#
1130# Kernel hacking 1272# Kernel hacking
1131# 1273#
1132CONFIG_TRACE_IRQFLAGS_SUPPORT=y 1274CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1133# CONFIG_PRINTK_TIME is not set 1275# CONFIG_PRINTK_TIME is not set
1276CONFIG_ENABLE_WARN_DEPRECATED=y
1134CONFIG_ENABLE_MUST_CHECK=y 1277CONFIG_ENABLE_MUST_CHECK=y
1135# CONFIG_MAGIC_SYSRQ is not set 1278# CONFIG_MAGIC_SYSRQ is not set
1136# CONFIG_UNUSED_SYMBOLS is not set 1279# CONFIG_UNUSED_SYMBOLS is not set
1137# CONFIG_DEBUG_FS is not set 1280CONFIG_DEBUG_FS=y
1138# CONFIG_HEADERS_CHECK is not set 1281# CONFIG_HEADERS_CHECK is not set
1139# CONFIG_DEBUG_KERNEL is not set 1282# CONFIG_DEBUG_KERNEL is not set
1140# CONFIG_DEBUG_BUGVERBOSE is not set 1283# CONFIG_DEBUG_BUGVERBOSE is not set
1284# CONFIG_SAMPLES is not set
1141# CONFIG_SH_STANDARD_BIOS is not set 1285# CONFIG_SH_STANDARD_BIOS is not set
1142CONFIG_EARLY_SCIF_CONSOLE=y 1286CONFIG_EARLY_SCIF_CONSOLE=y
1143CONFIG_EARLY_SCIF_CONSOLE_PORT=0xffe80000 1287CONFIG_EARLY_SCIF_CONSOLE_PORT=0xffe80000
@@ -1149,7 +1293,53 @@ CONFIG_EARLY_PRINTK=y
1149# 1293#
1150# CONFIG_KEYS is not set 1294# CONFIG_KEYS is not set
1151# CONFIG_SECURITY is not set 1295# CONFIG_SECURITY is not set
1152# CONFIG_CRYPTO is not set 1296# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1297CONFIG_CRYPTO=y
1298# CONFIG_CRYPTO_SEQIV is not set
1299# CONFIG_CRYPTO_MANAGER is not set
1300# CONFIG_CRYPTO_HMAC is not set
1301# CONFIG_CRYPTO_XCBC is not set
1302# CONFIG_CRYPTO_NULL is not set
1303# CONFIG_CRYPTO_MD4 is not set
1304# CONFIG_CRYPTO_MD5 is not set
1305# CONFIG_CRYPTO_SHA1 is not set
1306# CONFIG_CRYPTO_SHA256 is not set
1307# CONFIG_CRYPTO_SHA512 is not set
1308# CONFIG_CRYPTO_WP512 is not set
1309# CONFIG_CRYPTO_TGR192 is not set
1310# CONFIG_CRYPTO_GF128MUL is not set
1311# CONFIG_CRYPTO_ECB is not set
1312# CONFIG_CRYPTO_CBC is not set
1313# CONFIG_CRYPTO_PCBC is not set
1314# CONFIG_CRYPTO_LRW is not set
1315# CONFIG_CRYPTO_XTS is not set
1316# CONFIG_CRYPTO_CTR is not set
1317# CONFIG_CRYPTO_GCM is not set
1318# CONFIG_CRYPTO_CCM is not set
1319# CONFIG_CRYPTO_CRYPTD is not set
1320# CONFIG_CRYPTO_DES is not set
1321# CONFIG_CRYPTO_FCRYPT is not set
1322# CONFIG_CRYPTO_BLOWFISH is not set
1323# CONFIG_CRYPTO_TWOFISH is not set
1324# CONFIG_CRYPTO_SERPENT is not set
1325# CONFIG_CRYPTO_AES is not set
1326# CONFIG_CRYPTO_CAST5 is not set
1327# CONFIG_CRYPTO_CAST6 is not set
1328# CONFIG_CRYPTO_TEA is not set
1329# CONFIG_CRYPTO_ARC4 is not set
1330# CONFIG_CRYPTO_KHAZAD is not set
1331# CONFIG_CRYPTO_ANUBIS is not set
1332# CONFIG_CRYPTO_SEED is not set
1333# CONFIG_CRYPTO_SALSA20 is not set
1334# CONFIG_CRYPTO_DEFLATE is not set
1335# CONFIG_CRYPTO_MICHAEL_MIC is not set
1336# CONFIG_CRYPTO_CRC32C is not set
1337# CONFIG_CRYPTO_CAMELLIA is not set
1338# CONFIG_CRYPTO_TEST is not set
1339# CONFIG_CRYPTO_AUTHENC is not set
1340# CONFIG_CRYPTO_LZO is not set
1341CONFIG_CRYPTO_HW=y
1342# CONFIG_CRYPTO_DEV_HIFN_795X is not set
1153 1343
1154# 1344#
1155# Library routines 1345# Library routines
diff --git a/arch/sh/configs/rts7751r2dplus_defconfig b/arch/sh/configs/rts7751r2dplus_defconfig
index 4ff5a752dcd9..0a6d3b9e648b 100644
--- a/arch/sh/configs/rts7751r2dplus_defconfig
+++ b/arch/sh/configs/rts7751r2dplus_defconfig
@@ -1,9 +1,10 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.23-rc2 3# Linux kernel version: 2.6.24
4# Tue Aug 14 16:33:08 2007 4# Thu Feb 7 16:17:47 2008
5# 5#
6CONFIG_SUPERH=y 6CONFIG_SUPERH=y
7CONFIG_SUPERH32=y
7CONFIG_RWSEM_GENERIC_SPINLOCK=y 8CONFIG_RWSEM_GENERIC_SPINLOCK=y
8CONFIG_GENERIC_BUG=y 9CONFIG_GENERIC_BUG=y
9CONFIG_GENERIC_FIND_NEXT_BIT=y 10CONFIG_GENERIC_FIND_NEXT_BIT=y
@@ -36,9 +37,14 @@ CONFIG_SYSVIPC_SYSCTL=y
36# CONFIG_BSD_PROCESS_ACCT is not set 37# CONFIG_BSD_PROCESS_ACCT is not set
37# CONFIG_TASKSTATS is not set 38# CONFIG_TASKSTATS is not set
38# CONFIG_USER_NS is not set 39# CONFIG_USER_NS is not set
40# CONFIG_PID_NS is not set
39# CONFIG_AUDIT is not set 41# CONFIG_AUDIT is not set
40# CONFIG_IKCONFIG is not set 42# CONFIG_IKCONFIG is not set
41CONFIG_LOG_BUF_SHIFT=14 43CONFIG_LOG_BUF_SHIFT=14
44# CONFIG_CGROUPS is not set
45CONFIG_FAIR_GROUP_SCHED=y
46CONFIG_FAIR_USER_SCHED=y
47# CONFIG_FAIR_CGROUP_SCHED is not set
42CONFIG_SYSFS_DEPRECATED=y 48CONFIG_SYSFS_DEPRECATED=y
43# CONFIG_RELAY is not set 49# CONFIG_RELAY is not set
44# CONFIG_BLK_DEV_INITRD is not set 50# CONFIG_BLK_DEV_INITRD is not set
@@ -53,6 +59,7 @@ CONFIG_HOTPLUG=y
53CONFIG_PRINTK=y 59CONFIG_PRINTK=y
54CONFIG_BUG=y 60CONFIG_BUG=y
55CONFIG_ELF_CORE=y 61CONFIG_ELF_CORE=y
62CONFIG_COMPAT_BRK=y
56CONFIG_BASE_FULL=y 63CONFIG_BASE_FULL=y
57CONFIG_FUTEX=y 64CONFIG_FUTEX=y
58CONFIG_ANON_INODES=y 65CONFIG_ANON_INODES=y
@@ -65,6 +72,13 @@ CONFIG_VM_EVENT_COUNTERS=y
65CONFIG_SLAB=y 72CONFIG_SLAB=y
66# CONFIG_SLUB is not set 73# CONFIG_SLUB is not set
67# CONFIG_SLOB is not set 74# CONFIG_SLOB is not set
75CONFIG_PROFILING=y
76# CONFIG_MARKERS is not set
77CONFIG_OPROFILE=y
78CONFIG_HAVE_OPROFILE=y
79# CONFIG_HAVE_KPROBES is not set
80CONFIG_PROC_PAGE_MONITOR=y
81CONFIG_SLABINFO=y
68CONFIG_RT_MUTEXES=y 82CONFIG_RT_MUTEXES=y
69# CONFIG_TINY_SHMEM is not set 83# CONFIG_TINY_SHMEM is not set
70CONFIG_BASE_SMALL=0 84CONFIG_BASE_SMALL=0
@@ -91,13 +105,17 @@ CONFIG_DEFAULT_AS=y
91# CONFIG_DEFAULT_CFQ is not set 105# CONFIG_DEFAULT_CFQ is not set
92# CONFIG_DEFAULT_NOOP is not set 106# CONFIG_DEFAULT_NOOP is not set
93CONFIG_DEFAULT_IOSCHED="anticipatory" 107CONFIG_DEFAULT_IOSCHED="anticipatory"
108CONFIG_CLASSIC_RCU=y
109# CONFIG_PREEMPT_RCU is not set
94 110
95# 111#
96# System type 112# System type
97# 113#
98CONFIG_CPU_SH4=y 114CONFIG_CPU_SH4=y
99# CONFIG_CPU_SUBTYPE_SH7619 is not set 115# CONFIG_CPU_SUBTYPE_SH7619 is not set
116# CONFIG_CPU_SUBTYPE_SH7203 is not set
100# CONFIG_CPU_SUBTYPE_SH7206 is not set 117# CONFIG_CPU_SUBTYPE_SH7206 is not set
118# CONFIG_CPU_SUBTYPE_SH7263 is not set
101# CONFIG_CPU_SUBTYPE_SH7705 is not set 119# CONFIG_CPU_SUBTYPE_SH7705 is not set
102# CONFIG_CPU_SUBTYPE_SH7706 is not set 120# CONFIG_CPU_SUBTYPE_SH7706 is not set
103# CONFIG_CPU_SUBTYPE_SH7707 is not set 121# CONFIG_CPU_SUBTYPE_SH7707 is not set
@@ -105,6 +123,8 @@ CONFIG_CPU_SH4=y
105# CONFIG_CPU_SUBTYPE_SH7709 is not set 123# CONFIG_CPU_SUBTYPE_SH7709 is not set
106# CONFIG_CPU_SUBTYPE_SH7710 is not set 124# CONFIG_CPU_SUBTYPE_SH7710 is not set
107# CONFIG_CPU_SUBTYPE_SH7712 is not set 125# CONFIG_CPU_SUBTYPE_SH7712 is not set
126# CONFIG_CPU_SUBTYPE_SH7720 is not set
127# CONFIG_CPU_SUBTYPE_SH7721 is not set
108# CONFIG_CPU_SUBTYPE_SH7750 is not set 128# CONFIG_CPU_SUBTYPE_SH7750 is not set
109# CONFIG_CPU_SUBTYPE_SH7091 is not set 129# CONFIG_CPU_SUBTYPE_SH7091 is not set
110# CONFIG_CPU_SUBTYPE_SH7750R is not set 130# CONFIG_CPU_SUBTYPE_SH7750R is not set
@@ -113,14 +133,15 @@ CONFIG_CPU_SH4=y
113CONFIG_CPU_SUBTYPE_SH7751R=y 133CONFIG_CPU_SUBTYPE_SH7751R=y
114# CONFIG_CPU_SUBTYPE_SH7760 is not set 134# CONFIG_CPU_SUBTYPE_SH7760 is not set
115# CONFIG_CPU_SUBTYPE_SH4_202 is not set 135# CONFIG_CPU_SUBTYPE_SH4_202 is not set
116# CONFIG_CPU_SUBTYPE_ST40STB1 is not set 136# CONFIG_CPU_SUBTYPE_SH7763 is not set
117# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
118# CONFIG_CPU_SUBTYPE_SH7770 is not set 137# CONFIG_CPU_SUBTYPE_SH7770 is not set
119# CONFIG_CPU_SUBTYPE_SH7780 is not set 138# CONFIG_CPU_SUBTYPE_SH7780 is not set
120# CONFIG_CPU_SUBTYPE_SH7785 is not set 139# CONFIG_CPU_SUBTYPE_SH7785 is not set
121# CONFIG_CPU_SUBTYPE_SHX3 is not set 140# CONFIG_CPU_SUBTYPE_SHX3 is not set
122# CONFIG_CPU_SUBTYPE_SH7343 is not set 141# CONFIG_CPU_SUBTYPE_SH7343 is not set
123# CONFIG_CPU_SUBTYPE_SH7722 is not set 142# CONFIG_CPU_SUBTYPE_SH7722 is not set
143# CONFIG_CPU_SUBTYPE_SH5_101 is not set
144# CONFIG_CPU_SUBTYPE_SH5_103 is not set
124 145
125# 146#
126# Memory management options 147# Memory management options
@@ -130,6 +151,7 @@ CONFIG_MMU=y
130CONFIG_PAGE_OFFSET=0x80000000 151CONFIG_PAGE_OFFSET=0x80000000
131CONFIG_MEMORY_START=0x0c000000 152CONFIG_MEMORY_START=0x0c000000
132CONFIG_MEMORY_SIZE=0x04000000 153CONFIG_MEMORY_SIZE=0x04000000
154CONFIG_29BIT=y
133CONFIG_VSYSCALL=y 155CONFIG_VSYSCALL=y
134CONFIG_ARCH_FLATMEM_ENABLE=y 156CONFIG_ARCH_FLATMEM_ENABLE=y
135CONFIG_ARCH_SPARSEMEM_ENABLE=y 157CONFIG_ARCH_SPARSEMEM_ENABLE=y
@@ -147,6 +169,7 @@ CONFIG_FLATMEM_MANUAL=y
147CONFIG_FLATMEM=y 169CONFIG_FLATMEM=y
148CONFIG_FLAT_NODE_MEM_MAP=y 170CONFIG_FLAT_NODE_MEM_MAP=y
149CONFIG_SPARSEMEM_STATIC=y 171CONFIG_SPARSEMEM_STATIC=y
172# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
150CONFIG_SPLIT_PTLOCK_CPUS=4 173CONFIG_SPLIT_PTLOCK_CPUS=4
151# CONFIG_RESOURCES_64BIT is not set 174# CONFIG_RESOURCES_64BIT is not set
152CONFIG_ZONE_DMA_FLAG=0 175CONFIG_ZONE_DMA_FLAG=0
@@ -168,23 +191,22 @@ CONFIG_CPU_LITTLE_ENDIAN=y
168CONFIG_SH_FPU=y 191CONFIG_SH_FPU=y
169# CONFIG_SH_STORE_QUEUES is not set 192# CONFIG_SH_STORE_QUEUES is not set
170CONFIG_CPU_HAS_INTEVT=y 193CONFIG_CPU_HAS_INTEVT=y
171CONFIG_CPU_HAS_INTC_IRQ=y
172CONFIG_CPU_HAS_SR_RB=y 194CONFIG_CPU_HAS_SR_RB=y
173CONFIG_CPU_HAS_PTEA=y 195CONFIG_CPU_HAS_PTEA=y
196CONFIG_CPU_HAS_FPU=y
174 197
175# 198#
176# Board support 199# Board support
177# 200#
178# CONFIG_SH_7751_SYSTEMH is not set 201# CONFIG_SH_7751_SYSTEMH is not set
179# CONFIG_SH_SECUREEDGE5410 is not set 202# CONFIG_SH_SECUREEDGE5410 is not set
180# CONFIG_SH_HS7751RVOIP is not set
181CONFIG_SH_RTS7751R2D=y 203CONFIG_SH_RTS7751R2D=y
182# CONFIG_SH_LANDISK is not set 204# CONFIG_SH_LANDISK is not set
183# CONFIG_SH_TITAN is not set 205# CONFIG_SH_TITAN is not set
184# CONFIG_SH_LBOX_RE2 is not set 206# CONFIG_SH_LBOX_RE2 is not set
185 207
186# 208#
187# RTS7751R2D options 209# RTS7751R2D Board Revision
188# 210#
189CONFIG_RTS7751R2D_PLUS=y 211CONFIG_RTS7751R2D_PLUS=y
190# CONFIG_RTS7751R2D_1 is not set 212# CONFIG_RTS7751R2D_1 is not set
@@ -198,6 +220,7 @@ CONFIG_SH_PCLK_FREQ=60000000
198# CONFIG_TICK_ONESHOT is not set 220# CONFIG_TICK_ONESHOT is not set
199# CONFIG_NO_HZ is not set 221# CONFIG_NO_HZ is not set
200# CONFIG_HIGH_RES_TIMERS is not set 222# CONFIG_HIGH_RES_TIMERS is not set
223CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
201 224
202# 225#
203# CPU Frequency scaling 226# CPU Frequency scaling
@@ -227,11 +250,15 @@ CONFIG_HZ_250=y
227# CONFIG_HZ_300 is not set 250# CONFIG_HZ_300 is not set
228# CONFIG_HZ_1000 is not set 251# CONFIG_HZ_1000 is not set
229CONFIG_HZ=250 252CONFIG_HZ=250
253# CONFIG_SCHED_HRTICK is not set
230# CONFIG_KEXEC is not set 254# CONFIG_KEXEC is not set
231# CONFIG_CRASH_DUMP is not set 255# CONFIG_CRASH_DUMP is not set
232CONFIG_PREEMPT_NONE=y 256CONFIG_PREEMPT_NONE=y
233# CONFIG_PREEMPT_VOLUNTARY is not set 257# CONFIG_PREEMPT_VOLUNTARY is not set
234# CONFIG_PREEMPT is not set 258# CONFIG_PREEMPT is not set
259CONFIG_RCU_TRACE=y
260CONFIG_GUSA=y
261# CONFIG_GUSA_RB is not set
235 262
236# 263#
237# Boot options 264# Boot options
@@ -250,10 +277,7 @@ CONFIG_SH_PCIDMA_NONCOHERENT=y
250CONFIG_PCI_AUTO=y 277CONFIG_PCI_AUTO=y
251CONFIG_PCI_AUTO_UPDATE_RESOURCES=y 278CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
252# CONFIG_ARCH_SUPPORTS_MSI is not set 279# CONFIG_ARCH_SUPPORTS_MSI is not set
253 280CONFIG_PCI_LEGACY=y
254#
255# PCCARD (PCMCIA/CardBus) support
256#
257# CONFIG_PCCARD is not set 281# CONFIG_PCCARD is not set
258CONFIG_HOTPLUG_PCI=y 282CONFIG_HOTPLUG_PCI=y
259# CONFIG_HOTPLUG_PCI_FAKE is not set 283# CONFIG_HOTPLUG_PCI_FAKE is not set
@@ -281,6 +305,7 @@ CONFIG_XFRM=y
281# CONFIG_XFRM_USER is not set 305# CONFIG_XFRM_USER is not set
282# CONFIG_XFRM_SUB_POLICY is not set 306# CONFIG_XFRM_SUB_POLICY is not set
283# CONFIG_XFRM_MIGRATE is not set 307# CONFIG_XFRM_MIGRATE is not set
308# CONFIG_XFRM_STATISTICS is not set
284# CONFIG_NET_KEY is not set 309# CONFIG_NET_KEY is not set
285CONFIG_INET=y 310CONFIG_INET=y
286# CONFIG_IP_MULTICAST is not set 311# CONFIG_IP_MULTICAST is not set
@@ -299,6 +324,7 @@ CONFIG_IP_FIB_HASH=y
299CONFIG_INET_XFRM_MODE_TRANSPORT=y 324CONFIG_INET_XFRM_MODE_TRANSPORT=y
300CONFIG_INET_XFRM_MODE_TUNNEL=y 325CONFIG_INET_XFRM_MODE_TUNNEL=y
301CONFIG_INET_XFRM_MODE_BEET=y 326CONFIG_INET_XFRM_MODE_BEET=y
327# CONFIG_INET_LRO is not set
302CONFIG_INET_DIAG=y 328CONFIG_INET_DIAG=y
303CONFIG_INET_TCP_DIAG=y 329CONFIG_INET_TCP_DIAG=y
304# CONFIG_TCP_CONG_ADVANCED is not set 330# CONFIG_TCP_CONG_ADVANCED is not set
@@ -324,10 +350,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
324# CONFIG_LAPB is not set 350# CONFIG_LAPB is not set
325# CONFIG_ECONET is not set 351# CONFIG_ECONET is not set
326# CONFIG_WAN_ROUTER is not set 352# CONFIG_WAN_ROUTER is not set
327
328#
329# QoS and/or fair queueing
330#
331# CONFIG_NET_SCHED is not set 353# CONFIG_NET_SCHED is not set
332 354
333# 355#
@@ -335,6 +357,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
335# 357#
336# CONFIG_NET_PKTGEN is not set 358# CONFIG_NET_PKTGEN is not set
337# CONFIG_HAMRADIO is not set 359# CONFIG_HAMRADIO is not set
360# CONFIG_CAN is not set
338# CONFIG_IRDA is not set 361# CONFIG_IRDA is not set
339# CONFIG_BT is not set 362# CONFIG_BT is not set
340# CONFIG_AF_RXRPC is not set 363# CONFIG_AF_RXRPC is not set
@@ -356,6 +379,7 @@ CONFIG_WIRELESS_EXT=y
356# 379#
357# Generic Driver Options 380# Generic Driver Options
358# 381#
382CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
359CONFIG_STANDALONE=y 383CONFIG_STANDALONE=y
360CONFIG_PREVENT_FIRMWARE_BUILD=y 384CONFIG_PREVENT_FIRMWARE_BUILD=y
361CONFIG_FW_LOADER=m 385CONFIG_FW_LOADER=m
@@ -371,6 +395,7 @@ CONFIG_BLK_DEV=y
371# CONFIG_BLK_DEV_LOOP is not set 395# CONFIG_BLK_DEV_LOOP is not set
372# CONFIG_BLK_DEV_NBD is not set 396# CONFIG_BLK_DEV_NBD is not set
373# CONFIG_BLK_DEV_SX8 is not set 397# CONFIG_BLK_DEV_SX8 is not set
398# CONFIG_BLK_DEV_UB is not set
374CONFIG_BLK_DEV_RAM=y 399CONFIG_BLK_DEV_RAM=y
375CONFIG_BLK_DEV_RAM_COUNT=16 400CONFIG_BLK_DEV_RAM_COUNT=16
376CONFIG_BLK_DEV_RAM_SIZE=4096 401CONFIG_BLK_DEV_RAM_SIZE=4096
@@ -420,6 +445,7 @@ CONFIG_SCSI_WAIT_SCAN=m
420# CONFIG_SCSI_FC_ATTRS is not set 445# CONFIG_SCSI_FC_ATTRS is not set
421# CONFIG_SCSI_ISCSI_ATTRS is not set 446# CONFIG_SCSI_ISCSI_ATTRS is not set
422# CONFIG_SCSI_SAS_LIBSAS is not set 447# CONFIG_SCSI_SAS_LIBSAS is not set
448# CONFIG_SCSI_SRP_ATTRS is not set
423CONFIG_SCSI_LOWLEVEL=y 449CONFIG_SCSI_LOWLEVEL=y
424# CONFIG_ISCSI_TCP is not set 450# CONFIG_ISCSI_TCP is not set
425# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 451# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -493,7 +519,9 @@ CONFIG_ATA=y
493# CONFIG_PATA_MPIIX is not set 519# CONFIG_PATA_MPIIX is not set
494# CONFIG_PATA_OLDPIIX is not set 520# CONFIG_PATA_OLDPIIX is not set
495# CONFIG_PATA_NETCELL is not set 521# CONFIG_PATA_NETCELL is not set
522# CONFIG_PATA_NINJA32 is not set
496# CONFIG_PATA_NS87410 is not set 523# CONFIG_PATA_NS87410 is not set
524# CONFIG_PATA_NS87415 is not set
497# CONFIG_PATA_OPTI is not set 525# CONFIG_PATA_OPTI is not set
498# CONFIG_PATA_OPTIDMA is not set 526# CONFIG_PATA_OPTIDMA is not set
499# CONFIG_PATA_PDC_OLD is not set 527# CONFIG_PATA_PDC_OLD is not set
@@ -508,14 +536,7 @@ CONFIG_ATA=y
508# CONFIG_PATA_WINBOND is not set 536# CONFIG_PATA_WINBOND is not set
509CONFIG_PATA_PLATFORM=y 537CONFIG_PATA_PLATFORM=y
510# CONFIG_MD is not set 538# CONFIG_MD is not set
511
512#
513# Fusion MPT device support
514#
515# CONFIG_FUSION is not set 539# 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 540
520# 541#
521# IEEE 1394 (FireWire) support 542# IEEE 1394 (FireWire) support
@@ -530,25 +551,31 @@ CONFIG_NETDEVICES=y
530# CONFIG_MACVLAN is not set 551# CONFIG_MACVLAN is not set
531# CONFIG_EQUALIZER is not set 552# CONFIG_EQUALIZER is not set
532# CONFIG_TUN is not set 553# CONFIG_TUN is not set
554# CONFIG_VETH is not set
533# CONFIG_ARCNET is not set 555# CONFIG_ARCNET is not set
534# CONFIG_PHYLIB is not set 556# CONFIG_PHYLIB is not set
535CONFIG_NET_ETHERNET=y 557CONFIG_NET_ETHERNET=y
536CONFIG_MII=y 558CONFIG_MII=y
559# CONFIG_AX88796 is not set
537# CONFIG_STNIC is not set 560# CONFIG_STNIC is not set
538# CONFIG_HAPPYMEAL is not set 561# CONFIG_HAPPYMEAL is not set
539# CONFIG_SUNGEM is not set 562# CONFIG_SUNGEM is not set
540# CONFIG_CASSINI is not set 563# CONFIG_CASSINI is not set
541# CONFIG_NET_VENDOR_3COM is not set 564# CONFIG_NET_VENDOR_3COM is not set
542# CONFIG_SMC91X is not set 565# CONFIG_SMC91X is not set
566# CONFIG_ENC28J60 is not set
543# CONFIG_NET_TULIP is not set 567# CONFIG_NET_TULIP is not set
544# CONFIG_HP100 is not set 568# CONFIG_HP100 is not set
569# CONFIG_IBM_NEW_EMAC_ZMII is not set
570# CONFIG_IBM_NEW_EMAC_RGMII is not set
571# CONFIG_IBM_NEW_EMAC_TAH is not set
572# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
545CONFIG_NET_PCI=y 573CONFIG_NET_PCI=y
546# CONFIG_PCNET32 is not set 574# CONFIG_PCNET32 is not set
547# CONFIG_AMD8111_ETH is not set 575# CONFIG_AMD8111_ETH is not set
548# CONFIG_ADAPTEC_STARFIRE is not set 576# CONFIG_ADAPTEC_STARFIRE is not set
549# CONFIG_B44 is not set 577# CONFIG_B44 is not set
550# CONFIG_FORCEDETH is not set 578# CONFIG_FORCEDETH is not set
551# CONFIG_DGRS is not set
552# CONFIG_EEPRO100 is not set 579# CONFIG_EEPRO100 is not set
553# CONFIG_E100 is not set 580# CONFIG_E100 is not set
554# CONFIG_FEALNX is not set 581# CONFIG_FEALNX is not set
@@ -560,6 +587,7 @@ CONFIG_8139TOO=y
560# CONFIG_8139TOO_TUNE_TWISTER is not set 587# CONFIG_8139TOO_TUNE_TWISTER is not set
561# CONFIG_8139TOO_8129 is not set 588# CONFIG_8139TOO_8129 is not set
562# CONFIG_8139_OLD_RX_RESET is not set 589# CONFIG_8139_OLD_RX_RESET is not set
590# CONFIG_R6040 is not set
563# CONFIG_SIS900 is not set 591# CONFIG_SIS900 is not set
564# CONFIG_EPIC100 is not set 592# CONFIG_EPIC100 is not set
565# CONFIG_SUNDANCE is not set 593# CONFIG_SUNDANCE is not set
@@ -570,6 +598,10 @@ CONFIG_NETDEV_1000=y
570# CONFIG_ACENIC is not set 598# CONFIG_ACENIC is not set
571# CONFIG_DL2K is not set 599# CONFIG_DL2K is not set
572# CONFIG_E1000 is not set 600# CONFIG_E1000 is not set
601# CONFIG_E1000E is not set
602# CONFIG_E1000E_ENABLED is not set
603# CONFIG_IP1000 is not set
604# CONFIG_IGB is not set
573# CONFIG_NS83820 is not set 605# CONFIG_NS83820 is not set
574# CONFIG_HAMACHI is not set 606# CONFIG_HAMACHI is not set
575# CONFIG_YELLOWFIN is not set 607# CONFIG_YELLOWFIN is not set
@@ -577,6 +609,7 @@ CONFIG_NETDEV_1000=y
577# CONFIG_SIS190 is not set 609# CONFIG_SIS190 is not set
578# CONFIG_SKGE is not set 610# CONFIG_SKGE is not set
579# CONFIG_SKY2 is not set 611# CONFIG_SKY2 is not set
612# CONFIG_SK98LIN is not set
580# CONFIG_VIA_VELOCITY is not set 613# CONFIG_VIA_VELOCITY is not set
581# CONFIG_TIGON3 is not set 614# CONFIG_TIGON3 is not set
582# CONFIG_BNX2 is not set 615# CONFIG_BNX2 is not set
@@ -585,11 +618,15 @@ CONFIG_NETDEV_1000=y
585CONFIG_NETDEV_10000=y 618CONFIG_NETDEV_10000=y
586# CONFIG_CHELSIO_T1 is not set 619# CONFIG_CHELSIO_T1 is not set
587# CONFIG_CHELSIO_T3 is not set 620# CONFIG_CHELSIO_T3 is not set
621# CONFIG_IXGBE is not set
588# CONFIG_IXGB is not set 622# CONFIG_IXGB is not set
589# CONFIG_S2IO is not set 623# CONFIG_S2IO is not set
590# CONFIG_MYRI10GE is not set 624# CONFIG_MYRI10GE is not set
591# CONFIG_NETXEN_NIC is not set 625# CONFIG_NETXEN_NIC is not set
626# CONFIG_NIU is not set
592# CONFIG_MLX4_CORE is not set 627# CONFIG_MLX4_CORE is not set
628# CONFIG_TEHUTI is not set
629# CONFIG_BNX2X is not set
593# CONFIG_TR is not set 630# CONFIG_TR is not set
594 631
595# 632#
@@ -597,13 +634,21 @@ CONFIG_NETDEV_10000=y
597# 634#
598# CONFIG_WLAN_PRE80211 is not set 635# CONFIG_WLAN_PRE80211 is not set
599# CONFIG_WLAN_80211 is not set 636# CONFIG_WLAN_80211 is not set
637
638#
639# USB Network Adapters
640#
641# CONFIG_USB_CATC is not set
642# CONFIG_USB_KAWETH is not set
643# CONFIG_USB_PEGASUS is not set
644# CONFIG_USB_RTL8150 is not set
645# CONFIG_USB_USBNET is not set
600# CONFIG_WAN is not set 646# CONFIG_WAN is not set
601# CONFIG_FDDI is not set 647# CONFIG_FDDI is not set
602# CONFIG_HIPPI is not set 648# CONFIG_HIPPI is not set
603# CONFIG_PPP is not set 649# CONFIG_PPP is not set
604# CONFIG_SLIP is not set 650# CONFIG_SLIP is not set
605# CONFIG_NET_FC is not set 651# CONFIG_NET_FC is not set
606# CONFIG_SHAPER is not set
607# CONFIG_NETCONSOLE is not set 652# CONFIG_NETCONSOLE is not set
608# CONFIG_NETPOLL is not set 653# CONFIG_NETPOLL is not set
609# CONFIG_NET_POLL_CONTROLLER is not set 654# CONFIG_NET_POLL_CONTROLLER is not set
@@ -622,7 +667,6 @@ CONFIG_INPUT=y
622# 667#
623# CONFIG_INPUT_MOUSEDEV is not set 668# CONFIG_INPUT_MOUSEDEV is not set
624# CONFIG_INPUT_JOYDEV is not set 669# CONFIG_INPUT_JOYDEV is not set
625# CONFIG_INPUT_TSDEV is not set
626# CONFIG_INPUT_EVDEV is not set 670# CONFIG_INPUT_EVDEV is not set
627# CONFIG_INPUT_EVBUG is not set 671# CONFIG_INPUT_EVBUG is not set
628 672
@@ -650,6 +694,7 @@ CONFIG_VT_CONSOLE=y
650CONFIG_HW_CONSOLE=y 694CONFIG_HW_CONSOLE=y
651CONFIG_VT_HW_CONSOLE_BINDING=y 695CONFIG_VT_HW_CONSOLE_BINDING=y
652# CONFIG_SERIAL_NONSTANDARD is not set 696# CONFIG_SERIAL_NONSTANDARD is not set
697# CONFIG_NOZOMI is not set
653 698
654# 699#
655# Serial drivers 700# Serial drivers
@@ -674,11 +719,9 @@ CONFIG_UNIX98_PTYS=y
674CONFIG_LEGACY_PTYS=y 719CONFIG_LEGACY_PTYS=y
675CONFIG_LEGACY_PTY_COUNT=256 720CONFIG_LEGACY_PTY_COUNT=256
676# CONFIG_IPMI_HANDLER is not set 721# CONFIG_IPMI_HANDLER is not set
677# CONFIG_WATCHDOG is not set
678CONFIG_HW_RANDOM=y 722CONFIG_HW_RANDOM=y
679# CONFIG_R3964 is not set 723# CONFIG_R3964 is not set
680# CONFIG_APPLICOM is not set 724# CONFIG_APPLICOM is not set
681# CONFIG_DRM is not set
682# CONFIG_RAW_DRIVER is not set 725# CONFIG_RAW_DRIVER is not set
683# CONFIG_TCG_TPM is not set 726# CONFIG_TCG_TPM is not set
684CONFIG_DEVPORT=y 727CONFIG_DEVPORT=y
@@ -687,16 +730,30 @@ CONFIG_DEVPORT=y
687# 730#
688# SPI support 731# SPI support
689# 732#
690# CONFIG_SPI is not set 733CONFIG_SPI=y
691# CONFIG_SPI_MASTER is not set 734CONFIG_SPI_MASTER=y
735
736#
737# SPI Master Controller Drivers
738#
739CONFIG_SPI_BITBANG=y
740CONFIG_SPI_SH_SCI=y
741
742#
743# SPI Protocol Masters
744#
745# CONFIG_SPI_AT25 is not set
746# CONFIG_SPI_SPIDEV is not set
747# CONFIG_SPI_TLE62X0 is not set
692# CONFIG_W1 is not set 748# CONFIG_W1 is not set
693# CONFIG_POWER_SUPPLY is not set 749# CONFIG_POWER_SUPPLY is not set
694CONFIG_HWMON=y 750CONFIG_HWMON=y
695# CONFIG_HWMON_VID is not set 751# CONFIG_HWMON_VID is not set
696# CONFIG_SENSORS_ABITUGURU is not set 752# CONFIG_SENSORS_I5K_AMB is not set
697# CONFIG_SENSORS_ABITUGURU3 is not set
698# CONFIG_SENSORS_F71805F is not set 753# CONFIG_SENSORS_F71805F is not set
754# CONFIG_SENSORS_F71882FG is not set
699# CONFIG_SENSORS_IT87 is not set 755# CONFIG_SENSORS_IT87 is not set
756# CONFIG_SENSORS_LM70 is not set
700# CONFIG_SENSORS_PC87360 is not set 757# CONFIG_SENSORS_PC87360 is not set
701# CONFIG_SENSORS_PC87427 is not set 758# CONFIG_SENSORS_PC87427 is not set
702# CONFIG_SENSORS_SIS5595 is not set 759# CONFIG_SENSORS_SIS5595 is not set
@@ -708,6 +765,13 @@ CONFIG_HWMON=y
708# CONFIG_SENSORS_W83627HF is not set 765# CONFIG_SENSORS_W83627HF is not set
709# CONFIG_SENSORS_W83627EHF is not set 766# CONFIG_SENSORS_W83627EHF is not set
710# CONFIG_HWMON_DEBUG_CHIP is not set 767# CONFIG_HWMON_DEBUG_CHIP is not set
768# CONFIG_WATCHDOG is not set
769
770#
771# Sonics Silicon Backplane
772#
773CONFIG_SSB_POSSIBLE=y
774# CONFIG_SSB is not set
711 775
712# 776#
713# Multifunction device drivers 777# Multifunction device drivers
@@ -720,16 +784,12 @@ CONFIG_MFD_SM501=y
720# CONFIG_VIDEO_DEV is not set 784# CONFIG_VIDEO_DEV is not set
721# CONFIG_DVB_CORE is not set 785# CONFIG_DVB_CORE is not set
722CONFIG_DAB=y 786CONFIG_DAB=y
787# CONFIG_USB_DABUSB is not set
723 788
724# 789#
725# Graphics support 790# Graphics support
726# 791#
727# CONFIG_BACKLIGHT_LCD_SUPPORT is not set 792# CONFIG_DRM is not set
728
729#
730# Display device support
731#
732# CONFIG_DISPLAY_SUPPORT is not set
733# CONFIG_VGASTATE is not set 793# CONFIG_VGASTATE is not set
734CONFIG_VIDEO_OUTPUT_CONTROL=m 794CONFIG_VIDEO_OUTPUT_CONTROL=m
735CONFIG_FB=y 795CONFIG_FB=y
@@ -738,6 +798,7 @@ CONFIG_FB=y
738CONFIG_FB_CFB_FILLRECT=y 798CONFIG_FB_CFB_FILLRECT=y
739CONFIG_FB_CFB_COPYAREA=y 799CONFIG_FB_CFB_COPYAREA=y
740CONFIG_FB_CFB_IMAGEBLIT=y 800CONFIG_FB_CFB_IMAGEBLIT=y
801# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
741# CONFIG_FB_SYS_FILLRECT is not set 802# CONFIG_FB_SYS_FILLRECT is not set
742# CONFIG_FB_SYS_COPYAREA is not set 803# CONFIG_FB_SYS_COPYAREA is not set
743# CONFIG_FB_SYS_IMAGEBLIT is not set 804# CONFIG_FB_SYS_IMAGEBLIT is not set
@@ -777,6 +838,12 @@ CONFIG_FB_DEFERRED_IO=y
777# CONFIG_FB_PM3 is not set 838# CONFIG_FB_PM3 is not set
778CONFIG_FB_SM501=y 839CONFIG_FB_SM501=y
779# CONFIG_FB_VIRTUAL is not set 840# CONFIG_FB_VIRTUAL is not set
841# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
842
843#
844# Display device support
845#
846# CONFIG_DISPLAY_SUPPORT is not set
780 847
781# 848#
782# Console display driver support 849# Console display driver support
@@ -844,6 +911,7 @@ CONFIG_SND_AC97_CODEC=m
844# CONFIG_SND_BT87X is not set 911# CONFIG_SND_BT87X is not set
845# CONFIG_SND_CA0106 is not set 912# CONFIG_SND_CA0106 is not set
846# CONFIG_SND_CMIPCI is not set 913# CONFIG_SND_CMIPCI is not set
914# CONFIG_SND_OXYGEN is not set
847# CONFIG_SND_CS4281 is not set 915# CONFIG_SND_CS4281 is not set
848# CONFIG_SND_CS46XX is not set 916# CONFIG_SND_CS46XX is not set
849# CONFIG_SND_DARLA20 is not set 917# CONFIG_SND_DARLA20 is not set
@@ -868,6 +936,7 @@ CONFIG_SND_AC97_CODEC=m
868# CONFIG_SND_HDA_INTEL is not set 936# CONFIG_SND_HDA_INTEL is not set
869# CONFIG_SND_HDSP is not set 937# CONFIG_SND_HDSP is not set
870# CONFIG_SND_HDSPM is not set 938# CONFIG_SND_HDSPM is not set
939# CONFIG_SND_HIFIER is not set
871# CONFIG_SND_ICE1712 is not set 940# CONFIG_SND_ICE1712 is not set
872# CONFIG_SND_ICE1724 is not set 941# CONFIG_SND_ICE1724 is not set
873# CONFIG_SND_INTEL8X0 is not set 942# CONFIG_SND_INTEL8X0 is not set
@@ -885,16 +954,27 @@ CONFIG_SND_AC97_CODEC=m
885# CONFIG_SND_TRIDENT is not set 954# CONFIG_SND_TRIDENT is not set
886# CONFIG_SND_VIA82XX is not set 955# CONFIG_SND_VIA82XX is not set
887# CONFIG_SND_VIA82XX_MODEM is not set 956# CONFIG_SND_VIA82XX_MODEM is not set
957# CONFIG_SND_VIRTUOSO is not set
888# CONFIG_SND_VX222 is not set 958# CONFIG_SND_VX222 is not set
889CONFIG_SND_YMFPCI=m 959CONFIG_SND_YMFPCI=m
890CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y 960CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
891# CONFIG_SND_AC97_POWER_SAVE is not set 961# CONFIG_SND_AC97_POWER_SAVE is not set
892 962
893# 963#
964# SPI devices
965#
966
967#
894# SUPERH devices 968# SUPERH devices
895# 969#
896 970
897# 971#
972# USB devices
973#
974# CONFIG_SND_USB_AUDIO is not set
975# CONFIG_SND_USB_CAIAQ is not set
976
977#
898# System on Chip audio support 978# System on Chip audio support
899# 979#
900# CONFIG_SND_SOC is not set 980# CONFIG_SND_SOC is not set
@@ -904,6 +984,10 @@ CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
904# 984#
905 985
906# 986#
987# ALSA SoC audio for Freescale SOCs
988#
989
990#
907# Open Sound System 991# Open Sound System
908# 992#
909CONFIG_SOUND_PRIME=m 993CONFIG_SOUND_PRIME=m
@@ -914,19 +998,104 @@ CONFIG_AC97_BUS=m
914CONFIG_HID_SUPPORT=y 998CONFIG_HID_SUPPORT=y
915CONFIG_HID=y 999CONFIG_HID=y
916# CONFIG_HID_DEBUG is not set 1000# CONFIG_HID_DEBUG is not set
1001# CONFIG_HIDRAW is not set
1002
1003#
1004# USB Input Devices
1005#
1006CONFIG_USB_HID=y
1007# CONFIG_USB_HIDINPUT_POWERBOOK is not set
1008# CONFIG_HID_FF is not set
1009# CONFIG_USB_HIDDEV is not set
917CONFIG_USB_SUPPORT=y 1010CONFIG_USB_SUPPORT=y
918CONFIG_USB_ARCH_HAS_HCD=y 1011CONFIG_USB_ARCH_HAS_HCD=y
919CONFIG_USB_ARCH_HAS_OHCI=y 1012CONFIG_USB_ARCH_HAS_OHCI=y
920CONFIG_USB_ARCH_HAS_EHCI=y 1013CONFIG_USB_ARCH_HAS_EHCI=y
921# CONFIG_USB is not set 1014CONFIG_USB=y
1015# CONFIG_USB_DEBUG is not set
1016CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
1017
1018#
1019# Miscellaneous USB options
1020#
1021# CONFIG_USB_DEVICEFS is not set
1022CONFIG_USB_DEVICE_CLASS=y
1023# CONFIG_USB_DYNAMIC_MINORS is not set
1024# CONFIG_USB_OTG is not set
1025
1026#
1027# USB Host Controller Drivers
1028#
1029# CONFIG_USB_EHCI_HCD is not set
1030# CONFIG_USB_ISP116X_HCD is not set
1031CONFIG_USB_OHCI_HCD=y
1032# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1033# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1034CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1035# CONFIG_USB_UHCI_HCD is not set
1036# CONFIG_USB_SL811_HCD is not set
1037# CONFIG_USB_R8A66597_HCD is not set
1038
1039#
1040# USB Device Class drivers
1041#
1042# CONFIG_USB_ACM is not set
1043# CONFIG_USB_PRINTER is not set
922 1044
923# 1045#
924# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 1046# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
925# 1047#
926 1048
927# 1049#
928# USB Gadget Support 1050# may also be needed; see USB_STORAGE Help for more information
1051#
1052CONFIG_USB_STORAGE=y
1053# CONFIG_USB_STORAGE_DEBUG is not set
1054# CONFIG_USB_STORAGE_DATAFAB is not set
1055# CONFIG_USB_STORAGE_FREECOM is not set
1056# CONFIG_USB_STORAGE_ISD200 is not set
1057# CONFIG_USB_STORAGE_DPCM is not set
1058# CONFIG_USB_STORAGE_USBAT is not set
1059# CONFIG_USB_STORAGE_SDDR09 is not set
1060# CONFIG_USB_STORAGE_SDDR55 is not set
1061# CONFIG_USB_STORAGE_JUMPSHOT is not set
1062# CONFIG_USB_STORAGE_ALAUDA is not set
1063# CONFIG_USB_STORAGE_KARMA is not set
1064CONFIG_USB_LIBUSUAL=y
1065
1066#
1067# USB Imaging devices
1068#
1069# CONFIG_USB_MDC800 is not set
1070# CONFIG_USB_MICROTEK is not set
1071# CONFIG_USB_MON is not set
1072
1073#
1074# USB port drivers
1075#
1076# CONFIG_USB_SERIAL is not set
1077
1078#
1079# USB Miscellaneous drivers
929# 1080#
1081# CONFIG_USB_EMI62 is not set
1082# CONFIG_USB_EMI26 is not set
1083# CONFIG_USB_ADUTUX is not set
1084# CONFIG_USB_AUERSWALD is not set
1085# CONFIG_USB_RIO500 is not set
1086# CONFIG_USB_LEGOTOWER is not set
1087# CONFIG_USB_LCD is not set
1088# CONFIG_USB_BERRY_CHARGE is not set
1089# CONFIG_USB_LED is not set
1090# CONFIG_USB_CYPRESS_CY7C63 is not set
1091# CONFIG_USB_CYTHERM is not set
1092# CONFIG_USB_PHIDGET is not set
1093# CONFIG_USB_IDMOUSE is not set
1094# CONFIG_USB_FTDI_ELAN is not set
1095# CONFIG_USB_APPLEDISPLAY is not set
1096# CONFIG_USB_LD is not set
1097# CONFIG_USB_TRANCEVIBRATOR is not set
1098# CONFIG_USB_IOWARRIOR is not set
930# CONFIG_USB_GADGET is not set 1099# CONFIG_USB_GADGET is not set
931# CONFIG_MMC is not set 1100# CONFIG_MMC is not set
932# CONFIG_NEW_LEDS is not set 1101# CONFIG_NEW_LEDS is not set
@@ -949,13 +1118,17 @@ CONFIG_RTC_INTF_DEV=y
949# 1118#
950# SPI RTC drivers 1119# SPI RTC drivers
951# 1120#
1121# CONFIG_RTC_DRV_MAX6902 is not set
1122CONFIG_RTC_DRV_R9701=y
1123# CONFIG_RTC_DRV_RS5C348 is not set
952 1124
953# 1125#
954# Platform RTC drivers 1126# Platform RTC drivers
955# 1127#
1128# CONFIG_RTC_DRV_DS1511 is not set
956# CONFIG_RTC_DRV_DS1553 is not set 1129# CONFIG_RTC_DRV_DS1553 is not set
957# CONFIG_RTC_DRV_STK17TA8 is not set
958# CONFIG_RTC_DRV_DS1742 is not set 1130# CONFIG_RTC_DRV_DS1742 is not set
1131# CONFIG_RTC_DRV_STK17TA8 is not set
959# CONFIG_RTC_DRV_M48T86 is not set 1132# CONFIG_RTC_DRV_M48T86 is not set
960# CONFIG_RTC_DRV_M48T59 is not set 1133# CONFIG_RTC_DRV_M48T59 is not set
961# CONFIG_RTC_DRV_V3020 is not set 1134# CONFIG_RTC_DRV_V3020 is not set
@@ -963,20 +1136,7 @@ CONFIG_RTC_INTF_DEV=y
963# 1136#
964# on-CPU RTC drivers 1137# on-CPU RTC drivers
965# 1138#
966CONFIG_RTC_DRV_SH=y 1139# CONFIG_RTC_DRV_SH is not set
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 1140
981# 1141#
982# Userspace I/O 1142# Userspace I/O
@@ -1034,7 +1194,6 @@ CONFIG_TMPFS=y
1034# CONFIG_TMPFS_POSIX_ACL is not set 1194# CONFIG_TMPFS_POSIX_ACL is not set
1035# CONFIG_HUGETLBFS is not set 1195# CONFIG_HUGETLBFS is not set
1036# CONFIG_HUGETLB_PAGE is not set 1196# CONFIG_HUGETLB_PAGE is not set
1037CONFIG_RAMFS=y
1038# CONFIG_CONFIGFS_FS is not set 1197# CONFIG_CONFIGFS_FS is not set
1039 1198
1040# 1199#
@@ -1053,10 +1212,7 @@ CONFIG_RAMFS=y
1053# CONFIG_QNX4FS_FS is not set 1212# CONFIG_QNX4FS_FS is not set
1054# CONFIG_SYSV_FS is not set 1213# CONFIG_SYSV_FS is not set
1055# CONFIG_UFS_FS is not set 1214# CONFIG_UFS_FS is not set
1056 1215CONFIG_NETWORK_FILESYSTEMS=y
1057#
1058# Network File Systems
1059#
1060# CONFIG_NFS_FS is not set 1216# CONFIG_NFS_FS is not set
1061# CONFIG_NFSD is not set 1217# CONFIG_NFSD is not set
1062# CONFIG_SMB_FS is not set 1218# CONFIG_SMB_FS is not set
@@ -1070,10 +1226,6 @@ CONFIG_RAMFS=y
1070# 1226#
1071# CONFIG_PARTITION_ADVANCED is not set 1227# CONFIG_PARTITION_ADVANCED is not set
1072CONFIG_MSDOS_PARTITION=y 1228CONFIG_MSDOS_PARTITION=y
1073
1074#
1075# Native Language Support
1076#
1077CONFIG_NLS=y 1229CONFIG_NLS=y
1078CONFIG_NLS_DEFAULT="iso8859-1" 1230CONFIG_NLS_DEFAULT="iso8859-1"
1079# CONFIG_NLS_CODEPAGE_437 is not set 1231# CONFIG_NLS_CODEPAGE_437 is not set
@@ -1114,30 +1266,22 @@ CONFIG_NLS_CODEPAGE_932=y
1114# CONFIG_NLS_KOI8_R is not set 1266# CONFIG_NLS_KOI8_R is not set
1115# CONFIG_NLS_KOI8_U is not set 1267# CONFIG_NLS_KOI8_U is not set
1116# CONFIG_NLS_UTF8 is not set 1268# CONFIG_NLS_UTF8 is not set
1117
1118#
1119# Distributed Lock Manager
1120#
1121# CONFIG_DLM is not set 1269# CONFIG_DLM is not set
1122 1270
1123# 1271#
1124# Profiling support
1125#
1126CONFIG_PROFILING=y
1127CONFIG_OPROFILE=y
1128
1129#
1130# Kernel hacking 1272# Kernel hacking
1131# 1273#
1132CONFIG_TRACE_IRQFLAGS_SUPPORT=y 1274CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1133# CONFIG_PRINTK_TIME is not set 1275# CONFIG_PRINTK_TIME is not set
1276CONFIG_ENABLE_WARN_DEPRECATED=y
1134CONFIG_ENABLE_MUST_CHECK=y 1277CONFIG_ENABLE_MUST_CHECK=y
1135# CONFIG_MAGIC_SYSRQ is not set 1278# CONFIG_MAGIC_SYSRQ is not set
1136# CONFIG_UNUSED_SYMBOLS is not set 1279# CONFIG_UNUSED_SYMBOLS is not set
1137# CONFIG_DEBUG_FS is not set 1280CONFIG_DEBUG_FS=y
1138# CONFIG_HEADERS_CHECK is not set 1281# CONFIG_HEADERS_CHECK is not set
1139# CONFIG_DEBUG_KERNEL is not set 1282# CONFIG_DEBUG_KERNEL is not set
1140# CONFIG_DEBUG_BUGVERBOSE is not set 1283# CONFIG_DEBUG_BUGVERBOSE is not set
1284# CONFIG_SAMPLES is not set
1141# CONFIG_SH_STANDARD_BIOS is not set 1285# CONFIG_SH_STANDARD_BIOS is not set
1142CONFIG_EARLY_SCIF_CONSOLE=y 1286CONFIG_EARLY_SCIF_CONSOLE=y
1143CONFIG_EARLY_SCIF_CONSOLE_PORT=0xffe80000 1287CONFIG_EARLY_SCIF_CONSOLE_PORT=0xffe80000
@@ -1149,7 +1293,53 @@ CONFIG_EARLY_PRINTK=y
1149# 1293#
1150# CONFIG_KEYS is not set 1294# CONFIG_KEYS is not set
1151# CONFIG_SECURITY is not set 1295# CONFIG_SECURITY is not set
1152# CONFIG_CRYPTO is not set 1296# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1297CONFIG_CRYPTO=y
1298# CONFIG_CRYPTO_SEQIV is not set
1299# CONFIG_CRYPTO_MANAGER is not set
1300# CONFIG_CRYPTO_HMAC is not set
1301# CONFIG_CRYPTO_XCBC is not set
1302# CONFIG_CRYPTO_NULL is not set
1303# CONFIG_CRYPTO_MD4 is not set
1304# CONFIG_CRYPTO_MD5 is not set
1305# CONFIG_CRYPTO_SHA1 is not set
1306# CONFIG_CRYPTO_SHA256 is not set
1307# CONFIG_CRYPTO_SHA512 is not set
1308# CONFIG_CRYPTO_WP512 is not set
1309# CONFIG_CRYPTO_TGR192 is not set
1310# CONFIG_CRYPTO_GF128MUL is not set
1311# CONFIG_CRYPTO_ECB is not set
1312# CONFIG_CRYPTO_CBC is not set
1313# CONFIG_CRYPTO_PCBC is not set
1314# CONFIG_CRYPTO_LRW is not set
1315# CONFIG_CRYPTO_XTS is not set
1316# CONFIG_CRYPTO_CTR is not set
1317# CONFIG_CRYPTO_GCM is not set
1318# CONFIG_CRYPTO_CCM is not set
1319# CONFIG_CRYPTO_CRYPTD is not set
1320# CONFIG_CRYPTO_DES is not set
1321# CONFIG_CRYPTO_FCRYPT is not set
1322# CONFIG_CRYPTO_BLOWFISH is not set
1323# CONFIG_CRYPTO_TWOFISH is not set
1324# CONFIG_CRYPTO_SERPENT is not set
1325# CONFIG_CRYPTO_AES is not set
1326# CONFIG_CRYPTO_CAST5 is not set
1327# CONFIG_CRYPTO_CAST6 is not set
1328# CONFIG_CRYPTO_TEA is not set
1329# CONFIG_CRYPTO_ARC4 is not set
1330# CONFIG_CRYPTO_KHAZAD is not set
1331# CONFIG_CRYPTO_ANUBIS is not set
1332# CONFIG_CRYPTO_SEED is not set
1333# CONFIG_CRYPTO_SALSA20 is not set
1334# CONFIG_CRYPTO_DEFLATE is not set
1335# CONFIG_CRYPTO_MICHAEL_MIC is not set
1336# CONFIG_CRYPTO_CRC32C is not set
1337# CONFIG_CRYPTO_CAMELLIA is not set
1338# CONFIG_CRYPTO_TEST is not set
1339# CONFIG_CRYPTO_AUTHENC is not set
1340# CONFIG_CRYPTO_LZO is not set
1341CONFIG_CRYPTO_HW=y
1342# CONFIG_CRYPTO_DEV_HIFN_795X is not set
1153 1343
1154# 1344#
1155# Library routines 1345# Library routines
diff --git a/arch/sh/configs/se7705_defconfig b/arch/sh/configs/se7705_defconfig
index 87ae5c1f8629..84717d854867 100644
--- a/arch/sh/configs/se7705_defconfig
+++ b/arch/sh/configs/se7705_defconfig
@@ -231,7 +231,6 @@ CONFIG_CPU_LITTLE_ENDIAN=y
231# CONFIG_SH_DSP is not set 231# CONFIG_SH_DSP is not set
232# CONFIG_SH_ADC is not set 232# CONFIG_SH_ADC is not set
233CONFIG_CPU_HAS_INTEVT=y 233CONFIG_CPU_HAS_INTEVT=y
234CONFIG_CPU_HAS_PINT_IRQ=y
235CONFIG_CPU_HAS_IPR_IRQ=y 234CONFIG_CPU_HAS_IPR_IRQ=y
236CONFIG_CPU_HAS_SR_RB=y 235CONFIG_CPU_HAS_SR_RB=y
237 236
diff --git a/arch/sh/drivers/dma/dma-api.c b/arch/sh/drivers/dma/dma-api.c
index 76ed816d9a24..727126e907e3 100644
--- a/arch/sh/drivers/dma/dma-api.c
+++ b/arch/sh/drivers/dma/dma-api.c
@@ -350,7 +350,7 @@ int register_dmac(struct dma_info *info)
350 350
351 BUG_ON((info->flags & DMAC_CHANNELS_CONFIGURED) && !info->channels); 351 BUG_ON((info->flags & DMAC_CHANNELS_CONFIGURED) && !info->channels);
352 352
353 info->pdev = platform_device_register_simple((char *)info->name, -1, 353 info->pdev = platform_device_register_simple(info->name, -1,
354 NULL, 0); 354 NULL, 0);
355 if (IS_ERR(info->pdev)) 355 if (IS_ERR(info->pdev))
356 return PTR_ERR(info->pdev); 356 return PTR_ERR(info->pdev);
diff --git a/arch/sh/drivers/pci/fixups-lboxre2.c b/arch/sh/drivers/pci/fixups-lboxre2.c
index 40b19bdfb891..1c1d41255ec0 100644
--- a/arch/sh/drivers/pci/fixups-lboxre2.c
+++ b/arch/sh/drivers/pci/fixups-lboxre2.c
@@ -18,7 +18,7 @@ int pci_fixup_pcic(void)
18{ 18{
19 unsigned long bcr1, mcr; 19 unsigned long bcr1, mcr;
20 20
21 bcr1 = inl(SH7751_BCR1); 21 bcr1 = ctrl_inl(SH7751_BCR1);
22 bcr1 |= 0x40080000; /* Enable Bit 19 BREQEN, set PCIC to slave */ 22 bcr1 |= 0x40080000; /* Enable Bit 19 BREQEN, set PCIC to slave */
23 pci_write_reg(bcr1, SH4_PCIBCR1); 23 pci_write_reg(bcr1, SH4_PCIBCR1);
24 24
@@ -28,7 +28,7 @@ int pci_fixup_pcic(void)
28 pci_write_reg(0xfb900047, SH7751_PCICONF1); 28 pci_write_reg(0xfb900047, SH7751_PCICONF1);
29 pci_write_reg(0xab000001, SH7751_PCICONF4); 29 pci_write_reg(0xab000001, SH7751_PCICONF4);
30 30
31 mcr = inl(SH7751_MCR); 31 mcr = ctrl_inl(SH7751_MCR);
32 mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF; 32 mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF;
33 pci_write_reg(mcr, SH4_PCIMCR); 33 pci_write_reg(mcr, SH4_PCIMCR);
34 34
diff --git a/arch/sh/drivers/pci/fixups-rts7751r2d.c b/arch/sh/drivers/pci/fixups-rts7751r2d.c
index e72ceb560d5b..904bce8768d3 100644
--- a/arch/sh/drivers/pci/fixups-rts7751r2d.c
+++ b/arch/sh/drivers/pci/fixups-rts7751r2d.c
@@ -19,7 +19,7 @@ int pci_fixup_pcic(void)
19{ 19{
20 unsigned long bcr1, mcr; 20 unsigned long bcr1, mcr;
21 21
22 bcr1 = inl(SH7751_BCR1); 22 bcr1 = ctrl_inl(SH7751_BCR1);
23 bcr1 |= 0x40080000; /* Enable Bit 19 BREQEN, set PCIC to slave */ 23 bcr1 |= 0x40080000; /* Enable Bit 19 BREQEN, set PCIC to slave */
24 pci_write_reg(bcr1, SH4_PCIBCR1); 24 pci_write_reg(bcr1, SH4_PCIBCR1);
25 25
@@ -30,7 +30,7 @@ int pci_fixup_pcic(void)
30 pci_write_reg(0xfb900047, SH7751_PCICONF1); 30 pci_write_reg(0xfb900047, SH7751_PCICONF1);
31 pci_write_reg(0xab000001, SH7751_PCICONF4); 31 pci_write_reg(0xab000001, SH7751_PCICONF4);
32 32
33 mcr = inl(SH7751_MCR); 33 mcr = ctrl_inl(SH7751_MCR);
34 mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF; 34 mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF;
35 pci_write_reg(mcr, SH4_PCIMCR); 35 pci_write_reg(mcr, SH4_PCIMCR);
36 36
diff --git a/arch/sh/drivers/pci/ops-dreamcast.c b/arch/sh/drivers/pci/ops-dreamcast.c
index e1284fc69361..0dac87b19624 100644
--- a/arch/sh/drivers/pci/ops-dreamcast.c
+++ b/arch/sh/drivers/pci/ops-dreamcast.c
@@ -83,9 +83,9 @@ static int gapspci_read(struct pci_bus *bus, unsigned int devfn, int where, int
83 return PCIBIOS_DEVICE_NOT_FOUND; 83 return PCIBIOS_DEVICE_NOT_FOUND;
84 84
85 switch (size) { 85 switch (size) {
86 case 1: *val = inb(GAPSPCI_BBA_CONFIG+where); break; 86 case 1: *val = ctrl_inb(GAPSPCI_BBA_CONFIG+where); break;
87 case 2: *val = inw(GAPSPCI_BBA_CONFIG+where); break; 87 case 2: *val = ctrl_inw(GAPSPCI_BBA_CONFIG+where); break;
88 case 4: *val = inl(GAPSPCI_BBA_CONFIG+where); break; 88 case 4: *val = ctrl_inl(GAPSPCI_BBA_CONFIG+where); break;
89 } 89 }
90 90
91 return PCIBIOS_SUCCESSFUL; 91 return PCIBIOS_SUCCESSFUL;
@@ -97,9 +97,9 @@ static int gapspci_write(struct pci_bus *bus, unsigned int devfn, int where, int
97 return PCIBIOS_DEVICE_NOT_FOUND; 97 return PCIBIOS_DEVICE_NOT_FOUND;
98 98
99 switch (size) { 99 switch (size) {
100 case 1: outb(( u8)val, GAPSPCI_BBA_CONFIG+where); break; 100 case 1: ctrl_outb(( u8)val, GAPSPCI_BBA_CONFIG+where); break;
101 case 2: outw((u16)val, GAPSPCI_BBA_CONFIG+where); break; 101 case 2: ctrl_outw((u16)val, GAPSPCI_BBA_CONFIG+where); break;
102 case 4: outl((u32)val, GAPSPCI_BBA_CONFIG+where); break; 102 case 4: ctrl_outl((u32)val, GAPSPCI_BBA_CONFIG+where); break;
103 } 103 }
104 104
105 return PCIBIOS_SUCCESSFUL; 105 return PCIBIOS_SUCCESSFUL;
@@ -127,36 +127,36 @@ int __init gapspci_init(void)
127 */ 127 */
128 128
129 for (i=0; i<16; i++) 129 for (i=0; i<16; i++)
130 idbuf[i] = inb(GAPSPCI_REGS+i); 130 idbuf[i] = ctrl_inb(GAPSPCI_REGS+i);
131 131
132 if (strncmp(idbuf, "GAPSPCI_BRIDGE_2", 16)) 132 if (strncmp(idbuf, "GAPSPCI_BRIDGE_2", 16))
133 return -ENODEV; 133 return -ENODEV;
134 134
135 outl(0x5a14a501, GAPSPCI_REGS+0x18); 135 ctrl_outl(0x5a14a501, GAPSPCI_REGS+0x18);
136 136
137 for (i=0; i<1000000; i++) 137 for (i=0; i<1000000; i++)
138 ; 138 ;
139 139
140 if (inl(GAPSPCI_REGS+0x18) != 1) 140 if (ctrl_inl(GAPSPCI_REGS+0x18) != 1)
141 return -EINVAL; 141 return -EINVAL;
142 142
143 outl(0x01000000, GAPSPCI_REGS+0x20); 143 ctrl_outl(0x01000000, GAPSPCI_REGS+0x20);
144 outl(0x01000000, GAPSPCI_REGS+0x24); 144 ctrl_outl(0x01000000, GAPSPCI_REGS+0x24);
145 145
146 outl(GAPSPCI_DMA_BASE, GAPSPCI_REGS+0x28); 146 ctrl_outl(GAPSPCI_DMA_BASE, GAPSPCI_REGS+0x28);
147 outl(GAPSPCI_DMA_BASE+GAPSPCI_DMA_SIZE, GAPSPCI_REGS+0x2c); 147 ctrl_outl(GAPSPCI_DMA_BASE+GAPSPCI_DMA_SIZE, GAPSPCI_REGS+0x2c);
148 148
149 outl(1, GAPSPCI_REGS+0x14); 149 ctrl_outl(1, GAPSPCI_REGS+0x14);
150 outl(1, GAPSPCI_REGS+0x34); 150 ctrl_outl(1, GAPSPCI_REGS+0x34);
151 151
152 /* Setting Broadband Adapter */ 152 /* Setting Broadband Adapter */
153 outw(0xf900, GAPSPCI_BBA_CONFIG+0x06); 153 ctrl_outw(0xf900, GAPSPCI_BBA_CONFIG+0x06);
154 outl(0x00000000, GAPSPCI_BBA_CONFIG+0x30); 154 ctrl_outl(0x00000000, GAPSPCI_BBA_CONFIG+0x30);
155 outb(0x00, GAPSPCI_BBA_CONFIG+0x3c); 155 ctrl_outb(0x00, GAPSPCI_BBA_CONFIG+0x3c);
156 outb(0xf0, GAPSPCI_BBA_CONFIG+0x0d); 156 ctrl_outb(0xf0, GAPSPCI_BBA_CONFIG+0x0d);
157 outw(0x0006, GAPSPCI_BBA_CONFIG+0x04); 157 ctrl_outw(0x0006, GAPSPCI_BBA_CONFIG+0x04);
158 outl(0x00002001, GAPSPCI_BBA_CONFIG+0x10); 158 ctrl_outl(0x00002001, GAPSPCI_BBA_CONFIG+0x10);
159 outl(0x01000000, GAPSPCI_BBA_CONFIG+0x14); 159 ctrl_outl(0x01000000, GAPSPCI_BBA_CONFIG+0x14);
160 160
161 return 0; 161 return 0;
162} 162}
diff --git a/arch/sh/drivers/pci/ops-rts7751r2d.c b/arch/sh/drivers/pci/ops-rts7751r2d.c
index ec8430c8d2d1..b3fa3e2ef184 100644
--- a/arch/sh/drivers/pci/ops-rts7751r2d.c
+++ b/arch/sh/drivers/pci/ops-rts7751r2d.c
@@ -33,7 +33,7 @@ int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
33static struct resource sh7751_io_resource = { 33static struct resource sh7751_io_resource = {
34 .name = "SH7751_IO", 34 .name = "SH7751_IO",
35 .start = 0x4000, 35 .start = 0x4000,
36 .end = 0x4000 + SH7751_PCI_IO_SIZE - 1, 36 .end = SH7751_PCI_IO_SIZE - 1,
37 .flags = IORESOURCE_IO 37 .flags = IORESOURCE_IO
38}; 38};
39 39
@@ -68,6 +68,7 @@ static struct sh4_pci_address_map sh7751_pci_map = {
68 68
69int __init pcibios_init_platform(void) 69int __init pcibios_init_platform(void)
70{ 70{
71 __set_io_port_base(SH7751_PCI_IO_BASE);
71 return sh7751_pcic_init(&sh7751_pci_map); 72 return sh7751_pcic_init(&sh7751_pci_map);
72} 73}
73 74
diff --git a/arch/sh/drivers/pci/pci-sh4.h b/arch/sh/drivers/pci/pci-sh4.h
index 4925c79ea959..07e29506080f 100644
--- a/arch/sh/drivers/pci/pci-sh4.h
+++ b/arch/sh/drivers/pci/pci-sh4.h
@@ -172,11 +172,11 @@ struct sh4_pci_address_map {
172 172
173static inline void pci_write_reg(unsigned long val, unsigned long reg) 173static inline void pci_write_reg(unsigned long val, unsigned long reg)
174{ 174{
175 outl(val, PCI_REG(reg)); 175 ctrl_outl(val, PCI_REG(reg));
176} 176}
177 177
178static inline unsigned long pci_read_reg(unsigned long reg) 178static inline unsigned long pci_read_reg(unsigned long reg)
179{ 179{
180 return inl(PCI_REG(reg)); 180 return ctrl_inl(PCI_REG(reg));
181} 181}
182#endif /* __PCI_SH4_H */ 182#endif /* __PCI_SH4_H */
diff --git a/arch/sh/drivers/pci/pci-sh7751.c b/arch/sh/drivers/pci/pci-sh7751.c
index 1aca7fe5783b..3065eb184f01 100644
--- a/arch/sh/drivers/pci/pci-sh7751.c
+++ b/arch/sh/drivers/pci/pci-sh7751.c
@@ -58,7 +58,7 @@ static int __init __area_sdram_check(unsigned int area)
58{ 58{
59 u32 word; 59 u32 word;
60 60
61 word = inl(SH7751_BCR1); 61 word = ctrl_inl(SH7751_BCR1);
62 /* check BCR for SDRAM in area */ 62 /* check BCR for SDRAM in area */
63 if (((word >> area) & 1) == 0) { 63 if (((word >> area) & 1) == 0) {
64 printk("PCI: Area %d is not configured for SDRAM. BCR1=0x%x\n", 64 printk("PCI: Area %d is not configured for SDRAM. BCR1=0x%x\n",
@@ -67,7 +67,7 @@ static int __init __area_sdram_check(unsigned int area)
67 } 67 }
68 pci_write_reg(word, SH4_PCIBCR1); 68 pci_write_reg(word, SH4_PCIBCR1);
69 69
70 word = (u16)inw(SH7751_BCR2); 70 word = (u16)ctrl_inw(SH7751_BCR2);
71 /* check BCR2 for 32bit SDRAM interface*/ 71 /* check BCR2 for 32bit SDRAM interface*/
72 if (((word >> (area << 1)) & 0x3) != 0x3) { 72 if (((word >> (area << 1)) & 0x3) != 0x3) {
73 printk("PCI: Area %d is not 32 bit SDRAM. BCR2=0x%x\n", 73 printk("PCI: Area %d is not 32 bit SDRAM. BCR2=0x%x\n",
@@ -85,9 +85,9 @@ int __init sh7751_pcic_init(struct sh4_pci_address_map *map)
85 u32 word; 85 u32 word;
86 86
87 /* Set the BCR's to enable PCI access */ 87 /* Set the BCR's to enable PCI access */
88 reg = inl(SH7751_BCR1); 88 reg = ctrl_inl(SH7751_BCR1);
89 reg |= 0x80000; 89 reg |= 0x80000;
90 outl(reg, SH7751_BCR1); 90 ctrl_outl(reg, SH7751_BCR1);
91 91
92 /* Turn the clocks back on (not done in reset)*/ 92 /* Turn the clocks back on (not done in reset)*/
93 pci_write_reg(0, SH4_PCICLKR); 93 pci_write_reg(0, SH4_PCICLKR);
@@ -179,13 +179,13 @@ int __init sh7751_pcic_init(struct sh4_pci_address_map *map)
179 return 0; 179 return 0;
180 180
181 /* configure the wait control registers */ 181 /* configure the wait control registers */
182 word = inl(SH7751_WCR1); 182 word = ctrl_inl(SH7751_WCR1);
183 pci_write_reg(word, SH4_PCIWCR1); 183 pci_write_reg(word, SH4_PCIWCR1);
184 word = inl(SH7751_WCR2); 184 word = ctrl_inl(SH7751_WCR2);
185 pci_write_reg(word, SH4_PCIWCR2); 185 pci_write_reg(word, SH4_PCIWCR2);
186 word = inl(SH7751_WCR3); 186 word = ctrl_inl(SH7751_WCR3);
187 pci_write_reg(word, SH4_PCIWCR3); 187 pci_write_reg(word, SH4_PCIWCR3);
188 word = inl(SH7751_MCR); 188 word = ctrl_inl(SH7751_MCR);
189 pci_write_reg(word, SH4_PCIMCR); 189 pci_write_reg(word, SH4_PCIMCR);
190 190
191 /* NOTE: I'm ignoring the PCI error IRQs for now.. 191 /* NOTE: I'm ignoring the PCI error IRQs for now..
diff --git a/arch/sh/drivers/pci/pci-sh7780.c b/arch/sh/drivers/pci/pci-sh7780.c
index 7d797f4de5e7..b2a2bfa3c1bd 100644
--- a/arch/sh/drivers/pci/pci-sh7780.c
+++ b/arch/sh/drivers/pci/pci-sh7780.c
@@ -52,7 +52,7 @@ static int __init sh7780_pci_init(void)
52 52
53 pr_debug("PCI: Starting intialization.\n"); 53 pr_debug("PCI: Starting intialization.\n");
54 54
55 outl(0x00000001, SH7780_PCI_VCR2); /* Enable PCIC */ 55 ctrl_outl(0x00000001, SH7780_PCI_VCR2); /* Enable PCIC */
56 56
57 /* check for SH7780/SH7780R hardware */ 57 /* check for SH7780/SH7780R hardware */
58 id = pci_read_reg(SH7780_PCIVID); 58 id = pci_read_reg(SH7780_PCIVID);
diff --git a/arch/sh/kernel/Makefile_32 b/arch/sh/kernel/Makefile_32
index c89289831053..62bf373266f7 100644
--- a/arch/sh/kernel/Makefile_32
+++ b/arch/sh/kernel/Makefile_32
@@ -22,5 +22,6 @@ obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
22obj-$(CONFIG_PM) += pm.o 22obj-$(CONFIG_PM) += pm.o
23obj-$(CONFIG_STACKTRACE) += stacktrace.o 23obj-$(CONFIG_STACKTRACE) += stacktrace.o
24obj-$(CONFIG_BINFMT_ELF) += dump_task.o 24obj-$(CONFIG_BINFMT_ELF) += dump_task.o
25obj-$(CONFIG_IO_TRAPPED) += io_trapped.o
25 26
26EXTRA_CFLAGS += -Werror 27EXTRA_CFLAGS += -Werror
diff --git a/arch/sh/kernel/Makefile_64 b/arch/sh/kernel/Makefile_64
index 1ef21cc087f3..e01283d49cbf 100644
--- a/arch/sh/kernel/Makefile_64
+++ b/arch/sh/kernel/Makefile_64
@@ -18,5 +18,6 @@ obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
18obj-$(CONFIG_PM) += pm.o 18obj-$(CONFIG_PM) += pm.o
19obj-$(CONFIG_STACKTRACE) += stacktrace.o 19obj-$(CONFIG_STACKTRACE) += stacktrace.o
20obj-$(CONFIG_BINFMT_ELF) += dump_task.o 20obj-$(CONFIG_BINFMT_ELF) += dump_task.o
21obj-$(CONFIG_IO_TRAPPED) += io_trapped.o
21 22
22EXTRA_CFLAGS += -Werror 23EXTRA_CFLAGS += -Werror
diff --git a/arch/sh/kernel/cpu/irq/Makefile b/arch/sh/kernel/cpu/irq/Makefile
index cc1836e47a5d..462a8f6dfee2 100644
--- a/arch/sh/kernel/cpu/irq/Makefile
+++ b/arch/sh/kernel/cpu/irq/Makefile
@@ -6,4 +6,3 @@ obj-y += intc.o
6obj-$(CONFIG_SUPERH32) += imask.o 6obj-$(CONFIG_SUPERH32) += imask.o
7obj-$(CONFIG_CPU_SH5) += intc-sh5.o 7obj-$(CONFIG_CPU_SH5) += intc-sh5.o
8obj-$(CONFIG_CPU_HAS_IPR_IRQ) += ipr.o 8obj-$(CONFIG_CPU_HAS_IPR_IRQ) += ipr.o
9obj-$(CONFIG_CPU_HAS_MASKREG_IRQ) += maskreg.o
diff --git a/arch/sh/kernel/cpu/irq/intc-sh5.c b/arch/sh/kernel/cpu/irq/intc-sh5.c
index 43ee7a9a4f0b..d6e0e2bdaad5 100644
--- a/arch/sh/kernel/cpu/irq/intc-sh5.c
+++ b/arch/sh/kernel/cpu/irq/intc-sh5.c
@@ -75,21 +75,6 @@ int intc_evt_to_irq[(0xE20/0x20)+1] = {
75 -1, -1 /* 0xE00 - 0xE20 */ 75 -1, -1 /* 0xE00 - 0xE20 */
76}; 76};
77 77
78/*
79 * Opposite mapper.
80 */
81static int IRQ_to_vectorN[NR_INTC_IRQS] = {
82 0x12, 0x15, 0x18, 0x1B, 0x40, 0x41, 0x42, 0x43, /* 0- 7 */
83 -1, -1, -1, -1, 0x50, 0x51, 0x52, 0x53, /* 8-15 */
84 0x54, 0x55, 0x32, 0x33, 0x34, 0x35, 0x36, -1, /* 16-23 */
85 -1, -1, -1, -1, -1, -1, -1, -1, /* 24-31 */
86 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x38, /* 32-39 */
87 0x39, 0x3A, 0x3B, -1, -1, -1, -1, -1, /* 40-47 */
88 -1, -1, -1, -1, -1, -1, -1, -1, /* 48-55 */
89 -1, -1, -1, -1, -1, -1, -1, 0x2B, /* 56-63 */
90
91};
92
93static unsigned long intc_virt; 78static unsigned long intc_virt;
94 79
95static unsigned int startup_intc_irq(unsigned int irq); 80static unsigned int startup_intc_irq(unsigned int irq);
@@ -176,6 +161,18 @@ void make_intc_irq(unsigned int irq)
176} 161}
177 162
178#if defined(CONFIG_PROC_FS) && defined(CONFIG_SYSCTL) 163#if defined(CONFIG_PROC_FS) && defined(CONFIG_SYSCTL)
164static int IRQ_to_vectorN[NR_INTC_IRQS] = {
165 0x12, 0x15, 0x18, 0x1B, 0x40, 0x41, 0x42, 0x43, /* 0- 7 */
166 -1, -1, -1, -1, 0x50, 0x51, 0x52, 0x53, /* 8-15 */
167 0x54, 0x55, 0x32, 0x33, 0x34, 0x35, 0x36, -1, /* 16-23 */
168 -1, -1, -1, -1, -1, -1, -1, -1, /* 24-31 */
169 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x38, /* 32-39 */
170 0x39, 0x3A, 0x3B, -1, -1, -1, -1, -1, /* 40-47 */
171 -1, -1, -1, -1, -1, -1, -1, -1, /* 48-55 */
172 -1, -1, -1, -1, -1, -1, -1, 0x2B, /* 56-63 */
173
174};
175
179int intc_irq_describe(char* p, int irq) 176int intc_irq_describe(char* p, int irq)
180{ 177{
181 if (irq < NR_INTC_IRQS) 178 if (irq < NR_INTC_IRQS)
diff --git a/arch/sh/kernel/cpu/irq/maskreg.c b/arch/sh/kernel/cpu/irq/maskreg.c
deleted file mode 100644
index 978992e367a5..000000000000
--- a/arch/sh/kernel/cpu/irq/maskreg.c
+++ /dev/null
@@ -1,93 +0,0 @@
1/*
2 * Interrupt handling for Simple external interrupt mask register
3 *
4 * Copyright (C) 2001 A&D Co., Ltd. <http://www.aandd.co.jp>
5 *
6 * This is for the machine which have single 16 bit register
7 * for masking external IRQ individually.
8 * Each bit of the register is for masking each interrupt.
9 *
10 * This file may be copied or modified under the terms of the GNU
11 * General Public License. See linux/COPYING for more information.
12 */
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/irq.h>
16#include <asm/system.h>
17#include <asm/io.h>
18
19/* address of external interrupt mask register */
20unsigned long irq_mask_register;
21
22/* forward declaration */
23static unsigned int startup_maskreg_irq(unsigned int irq);
24static void shutdown_maskreg_irq(unsigned int irq);
25static void enable_maskreg_irq(unsigned int irq);
26static void disable_maskreg_irq(unsigned int irq);
27static void mask_and_ack_maskreg(unsigned int);
28static void end_maskreg_irq(unsigned int irq);
29
30/* hw_interrupt_type */
31static struct hw_interrupt_type maskreg_irq_type = {
32 .typename = "Mask Register",
33 .startup = startup_maskreg_irq,
34 .shutdown = shutdown_maskreg_irq,
35 .enable = enable_maskreg_irq,
36 .disable = disable_maskreg_irq,
37 .ack = mask_and_ack_maskreg,
38 .end = end_maskreg_irq
39};
40
41/* actual implementation */
42static unsigned int startup_maskreg_irq(unsigned int irq)
43{
44 enable_maskreg_irq(irq);
45 return 0; /* never anything pending */
46}
47
48static void shutdown_maskreg_irq(unsigned int irq)
49{
50 disable_maskreg_irq(irq);
51}
52
53static void disable_maskreg_irq(unsigned int irq)
54{
55 unsigned short val, mask = 0x01 << irq;
56
57 BUG_ON(!irq_mask_register);
58
59 /* Set "irq"th bit */
60 val = ctrl_inw(irq_mask_register);
61 val |= mask;
62 ctrl_outw(val, irq_mask_register);
63}
64
65static void enable_maskreg_irq(unsigned int irq)
66{
67 unsigned short val, mask = ~(0x01 << irq);
68
69 BUG_ON(!irq_mask_register);
70
71 /* Clear "irq"th bit */
72 val = ctrl_inw(irq_mask_register);
73 val &= mask;
74 ctrl_outw(val, irq_mask_register);
75}
76
77static void mask_and_ack_maskreg(unsigned int irq)
78{
79 disable_maskreg_irq(irq);
80}
81
82static void end_maskreg_irq(unsigned int irq)
83{
84 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
85 enable_maskreg_irq(irq);
86}
87
88void make_maskreg_irq(unsigned int irq)
89{
90 disable_irq_nosync(irq);
91 irq_desc[irq].handler = &maskreg_irq_type;
92 disable_maskreg_irq(irq);
93}
diff --git a/arch/sh/kernel/cpu/sh4/probe.c b/arch/sh/kernel/cpu/sh4/probe.c
index f2b9238cda04..9e89984c4f1d 100644
--- a/arch/sh/kernel/cpu/sh4/probe.c
+++ b/arch/sh/kernel/cpu/sh4/probe.c
@@ -126,12 +126,18 @@ int __init detect_cpu_and_cache_system(void)
126 CPU_HAS_LLSC; 126 CPU_HAS_LLSC;
127 break; 127 break;
128 case 0x3008: 128 case 0x3008:
129 if (prr == 0xa0) { 129 if (prr == 0xa0 || prr == 0xa1) {
130 boot_cpu_data.type = CPU_SH7722; 130 boot_cpu_data.type = CPU_SH7722;
131 boot_cpu_data.icache.ways = 4; 131 boot_cpu_data.icache.ways = 4;
132 boot_cpu_data.dcache.ways = 4; 132 boot_cpu_data.dcache.ways = 4;
133 boot_cpu_data.flags |= CPU_HAS_LLSC; 133 boot_cpu_data.flags |= CPU_HAS_LLSC;
134 } 134 }
135 else if (prr == 0x70) {
136 boot_cpu_data.type = CPU_SH7366;
137 boot_cpu_data.icache.ways = 4;
138 boot_cpu_data.dcache.ways = 4;
139 boot_cpu_data.flags |= CPU_HAS_LLSC;
140 }
135 break; 141 break;
136 case 0x4000: /* 1st cut */ 142 case 0x4000: /* 1st cut */
137 case 0x4001: /* 2nd cut */ 143 case 0x4001: /* 2nd cut */
diff --git a/arch/sh/kernel/cpu/sh4a/Makefile b/arch/sh/kernel/cpu/sh4a/Makefile
index 08ac6387bf17..5d890ac8e793 100644
--- a/arch/sh/kernel/cpu/sh4a/Makefile
+++ b/arch/sh/kernel/cpu/sh4a/Makefile
@@ -9,6 +9,7 @@ obj-$(CONFIG_CPU_SUBTYPE_SH7780) += setup-sh7780.o
9obj-$(CONFIG_CPU_SUBTYPE_SH7785) += setup-sh7785.o 9obj-$(CONFIG_CPU_SUBTYPE_SH7785) += setup-sh7785.o
10obj-$(CONFIG_CPU_SUBTYPE_SH7343) += setup-sh7343.o 10obj-$(CONFIG_CPU_SUBTYPE_SH7343) += setup-sh7343.o
11obj-$(CONFIG_CPU_SUBTYPE_SH7722) += setup-sh7722.o 11obj-$(CONFIG_CPU_SUBTYPE_SH7722) += setup-sh7722.o
12obj-$(CONFIG_CPU_SUBTYPE_SH7366) += setup-sh7366.o
12obj-$(CONFIG_CPU_SUBTYPE_SHX3) += setup-shx3.o 13obj-$(CONFIG_CPU_SUBTYPE_SHX3) += setup-shx3.o
13 14
14# SMP setup 15# SMP setup
@@ -21,6 +22,7 @@ clock-$(CONFIG_CPU_SUBTYPE_SH7780) := clock-sh7780.o
21clock-$(CONFIG_CPU_SUBTYPE_SH7785) := clock-sh7785.o 22clock-$(CONFIG_CPU_SUBTYPE_SH7785) := clock-sh7785.o
22clock-$(CONFIG_CPU_SUBTYPE_SH7343) := clock-sh7343.o 23clock-$(CONFIG_CPU_SUBTYPE_SH7343) := clock-sh7343.o
23clock-$(CONFIG_CPU_SUBTYPE_SH7722) := clock-sh7722.o 24clock-$(CONFIG_CPU_SUBTYPE_SH7722) := clock-sh7722.o
25clock-$(CONFIG_CPU_SUBTYPE_SH7366) := clock-sh7722.o
24clock-$(CONFIG_CPU_SUBTYPE_SHX3) := clock-shx3.o 26clock-$(CONFIG_CPU_SUBTYPE_SHX3) := clock-shx3.o
25 27
26obj-y += $(clock-y) 28obj-y += $(clock-y)
diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c
index a0fd8bb21f7c..299138ebe160 100644
--- a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c
+++ b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * arch/sh/kernel/cpu/sh4a/clock-sh7722.c 2 * arch/sh/kernel/cpu/sh4a/clock-sh7722.c
3 * 3 *
4 * SH7722 support for the clock framework 4 * SH7722 & SH7366 support for the clock framework
5 * 5 *
6 * Copyright (c) 2006-2007 Nomad Global Solutions Inc 6 * Copyright (c) 2006-2007 Nomad Global Solutions Inc
7 * Based on code for sh7343 by Paul Mundt 7 * Based on code for sh7343 by Paul Mundt
@@ -417,15 +417,19 @@ static int sh7722_siu_which(struct clk *clk)
417 return 0; 417 return 0;
418 if (!strcmp(clk->name, "siu_b_clk")) 418 if (!strcmp(clk->name, "siu_b_clk"))
419 return 1; 419 return 1;
420#if defined(CONFIG_CPU_SUBTYPE_SH7722)
420 if (!strcmp(clk->name, "irda_clk")) 421 if (!strcmp(clk->name, "irda_clk"))
421 return 2; 422 return 2;
423#endif
422 return -EINVAL; 424 return -EINVAL;
423} 425}
424 426
425static unsigned long sh7722_siu_regs[] = { 427static unsigned long sh7722_siu_regs[] = {
426 [0] = SCLKACR, 428 [0] = SCLKACR,
427 [1] = SCLKBCR, 429 [1] = SCLKBCR,
430#if defined(CONFIG_CPU_SUBTYPE_SH7722)
428 [2] = IrDACLKCR, 431 [2] = IrDACLKCR,
432#endif
429}; 433};
430 434
431static int sh7722_siu_start_stop(struct clk *clk, int enable) 435static int sh7722_siu_start_stop(struct clk *clk, int enable)
@@ -571,10 +575,12 @@ static struct clk sh7722_siu_b_clock = {
571 .ops = &sh7722_siu_clk_ops, 575 .ops = &sh7722_siu_clk_ops,
572}; 576};
573 577
578#if defined(CONFIG_CPU_SUBTYPE_SH7722)
574static struct clk sh7722_irda_clock = { 579static struct clk sh7722_irda_clock = {
575 .name = "irda_clk", 580 .name = "irda_clk",
576 .ops = &sh7722_siu_clk_ops, 581 .ops = &sh7722_siu_clk_ops,
577}; 582};
583#endif
578 584
579static struct clk sh7722_video_clock = { 585static struct clk sh7722_video_clock = {
580 .name = "video_clk", 586 .name = "video_clk",
@@ -588,7 +594,9 @@ static struct clk *sh7722_clocks[] = {
588 &sh7722_sdram_clock, 594 &sh7722_sdram_clock,
589 &sh7722_siu_a_clock, 595 &sh7722_siu_a_clock,
590 &sh7722_siu_b_clock, 596 &sh7722_siu_b_clock,
597#if defined(CONFIG_CPU_SUBTYPE_SH7722)
591 &sh7722_irda_clock, 598 &sh7722_irda_clock,
599#endif
592 &sh7722_video_clock, 600 &sh7722_video_clock,
593}; 601};
594 602
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7366.c b/arch/sh/kernel/cpu/sh4a/setup-sh7366.c
new file mode 100644
index 000000000000..967e8b69a2f8
--- /dev/null
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7366.c
@@ -0,0 +1,177 @@
1/*
2 * SH7366 Setup
3 *
4 * Copyright (C) 2008 Renesas Solutions
5 *
6 * Based on linux/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
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/platform_device.h>
13#include <linux/init.h>
14#include <linux/serial.h>
15#include <asm/sci.h>
16
17static struct plat_sci_port sci_platform_data[] = {
18 {
19 .mapbase = 0xffe00000,
20 .flags = UPF_BOOT_AUTOCONF,
21 .type = PORT_SCIF,
22 .irqs = { 80, 80, 80, 80 },
23 }, {
24 .flags = 0,
25 }
26};
27
28static struct platform_device sci_device = {
29 .name = "sh-sci",
30 .id = -1,
31 .dev = {
32 .platform_data = sci_platform_data,
33 },
34};
35
36static struct platform_device *sh7366_devices[] __initdata = {
37 &sci_device,
38};
39
40static int __init sh7366_devices_setup(void)
41{
42 return platform_add_devices(sh7366_devices,
43 ARRAY_SIZE(sh7366_devices));
44}
45__initcall(sh7366_devices_setup);
46
47enum {
48 UNUSED=0,
49
50 /* interrupt sources */
51 IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
52 ICB,
53 DMAC0, DMAC1, DMAC2, DMAC3,
54 VIO_CEUI, VIO_BEUI, VIO_VEUI, VOU,
55 MFI, VPU, USB,
56 MMC_MMC1I, MMC_MMC2I, MMC_MMC3I,
57 DMAC4, DMAC5, DMAC_DADERR,
58 SCIF, SCIFA1, SCIFA2,
59 DENC, MSIOF,
60 FLCTL_FLSTEI, FLCTL_FLENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I,
61 I2C_ALI, I2C_TACKI, I2C_WAITI, I2C_DTEI,
62 SDHI0, SDHI1, SDHI2, SDHI3,
63 CMT, TSIF, SIU,
64 TMU0, TMU1, TMU2,
65 VEU2, LCDC,
66
67 /* interrupt groups */
68
69 DMAC0123, VIOVOU, MMC, DMAC45, FLCTL, I2C, SDHI,
70};
71
72static struct intc_vect vectors[] __initdata = {
73 INTC_VECT(IRQ0, 0x600), INTC_VECT(IRQ1, 0x620),
74 INTC_VECT(IRQ2, 0x640), INTC_VECT(IRQ3, 0x660),
75 INTC_VECT(IRQ4, 0x680), INTC_VECT(IRQ5, 0x6a0),
76 INTC_VECT(IRQ6, 0x6c0), INTC_VECT(IRQ7, 0x6e0),
77 INTC_VECT(ICB, 0x700),
78 INTC_VECT(DMAC0, 0x800), INTC_VECT(DMAC1, 0x820),
79 INTC_VECT(DMAC2, 0x840), INTC_VECT(DMAC3, 0x860),
80 INTC_VECT(VIO_CEUI, 0x880), INTC_VECT(VIO_BEUI, 0x8a0),
81 INTC_VECT(VIO_VEUI, 0x8c0), INTC_VECT(VOU, 0x8e0),
82 INTC_VECT(MFI, 0x900), INTC_VECT(VPU, 0x980), INTC_VECT(USB, 0xa20),
83 INTC_VECT(MMC_MMC1I, 0xb00), INTC_VECT(MMC_MMC2I, 0xb20),
84 INTC_VECT(MMC_MMC3I, 0xb40),
85 INTC_VECT(DMAC4, 0xb80), INTC_VECT(DMAC5, 0xba0),
86 INTC_VECT(DMAC_DADERR, 0xbc0),
87 INTC_VECT(SCIF, 0xc00), INTC_VECT(SCIFA1, 0xc20),
88 INTC_VECT(SCIFA2, 0xc40),
89 INTC_VECT(DENC, 0xc60), INTC_VECT(MSIOF, 0xc80),
90 INTC_VECT(FLCTL_FLSTEI, 0xd80), INTC_VECT(FLCTL_FLENDI, 0xda0),
91 INTC_VECT(FLCTL_FLTREQ0I, 0xdc0), INTC_VECT(FLCTL_FLTREQ1I, 0xde0),
92 INTC_VECT(I2C_ALI, 0xe00), INTC_VECT(I2C_TACKI, 0xe20),
93 INTC_VECT(I2C_WAITI, 0xe40), INTC_VECT(I2C_DTEI, 0xe60),
94 INTC_VECT(SDHI0, 0xe80), INTC_VECT(SDHI1, 0xea0),
95 INTC_VECT(SDHI2, 0xec0), INTC_VECT(SDHI3, 0xee0),
96 INTC_VECT(CMT, 0xf00), INTC_VECT(TSIF, 0xf20),
97 INTC_VECT(SIU, 0xf80),
98 INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),
99 INTC_VECT(TMU2, 0x440),
100 INTC_VECT(VEU2, 0x580), INTC_VECT(LCDC, 0x580),
101};
102
103static struct intc_group groups[] __initdata = {
104 INTC_GROUP(DMAC0123, DMAC0, DMAC1, DMAC2, DMAC3),
105 INTC_GROUP(VIOVOU, VIO_CEUI, VIO_BEUI, VIO_VEUI, VOU),
106 INTC_GROUP(MMC, MMC_MMC1I, MMC_MMC2I, MMC_MMC3I),
107 INTC_GROUP(DMAC45, DMAC4, DMAC5, DMAC_DADERR),
108 INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLENDI,
109 FLCTL_FLTREQ0I, FLCTL_FLTREQ1I),
110 INTC_GROUP(I2C, I2C_ALI, I2C_TACKI, I2C_WAITI, I2C_DTEI),
111 INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2, SDHI3),
112};
113
114static struct intc_mask_reg mask_registers[] __initdata = {
115 { 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */
116 { } },
117 { 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */
118 { VOU, VIO_VEUI, VIO_BEUI, VIO_CEUI, DMAC3, DMAC2, DMAC1, DMAC0 } },
119 { 0xa4080088, 0xa40800c8, 8, /* IMR2 / IMCR2 */
120 { 0, 0, 0, VPU, 0, 0, 0, MFI } },
121 { 0xa408008c, 0xa40800cc, 8, /* IMR3 / IMCR3 */
122 { 0, 0, 0, ICB } },
123 { 0xa4080090, 0xa40800d0, 8, /* IMR4 / IMCR4 */
124 { 0, TMU2, TMU1, TMU0, VEU2, 0, 0, LCDC } },
125 { 0xa4080094, 0xa40800d4, 8, /* IMR5 / IMCR5 */
126 { 0, DMAC_DADERR, DMAC5, DMAC4, DENC, SCIFA2, SCIFA1, SCIF } },
127 { 0xa4080098, 0xa40800d8, 8, /* IMR6 / IMCR6 */
128 { 0, 0, 0, 0, 0, 0, 0, MSIOF } },
129 { 0xa408009c, 0xa40800dc, 8, /* IMR7 / IMCR7 */
130 { I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,
131 FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLENDI, FLCTL_FLSTEI } },
132 { 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */
133 { SDHI3, SDHI2, SDHI1, SDHI0, 0, 0, 0, SIU } },
134 { 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */
135 { 0, 0, 0, CMT, 0, USB, } },
136 { 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */
137 { 0, MMC_MMC3I, MMC_MMC2I, MMC_MMC1I } },
138 { 0xa40800ac, 0xa40800ec, 8, /* IMR11 / IMCR11 */
139 { 0, 0, 0, 0, 0, 0, 0, TSIF } },
140 { 0xa4140044, 0xa4140064, 8, /* INTMSK00 / INTMSKCLR00 */
141 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
142};
143
144static struct intc_prio_reg prio_registers[] __initdata = {
145 { 0xa4080000, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2 } },
146 { 0xa4080004, 0, 16, 4, /* IPRB */ { VEU2, LCDC, ICB } },
147 { 0xa4080008, 0, 16, 4, /* IPRC */ { } },
148 { 0xa408000c, 0, 16, 4, /* IPRD */ { } },
149 { 0xa4080010, 0, 16, 4, /* IPRE */ { DMAC0123, VIOVOU, MFI, VPU } },
150 { 0xa4080014, 0, 16, 4, /* IPRF */ { 0, DMAC45, USB, CMT } },
151 { 0xa4080018, 0, 16, 4, /* IPRG */ { SCIF, SCIFA1, SCIFA2, DENC } },
152 { 0xa408001c, 0, 16, 4, /* IPRH */ { MSIOF, 0, FLCTL, I2C } },
153 { 0xa4080020, 0, 16, 4, /* IPRI */ { 0, 0, TSIF, } },
154 { 0xa4080024, 0, 16, 4, /* IPRJ */ { 0, 0, SIU } },
155 { 0xa4080028, 0, 16, 4, /* IPRK */ { 0, MMC, 0, SDHI } },
156 { 0xa408002c, 0, 16, 4, /* IPRL */ { } },
157 { 0xa4140010, 0, 32, 4, /* INTPRI00 */
158 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
159};
160
161static struct intc_sense_reg sense_registers[] __initdata = {
162 { 0xa414001c, 16, 2, /* ICR1 */
163 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
164};
165
166static DECLARE_INTC_DESC(intc_desc, "sh7366", vectors, groups,
167 mask_registers, prio_registers, sense_registers);
168
169void __init plat_irq_setup(void)
170{
171 register_intc_controller(&intc_desc);
172}
173
174void __init plat_mem_setup(void)
175{
176 /* TODO: Register Node 1 */
177}
diff --git a/arch/sh/kernel/cpu/sh5/probe.c b/arch/sh/kernel/cpu/sh5/probe.c
index 15d167fd0ae7..31f8cb0f6374 100644
--- a/arch/sh/kernel/cpu/sh5/probe.c
+++ b/arch/sh/kernel/cpu/sh5/probe.c
@@ -20,19 +20,18 @@ int __init detect_cpu_and_cache_system(void)
20{ 20{
21 unsigned long long cir; 21 unsigned long long cir;
22 22
23 /* Do peeks in real mode to avoid having to set up a mapping for the 23 /*
24 WPC registers. On SH5-101 cut2, such a mapping would be exposed to 24 * Do peeks in real mode to avoid having to set up a mapping for
25 an address translation erratum which would make it hard to set up 25 * the WPC registers. On SH5-101 cut2, such a mapping would be
26 correctly. */ 26 * exposed to an address translation erratum which would make it
27 * hard to set up correctly.
28 */
27 cir = peek_real_address_q(0x0d000008); 29 cir = peek_real_address_q(0x0d000008);
28 if ((cir & 0xffff) == 0x5103) { 30 if ((cir & 0xffff) == 0x5103)
29 boot_cpu_data.type = CPU_SH5_103; 31 boot_cpu_data.type = CPU_SH5_103;
30 } else if (((cir >> 32) & 0xffff) == 0x51e2) { 32 else if (((cir >> 32) & 0xffff) == 0x51e2)
31 /* CPU.VCR aliased at CIR address on SH5-101 */ 33 /* CPU.VCR aliased at CIR address on SH5-101 */
32 boot_cpu_data.type = CPU_SH5_101; 34 boot_cpu_data.type = CPU_SH5_101;
33 } else {
34 boot_cpu_data.type = CPU_SH_NONE;
35 }
36 35
37 /* 36 /*
38 * First, setup some sane values for the I-cache. 37 * First, setup some sane values for the I-cache.
@@ -40,37 +39,33 @@ int __init detect_cpu_and_cache_system(void)
40 boot_cpu_data.icache.ways = 4; 39 boot_cpu_data.icache.ways = 4;
41 boot_cpu_data.icache.sets = 256; 40 boot_cpu_data.icache.sets = 256;
42 boot_cpu_data.icache.linesz = L1_CACHE_BYTES; 41 boot_cpu_data.icache.linesz = L1_CACHE_BYTES;
42 boot_cpu_data.icache.way_incr = (1 << 13);
43 boot_cpu_data.icache.entry_shift = 5;
44 boot_cpu_data.icache.way_size = boot_cpu_data.icache.sets *
45 boot_cpu_data.icache.linesz;
46 boot_cpu_data.icache.entry_mask = 0x1fe0;
47 boot_cpu_data.icache.flags = 0;
43 48
44#if 0
45 /* 49 /*
46 * FIXME: This can probably be cleaned up a bit as well.. for example, 50 * Next, setup some sane values for the D-cache.
47 * do we really need the way shift _and_ the way_step_shift ?? Judging 51 *
48 * by the existing code, I would guess no.. is there any valid reason 52 * On the SH5, these are pretty consistent with the I-cache settings,
49 * why we need to be tracking this around? 53 * so we just copy over the existing definitions.. these can be fixed
54 * up later, especially if we add runtime CPU probing.
55 *
56 * Though in the meantime it saves us from having to duplicate all of
57 * the above definitions..
50 */ 58 */
51 boot_cpu_data.icache.way_shift = 13; 59 boot_cpu_data.dcache = boot_cpu_data.icache;
52 boot_cpu_data.icache.entry_shift = 5;
53 boot_cpu_data.icache.set_shift = 4;
54 boot_cpu_data.icache.way_step_shift = 16;
55 boot_cpu_data.icache.asid_shift = 2;
56 60
57 /* 61 /*
58 * way offset = cache size / associativity, so just don't factor in 62 * Setup any cache-related flags here
59 * associativity in the first place..
60 */ 63 */
61 boot_cpu_data.icache.way_ofs = boot_cpu_data.icache.sets * 64#if defined(CONFIG_CACHE_WRITETHROUGH)
62 boot_cpu_data.icache.linesz; 65 set_bit(SH_CACHE_MODE_WT, &(boot_cpu_data.dcache.flags));
63 66#elif defined(CONFIG_CACHE_WRITEBACK)
64 boot_cpu_data.icache.asid_mask = 0x3fc; 67 set_bit(SH_CACHE_MODE_WB, &(boot_cpu_data.dcache.flags));
65 boot_cpu_data.icache.idx_mask = 0x1fe0;
66 boot_cpu_data.icache.epn_mask = 0xffffe000;
67#endif 68#endif
68 69
69 boot_cpu_data.icache.flags = 0;
70
71 /* A trivial starting point.. */
72 memcpy(&boot_cpu_data.dcache,
73 &boot_cpu_data.icache, sizeof(struct cache_info));
74
75 return 0; 70 return 0;
76} 71}
diff --git a/arch/sh/kernel/io.c b/arch/sh/kernel/io.c
index 71c9fde2fd90..2b8991229900 100644
--- a/arch/sh/kernel/io.c
+++ b/arch/sh/kernel/io.c
@@ -63,7 +63,13 @@ EXPORT_SYMBOL(memset_io);
63 63
64void __iomem *ioport_map(unsigned long port, unsigned int nr) 64void __iomem *ioport_map(unsigned long port, unsigned int nr)
65{ 65{
66 return sh_mv.mv_ioport_map(port, nr); 66 void __iomem *ret;
67
68 ret = __ioport_map_trapped(port, nr);
69 if (ret)
70 return ret;
71
72 return __ioport_map(port, nr);
67} 73}
68EXPORT_SYMBOL(ioport_map); 74EXPORT_SYMBOL(ioport_map);
69 75
diff --git a/arch/sh/kernel/io_generic.c b/arch/sh/kernel/io_generic.c
index 771ea4230441..db769449f5a7 100644
--- a/arch/sh/kernel/io_generic.c
+++ b/arch/sh/kernel/io_generic.c
@@ -33,17 +33,17 @@ static inline void delay(void)
33 33
34u8 generic_inb(unsigned long port) 34u8 generic_inb(unsigned long port)
35{ 35{
36 return ctrl_inb((unsigned long __force)ioport_map(port, 1)); 36 return ctrl_inb((unsigned long __force)__ioport_map(port, 1));
37} 37}
38 38
39u16 generic_inw(unsigned long port) 39u16 generic_inw(unsigned long port)
40{ 40{
41 return ctrl_inw((unsigned long __force)ioport_map(port, 2)); 41 return ctrl_inw((unsigned long __force)__ioport_map(port, 2));
42} 42}
43 43
44u32 generic_inl(unsigned long port) 44u32 generic_inl(unsigned long port)
45{ 45{
46 return ctrl_inl((unsigned long __force)ioport_map(port, 4)); 46 return ctrl_inl((unsigned long __force)__ioport_map(port, 4));
47} 47}
48 48
49u8 generic_inb_p(unsigned long port) 49u8 generic_inb_p(unsigned long port)
@@ -81,7 +81,7 @@ void generic_insb(unsigned long port, void *dst, unsigned long count)
81 volatile u8 *port_addr; 81 volatile u8 *port_addr;
82 u8 *buf = dst; 82 u8 *buf = dst;
83 83
84 port_addr = (volatile u8 *)ioport_map(port, 1); 84 port_addr = (volatile u8 *)__ioport_map(port, 1);
85 while (count--) 85 while (count--)
86 *buf++ = *port_addr; 86 *buf++ = *port_addr;
87} 87}
@@ -91,7 +91,7 @@ void generic_insw(unsigned long port, void *dst, unsigned long count)
91 volatile u16 *port_addr; 91 volatile u16 *port_addr;
92 u16 *buf = dst; 92 u16 *buf = dst;
93 93
94 port_addr = (volatile u16 *)ioport_map(port, 2); 94 port_addr = (volatile u16 *)__ioport_map(port, 2);
95 while (count--) 95 while (count--)
96 *buf++ = *port_addr; 96 *buf++ = *port_addr;
97 97
@@ -103,7 +103,7 @@ void generic_insl(unsigned long port, void *dst, unsigned long count)
103 volatile u32 *port_addr; 103 volatile u32 *port_addr;
104 u32 *buf = dst; 104 u32 *buf = dst;
105 105
106 port_addr = (volatile u32 *)ioport_map(port, 4); 106 port_addr = (volatile u32 *)__ioport_map(port, 4);
107 while (count--) 107 while (count--)
108 *buf++ = *port_addr; 108 *buf++ = *port_addr;
109 109
@@ -112,17 +112,17 @@ void generic_insl(unsigned long port, void *dst, unsigned long count)
112 112
113void generic_outb(u8 b, unsigned long port) 113void generic_outb(u8 b, unsigned long port)
114{ 114{
115 ctrl_outb(b, (unsigned long __force)ioport_map(port, 1)); 115 ctrl_outb(b, (unsigned long __force)__ioport_map(port, 1));
116} 116}
117 117
118void generic_outw(u16 b, unsigned long port) 118void generic_outw(u16 b, unsigned long port)
119{ 119{
120 ctrl_outw(b, (unsigned long __force)ioport_map(port, 2)); 120 ctrl_outw(b, (unsigned long __force)__ioport_map(port, 2));
121} 121}
122 122
123void generic_outl(u32 b, unsigned long port) 123void generic_outl(u32 b, unsigned long port)
124{ 124{
125 ctrl_outl(b, (unsigned long __force)ioport_map(port, 4)); 125 ctrl_outl(b, (unsigned long __force)__ioport_map(port, 4));
126} 126}
127 127
128void generic_outb_p(u8 b, unsigned long port) 128void generic_outb_p(u8 b, unsigned long port)
@@ -153,7 +153,7 @@ void generic_outsb(unsigned long port, const void *src, unsigned long count)
153 volatile u8 *port_addr; 153 volatile u8 *port_addr;
154 const u8 *buf = src; 154 const u8 *buf = src;
155 155
156 port_addr = (volatile u8 __force *)ioport_map(port, 1); 156 port_addr = (volatile u8 __force *)__ioport_map(port, 1);
157 157
158 while (count--) 158 while (count--)
159 *port_addr = *buf++; 159 *port_addr = *buf++;
@@ -164,7 +164,7 @@ void generic_outsw(unsigned long port, const void *src, unsigned long count)
164 volatile u16 *port_addr; 164 volatile u16 *port_addr;
165 const u16 *buf = src; 165 const u16 *buf = src;
166 166
167 port_addr = (volatile u16 __force *)ioport_map(port, 2); 167 port_addr = (volatile u16 __force *)__ioport_map(port, 2);
168 168
169 while (count--) 169 while (count--)
170 *port_addr = *buf++; 170 *port_addr = *buf++;
@@ -177,7 +177,7 @@ void generic_outsl(unsigned long port, const void *src, unsigned long count)
177 volatile u32 *port_addr; 177 volatile u32 *port_addr;
178 const u32 *buf = src; 178 const u32 *buf = src;
179 179
180 port_addr = (volatile u32 __force *)ioport_map(port, 4); 180 port_addr = (volatile u32 __force *)__ioport_map(port, 4);
181 while (count--) 181 while (count--)
182 *port_addr = *buf++; 182 *port_addr = *buf++;
183 183
diff --git a/arch/sh/kernel/io_trapped.c b/arch/sh/kernel/io_trapped.c
new file mode 100644
index 000000000000..86a665d92201
--- /dev/null
+++ b/arch/sh/kernel/io_trapped.c
@@ -0,0 +1,276 @@
1/*
2 * Trapped io support
3 *
4 * Copyright (C) 2008 Magnus Damm
5 *
6 * Intercept io operations by trapping.
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/kernel.h>
13#include <linux/mm.h>
14#include <linux/bitops.h>
15#include <linux/vmalloc.h>
16#include <linux/module.h>
17#include <asm/system.h>
18#include <asm/mmu_context.h>
19#include <asm/uaccess.h>
20#include <asm/io.h>
21#include <asm/io_trapped.h>
22
23#define TRAPPED_PAGES_MAX 16
24
25#ifdef CONFIG_HAS_IOPORT
26LIST_HEAD(trapped_io);
27EXPORT_SYMBOL_GPL(trapped_io);
28#endif
29#ifdef CONFIG_HAS_IOMEM
30LIST_HEAD(trapped_mem);
31EXPORT_SYMBOL_GPL(trapped_mem);
32#endif
33static DEFINE_SPINLOCK(trapped_lock);
34
35int __init register_trapped_io(struct trapped_io *tiop)
36{
37 struct resource *res;
38 unsigned long len = 0, flags = 0;
39 struct page *pages[TRAPPED_PAGES_MAX];
40 int k, n;
41
42 /* structure must be page aligned */
43 if ((unsigned long)tiop & (PAGE_SIZE - 1))
44 goto bad;
45
46 for (k = 0; k < tiop->num_resources; k++) {
47 res = tiop->resource + k;
48 len += roundup((res->end - res->start) + 1, PAGE_SIZE);
49 flags |= res->flags;
50 }
51
52 /* support IORESOURCE_IO _or_ MEM, not both */
53 if (hweight_long(flags) != 1)
54 goto bad;
55
56 n = len >> PAGE_SHIFT;
57
58 if (n >= TRAPPED_PAGES_MAX)
59 goto bad;
60
61 for (k = 0; k < n; k++)
62 pages[k] = virt_to_page(tiop);
63
64 tiop->virt_base = vmap(pages, n, VM_MAP, PAGE_NONE);
65 if (!tiop->virt_base)
66 goto bad;
67
68 len = 0;
69 for (k = 0; k < tiop->num_resources; k++) {
70 res = tiop->resource + k;
71 pr_info("trapped io 0x%08lx overrides %s 0x%08lx\n",
72 (unsigned long)(tiop->virt_base + len),
73 res->flags & IORESOURCE_IO ? "io" : "mmio",
74 (unsigned long)res->start);
75 len += roundup((res->end - res->start) + 1, PAGE_SIZE);
76 }
77
78 tiop->magic = IO_TRAPPED_MAGIC;
79 INIT_LIST_HEAD(&tiop->list);
80 spin_lock_irq(&trapped_lock);
81 if (flags & IORESOURCE_IO)
82 list_add(&tiop->list, &trapped_io);
83 if (flags & IORESOURCE_MEM)
84 list_add(&tiop->list, &trapped_mem);
85 spin_unlock_irq(&trapped_lock);
86
87 return 0;
88 bad:
89 pr_warning("unable to install trapped io filter\n");
90 return -1;
91}
92EXPORT_SYMBOL_GPL(register_trapped_io);
93
94void __iomem *match_trapped_io_handler(struct list_head *list,
95 unsigned long offset,
96 unsigned long size)
97{
98 unsigned long voffs;
99 struct trapped_io *tiop;
100 struct resource *res;
101 int k, len;
102
103 spin_lock_irq(&trapped_lock);
104 list_for_each_entry(tiop, list, list) {
105 voffs = 0;
106 for (k = 0; k < tiop->num_resources; k++) {
107 res = tiop->resource + k;
108 if (res->start == offset) {
109 spin_unlock_irq(&trapped_lock);
110 return tiop->virt_base + voffs;
111 }
112
113 len = (res->end - res->start) + 1;
114 voffs += roundup(len, PAGE_SIZE);
115 }
116 }
117 spin_unlock_irq(&trapped_lock);
118 return NULL;
119}
120EXPORT_SYMBOL_GPL(match_trapped_io_handler);
121
122static struct trapped_io *lookup_tiop(unsigned long address)
123{
124 pgd_t *pgd_k;
125 pud_t *pud_k;
126 pmd_t *pmd_k;
127 pte_t *pte_k;
128 pte_t entry;
129
130 pgd_k = swapper_pg_dir + pgd_index(address);
131 if (!pgd_present(*pgd_k))
132 return NULL;
133
134 pud_k = pud_offset(pgd_k, address);
135 if (!pud_present(*pud_k))
136 return NULL;
137
138 pmd_k = pmd_offset(pud_k, address);
139 if (!pmd_present(*pmd_k))
140 return NULL;
141
142 pte_k = pte_offset_kernel(pmd_k, address);
143 entry = *pte_k;
144
145 return pfn_to_kaddr(pte_pfn(entry));
146}
147
148static unsigned long lookup_address(struct trapped_io *tiop,
149 unsigned long address)
150{
151 struct resource *res;
152 unsigned long vaddr = (unsigned long)tiop->virt_base;
153 unsigned long len;
154 int k;
155
156 for (k = 0; k < tiop->num_resources; k++) {
157 res = tiop->resource + k;
158 len = roundup((res->end - res->start) + 1, PAGE_SIZE);
159 if (address < (vaddr + len))
160 return res->start + (address - vaddr);
161 vaddr += len;
162 }
163 return 0;
164}
165
166static unsigned long long copy_word(unsigned long src_addr, int src_len,
167 unsigned long dst_addr, int dst_len)
168{
169 unsigned long long tmp = 0;
170
171 switch (src_len) {
172 case 1:
173 tmp = ctrl_inb(src_addr);
174 break;
175 case 2:
176 tmp = ctrl_inw(src_addr);
177 break;
178 case 4:
179 tmp = ctrl_inl(src_addr);
180 break;
181 case 8:
182 tmp = ctrl_inq(src_addr);
183 break;
184 }
185
186 switch (dst_len) {
187 case 1:
188 ctrl_outb(tmp, dst_addr);
189 break;
190 case 2:
191 ctrl_outw(tmp, dst_addr);
192 break;
193 case 4:
194 ctrl_outl(tmp, dst_addr);
195 break;
196 case 8:
197 ctrl_outq(tmp, dst_addr);
198 break;
199 }
200
201 return tmp;
202}
203
204static unsigned long from_device(void *dst, const void *src, unsigned long cnt)
205{
206 struct trapped_io *tiop;
207 unsigned long src_addr = (unsigned long)src;
208 unsigned long long tmp;
209
210 pr_debug("trapped io read 0x%08lx (%ld)\n", src_addr, cnt);
211 tiop = lookup_tiop(src_addr);
212 WARN_ON(!tiop || (tiop->magic != IO_TRAPPED_MAGIC));
213
214 src_addr = lookup_address(tiop, src_addr);
215 if (!src_addr)
216 return cnt;
217
218 tmp = copy_word(src_addr,
219 max_t(unsigned long, cnt,
220 (tiop->minimum_bus_width / 8)),
221 (unsigned long)dst, cnt);
222
223 pr_debug("trapped io read 0x%08lx -> 0x%08llx\n", src_addr, tmp);
224 return 0;
225}
226
227static unsigned long to_device(void *dst, const void *src, unsigned long cnt)
228{
229 struct trapped_io *tiop;
230 unsigned long dst_addr = (unsigned long)dst;
231 unsigned long long tmp;
232
233 pr_debug("trapped io write 0x%08lx (%ld)\n", dst_addr, cnt);
234 tiop = lookup_tiop(dst_addr);
235 WARN_ON(!tiop || (tiop->magic != IO_TRAPPED_MAGIC));
236
237 dst_addr = lookup_address(tiop, dst_addr);
238 if (!dst_addr)
239 return cnt;
240
241 tmp = copy_word((unsigned long)src, cnt,
242 dst_addr, max_t(unsigned long, cnt,
243 (tiop->minimum_bus_width / 8)));
244
245 pr_debug("trapped io write 0x%08lx -> 0x%08llx\n", dst_addr, tmp);
246 return 0;
247}
248
249static struct mem_access trapped_io_access = {
250 from_device,
251 to_device,
252};
253
254int handle_trapped_io(struct pt_regs *regs, unsigned long address)
255{
256 mm_segment_t oldfs;
257 opcode_t instruction;
258 int tmp;
259
260 if (!lookup_tiop(address))
261 return 0;
262
263 WARN_ON(user_mode(regs));
264
265 oldfs = get_fs();
266 set_fs(KERNEL_DS);
267 if (copy_from_user(&instruction, (void *)(regs->pc),
268 sizeof(instruction))) {
269 set_fs(oldfs);
270 return 0;
271 }
272
273 tmp = handle_unaligned_access(instruction, regs, &trapped_io_access);
274 set_fs(oldfs);
275 return tmp == 0;
276}
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c
index 0586bc62ad96..9bf19b00696a 100644
--- a/arch/sh/kernel/irq.c
+++ b/arch/sh/kernel/irq.c
@@ -248,9 +248,6 @@ asmlinkage void do_softirq(void)
248 248
249void __init init_IRQ(void) 249void __init init_IRQ(void)
250{ 250{
251#ifdef CONFIG_CPU_HAS_PINT_IRQ
252 init_IRQ_pint();
253#endif
254 plat_irq_setup(); 251 plat_irq_setup();
255 252
256 /* Perform the machine specific initialisation */ 253 /* Perform the machine specific initialisation */
diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c
index cff3b7dc9c56..046999b1d1af 100644
--- a/arch/sh/kernel/process_64.c
+++ b/arch/sh/kernel/process_64.c
@@ -623,6 +623,7 @@ extern void interruptible_sleep_on(wait_queue_head_t *q);
623 623
624#define mid_sched ((unsigned long) interruptible_sleep_on) 624#define mid_sched ((unsigned long) interruptible_sleep_on)
625 625
626#ifdef CONFIG_FRAME_POINTER
626static int in_sh64_switch_to(unsigned long pc) 627static int in_sh64_switch_to(unsigned long pc)
627{ 628{
628 extern char __sh64_switch_to_end; 629 extern char __sh64_switch_to_end;
@@ -631,12 +632,10 @@ static int in_sh64_switch_to(unsigned long pc)
631 return (pc >= (unsigned long) sh64_switch_to) && 632 return (pc >= (unsigned long) sh64_switch_to) &&
632 (pc < (unsigned long) &__sh64_switch_to_end); 633 (pc < (unsigned long) &__sh64_switch_to_end);
633} 634}
635#endif
634 636
635unsigned long get_wchan(struct task_struct *p) 637unsigned long get_wchan(struct task_struct *p)
636{ 638{
637 unsigned long schedule_fp;
638 unsigned long sh64_switch_to_fp;
639 unsigned long schedule_caller_pc;
640 unsigned long pc; 639 unsigned long pc;
641 640
642 if (!p || p == current || p->state == TASK_RUNNING) 641 if (!p || p == current || p->state == TASK_RUNNING)
@@ -649,6 +648,10 @@ unsigned long get_wchan(struct task_struct *p)
649 648
650#ifdef CONFIG_FRAME_POINTER 649#ifdef CONFIG_FRAME_POINTER
651 if (in_sh64_switch_to(pc)) { 650 if (in_sh64_switch_to(pc)) {
651 unsigned long schedule_fp;
652 unsigned long sh64_switch_to_fp;
653 unsigned long schedule_caller_pc;
654
652 sh64_switch_to_fp = (long) p->thread.sp; 655 sh64_switch_to_fp = (long) p->thread.sp;
653 /* r14 is saved at offset 4 in the sh64_switch_to frame */ 656 /* r14 is saved at offset 4 in the sh64_switch_to frame */
654 schedule_fp = *(unsigned long *) (long)(sh64_switch_to_fp + 4); 657 schedule_fp = *(unsigned long *) (long)(sh64_switch_to_fp + 4);
diff --git a/arch/sh/kernel/ptrace_32.c b/arch/sh/kernel/ptrace_32.c
index ce0664a58b49..fddb547f3c2b 100644
--- a/arch/sh/kernel/ptrace_32.c
+++ b/arch/sh/kernel/ptrace_32.c
@@ -220,7 +220,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
220 dp = ((unsigned long) child) + THREAD_SIZE - 220 dp = ((unsigned long) child) + THREAD_SIZE -
221 sizeof(struct pt_dspregs); 221 sizeof(struct pt_dspregs);
222 if (*((int *) (dp - 4)) == SR_FD) { 222 if (*((int *) (dp - 4)) == SR_FD) {
223 copy_to_user(addr, (void *) dp, 223 copy_to_user((void *)addr, (void *) dp,
224 sizeof(struct pt_dspregs)); 224 sizeof(struct pt_dspregs));
225 ret = 0; 225 ret = 0;
226 } 226 }
@@ -234,7 +234,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
234 dp = ((unsigned long) child) + THREAD_SIZE - 234 dp = ((unsigned long) child) + THREAD_SIZE -
235 sizeof(struct pt_dspregs); 235 sizeof(struct pt_dspregs);
236 if (*((int *) (dp - 4)) == SR_FD) { 236 if (*((int *) (dp - 4)) == SR_FD) {
237 copy_from_user((void *) dp, addr, 237 copy_from_user((void *) dp, (void *)addr,
238 sizeof(struct pt_dspregs)); 238 sizeof(struct pt_dspregs));
239 ret = 0; 239 ret = 0;
240 } 240 }
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
index 18a5baf2cbad..ff4f54a47c07 100644
--- a/arch/sh/kernel/setup.c
+++ b/arch/sh/kernel/setup.c
@@ -333,7 +333,7 @@ static const char *cpu_name[] = {
333 [CPU_SH7343] = "SH7343", [CPU_SH7785] = "SH7785", 333 [CPU_SH7343] = "SH7343", [CPU_SH7785] = "SH7785",
334 [CPU_SH7722] = "SH7722", [CPU_SHX3] = "SH-X3", 334 [CPU_SH7722] = "SH7722", [CPU_SHX3] = "SH-X3",
335 [CPU_SH5_101] = "SH5-101", [CPU_SH5_103] = "SH5-103", 335 [CPU_SH5_101] = "SH5-101", [CPU_SH5_103] = "SH5-103",
336 [CPU_SH_NONE] = "Unknown" 336 [CPU_SH7366] = "SH7366", [CPU_SH_NONE] = "Unknown"
337}; 337};
338 338
339const char *get_cpu_subtype(struct sh_cpuinfo *c) 339const char *get_cpu_subtype(struct sh_cpuinfo *c)
diff --git a/arch/sh/kernel/syscalls_32.S b/arch/sh/kernel/syscalls_32.S
index 719e127a7c05..a46cc3a41148 100644
--- a/arch/sh/kernel/syscalls_32.S
+++ b/arch/sh/kernel/syscalls_32.S
@@ -338,6 +338,8 @@ ENTRY(sys_call_table)
338 .long sys_epoll_pwait 338 .long sys_epoll_pwait
339 .long sys_utimensat /* 320 */ 339 .long sys_utimensat /* 320 */
340 .long sys_signalfd 340 .long sys_signalfd
341 .long sys_ni_syscall 341 .long sys_timerfd_create
342 .long sys_eventfd 342 .long sys_eventfd
343 .long sys_fallocate 343 .long sys_fallocate
344 .long sys_timerfd_settime /* 325 */
345 .long sys_timerfd_gettime
diff --git a/arch/sh/kernel/syscalls_64.S b/arch/sh/kernel/syscalls_64.S
index 12c7340356ae..d5d7843aad94 100644
--- a/arch/sh/kernel/syscalls_64.S
+++ b/arch/sh/kernel/syscalls_64.S
@@ -376,6 +376,8 @@ sys_call_table:
376 .long sys_epoll_pwait 376 .long sys_epoll_pwait
377 .long sys_utimensat 377 .long sys_utimensat
378 .long sys_signalfd 378 .long sys_signalfd
379 .long sys_ni_syscall /* 350 */ 379 .long sys_timerfd_create /* 350 */
380 .long sys_eventfd 380 .long sys_eventfd
381 .long sys_fallocate 381 .long sys_fallocate
382 .long sys_timerfd_settime
383 .long sys_timerfd_gettime
diff --git a/arch/sh/kernel/time_32.c b/arch/sh/kernel/time_32.c
index 2bc04bfee738..7281342c044d 100644
--- a/arch/sh/kernel/time_32.c
+++ b/arch/sh/kernel/time_32.c
@@ -120,10 +120,6 @@ static long last_rtc_update;
120 */ 120 */
121void handle_timer_tick(void) 121void handle_timer_tick(void)
122{ 122{
123 do_timer(1);
124#ifndef CONFIG_SMP
125 update_process_times(user_mode(get_irq_regs()));
126#endif
127 if (current->pid) 123 if (current->pid)
128 profile_tick(CPU_PROFILING); 124 profile_tick(CPU_PROFILING);
129 125
@@ -133,6 +129,16 @@ void handle_timer_tick(void)
133#endif 129#endif
134 130
135 /* 131 /*
132 * Here we are in the timer irq handler. We just have irqs locally
133 * disabled but we don't know if the timer_bh is running on the other
134 * CPU. We need to avoid to SMP race with it. NOTE: we don' t need
135 * the irq version of write_lock because as just said we have irq
136 * locally disabled. -arca
137 */
138 write_seqlock(&xtime_lock);
139 do_timer(1);
140
141 /*
136 * If we have an externally synchronized Linux clock, then update 142 * If we have an externally synchronized Linux clock, then update
137 * RTC clock accordingly every ~11 minutes. Set_rtc_mmss() has to be 143 * RTC clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
138 * called as close as possible to 500 ms before the new second starts. 144 * called as close as possible to 500 ms before the new second starts.
@@ -147,6 +153,11 @@ void handle_timer_tick(void)
147 /* do it again in 60s */ 153 /* do it again in 60s */
148 last_rtc_update = xtime.tv_sec - 600; 154 last_rtc_update = xtime.tv_sec - 600;
149 } 155 }
156 write_sequnlock(&xtime_lock);
157
158#ifndef CONFIG_SMP
159 update_process_times(user_mode(get_irq_regs()));
160#endif
150} 161}
151#endif /* !CONFIG_GENERIC_CLOCKEVENTS */ 162#endif /* !CONFIG_GENERIC_CLOCKEVENTS */
152 163
diff --git a/arch/sh/kernel/time_64.c b/arch/sh/kernel/time_64.c
index f819ba38a6ce..898977ee2030 100644
--- a/arch/sh/kernel/time_64.c
+++ b/arch/sh/kernel/time_64.c
@@ -229,15 +229,22 @@ static long last_rtc_update;
229static inline void do_timer_interrupt(void) 229static inline void do_timer_interrupt(void)
230{ 230{
231 unsigned long long current_ctc; 231 unsigned long long current_ctc;
232
233 if (current->pid)
234 profile_tick(CPU_PROFILING);
235
236 /*
237 * Here we are in the timer irq handler. We just have irqs locally
238 * disabled but we don't know if the timer_bh is running on the other
239 * CPU. We need to avoid to SMP race with it. NOTE: we don' t need
240 * the irq version of write_lock because as just said we have irq
241 * locally disabled. -arca
242 */
243 write_lock(&xtime_lock);
232 asm ("getcon cr62, %0" : "=r" (current_ctc)); 244 asm ("getcon cr62, %0" : "=r" (current_ctc));
233 ctc_last_interrupt = (unsigned long) current_ctc; 245 ctc_last_interrupt = (unsigned long) current_ctc;
234 246
235 do_timer(1); 247 do_timer(1);
236#ifndef CONFIG_SMP
237 update_process_times(user_mode(get_irq_regs()));
238#endif
239 if (current->pid)
240 profile_tick(CPU_PROFILING);
241 248
242#ifdef CONFIG_HEARTBEAT 249#ifdef CONFIG_HEARTBEAT
243 if (sh_mv.mv_heartbeat != NULL) 250 if (sh_mv.mv_heartbeat != NULL)
@@ -259,6 +266,11 @@ static inline void do_timer_interrupt(void)
259 /* do it again in 60 s */ 266 /* do it again in 60 s */
260 last_rtc_update = xtime.tv_sec - 600; 267 last_rtc_update = xtime.tv_sec - 600;
261 } 268 }
269 write_unlock(&xtime_lock);
270
271#ifndef CONFIG_SMP
272 update_process_times(user_mode(get_irq_regs()));
273#endif
262} 274}
263 275
264/* 276/*
@@ -275,16 +287,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
275 timer_status &= ~0x100; 287 timer_status &= ~0x100;
276 ctrl_outw(timer_status, TMU0_TCR); 288 ctrl_outw(timer_status, TMU0_TCR);
277 289
278 /*
279 * Here we are in the timer irq handler. We just have irqs locally
280 * disabled but we don't know if the timer_bh is running on the other
281 * CPU. We need to avoid to SMP race with it. NOTE: we don' t need
282 * the irq version of write_lock because as just said we have irq
283 * locally disabled. -arca
284 */
285 write_lock(&xtime_lock);
286 do_timer_interrupt(); 290 do_timer_interrupt();
287 write_unlock(&xtime_lock);
288 291
289 return IRQ_HANDLED; 292 return IRQ_HANDLED;
290} 293}
diff --git a/arch/sh/kernel/timers/timer-cmt.c b/arch/sh/kernel/timers/timer-cmt.c
index 499e07beebe2..71312324b5de 100644
--- a/arch/sh/kernel/timers/timer-cmt.c
+++ b/arch/sh/kernel/timers/timer-cmt.c
@@ -100,16 +100,7 @@ static irqreturn_t cmt_timer_interrupt(int irq, void *dev_id)
100 timer_status &= ~0x80; 100 timer_status &= ~0x80;
101 ctrl_outw(timer_status, CMT_CMCSR_0); 101 ctrl_outw(timer_status, CMT_CMCSR_0);
102 102
103 /*
104 * Here we are in the timer irq handler. We just have irqs locally
105 * disabled but we don't know if the timer_bh is running on the other
106 * CPU. We need to avoid to SMP race with it. NOTE: we don' t need
107 * the irq version of write_lock because as just said we have irq
108 * locally disabled. -arca
109 */
110 write_seqlock(&xtime_lock);
111 handle_timer_tick(); 103 handle_timer_tick();
112 write_sequnlock(&xtime_lock);
113 104
114 return IRQ_HANDLED; 105 return IRQ_HANDLED;
115} 106}
diff --git a/arch/sh/kernel/timers/timer-mtu2.c b/arch/sh/kernel/timers/timer-mtu2.c
index b7499a2a9188..ade9d6eb29f9 100644
--- a/arch/sh/kernel/timers/timer-mtu2.c
+++ b/arch/sh/kernel/timers/timer-mtu2.c
@@ -100,9 +100,7 @@ static irqreturn_t mtu2_timer_interrupt(int irq, void *dev_id)
100 ctrl_outb(timer_status, MTU2_TSR_1); 100 ctrl_outb(timer_status, MTU2_TSR_1);
101 101
102 /* Do timer tick */ 102 /* Do timer tick */
103 write_seqlock(&xtime_lock);
104 handle_timer_tick(); 103 handle_timer_tick();
105 write_sequnlock(&xtime_lock);
106 104
107 return IRQ_HANDLED; 105 return IRQ_HANDLED;
108} 106}
@@ -156,7 +154,6 @@ static int mtu2_timer_stop(void)
156 154
157static int mtu2_timer_init(void) 155static int mtu2_timer_init(void)
158{ 156{
159 u8 tmp;
160 unsigned long interval; 157 unsigned long interval;
161 158
162 setup_irq(CONFIG_SH_TIMER_IRQ, &mtu2_irq); 159 setup_irq(CONFIG_SH_TIMER_IRQ, &mtu2_irq);
diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c
index 2e58f7a6b746..baa4fa368dce 100644
--- a/arch/sh/kernel/traps_32.c
+++ b/arch/sh/kernel/traps_32.c
@@ -147,6 +147,36 @@ static int die_if_no_fixup(const char * str, struct pt_regs * regs, long err)
147 return -EFAULT; 147 return -EFAULT;
148} 148}
149 149
150static inline void sign_extend(unsigned int count, unsigned char *dst)
151{
152#ifdef __LITTLE_ENDIAN__
153 if ((count == 1) && dst[0] & 0x80) {
154 dst[1] = 0xff;
155 dst[2] = 0xff;
156 dst[3] = 0xff;
157 }
158 if ((count == 2) && dst[1] & 0x80) {
159 dst[2] = 0xff;
160 dst[3] = 0xff;
161 }
162#else
163 if ((count == 1) && dst[3] & 0x80) {
164 dst[2] = 0xff;
165 dst[1] = 0xff;
166 dst[0] = 0xff;
167 }
168 if ((count == 2) && dst[2] & 0x80) {
169 dst[1] = 0xff;
170 dst[0] = 0xff;
171 }
172#endif
173}
174
175static struct mem_access user_mem_access = {
176 copy_from_user,
177 copy_to_user,
178};
179
150/* 180/*
151 * handle an instruction that does an unaligned memory access by emulating the 181 * handle an instruction that does an unaligned memory access by emulating the
152 * desired behaviour 182 * desired behaviour
@@ -154,7 +184,8 @@ static int die_if_no_fixup(const char * str, struct pt_regs * regs, long err)
154 * (if that instruction is in a branch delay slot) 184 * (if that instruction is in a branch delay slot)
155 * - return 0 if emulation okay, -EFAULT on existential error 185 * - return 0 if emulation okay, -EFAULT on existential error
156 */ 186 */
157static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs) 187static int handle_unaligned_ins(opcode_t instruction, struct pt_regs *regs,
188 struct mem_access *ma)
158{ 189{
159 int ret, index, count; 190 int ret, index, count;
160 unsigned long *rm, *rn; 191 unsigned long *rm, *rn;
@@ -178,25 +209,13 @@ static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs)
178 dst = (unsigned char*) rn; 209 dst = (unsigned char*) rn;
179 *(unsigned long*)dst = 0; 210 *(unsigned long*)dst = 0;
180 211
181#ifdef __LITTLE_ENDIAN__ 212#if !defined(__LITTLE_ENDIAN__)
182 if (copy_from_user(dst, src, count))
183 goto fetch_fault;
184
185 if ((count == 2) && dst[1] & 0x80) {
186 dst[2] = 0xff;
187 dst[3] = 0xff;
188 }
189#else
190 dst += 4-count; 213 dst += 4-count;
191 214#endif
192 if (__copy_user(dst, src, count)) 215 if (ma->from(dst, src, count))
193 goto fetch_fault; 216 goto fetch_fault;
194 217
195 if ((count == 2) && dst[2] & 0x80) { 218 sign_extend(count, dst);
196 dst[0] = 0xff;
197 dst[1] = 0xff;
198 }
199#endif
200 } else { 219 } else {
201 /* to memory */ 220 /* to memory */
202 src = (unsigned char*) rm; 221 src = (unsigned char*) rm;
@@ -206,7 +225,7 @@ static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs)
206 dst = (unsigned char*) *rn; 225 dst = (unsigned char*) *rn;
207 dst += regs->regs[0]; 226 dst += regs->regs[0];
208 227
209 if (copy_to_user(dst, src, count)) 228 if (ma->to(dst, src, count))
210 goto fetch_fault; 229 goto fetch_fault;
211 } 230 }
212 ret = 0; 231 ret = 0;
@@ -217,7 +236,7 @@ static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs)
217 dst = (unsigned char*) *rn; 236 dst = (unsigned char*) *rn;
218 dst += (instruction&0x000F)<<2; 237 dst += (instruction&0x000F)<<2;
219 238
220 if (copy_to_user(dst,src,4)) 239 if (ma->to(dst, src, 4))
221 goto fetch_fault; 240 goto fetch_fault;
222 ret = 0; 241 ret = 0;
223 break; 242 break;
@@ -230,7 +249,7 @@ static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs)
230#if !defined(__LITTLE_ENDIAN__) 249#if !defined(__LITTLE_ENDIAN__)
231 src += 4-count; 250 src += 4-count;
232#endif 251#endif
233 if (copy_to_user(dst, src, count)) 252 if (ma->to(dst, src, count))
234 goto fetch_fault; 253 goto fetch_fault;
235 ret = 0; 254 ret = 0;
236 break; 255 break;
@@ -241,7 +260,7 @@ static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs)
241 dst = (unsigned char*) rn; 260 dst = (unsigned char*) rn;
242 *(unsigned long*)dst = 0; 261 *(unsigned long*)dst = 0;
243 262
244 if (copy_from_user(dst,src,4)) 263 if (ma->from(dst, src, 4))
245 goto fetch_fault; 264 goto fetch_fault;
246 ret = 0; 265 ret = 0;
247 break; 266 break;
@@ -253,25 +272,12 @@ static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs)
253 dst = (unsigned char*) rn; 272 dst = (unsigned char*) rn;
254 *(unsigned long*)dst = 0; 273 *(unsigned long*)dst = 0;
255 274
256#ifdef __LITTLE_ENDIAN__ 275#if !defined(__LITTLE_ENDIAN__)
257 if (copy_from_user(dst, src, count))
258 goto fetch_fault;
259
260 if ((count == 2) && dst[1] & 0x80) {
261 dst[2] = 0xff;
262 dst[3] = 0xff;
263 }
264#else
265 dst += 4-count; 276 dst += 4-count;
266
267 if (copy_from_user(dst, src, count))
268 goto fetch_fault;
269
270 if ((count == 2) && dst[2] & 0x80) {
271 dst[0] = 0xff;
272 dst[1] = 0xff;
273 }
274#endif 277#endif
278 if (ma->from(dst, src, count))
279 goto fetch_fault;
280 sign_extend(count, dst);
275 ret = 0; 281 ret = 0;
276 break; 282 break;
277 283
@@ -285,7 +291,7 @@ static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs)
285 dst = (unsigned char*) *rm; /* called Rn in the spec */ 291 dst = (unsigned char*) *rm; /* called Rn in the spec */
286 dst += (instruction&0x000F)<<1; 292 dst += (instruction&0x000F)<<1;
287 293
288 if (copy_to_user(dst, src, 2)) 294 if (ma->to(dst, src, 2))
289 goto fetch_fault; 295 goto fetch_fault;
290 ret = 0; 296 ret = 0;
291 break; 297 break;
@@ -299,21 +305,9 @@ static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs)
299#if !defined(__LITTLE_ENDIAN__) 305#if !defined(__LITTLE_ENDIAN__)
300 dst += 2; 306 dst += 2;
301#endif 307#endif
302 308 if (ma->from(dst, src, 2))
303 if (copy_from_user(dst, src, 2))
304 goto fetch_fault; 309 goto fetch_fault;
305 310 sign_extend(2, dst);
306#ifdef __LITTLE_ENDIAN__
307 if (dst[1] & 0x80) {
308 dst[2] = 0xff;
309 dst[3] = 0xff;
310 }
311#else
312 if (dst[2] & 0x80) {
313 dst[0] = 0xff;
314 dst[1] = 0xff;
315 }
316#endif
317 ret = 0; 311 ret = 0;
318 break; 312 break;
319 } 313 }
@@ -332,11 +326,14 @@ static int handle_unaligned_ins(u16 instruction, struct pt_regs *regs)
332 * emulate the instruction in the delay slot 326 * emulate the instruction in the delay slot
333 * - fetches the instruction from PC+2 327 * - fetches the instruction from PC+2
334 */ 328 */
335static inline int handle_unaligned_delayslot(struct pt_regs *regs) 329static inline int handle_delayslot(struct pt_regs *regs,
330 opcode_t old_instruction,
331 struct mem_access *ma)
336{ 332{
337 u16 instruction; 333 opcode_t instruction;
334 void *addr = (void *)(regs->pc + instruction_size(old_instruction));
338 335
339 if (copy_from_user(&instruction, (u16 *)(regs->pc+2), 2)) { 336 if (copy_from_user(&instruction, addr, sizeof(instruction))) {
340 /* the instruction-fetch faulted */ 337 /* the instruction-fetch faulted */
341 if (user_mode(regs)) 338 if (user_mode(regs))
342 return -EFAULT; 339 return -EFAULT;
@@ -346,7 +343,7 @@ static inline int handle_unaligned_delayslot(struct pt_regs *regs)
346 regs, 0); 343 regs, 0);
347 } 344 }
348 345
349 return handle_unaligned_ins(instruction,regs); 346 return handle_unaligned_ins(instruction, regs, ma);
350} 347}
351 348
352/* 349/*
@@ -369,10 +366,11 @@ static inline int handle_unaligned_delayslot(struct pt_regs *regs)
369 * XXX: SH-2A needs this too, but it needs an overhaul thanks to mixed 32-bit 366 * XXX: SH-2A needs this too, but it needs an overhaul thanks to mixed 32-bit
370 * opcodes.. 367 * opcodes..
371 */ 368 */
372#ifndef CONFIG_CPU_SH2A 369
373static int handle_unaligned_notify_count = 10; 370static int handle_unaligned_notify_count = 10;
374 371
375static int handle_unaligned_access(u16 instruction, struct pt_regs *regs) 372int handle_unaligned_access(opcode_t instruction, struct pt_regs *regs,
373 struct mem_access *ma)
376{ 374{
377 u_int rm; 375 u_int rm;
378 int ret, index; 376 int ret, index;
@@ -387,7 +385,7 @@ static int handle_unaligned_access(u16 instruction, struct pt_regs *regs)
387 printk(KERN_NOTICE "Fixing up unaligned userspace access " 385 printk(KERN_NOTICE "Fixing up unaligned userspace access "
388 "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", 386 "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n",
389 current->comm, task_pid_nr(current), 387 current->comm, task_pid_nr(current),
390 (u16 *)regs->pc, instruction); 388 (void *)regs->pc, instruction);
391 } 389 }
392 390
393 ret = -EFAULT; 391 ret = -EFAULT;
@@ -395,19 +393,19 @@ static int handle_unaligned_access(u16 instruction, struct pt_regs *regs)
395 case 0x0000: 393 case 0x0000:
396 if (instruction==0x000B) { 394 if (instruction==0x000B) {
397 /* rts */ 395 /* rts */
398 ret = handle_unaligned_delayslot(regs); 396 ret = handle_delayslot(regs, instruction, ma);
399 if (ret==0) 397 if (ret==0)
400 regs->pc = regs->pr; 398 regs->pc = regs->pr;
401 } 399 }
402 else if ((instruction&0x00FF)==0x0023) { 400 else if ((instruction&0x00FF)==0x0023) {
403 /* braf @Rm */ 401 /* braf @Rm */
404 ret = handle_unaligned_delayslot(regs); 402 ret = handle_delayslot(regs, instruction, ma);
405 if (ret==0) 403 if (ret==0)
406 regs->pc += rm + 4; 404 regs->pc += rm + 4;
407 } 405 }
408 else if ((instruction&0x00FF)==0x0003) { 406 else if ((instruction&0x00FF)==0x0003) {
409 /* bsrf @Rm */ 407 /* bsrf @Rm */
410 ret = handle_unaligned_delayslot(regs); 408 ret = handle_delayslot(regs, instruction, ma);
411 if (ret==0) { 409 if (ret==0) {
412 regs->pr = regs->pc + 4; 410 regs->pr = regs->pc + 4;
413 regs->pc += rm + 4; 411 regs->pc += rm + 4;
@@ -428,13 +426,13 @@ static int handle_unaligned_access(u16 instruction, struct pt_regs *regs)
428 case 0x4000: 426 case 0x4000:
429 if ((instruction&0x00FF)==0x002B) { 427 if ((instruction&0x00FF)==0x002B) {
430 /* jmp @Rm */ 428 /* jmp @Rm */
431 ret = handle_unaligned_delayslot(regs); 429 ret = handle_delayslot(regs, instruction, ma);
432 if (ret==0) 430 if (ret==0)
433 regs->pc = rm; 431 regs->pc = rm;
434 } 432 }
435 else if ((instruction&0x00FF)==0x000B) { 433 else if ((instruction&0x00FF)==0x000B) {
436 /* jsr @Rm */ 434 /* jsr @Rm */
437 ret = handle_unaligned_delayslot(regs); 435 ret = handle_delayslot(regs, instruction, ma);
438 if (ret==0) { 436 if (ret==0) {
439 regs->pr = regs->pc + 4; 437 regs->pr = regs->pc + 4;
440 regs->pc = rm; 438 regs->pc = rm;
@@ -461,7 +459,7 @@ static int handle_unaligned_access(u16 instruction, struct pt_regs *regs)
461 case 0x0B00: /* bf lab - no delayslot*/ 459 case 0x0B00: /* bf lab - no delayslot*/
462 break; 460 break;
463 case 0x0F00: /* bf/s lab */ 461 case 0x0F00: /* bf/s lab */
464 ret = handle_unaligned_delayslot(regs); 462 ret = handle_delayslot(regs, instruction, ma);
465 if (ret==0) { 463 if (ret==0) {
466#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB) 464#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB)
467 if ((regs->sr & 0x00000001) != 0) 465 if ((regs->sr & 0x00000001) != 0)
@@ -474,7 +472,7 @@ static int handle_unaligned_access(u16 instruction, struct pt_regs *regs)
474 case 0x0900: /* bt lab - no delayslot */ 472 case 0x0900: /* bt lab - no delayslot */
475 break; 473 break;
476 case 0x0D00: /* bt/s lab */ 474 case 0x0D00: /* bt/s lab */
477 ret = handle_unaligned_delayslot(regs); 475 ret = handle_delayslot(regs, instruction, ma);
478 if (ret==0) { 476 if (ret==0) {
479#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB) 477#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB)
480 if ((regs->sr & 0x00000001) == 0) 478 if ((regs->sr & 0x00000001) == 0)
@@ -488,13 +486,13 @@ static int handle_unaligned_access(u16 instruction, struct pt_regs *regs)
488 break; 486 break;
489 487
490 case 0xA000: /* bra label */ 488 case 0xA000: /* bra label */
491 ret = handle_unaligned_delayslot(regs); 489 ret = handle_delayslot(regs, instruction, ma);
492 if (ret==0) 490 if (ret==0)
493 regs->pc += SH_PC_12BIT_OFFSET(instruction); 491 regs->pc += SH_PC_12BIT_OFFSET(instruction);
494 break; 492 break;
495 493
496 case 0xB000: /* bsr label */ 494 case 0xB000: /* bsr label */
497 ret = handle_unaligned_delayslot(regs); 495 ret = handle_delayslot(regs, instruction, ma);
498 if (ret==0) { 496 if (ret==0) {
499 regs->pr = regs->pc + 4; 497 regs->pr = regs->pc + 4;
500 regs->pc += SH_PC_12BIT_OFFSET(instruction); 498 regs->pc += SH_PC_12BIT_OFFSET(instruction);
@@ -505,12 +503,11 @@ static int handle_unaligned_access(u16 instruction, struct pt_regs *regs)
505 503
506 /* handle non-delay-slot instruction */ 504 /* handle non-delay-slot instruction */
507 simple: 505 simple:
508 ret = handle_unaligned_ins(instruction,regs); 506 ret = handle_unaligned_ins(instruction, regs, ma);
509 if (ret==0) 507 if (ret==0)
510 regs->pc += instruction_size(instruction); 508 regs->pc += instruction_size(instruction);
511 return ret; 509 return ret;
512} 510}
513#endif /* CONFIG_CPU_SH2A */
514 511
515#ifdef CONFIG_CPU_HAS_SR_RB 512#ifdef CONFIG_CPU_HAS_SR_RB
516#define lookup_exception_vector(x) \ 513#define lookup_exception_vector(x) \
@@ -538,10 +535,8 @@ asmlinkage void do_address_error(struct pt_regs *regs,
538 unsigned long error_code = 0; 535 unsigned long error_code = 0;
539 mm_segment_t oldfs; 536 mm_segment_t oldfs;
540 siginfo_t info; 537 siginfo_t info;
541#ifndef CONFIG_CPU_SH2A 538 opcode_t instruction;
542 u16 instruction;
543 int tmp; 539 int tmp;
544#endif
545 540
546 /* Intentional ifdef */ 541 /* Intentional ifdef */
547#ifdef CONFIG_CPU_HAS_SR_RB 542#ifdef CONFIG_CPU_HAS_SR_RB
@@ -561,9 +556,9 @@ asmlinkage void do_address_error(struct pt_regs *regs,
561 goto uspace_segv; 556 goto uspace_segv;
562 } 557 }
563 558
564#ifndef CONFIG_CPU_SH2A
565 set_fs(USER_DS); 559 set_fs(USER_DS);
566 if (copy_from_user(&instruction, (u16 *)(regs->pc), 2)) { 560 if (copy_from_user(&instruction, (void *)(regs->pc),
561 sizeof(instruction))) {
567 /* Argh. Fault on the instruction itself. 562 /* Argh. Fault on the instruction itself.
568 This should never happen non-SMP 563 This should never happen non-SMP
569 */ 564 */
@@ -571,13 +566,12 @@ asmlinkage void do_address_error(struct pt_regs *regs,
571 goto uspace_segv; 566 goto uspace_segv;
572 } 567 }
573 568
574 tmp = handle_unaligned_access(instruction, regs); 569 tmp = handle_unaligned_access(instruction, regs,
570 &user_mem_access);
575 set_fs(oldfs); 571 set_fs(oldfs);
576 572
577 if (tmp==0) 573 if (tmp==0)
578 return; /* sorted */ 574 return; /* sorted */
579#endif
580
581uspace_segv: 575uspace_segv:
582 printk(KERN_NOTICE "Sending SIGBUS to \"%s\" due to unaligned " 576 printk(KERN_NOTICE "Sending SIGBUS to \"%s\" due to unaligned "
583 "access (PC %lx PR %lx)\n", current->comm, regs->pc, 577 "access (PC %lx PR %lx)\n", current->comm, regs->pc,
@@ -592,9 +586,9 @@ uspace_segv:
592 if (regs->pc & 1) 586 if (regs->pc & 1)
593 die("unaligned program counter", regs, error_code); 587 die("unaligned program counter", regs, error_code);
594 588
595#ifndef CONFIG_CPU_SH2A
596 set_fs(KERNEL_DS); 589 set_fs(KERNEL_DS);
597 if (copy_from_user(&instruction, (u16 *)(regs->pc), 2)) { 590 if (copy_from_user(&instruction, (void *)(regs->pc),
591 sizeof(instruction))) {
598 /* Argh. Fault on the instruction itself. 592 /* Argh. Fault on the instruction itself.
599 This should never happen non-SMP 593 This should never happen non-SMP
600 */ 594 */
@@ -602,14 +596,8 @@ uspace_segv:
602 die("insn faulting in do_address_error", regs, 0); 596 die("insn faulting in do_address_error", regs, 0);
603 } 597 }
604 598
605 handle_unaligned_access(instruction, regs); 599 handle_unaligned_access(instruction, regs, &user_mem_access);
606 set_fs(oldfs); 600 set_fs(oldfs);
607#else
608 printk(KERN_NOTICE "Killing process \"%s\" due to unaligned "
609 "access\n", current->comm);
610
611 force_sig(SIGSEGV, current);
612#endif
613 } 601 }
614} 602}
615 603
diff --git a/arch/sh/kernel/traps_64.c b/arch/sh/kernel/traps_64.c
index c0b3c6f6edb5..a55ac81d795b 100644
--- a/arch/sh/kernel/traps_64.c
+++ b/arch/sh/kernel/traps_64.c
@@ -630,7 +630,7 @@ static int misaligned_fpu_load(struct pt_regs *regs,
630 current->thread.fpu.hard.fp_regs[destreg] = buflo; 630 current->thread.fpu.hard.fp_regs[destreg] = buflo;
631 current->thread.fpu.hard.fp_regs[destreg+1] = bufhi; 631 current->thread.fpu.hard.fp_regs[destreg+1] = bufhi;
632 } else { 632 } else {
633#if defined(CONFIG_LITTLE_ENDIAN) 633#if defined(CONFIG_CPU_LITTLE_ENDIAN)
634 current->thread.fpu.hard.fp_regs[destreg] = bufhi; 634 current->thread.fpu.hard.fp_regs[destreg] = bufhi;
635 current->thread.fpu.hard.fp_regs[destreg+1] = buflo; 635 current->thread.fpu.hard.fp_regs[destreg+1] = buflo;
636#else 636#else
@@ -700,7 +700,7 @@ static int misaligned_fpu_store(struct pt_regs *regs,
700 buflo = current->thread.fpu.hard.fp_regs[srcreg]; 700 buflo = current->thread.fpu.hard.fp_regs[srcreg];
701 bufhi = current->thread.fpu.hard.fp_regs[srcreg+1]; 701 bufhi = current->thread.fpu.hard.fp_regs[srcreg+1];
702 } else { 702 } else {
703#if defined(CONFIG_LITTLE_ENDIAN) 703#if defined(CONFIG_CPU_LITTLE_ENDIAN)
704 bufhi = current->thread.fpu.hard.fp_regs[srcreg]; 704 bufhi = current->thread.fpu.hard.fp_regs[srcreg];
705 buflo = current->thread.fpu.hard.fp_regs[srcreg+1]; 705 buflo = current->thread.fpu.hard.fp_regs[srcreg+1];
706#else 706#else
diff --git a/arch/sh/kernel/vmlinux_64.lds.S b/arch/sh/kernel/vmlinux_64.lds.S
index 3f1bd6392bb3..d1e177009a41 100644
--- a/arch/sh/kernel/vmlinux_64.lds.S
+++ b/arch/sh/kernel/vmlinux_64.lds.S
@@ -51,7 +51,7 @@ SECTIONS
51 KPROBES_TEXT 51 KPROBES_TEXT
52 *(.fixup) 52 *(.fixup)
53 *(.gnu.warning) 53 *(.gnu.warning)
54#ifdef CONFIG_LITTLE_ENDIAN 54#ifdef CONFIG_CPU_LITTLE_ENDIAN
55 } = 0x6ff0fff0 55 } = 0x6ff0fff0
56#else 56#else
57 } = 0xf0fff06f 57 } = 0xf0fff06f
diff --git a/arch/sh/mm/cache-sh5.c b/arch/sh/mm/cache-sh5.c
index 4617e3aeee73..3877321fcede 100644
--- a/arch/sh/mm/cache-sh5.c
+++ b/arch/sh/mm/cache-sh5.c
@@ -1,10 +1,10 @@
1/* 1/*
2 * arch/sh/mm/cache-sh5.c 2 * arch/sh/mm/cache-sh5.c
3 * 3 *
4 * Original version Copyright (C) 2000, 2001 Paolo Alberelli 4 * Copyright (C) 2000, 2001 Paolo Alberelli
5 * Second version Copyright (C) benedict.gaster@superh.com 2002 5 * Copyright (C) 2002 Benedict Gaster
6 * Third version Copyright Richard.Curnow@superh.com 2003 6 * Copyright (C) 2003 Richard Curnow
7 * Hacks to third version Copyright (C) 2003 Paul Mundt 7 * Copyright (C) 2003 - 2008 Paul Mundt
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
10 * License. See the file "COPYING" in the main directory of this archive 10 * License. See the file "COPYING" in the main directory of this archive
@@ -13,101 +13,20 @@
13#include <linux/init.h> 13#include <linux/init.h>
14#include <linux/mman.h> 14#include <linux/mman.h>
15#include <linux/mm.h> 15#include <linux/mm.h>
16#include <linux/threads.h> 16#include <asm/tlb.h>
17#include <asm/page.h>
18#include <asm/pgtable.h>
19#include <asm/processor.h> 17#include <asm/processor.h>
20#include <asm/cache.h> 18#include <asm/cache.h>
21#include <asm/tlb.h> 19#include <asm/pgalloc.h>
22#include <asm/io.h>
23#include <asm/uaccess.h> 20#include <asm/uaccess.h>
24#include <asm/mmu_context.h> 21#include <asm/mmu_context.h>
25#include <asm/pgalloc.h> /* for flush_itlb_range */
26
27#include <linux/proc_fs.h>
28
29/* This function is in entry.S */
30extern unsigned long switch_and_save_asid(unsigned long new_asid);
31 22
32/* Wired TLB entry for the D-cache */ 23/* Wired TLB entry for the D-cache */
33static unsigned long long dtlb_cache_slot; 24static unsigned long long dtlb_cache_slot;
34 25
35/** 26void __init p3_cache_init(void)
36 * sh64_cache_init()
37 *
38 * This is pretty much just a straightforward clone of the SH
39 * detect_cpu_and_cache_system().
40 *
41 * This function is responsible for setting up all of the cache
42 * info dynamically as well as taking care of CPU probing and
43 * setting up the relevant subtype data.
44 *
45 * FIXME: For the time being, we only really support the SH5-101
46 * out of the box, and don't support dynamic probing for things
47 * like the SH5-103 or even cut2 of the SH5-101. Implement this
48 * later!
49 */
50int __init sh64_cache_init(void)
51{ 27{
52 /* 28 /* Reserve a slot for dcache colouring in the DTLB */
53 * First, setup some sane values for the I-cache. 29 dtlb_cache_slot = sh64_get_wired_dtlb_entry();
54 */
55 cpu_data->icache.ways = 4;
56 cpu_data->icache.sets = 256;
57 cpu_data->icache.linesz = L1_CACHE_BYTES;
58
59 /*
60 * FIXME: This can probably be cleaned up a bit as well.. for example,
61 * do we really need the way shift _and_ the way_step_shift ?? Judging
62 * by the existing code, I would guess no.. is there any valid reason
63 * why we need to be tracking this around?
64 */
65 cpu_data->icache.way_shift = 13;
66 cpu_data->icache.entry_shift = 5;
67 cpu_data->icache.set_shift = 4;
68 cpu_data->icache.way_step_shift = 16;
69 cpu_data->icache.asid_shift = 2;
70
71 /*
72 * way offset = cache size / associativity, so just don't factor in
73 * associativity in the first place..
74 */
75 cpu_data->icache.way_ofs = cpu_data->icache.sets *
76 cpu_data->icache.linesz;
77
78 cpu_data->icache.asid_mask = 0x3fc;
79 cpu_data->icache.idx_mask = 0x1fe0;
80 cpu_data->icache.epn_mask = 0xffffe000;
81 cpu_data->icache.flags = 0;
82
83 /*
84 * Next, setup some sane values for the D-cache.
85 *
86 * On the SH5, these are pretty consistent with the I-cache settings,
87 * so we just copy over the existing definitions.. these can be fixed
88 * up later, especially if we add runtime CPU probing.
89 *
90 * Though in the meantime it saves us from having to duplicate all of
91 * the above definitions..
92 */
93 cpu_data->dcache = cpu_data->icache;
94
95 /*
96 * Setup any cache-related flags here
97 */
98#if defined(CONFIG_DCACHE_WRITE_THROUGH)
99 set_bit(SH_CACHE_MODE_WT, &(cpu_data->dcache.flags));
100#elif defined(CONFIG_DCACHE_WRITE_BACK)
101 set_bit(SH_CACHE_MODE_WB, &(cpu_data->dcache.flags));
102#endif
103
104 /*
105 * We also need to reserve a slot for the D-cache in the DTLB, so we
106 * do this now ..
107 */
108 dtlb_cache_slot = sh64_get_wired_dtlb_entry();
109
110 return 0;
111} 30}
112 31
113#ifdef CONFIG_DCACHE_DISABLED 32#ifdef CONFIG_DCACHE_DISABLED
@@ -116,73 +35,48 @@ int __init sh64_cache_init(void)
116#define sh64_dcache_purge_user_range(mm, start, end) do { } while (0) 35#define sh64_dcache_purge_user_range(mm, start, end) do { } while (0)
117#define sh64_dcache_purge_phy_page(paddr) do { } while (0) 36#define sh64_dcache_purge_phy_page(paddr) do { } while (0)
118#define sh64_dcache_purge_virt_page(mm, eaddr) do { } while (0) 37#define sh64_dcache_purge_virt_page(mm, eaddr) do { } while (0)
119#define sh64_dcache_purge_kernel_range(start, end) do { } while (0)
120#define sh64_dcache_wback_current_user_range(start, end) do { } while (0)
121#endif 38#endif
122 39
123/*##########################################################################*/ 40/*
124 41 * The following group of functions deal with mapping and unmapping a
125/* From here onwards, a rewrite of the implementation, 42 * temporary page into a DTLB slot that has been set aside for exclusive
126 by Richard.Curnow@superh.com. 43 * use.
127 44 */
128 The major changes in this compared to the old version are; 45static inline void
129 1. use more selective purging through OCBP instead of using ALLOCO to purge 46sh64_setup_dtlb_cache_slot(unsigned long eaddr, unsigned long asid,
130 by natural replacement. This avoids purging out unrelated cache lines 47 unsigned long paddr)
131 that happen to be in the same set.
132 2. exploit the APIs copy_user_page and clear_user_page better
133 3. be more selective about I-cache purging, in particular use invalidate_all
134 more sparingly.
135
136 */
137
138/*##########################################################################
139 SUPPORT FUNCTIONS
140 ##########################################################################*/
141
142/****************************************************************************/
143/* The following group of functions deal with mapping and unmapping a temporary
144 page into the DTLB slot that have been set aside for our exclusive use. */
145/* In order to accomplish this, we use the generic interface for adding and
146 removing a wired slot entry as defined in arch/sh/mm/tlb-sh5.c */
147/****************************************************************************/
148
149static unsigned long slot_own_flags;
150
151static inline void sh64_setup_dtlb_cache_slot(unsigned long eaddr, unsigned long asid, unsigned long paddr)
152{ 48{
153 local_irq_save(slot_own_flags); 49 local_irq_disable();
154 sh64_setup_tlb_slot(dtlb_cache_slot, eaddr, asid, paddr); 50 sh64_setup_tlb_slot(dtlb_cache_slot, eaddr, asid, paddr);
155} 51}
156 52
157static inline void sh64_teardown_dtlb_cache_slot(void) 53static inline void sh64_teardown_dtlb_cache_slot(void)
158{ 54{
159 sh64_teardown_tlb_slot(dtlb_cache_slot); 55 sh64_teardown_tlb_slot(dtlb_cache_slot);
160 local_irq_restore(slot_own_flags); 56 local_irq_enable();
161} 57}
162 58
163/****************************************************************************/
164
165#ifndef CONFIG_ICACHE_DISABLED 59#ifndef CONFIG_ICACHE_DISABLED
166 60static inline void sh64_icache_inv_all(void)
167static void __inline__ sh64_icache_inv_all(void)
168{ 61{
169 unsigned long long addr, flag, data; 62 unsigned long long addr, flag, data;
170 unsigned int flags; 63 unsigned int flags;
171 64
172 addr=ICCR0; 65 addr = ICCR0;
173 flag=ICCR0_ICI; 66 flag = ICCR0_ICI;
174 data=0; 67 data = 0;
175 68
176 /* Make this a critical section for safety (probably not strictly necessary.) */ 69 /* Make this a critical section for safety (probably not strictly necessary.) */
177 local_irq_save(flags); 70 local_irq_save(flags);
178 71
179 /* Without %1 it gets unexplicably wrong */ 72 /* Without %1 it gets unexplicably wrong */
180 asm volatile("getcfg %3, 0, %0\n\t" 73 __asm__ __volatile__ (
181 "or %0, %2, %0\n\t" 74 "getcfg %3, 0, %0\n\t"
182 "putcfg %3, 0, %0\n\t" 75 "or %0, %2, %0\n\t"
183 "synci" 76 "putcfg %3, 0, %0\n\t"
184 : "=&r" (data) 77 "synci"
185 : "0" (data), "r" (flag), "r" (addr)); 78 : "=&r" (data)
79 : "0" (data), "r" (flag), "r" (addr));
186 80
187 local_irq_restore(flags); 81 local_irq_restore(flags);
188} 82}
@@ -193,20 +87,12 @@ static void sh64_icache_inv_kernel_range(unsigned long start, unsigned long end)
193 * the addresses lie in the kernel superpage. */ 87 * the addresses lie in the kernel superpage. */
194 88
195 unsigned long long ullend, addr, aligned_start; 89 unsigned long long ullend, addr, aligned_start;
196#if (NEFF == 32)
197 aligned_start = (unsigned long long)(signed long long)(signed long) start; 90 aligned_start = (unsigned long long)(signed long long)(signed long) start;
198#else 91 addr = L1_CACHE_ALIGN(aligned_start);
199#error "NEFF != 32"
200#endif
201 aligned_start &= L1_CACHE_ALIGN_MASK;
202 addr = aligned_start;
203#if (NEFF == 32)
204 ullend = (unsigned long long) (signed long long) (signed long) end; 92 ullend = (unsigned long long) (signed long long) (signed long) end;
205#else 93
206#error "NEFF != 32"
207#endif
208 while (addr <= ullend) { 94 while (addr <= ullend) {
209 asm __volatile__ ("icbi %0, 0" : : "r" (addr)); 95 __asm__ __volatile__ ("icbi %0, 0" : : "r" (addr));
210 addr += L1_CACHE_BYTES; 96 addr += L1_CACHE_BYTES;
211 } 97 }
212} 98}
@@ -215,7 +101,7 @@ static void sh64_icache_inv_user_page(struct vm_area_struct *vma, unsigned long
215{ 101{
216 /* If we get called, we know that vma->vm_flags contains VM_EXEC. 102 /* If we get called, we know that vma->vm_flags contains VM_EXEC.
217 Also, eaddr is page-aligned. */ 103 Also, eaddr is page-aligned. */
218 104 unsigned int cpu = smp_processor_id();
219 unsigned long long addr, end_addr; 105 unsigned long long addr, end_addr;
220 unsigned long flags = 0; 106 unsigned long flags = 0;
221 unsigned long running_asid, vma_asid; 107 unsigned long running_asid, vma_asid;
@@ -237,17 +123,17 @@ static void sh64_icache_inv_user_page(struct vm_area_struct *vma, unsigned long
237 */ 123 */
238 124
239 running_asid = get_asid(); 125 running_asid = get_asid();
240 vma_asid = (vma->vm_mm->context & MMU_CONTEXT_ASID_MASK); 126 vma_asid = cpu_asid(cpu, vma->vm_mm);
241 if (running_asid != vma_asid) { 127 if (running_asid != vma_asid) {
242 local_irq_save(flags); 128 local_irq_save(flags);
243 switch_and_save_asid(vma_asid); 129 switch_and_save_asid(vma_asid);
244 } 130 }
245 while (addr < end_addr) { 131 while (addr < end_addr) {
246 /* Worth unrolling a little */ 132 /* Worth unrolling a little */
247 asm __volatile__("icbi %0, 0" : : "r" (addr)); 133 __asm__ __volatile__("icbi %0, 0" : : "r" (addr));
248 asm __volatile__("icbi %0, 32" : : "r" (addr)); 134 __asm__ __volatile__("icbi %0, 32" : : "r" (addr));
249 asm __volatile__("icbi %0, 64" : : "r" (addr)); 135 __asm__ __volatile__("icbi %0, 64" : : "r" (addr));
250 asm __volatile__("icbi %0, 96" : : "r" (addr)); 136 __asm__ __volatile__("icbi %0, 96" : : "r" (addr));
251 addr += 128; 137 addr += 128;
252 } 138 }
253 if (running_asid != vma_asid) { 139 if (running_asid != vma_asid) {
@@ -256,8 +142,6 @@ static void sh64_icache_inv_user_page(struct vm_area_struct *vma, unsigned long
256 } 142 }
257} 143}
258 144
259/****************************************************************************/
260
261static void sh64_icache_inv_user_page_range(struct mm_struct *mm, 145static void sh64_icache_inv_user_page_range(struct mm_struct *mm,
262 unsigned long start, unsigned long end) 146 unsigned long start, unsigned long end)
263{ 147{
@@ -275,10 +159,10 @@ static void sh64_icache_inv_user_page_range(struct mm_struct *mm,
275 possible with the D-cache. Just assume 64 for now as a working 159 possible with the D-cache. Just assume 64 for now as a working
276 figure. 160 figure.
277 */ 161 */
278
279 int n_pages; 162 int n_pages;
280 163
281 if (!mm) return; 164 if (!mm)
165 return;
282 166
283 n_pages = ((end - start) >> PAGE_SHIFT); 167 n_pages = ((end - start) >> PAGE_SHIFT);
284 if (n_pages >= 64) { 168 if (n_pages >= 64) {
@@ -290,7 +174,7 @@ static void sh64_icache_inv_user_page_range(struct mm_struct *mm,
290 unsigned long mm_asid, current_asid; 174 unsigned long mm_asid, current_asid;
291 unsigned long long flags = 0ULL; 175 unsigned long long flags = 0ULL;
292 176
293 mm_asid = mm->context & MMU_CONTEXT_ASID_MASK; 177 mm_asid = cpu_asid(smp_processor_id(), mm);
294 current_asid = get_asid(); 178 current_asid = get_asid();
295 179
296 if (mm_asid != current_asid) { 180 if (mm_asid != current_asid) {
@@ -322,6 +206,7 @@ static void sh64_icache_inv_user_page_range(struct mm_struct *mm,
322 } 206 }
323 aligned_start = vma->vm_end; /* Skip to start of next region */ 207 aligned_start = vma->vm_end; /* Skip to start of next region */
324 } 208 }
209
325 if (mm_asid != current_asid) { 210 if (mm_asid != current_asid) {
326 switch_and_save_asid(current_asid); 211 switch_and_save_asid(current_asid);
327 local_irq_restore(flags); 212 local_irq_restore(flags);
@@ -329,47 +214,46 @@ static void sh64_icache_inv_user_page_range(struct mm_struct *mm,
329 } 214 }
330} 215}
331 216
217/*
218 * Invalidate a small range of user context I-cache, not necessarily page
219 * (or even cache-line) aligned.
220 *
221 * Since this is used inside ptrace, the ASID in the mm context typically
222 * won't match current_asid. We'll have to switch ASID to do this. For
223 * safety, and given that the range will be small, do all this under cli.
224 *
225 * Note, there is a hazard that the ASID in mm->context is no longer
226 * actually associated with mm, i.e. if the mm->context has started a new
227 * cycle since mm was last active. However, this is just a performance
228 * issue: all that happens is that we invalidate lines belonging to
229 * another mm, so the owning process has to refill them when that mm goes
230 * live again. mm itself can't have any cache entries because there will
231 * have been a flush_cache_all when the new mm->context cycle started.
232 */
332static void sh64_icache_inv_user_small_range(struct mm_struct *mm, 233static void sh64_icache_inv_user_small_range(struct mm_struct *mm,
333 unsigned long start, int len) 234 unsigned long start, int len)
334{ 235{
335
336 /* Invalidate a small range of user context I-cache, not necessarily
337 page (or even cache-line) aligned. */
338
339 unsigned long long eaddr = start; 236 unsigned long long eaddr = start;
340 unsigned long long eaddr_end = start + len; 237 unsigned long long eaddr_end = start + len;
341 unsigned long current_asid, mm_asid; 238 unsigned long current_asid, mm_asid;
342 unsigned long long flags; 239 unsigned long long flags;
343 unsigned long long epage_start; 240 unsigned long long epage_start;
344 241
345 /* Since this is used inside ptrace, the ASID in the mm context 242 /*
346 typically won't match current_asid. We'll have to switch ASID to do 243 * Align to start of cache line. Otherwise, suppose len==8 and
347 this. For safety, and given that the range will be small, do all 244 * start was at 32N+28 : the last 4 bytes wouldn't get invalidated.
348 this under cli. 245 */
349 246 eaddr = L1_CACHE_ALIGN(start);
350 Note, there is a hazard that the ASID in mm->context is no longer
351 actually associated with mm, i.e. if the mm->context has started a
352 new cycle since mm was last active. However, this is just a
353 performance issue: all that happens is that we invalidate lines
354 belonging to another mm, so the owning process has to refill them
355 when that mm goes live again. mm itself can't have any cache
356 entries because there will have been a flush_cache_all when the new
357 mm->context cycle started. */
358
359 /* Align to start of cache line. Otherwise, suppose len==8 and start
360 was at 32N+28 : the last 4 bytes wouldn't get invalidated. */
361 eaddr = start & L1_CACHE_ALIGN_MASK;
362 eaddr_end = start + len; 247 eaddr_end = start + len;
363 248
249 mm_asid = cpu_asid(smp_processor_id(), mm);
364 local_irq_save(flags); 250 local_irq_save(flags);
365 mm_asid = mm->context & MMU_CONTEXT_ASID_MASK;
366 current_asid = switch_and_save_asid(mm_asid); 251 current_asid = switch_and_save_asid(mm_asid);
367 252
368 epage_start = eaddr & PAGE_MASK; 253 epage_start = eaddr & PAGE_MASK;
369 254
370 while (eaddr < eaddr_end) 255 while (eaddr < eaddr_end) {
371 { 256 __asm__ __volatile__("icbi %0, 0" : : "r" (eaddr));
372 asm __volatile__("icbi %0, 0" : : "r" (eaddr));
373 eaddr += L1_CACHE_BYTES; 257 eaddr += L1_CACHE_BYTES;
374 } 258 }
375 switch_and_save_asid(current_asid); 259 switch_and_save_asid(current_asid);
@@ -394,30 +278,24 @@ static void sh64_icache_inv_current_user_range(unsigned long start, unsigned lon
394 been recycled since we were last active in which case we might just 278 been recycled since we were last active in which case we might just
395 invalidate another processes I-cache entries : no worries, just a 279 invalidate another processes I-cache entries : no worries, just a
396 performance drop for him. */ 280 performance drop for him. */
397 aligned_start = start & L1_CACHE_ALIGN_MASK; 281 aligned_start = L1_CACHE_ALIGN(start);
398 addr = aligned_start; 282 addr = aligned_start;
399 while (addr < ull_end) { 283 while (addr < ull_end) {
400 asm __volatile__ ("icbi %0, 0" : : "r" (addr)); 284 __asm__ __volatile__ ("icbi %0, 0" : : "r" (addr));
401 asm __volatile__ ("nop"); 285 __asm__ __volatile__ ("nop");
402 asm __volatile__ ("nop"); 286 __asm__ __volatile__ ("nop");
403 addr += L1_CACHE_BYTES; 287 addr += L1_CACHE_BYTES;
404 } 288 }
405} 289}
406
407#endif /* !CONFIG_ICACHE_DISABLED */ 290#endif /* !CONFIG_ICACHE_DISABLED */
408 291
409/****************************************************************************/
410
411#ifndef CONFIG_DCACHE_DISABLED 292#ifndef CONFIG_DCACHE_DISABLED
412
413/* Buffer used as the target of alloco instructions to purge data from cache 293/* Buffer used as the target of alloco instructions to purge data from cache
414 sets by natural eviction. -- RPC */ 294 sets by natural eviction. -- RPC */
415#define DUMMY_ALLOCO_AREA_SIZE L1_CACHE_SIZE_BYTES + (1024 * 4) 295#define DUMMY_ALLOCO_AREA_SIZE ((L1_CACHE_BYTES << 10) + (1024 * 4))
416static unsigned char dummy_alloco_area[DUMMY_ALLOCO_AREA_SIZE] __cacheline_aligned = { 0, }; 296static unsigned char dummy_alloco_area[DUMMY_ALLOCO_AREA_SIZE] __cacheline_aligned = { 0, };
417 297
418/****************************************************************************/ 298static void inline sh64_dcache_purge_sets(int sets_to_purge_base, int n_sets)
419
420static void __inline__ sh64_dcache_purge_sets(int sets_to_purge_base, int n_sets)
421{ 299{
422 /* Purge all ways in a particular block of sets, specified by the base 300 /* Purge all ways in a particular block of sets, specified by the base
423 set number and number of sets. Can handle wrap-around, if that's 301 set number and number of sets. Can handle wrap-around, if that's
@@ -428,102 +306,86 @@ static void __inline__ sh64_dcache_purge_sets(int sets_to_purge_base, int n_sets
428 int j; 306 int j;
429 int set_offset; 307 int set_offset;
430 308
431 dummy_buffer_base_set = ((int)&dummy_alloco_area & cpu_data->dcache.idx_mask) >> cpu_data->dcache.entry_shift; 309 dummy_buffer_base_set = ((int)&dummy_alloco_area &
310 cpu_data->dcache.entry_mask) >>
311 cpu_data->dcache.entry_shift;
432 set_offset = sets_to_purge_base - dummy_buffer_base_set; 312 set_offset = sets_to_purge_base - dummy_buffer_base_set;
433 313
434 for (j=0; j<n_sets; j++, set_offset++) { 314 for (j = 0; j < n_sets; j++, set_offset++) {
435 set_offset &= (cpu_data->dcache.sets - 1); 315 set_offset &= (cpu_data->dcache.sets - 1);
436 eaddr0 = (unsigned long long)dummy_alloco_area + (set_offset << cpu_data->dcache.entry_shift); 316 eaddr0 = (unsigned long long)dummy_alloco_area +
437 317 (set_offset << cpu_data->dcache.entry_shift);
438 /* Do one alloco which hits the required set per cache way. For 318
439 write-back mode, this will purge the #ways resident lines. There's 319 /*
440 little point unrolling this loop because the allocos stall more if 320 * Do one alloco which hits the required set per cache
441 they're too close together. */ 321 * way. For write-back mode, this will purge the #ways
442 eaddr1 = eaddr0 + cpu_data->dcache.way_ofs * cpu_data->dcache.ways; 322 * resident lines. There's little point unrolling this
443 for (eaddr=eaddr0; eaddr<eaddr1; eaddr+=cpu_data->dcache.way_ofs) { 323 * loop because the allocos stall more if they're too
444 asm __volatile__ ("alloco %0, 0" : : "r" (eaddr)); 324 * close together.
445 asm __volatile__ ("synco"); /* TAKum03020 */ 325 */
326 eaddr1 = eaddr0 + cpu_data->dcache.way_size *
327 cpu_data->dcache.ways;
328
329 for (eaddr = eaddr0; eaddr < eaddr1;
330 eaddr += cpu_data->dcache.way_size) {
331 __asm__ __volatile__ ("alloco %0, 0" : : "r" (eaddr));
332 __asm__ __volatile__ ("synco"); /* TAKum03020 */
446 } 333 }
447 334
448 eaddr1 = eaddr0 + cpu_data->dcache.way_ofs * cpu_data->dcache.ways; 335 eaddr1 = eaddr0 + cpu_data->dcache.way_size *
449 for (eaddr=eaddr0; eaddr<eaddr1; eaddr+=cpu_data->dcache.way_ofs) { 336 cpu_data->dcache.ways;
450 /* Load from each address. Required because alloco is a NOP if 337
451 the cache is write-through. Write-through is a config option. */ 338 for (eaddr = eaddr0; eaddr < eaddr1;
339 eaddr += cpu_data->dcache.way_size) {
340 /*
341 * Load from each address. Required because
342 * alloco is a NOP if the cache is write-through.
343 */
452 if (test_bit(SH_CACHE_MODE_WT, &(cpu_data->dcache.flags))) 344 if (test_bit(SH_CACHE_MODE_WT, &(cpu_data->dcache.flags)))
453 *(volatile unsigned char *)(int)eaddr; 345 ctrl_inb(eaddr);
454 } 346 }
455 } 347 }
456 348
457 /* Don't use OCBI to invalidate the lines. That costs cycles directly. 349 /*
458 If the dummy block is just left resident, it will naturally get 350 * Don't use OCBI to invalidate the lines. That costs cycles
459 evicted as required. */ 351 * directly. If the dummy block is just left resident, it will
460 352 * naturally get evicted as required.
461 return; 353 */
462} 354}
463 355
464/****************************************************************************/ 356/*
465 357 * Purge the entire contents of the dcache. The most efficient way to
358 * achieve this is to use alloco instructions on a region of unused
359 * memory equal in size to the cache, thereby causing the current
360 * contents to be discarded by natural eviction. The alternative, namely
361 * reading every tag, setting up a mapping for the corresponding page and
362 * doing an OCBP for the line, would be much more expensive.
363 */
466static void sh64_dcache_purge_all(void) 364static void sh64_dcache_purge_all(void)
467{ 365{
468 /* Purge the entire contents of the dcache. The most efficient way to
469 achieve this is to use alloco instructions on a region of unused
470 memory equal in size to the cache, thereby causing the current
471 contents to be discarded by natural eviction. The alternative,
472 namely reading every tag, setting up a mapping for the corresponding
473 page and doing an OCBP for the line, would be much more expensive.
474 */
475 366
476 sh64_dcache_purge_sets(0, cpu_data->dcache.sets); 367 sh64_dcache_purge_sets(0, cpu_data->dcache.sets);
477
478 return;
479
480} 368}
481 369
482/****************************************************************************/
483
484static void sh64_dcache_purge_kernel_range(unsigned long start, unsigned long end)
485{
486 /* Purge the range of addresses [start,end] from the D-cache. The
487 addresses lie in the superpage mapping. There's no harm if we
488 overpurge at either end - just a small performance loss. */
489 unsigned long long ullend, addr, aligned_start;
490#if (NEFF == 32)
491 aligned_start = (unsigned long long)(signed long long)(signed long) start;
492#else
493#error "NEFF != 32"
494#endif
495 aligned_start &= L1_CACHE_ALIGN_MASK;
496 addr = aligned_start;
497#if (NEFF == 32)
498 ullend = (unsigned long long) (signed long long) (signed long) end;
499#else
500#error "NEFF != 32"
501#endif
502 while (addr <= ullend) {
503 asm __volatile__ ("ocbp %0, 0" : : "r" (addr));
504 addr += L1_CACHE_BYTES;
505 }
506 return;
507}
508 370
509/* Assumes this address (+ (2**n_synbits) pages up from it) aren't used for 371/* Assumes this address (+ (2**n_synbits) pages up from it) aren't used for
510 anything else in the kernel */ 372 anything else in the kernel */
511#define MAGIC_PAGE0_START 0xffffffffec000000ULL 373#define MAGIC_PAGE0_START 0xffffffffec000000ULL
512 374
513static void sh64_dcache_purge_coloured_phy_page(unsigned long paddr, unsigned long eaddr) 375/* Purge the physical page 'paddr' from the cache. It's known that any
376 * cache lines requiring attention have the same page colour as the the
377 * address 'eaddr'.
378 *
379 * This relies on the fact that the D-cache matches on physical tags when
380 * no virtual tag matches. So we create an alias for the original page
381 * and purge through that. (Alternatively, we could have done this by
382 * switching ASID to match the original mapping and purged through that,
383 * but that involves ASID switching cost + probably a TLBMISS + refill
384 * anyway.)
385 */
386static void sh64_dcache_purge_coloured_phy_page(unsigned long paddr,
387 unsigned long eaddr)
514{ 388{
515 /* Purge the physical page 'paddr' from the cache. It's known that any
516 cache lines requiring attention have the same page colour as the the
517 address 'eaddr'.
518
519 This relies on the fact that the D-cache matches on physical tags
520 when no virtual tag matches. So we create an alias for the original
521 page and purge through that. (Alternatively, we could have done
522 this by switching ASID to match the original mapping and purged
523 through that, but that involves ASID switching cost + probably a
524 TLBMISS + refill anyway.)
525 */
526
527 unsigned long long magic_page_start; 389 unsigned long long magic_page_start;
528 unsigned long long magic_eaddr, magic_eaddr_end; 390 unsigned long long magic_eaddr, magic_eaddr_end;
529 391
@@ -531,47 +393,45 @@ static void sh64_dcache_purge_coloured_phy_page(unsigned long paddr, unsigned lo
531 393
532 /* As long as the kernel is not pre-emptible, this doesn't need to be 394 /* As long as the kernel is not pre-emptible, this doesn't need to be
533 under cli/sti. */ 395 under cli/sti. */
534
535 sh64_setup_dtlb_cache_slot(magic_page_start, get_asid(), paddr); 396 sh64_setup_dtlb_cache_slot(magic_page_start, get_asid(), paddr);
536 397
537 magic_eaddr = magic_page_start; 398 magic_eaddr = magic_page_start;
538 magic_eaddr_end = magic_eaddr + PAGE_SIZE; 399 magic_eaddr_end = magic_eaddr + PAGE_SIZE;
400
539 while (magic_eaddr < magic_eaddr_end) { 401 while (magic_eaddr < magic_eaddr_end) {
540 /* Little point in unrolling this loop - the OCBPs are blocking 402 /* Little point in unrolling this loop - the OCBPs are blocking
541 and won't go any quicker (i.e. the loop overhead is parallel 403 and won't go any quicker (i.e. the loop overhead is parallel
542 to part of the OCBP execution.) */ 404 to part of the OCBP execution.) */
543 asm __volatile__ ("ocbp %0, 0" : : "r" (magic_eaddr)); 405 __asm__ __volatile__ ("ocbp %0, 0" : : "r" (magic_eaddr));
544 magic_eaddr += L1_CACHE_BYTES; 406 magic_eaddr += L1_CACHE_BYTES;
545 } 407 }
546 408
547 sh64_teardown_dtlb_cache_slot(); 409 sh64_teardown_dtlb_cache_slot();
548} 410}
549 411
550/****************************************************************************/ 412/*
551 413 * Purge a page given its physical start address, by creating a temporary
414 * 1 page mapping and purging across that. Even if we know the virtual
415 * address (& vma or mm) of the page, the method here is more elegant
416 * because it avoids issues of coping with page faults on the purge
417 * instructions (i.e. no special-case code required in the critical path
418 * in the TLB miss handling).
419 */
552static void sh64_dcache_purge_phy_page(unsigned long paddr) 420static void sh64_dcache_purge_phy_page(unsigned long paddr)
553{ 421{
554 /* Pure a page given its physical start address, by creating a
555 temporary 1 page mapping and purging across that. Even if we know
556 the virtual address (& vma or mm) of the page, the method here is
557 more elegant because it avoids issues of coping with page faults on
558 the purge instructions (i.e. no special-case code required in the
559 critical path in the TLB miss handling). */
560
561 unsigned long long eaddr_start, eaddr, eaddr_end; 422 unsigned long long eaddr_start, eaddr, eaddr_end;
562 int i; 423 int i;
563 424
564 /* As long as the kernel is not pre-emptible, this doesn't need to be 425 /* As long as the kernel is not pre-emptible, this doesn't need to be
565 under cli/sti. */ 426 under cli/sti. */
566
567 eaddr_start = MAGIC_PAGE0_START; 427 eaddr_start = MAGIC_PAGE0_START;
568 for (i=0; i < (1 << CACHE_OC_N_SYNBITS); i++) { 428 for (i = 0; i < (1 << CACHE_OC_N_SYNBITS); i++) {
569 sh64_setup_dtlb_cache_slot(eaddr_start, get_asid(), paddr); 429 sh64_setup_dtlb_cache_slot(eaddr_start, get_asid(), paddr);
570 430
571 eaddr = eaddr_start; 431 eaddr = eaddr_start;
572 eaddr_end = eaddr + PAGE_SIZE; 432 eaddr_end = eaddr + PAGE_SIZE;
573 while (eaddr < eaddr_end) { 433 while (eaddr < eaddr_end) {
574 asm __volatile__ ("ocbp %0, 0" : : "r" (eaddr)); 434 __asm__ __volatile__ ("ocbp %0, 0" : : "r" (eaddr));
575 eaddr += L1_CACHE_BYTES; 435 eaddr += L1_CACHE_BYTES;
576 } 436 }
577 437
@@ -584,6 +444,7 @@ static void sh64_dcache_purge_user_pages(struct mm_struct *mm,
584 unsigned long addr, unsigned long end) 444 unsigned long addr, unsigned long end)
585{ 445{
586 pgd_t *pgd; 446 pgd_t *pgd;
447 pud_t *pud;
587 pmd_t *pmd; 448 pmd_t *pmd;
588 pte_t *pte; 449 pte_t *pte;
589 pte_t entry; 450 pte_t entry;
@@ -597,7 +458,11 @@ static void sh64_dcache_purge_user_pages(struct mm_struct *mm,
597 if (pgd_bad(*pgd)) 458 if (pgd_bad(*pgd))
598 return; 459 return;
599 460
600 pmd = pmd_offset(pgd, addr); 461 pud = pud_offset(pgd, addr);
462 if (pud_none(*pud) || pud_bad(*pud))
463 return;
464
465 pmd = pmd_offset(pud, addr);
601 if (pmd_none(*pmd) || pmd_bad(*pmd)) 466 if (pmd_none(*pmd) || pmd_bad(*pmd))
602 return; 467 return;
603 468
@@ -611,419 +476,357 @@ static void sh64_dcache_purge_user_pages(struct mm_struct *mm,
611 } while (pte++, addr += PAGE_SIZE, addr != end); 476 } while (pte++, addr += PAGE_SIZE, addr != end);
612 pte_unmap_unlock(pte - 1, ptl); 477 pte_unmap_unlock(pte - 1, ptl);
613} 478}
614/****************************************************************************/
615 479
480/*
481 * There are at least 5 choices for the implementation of this, with
482 * pros (+), cons(-), comments(*):
483 *
484 * 1. ocbp each line in the range through the original user's ASID
485 * + no lines spuriously evicted
486 * - tlbmiss handling (must either handle faults on demand => extra
487 * special-case code in tlbmiss critical path), or map the page in
488 * advance (=> flush_tlb_range in advance to avoid multiple hits)
489 * - ASID switching
490 * - expensive for large ranges
491 *
492 * 2. temporarily map each page in the range to a special effective
493 * address and ocbp through the temporary mapping; relies on the
494 * fact that SH-5 OCB* always do TLB lookup and match on ptags (they
495 * never look at the etags)
496 * + no spurious evictions
497 * - expensive for large ranges
498 * * surely cheaper than (1)
499 *
500 * 3. walk all the lines in the cache, check the tags, if a match
501 * occurs create a page mapping to ocbp the line through
502 * + no spurious evictions
503 * - tag inspection overhead
504 * - (especially for small ranges)
505 * - potential cost of setting up/tearing down page mapping for
506 * every line that matches the range
507 * * cost partly independent of range size
508 *
509 * 4. walk all the lines in the cache, check the tags, if a match
510 * occurs use 4 * alloco to purge the line (+3 other probably
511 * innocent victims) by natural eviction
512 * + no tlb mapping overheads
513 * - spurious evictions
514 * - tag inspection overhead
515 *
516 * 5. implement like flush_cache_all
517 * + no tag inspection overhead
518 * - spurious evictions
519 * - bad for small ranges
520 *
521 * (1) can be ruled out as more expensive than (2). (2) appears best
522 * for small ranges. The choice between (3), (4) and (5) for large
523 * ranges and the range size for the large/small boundary need
524 * benchmarking to determine.
525 *
526 * For now use approach (2) for small ranges and (5) for large ones.
527 */
616static void sh64_dcache_purge_user_range(struct mm_struct *mm, 528static void sh64_dcache_purge_user_range(struct mm_struct *mm,
617 unsigned long start, unsigned long end) 529 unsigned long start, unsigned long end)
618{ 530{
619 /* There are at least 5 choices for the implementation of this, with 531 int n_pages = ((end - start) >> PAGE_SHIFT);
620 pros (+), cons(-), comments(*):
621
622 1. ocbp each line in the range through the original user's ASID
623 + no lines spuriously evicted
624 - tlbmiss handling (must either handle faults on demand => extra
625 special-case code in tlbmiss critical path), or map the page in
626 advance (=> flush_tlb_range in advance to avoid multiple hits)
627 - ASID switching
628 - expensive for large ranges
629
630 2. temporarily map each page in the range to a special effective
631 address and ocbp through the temporary mapping; relies on the
632 fact that SH-5 OCB* always do TLB lookup and match on ptags (they
633 never look at the etags)
634 + no spurious evictions
635 - expensive for large ranges
636 * surely cheaper than (1)
637
638 3. walk all the lines in the cache, check the tags, if a match
639 occurs create a page mapping to ocbp the line through
640 + no spurious evictions
641 - tag inspection overhead
642 - (especially for small ranges)
643 - potential cost of setting up/tearing down page mapping for
644 every line that matches the range
645 * cost partly independent of range size
646
647 4. walk all the lines in the cache, check the tags, if a match
648 occurs use 4 * alloco to purge the line (+3 other probably
649 innocent victims) by natural eviction
650 + no tlb mapping overheads
651 - spurious evictions
652 - tag inspection overhead
653
654 5. implement like flush_cache_all
655 + no tag inspection overhead
656 - spurious evictions
657 - bad for small ranges
658
659 (1) can be ruled out as more expensive than (2). (2) appears best
660 for small ranges. The choice between (3), (4) and (5) for large
661 ranges and the range size for the large/small boundary need
662 benchmarking to determine.
663
664 For now use approach (2) for small ranges and (5) for large ones.
665
666 */
667
668 int n_pages;
669 532
670 n_pages = ((end - start) >> PAGE_SHIFT);
671 if (n_pages >= 64 || ((start ^ (end - 1)) & PMD_MASK)) { 533 if (n_pages >= 64 || ((start ^ (end - 1)) & PMD_MASK)) {
672#if 1
673 sh64_dcache_purge_all(); 534 sh64_dcache_purge_all();
674#else
675 unsigned long long set, way;
676 unsigned long mm_asid = mm->context & MMU_CONTEXT_ASID_MASK;
677 for (set = 0; set < cpu_data->dcache.sets; set++) {
678 unsigned long long set_base_config_addr = CACHE_OC_ADDRESS_ARRAY + (set << cpu_data->dcache.set_shift);
679 for (way = 0; way < cpu_data->dcache.ways; way++) {
680 unsigned long long config_addr = set_base_config_addr + (way << cpu_data->dcache.way_step_shift);
681 unsigned long long tag0;
682 unsigned long line_valid;
683
684 asm __volatile__("getcfg %1, 0, %0" : "=r" (tag0) : "r" (config_addr));
685 line_valid = tag0 & SH_CACHE_VALID;
686 if (line_valid) {
687 unsigned long cache_asid;
688 unsigned long epn;
689
690 cache_asid = (tag0 & cpu_data->dcache.asid_mask) >> cpu_data->dcache.asid_shift;
691 /* The next line needs some
692 explanation. The virtual tags
693 encode bits [31:13] of the virtual
694 address, bit [12] of the 'tag' being
695 implied by the cache set index. */
696 epn = (tag0 & cpu_data->dcache.epn_mask) | ((set & 0x80) << cpu_data->dcache.entry_shift);
697
698 if ((cache_asid == mm_asid) && (start <= epn) && (epn < end)) {
699 /* TODO : could optimise this
700 call by batching multiple
701 adjacent sets together. */
702 sh64_dcache_purge_sets(set, 1);
703 break; /* Don't waste time inspecting other ways for this set */
704 }
705 }
706 }
707 }
708#endif
709 } else { 535 } else {
710 /* Small range, covered by a single page table page */ 536 /* Small range, covered by a single page table page */
711 start &= PAGE_MASK; /* should already be so */ 537 start &= PAGE_MASK; /* should already be so */
712 end = PAGE_ALIGN(end); /* should already be so */ 538 end = PAGE_ALIGN(end); /* should already be so */
713 sh64_dcache_purge_user_pages(mm, start, end); 539 sh64_dcache_purge_user_pages(mm, start, end);
714 } 540 }
715 return;
716} 541}
717 542
718static void sh64_dcache_wback_current_user_range(unsigned long start, unsigned long end) 543/*
544 * Purge the range of addresses from the D-cache.
545 *
546 * The addresses lie in the superpage mapping. There's no harm if we
547 * overpurge at either end - just a small performance loss.
548 */
549void __flush_purge_region(void *start, int size)
719{ 550{
720 unsigned long long aligned_start; 551 unsigned long long ullend, addr, aligned_start;
721 unsigned long long ull_end;
722 unsigned long long addr;
723
724 ull_end = end;
725 552
726 /* Just wback over the range using the natural addresses. TLB miss 553 aligned_start = (unsigned long long)(signed long long)(signed long) start;
727 handling will be OK (TBC) : the range has just been written to by 554 addr = L1_CACHE_ALIGN(aligned_start);
728 the signal frame setup code, so the PTEs must exist. 555 ullend = (unsigned long long) (signed long long) (signed long) start + size;
729 556
730 Note, if we have CONFIG_PREEMPT and get preempted inside this loop, 557 while (addr <= ullend) {
731 it doesn't matter, even if the pid->ASID mapping changes whilst 558 __asm__ __volatile__ ("ocbp %0, 0" : : "r" (addr));
732 we're away. In that case the cache will have been flushed when the
733 mapping was renewed. So the writebacks below will be nugatory (and
734 we'll doubtless have to fault the TLB entry/ies in again with the
735 new ASID), but it's a rare case.
736 */
737 aligned_start = start & L1_CACHE_ALIGN_MASK;
738 addr = aligned_start;
739 while (addr < ull_end) {
740 asm __volatile__ ("ocbwb %0, 0" : : "r" (addr));
741 addr += L1_CACHE_BYTES; 559 addr += L1_CACHE_BYTES;
742 } 560 }
743} 561}
744 562
745/****************************************************************************/ 563void __flush_wback_region(void *start, int size)
746
747/* These *MUST* lie in an area of virtual address space that's otherwise unused. */
748#define UNIQUE_EADDR_START 0xe0000000UL
749#define UNIQUE_EADDR_END 0xe8000000UL
750
751static unsigned long sh64_make_unique_eaddr(unsigned long user_eaddr, unsigned long paddr)
752{ 564{
753 /* Given a physical address paddr, and a user virtual address 565 unsigned long long ullend, addr, aligned_start;
754 user_eaddr which will eventually be mapped to it, create a one-off
755 kernel-private eaddr mapped to the same paddr. This is used for
756 creating special destination pages for copy_user_page and
757 clear_user_page */
758 566
759 static unsigned long current_pointer = UNIQUE_EADDR_START; 567 aligned_start = (unsigned long long)(signed long long)(signed long) start;
760 unsigned long coloured_pointer; 568 addr = L1_CACHE_ALIGN(aligned_start);
569 ullend = (unsigned long long) (signed long long) (signed long) start + size;
761 570
762 if (current_pointer == UNIQUE_EADDR_END) { 571 while (addr < ullend) {
763 sh64_dcache_purge_all(); 572 __asm__ __volatile__ ("ocbwb %0, 0" : : "r" (addr));
764 current_pointer = UNIQUE_EADDR_START; 573 addr += L1_CACHE_BYTES;
765 } 574 }
766
767 coloured_pointer = (current_pointer & ~CACHE_OC_SYN_MASK) | (user_eaddr & CACHE_OC_SYN_MASK);
768 sh64_setup_dtlb_cache_slot(coloured_pointer, get_asid(), paddr);
769
770 current_pointer += (PAGE_SIZE << CACHE_OC_N_SYNBITS);
771
772 return coloured_pointer;
773}
774
775/****************************************************************************/
776
777static void sh64_copy_user_page_coloured(void *to, void *from, unsigned long address)
778{
779 void *coloured_to;
780
781 /* Discard any existing cache entries of the wrong colour. These are
782 present quite often, if the kernel has recently used the page
783 internally, then given it up, then it's been allocated to the user.
784 */
785 sh64_dcache_purge_coloured_phy_page(__pa(to), (unsigned long) to);
786
787 coloured_to = (void *) sh64_make_unique_eaddr(address, __pa(to));
788 sh64_page_copy(from, coloured_to);
789
790 sh64_teardown_dtlb_cache_slot();
791} 575}
792 576
793static void sh64_clear_user_page_coloured(void *to, unsigned long address) 577void __flush_invalidate_region(void *start, int size)
794{ 578{
795 void *coloured_to; 579 unsigned long long ullend, addr, aligned_start;
796
797 /* Discard any existing kernel-originated lines of the wrong colour (as
798 above) */
799 sh64_dcache_purge_coloured_phy_page(__pa(to), (unsigned long) to);
800 580
801 coloured_to = (void *) sh64_make_unique_eaddr(address, __pa(to)); 581 aligned_start = (unsigned long long)(signed long long)(signed long) start;
802 sh64_page_clear(coloured_to); 582 addr = L1_CACHE_ALIGN(aligned_start);
583 ullend = (unsigned long long) (signed long long) (signed long) start + size;
803 584
804 sh64_teardown_dtlb_cache_slot(); 585 while (addr < ullend) {
586 __asm__ __volatile__ ("ocbi %0, 0" : : "r" (addr));
587 addr += L1_CACHE_BYTES;
588 }
805} 589}
806
807#endif /* !CONFIG_DCACHE_DISABLED */ 590#endif /* !CONFIG_DCACHE_DISABLED */
808 591
809/****************************************************************************/ 592/*
810 593 * Invalidate the entire contents of both caches, after writing back to
811/*########################################################################## 594 * memory any dirty data from the D-cache.
812 EXTERNALLY CALLABLE API. 595 */
813 ##########################################################################*/
814
815/* These functions are described in Documentation/cachetlb.txt.
816 Each one of these functions varies in behaviour depending on whether the
817 I-cache and/or D-cache are configured out.
818
819 Note that the Linux term 'flush' corresponds to what is termed 'purge' in
820 the sh/sh64 jargon for the D-cache, i.e. write back dirty data then
821 invalidate the cache lines, and 'invalidate' for the I-cache.
822 */
823
824#undef FLUSH_TRACE
825
826void flush_cache_all(void) 596void flush_cache_all(void)
827{ 597{
828 /* Invalidate the entire contents of both caches, after writing back to
829 memory any dirty data from the D-cache. */
830 sh64_dcache_purge_all(); 598 sh64_dcache_purge_all();
831 sh64_icache_inv_all(); 599 sh64_icache_inv_all();
832} 600}
833 601
834/****************************************************************************/ 602/*
835 603 * Invalidate an entire user-address space from both caches, after
604 * writing back dirty data (e.g. for shared mmap etc).
605 *
606 * This could be coded selectively by inspecting all the tags then
607 * doing 4*alloco on any set containing a match (as for
608 * flush_cache_range), but fork/exit/execve (where this is called from)
609 * are expensive anyway.
610 *
611 * Have to do a purge here, despite the comments re I-cache below.
612 * There could be odd-coloured dirty data associated with the mm still
613 * in the cache - if this gets written out through natural eviction
614 * after the kernel has reused the page there will be chaos.
615 *
616 * The mm being torn down won't ever be active again, so any Icache
617 * lines tagged with its ASID won't be visible for the rest of the
618 * lifetime of this ASID cycle. Before the ASID gets reused, there
619 * will be a flush_cache_all. Hence we don't need to touch the
620 * I-cache. This is similar to the lack of action needed in
621 * flush_tlb_mm - see fault.c.
622 */
836void flush_cache_mm(struct mm_struct *mm) 623void flush_cache_mm(struct mm_struct *mm)
837{ 624{
838 /* Invalidate an entire user-address space from both caches, after
839 writing back dirty data (e.g. for shared mmap etc). */
840
841 /* This could be coded selectively by inspecting all the tags then
842 doing 4*alloco on any set containing a match (as for
843 flush_cache_range), but fork/exit/execve (where this is called from)
844 are expensive anyway. */
845
846 /* Have to do a purge here, despite the comments re I-cache below.
847 There could be odd-coloured dirty data associated with the mm still
848 in the cache - if this gets written out through natural eviction
849 after the kernel has reused the page there will be chaos.
850 */
851
852 sh64_dcache_purge_all(); 625 sh64_dcache_purge_all();
853
854 /* The mm being torn down won't ever be active again, so any Icache
855 lines tagged with its ASID won't be visible for the rest of the
856 lifetime of this ASID cycle. Before the ASID gets reused, there
857 will be a flush_cache_all. Hence we don't need to touch the
858 I-cache. This is similar to the lack of action needed in
859 flush_tlb_mm - see fault.c. */
860} 626}
861 627
862/****************************************************************************/ 628/*
863 629 * Invalidate (from both caches) the range [start,end) of virtual
630 * addresses from the user address space specified by mm, after writing
631 * back any dirty data.
632 *
633 * Note, 'end' is 1 byte beyond the end of the range to flush.
634 */
864void flush_cache_range(struct vm_area_struct *vma, unsigned long start, 635void flush_cache_range(struct vm_area_struct *vma, unsigned long start,
865 unsigned long end) 636 unsigned long end)
866{ 637{
867 struct mm_struct *mm = vma->vm_mm; 638 struct mm_struct *mm = vma->vm_mm;
868 639
869 /* Invalidate (from both caches) the range [start,end) of virtual
870 addresses from the user address space specified by mm, after writing
871 back any dirty data.
872
873 Note, 'end' is 1 byte beyond the end of the range to flush. */
874
875 sh64_dcache_purge_user_range(mm, start, end); 640 sh64_dcache_purge_user_range(mm, start, end);
876 sh64_icache_inv_user_page_range(mm, start, end); 641 sh64_icache_inv_user_page_range(mm, start, end);
877} 642}
878 643
879/****************************************************************************/ 644/*
880 645 * Invalidate any entries in either cache for the vma within the user
881void flush_cache_page(struct vm_area_struct *vma, unsigned long eaddr, unsigned long pfn) 646 * address space vma->vm_mm for the page starting at virtual address
647 * 'eaddr'. This seems to be used primarily in breaking COW. Note,
648 * the I-cache must be searched too in case the page in question is
649 * both writable and being executed from (e.g. stack trampolines.)
650 *
651 * Note, this is called with pte lock held.
652 */
653void flush_cache_page(struct vm_area_struct *vma, unsigned long eaddr,
654 unsigned long pfn)
882{ 655{
883 /* Invalidate any entries in either cache for the vma within the user
884 address space vma->vm_mm for the page starting at virtual address
885 'eaddr'. This seems to be used primarily in breaking COW. Note,
886 the I-cache must be searched too in case the page in question is
887 both writable and being executed from (e.g. stack trampolines.)
888
889 Note, this is called with pte lock held.
890 */
891
892 sh64_dcache_purge_phy_page(pfn << PAGE_SHIFT); 656 sh64_dcache_purge_phy_page(pfn << PAGE_SHIFT);
893 657
894 if (vma->vm_flags & VM_EXEC) { 658 if (vma->vm_flags & VM_EXEC)
895 sh64_icache_inv_user_page(vma, eaddr); 659 sh64_icache_inv_user_page(vma, eaddr);
896 }
897} 660}
898 661
899/****************************************************************************/ 662void flush_dcache_page(struct page *page)
663{
664 sh64_dcache_purge_phy_page(page_to_phys(page));
665 wmb();
666}
900 667
901#ifndef CONFIG_DCACHE_DISABLED 668/*
669 * Flush the range [start,end] of kernel virtual adddress space from
670 * the I-cache. The corresponding range must be purged from the
671 * D-cache also because the SH-5 doesn't have cache snooping between
672 * the caches. The addresses will be visible through the superpage
673 * mapping, therefore it's guaranteed that there no cache entries for
674 * the range in cache sets of the wrong colour.
675 */
676void flush_icache_range(unsigned long start, unsigned long end)
677{
678 __flush_purge_region((void *)start, end);
679 wmb();
680 sh64_icache_inv_kernel_range(start, end);
681}
902 682
903void copy_user_page(void *to, void *from, unsigned long address, struct page *page) 683/*
684 * Flush the range of user (defined by vma->vm_mm) address space starting
685 * at 'addr' for 'len' bytes from the cache. The range does not straddle
686 * a page boundary, the unique physical page containing the range is
687 * 'page'. This seems to be used mainly for invalidating an address
688 * range following a poke into the program text through the ptrace() call
689 * from another process (e.g. for BRK instruction insertion).
690 */
691void flush_icache_user_range(struct vm_area_struct *vma,
692 struct page *page, unsigned long addr, int len)
904{ 693{
905 /* 'from' and 'to' are kernel virtual addresses (within the superpage
906 mapping of the physical RAM). 'address' is the user virtual address
907 where the copy 'to' will be mapped after. This allows a custom
908 mapping to be used to ensure that the new copy is placed in the
909 right cache sets for the user to see it without having to bounce it
910 out via memory. Note however : the call to flush_page_to_ram in
911 (generic)/mm/memory.c:(break_cow) undoes all this good work in that one
912 very important case!
913
914 TBD : can we guarantee that on every call, any cache entries for
915 'from' are in the same colour sets as 'address' also? i.e. is this
916 always used just to deal with COW? (I suspect not). */
917
918 /* There are two possibilities here for when the page 'from' was last accessed:
919 * by the kernel : this is OK, no purge required.
920 * by the/a user (e.g. for break_COW) : need to purge.
921
922 If the potential user mapping at 'address' is the same colour as
923 'from' there is no need to purge any cache lines from the 'from'
924 page mapped into cache sets of colour 'address'. (The copy will be
925 accessing the page through 'from').
926 */
927 694
928 if (((address ^ (unsigned long) from) & CACHE_OC_SYN_MASK) != 0) { 695 sh64_dcache_purge_coloured_phy_page(page_to_phys(page), addr);
929 sh64_dcache_purge_coloured_phy_page(__pa(from), address); 696 mb();
930 }
931 697
932 if (((address ^ (unsigned long) to) & CACHE_OC_SYN_MASK) == 0) { 698 if (vma->vm_flags & VM_EXEC)
933 /* No synonym problem on destination */ 699 sh64_icache_inv_user_small_range(vma->vm_mm, addr, len);
934 sh64_page_copy(from, to); 700}
935 } else { 701
936 sh64_copy_user_page_coloured(to, from, address); 702/*
937 } 703 * For the address range [start,end), write back the data from the
704 * D-cache and invalidate the corresponding region of the I-cache for the
705 * current process. Used to flush signal trampolines on the stack to
706 * make them executable.
707 */
708void flush_cache_sigtramp(unsigned long vaddr)
709{
710 unsigned long end = vaddr + L1_CACHE_BYTES;
938 711
939 /* Note, don't need to flush 'from' page from the cache again - it's 712 __flush_wback_region((void *)vaddr, L1_CACHE_BYTES);
940 done anyway by the generic code */ 713 wmb();
714 sh64_icache_inv_current_user_range(vaddr, end);
941} 715}
942 716
943void clear_user_page(void *to, unsigned long address, struct page *page) 717/*
718 * These *MUST* lie in an area of virtual address space that's otherwise
719 * unused.
720 */
721#define UNIQUE_EADDR_START 0xe0000000UL
722#define UNIQUE_EADDR_END 0xe8000000UL
723
724/*
725 * Given a physical address paddr, and a user virtual address user_eaddr
726 * which will eventually be mapped to it, create a one-off kernel-private
727 * eaddr mapped to the same paddr. This is used for creating special
728 * destination pages for copy_user_page and clear_user_page.
729 */
730static unsigned long sh64_make_unique_eaddr(unsigned long user_eaddr,
731 unsigned long paddr)
944{ 732{
945 /* 'to' is a kernel virtual address (within the superpage 733 static unsigned long current_pointer = UNIQUE_EADDR_START;
946 mapping of the physical RAM). 'address' is the user virtual address 734 unsigned long coloured_pointer;
947 where the 'to' page will be mapped after. This allows a custom
948 mapping to be used to ensure that the new copy is placed in the
949 right cache sets for the user to see it without having to bounce it
950 out via memory.
951 */
952 735
953 if (((address ^ (unsigned long) to) & CACHE_OC_SYN_MASK) == 0) { 736 if (current_pointer == UNIQUE_EADDR_END) {
954 /* No synonym problem on destination */ 737 sh64_dcache_purge_all();
955 sh64_page_clear(to); 738 current_pointer = UNIQUE_EADDR_START;
956 } else {
957 sh64_clear_user_page_coloured(to, address);
958 } 739 }
959}
960 740
961#endif /* !CONFIG_DCACHE_DISABLED */ 741 coloured_pointer = (current_pointer & ~CACHE_OC_SYN_MASK) |
742 (user_eaddr & CACHE_OC_SYN_MASK);
743 sh64_setup_dtlb_cache_slot(coloured_pointer, get_asid(), paddr);
962 744
963/****************************************************************************/ 745 current_pointer += (PAGE_SIZE << CACHE_OC_N_SYNBITS);
964 746
965void flush_dcache_page(struct page *page) 747 return coloured_pointer;
966{
967 sh64_dcache_purge_phy_page(page_to_phys(page));
968 wmb();
969} 748}
970 749
971/****************************************************************************/ 750static void sh64_copy_user_page_coloured(void *to, void *from,
972 751 unsigned long address)
973void flush_icache_range(unsigned long start, unsigned long end)
974{ 752{
975 /* Flush the range [start,end] of kernel virtual adddress space from 753 void *coloured_to;
976 the I-cache. The corresponding range must be purged from the
977 D-cache also because the SH-5 doesn't have cache snooping between
978 the caches. The addresses will be visible through the superpage
979 mapping, therefore it's guaranteed that there no cache entries for
980 the range in cache sets of the wrong colour.
981 754
982 Primarily used for cohering the I-cache after a module has 755 /*
983 been loaded. */ 756 * Discard any existing cache entries of the wrong colour. These are
757 * present quite often, if the kernel has recently used the page
758 * internally, then given it up, then it's been allocated to the user.
759 */
760 sh64_dcache_purge_coloured_phy_page(__pa(to), (unsigned long)to);
984 761
985 /* We also make sure to purge the same range from the D-cache since 762 coloured_to = (void *)sh64_make_unique_eaddr(address, __pa(to));
986 flush_page_to_ram() won't be doing this for us! */ 763 copy_page(from, coloured_to);
987 764
988 sh64_dcache_purge_kernel_range(start, end); 765 sh64_teardown_dtlb_cache_slot();
989 wmb();
990 sh64_icache_inv_kernel_range(start, end);
991} 766}
992 767
993/****************************************************************************/ 768static void sh64_clear_user_page_coloured(void *to, unsigned long address)
994
995void flush_icache_user_range(struct vm_area_struct *vma,
996 struct page *page, unsigned long addr, int len)
997{ 769{
998 /* Flush the range of user (defined by vma->vm_mm) address space 770 void *coloured_to;
999 starting at 'addr' for 'len' bytes from the cache. The range does
1000 not straddle a page boundary, the unique physical page containing
1001 the range is 'page'. This seems to be used mainly for invalidating
1002 an address range following a poke into the program text through the
1003 ptrace() call from another process (e.g. for BRK instruction
1004 insertion). */
1005 771
1006 sh64_dcache_purge_coloured_phy_page(page_to_phys(page), addr); 772 /*
1007 mb(); 773 * Discard any existing kernel-originated lines of the wrong
774 * colour (as above)
775 */
776 sh64_dcache_purge_coloured_phy_page(__pa(to), (unsigned long)to);
1008 777
1009 if (vma->vm_flags & VM_EXEC) { 778 coloured_to = (void *)sh64_make_unique_eaddr(address, __pa(to));
1010 sh64_icache_inv_user_small_range(vma->vm_mm, addr, len); 779 clear_page(coloured_to);
1011 }
1012}
1013 780
1014/*########################################################################## 781 sh64_teardown_dtlb_cache_slot();
1015 ARCH/SH64 PRIVATE CALLABLE API. 782}
1016 ##########################################################################*/
1017 783
1018void flush_cache_sigtramp(unsigned long start, unsigned long end) 784/*
785 * 'from' and 'to' are kernel virtual addresses (within the superpage
786 * mapping of the physical RAM). 'address' is the user virtual address
787 * where the copy 'to' will be mapped after. This allows a custom
788 * mapping to be used to ensure that the new copy is placed in the
789 * right cache sets for the user to see it without having to bounce it
790 * out via memory. Note however : the call to flush_page_to_ram in
791 * (generic)/mm/memory.c:(break_cow) undoes all this good work in that one
792 * very important case!
793 *
794 * TBD : can we guarantee that on every call, any cache entries for
795 * 'from' are in the same colour sets as 'address' also? i.e. is this
796 * always used just to deal with COW? (I suspect not).
797 *
798 * There are two possibilities here for when the page 'from' was last accessed:
799 * - by the kernel : this is OK, no purge required.
800 * - by the/a user (e.g. for break_COW) : need to purge.
801 *
802 * If the potential user mapping at 'address' is the same colour as
803 * 'from' there is no need to purge any cache lines from the 'from'
804 * page mapped into cache sets of colour 'address'. (The copy will be
805 * accessing the page through 'from').
806 */
807void copy_user_page(void *to, void *from, unsigned long address,
808 struct page *page)
1019{ 809{
1020 /* For the address range [start,end), write back the data from the 810 if (((address ^ (unsigned long) from) & CACHE_OC_SYN_MASK) != 0)
1021 D-cache and invalidate the corresponding region of the I-cache for 811 sh64_dcache_purge_coloured_phy_page(__pa(from), address);
1022 the current process. Used to flush signal trampolines on the stack
1023 to make them executable. */
1024 812
1025 sh64_dcache_wback_current_user_range(start, end); 813 if (((address ^ (unsigned long) to) & CACHE_OC_SYN_MASK) == 0)
1026 wmb(); 814 copy_page(to, from);
1027 sh64_icache_inv_current_user_range(start, end); 815 else
816 sh64_copy_user_page_coloured(to, from, address);
1028} 817}
1029 818
819/*
820 * 'to' is a kernel virtual address (within the superpage mapping of the
821 * physical RAM). 'address' is the user virtual address where the 'to'
822 * page will be mapped after. This allows a custom mapping to be used to
823 * ensure that the new copy is placed in the right cache sets for the
824 * user to see it without having to bounce it out via memory.
825 */
826void clear_user_page(void *to, unsigned long address, struct page *page)
827{
828 if (((address ^ (unsigned long) to) & CACHE_OC_SYN_MASK) == 0)
829 clear_page(to);
830 else
831 sh64_clear_user_page_coloured(to, address);
832}
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c
index 7b2131c9eeda..d3c33fc5b1c2 100644
--- a/arch/sh/mm/consistent.c
+++ b/arch/sh/mm/consistent.c
@@ -26,7 +26,7 @@ struct dma_coherent_mem {
26void *dma_alloc_coherent(struct device *dev, size_t size, 26void *dma_alloc_coherent(struct device *dev, size_t size,
27 dma_addr_t *dma_handle, gfp_t gfp) 27 dma_addr_t *dma_handle, gfp_t gfp)
28{ 28{
29 void *ret; 29 void *ret, *ret_nocache;
30 struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL; 30 struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
31 int order = get_order(size); 31 int order = get_order(size);
32 32
@@ -44,17 +44,24 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
44 } 44 }
45 45
46 ret = (void *)__get_free_pages(gfp, order); 46 ret = (void *)__get_free_pages(gfp, order);
47 47 if (!ret)
48 if (ret != NULL) { 48 return NULL;
49 memset(ret, 0, size); 49
50 /* 50 memset(ret, 0, size);
51 * Pages from the page allocator may have data present in 51 /*
52 * cache. So flush the cache before using uncached memory. 52 * Pages from the page allocator may have data present in
53 */ 53 * cache. So flush the cache before using uncached memory.
54 dma_cache_sync(NULL, ret, size, DMA_BIDIRECTIONAL); 54 */
55 *dma_handle = virt_to_phys(ret); 55 dma_cache_sync(dev, ret, size, DMA_BIDIRECTIONAL);
56
57 ret_nocache = ioremap_nocache(virt_to_phys(ret), size);
58 if (!ret_nocache) {
59 free_pages((unsigned long)ret, order);
60 return NULL;
56 } 61 }
57 return ret; 62
63 *dma_handle = virt_to_phys(ret);
64 return ret_nocache;
58} 65}
59EXPORT_SYMBOL(dma_alloc_coherent); 66EXPORT_SYMBOL(dma_alloc_coherent);
60 67
@@ -71,7 +78,8 @@ void dma_free_coherent(struct device *dev, size_t size,
71 } else { 78 } else {
72 WARN_ON(irqs_disabled()); /* for portability */ 79 WARN_ON(irqs_disabled()); /* for portability */
73 BUG_ON(mem && mem->flags & DMA_MEMORY_EXCLUSIVE); 80 BUG_ON(mem && mem->flags & DMA_MEMORY_EXCLUSIVE);
74 free_pages((unsigned long)vaddr, order); 81 free_pages((unsigned long)phys_to_virt(dma_handle), order);
82 iounmap(vaddr);
75 } 83 }
76} 84}
77EXPORT_SYMBOL(dma_free_coherent); 85EXPORT_SYMBOL(dma_free_coherent);
diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c
index 33b43d20e9f6..d1fa27594c6e 100644
--- a/arch/sh/mm/fault_32.c
+++ b/arch/sh/mm/fault_32.c
@@ -15,6 +15,7 @@
15#include <linux/mm.h> 15#include <linux/mm.h>
16#include <linux/hardirq.h> 16#include <linux/hardirq.h>
17#include <linux/kprobes.h> 17#include <linux/kprobes.h>
18#include <asm/io_trapped.h>
18#include <asm/system.h> 19#include <asm/system.h>
19#include <asm/mmu_context.h> 20#include <asm/mmu_context.h>
20#include <asm/tlbflush.h> 21#include <asm/tlbflush.h>
@@ -163,6 +164,8 @@ no_context:
163 if (fixup_exception(regs)) 164 if (fixup_exception(regs))
164 return; 165 return;
165 166
167 if (handle_trapped_io(regs, address))
168 return;
166/* 169/*
167 * Oops. The kernel tried to access some bad page. We'll have to 170 * Oops. The kernel tried to access some bad page. We'll have to
168 * terminate things with extreme prejudice. 171 * terminate things with extreme prejudice.
@@ -296,6 +299,14 @@ asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs,
296 entry = pte_mkdirty(entry); 299 entry = pte_mkdirty(entry);
297 entry = pte_mkyoung(entry); 300 entry = pte_mkyoung(entry);
298 301
302#if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SMP)
303 /*
304 * ITLB is not affected by "ldtlb" instruction.
305 * So, we need to flush the entry by ourselves.
306 */
307 local_flush_tlb_one(get_asid(), address & PAGE_MASK);
308#endif
309
299 set_pte(pte, entry); 310 set_pte(pte, entry);
300 update_mmu_cache(NULL, address, entry); 311 update_mmu_cache(NULL, address, entry);
301 312
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c
index 2918c6b14659..e2ed6dd252b9 100644
--- a/arch/sh/mm/init.c
+++ b/arch/sh/mm/init.c
@@ -203,6 +203,7 @@ void __init paging_init(void)
203 203
204 free_area_init_nodes(max_zone_pfns); 204 free_area_init_nodes(max_zone_pfns);
205 205
206#ifdef CONFIG_SUPERH32
206 /* Set up the uncached fixmap */ 207 /* Set up the uncached fixmap */
207 set_fixmap_nocache(FIX_UNCACHED, __pa(&__uncached_start)); 208 set_fixmap_nocache(FIX_UNCACHED, __pa(&__uncached_start));
208 209
@@ -214,6 +215,7 @@ void __init paging_init(void)
214 */ 215 */
215 cached_to_uncached = P2SEG - P1SEG; 216 cached_to_uncached = P2SEG - P1SEG;
216#endif 217#endif
218#endif
217} 219}
218 220
219static struct kcore_list kcore_mem, kcore_vmalloc; 221static struct kcore_list kcore_mem, kcore_vmalloc;
diff --git a/arch/sh/tools/mach-types b/arch/sh/tools/mach-types
index 25810670a0fa..67997af25c0c 100644
--- a/arch/sh/tools/mach-types
+++ b/arch/sh/tools/mach-types
@@ -45,3 +45,5 @@ MAGICPANELR2 SH_MAGIC_PANEL_R2
45R2D_PLUS RTS7751R2D_PLUS 45R2D_PLUS RTS7751R2D_PLUS
46R2D_1 RTS7751R2D_1 46R2D_1 RTS7751R2D_1
47CAYMAN SH_CAYMAN 47CAYMAN SH_CAYMAN
48SDK7780 SH_SDK7780
49MIGOR SH_MIGOR