diff options
Diffstat (limited to 'arch/sh')
393 files changed, 14364 insertions, 7661 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 2121fbb2ff4..c5ee4ce60b5 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -13,7 +13,6 @@ config SUPERH  	select HAVE_LMB  	select HAVE_OPROFILE  	select HAVE_GENERIC_DMA_COHERENT -	select HAVE_IOREMAP_PROT if MMU  	select HAVE_ARCH_TRACEHOOK  	select HAVE_DMA_API_DEBUG  	select HAVE_DMA_ATTRS @@ -22,6 +21,7 @@ config SUPERH  	select HAVE_KERNEL_GZIP  	select HAVE_KERNEL_BZIP2  	select HAVE_KERNEL_LZMA +	select HAVE_KERNEL_LZO  	select HAVE_SYSCALL_TRACEPOINTS  	select RTC_LIB  	select GENERIC_ATOMIC64 @@ -35,6 +35,7 @@ config SUPERH32  	def_bool ARCH = "sh"  	select HAVE_KPROBES  	select HAVE_KRETPROBES +	select HAVE_IOREMAP_PROT if MMU && !X2TLB  	select HAVE_FUNCTION_TRACER  	select HAVE_FTRACE_MCOUNT_RECORD  	select HAVE_DYNAMIC_FTRACE @@ -42,6 +43,9 @@ config SUPERH32  	select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE  	select HAVE_FUNCTION_GRAPH_TRACER  	select HAVE_ARCH_KGDB +	select HAVE_HW_BREAKPOINT +	select HAVE_MIXED_BREAKPOINTS_REGS +	select PERF_EVENTS if HAVE_HW_BREAKPOINT  	select ARCH_HIBERNATION_POSSIBLE if MMU  config SUPERH64 @@ -78,11 +82,12 @@ config GENERIC_HARDIRQS  config GENERIC_HARDIRQS_NO__DO_IRQ  	def_bool y -config GENERIC_IRQ_PROBE +config IRQ_PER_CPU  	def_bool y -config IRQ_PER_CPU +config SPARSE_IRQ  	def_bool y +	depends on SUPERH32  config GENERIC_GPIO  	def_bool n @@ -153,7 +158,6 @@ config LOCKDEP_SUPPORT  config HAVE_LATENCYTOP_SUPPORT  	def_bool y -	depends on !SMP  config ARCH_HAS_ILOG2_U32  	def_bool n @@ -179,6 +183,12 @@ config DMA_COHERENT  config DMA_NONCOHERENT  	def_bool !DMA_COHERENT +config NEED_DMA_MAP_STATE +	def_bool DMA_NONCOHERENT + +config NEED_SG_DMA_LENGTH +	def_bool y +  source "init/Kconfig"  source "kernel/Kconfig.freezer" @@ -230,6 +240,8 @@ config CPU_SHX2  config CPU_SHX3  	bool  	select DMA_COHERENT +	select SYS_SUPPORTS_SMP +	select SYS_SUPPORTS_NUMA  config ARCH_SHMOBILE  	bool @@ -446,18 +458,12 @@ config CPU_SUBTYPE_SH7786  	select CPU_SH4A  	select CPU_SHX3  	select CPU_HAS_PTEAEX -	select ARCH_SPARSEMEM_ENABLE -	select SYS_SUPPORTS_NUMA -	select SYS_SUPPORTS_SMP  	select GENERIC_CLOCKEVENTS_BROADCAST if SMP  config CPU_SUBTYPE_SHX3  	bool "Support SH-X3 processor"  	select CPU_SH4A  	select CPU_SHX3 -	select ARCH_SPARSEMEM_ENABLE -	select SYS_SUPPORTS_NUMA -	select SYS_SUPPORTS_SMP  	select GENERIC_CLOCKEVENTS_BROADCAST if SMP  # SH4AL-DSP Processor Support @@ -548,8 +554,7 @@ config SH_PCLK_FREQ  			      CPU_SUBTYPE_SH7203 || \  			      CPU_SUBTYPE_SH7206 || \  			      CPU_SUBTYPE_SH7263 || \ -			      CPU_SUBTYPE_MXG    || \ -			      CPU_SUBTYPE_SH7786 +			      CPU_SUBTYPE_MXG  	default "60000000" if CPU_SUBTYPE_SH7751 || CPU_SUBTYPE_SH7751R  	default "66000000" if CPU_SUBTYPE_SH4_202  	default "50000000" @@ -563,7 +568,8 @@ config SH_CLK_CPG  config SH_CLK_CPG_LEGACY  	depends on SH_CLK_CPG -	def_bool y if !CPU_SUBTYPE_SH7785 && !ARCH_SHMOBILE +	def_bool y if !CPU_SUBTYPE_SH7785 && !ARCH_SHMOBILE && \ +		      !CPU_SUBTYPE_SH7786  config SH_CLK_MD  	int "CPU Mode Pin Setting" @@ -627,7 +633,7 @@ config KEXEC  config CRASH_DUMP  	bool "kernel crash dumps (EXPERIMENTAL)" -	depends on SUPERH32 && EXPERIMENTAL +	depends on SUPERH32 && EXPERIMENTAL && BROKEN_ON_SMP  	help  	  Generate crash dump after being started by kexec.  	  This should be normally only set in special crash dump kernels @@ -699,6 +705,13 @@ config NR_CPUS  	  This is purely to save memory - each supported CPU adds  	  approximately eight kilobytes to the kernel image. +config HOTPLUG_CPU +	bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" +	depends on SMP && HOTPLUG && EXPERIMENTAL +	help +	  Say Y here to experiment with turning CPUs off and on.  CPUs +	  can be controlled through /sys/devices/system/cpu. +  source "kernel/Kconfig.preempt"  config GUSA @@ -725,17 +738,7 @@ config GUSA_RB  	  LLSC, this should be more efficient than the other alternative of  	  disabling interrupts around the atomic sequence. -config SPARSE_IRQ -	bool "Support sparse irq numbering" -	depends on EXPERIMENTAL -	help -	  This enables support for sparse irqs. This is useful in general -	  as most CPUs have a fairly sparse array of IRQ vectors, which -	  the irq_desc then maps directly on to. Systems with a high -	  number of off-chip IRQs will want to treat this as -	  experimental until they have been independently verified. - -	  If you don't know what to do here, say N. +source "drivers/sh/Kconfig"  endmenu @@ -822,11 +825,15 @@ config MAPLE  config PCI  	bool "PCI support"  	depends on SYS_SUPPORTS_PCI +	select PCI_DOMAINS  	help  	  Find out whether you have a PCI motherboard. PCI is the name of a  	  bus system, i.e. the way the CPU talks to the other stuff inside  	  your box. If you have PCI, say Y, otherwise N. +config PCI_DOMAINS +	bool +  source "drivers/pci/pcie/Kconfig"  source "drivers/pci/Kconfig" @@ -864,4 +871,20 @@ source "security/Kconfig"  source "crypto/Kconfig" +menuconfig VIRTUALIZATION +	bool "Virtualization" +	default n +	---help--- +	  Say Y here to get to see options for using your Linux host to run other +	  operating systems inside virtual machines (guests). +	  This option alone does not add any kernel code. + +	  If you say N, all options in this submenu will be skipped and disabled. + +if VIRTUALIZATION + +source drivers/virtio/Kconfig + +endif # VIRTUALIZATION +  source "lib/Kconfig" diff --git a/arch/sh/Kconfig.cpu b/arch/sh/Kconfig.cpu index cd6e3ea598d..ddf096c7d8b 100644 --- a/arch/sh/Kconfig.cpu +++ b/arch/sh/Kconfig.cpu @@ -68,7 +68,8 @@ config SH_STORE_QUEUES  config SPECULATIVE_EXECUTION  	bool "Speculative subroutine return" -	depends on CPU_SUBTYPE_SH7780 && EXPERIMENTAL +	depends on EXPERIMENTAL +	depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 || CPU_SUBTYPE_SH7786  	help  	  This enables support for a speculative instruction fetch for  	  subroutine return. There are various pitfalls associated with diff --git a/arch/sh/Makefile b/arch/sh/Makefile index db91925c79d..307b3a4a790 100644 --- a/arch/sh/Makefile +++ b/arch/sh/Makefile @@ -143,11 +143,11 @@ machdir-$(CONFIG_SH_AP325RXA)			+= mach-ap325rxa  machdir-$(CONFIG_SH_KFR2R09)			+= mach-kfr2r09  machdir-$(CONFIG_SH_ECOVEC)			+= mach-ecovec24  machdir-$(CONFIG_SH_SDK7780)			+= mach-sdk7780 +machdir-$(CONFIG_SH_SDK7786)			+= mach-sdk7786  machdir-$(CONFIG_SH_X3PROTO)			+= mach-x3proto  machdir-$(CONFIG_SH_SH7763RDP)			+= mach-sh7763rdp  machdir-$(CONFIG_SH_SH4202_MICRODEV)		+= mach-microdev  machdir-$(CONFIG_SH_LANDISK)			+= mach-landisk -machdir-$(CONFIG_SH_TITAN)			+= mach-titan  machdir-$(CONFIG_SH_LBOX_RE2)			+= mach-lboxre2  machdir-$(CONFIG_SH_CAYMAN)			+= mach-cayman  machdir-$(CONFIG_SH_RSK)			+= mach-rsk @@ -203,8 +203,9 @@ endif  libs-$(CONFIG_SUPERH32)		:= arch/sh/lib/	$(libs-y)  libs-$(CONFIG_SUPERH64)		:= arch/sh/lib64/ $(libs-y) -BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.srec uImage.bin \ -	       zImage vmlinux.srec romImage +BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.lzo \ +	       uImage.srec uImage.bin zImage vmlinux.bin vmlinux.srec \ +	       romImage  PHONY += $(BOOT_TARGETS)  all: $(KBUILD_IMAGE) @@ -225,10 +226,12 @@ define archhelp  	@echo '  zImage 	           - Compressed kernel image'  	@echo '  romImage	           - Compressed ROM image, if supported'  	@echo '  vmlinux.srec	           - Create an ELF S-record' +	@echo '  vmlinux.bin	           - Create an uncompressed binary image'  	@echo '* uImage  	           - Alias to bootable U-Boot image'  	@echo '  uImage.srec	           - Create an S-record for U-Boot'  	@echo '  uImage.bin	           - Kernel-only image for U-Boot (bin)'  	@echo '* uImage.gz	           - Kernel-only image for U-Boot (gzip)'  	@echo '  uImage.bz2	           - Kernel-only image for U-Boot (bzip2)'  	@echo '  uImage.lzma	           - Kernel-only image for U-Boot (lzma)' +	@echo '  uImage.lzo	           - Kernel-only image for U-Boot (lzo)'  endef diff --git a/arch/sh/boards/Kconfig b/arch/sh/boards/Kconfig index aedd9deb5de..938e87d5148 100644 --- a/arch/sh/boards/Kconfig +++ b/arch/sh/boards/Kconfig @@ -150,6 +150,14 @@ config SH_SDK7780  	  Select SDK7780 if configuring for a Renesas SH7780 SDK7780R3  	  evaluation board. +config SH_SDK7786 +	bool "SDK7786" +	depends on CPU_SUBTYPE_SH7786 +	select SYS_SUPPORTS_PCI +	help +	  Select SDK7786 if configuring for a Renesas Technology Europe +	  SH7786-65nm board. +  config SH_HIGHLANDER  	bool "Highlander"  	depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 diff --git a/arch/sh/boards/Makefile b/arch/sh/boards/Makefile index ce0f2638178..4f90f9b7a92 100644 --- a/arch/sh/boards/Makefile +++ b/arch/sh/boards/Makefile @@ -8,3 +8,4 @@ obj-$(CONFIG_SH_SHMIN)		+= board-shmin.o  obj-$(CONFIG_SH_EDOSK7760)	+= board-edosk7760.o  obj-$(CONFIG_SH_ESPT)		+= board-espt.o  obj-$(CONFIG_SH_POLARIS)	+= board-polaris.o +obj-$(CONFIG_SH_TITAN)		+= board-titan.o diff --git a/arch/sh/boards/board-magicpanelr2.c b/arch/sh/boards/board-magicpanelr2.c index 99ffc5f1c0d..efba450a051 100644 --- a/arch/sh/boards/board-magicpanelr2.c +++ b/arch/sh/boards/board-magicpanelr2.c @@ -23,7 +23,7 @@  #include <asm/heartbeat.h>  #include <cpu/sh7720.h> -#define LAN9115_READY	(ctrl_inl(0xA8000084UL) & 0x00000001UL) +#define LAN9115_READY	(__raw_readl(0xA8000084UL) & 0x00000001UL)  /* Prefer cmdline over RedBoot */  static const char *probes[] = { "cmdlinepart", "RedBoot", NULL }; @@ -60,33 +60,33 @@ static void __init setup_chip_select(void)  {  	/* CS2: LAN (0x08000000 - 0x0bffffff) */  	/* no idle cycles, normal space, 8 bit data bus */ -	ctrl_outl(0x36db0400, CS2BCR); +	__raw_writel(0x36db0400, CS2BCR);  	/* (SW:1.5 WR:3 HW:1.5), ext. wait */ -	ctrl_outl(0x000003c0, CS2WCR); +	__raw_writel(0x000003c0, CS2WCR);  	/* CS4: CAN1 (0xb0000000 - 0xb3ffffff) */  	/* no idle cycles, normal space, 8 bit data bus */ -	ctrl_outl(0x00000200, CS4BCR); +	__raw_writel(0x00000200, CS4BCR);  	/* (SW:1.5 WR:3 HW:1.5), ext. wait */ -	ctrl_outl(0x00100981, CS4WCR); +	__raw_writel(0x00100981, CS4WCR);  	/* CS5a: CAN2 (0xb4000000 - 0xb5ffffff) */  	/* no idle cycles, normal space, 8 bit data bus */ -	ctrl_outl(0x00000200, CS5ABCR); +	__raw_writel(0x00000200, CS5ABCR);  	/* (SW:1.5 WR:3 HW:1.5), ext. wait */ -	ctrl_outl(0x00100981, CS5AWCR); +	__raw_writel(0x00100981, CS5AWCR);  	/* CS5b: CAN3 (0xb6000000 - 0xb7ffffff) */  	/* no idle cycles, normal space, 8 bit data bus */ -	ctrl_outl(0x00000200, CS5BBCR); +	__raw_writel(0x00000200, CS5BBCR);  	/* (SW:1.5 WR:3 HW:1.5), ext. wait */ -	ctrl_outl(0x00100981, CS5BWCR); +	__raw_writel(0x00100981, CS5BWCR);  	/* CS6a: Rotary (0xb8000000 - 0xb9ffffff) */  	/* no idle cycles, normal space, 8 bit data bus */ -	ctrl_outl(0x00000200, CS6ABCR); +	__raw_writel(0x00000200, CS6ABCR);  	/* (SW:1.5 WR:3 HW:1.5), no ext. wait */ -	ctrl_outl(0x001009C1, CS6AWCR); +	__raw_writel(0x001009C1, CS6AWCR);  }  static void __init setup_port_multiplexing(void) @@ -94,71 +94,71 @@ static void __init setup_port_multiplexing(void)  	/* A7 GPO(LED8);     A6 GPO(LED7);     A5 GPO(LED6);	  A4 GPO(LED5);  	 * A3 GPO(LED4);     A2 GPO(LED3);     A1 GPO(LED2);	  A0 GPO(LED1);  	 */ -	ctrl_outw(0x5555, PORT_PACR);	/* 01 01 01 01 01 01 01 01 */ +	__raw_writew(0x5555, PORT_PACR);	/* 01 01 01 01 01 01 01 01 */  	/* B7 GPO(RST4);   B6 GPO(RST3);  B5 GPO(RST2);    B4 GPO(RST1);  	 * B3 GPO(PB3);	   B2 GPO(PB2);	  B1 GPO(PB1);	   B0 GPO(PB0);  	 */ -	ctrl_outw(0x5555, PORT_PBCR);	/* 01 01 01 01 01 01 01 01 */ +	__raw_writew(0x5555, PORT_PBCR);	/* 01 01 01 01 01 01 01 01 */  	/* C7 GPO(PC7);	  C6 GPO(PC6);	  C5 GPO(PC5);	   C4 GPO(PC4);  	 * C3 LCD_DATA3;  C2 LCD_DATA2;   C1 LCD_DATA1;	   C0 LCD_DATA0;  	 */ -	ctrl_outw(0x5500, PORT_PCCR);	/* 01 01 01 01 00 00 00 00 */ +	__raw_writew(0x5500, PORT_PCCR);	/* 01 01 01 01 00 00 00 00 */  	/* D7 GPO(PD7);	D6 GPO(PD6);	D5 GPO(PD5);	   D4 GPO(PD4);  	 * D3 GPO(PD3);	D2 GPO(PD2);	D1 GPO(PD1);	   D0 GPO(PD0);  	 */ -	ctrl_outw(0x5555, PORT_PDCR);	/* 01 01 01 01 01 01 01 01 */ +	__raw_writew(0x5555, PORT_PDCR);	/* 01 01 01 01 01 01 01 01 */  	/* E7 (x);	  E6 GPI(nu);	 E5 GPI(nu);	  E4 LCD_M_DISP;  	 * E3 LCD_CL1;	  E2 LCD_CL2;	 E1 LCD_DON;	  E0 LCD_FLM;  	 */ -	ctrl_outw(0x3C00, PORT_PECR);	/* 00 11 11 00 00 00 00 00 */ +	__raw_writew(0x3C00, PORT_PECR);	/* 00 11 11 00 00 00 00 00 */  	/* F7 (x);	     F6 DA1(VLCD);     F5 DA0(nc);	  F4 AN3;  	 * F3 AN2(MID_AD);   F2 AN1(EARTH_AD); F1 AN0(TEMP);	  F0 GPI+(nc);  	 */ -	ctrl_outw(0x0002, PORT_PFCR);	/* 00 00 00 00 00 00 00 10 */ +	__raw_writew(0x0002, PORT_PFCR);	/* 00 00 00 00 00 00 00 10 */  	/* G7 (x);	  G6 IRQ5(TOUCH_BUSY); G5 IRQ4(TOUCH_IRQ); G4 GPI(KEY2);  	 * G3 GPI(KEY1);  G2 GPO(LED11);	G1 GPO(LED10);     G0 GPO(LED9);  	 */ -	ctrl_outw(0x03D5, PORT_PGCR);	/* 00 00 00 11 11 01 01 01 */ +	__raw_writew(0x03D5, PORT_PGCR);	/* 00 00 00 11 11 01 01 01 */  	/* H7 (x);	      H6 /RAS(BRAS);	  H5 /CAS(BCAS); H4 CKE(BCKE);  	 * H3 GPO(EARTH_OFF); H2 GPO(EARTH_TEST); H1 USB2_PWR;	 H0 USB1_PWR;  	 */ -	ctrl_outw(0x0050, PORT_PHCR);	/* 00 00 00 00 01 01 00 00 */ +	__raw_writew(0x0050, PORT_PHCR);	/* 00 00 00 00 01 01 00 00 */  	/* J7 (x);	  J6 AUDCK;	   J5 ASEBRKAK;	    J4 AUDATA3;  	 * J3 AUDATA2;	  J2 AUDATA1;	   J1 AUDATA0;	    J0 AUDSYNC;  	 */ -	ctrl_outw(0x0000, PORT_PJCR);	/* 00 00 00 00 00 00 00 00 */ +	__raw_writew(0x0000, PORT_PJCR);	/* 00 00 00 00 00 00 00 00 */  	/* K7 (x);	    K6 (x);	     K5 (x);	   K4 (x);  	 * K3 PINT7(/PWR2); K2 PINT6(/PWR1); K1 PINT5(nu); K0 PINT4(FLASH_READY)  	 */ -	ctrl_outw(0x00FF, PORT_PKCR);	/* 00 00 00 00 11 11 11 11 */ +	__raw_writew(0x00FF, PORT_PKCR);	/* 00 00 00 00 11 11 11 11 */  	/* L7 TRST;	   L6 TMS;	     L5 TDO;		  L4 TDI;  	 * L3 TCK;	   L2 (x);	     L1 (x);		  L0 (x);  	 */ -	ctrl_outw(0x0000, PORT_PLCR);	/* 00 00 00 00 00 00 00 00 */ +	__raw_writew(0x0000, PORT_PLCR);	/* 00 00 00 00 00 00 00 00 */  	/* M7 GPO(CURRENT_SINK);    M6 GPO(PWR_SWITCH);     M5 GPO(LAN_SPEED);  	 * M4 GPO(LAN_RESET);       M3 GPO(BUZZER);	    M2 GPO(LCD_BL);  	 * M1 CS5B(CAN3_CS);	    M0 GPI+(nc);  	 */ -	ctrl_outw(0x5552, PORT_PMCR);	   /* 01 01 01 01 01 01 00 10 */ +	__raw_writew(0x5552, PORT_PMCR);	   /* 01 01 01 01 01 01 00 10 */  	/* CURRENT_SINK=off,	PWR_SWITCH=off, LAN_SPEED=100MBit,  	 * LAN_RESET=off,	BUZZER=off,	LCD_BL=off  	 */  #if CONFIG_SH_MAGIC_PANEL_R2_VERSION == 2 -	ctrl_outb(0x30, PORT_PMDR); +	__raw_writeb(0x30, PORT_PMDR);  #elif CONFIG_SH_MAGIC_PANEL_R2_VERSION == 3 -	ctrl_outb(0xF0, PORT_PMDR); +	__raw_writeb(0xF0, PORT_PMDR);  #else  #error Unknown revision of PLATFORM_MP_R2  #endif @@ -167,8 +167,8 @@ static void __init setup_port_multiplexing(void)  	 * P4 GPO(nu);	       P3 IRQ3(LAN_IRQ);  P2 IRQ2(CAN3_IRQ);  	 * P1 IRQ1(CAN2_IRQ);  P0 IRQ0(CAN1_IRQ)  	 */ -	ctrl_outw(0x0100, PORT_PPCR);	/* 00 00 00 01 00 00 00 00 */ -	ctrl_outb(0x10, PORT_PPDR); +	__raw_writew(0x0100, PORT_PPCR);	/* 00 00 00 01 00 00 00 00 */ +	__raw_writeb(0x10, PORT_PPDR);  	/* R7 A25;	     R6 A24;	     R5 A23;		  R4 A22;  	 * R3 A21;	     R2 A20;	     R1 A19;		  R0 A0; @@ -185,22 +185,22 @@ static void __init setup_port_multiplexing(void)  	/* S7 (x);		S6 (x);        S5 (x);	     S4 GPO(EEPROM_CS2);  	 * S3 GPO(EEPROM_CS1);  S2 SIOF0_TXD;  S1 SIOF0_RXD; S0 SIOF0_SCK;  	 */ -	ctrl_outw(0x0140, PORT_PSCR);	/* 00 00 00 01 01 00 00 00 */ +	__raw_writew(0x0140, PORT_PSCR);	/* 00 00 00 01 01 00 00 00 */  	/* T7 (x);	   T6 (x);	  T5 (x);	  T4 COM1_CTS;  	 * T3 COM1_RTS;	   T2 COM1_TXD;	  T1 COM1_RXD;	  T0 GPO(WDOG)  	 */ -	ctrl_outw(0x0001, PORT_PTCR);	/* 00 00 00 00 00 00 00 01 */ +	__raw_writew(0x0001, PORT_PTCR);	/* 00 00 00 00 00 00 00 01 */  	/* U7 (x);	     U6 (x);	   U5 (x);	  U4 GPI+(/AC_FAULT);  	 * U3 GPO(TOUCH_CS); U2 TOUCH_TXD; U1 TOUCH_RXD;  U0 TOUCH_SCK;  	 */ -	ctrl_outw(0x0240, PORT_PUCR);	/* 00 00 00 10 01 00 00 00 */ +	__raw_writew(0x0240, PORT_PUCR);	/* 00 00 00 10 01 00 00 00 */  	/* V7 (x);	  V6 (x);	V5 (x);		  V4 GPO(MID2);  	 * V3 GPO(MID1);  V2 CARD_TxD;	V1 CARD_RxD;	  V0 GPI+(/BAT_FAULT);  	 */ -	ctrl_outw(0x0142, PORT_PVCR);	/* 00 00 00 01 01 00 00 10 */ +	__raw_writew(0x0142, PORT_PVCR);	/* 00 00 00 01 01 00 00 10 */  }  static void __init mpr2_setup(char **cmdline_p) @@ -209,24 +209,24 @@ static void __init mpr2_setup(char **cmdline_p)  	 * /PCC_CD1, /PCC_CD2,  PCC_BVD1, PCC_BVD2,  	 * /IOIS16,  IRQ4,	IRQ5,	  USB1d_SUSPEND  	 */ -	ctrl_outw(0xAABC, PORT_PSELA); +	__raw_writew(0xAABC, PORT_PSELA);  	/* set Pin Select Register B:  	 * /SCIF0_RTS, /SCIF0_CTS, LCD_VCPWC,  	 * LCD_VEPWC,  IIC_SDA,    IIC_SCL, Reserved  	 */ -	ctrl_outw(0x3C00, PORT_PSELB); +	__raw_writew(0x3C00, PORT_PSELB);  	/* set Pin Select Register C:  	 * SIOF1_SCK, SIOF1_RxD, SCIF1_RxD, SCIF1_TxD, Reserved  	 */ -	ctrl_outw(0x0000, PORT_PSELC); +	__raw_writew(0x0000, PORT_PSELC);  	/* set Pin Select Register D: Reserved, SIOF1_TxD, Reserved, SIOF1_MCLK,  	 * Reserved, SIOF1_SYNC, Reserved, SCIF1_SCK, Reserved  	 */ -	ctrl_outw(0x0000, PORT_PSELD); +	__raw_writew(0x0000, PORT_PSELD);  	/* set USB TxRx Control: Reserved, DRV, Reserved, USB_TRANS, USB_SEL */ -	ctrl_outw(0x0101, PORT_UTRCTL); +	__raw_writew(0x0101, PORT_UTRCTL);  	/* set USB Clock Control: USSCS, USSTB, Reserved (HighByte always A5) */ -	ctrl_outw(0xA5C0, PORT_UCLKCR_W); +	__raw_writew(0xA5C0, PORT_UCLKCR_W);  	setup_chip_select(); diff --git a/arch/sh/boards/board-polaris.c b/arch/sh/boards/board-polaris.c index 62607eb5100..594866356c2 100644 --- a/arch/sh/boards/board-polaris.c +++ b/arch/sh/boards/board-polaris.c @@ -59,15 +59,12 @@ static unsigned char heartbeat_bit_pos[] = { 0, 1, 2, 3 };  static struct heartbeat_data heartbeat_data = {  	.bit_pos	= heartbeat_bit_pos,  	.nr_bits	= ARRAY_SIZE(heartbeat_bit_pos), -	.regsize	= 8,  }; -static struct resource heartbeat_resources[] = { -	[0] = { -		.start	= PORT_PCDR, -		.end	= PORT_PCDR, -		.flags	= IORESOURCE_MEM, -	}, +static struct resource heartbeat_resource = { +	.start	= PORT_PCDR, +	.end	= PORT_PCDR, +	.flags	= IORESOURCE_MEM | IORESOURCE_MEM_8BIT,  };  static struct platform_device heartbeat_device = { @@ -76,8 +73,8 @@ static struct platform_device heartbeat_device = {  	.dev	= {  		.platform_data	= &heartbeat_data,  	}, -	.num_resources	= ARRAY_SIZE(heartbeat_resources), -	.resource	= heartbeat_resources, +	.num_resources	= 1, +	.resource	= &heartbeat_resource,  };  static struct platform_device *polaris_devices[] __initdata = { @@ -92,15 +89,15 @@ static int __init polaris_initialise(void)  	printk(KERN_INFO "Configuring Polaris external bus\n");  	/* Configure area 5 with 2 wait states */ -	wcr = ctrl_inw(WCR2); +	wcr = __raw_readw(WCR2);  	wcr &= (~AREA5_WAIT_CTRL);  	wcr |= (WAIT_STATES_10 << 10); -	ctrl_outw(wcr, WCR2); +	__raw_writew(wcr, WCR2);  	/* Configure area 5 for 32-bit access */ -	bcr_mask = ctrl_inw(BCR2); +	bcr_mask = __raw_readw(BCR2);  	bcr_mask |= 1 << 10; -	ctrl_outw(bcr_mask, BCR2); +	__raw_writew(bcr_mask, BCR2);  	return platform_add_devices(polaris_devices,  				    ARRAY_SIZE(polaris_devices)); @@ -131,13 +128,13 @@ static struct ipr_desc ipr_irq_desc = {  static void __init init_polaris_irq(void)  {  	/* Disable all interrupts */ -	ctrl_outw(0, BCR_ILCRA); -	ctrl_outw(0, BCR_ILCRB); -	ctrl_outw(0, BCR_ILCRC); -	ctrl_outw(0, BCR_ILCRD); -	ctrl_outw(0, BCR_ILCRE); -	ctrl_outw(0, BCR_ILCRF); -	ctrl_outw(0, BCR_ILCRG); +	__raw_writew(0, BCR_ILCRA); +	__raw_writew(0, BCR_ILCRB); +	__raw_writew(0, BCR_ILCRC); +	__raw_writew(0, BCR_ILCRD); +	__raw_writew(0, BCR_ILCRE); +	__raw_writew(0, BCR_ILCRF); +	__raw_writew(0, BCR_ILCRG);  	register_ipr_controller(&ipr_irq_desc);  } diff --git a/arch/sh/boards/board-sh7785lcr.c b/arch/sh/boards/board-sh7785lcr.c index e5a8a2fde39..fe7e686c94a 100644 --- a/arch/sh/boards/board-sh7785lcr.c +++ b/arch/sh/boards/board-sh7785lcr.c @@ -21,6 +21,7 @@  #include <linux/i2c-algo-pca.h>  #include <linux/usb/r8a66597.h>  #include <linux/irq.h> +#include <linux/io.h>  #include <linux/clk.h>  #include <linux/errno.h>  #include <mach/sh7785lcr.h> @@ -32,26 +33,17 @@   * NOTE: This board has 2 physical memory maps.   *	 Please look at include/asm-sh/sh7785lcr.h or hardware manual.   */ -static struct resource heartbeat_resources[] = { -	[0] = { -		.start	= PLD_LEDCR, -		.end	= PLD_LEDCR, -		.flags	= IORESOURCE_MEM, -	}, -}; - -static struct heartbeat_data heartbeat_data = { -	.regsize = 8, +static struct resource heartbeat_resource = { +	.start	= PLD_LEDCR, +	.end	= PLD_LEDCR, +	.flags	= IORESOURCE_MEM | IORESOURCE_MEM_8BIT,  };  static struct platform_device heartbeat_device = {  	.name		= "heartbeat",  	.id		= -1, -	.dev	= { -		.platform_data	= &heartbeat_data, -	}, -	.num_resources	= ARRAY_SIZE(heartbeat_resources), -	.resource	= heartbeat_resources, +	.num_resources	= 1, +	.resource	= &heartbeat_resource,  };  static struct mtd_partition nor_flash_partitions[] = { @@ -341,8 +333,14 @@ static void __init sh7785lcr_setup(char **cmdline_p)  	pm_power_off = sh7785lcr_power_off;  	/* sm501 DRAM configuration */ -	sm501_reg = (void __iomem *)0xb3e00000 + SM501_DRAM_CONTROL; -	writel(0x000307c2, sm501_reg); +	sm501_reg = ioremap_nocache(SM107_REG_ADDR, SM501_DRAM_CONTROL); +	if (!sm501_reg) { +		printk(KERN_ERR "%s: ioremap error.\n", __func__); +		return; +	} + +	writel(0x000307c2, sm501_reg + SM501_DRAM_CONTROL); +	iounmap(sm501_reg);  }  /* Return the board specific boot mode pin configuration */ diff --git a/arch/sh/boards/board-shmin.c b/arch/sh/boards/board-shmin.c index b1dcbbc8918..325bed53b87 100644 --- a/arch/sh/boards/board-shmin.c +++ b/arch/sh/boards/board-shmin.c @@ -17,8 +17,8 @@  static void __init init_shmin_irq(void)  { -	ctrl_outw(0x2a00, PFC_PHCR);	// IRQ0-3=IRQ -	ctrl_outw(0x0aaa, INTC_ICR1);	// IRQ0-3=IRQ-mode,Low-active. +	__raw_writew(0x2a00, PFC_PHCR);	// IRQ0-3=IRQ +	__raw_writew(0x0aaa, INTC_ICR1);	// IRQ0-3=IRQ-mode,Low-active.  	plat_irq_setup_pins(IRQ_MODE_IRQ);  } diff --git a/arch/sh/boards/mach-titan/setup.c b/arch/sh/boards/board-titan.c index 81e7e0f0386..94c36c7bc0b 100644 --- a/arch/sh/boards/mach-titan/setup.c +++ b/arch/sh/boards/board-titan.c @@ -19,26 +19,6 @@ static void __init init_titan_irq(void)  }  static struct sh_machine_vector mv_titan __initmv = { -	.mv_name =	"Titan", - -	.mv_inb =	titan_inb, -	.mv_inw =	titan_inw, -	.mv_inl =	titan_inl, -	.mv_outb =	titan_outb, -	.mv_outw =	titan_outw, -	.mv_outl =	titan_outl, - -	.mv_inb_p =	titan_inb_p, -	.mv_inw_p =	titan_inw, -	.mv_inl_p =	titan_inl, -	.mv_outb_p =	titan_outb_p, -	.mv_outw_p =	titan_outw, -	.mv_outl_p =	titan_outl, - -	.mv_insl =	titan_insl, -	.mv_outsl =	titan_outsl, - -	.mv_ioport_map = titan_ioport_map, - -	.mv_init_irq =	init_titan_irq, +	.mv_name	= "Titan", +	.mv_init_irq	= init_titan_irq,  }; diff --git a/arch/sh/boards/board-urquell.c b/arch/sh/boards/board-urquell.c index 36b8bac9b12..d81c609decc 100644 --- a/arch/sh/boards/board-urquell.c +++ b/arch/sh/boards/board-urquell.c @@ -2,7 +2,7 @@   * Renesas Technology Corp. SH7786 Urquell Support.   *   * Copyright (C) 2008  Kuninori Morimoto <morimoto.kuninori@renesas.com> - * Copyright (C) 2009  Paul Mundt + * Copyright (C) 2009, 2010  Paul Mundt   *   * Based on board-sh7785lcr.c   * Copyright (C) 2008  Yoshihiro Shimoda @@ -19,10 +19,12 @@  #include <linux/delay.h>  #include <linux/gpio.h>  #include <linux/irq.h> +#include <linux/clk.h>  #include <mach/urquell.h>  #include <cpu/sh7786.h>  #include <asm/heartbeat.h>  #include <asm/sizes.h> +#include <asm/smp-ops.h>  /*   * bit  1234 5678 @@ -50,26 +52,17 @@   */  /* HeartBeat */ -static struct resource heartbeat_resources[] = { -	[0] = { -		.start	= BOARDREG(SLEDR), -		.end	= BOARDREG(SLEDR), -		.flags	= IORESOURCE_MEM, -	}, -}; - -static struct heartbeat_data heartbeat_data = { -	.regsize = 16, +static struct resource heartbeat_resource = { +	.start	= BOARDREG(SLEDR), +	.end	= BOARDREG(SLEDR), +	.flags	= IORESOURCE_MEM | IORESOURCE_MEM_16BIT,  };  static struct platform_device heartbeat_device = {  	.name		= "heartbeat",  	.id		= -1, -	.dev	= { -		.platform_data	= &heartbeat_data, -	}, -	.num_resources	= ARRAY_SIZE(heartbeat_resources), -	.resource	= heartbeat_resources, +	.num_resources	= 1, +	.resource	= &heartbeat_resource,  };  /* LAN91C111 */ @@ -184,12 +177,35 @@ static int urquell_mode_pins(void)  	return __raw_readw(UBOARDREG(MDSWMR));  } +static int urquell_clk_init(void) +{ +	struct clk *clk; +	int ret; + +	/* +	 * Only handle the EXTAL case, anyone interfacing a crystal +	 * resonator will need to provide their own input clock. +	 */ +	if (test_mode_pin(MODE_PIN9)) +		return -EINVAL; + +	clk = clk_get(NULL, "extal"); +	if (!clk || IS_ERR(clk)) +		return PTR_ERR(clk); +	ret = clk_set_rate(clk, 33333333); +	clk_put(clk); + +	return ret; +} +  /* Initialize the board */  static void __init urquell_setup(char **cmdline_p)  {  	printk(KERN_INFO "Renesas Technology Corp. Urquell support.\n");  	pm_power_off = urquell_power_off; + +	register_smp_ops(&shx3_smp_ops);  }  /* @@ -200,4 +216,5 @@ static struct sh_machine_vector mv_urquell __initmv = {  	.mv_setup	= urquell_setup,  	.mv_init_irq	= urquell_init_irq,  	.mv_mode_pins	= urquell_mode_pins, +	.mv_clk_init	= urquell_clk_init,  }; diff --git a/arch/sh/boards/mach-ap325rxa/setup.c b/arch/sh/boards/mach-ap325rxa/setup.c index 1f5fa5c44f6..57e37e28420 100644 --- a/arch/sh/boards/mach-ap325rxa/setup.c +++ b/arch/sh/boards/mach-ap325rxa/setup.c @@ -159,21 +159,21 @@ static void ap320_wvga_power_on(void *board_data)  	msleep(100);  	/* ASD AP-320/325 LCD ON */ -	ctrl_outw(FPGA_LCDREG_VAL, FPGA_LCDREG); +	__raw_writew(FPGA_LCDREG_VAL, FPGA_LCDREG);  	/* backlight */  	gpio_set_value(GPIO_PTS3, 0); -	ctrl_outw(0x100, FPGA_BKLREG); +	__raw_writew(0x100, FPGA_BKLREG);  }  static void ap320_wvga_power_off(void *board_data)  {  	/* backlight */ -	ctrl_outw(0, FPGA_BKLREG); +	__raw_writew(0, FPGA_BKLREG);  	gpio_set_value(GPIO_PTS3, 1);  	/* ASD AP-320/325 LCD OFF */ -	ctrl_outw(0, FPGA_LCDREG); +	__raw_writew(0, FPGA_LCDREG);  }  static struct sh_mobile_lcdc_info lcdc_info = { @@ -420,7 +420,7 @@ static struct resource sdhi0_cn3_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 101, +		.start	= 100,  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -443,7 +443,7 @@ static struct resource sdhi1_cn7_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 24, +		.start	= 23,  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -471,8 +471,8 @@ static struct i2c_board_info ap325rxa_i2c_camera[] = {  };  static struct ov772x_camera_info ov7725_info = { -	.buswidth	= SOCAM_DATAWIDTH_8, -	.flags		= OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP, +	.flags		= OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP | \ +			  OV772X_FLAG_8BIT,  	.edgectrl	= OV772X_AUTO_EDGECTRL(0xf, 0),  }; @@ -595,7 +595,7 @@ static int __init ap325rxa_devices_setup(void)  	gpio_request(GPIO_PTZ4, NULL);  	gpio_direction_output(GPIO_PTZ4, 0); /* SADDR */ -	ctrl_outw(ctrl_inw(PORT_MSELCRB) & ~0x0001, PORT_MSELCRB); +	__raw_writew(__raw_readw(PORT_MSELCRB) & ~0x0001, PORT_MSELCRB);  	/* FLCTL */  	gpio_request(GPIO_FN_FCE, NULL); @@ -613,9 +613,9 @@ static int __init ap325rxa_devices_setup(void)  	gpio_request(GPIO_FN_FWE, NULL);  	gpio_request(GPIO_FN_FRB, NULL); -	ctrl_outw(0, PORT_HIZCRC); -	ctrl_outw(0xFFFF, PORT_DRVCRA); -	ctrl_outw(0xFFFF, PORT_DRVCRB); +	__raw_writew(0, PORT_HIZCRC); +	__raw_writew(0xFFFF, PORT_DRVCRA); +	__raw_writew(0xFFFF, PORT_DRVCRB);  	platform_resource_setup_memory(&ceu_device, "ceu", 4 << 20); diff --git a/arch/sh/boards/mach-cayman/irq.c b/arch/sh/boards/mach-cayman/irq.c index 33f77085631..1394b078db3 100644 --- a/arch/sh/boards/mach-cayman/irq.c +++ b/arch/sh/boards/mach-cayman/irq.c @@ -66,9 +66,9 @@ static void enable_cayman_irq(unsigned int irq)  	reg = EPLD_MASK_BASE + ((irq / 8) << 2);  	bit = 1<<(irq % 8);  	local_irq_save(flags); -	mask = ctrl_inl(reg); +	mask = __raw_readl(reg);  	mask |= bit; -	ctrl_outl(mask, reg); +	__raw_writel(mask, reg);  	local_irq_restore(flags);  } @@ -83,9 +83,9 @@ void disable_cayman_irq(unsigned int irq)  	reg = EPLD_MASK_BASE + ((irq / 8) << 2);  	bit = 1<<(irq % 8);  	local_irq_save(flags); -	mask = ctrl_inl(reg); +	mask = __raw_readl(reg);  	mask &= ~bit; -	ctrl_outl(mask, reg); +	__raw_writel(mask, reg);  	local_irq_restore(flags);  } @@ -109,8 +109,8 @@ int cayman_irq_demux(int evt)  		unsigned long status;  		int i; -		status = ctrl_inl(EPLD_STATUS_BASE) & -			 ctrl_inl(EPLD_MASK_BASE) & 0xff; +		status = __raw_readl(EPLD_STATUS_BASE) & +			 __raw_readl(EPLD_MASK_BASE) & 0xff;  		if (status == 0) {  			irq = -1;  		} else { @@ -126,8 +126,8 @@ int cayman_irq_demux(int evt)  		unsigned long status;  		int i; -		status = ctrl_inl(EPLD_STATUS_BASE + 3 * sizeof(u32)) & -			 ctrl_inl(EPLD_MASK_BASE + 3 * sizeof(u32)) & 0xff; +		status = __raw_readl(EPLD_STATUS_BASE + 3 * sizeof(u32)) & +			 __raw_readl(EPLD_MASK_BASE + 3 * sizeof(u32)) & 0xff;  		if (status == 0) {  			irq = -1;  		} else { diff --git a/arch/sh/boards/mach-dreamcast/irq.c b/arch/sh/boards/mach-dreamcast/irq.c index f55fc8e795e..d932667410a 100644 --- a/arch/sh/boards/mach-dreamcast/irq.c +++ b/arch/sh/boards/mach-dreamcast/irq.c @@ -135,3 +135,30 @@ int systemasic_irq_demux(int irq)  	/* Not reached */  	return irq;  } + +void systemasic_irq_init(void) +{ +	int i, nid = cpu_to_node(boot_cpu_data); + +	/* Assign all virtual IRQs to the System ASIC int. handler */ +	for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++) { +		unsigned int irq; + +		irq = create_irq_nr(i, nid); +		if (unlikely(irq == 0)) { +			pr_err("%s: failed hooking irq %d for systemasic\n", +			       __func__, i); +			return; +		} + +		if (unlikely(irq != i)) { +			pr_err("%s: got irq %d but wanted %d, bailing.\n", +			       __func__, irq, i); +			destroy_irq(irq); +			return; +		} + +		set_irq_chip_and_handler(i, &systemasic_int, +					 handle_level_irq); +	} +} diff --git a/arch/sh/boards/mach-dreamcast/rtc.c b/arch/sh/boards/mach-dreamcast/rtc.c index a7433685798..061d65714fc 100644 --- a/arch/sh/boards/mach-dreamcast/rtc.c +++ b/arch/sh/boards/mach-dreamcast/rtc.c @@ -35,11 +35,11 @@ static void aica_rtc_gettimeofday(struct timespec *ts)  	unsigned long val1, val2;  	do { -		val1 = ((ctrl_inl(AICA_RTC_SECS_H) & 0xffff) << 16) | -			(ctrl_inl(AICA_RTC_SECS_L) & 0xffff); +		val1 = ((__raw_readl(AICA_RTC_SECS_H) & 0xffff) << 16) | +			(__raw_readl(AICA_RTC_SECS_L) & 0xffff); -		val2 = ((ctrl_inl(AICA_RTC_SECS_H) & 0xffff) << 16) | -			(ctrl_inl(AICA_RTC_SECS_L) & 0xffff); +		val2 = ((__raw_readl(AICA_RTC_SECS_H) & 0xffff) << 16) | +			(__raw_readl(AICA_RTC_SECS_L) & 0xffff);  	} while (val1 != val2);  	ts->tv_sec = val1 - TWENTY_YEARS; @@ -60,14 +60,14 @@ static int aica_rtc_settimeofday(const time_t secs)  	unsigned long adj = secs + TWENTY_YEARS;  	do { -		ctrl_outl((adj & 0xffff0000) >> 16, AICA_RTC_SECS_H); -		ctrl_outl((adj & 0xffff), AICA_RTC_SECS_L); +		__raw_writel((adj & 0xffff0000) >> 16, AICA_RTC_SECS_H); +		__raw_writel((adj & 0xffff), AICA_RTC_SECS_L); -		val1 = ((ctrl_inl(AICA_RTC_SECS_H) & 0xffff) << 16) | -			(ctrl_inl(AICA_RTC_SECS_L) & 0xffff); +		val1 = ((__raw_readl(AICA_RTC_SECS_H) & 0xffff) << 16) | +			(__raw_readl(AICA_RTC_SECS_L) & 0xffff); -		val2 = ((ctrl_inl(AICA_RTC_SECS_H) & 0xffff) << 16) | -			(ctrl_inl(AICA_RTC_SECS_L) & 0xffff); +		val2 = ((__raw_readl(AICA_RTC_SECS_H) & 0xffff) << 16) | +			(__raw_readl(AICA_RTC_SECS_L) & 0xffff);  	} while (val1 != val2);  	return 0; diff --git a/arch/sh/boards/mach-dreamcast/setup.c b/arch/sh/boards/mach-dreamcast/setup.c index a4b7402d617..ad1a4db72e0 100644 --- a/arch/sh/boards/mach-dreamcast/setup.c +++ b/arch/sh/boards/mach-dreamcast/setup.c @@ -28,25 +28,8 @@  #include <asm/machvec.h>  #include <mach/sysasic.h> -extern struct irq_chip systemasic_int; -extern void aica_time_init(void); -extern int systemasic_irq_demux(int); -  static void __init dreamcast_setup(char **cmdline_p)  { -	int i; - -	/* Mask all hardware events */ -	/* XXX */ - -	/* Acknowledge any previous events */ -	/* XXX */ - -	/* Assign all virtual IRQs to the System ASIC int. handler */ -	for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++) -		set_irq_chip_and_handler(i, &systemasic_int, -					 handle_level_irq); -  	board_time_init = aica_time_init;  } @@ -54,4 +37,5 @@ static struct sh_machine_vector mv_dreamcast __initmv = {  	.mv_name		= "Sega Dreamcast",  	.mv_setup		= dreamcast_setup,  	.mv_irq_demux		= systemasic_irq_demux, +	.mv_init_irq		= systemasic_irq_init,  }; diff --git a/arch/sh/boards/mach-ecovec24/sdram.S b/arch/sh/boards/mach-ecovec24/sdram.S index 83344004440..3963c6f23d5 100644 --- a/arch/sh/boards/mach-ecovec24/sdram.S +++ b/arch/sh/boards/mach-ecovec24/sdram.S @@ -37,6 +37,10 @@ ENTRY(ecovec24_sdram_enter_end)  	.balign 4  ENTRY(ecovec24_sdram_leave_start) +	mov.l	@(SH_SLEEP_MODE, r5), r0 +	tst	#SUSP_SH_RSTANDBY, r0 +	bf	resume_rstandby +  	/* DBSC: put memory in auto-refresh mode */  	ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ @@ -49,4 +53,59 @@ ENTRY(ecovec24_sdram_leave_start)  	rts  	 nop +resume_rstandby: + +	/* DBSC: re-initialize and put in auto-refresh */ + +	ED 0xFD000108, 0x00000181 /* DBPDCNT0 */ +	ED 0xFD000020, 0x015B0002 /* DBCONF */ +	ED 0xFD000030, 0x03071502 /* DBTR0 */ +	ED 0xFD000034, 0x02020102 /* DBTR1 */ +	ED 0xFD000038, 0x01090405 /* DBTR2 */ +	ED 0xFD00003C, 0x00000002 /* DBTR3 */ +	ED 0xFD000008, 0x00000005 /* DBKIND */ +	ED 0xFD000040, 0x00000001 /* DBRFPDN0 */ +	ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ +	ED 0xFD000018, 0x00000001 /* DBCKECNT */ + +	mov	#100,r0 +WAIT_400NS: +	dt	r0 +	bf	WAIT_400NS + +	ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ +	ED 0xFD000060, 0x00020000 /* DBMRCNT (EMR2) */ +	ED 0xFD000060, 0x00030000 /* DBMRCNT (EMR3) */ +	ED 0xFD000060, 0x00010004 /* DBMRCNT (EMR) */ +	ED 0xFD000060, 0x00000532 /* DBMRCNT (MRS) */ +	ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ +	ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ +	ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ +	ED 0xFD000060, 0x00000432 /* DBMRCNT (MRS) */ +	ED 0xFD000060, 0x000103c0 /* DBMRCNT (EMR) */ +	ED 0xFD000060, 0x00010040 /* DBMRCNT (EMR) */ + +	mov	#100,r0 +WAIT_400NS_2: +	dt	r0 +	bf	WAIT_400NS_2 + +	ED 0xFD000010, 0x00000001 /* DBEN */ +	ED 0xFD000044, 0x0000050f /* DBRFPDN1 */ +	ED 0xFD000048, 0x236800e6 /* DBRFPDN2 */ + +	mov.l	DUMMY,r0 +	mov.l	@r0, r1 /* force single dummy read */ + +	ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ +	ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ +	ED 0xFD000108, 0x00000080 /* DBPDCNT0 */ +	ED 0xFD000040, 0x00010000 /* DBRFPDN0 */ + +	rts +	 nop + +	.balign 4 +DUMMY:	.long	0xac400000 +  ENTRY(ecovec24_sdram_leave_end) diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index 5c246289b4f..49714258732 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c @@ -11,6 +11,7 @@  #include <linux/init.h>  #include <linux/device.h>  #include <linux/platform_device.h> +#include <linux/mfd/sh_mobile_sdhi.h>  #include <linux/mtd/physmap.h>  #include <linux/gpio.h>  #include <linux/interrupt.h> @@ -64,18 +65,16 @@  /* Heartbeat */  static unsigned char led_pos[] = { 0, 1, 2, 3 }; +  static struct heartbeat_data heartbeat_data = { -	.regsize = 8,  	.nr_bits = 4,  	.bit_pos = led_pos,  }; -static struct resource heartbeat_resources[] = { -	[0] = { -		.start  = 0xA405012C, /* PTG */ -		.end    = 0xA405012E - 1, -		.flags  = IORESOURCE_MEM, -	}, +static struct resource heartbeat_resource = { +	.start  = 0xA405012C, /* PTG */ +	.end    = 0xA405012E - 1, +	.flags  = IORESOURCE_MEM | IORESOURCE_MEM_8BIT,  };  static struct platform_device heartbeat_device = { @@ -84,8 +83,8 @@ static struct platform_device heartbeat_device = {  	.dev = {  		.platform_data = &heartbeat_data,  	}, -	.num_resources  = ARRAY_SIZE(heartbeat_resources), -	.resource       = heartbeat_resources, +	.num_resources  = 1, +	.resource       = &heartbeat_resource,  };  /* MTD */ @@ -444,7 +443,9 @@ static void sdhi0_set_pwr(struct platform_device *pdev, int state)  }  static struct sh_mobile_sdhi_info sdhi0_info = { -	.set_pwr = sdhi0_set_pwr, +	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX, +	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX, +	.set_pwr	= sdhi0_set_pwr,  };  static struct resource sdhi0_resources[] = { @@ -455,7 +456,7 @@ static struct resource sdhi0_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 101, +		.start  = 100,  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -480,7 +481,9 @@ static void sdhi1_set_pwr(struct platform_device *pdev, int state)  }  static struct sh_mobile_sdhi_info sdhi1_info = { -	.set_pwr = sdhi1_set_pwr, +	.dma_slave_tx	= SHDMA_SLAVE_SDHI1_TX, +	.dma_slave_rx	= SHDMA_SLAVE_SDHI1_RX, +	.set_pwr	= sdhi1_set_pwr,  };  static struct resource sdhi1_resources[] = { @@ -491,7 +494,7 @@ static struct resource sdhi1_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 24, +		.start  = 23,  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -698,13 +701,13 @@ static struct platform_device camera_devices[] = {  #define FCLKBCR		0xa415000c  static void fsimck_init(struct clk *clk)  { -	u32 status = ctrl_inl(clk->enable_reg); +	u32 status = __raw_readl(clk->enable_reg);  	/* use external clock */  	status &= ~0x000000ff;  	status |= 0x00000080; -	ctrl_outl(status, clk->enable_reg); +	__raw_writel(status, clk->enable_reg);  }  static struct clk_ops fsimck_clk_ops = { @@ -712,8 +715,6 @@ static struct clk_ops fsimck_clk_ops = {  };  static struct clk fsimckb_clk = { -	.name		= "fsimckb_clk", -	.id		= -1,  	.ops		= &fsimck_clk_ops,  	.enable_reg	= (void __iomem *)FCLKBCR,  	.rate		= 0, /* unknown */ @@ -753,6 +754,71 @@ static struct platform_device fsi_device = {  	},  }; +/* IrDA */ +static struct resource irda_resources[] = { +	[0] = { +		.name	= "IrDA", +		.start  = 0xA45D0000, +		.end    = 0xA45D0049, +		.flags  = IORESOURCE_MEM, +	}, +	[1] = { +		.start  = 20, +		.flags  = IORESOURCE_IRQ, +	}, +}; + +static struct platform_device irda_device = { +	.name           = "sh_sir", +	.num_resources  = ARRAY_SIZE(irda_resources), +	.resource       = irda_resources, +}; + +#include <media/ak881x.h> +#include <media/sh_vou.h> + +struct ak881x_pdata ak881x_pdata = { +	.flags = AK881X_IF_MODE_SLAVE, +}; + +static struct i2c_board_info ak8813 = { +	I2C_BOARD_INFO("ak8813", 0x20), +	.platform_data = &ak881x_pdata, +}; + +struct sh_vou_pdata sh_vou_pdata = { +	.bus_fmt	= SH_VOU_BUS_8BIT, +	.flags		= SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, +	.board_info	= &ak8813, +	.i2c_adap	= 0, +	.module_name	= "ak881x", +}; + +static struct resource sh_vou_resources[] = { +	[0] = { +		.start  = 0xfe960000, +		.end    = 0xfe962043, +		.flags  = IORESOURCE_MEM, +	}, +	[1] = { +		.start  = 55, +		.flags  = IORESOURCE_IRQ, +	}, +}; + +static struct platform_device vou_device = { +	.name           = "sh-vou", +	.id		= -1, +	.num_resources  = ARRAY_SIZE(sh_vou_resources), +	.resource       = sh_vou_resources, +	.dev		= { +		.platform_data	= &sh_vou_pdata, +	}, +	.archdata	= { +		.hwblk_id	= HWBLK_VOU, +	}, +}; +  static struct platform_device *ecovec_devices[] __initdata = {  	&heartbeat_device,  	&nor_flash_device, @@ -773,8 +839,11 @@ static struct platform_device *ecovec_devices[] __initdata = {  	&camera_devices[1],  	&camera_devices[2],  	&fsi_device, +	&irda_device, +	&vou_device,  }; +#ifdef CONFIG_I2C  #define EEPROM_ADDR 0x50  static u8 mac_read(struct i2c_adapter *a, u8 command)  { @@ -816,7 +885,15 @@ static void __init sh_eth_init(struct sh_eth_plat_data *pd)  		pd->mac_addr[i] = mac_read(a, 0x10 + i);  		msleep(10);  	} + +	i2c_put_adapter(a); +} +#else +static void __init sh_eth_init(struct sh_eth_plat_data *pd) +{ +	pr_err("unable to read sh_eth MAC address\n");  } +#endif  #define PORT_HIZA 0xA4050158  #define IODRIVEA  0xA405018A @@ -831,7 +908,8 @@ static int __init arch_setup(void)  	struct clk *clk;  	/* register board specific self-refresh code */ -	sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF, +	sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | +					SUSP_SH_RSTANDBY,  					&ecovec24_sdram_enter_start,  					&ecovec24_sdram_enter_end,  					&ecovec24_sdram_leave_start, @@ -855,7 +933,7 @@ static int __init arch_setup(void)  	gpio_direction_output(GPIO_PTG1, 0);  	gpio_direction_output(GPIO_PTG2, 0);  	gpio_direction_output(GPIO_PTG3, 0); -	ctrl_outw((ctrl_inw(PORT_HIZA) & ~(0x1 << 1)) , PORT_HIZA); +	__raw_writew((__raw_readw(PORT_HIZA) & ~(0x1 << 1)) , PORT_HIZA);  	/* enable SH-Eth */  	gpio_request(GPIO_PTA1, NULL); @@ -875,16 +953,16 @@ static int __init arch_setup(void)  	gpio_request(GPIO_FN_LNKSTA,       NULL);  	/* enable USB */ -	ctrl_outw(0x0000, 0xA4D80000); -	ctrl_outw(0x0000, 0xA4D90000); +	__raw_writew(0x0000, 0xA4D80000); +	__raw_writew(0x0000, 0xA4D90000);  	gpio_request(GPIO_PTB3,  NULL);  	gpio_request(GPIO_PTB4,  NULL);  	gpio_request(GPIO_PTB5,  NULL);  	gpio_direction_input(GPIO_PTB3);  	gpio_direction_output(GPIO_PTB4, 0);  	gpio_direction_output(GPIO_PTB5, 0); -	ctrl_outw(0x0600, 0xa40501d4); -	ctrl_outw(0x0600, 0xa4050192); +	__raw_writew(0x0600, 0xa40501d4); +	__raw_writew(0x0600, 0xa4050192);  	if (gpio_get_value(GPIO_PTB3)) {  		printk(KERN_INFO "USB1 function is selected\n"); @@ -925,7 +1003,7 @@ static int __init arch_setup(void)  	gpio_request(GPIO_FN_LCDVSYN,  NULL);  	gpio_request(GPIO_FN_LCDDON,   NULL);  	gpio_request(GPIO_FN_LCDLCLK,  NULL); -	ctrl_outw((ctrl_inw(PORT_HIZA) & ~0x0001), PORT_HIZA); +	__raw_writew((__raw_readw(PORT_HIZA) & ~0x0001), PORT_HIZA);  	gpio_request(GPIO_PTE6, NULL);  	gpio_request(GPIO_PTU1, NULL); @@ -937,7 +1015,7 @@ static int __init arch_setup(void)  	gpio_direction_output(GPIO_PTA2, 0);  	/* I/O buffer drive ability is high */ -	ctrl_outw((ctrl_inw(IODRIVEA) & ~0x00c0) | 0x0080 , IODRIVEA); +	__raw_writew((__raw_readw(IODRIVEA) & ~0x00c0) | 0x0080 , IODRIVEA);  	if (gpio_get_value(GPIO_PTE6)) {  		/* DVI */ @@ -1069,7 +1147,7 @@ static int __init arch_setup(void)  	gpio_direction_output(GPIO_PTB7, 0);  	/* I/O buffer drive ability is high for SDHI1 */ -	ctrl_outw((ctrl_inw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA); +	__raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA);  #else  	/* enable MSIOF0 on CN11 (needs DS2.4 set to OFF) */  	gpio_request(GPIO_FN_MSIOF0_TXD, NULL); @@ -1107,13 +1185,22 @@ static int __init arch_setup(void)  	gpio_request(GPIO_FN_FSIOBLRCK,  NULL);  	gpio_request(GPIO_FN_CLKAUDIOBO, NULL); +	/* set SPU2 clock to 83.4 MHz */ +	clk = clk_get(NULL, "spu_clk"); +	if (clk) { +		clk_set_rate(clk, clk_round_rate(clk, 83333333)); +		clk_put(clk); +	} +  	/* change parent of FSI B */  	clk = clk_get(NULL, "fsib_clk"); -	clk_register(&fsimckb_clk); -	clk_set_parent(clk, &fsimckb_clk); -	clk_set_rate(clk, 11000); -	clk_set_rate(&fsimckb_clk, 11000); -	clk_put(clk); +	if (clk) { +		clk_register(&fsimckb_clk); +		clk_set_parent(clk, &fsimckb_clk); +		clk_set_rate(clk, 11000); +		clk_set_rate(&fsimckb_clk, 11000); +		clk_put(clk); +	}  	gpio_request(GPIO_PTU0, NULL);  	gpio_direction_output(GPIO_PTU0, 0); @@ -1123,6 +1210,19 @@ static int __init arch_setup(void)  	gpio_request(GPIO_FN_INTC_IRQ1, NULL);  	gpio_direction_input(GPIO_FN_INTC_IRQ1); +	/* set VPU clock to 166 MHz */ +	clk = clk_get(NULL, "vpu_clk"); +	if (clk) { +		clk_set_rate(clk, clk_round_rate(clk, 166000000)); +		clk_put(clk); +	} + +	/* enable IrDA */ +	gpio_request(GPIO_FN_IRDA_OUT, NULL); +	gpio_request(GPIO_FN_IRDA_IN,  NULL); +	gpio_request(GPIO_PTU5, NULL); +	gpio_direction_output(GPIO_PTU5, 0); +  	/* enable I2C device */  	i2c_register_board_info(0, i2c0_devices,  				ARRAY_SIZE(i2c0_devices)); @@ -1130,6 +1230,38 @@ static int __init arch_setup(void)  	i2c_register_board_info(1, i2c1_devices,  				ARRAY_SIZE(i2c1_devices)); +	/* VOU */ +	gpio_request(GPIO_FN_DV_D15, NULL); +	gpio_request(GPIO_FN_DV_D14, NULL); +	gpio_request(GPIO_FN_DV_D13, NULL); +	gpio_request(GPIO_FN_DV_D12, NULL); +	gpio_request(GPIO_FN_DV_D11, NULL); +	gpio_request(GPIO_FN_DV_D10, NULL); +	gpio_request(GPIO_FN_DV_D9, NULL); +	gpio_request(GPIO_FN_DV_D8, NULL); +	gpio_request(GPIO_FN_DV_CLKI, NULL); +	gpio_request(GPIO_FN_DV_CLK, NULL); +	gpio_request(GPIO_FN_DV_VSYNC, NULL); +	gpio_request(GPIO_FN_DV_HSYNC, NULL); + +	/* AK8813 power / reset sequence */ +	gpio_request(GPIO_PTG4, NULL); +	gpio_request(GPIO_PTU3, NULL); +	/* Reset */ +	gpio_direction_output(GPIO_PTG4, 0); +	/* Power down */ +	gpio_direction_output(GPIO_PTU3, 1); + +	udelay(10); + +	/* Power up, reset */ +	gpio_set_value(GPIO_PTU3, 0); + +	udelay(10); + +	/* Remove reset */ +	gpio_set_value(GPIO_PTG4, 1); +  	return platform_add_devices(ecovec_devices,  				    ARRAY_SIZE(ecovec_devices));  } diff --git a/arch/sh/boards/mach-highlander/irq-r7780mp.c b/arch/sh/boards/mach-highlander/irq-r7780mp.c index 83c28bcd4d2..9893fd3a135 100644 --- a/arch/sh/boards/mach-highlander/irq-r7780mp.c +++ b/arch/sh/boards/mach-highlander/irq-r7780mp.c @@ -64,7 +64,7 @@ static DECLARE_INTC_DESC(intc_desc, "r7780mp", vectors,  unsigned char * __init highlander_plat_irq_setup(void)  { -	if ((ctrl_inw(0xa4000700) & 0xf000) == 0x2000) { +	if ((__raw_readw(0xa4000700) & 0xf000) == 0x2000) {  		printk(KERN_INFO "Using r7780mp interrupt controller.\n");  		register_intc_controller(&intc_desc);  		return irl2irq; diff --git a/arch/sh/boards/mach-highlander/irq-r7780rp.c b/arch/sh/boards/mach-highlander/irq-r7780rp.c index b721e86b5af..0805b215145 100644 --- a/arch/sh/boards/mach-highlander/irq-r7780rp.c +++ b/arch/sh/boards/mach-highlander/irq-r7780rp.c @@ -57,7 +57,7 @@ static DECLARE_INTC_DESC(intc_desc, "r7780rp", vectors,  unsigned char * __init highlander_plat_irq_setup(void)  { -	if (ctrl_inw(0xa5000600)) { +	if (__raw_readw(0xa5000600)) {  		printk(KERN_INFO "Using r7780rp interrupt controller.\n");  		register_intc_controller(&intc_desc);  		return irl2irq; diff --git a/arch/sh/boards/mach-highlander/irq-r7785rp.c b/arch/sh/boards/mach-highlander/irq-r7785rp.c index 3811b060a39..558b2486277 100644 --- a/arch/sh/boards/mach-highlander/irq-r7785rp.c +++ b/arch/sh/boards/mach-highlander/irq-r7785rp.c @@ -66,20 +66,20 @@ static DECLARE_INTC_DESC(intc_desc, "r7785rp", vectors,  unsigned char * __init highlander_plat_irq_setup(void)  { -	if ((ctrl_inw(0xa4000158) & 0xf000) != 0x1000) +	if ((__raw_readw(0xa4000158) & 0xf000) != 0x1000)  		return NULL;  	printk(KERN_INFO "Using r7785rp interrupt controller.\n"); -	ctrl_outw(0x0000, PA_IRLSSR1);	/* FPGA IRLSSR1(CF_CD clear) */ +	__raw_writew(0x0000, PA_IRLSSR1);	/* FPGA IRLSSR1(CF_CD clear) */  	/* Setup the FPGA IRL */ -	ctrl_outw(0x0000, PA_IRLPRA);	/* FPGA IRLA */ -	ctrl_outw(0xe598, PA_IRLPRB);	/* FPGA IRLB */ -	ctrl_outw(0x7060, PA_IRLPRC);	/* FPGA IRLC */ -	ctrl_outw(0x0000, PA_IRLPRD);	/* FPGA IRLD */ -	ctrl_outw(0x4321, PA_IRLPRE);	/* FPGA IRLE */ -	ctrl_outw(0xdcba, PA_IRLPRF);	/* FPGA IRLF */ +	__raw_writew(0x0000, PA_IRLPRA);	/* FPGA IRLA */ +	__raw_writew(0xe598, PA_IRLPRB);	/* FPGA IRLB */ +	__raw_writew(0x7060, PA_IRLPRC);	/* FPGA IRLC */ +	__raw_writew(0x0000, PA_IRLPRD);	/* FPGA IRLD */ +	__raw_writew(0x4321, PA_IRLPRE);	/* FPGA IRLE */ +	__raw_writew(0xdcba, PA_IRLPRF);	/* FPGA IRLF */  	register_intc_controller(&intc_desc);  	return irl2irq; diff --git a/arch/sh/boards/mach-highlander/psw.c b/arch/sh/boards/mach-highlander/psw.c index 37b1a2ee71a..522786318d3 100644 --- a/arch/sh/boards/mach-highlander/psw.c +++ b/arch/sh/boards/mach-highlander/psw.c @@ -24,7 +24,7 @@ static irqreturn_t psw_irq_handler(int irq, void *arg)  	unsigned int l, mask;  	int ret = 0; -	l = ctrl_inw(PA_DBSW); +	l = __raw_readw(PA_DBSW);  	/* Nothing to do if there's no state change */  	if (psw->state) { @@ -45,7 +45,7 @@ static irqreturn_t psw_irq_handler(int irq, void *arg)  out:  	/* Clear the switch IRQs */  	l |= (0x7 << 12); -	ctrl_outw(l, PA_DBSW); +	__raw_writew(l, PA_DBSW);  	return IRQ_RETVAL(ret);  } diff --git a/arch/sh/boards/mach-highlander/setup.c b/arch/sh/boards/mach-highlander/setup.c index f663c14d888..a5ecfbacaf3 100644 --- a/arch/sh/boards/mach-highlander/setup.c +++ b/arch/sh/boards/mach-highlander/setup.c @@ -14,6 +14,7 @@   * for more details.   */  #include <linux/init.h> +#include <linux/io.h>  #include <linux/platform_device.h>  #include <linux/ata_platform.h>  #include <linux/types.h> @@ -26,6 +27,7 @@  #include <net/ax88796.h>  #include <asm/machvec.h>  #include <mach/highlander.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/heartbeat.h>  #include <asm/io.h> @@ -311,13 +313,13 @@ device_initcall(r7780rp_devices_setup);   */  static int ivdr_clk_enable(struct clk *clk)  { -	ctrl_outw(ctrl_inw(PA_IVDRCTL) | (1 << IVDR_CK_ON), PA_IVDRCTL); +	__raw_writew(__raw_readw(PA_IVDRCTL) | (1 << IVDR_CK_ON), PA_IVDRCTL);  	return 0;  }  static void ivdr_clk_disable(struct clk *clk)  { -	ctrl_outw(ctrl_inw(PA_IVDRCTL) & ~(1 << IVDR_CK_ON), PA_IVDRCTL); +	__raw_writew(__raw_readw(PA_IVDRCTL) & ~(1 << IVDR_CK_ON), PA_IVDRCTL);  }  static struct clk_ops ivdr_clk_ops = { @@ -326,7 +328,6 @@ static struct clk_ops ivdr_clk_ops = {  };  static struct clk ivdr_clk = { -	.name		= "ivdr_clk",  	.ops		= &ivdr_clk_ops,  }; @@ -334,10 +335,17 @@ static struct clk *r7780rp_clocks[] = {  	&ivdr_clk,  }; +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("ivdr_clk", &ivdr_clk), +}; +  static void r7780rp_power_off(void)  {  	if (mach_is_r7780mp() || mach_is_r7785rp()) -		ctrl_outw(0x0001, PA_POFF); +		__raw_writew(0x0001, PA_POFF);  }  /* @@ -345,7 +353,7 @@ static void r7780rp_power_off(void)   */  static void __init highlander_setup(char **cmdline_p)  { -	u16 ver = ctrl_inw(PA_VERREG); +	u16 ver = __raw_readw(PA_VERREG);  	int i;  	printk(KERN_INFO "Renesas Solutions Highlander %s support.\n", @@ -370,12 +378,14 @@ static void __init highlander_setup(char **cmdline_p)  		clk_enable(clk);  	} -	ctrl_outw(0x0000, PA_OBLED);	/* Clear LED. */ +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); + +	__raw_writew(0x0000, PA_OBLED);	/* Clear LED. */  	if (mach_is_r7780rp()) -		ctrl_outw(0x0001, PA_SDPOW);	/* SD Power ON */ +		__raw_writew(0x0001, PA_SDPOW);	/* SD Power ON */ -	ctrl_outw(ctrl_inw(PA_IVDRCTL) | 0x01, PA_IVDRCTL);	/* Si13112 */ +	__raw_writew(__raw_readw(PA_IVDRCTL) | 0x01, PA_IVDRCTL);	/* Si13112 */  	pm_power_off = r7780rp_power_off;  } diff --git a/arch/sh/boards/mach-hp6xx/hp6xx_apm.c b/arch/sh/boards/mach-hp6xx/hp6xx_apm.c index e85212faf40..b49535c0ddd 100644 --- a/arch/sh/boards/mach-hp6xx/hp6xx_apm.c +++ b/arch/sh/boards/mach-hp6xx/hp6xx_apm.c @@ -53,7 +53,7 @@ static void hp6x0_apm_get_power_status(struct apm_power_info *info)  	info->ac_line_status = (battery > HP680_BATTERY_AC_ON) ?  			 APM_AC_ONLINE : APM_AC_OFFLINE; -	pgdr = ctrl_inb(PGDR); +	pgdr = __raw_readb(PGDR);  	if (pgdr & PGDR_MAIN_BATTERY_OUT) {  		info->battery_status	= APM_BATTERY_STATUS_NOT_PRESENT;  		info->battery_flag	= 0x80; diff --git a/arch/sh/boards/mach-hp6xx/pm.c b/arch/sh/boards/mach-hp6xx/pm.c index d936c1af762..4499a3749d4 100644 --- a/arch/sh/boards/mach-hp6xx/pm.c +++ b/arch/sh/boards/mach-hp6xx/pm.c @@ -53,17 +53,17 @@ static void pm_enter(void)  	sh_wdt_write_cnt(0);  	/* disable PLL1 */ -	frqcr = ctrl_inw(FRQCR); +	frqcr = __raw_readw(FRQCR);  	frqcr &= ~(FRQCR_PLLEN | FRQCR_PSTBY); -	ctrl_outw(frqcr, FRQCR); +	__raw_writew(frqcr, FRQCR);  	/* enable standby */ -	stbcr = ctrl_inb(STBCR); -	ctrl_outb(stbcr | STBCR_STBY | STBCR_MSTP2, STBCR); +	stbcr = __raw_readb(STBCR); +	__raw_writeb(stbcr | STBCR_STBY | STBCR_MSTP2, STBCR);  	/* set self-refresh */ -	mcr = ctrl_inw(MCR); -	ctrl_outw(mcr & ~MCR_RFSH, MCR); +	mcr = __raw_readw(MCR); +	__raw_writew(mcr & ~MCR_RFSH, MCR);  	/* set interrupt handler */  	asm volatile("stc vbr, %0" : "=r" (vbr_old)); @@ -73,8 +73,8 @@ static void pm_enter(void)  	       &wakeup_start, &wakeup_end - &wakeup_start);  	asm volatile("ldc %0, vbr" : : "r" (vbr_new)); -	ctrl_outw(0, RTCNT); -	ctrl_outw(mcr | MCR_RFSH | MCR_RMODE, MCR); +	__raw_writew(0, RTCNT); +	__raw_writew(mcr | MCR_RFSH | MCR_RMODE, MCR);  	cpu_sleep(); @@ -83,14 +83,14 @@ static void pm_enter(void)  	free_page(vbr_new);  	/* enable PLL1 */ -	frqcr = ctrl_inw(FRQCR); +	frqcr = __raw_readw(FRQCR);  	frqcr |= FRQCR_PSTBY; -	ctrl_outw(frqcr, FRQCR); +	__raw_writew(frqcr, FRQCR);  	udelay(50);  	frqcr |= FRQCR_PLLEN; -	ctrl_outw(frqcr, FRQCR); +	__raw_writew(frqcr, FRQCR); -	ctrl_outb(stbcr, STBCR); +	__raw_writeb(stbcr, STBCR);  	clear_bl_bit();  } @@ -115,21 +115,21 @@ static int hp6x0_pm_enter(suspend_state_t state)  	outw(hd64461_stbcr, HD64461_STBCR);  #endif -	ctrl_outb(0x1f, DACR); +	__raw_writeb(0x1f, DACR); -	stbcr = ctrl_inb(STBCR); -	ctrl_outb(0x01, STBCR); +	stbcr = __raw_readb(STBCR); +	__raw_writeb(0x01, STBCR); -	stbcr2 = ctrl_inb(STBCR2); -	ctrl_outb(0x7f , STBCR2); +	stbcr2 = __raw_readb(STBCR2); +	__raw_writeb(0x7f , STBCR2);  	outw(0xf07f, HD64461_SCPUCR);  	pm_enter();  	outw(0, HD64461_SCPUCR); -	ctrl_outb(stbcr, STBCR); -	ctrl_outb(stbcr2, STBCR2); +	__raw_writeb(stbcr, STBCR); +	__raw_writeb(stbcr2, STBCR2);  #ifdef CONFIG_HD64461_ENABLER  	hd64461_stbcr = inw(HD64461_STBCR); diff --git a/arch/sh/boards/mach-hp6xx/setup.c b/arch/sh/boards/mach-hp6xx/setup.c index e6dd5e96321..8c9add5f4cf 100644 --- a/arch/sh/boards/mach-hp6xx/setup.c +++ b/arch/sh/boards/mach-hp6xx/setup.c @@ -149,19 +149,19 @@ static void __init hp6xx_setup(char **cmdline_p)  	sh_dac_output(0, DAC_SPEAKER_VOLUME);  	sh_dac_disable(DAC_SPEAKER_VOLUME); -	v8 = ctrl_inb(DACR); +	v8 = __raw_readb(DACR);  	v8 &= ~DACR_DAE; -	ctrl_outb(v8,DACR); +	__raw_writeb(v8,DACR); -	v8 = ctrl_inb(SCPDR); +	v8 = __raw_readb(SCPDR);  	v8 |= SCPDR_TS_SCAN_X | SCPDR_TS_SCAN_Y;  	v8 &= ~SCPDR_TS_SCAN_ENABLE; -	ctrl_outb(v8, SCPDR); +	__raw_writeb(v8, SCPDR); -	v = ctrl_inw(SCPCR); +	v = __raw_readw(SCPCR);  	v &= ~SCPCR_TS_MASK;  	v |= SCPCR_TS_ENABLE; -	ctrl_outw(v, SCPCR); +	__raw_writew(v, SCPCR);  }  device_initcall(hp6xx_devices_setup); diff --git a/arch/sh/boards/mach-kfr2r09/setup.c b/arch/sh/boards/mach-kfr2r09/setup.c index 5d7b5d92475..68994a163f6 100644 --- a/arch/sh/boards/mach-kfr2r09/setup.c +++ b/arch/sh/boards/mach-kfr2r09/setup.c @@ -10,6 +10,8 @@  #include <linux/init.h>  #include <linux/platform_device.h>  #include <linux/interrupt.h> +#include <linux/mfd/sh_mobile_sdhi.h> +#include <linux/mfd/tmio.h>  #include <linux/mtd/physmap.h>  #include <linux/mtd/onenand.h>  #include <linux/delay.h> @@ -282,7 +284,7 @@ static int camera_power(struct device *dev, int mode)  		 * use 1.8 V for VccQ_VIO  		 * use 2.85V for VccQ_SR  		 */ -		ctrl_outw((ctrl_inw(DRVCRB) & ~0x0003) | 0x0001, DRVCRB); +		__raw_writew((__raw_readw(DRVCRB) & ~0x0003) | 0x0001, DRVCRB);  		/* reset clear */  		ret = gpio_request(GPIO_PTB4, NULL); @@ -351,15 +353,24 @@ static struct resource kfr2r09_sh_sdhi0_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 101, +		.start  = 100,  		.flags  = IORESOURCE_IRQ,  	},  }; +static struct sh_mobile_sdhi_info sh7724_sdhi0_data = { +	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX, +	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX, +	.tmio_flags	= TMIO_MMC_WRPROTECT_DISABLE, +}; +  static struct platform_device kfr2r09_sh_sdhi0_device = {  	.name           = "sh_mobile_sdhi",  	.num_resources  = ARRAY_SIZE(kfr2r09_sh_sdhi0_resources),  	.resource       = kfr2r09_sh_sdhi0_resources, +	.dev = { +		.platform_data	= &sh7724_sdhi0_data, +	},  	.archdata = {  		.hwblk_id = HWBLK_SDHI0,  	}, @@ -492,13 +503,13 @@ static int kfr2r09_usb0_gadget_setup(void)  	if (kfr2r09_usb0_gadget_i2c_setup() != 0)  		return -ENODEV; /* unable to configure using i2c */ -	ctrl_outw((ctrl_inw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); +	__raw_writew((__raw_readw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB);  	gpio_request(GPIO_FN_PDSTATUS, NULL); /* R-standby disables USB clock */  	gpio_request(GPIO_PTV6, NULL); /* USBCLK_ON */  	gpio_direction_output(GPIO_PTV6, 1); /* USBCLK_ON = H */  	msleep(20); /* wait 20ms to let the clock settle */  	clk_enable(clk_get(NULL, "usb0")); -	ctrl_outw(0x0600, 0xa40501d4); +	__raw_writew(0x0600, 0xa40501d4);  	return 0;  } @@ -526,12 +537,12 @@ static int __init kfr2r09_devices_setup(void)  	gpio_direction_output(GPIO_PTG3, 1); /* HPON_ON = H */  	/* setup NOR flash at CS0 */ -	ctrl_outl(0x36db0400, BSC_CS0BCR); -	ctrl_outl(0x00000500, BSC_CS0WCR); +	__raw_writel(0x36db0400, BSC_CS0BCR); +	__raw_writel(0x00000500, BSC_CS0WCR);  	/* setup NAND flash at CS4 */ -	ctrl_outl(0x36db0400, BSC_CS4BCR); -	ctrl_outl(0x00000500, BSC_CS4WCR); +	__raw_writel(0x36db0400, BSC_CS4BCR); +	__raw_writel(0x00000500, BSC_CS4WCR);  	/* setup KEYSC pins */  	gpio_request(GPIO_FN_KEYOUT0, NULL); diff --git a/arch/sh/boards/mach-landisk/gio.c b/arch/sh/boards/mach-landisk/gio.c index 52801318819..01e6abb769b 100644 --- a/arch/sh/boards/mach-landisk/gio.c +++ b/arch/sh/boards/mach-landisk/gio.c @@ -76,39 +76,39 @@ static long gio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)  		break;  	case GIODRV_IOCSGIODATA1:	/* write byte */ -		ctrl_outb((unsigned char)(0x0ff & data), addr); +		__raw_writeb((unsigned char)(0x0ff & data), addr);  		break;  	case GIODRV_IOCSGIODATA2:	/* write word */  		if (addr & 0x01) {  			return -EFAULT;  		} -		ctrl_outw((unsigned short int)(0x0ffff & data), addr); +		__raw_writew((unsigned short int)(0x0ffff & data), addr);  		break;  	case GIODRV_IOCSGIODATA4:	/* write long */  		if (addr & 0x03) {  			return -EFAULT;  		} -		ctrl_outl(data, addr); +		__raw_writel(data, addr);  		break;  	case GIODRV_IOCGGIODATA1:	/* read byte */ -		data = ctrl_inb(addr); +		data = __raw_readb(addr);  		break;  	case GIODRV_IOCGGIODATA2:	/* read word */  		if (addr & 0x01) {  			return -EFAULT;  		} -		data = ctrl_inw(addr); +		data = __raw_readw(addr);  		break;  	case GIODRV_IOCGGIODATA4:	/* read long */  		if (addr & 0x03) {  			return -EFAULT;  		} -		data = ctrl_inl(addr); +		data = __raw_readl(addr);  		break;  	default:  		return -EFAULT; diff --git a/arch/sh/boards/mach-landisk/irq.c b/arch/sh/boards/mach-landisk/irq.c index 7b284cde1f5..96f38a4187d 100644 --- a/arch/sh/boards/mach-landisk/irq.c +++ b/arch/sh/boards/mach-landisk/irq.c @@ -22,14 +22,14 @@ static void disable_landisk_irq(unsigned int irq)  {  	unsigned char mask = 0xff ^ (0x01 << (irq - 5)); -	ctrl_outb(ctrl_inb(PA_IMASK) & mask, PA_IMASK); +	__raw_writeb(__raw_readb(PA_IMASK) & mask, PA_IMASK);  }  static void enable_landisk_irq(unsigned int irq)  {  	unsigned char value = (0x01 << (irq - 5)); -	ctrl_outb(ctrl_inb(PA_IMASK) | value, PA_IMASK); +	__raw_writeb(__raw_readb(PA_IMASK) | value, PA_IMASK);  }  static struct irq_chip landisk_irq_chip __read_mostly = { @@ -52,5 +52,5 @@ void __init init_landisk_IRQ(void)  					      handle_level_irq, "level");  		enable_landisk_irq(i);  	} -	ctrl_outb(0x00, PA_PWRINT_CLR); +	__raw_writeb(0x00, PA_PWRINT_CLR);  } diff --git a/arch/sh/boards/mach-landisk/psw.c b/arch/sh/boards/mach-landisk/psw.c index e6b0efa098d..bef83522f95 100644 --- a/arch/sh/boards/mach-landisk/psw.c +++ b/arch/sh/boards/mach-landisk/psw.c @@ -25,7 +25,7 @@ static irqreturn_t psw_irq_handler(int irq, void *arg)  	unsigned int sw_value;  	int ret = 0; -	sw_value = (0x0ff & (~ctrl_inb(PA_STATUS))); +	sw_value = (0x0ff & (~__raw_readb(PA_STATUS)));  	/* Nothing to do if there's no state change */  	if (psw->state) { @@ -42,7 +42,7 @@ static irqreturn_t psw_irq_handler(int irq, void *arg)  out:  	/* Clear the switch IRQs */ -	ctrl_outb(0x00, PA_PWRINT_CLR); +	__raw_writeb(0x00, PA_PWRINT_CLR);  	return IRQ_RETVAL(ret);  } diff --git a/arch/sh/boards/mach-landisk/setup.c b/arch/sh/boards/mach-landisk/setup.c index db22ea2e6d4..50337acc18c 100644 --- a/arch/sh/boards/mach-landisk/setup.c +++ b/arch/sh/boards/mach-landisk/setup.c @@ -25,7 +25,7 @@ void init_landisk_IRQ(void);  static void landisk_power_off(void)  { -        ctrl_outb(0x01, PA_SHUTDOWN); +        __raw_writeb(0x01, PA_SHUTDOWN);  }  static struct resource cf_ide_resources[3]; @@ -63,7 +63,7 @@ static int __init landisk_devices_setup(void)  	/* open I/O area window */  	paddrbase = virt_to_phys((void *)PA_AREA5_IO);  	prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16); -	cf_ide_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot); +	cf_ide_base = ioremap_prot(paddrbase, PAGE_SIZE, pgprot_val(prot));  	if (!cf_ide_base) {  		printk("allocate_cf_area : can't open CF I/O window!\n");  		return -ENOMEM; @@ -88,7 +88,7 @@ __initcall(landisk_devices_setup);  static void __init landisk_setup(char **cmdline_p)  {          /* LED ON */ -	ctrl_outb(ctrl_inb(PA_LED) | 0x03, PA_LED); +	__raw_writeb(__raw_readb(PA_LED) | 0x03, PA_LED);  	printk(KERN_INFO "I-O DATA DEVICE, INC. \"LANDISK Series\" support.\n");  	pm_power_off = landisk_power_off; diff --git a/arch/sh/boards/mach-lboxre2/setup.c b/arch/sh/boards/mach-lboxre2/setup.c index 2b0b5818e1e..79b4e0d77b7 100644 --- a/arch/sh/boards/mach-lboxre2/setup.c +++ b/arch/sh/boards/mach-lboxre2/setup.c @@ -56,8 +56,8 @@ static int __init lboxre2_devices_setup(void)  	/* open I/O area window */  	paddrbase = virt_to_phys((void*)PA_AREA5_IO);  	psize = PAGE_SIZE; -	prot = PAGE_KERNEL_PCC( 1 , _PAGE_PCC_IO16); -	cf0_io_base = (u32)p3_ioremap(paddrbase, psize, prot.pgprot); +	prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16); +	cf0_io_base = (u32)ioremap_prot(paddrbase, psize, pgprot_val(prot));  	if (!cf0_io_base) {  		printk(KERN_ERR "%s : can't open CF I/O window!\n" , __func__ );  		return -ENOMEM; diff --git a/arch/sh/boards/mach-microdev/io.c b/arch/sh/boards/mach-microdev/io.c index 52dd748211c..2960c659020 100644 --- a/arch/sh/boards/mach-microdev/io.c +++ b/arch/sh/boards/mach-microdev/io.c @@ -141,10 +141,10 @@ static inline void delay(void)  #if defined(CONFIG_PCI)  	/* System board present, just make a dummy SRAM access.  (CS0 will be  	   mapped to PCI memory, probably good to avoid it.) */ -	ctrl_inw(0xa6800000); +	__raw_readw(0xa6800000);  #else  	/* CS0 will be mapped to flash, ROM etc so safe to access it. */ -	ctrl_inw(0xa0000000); +	__raw_readw(0xa0000000);  #endif  } diff --git a/arch/sh/boards/mach-microdev/irq.c b/arch/sh/boards/mach-microdev/irq.c index b551963579c..a26d16669aa 100644 --- a/arch/sh/boards/mach-microdev/irq.c +++ b/arch/sh/boards/mach-microdev/irq.c @@ -88,7 +88,7 @@ static void disable_microdev_irq(unsigned int irq)  	fpgaIrq = fpgaIrqTable[irq].fpgaIrq;  	/* disable interrupts on the FPGA INTC register */ -	ctrl_outl(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTDSB_REG); +	__raw_writel(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTDSB_REG);  }  static void enable_microdev_irq(unsigned int irq) @@ -107,13 +107,13 @@ static void enable_microdev_irq(unsigned int irq)  	priorityReg = MICRODEV_FPGA_INTPRI_REG(fpgaIrq);  	/* set priority for the interrupt */ -	priorities = ctrl_inl(priorityReg); +	priorities = __raw_readl(priorityReg);  	priorities &= ~MICRODEV_FPGA_INTPRI_MASK(fpgaIrq);  	priorities |= MICRODEV_FPGA_INTPRI_LEVEL(fpgaIrq, pri); -	ctrl_outl(priorities, priorityReg); +	__raw_writel(priorities, priorityReg);  	/* enable interrupts on the FPGA INTC register */ -	ctrl_outl(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTENB_REG); +	__raw_writel(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTENB_REG);  }  /* This function sets the desired irq handler to be a MicroDev type */ @@ -134,7 +134,7 @@ extern void __init init_microdev_irq(void)  	int i;  	/* disable interrupts on the FPGA INTC register */ -	ctrl_outl(~0ul, MICRODEV_FPGA_INTDSB_REG); +	__raw_writel(~0ul, MICRODEV_FPGA_INTDSB_REG);  	for (i = 0; i < NUM_EXTERNAL_IRQS; i++)  		make_microdev_irq(i); diff --git a/arch/sh/boards/mach-migor/setup.c b/arch/sh/boards/mach-migor/setup.c index 507c77be476..87185de2044 100644 --- a/arch/sh/boards/mach-migor/setup.c +++ b/arch/sh/boards/mach-migor/setup.c @@ -12,6 +12,7 @@  #include <linux/interrupt.h>  #include <linux/input.h>  #include <linux/input/sh_keysc.h> +#include <linux/mfd/sh_mobile_sdhi.h>  #include <linux/mtd/physmap.h>  #include <linux/mtd/nand.h>  #include <linux/i2c.h> @@ -397,15 +398,23 @@ static struct resource sdhi_cn9_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 101, +		.start	= 100,  		.flags  = IORESOURCE_IRQ,  	},  }; +static struct sh_mobile_sdhi_info sh7724_sdhi_data = { +	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX, +	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX, +}; +  static struct platform_device sdhi_cn9_device = {  	.name		= "sh_mobile_sdhi",  	.num_resources	= ARRAY_SIZE(sdhi_cn9_resources),  	.resource	= sdhi_cn9_resources, +	.dev = { +		.platform_data	= &sh7724_sdhi_data, +	},  	.archdata = {  		.hwblk_id = HWBLK_SDHI,  	}, @@ -419,6 +428,9 @@ static struct i2c_board_info migor_i2c_devices[] = {  		I2C_BOARD_INFO("migor_ts", 0x51),  		.irq = 38, /* IRQ6 */  	}, +	{ +		I2C_BOARD_INFO("wm8978", 0x1a), +	},  };  static struct i2c_board_info migor_i2c_camera[] = { @@ -431,7 +443,7 @@ static struct i2c_board_info migor_i2c_camera[] = {  };  static struct ov772x_camera_info ov7725_info = { -	.buswidth	= SOCAM_DATAWIDTH_8, +	.flags		= OV772X_FLAG_8BIT,  };  static struct soc_camera_link ov7725_link = { @@ -496,28 +508,16 @@ static int __init migor_devices_setup(void)  					&migor_sdram_enter_end,  					&migor_sdram_leave_start,  					&migor_sdram_leave_end); -#ifdef CONFIG_PM  	/* Let D11 LED show STATUS0 */  	gpio_request(GPIO_FN_STATUS0, NULL);  	/* Lit D12 LED show PDSTATUS */  	gpio_request(GPIO_FN_PDSTATUS, NULL); -#else -	/* Lit D11 LED */ -	gpio_request(GPIO_PTJ7, NULL); -	gpio_direction_output(GPIO_PTJ7, 1); -	gpio_export(GPIO_PTJ7, 0); - -	/* Lit D12 LED */ -	gpio_request(GPIO_PTJ5, NULL); -	gpio_direction_output(GPIO_PTJ5, 1); -	gpio_export(GPIO_PTJ5, 0); -#endif  	/* SMC91C111 - Enable IRQ0, Setup CS4 for 16-bit fast access */  	gpio_request(GPIO_FN_IRQ0, NULL); -	ctrl_outl(0x00003400, BSC_CS4BCR); -	ctrl_outl(0x00110080, BSC_CS4WCR); +	__raw_writel(0x00003400, BSC_CS4BCR); +	__raw_writel(0x00110080, BSC_CS4WCR);  	/* KEYSC */  	gpio_request(GPIO_FN_KEYOUT0, NULL); @@ -533,7 +533,7 @@ static int __init migor_devices_setup(void)  	/* NAND Flash */  	gpio_request(GPIO_FN_CS6A_CE2B, NULL); -	ctrl_outl((ctrl_inl(BSC_CS6ABCR) & ~0x0600) | 0x0200, BSC_CS6ABCR); +	__raw_writel((__raw_readl(BSC_CS6ABCR) & ~0x0600) | 0x0200, BSC_CS6ABCR);  	gpio_request(GPIO_PTA1, NULL);  	gpio_direction_input(GPIO_PTA1); @@ -627,10 +627,23 @@ static int __init migor_devices_setup(void)  #else  	gpio_direction_output(GPIO_PTT0, 1);  #endif -	ctrl_outw(ctrl_inw(PORT_MSELCRB) | 0x2000, PORT_MSELCRB); /* D15->D8 */ +	__raw_writew(__raw_readw(PORT_MSELCRB) | 0x2000, PORT_MSELCRB); /* D15->D8 */  	platform_resource_setup_memory(&migor_ceu_device, "ceu", 4 << 20); +	/* SIU: Port B */ +	gpio_request(GPIO_FN_SIUBOLR, NULL); +	gpio_request(GPIO_FN_SIUBOBT, NULL); +	gpio_request(GPIO_FN_SIUBISLD, NULL); +	gpio_request(GPIO_FN_SIUBOSLD, NULL); +	gpio_request(GPIO_FN_SIUMCKB, NULL); + +	/* +	 * The original driver sets SIUB OLR/OBT, ILR/IBT, and SIUA OLR/OBT to +	 * output. Need only SIUB, set to output for master mode (table 34.2) +	 */ +	__raw_writew(__raw_readw(PORT_MSELCRA) | 1, PORT_MSELCRA); +  	i2c_register_board_info(0, migor_i2c_devices,  				ARRAY_SIZE(migor_i2c_devices)); diff --git a/arch/sh/boards/mach-r2d/irq.c b/arch/sh/boards/mach-r2d/irq.c index 78d7b27c80d..574f009c3c3 100644 --- a/arch/sh/boards/mach-r2d/irq.c +++ b/arch/sh/boards/mach-r2d/irq.c @@ -129,7 +129,7 @@ void __init init_rts7751r2d_IRQ(void)  {  	struct intc_desc *d; -	switch (ctrl_inw(PA_VERREG) & 0xf0) { +	switch (__raw_readw(PA_VERREG) & 0xf0) {  #ifdef CONFIG_RTS7751R2D_PLUS  	case 0x10:  		printk(KERN_INFO "Using R2D-PLUS interrupt controller.\n"); @@ -147,7 +147,7 @@ void __init init_rts7751r2d_IRQ(void)  #endif  	default:  		printk(KERN_INFO "Unknown R2D interrupt controller 0x%04x\n", -		       ctrl_inw(PA_VERREG)); +		       __raw_readw(PA_VERREG));  		return;  	} diff --git a/arch/sh/boards/mach-r2d/setup.c b/arch/sh/boards/mach-r2d/setup.c index a625ecb93e4..b84df6a3a93 100644 --- a/arch/sh/boards/mach-r2d/setup.c +++ b/arch/sh/boards/mach-r2d/setup.c @@ -70,7 +70,7 @@ static struct spi_board_info spi_bus[] = {  static void r2d_chip_select(struct sh_spi_info *spi, int cs, int state)  {  	BUG_ON(cs != 0);  /* Single Epson RTC-9701JE attached on CS0 */ -	ctrl_outw(state == BITBANG_CS_ACTIVE, PA_RTCCE); +	__raw_writew(state == BITBANG_CS_ACTIVE, PA_RTCCE);  }  static struct sh_spi_info spi_info = { @@ -262,7 +262,7 @@ __initcall(rts7751r2d_devices_setup);  static void rts7751r2d_power_off(void)  { -	ctrl_outw(0x0001, PA_POWOFF); +	__raw_writew(0x0001, PA_POWOFF);  }  /* @@ -271,14 +271,14 @@ static void rts7751r2d_power_off(void)  static void __init rts7751r2d_setup(char **cmdline_p)  {  	void __iomem *sm501_reg; -	u16 ver = ctrl_inw(PA_VERREG); +	u16 ver = __raw_readw(PA_VERREG);  	printk(KERN_INFO "Renesas Technology Sales RTS7751R2D support.\n");  	printk(KERN_INFO "FPGA version:%d (revision:%d)\n",  					(ver >> 4) & 0xf, ver & 0xf); -	ctrl_outw(0x0000, PA_OUTPORT); +	__raw_writew(0x0000, PA_OUTPORT);  	pm_power_off = rts7751r2d_power_off;  	/* sm501 dram configuration: diff --git a/arch/sh/boards/mach-rsk/devices-rsk7203.c b/arch/sh/boards/mach-rsk/devices-rsk7203.c index c37617e6322..4fa08ba1025 100644 --- a/arch/sh/boards/mach-rsk/devices-rsk7203.c +++ b/arch/sh/boards/mach-rsk/devices-rsk7203.c @@ -96,7 +96,7 @@ static int __init rsk7203_devices_setup(void)  	gpio_request(GPIO_FN_RXD0, NULL);  	/* Setup LAN9118: CS1 in 16-bit Big Endian Mode, IRQ0 at Port B */ -	ctrl_outl(0x36db0400, 0xfffc0008); /* CS1BCR */ +	__raw_writel(0x36db0400, 0xfffc0008); /* CS1BCR */  	gpio_request(GPIO_FN_IRQ0_PB, NULL);  	return platform_add_devices(rsk7203_devices, diff --git a/arch/sh/boards/mach-sdk7780/irq.c b/arch/sh/boards/mach-sdk7780/irq.c index 855558163c5..e5f7564f251 100644 --- a/arch/sh/boards/mach-sdk7780/irq.c +++ b/arch/sh/boards/mach-sdk7780/irq.c @@ -37,9 +37,9 @@ void __init init_sdk7780_IRQ(void)  {  	printk(KERN_INFO "Using SDK7780 interrupt controller.\n"); -	ctrl_outw(0xFFFF, FPGA_IRQ0MR); +	__raw_writew(0xFFFF, FPGA_IRQ0MR);  	/* Setup IRL 0-3 */ -	ctrl_outw(0x0003, FPGA_IMSR); +	__raw_writew(0x0003, FPGA_IMSR);  	plat_irq_setup_pins(IRQ_MODE_IRL3210);  	register_intc_controller(&fpga_intc_desc); diff --git a/arch/sh/boards/mach-sdk7780/setup.c b/arch/sh/boards/mach-sdk7780/setup.c index aad94a78dc7..4da38db4b5f 100644 --- a/arch/sh/boards/mach-sdk7780/setup.c +++ b/arch/sh/boards/mach-sdk7780/setup.c @@ -20,27 +20,18 @@  #define GPIO_PECR        0xFFEA0008 -//* Heartbeat */ -static struct heartbeat_data heartbeat_data = { -	.regsize = 16, -}; - -static struct resource heartbeat_resources[] = { -	[0] = { -		.start  = PA_LED, -		.end    = PA_LED, -		.flags  = IORESOURCE_MEM, -	}, +/* Heartbeat */ +static struct resource heartbeat_resource = { +	.start  = PA_LED, +	.end    = PA_LED, +	.flags  = IORESOURCE_MEM | IORESOURCE_MEM_16BIT,  };  static struct platform_device heartbeat_device = {  	.name           = "heartbeat",  	.id             = -1, -	.dev = { -		.platform_data = &heartbeat_data, -	}, -	.num_resources  = ARRAY_SIZE(heartbeat_resources), -	.resource       = heartbeat_resources, +	.num_resources  = 1, +	.resource       = &heartbeat_resource,  };  /* SMC91x */ @@ -83,8 +74,8 @@ device_initcall(sdk7780_devices_setup);  static void __init sdk7780_setup(char **cmdline_p)  { -	u16 ver = ctrl_inw(FPGA_FPVERR); -	u16 dateStamp = ctrl_inw(FPGA_FPDATER); +	u16 ver = __raw_readw(FPGA_FPVERR); +	u16 dateStamp = __raw_readw(FPGA_FPDATER);  	printk(KERN_INFO "Renesas Technology Europe SDK7780 support.\n");  	printk(KERN_INFO "Board version: %d (revision %d), " @@ -94,7 +85,7 @@ static void __init sdk7780_setup(char **cmdline_p)  			 dateStamp);  	/* Setup pin mux'ing for PCIC */ -	ctrl_outw(0x0000, GPIO_PECR); +	__raw_writew(0x0000, GPIO_PECR);  }  /* diff --git a/arch/sh/boards/mach-sdk7786/Makefile b/arch/sh/boards/mach-sdk7786/Makefile new file mode 100644 index 00000000000..a29f19e85b6 --- /dev/null +++ b/arch/sh/boards/mach-sdk7786/Makefile @@ -0,0 +1 @@ +obj-y	:= setup.o fpga.o irq.o diff --git a/arch/sh/boards/mach-sdk7786/fpga.c b/arch/sh/boards/mach-sdk7786/fpga.c new file mode 100644 index 00000000000..3e4ec66a041 --- /dev/null +++ b/arch/sh/boards/mach-sdk7786/fpga.c @@ -0,0 +1,72 @@ +/* + * SDK7786 FPGA Support. + * + * Copyright (C) 2010  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/io.h> +#include <linux/bcd.h> +#include <mach/fpga.h> +#include <asm/sizes.h> + +#define FPGA_REGS_OFFSET	0x03fff800 +#define FPGA_REGS_SIZE		0x490 + +/* + * The FPGA can be mapped in any of the generally available areas, + * so we attempt to scan for it using the fixed SRSTR read magic. + * + * Once the FPGA is located, the rest of the mapping data for the other + * components can be determined dynamically from its section mapping + * registers. + */ +static void __iomem *sdk7786_fpga_probe(void) +{ +	unsigned long area; +	void __iomem *base; + +	/* +	 * Iterate over all of the areas where the FPGA could be mapped. +	 * The possible range is anywhere from area 0 through 6, area 7 +	 * is reserved. +	 */ +	for (area = PA_AREA0; area < PA_AREA7; area += SZ_64M) { +		base = ioremap_nocache(area + FPGA_REGS_OFFSET, FPGA_REGS_SIZE); +		if (!base) { +			/* Failed to remap this area, move along. */ +			continue; +		} + +		if (ioread16(base + SRSTR) == SRSTR_MAGIC) +			return base;	/* Found it! */ + +		iounmap(base); +	} + +	return NULL; +} + +void __iomem *sdk7786_fpga_base; + +void __init sdk7786_fpga_init(void) +{ +	u16 version, date; + +	sdk7786_fpga_base = sdk7786_fpga_probe(); +	if (unlikely(!sdk7786_fpga_base)) { +		panic("FPGA detection failed.\n"); +		return; +	} + +	version = fpga_read_reg(FPGAVR); +	date = fpga_read_reg(FPGADR); + +	pr_info("\tFPGA version:\t%d.%d (built on %d/%d/%d)\n", +		bcd2bin(version >> 8) & 0xf, bcd2bin(version & 0xf), +		((date >> 12) & 0xf) + 2000, +		(date >> 8) & 0xf, bcd2bin(date & 0xff)); +} diff --git a/arch/sh/boards/mach-sdk7786/irq.c b/arch/sh/boards/mach-sdk7786/irq.c new file mode 100644 index 00000000000..46943a0da5b --- /dev/null +++ b/arch/sh/boards/mach-sdk7786/irq.c @@ -0,0 +1,48 @@ +/* + * SDK7786 FPGA IRQ Controller Support. + * + * Copyright (C) 2010  Matt Fleming + * Copyright (C) 2010  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/irq.h> +#include <mach/fpga.h> +#include <mach/irq.h> + +enum { +	ATA_IRQ_BIT		= 1, +	SPI_BUSY_BIT		= 2, +	LIRQ5_BIT		= 3, +	LIRQ6_BIT		= 4, +	LIRQ7_BIT		= 5, +	LIRQ8_BIT		= 6, +	KEY_IRQ_BIT		= 7, +	PEN_IRQ_BIT		= 8, +	ETH_IRQ_BIT		= 9, +	RTC_ALARM_BIT		= 10, +	CRYSTAL_FAIL_BIT	= 12, +	ETH_PME_BIT		= 14, +}; + +void __init sdk7786_init_irq(void) +{ +	unsigned int tmp; + +	/* Enable priority encoding for all IRLs */ +	fpga_write_reg(fpga_read_reg(INTMSR) | 0x0303, INTMSR); + +	/* Clear FPGA interrupt status registers */ +	fpga_write_reg(0x0000, INTASR); +	fpga_write_reg(0x0000, INTBSR); + +	/* Unmask FPGA interrupts */ +	tmp = fpga_read_reg(INTAMR); +	tmp &= ~(1 << ETH_IRQ_BIT); +	fpga_write_reg(tmp, INTAMR); + +	plat_irq_setup_pins(IRQ_MODE_IRL7654_MASK); +	plat_irq_setup_pins(IRQ_MODE_IRL3210_MASK); +} diff --git a/arch/sh/boards/mach-sdk7786/setup.c b/arch/sh/boards/mach-sdk7786/setup.c new file mode 100644 index 00000000000..2ec1ea5cf8e --- /dev/null +++ b/arch/sh/boards/mach-sdk7786/setup.c @@ -0,0 +1,206 @@ +/* + * Renesas Technology Europe SDK7786 Support. + * + * Copyright (C) 2010  Matt Fleming + * Copyright (C) 2010  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/io.h> +#include <linux/smsc911x.h> +#include <linux/i2c.h> +#include <linux/irq.h> +#include <linux/clk.h> +#include <mach/fpga.h> +#include <mach/irq.h> +#include <asm/machvec.h> +#include <asm/heartbeat.h> +#include <asm/sizes.h> +#include <asm/reboot.h> +#include <asm/smp-ops.h> + +static struct resource heartbeat_resource = { +	.start		= 0x07fff8b0, +	.end		= 0x07fff8b0 + sizeof(u16) - 1, +	.flags		= IORESOURCE_MEM | IORESOURCE_MEM_16BIT, +}; + +static struct platform_device heartbeat_device = { +	.name		= "heartbeat", +	.id		= -1, +	.num_resources	= 1, +	.resource	= &heartbeat_resource, +}; + +static struct resource smsc911x_resources[] = { +	[0] = { +		.name		= "smsc911x-memory", +		.start		= 0x07ffff00, +		.end		= 0x07ffff00 + SZ_256 - 1, +		.flags		= IORESOURCE_MEM, +	}, +	[1] = { +		.name		= "smsc911x-irq", +		.start		= evt2irq(0x2c0), +		.end		= evt2irq(0x2c0), +		.flags		= IORESOURCE_IRQ, +	}, +}; + +static struct smsc911x_platform_config smsc911x_config = { +	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW, +	.irq_type	= SMSC911X_IRQ_TYPE_OPEN_DRAIN, +	.flags		= SMSC911X_USE_32BIT, +	.phy_interface	= PHY_INTERFACE_MODE_MII, +}; + +static struct platform_device smsc911x_device = { +	.name		= "smsc911x", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(smsc911x_resources), +	.resource	= smsc911x_resources, +	.dev = { +		.platform_data = &smsc911x_config, +	}, +}; + +static struct resource smbus_fpga_resource = { +	.start		= 0x07fff9e0, +	.end		= 0x07fff9e0 + SZ_32 - 1, +	.flags		= IORESOURCE_MEM, +}; + +static struct platform_device smbus_fpga_device = { +	.name		= "i2c-sdk7786", +	.id		= 0, +	.num_resources	= 1, +	.resource	= &smbus_fpga_resource, +}; + +static struct resource smbus_pcie_resource = { +	.start		= 0x07fffc30, +	.end		= 0x07fffc30 + SZ_32 - 1, +	.flags		= IORESOURCE_MEM, +}; + +static struct platform_device smbus_pcie_device = { +	.name		= "i2c-sdk7786", +	.id		= 1, +	.num_resources	= 1, +	.resource	= &smbus_pcie_resource, +}; + +static struct i2c_board_info __initdata sdk7786_i2c_devices[] = { +	{ +		I2C_BOARD_INFO("max6900", 0x68), +	}, +}; + +static struct platform_device *sh7786_devices[] __initdata = { +	&heartbeat_device, +	&smsc911x_device, +	&smbus_fpga_device, +	&smbus_pcie_device, +}; + +static int sdk7786_i2c_setup(void) +{ +	unsigned int tmp; + +	/* +	 * Hand over I2C control to the FPGA. +	 */ +	tmp = fpga_read_reg(SBCR); +	tmp &= ~SCBR_I2CCEN; +	tmp |= SCBR_I2CMEN; +	fpga_write_reg(tmp, SBCR); + +	return i2c_register_board_info(0, sdk7786_i2c_devices, +				       ARRAY_SIZE(sdk7786_i2c_devices)); +} + +static int __init sdk7786_devices_setup(void) +{ +	int ret; + +	ret = platform_add_devices(sh7786_devices, ARRAY_SIZE(sh7786_devices)); +	if (unlikely(ret != 0)) +		return ret; + +	return sdk7786_i2c_setup(); +} +__initcall(sdk7786_devices_setup); + +static int sdk7786_mode_pins(void) +{ +	return fpga_read_reg(MODSWR); +} + +static int sdk7786_clk_init(void) +{ +	struct clk *clk; +	int ret; + +	/* +	 * Only handle the EXTAL case, anyone interfacing a crystal +	 * resonator will need to provide their own input clock. +	 */ +	if (test_mode_pin(MODE_PIN9)) +		return -EINVAL; + +	clk = clk_get(NULL, "extal"); +	if (!clk || IS_ERR(clk)) +		return PTR_ERR(clk); +	ret = clk_set_rate(clk, 33333333); +	clk_put(clk); + +	return ret; +} + +static void sdk7786_restart(char *cmd) +{ +	fpga_write_reg(0xa5a5, SRSTR); +} + +static void sdk7786_power_off(void) +{ +	fpga_write_reg(fpga_read_reg(PWRCR) | PWRCR_PDWNREQ, PWRCR); + +	/* +	 * It can take up to 20us for the R8C to do its job, back off and +	 * wait a bit until we've been shut off. Even though newer FPGA +	 * versions don't set the ACK bit, the latency issue remains. +	 */ +	while ((fpga_read_reg(PWRCR) & PWRCR_PDWNACK) == 0) +		cpu_sleep(); +} + +/* Initialize the board */ +static void __init sdk7786_setup(char **cmdline_p) +{ +	pr_info("Renesas Technology Europe SDK7786 support:\n"); + +	sdk7786_fpga_init(); + +	pr_info("\tPCB revision:\t%d\n", fpga_read_reg(PCBRR) & 0xf); + +	machine_ops.restart = sdk7786_restart; +	pm_power_off = sdk7786_power_off; + +	register_smp_ops(&shx3_smp_ops); +} + +/* + * The Machine Vector + */ +static struct sh_machine_vector mv_sdk7786 __initmv = { +	.mv_name		= "SDK7786", +	.mv_setup		= sdk7786_setup, +	.mv_mode_pins		= sdk7786_mode_pins, +	.mv_clk_init		= sdk7786_clk_init, +	.mv_init_irq		= sdk7786_init_irq, +}; diff --git a/arch/sh/boards/mach-se/7206/io.c b/arch/sh/boards/mach-se/7206/io.c index 180455642a4..adadc77532e 100644 --- a/arch/sh/boards/mach-se/7206/io.c +++ b/arch/sh/boards/mach-se/7206/io.c @@ -16,7 +16,7 @@  static inline void delay(void)  { -	ctrl_inw(0x20000000);  /* P2 ROM Area */ +	__raw_readw(0x20000000);  /* P2 ROM Area */  }  /* MS7750 requires special versions of in*, out* routines, since diff --git a/arch/sh/boards/mach-se/7206/irq.c b/arch/sh/boards/mach-se/7206/irq.c index aef7f052851..8d82175d83a 100644 --- a/arch/sh/boards/mach-se/7206/irq.c +++ b/arch/sh/boards/mach-se/7206/irq.c @@ -32,12 +32,12 @@ static void disable_se7206_irq(unsigned int irq)  	unsigned short msk0,msk1;  	/* Set the priority in IPR to 0 */ -	val = ctrl_inw(INTC_IPR01); +	val = __raw_readw(INTC_IPR01);  	val &= mask; -	ctrl_outw(val, INTC_IPR01); +	__raw_writew(val, INTC_IPR01);  	/* FPGA mask set */ -	msk0 = ctrl_inw(INTMSK0); -	msk1 = ctrl_inw(INTMSK1); +	msk0 = __raw_readw(INTMSK0); +	msk1 = __raw_readw(INTMSK1);  	switch (irq) {  	case IRQ0_IRQ: @@ -51,8 +51,8 @@ static void disable_se7206_irq(unsigned int irq)  		msk1 |= 0x00ff;  		break;  	} -	ctrl_outw(msk0, INTMSK0); -	ctrl_outw(msk1, INTMSK1); +	__raw_writew(msk0, INTMSK0); +	__raw_writew(msk1, INTMSK1);  }  static void enable_se7206_irq(unsigned int irq) @@ -62,13 +62,13 @@ static void enable_se7206_irq(unsigned int irq)  	unsigned short msk0,msk1;  	/* Set priority in IPR back to original value */ -	val = ctrl_inw(INTC_IPR01); +	val = __raw_readw(INTC_IPR01);  	val |= value; -	ctrl_outw(val, INTC_IPR01); +	__raw_writew(val, INTC_IPR01);  	/* FPGA mask reset */ -	msk0 = ctrl_inw(INTMSK0); -	msk1 = ctrl_inw(INTMSK1); +	msk0 = __raw_readw(INTMSK0); +	msk1 = __raw_readw(INTMSK1);  	switch (irq) {  	case IRQ0_IRQ: @@ -82,19 +82,20 @@ static void enable_se7206_irq(unsigned int irq)  		msk1 &= ~0x00ff;  		break;  	} -	ctrl_outw(msk0, INTMSK0); -	ctrl_outw(msk1, INTMSK1); +	__raw_writew(msk0, INTMSK0); +	__raw_writew(msk1, INTMSK1);  }  static void eoi_se7206_irq(unsigned int irq)  {  	unsigned short sts0,sts1; +	struct irq_desc *desc = irq_to_desc(irq); -	if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) +	if (!(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)))  		enable_se7206_irq(irq);  	/* FPGA isr clear */ -	sts0 = ctrl_inw(INTSTS0); -	sts1 = ctrl_inw(INTSTS1); +	sts0 = __raw_readw(INTSTS0); +	sts1 = __raw_readw(INTSTS1);  	switch (irq) {  	case IRQ0_IRQ: @@ -108,8 +109,8 @@ static void eoi_se7206_irq(unsigned int irq)  		sts1 &= ~0x00ff;  		break;  	} -	ctrl_outw(sts0, INTSTS0); -	ctrl_outw(sts1, INTSTS1); +	__raw_writew(sts0, INTSTS0); +	__raw_writew(sts1, INTSTS1);  }  static struct irq_chip se7206_irq_chip __read_mostly = { @@ -136,11 +137,11 @@ void __init init_se7206_IRQ(void)  	make_se7206_irq(IRQ0_IRQ); /* SMC91C111 */  	make_se7206_irq(IRQ1_IRQ); /* ATA */  	make_se7206_irq(IRQ3_IRQ); /* SLOT / PCM */ -	ctrl_outw(inw(INTC_ICR1) | 0x000b ,INTC_ICR1 ) ; /* ICR1 */ +	__raw_writew(inw(INTC_ICR1) | 0x000b ,INTC_ICR1 ) ; /* ICR1 */  	/* FPGA System register setup*/ -	ctrl_outw(0x0000,INTSTS0); /* Clear INTSTS0 */ -	ctrl_outw(0x0000,INTSTS1); /* Clear INTSTS1 */ +	__raw_writew(0x0000,INTSTS0); /* Clear INTSTS0 */ +	__raw_writew(0x0000,INTSTS1); /* Clear INTSTS1 */  	/* IRQ0=LAN, IRQ1=ATA, IRQ3=SLT,PCM */ -	ctrl_outw(0x0001,INTSEL); +	__raw_writew(0x0001,INTSEL);  } diff --git a/arch/sh/boards/mach-se/7206/setup.c b/arch/sh/boards/mach-se/7206/setup.c index f5466384972..8f5c65d43d1 100644 --- a/arch/sh/boards/mach-se/7206/setup.c +++ b/arch/sh/boards/mach-se/7206/setup.c @@ -50,15 +50,12 @@ static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 };  static struct heartbeat_data heartbeat_data = {  	.bit_pos	= heartbeat_bit_pos,  	.nr_bits	= ARRAY_SIZE(heartbeat_bit_pos), -	.regsize	= 32,  }; -static struct resource heartbeat_resources[] = { -	[0] = { -		.start	= PA_LED, -		.end	= PA_LED, -		.flags	= IORESOURCE_MEM, -	}, +static struct resource heartbeat_resource = { +	.start	= PA_LED, +	.end	= PA_LED, +	.flags	= IORESOURCE_MEM | IORESOURCE_MEM_32BIT,  };  static struct platform_device heartbeat_device = { @@ -67,8 +64,8 @@ static struct platform_device heartbeat_device = {  	.dev	= {  		.platform_data	= &heartbeat_data,  	}, -	.num_resources	= ARRAY_SIZE(heartbeat_resources), -	.resource	= heartbeat_resources, +	.num_resources	= 1, +	.resource	= &heartbeat_resource,  };  static struct platform_device *se7206_devices[] __initdata = { diff --git a/arch/sh/boards/mach-se/7343/irq.c b/arch/sh/boards/mach-se/7343/irq.c index 051c29d4eae..d4305c26e9f 100644 --- a/arch/sh/boards/mach-se/7343/irq.c +++ b/arch/sh/boards/mach-se/7343/irq.c @@ -16,16 +16,18 @@  #include <linux/io.h>  #include <mach-se/mach/se7343.h> +unsigned int se7343_fpga_irq[SE7343_FPGA_IRQ_NR] = { 0, }; +  static void disable_se7343_irq(unsigned int irq)  { -	unsigned int bit = irq - SE7343_FPGA_IRQ_BASE; -	ctrl_outw(ctrl_inw(PA_CPLD_IMSK) | 1 << bit, PA_CPLD_IMSK); +	unsigned int bit = (unsigned int)get_irq_chip_data(irq); +	__raw_writew(__raw_readw(PA_CPLD_IMSK) | 1 << bit, PA_CPLD_IMSK);  }  static void enable_se7343_irq(unsigned int irq)  { -	unsigned int bit = irq - SE7343_FPGA_IRQ_BASE; -	ctrl_outw(ctrl_inw(PA_CPLD_IMSK) & ~(1 << bit), PA_CPLD_IMSK); +	unsigned int bit = (unsigned int)get_irq_chip_data(irq); +	__raw_writew(__raw_readw(PA_CPLD_IMSK) & ~(1 << bit), PA_CPLD_IMSK);  }  static struct irq_chip se7343_irq_chip __read_mostly = { @@ -37,19 +39,16 @@ static struct irq_chip se7343_irq_chip __read_mostly = {  static void se7343_irq_demux(unsigned int irq, struct irq_desc *desc)  { -	unsigned short intv = ctrl_inw(PA_CPLD_ST); -	struct irq_desc *ext_desc; -	unsigned int ext_irq = SE7343_FPGA_IRQ_BASE; +	unsigned short intv = __raw_readw(PA_CPLD_ST); +	unsigned int ext_irq = 0;  	intv &= (1 << SE7343_FPGA_IRQ_NR) - 1; -	while (intv) { -		if (intv & 1) { -			ext_desc = irq_desc + ext_irq; -			handle_level_irq(ext_irq, ext_desc); -		} -		intv >>= 1; -		ext_irq++; +	for (; intv; intv >>= 1, ext_irq++) { +		if (!(intv & 1)) +			continue; + +		generic_handle_irq(se7343_fpga_irq[ext_irq]);  	}  } @@ -58,16 +57,24 @@ static void se7343_irq_demux(unsigned int irq, struct irq_desc *desc)   */  void __init init_7343se_IRQ(void)  { -	int i; +	int i, irq; + +	__raw_writew(0, PA_CPLD_IMSK);	/* disable all irqs */ +	__raw_writew(0x2000, 0xb03fffec);	/* mrshpc irq enable */ -	ctrl_outw(0, PA_CPLD_IMSK);	/* disable all irqs */ -	ctrl_outw(0x2000, 0xb03fffec);	/* mrshpc irq enable */ +	for (i = 0; i < SE7343_FPGA_IRQ_NR; i++) { +		irq = create_irq(); +		if (irq < 0) +			return; +		se7343_fpga_irq[i] = irq; -	for (i = 0; i < SE7343_FPGA_IRQ_NR; i++) -		set_irq_chip_and_handler_name(SE7343_FPGA_IRQ_BASE + i, +		set_irq_chip_and_handler_name(se7343_fpga_irq[i],  					      &se7343_irq_chip,  					      handle_level_irq, "level"); +		set_irq_chip_data(se7343_fpga_irq[i], (void *)i); +	} +  	set_irq_chained_handler(IRQ0_IRQ, se7343_irq_demux);  	set_irq_type(IRQ0_IRQ, IRQ_TYPE_LEVEL_LOW);  	set_irq_chained_handler(IRQ1_IRQ, se7343_irq_demux); diff --git a/arch/sh/boards/mach-se/7343/setup.c b/arch/sh/boards/mach-se/7343/setup.c index 4de56f35f41..d2370af56d7 100644 --- a/arch/sh/boards/mach-se/7343/setup.c +++ b/arch/sh/boards/mach-se/7343/setup.c @@ -11,26 +11,17 @@  #include <asm/irq.h>  #include <asm/io.h> -static struct resource heartbeat_resources[] = { -	[0] = { -		.start	= PA_LED, -		.end	= PA_LED, -		.flags	= IORESOURCE_MEM, -	}, -}; - -static struct heartbeat_data heartbeat_data = { -	.regsize = 16, +static struct resource heartbeat_resource = { +	.start	= PA_LED, +	.end	= PA_LED, +	.flags	= IORESOURCE_MEM | IORESOURCE_MEM_16BIT,  };  static struct platform_device heartbeat_device = {  	.name		= "heartbeat",  	.id		= -1, -	.dev = { -		.platform_data = &heartbeat_data, -	}, -	.num_resources	= ARRAY_SIZE(heartbeat_resources), -	.resource	= heartbeat_resources, +	.num_resources	= 1, +	.resource	= &heartbeat_resource,  };  static struct mtd_partition nor_flash_partitions[] = { @@ -82,7 +73,6 @@ static struct plat_serial8250_port serial_platform_data[] = {  		.mapbase	= 0x16000000,  		.regshift	= 1,  		.flags		= ST16C2550C_FLAGS, -		.irq		= UARTA_IRQ,  		.uartclk	= 7372800,  	},  	[1] = { @@ -90,7 +80,6 @@ static struct plat_serial8250_port serial_platform_data[] = {  		.mapbase	= 0x17000000,  		.regshift	= 1,  		.flags		= ST16C2550C_FLAGS, -		.irq		= UARTB_IRQ,  		.uartclk	= 7372800,  	},  	{ }, @@ -121,7 +110,7 @@ static struct resource usb_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[2] = { -		.start  = USB_IRQ, +		/* Filled in later */  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -138,8 +127,8 @@ static struct isp116x_platform_data usb_platform_data = {  static struct platform_device usb_device = {  	.name			= "isp116x-hcd",  	.id			= -1, -	.num_resources  	= ARRAY_SIZE(usb_resources), -	.resource       	= usb_resources, +	.num_resources		= ARRAY_SIZE(usb_resources), +	.resource		= usb_resources,  	.dev			= {  		.platform_data	= &usb_platform_data,  	}, @@ -155,6 +144,13 @@ static struct platform_device *sh7343se_platform_devices[] __initdata = {  static int __init sh7343se_devices_setup(void)  { +	/* Wire-up dynamic vectors */ +	serial_platform_data[0].irq = se7343_fpga_irq[SE7343_FPGA_IRQ_UARTA]; +	serial_platform_data[1].irq = se7343_fpga_irq[SE7343_FPGA_IRQ_UARTB]; + +	usb_resources[2].start = usb_resources[2].end = +		se7343_fpga_irq[SE7343_FPGA_IRQ_USB]; +  	return platform_add_devices(sh7343se_platform_devices,  				    ARRAY_SIZE(sh7343se_platform_devices));  } @@ -165,10 +161,10 @@ device_initcall(sh7343se_devices_setup);   */  static void __init sh7343se_setup(char **cmdline_p)  { -	ctrl_outw(0xf900, FPGA_OUT);	/* FPGA */ +	__raw_writew(0xf900, FPGA_OUT);	/* FPGA */ -	ctrl_outw(0x0002, PORT_PECR);	/* PORT E 1 = IRQ5 */ -	ctrl_outw(0x0020, PORT_PSELD); +	__raw_writew(0x0002, PORT_PECR);	/* PORT E 1 = IRQ5 */ +	__raw_writew(0x0020, PORT_PSELD);  	printk(KERN_INFO "MS7343CP01 Setup...done\n");  } @@ -179,6 +175,5 @@ static void __init sh7343se_setup(char **cmdline_p)  static struct sh_machine_vector mv_7343se __initmv = {  	.mv_name = "SolutionEngine 7343",  	.mv_setup = sh7343se_setup, -	.mv_nr_irqs = SE7343_FPGA_IRQ_BASE + SE7343_FPGA_IRQ_NR,  	.mv_init_irq = init_7343se_IRQ,  }; diff --git a/arch/sh/boards/mach-se/770x/irq.c b/arch/sh/boards/mach-se/770x/irq.c index ec1fea571b5..1028c17b81b 100644 --- a/arch/sh/boards/mach-se/770x/irq.c +++ b/arch/sh/boards/mach-se/770x/irq.c @@ -96,13 +96,13 @@ static struct ipr_desc ipr_irq_desc = {  void __init init_se_IRQ(void)  {  	/* Disable all interrupts */ -	ctrl_outw(0, BCR_ILCRA); -	ctrl_outw(0, BCR_ILCRB); -	ctrl_outw(0, BCR_ILCRC); -	ctrl_outw(0, BCR_ILCRD); -	ctrl_outw(0, BCR_ILCRE); -	ctrl_outw(0, BCR_ILCRF); -	ctrl_outw(0, BCR_ILCRG); +	__raw_writew(0, BCR_ILCRA); +	__raw_writew(0, BCR_ILCRB); +	__raw_writew(0, BCR_ILCRC); +	__raw_writew(0, BCR_ILCRD); +	__raw_writew(0, BCR_ILCRE); +	__raw_writew(0, BCR_ILCRF); +	__raw_writew(0, BCR_ILCRG);  	register_ipr_controller(&ipr_irq_desc);  } diff --git a/arch/sh/boards/mach-se/770x/setup.c b/arch/sh/boards/mach-se/770x/setup.c index 527eb6b1261..66d39d1b090 100644 --- a/arch/sh/boards/mach-se/770x/setup.c +++ b/arch/sh/boards/mach-se/770x/setup.c @@ -93,15 +93,12 @@ static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 };  static struct heartbeat_data heartbeat_data = {  	.bit_pos	= heartbeat_bit_pos,  	.nr_bits	= ARRAY_SIZE(heartbeat_bit_pos), -	.regsize	= 16,  }; -static struct resource heartbeat_resources[] = { -	[0] = { -		.start	= PA_LED, -		.end	= PA_LED, -		.flags	= IORESOURCE_MEM, -	}, +static struct resource heartbeat_resource = { +	.start	= PA_LED, +	.end	= PA_LED, +	.flags	= IORESOURCE_MEM | IORESOURCE_MEM_16BIT,  };  static struct platform_device heartbeat_device = { @@ -110,8 +107,8 @@ static struct platform_device heartbeat_device = {  	.dev	= {  		.platform_data	= &heartbeat_data,  	}, -	.num_resources	= ARRAY_SIZE(heartbeat_resources), -	.resource	= heartbeat_resources, +	.num_resources	= 1, +	.resource	= &heartbeat_resource,  };  #if defined(CONFIG_CPU_SUBTYPE_SH7710) ||\ diff --git a/arch/sh/boards/mach-se/7721/irq.c b/arch/sh/boards/mach-se/7721/irq.c index b417acc4dad..d85022ea3f1 100644 --- a/arch/sh/boards/mach-se/7721/irq.c +++ b/arch/sh/boards/mach-se/7721/irq.c @@ -38,7 +38,7 @@ static DECLARE_INTC_DESC(intc_desc, "SE7721", vectors,  void __init init_se7721_IRQ(void)  {  	/* PPCR */ -	ctrl_outw(ctrl_inw(0xa4050118) & ~0x00ff, 0xa4050118); +	__raw_writew(__raw_readw(0xa4050118) & ~0x00ff, 0xa4050118);  	register_intc_controller(&intc_desc);  	intc_set_priority(MRSHPC_IRQ0, 0xf - MRSHPC_IRQ0); diff --git a/arch/sh/boards/mach-se/7721/setup.c b/arch/sh/boards/mach-se/7721/setup.c index 55af4c36b43..7416ad7ee53 100644 --- a/arch/sh/boards/mach-se/7721/setup.c +++ b/arch/sh/boards/mach-se/7721/setup.c @@ -23,15 +23,12 @@ static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 };  static struct heartbeat_data heartbeat_data = {  	.bit_pos	= heartbeat_bit_pos,  	.nr_bits	= ARRAY_SIZE(heartbeat_bit_pos), -	.regsize	= 16,  }; -static struct resource heartbeat_resources[] = { -	[0] = { -		.start	= PA_LED, -		.end	= PA_LED, -		.flags	= IORESOURCE_MEM, -	}, +static struct resource heartbeat_resource = { +	.start	= PA_LED, +	.end	= PA_LED, +	.flags	= IORESOURCE_MEM | IORESOURCE_MEM_16BIT,  };  static struct platform_device heartbeat_device = { @@ -40,8 +37,8 @@ static struct platform_device heartbeat_device = {  	.dev	= {  		.platform_data	= &heartbeat_data,  	}, -	.num_resources	= ARRAY_SIZE(heartbeat_resources), -	.resource	= heartbeat_resources, +	.num_resources	= 1, +	.resource	= &heartbeat_resource,  };  static struct resource cf_ide_resources[] = { @@ -83,10 +80,10 @@ device_initcall(se7721_devices_setup);  static void __init se7721_setup(char **cmdline_p)  {  	/* for USB */ -	ctrl_outw(0x0000, 0xA405010C);	/* PGCR */ -	ctrl_outw(0x0000, 0xA405010E);	/* PHCR */ -	ctrl_outw(0x00AA, 0xA4050118);	/* PPCR */ -	ctrl_outw(0x0000, 0xA4050124);	/* PSELA */ +	__raw_writew(0x0000, 0xA405010C);	/* PGCR */ +	__raw_writew(0x0000, 0xA405010E);	/* PHCR */ +	__raw_writew(0x00AA, 0xA4050118);	/* PPCR */ +	__raw_writew(0x0000, 0xA4050124);	/* PSELA */  }  /* diff --git a/arch/sh/boards/mach-se/7722/irq.c b/arch/sh/boards/mach-se/7722/irq.c index b221b6842b0..61605db04ee 100644 --- a/arch/sh/boards/mach-se/7722/irq.c +++ b/arch/sh/boards/mach-se/7722/irq.c @@ -21,13 +21,13 @@ unsigned int se7722_fpga_irq[SE7722_FPGA_IRQ_NR] = { 0, };  static void disable_se7722_irq(unsigned int irq)  {  	unsigned int bit = (unsigned int)get_irq_chip_data(irq); -	ctrl_outw(ctrl_inw(IRQ01_MASK) | 1 << bit, IRQ01_MASK); +	__raw_writew(__raw_readw(IRQ01_MASK) | 1 << bit, IRQ01_MASK);  }  static void enable_se7722_irq(unsigned int irq)  {  	unsigned int bit = (unsigned int)get_irq_chip_data(irq); -	ctrl_outw(ctrl_inw(IRQ01_MASK) & ~(1 << bit), IRQ01_MASK); +	__raw_writew(__raw_readw(IRQ01_MASK) & ~(1 << bit), IRQ01_MASK);  }  static struct irq_chip se7722_irq_chip __read_mostly = { @@ -39,7 +39,7 @@ static struct irq_chip se7722_irq_chip __read_mostly = {  static void se7722_irq_demux(unsigned int irq, struct irq_desc *desc)  { -	unsigned short intv = ctrl_inw(IRQ01_STS); +	unsigned short intv = __raw_readw(IRQ01_STS);  	unsigned int ext_irq = 0;  	intv &= (1 << SE7722_FPGA_IRQ_NR) - 1; @@ -59,8 +59,8 @@ void __init init_se7722_IRQ(void)  {  	int i, irq; -	ctrl_outw(0, IRQ01_MASK);       /* disable all irqs */ -	ctrl_outw(0x2000, 0xb03fffec);  /* mrshpc irq enable */ +	__raw_writew(0, IRQ01_MASK);       /* disable all irqs */ +	__raw_writew(0x2000, 0xb03fffec);  /* mrshpc irq enable */  	for (i = 0; i < SE7722_FPGA_IRQ_NR; i++) {  		irq = create_irq(); diff --git a/arch/sh/boards/mach-se/7722/setup.c b/arch/sh/boards/mach-se/7722/setup.c index b1cb9425b60..80a4e571b31 100644 --- a/arch/sh/boards/mach-se/7722/setup.c +++ b/arch/sh/boards/mach-se/7722/setup.c @@ -25,26 +25,17 @@  #include <cpu/sh7722.h>  /* Heartbeat */ -static struct heartbeat_data heartbeat_data = { -	.regsize = 16, -}; - -static struct resource heartbeat_resources[] = { -	[0] = { -		.start  = PA_LED, -		.end    = PA_LED, -		.flags  = IORESOURCE_MEM, -	}, +static struct resource heartbeat_resource = { +	.start  = PA_LED, +	.end    = PA_LED, +	.flags  = IORESOURCE_MEM | IORESOURCE_MEM_16BIT,  };  static struct platform_device heartbeat_device = {  	.name           = "heartbeat",  	.id             = -1, -	.dev = { -		.platform_data = &heartbeat_data, -	}, -	.num_resources  = ARRAY_SIZE(heartbeat_resources), -	.resource       = heartbeat_resources, +	.num_resources  = 1, +	.resource       = &heartbeat_resource,  };  /* SMC91x */ @@ -165,32 +156,32 @@ device_initcall(se7722_devices_setup);  static void __init se7722_setup(char **cmdline_p)  { -	ctrl_outw(0x010D, FPGA_OUT);    /* FPGA */ +	__raw_writew(0x010D, FPGA_OUT);    /* FPGA */ -	ctrl_outw(0x0000, PORT_PECR);   /* PORT E 1 = IRQ5 ,E 0 = BS */ -	ctrl_outw(0x1000, PORT_PJCR);   /* PORT J 1 = IRQ1,J 0 =IRQ0 */ +	__raw_writew(0x0000, PORT_PECR);   /* PORT E 1 = IRQ5 ,E 0 = BS */ +	__raw_writew(0x1000, PORT_PJCR);   /* PORT J 1 = IRQ1,J 0 =IRQ0 */  	/* LCDC I/O */ -	ctrl_outw(0x0020, PORT_PSELD); +	__raw_writew(0x0020, PORT_PSELD);  	/* SIOF1*/ -	ctrl_outw(0x0003, PORT_PSELB); -	ctrl_outw(0xe000, PORT_PSELC); -	ctrl_outw(0x0000, PORT_PKCR); +	__raw_writew(0x0003, PORT_PSELB); +	__raw_writew(0xe000, PORT_PSELC); +	__raw_writew(0x0000, PORT_PKCR);  	/* LCDC */ -	ctrl_outw(0x4020, PORT_PHCR); -	ctrl_outw(0x0000, PORT_PLCR); -	ctrl_outw(0x0000, PORT_PMCR); -	ctrl_outw(0x0002, PORT_PRCR); -	ctrl_outw(0x0000, PORT_PXCR);   /* LCDC,CS6A */ +	__raw_writew(0x4020, PORT_PHCR); +	__raw_writew(0x0000, PORT_PLCR); +	__raw_writew(0x0000, PORT_PMCR); +	__raw_writew(0x0002, PORT_PRCR); +	__raw_writew(0x0000, PORT_PXCR);   /* LCDC,CS6A */  	/* KEYSC */ -	ctrl_outw(0x0A10, PORT_PSELA); /* BS,SHHID2 */ -	ctrl_outw(0x0000, PORT_PYCR); -	ctrl_outw(0x0000, PORT_PZCR); -	ctrl_outw(ctrl_inw(PORT_HIZCRA) & ~0x4000, PORT_HIZCRA); -	ctrl_outw(ctrl_inw(PORT_HIZCRC) & ~0xc000, PORT_HIZCRC); +	__raw_writew(0x0A10, PORT_PSELA); /* BS,SHHID2 */ +	__raw_writew(0x0000, PORT_PYCR); +	__raw_writew(0x0000, PORT_PZCR); +	__raw_writew(__raw_readw(PORT_HIZCRA) & ~0x4000, PORT_HIZCRA); +	__raw_writew(__raw_readw(PORT_HIZCRC) & ~0xc000, PORT_HIZCRC);  }  /* diff --git a/arch/sh/boards/mach-se/7724/irq.c b/arch/sh/boards/mach-se/7724/irq.c index f76cf3b49f2..0942be2daef 100644 --- a/arch/sh/boards/mach-se/7724/irq.c +++ b/arch/sh/boards/mach-se/7724/irq.c @@ -72,14 +72,14 @@ static void disable_se7724_irq(unsigned int irq)  {  	struct fpga_irq set = get_fpga_irq(fpga2irq(irq));  	unsigned int bit = irq - set.base; -	ctrl_outw(ctrl_inw(set.mraddr) | 0x0001 << bit, set.mraddr); +	__raw_writew(__raw_readw(set.mraddr) | 0x0001 << bit, set.mraddr);  }  static void enable_se7724_irq(unsigned int irq)  {  	struct fpga_irq set = get_fpga_irq(fpga2irq(irq));  	unsigned int bit = irq - set.base; -	ctrl_outw(ctrl_inw(set.mraddr) & ~(0x0001 << bit), set.mraddr); +	__raw_writew(__raw_readw(set.mraddr) & ~(0x0001 << bit), set.mraddr);  }  static struct irq_chip se7724_irq_chip __read_mostly = { @@ -92,19 +92,16 @@ static struct irq_chip se7724_irq_chip __read_mostly = {  static void se7724_irq_demux(unsigned int irq, struct irq_desc *desc)  {  	struct fpga_irq set = get_fpga_irq(irq); -	unsigned short intv = ctrl_inw(set.sraddr); -	struct irq_desc *ext_desc; +	unsigned short intv = __raw_readw(set.sraddr);  	unsigned int ext_irq = set.base;  	intv &= set.mask; -	while (intv) { -		if (intv & 0x0001) { -			ext_desc = irq_desc + ext_irq; -			handle_level_irq(ext_irq, ext_desc); -		} -		intv >>= 1; -		ext_irq++; +	for (; intv; intv >>= 1, ext_irq++) { +		if (!(intv & 1)) +			continue; + +		generic_handle_irq(ext_irq);  	}  } @@ -113,20 +110,39 @@ static void se7724_irq_demux(unsigned int irq, struct irq_desc *desc)   */  void __init init_se7724_IRQ(void)  { -	int i; +	int i, nid = cpu_to_node(boot_cpu_data); + +	__raw_writew(0xffff, IRQ0_MR);  /* mask all */ +	__raw_writew(0xffff, IRQ1_MR);  /* mask all */ +	__raw_writew(0xffff, IRQ2_MR);  /* mask all */ +	__raw_writew(0x0000, IRQ0_SR);  /* clear irq */ +	__raw_writew(0x0000, IRQ1_SR);  /* clear irq */ +	__raw_writew(0x0000, IRQ2_SR);  /* clear irq */ +	__raw_writew(0x002a, IRQ_MODE); /* set irq type */ -	ctrl_outw(0xffff, IRQ0_MR);  /* mask all */ -	ctrl_outw(0xffff, IRQ1_MR);  /* mask all */ -	ctrl_outw(0xffff, IRQ2_MR);  /* mask all */ -	ctrl_outw(0x0000, IRQ0_SR);  /* clear irq */ -	ctrl_outw(0x0000, IRQ1_SR);  /* clear irq */ -	ctrl_outw(0x0000, IRQ2_SR);  /* clear irq */ -	ctrl_outw(0x002a, IRQ_MODE); /* set irq type */ +	for (i = 0; i < SE7724_FPGA_IRQ_NR; i++) { +		int irq, wanted; -	for (i = 0; i < SE7724_FPGA_IRQ_NR; i++) -		set_irq_chip_and_handler_name(SE7724_FPGA_IRQ_BASE + i, +		wanted = SE7724_FPGA_IRQ_BASE + i; + +		irq = create_irq_nr(wanted, nid); +		if (unlikely(irq == 0)) { +			pr_err("%s: failed hooking irq %d for FPGA\n", +			       __func__, wanted); +			return; +		} + +		if (unlikely(irq != wanted)) { +			pr_err("%s: got irq %d but wanted %d, bailing.\n", +			       __func__, irq, wanted); +			destroy_irq(irq); +			return; +		} + +		set_irq_chip_and_handler_name(irq,  					      &se7724_irq_chip,  					      handle_level_irq, "level"); +	}  	set_irq_chained_handler(IRQ0_IRQ, se7724_irq_demux);  	set_irq_type(IRQ0_IRQ, IRQ_TYPE_LEVEL_LOW); diff --git a/arch/sh/boards/mach-se/7724/sdram.S b/arch/sh/boards/mach-se/7724/sdram.S index 9040167d502..6fa4734d09c 100644 --- a/arch/sh/boards/mach-se/7724/sdram.S +++ b/arch/sh/boards/mach-se/7724/sdram.S @@ -39,6 +39,10 @@ ENTRY(ms7724se_sdram_leave_start)  	/* DBSC: put memory in auto-refresh mode */ +	mov.l	@(SH_SLEEP_MODE, r5), r0 +	tst	#SUSP_SH_RSTANDBY, r0 +	bf	resume_rstandby +  	ED 0xFD000040, 0x00000000 /* DBRFPDN0 */  	WAIT 1  	ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ @@ -49,4 +53,79 @@ ENTRY(ms7724se_sdram_leave_start)  	rts  	 nop +resume_rstandby: + +	/* CPG: setup clocks before restarting external memory */ + +	ED 0xA4150024, 0x00004000 /* PLLCR */ + +	mov.l	FRQCRA,r0 +	mov.l	@r0,r3 +	mov.l	KICK,r1 +	or	r1, r3 +	mov.l	r3, @r0 + +	mov.l	LSTATS,r0 +	mov	#1,r1 +WAIT_LSTATS: +	mov.l	@r0,r3 +	tst	r1,r3 +	bf	WAIT_LSTATS + +	/* DBSC: re-initialize and put in auto-refresh */ + +	ED 0xFD000108, 0x00000181 /* DBPDCNT0 */ +	ED 0xFD000020, 0x015B0002 /* DBCONF */ +	ED 0xFD000030, 0x03071502 /* DBTR0 */ +	ED 0xFD000034, 0x02020102 /* DBTR1 */ +	ED 0xFD000038, 0x01090405 /* DBTR2 */ +	ED 0xFD00003C, 0x00000002 /* DBTR3 */ +	ED 0xFD000008, 0x00000005 /* DBKIND */ +	ED 0xFD000040, 0x00000001 /* DBRFPDN0 */ +	ED 0xFD000040, 0x00000000 /* DBRFPDN0 */ +	ED 0xFD000018, 0x00000001 /* DBCKECNT */ + +	mov	#100,r0 +WAIT_400NS: +	dt	r0 +	bf	WAIT_400NS + +	ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ +	ED 0xFD000060, 0x00020000 /* DBMRCNT (EMR2) */ +	ED 0xFD000060, 0x00030000 /* DBMRCNT (EMR3) */ +	ED 0xFD000060, 0x00010004 /* DBMRCNT (EMR) */ +	ED 0xFD000060, 0x00000532 /* DBMRCNT (MRS) */ +	ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ +	ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ +	ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ +	ED 0xFD000060, 0x00000432 /* DBMRCNT (MRS) */ +	ED 0xFD000060, 0x000103c0 /* DBMRCNT (EMR) */ +	ED 0xFD000060, 0x00010040 /* DBMRCNT (EMR) */ + +	mov	#100,r0 +WAIT_400NS_2: +	dt	r0 +	bf	WAIT_400NS_2 + +	ED 0xFD000010, 0x00000001 /* DBEN */ +	ED 0xFD000044, 0x0000050f /* DBRFPDN1 */ +	ED 0xFD000048, 0x236800e6 /* DBRFPDN2 */ + +	mov.l	DUMMY,r0 +	mov.l	@r0, r1 /* force single dummy read */ + +	ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */ +	ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */ +	ED 0xFD000108, 0x00000080 /* DBPDCNT0 */ +	ED 0xFD000040, 0x00010000 /* DBRFPDN0 */ + +	rts +	 nop + +	.balign 4 +DUMMY:	.long	0xac400000 +FRQCRA:	.long	0xa4150000 +KICK:	.long	0x80000000 +LSTATS:	.long	0xa4150060 +  ENTRY(ms7724se_sdram_leave_end) diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index 858ecb25d46..f9b82546c2d 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c @@ -14,6 +14,7 @@  #include <linux/device.h>  #include <linux/interrupt.h>  #include <linux/platform_device.h> +#include <linux/mfd/sh_mobile_sdhi.h>  #include <linux/mtd/physmap.h>  #include <linux/delay.h>  #include <linux/smc91x.h> @@ -52,27 +53,25 @@   * and change SW41 to use 720p   */ -/* Heartbeat */ -static struct heartbeat_data heartbeat_data = { -	.regsize = 16, -}; +/* + * about sound + * + * This setup.c supports FSI slave mode. + * Please change J20, J21, J22 pin to 1-2 connection. + */ -static struct resource heartbeat_resources[] = { -	[0] = { -		.start  = PA_LED, -		.end    = PA_LED, -		.flags  = IORESOURCE_MEM, -	}, +/* Heartbeat */ +static struct resource heartbeat_resource = { +	.start  = PA_LED, +	.end    = PA_LED, +	.flags  = IORESOURCE_MEM | IORESOURCE_MEM_16BIT,  };  static struct platform_device heartbeat_device = {  	.name           = "heartbeat",  	.id             = -1, -	.dev = { -		.platform_data = &heartbeat_data, -	}, -	.num_resources  = ARRAY_SIZE(heartbeat_resources), -	.resource       = heartbeat_resources, +	.num_resources  = 1, +	.resource       = &heartbeat_resource,  };  /* LAN91C111 */ @@ -265,12 +264,12 @@ static struct platform_device ceu1_device = {  #define FCLKACR		0xa4150008  static void fsimck_init(struct clk *clk)  { -	u32 status = ctrl_inl(clk->enable_reg); +	u32 status = __raw_readl(clk->enable_reg);  	/* use external clock */  	status &= ~0x000000ff;  	status |= 0x00000080; -	ctrl_outl(status, clk->enable_reg); +	__raw_writel(status, clk->enable_reg);  }  static struct clk_ops fsimck_clk_ops = { @@ -278,13 +277,12 @@ static struct clk_ops fsimck_clk_ops = {  };  static struct clk fsimcka_clk = { -	.name		= "fsimcka_clk", -	.id		= -1,  	.ops		= &fsimck_clk_ops,  	.enable_reg	= (void __iomem *)FCLKACR,  	.rate		= 0, /* unknown */  }; +/* change J20, J21, J22 pin to 1-2 connection to use slave mode */  struct sh_fsi_platform_info fsi_info = {  	.porta_flags = SH_FSI_BRS_INV |  		       SH_FSI_OUT_SLAVE_MODE | @@ -322,7 +320,7 @@ static struct platform_device fsi_device = {  /* KEYSC in SoC (Needs SW33-2 set to ON) */  static struct sh_keysc_info keysc_info = {  	.mode = SH_KEYSC_MODE_1, -	.scan_timing = 10, +	.scan_timing = 3,  	.delay = 50,  	.keycodes = {  		KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, @@ -460,16 +458,24 @@ static struct resource sdhi0_cn7_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 101, +		.start  = 100,  		.flags  = IORESOURCE_IRQ,  	},  }; +static struct sh_mobile_sdhi_info sh7724_sdhi0_data = { +	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX, +	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX, +}; +  static struct platform_device sdhi0_cn7_device = {  	.name           = "sh_mobile_sdhi",  	.id		= 0,  	.num_resources  = ARRAY_SIZE(sdhi0_cn7_resources),  	.resource       = sdhi0_cn7_resources, +	.dev = { +		.platform_data	= &sh7724_sdhi0_data, +	},  	.archdata = {  		.hwblk_id = HWBLK_SDHI0,  	}, @@ -483,21 +489,95 @@ static struct resource sdhi1_cn8_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 24, +		.start  = 23,  		.flags  = IORESOURCE_IRQ,  	},  }; +static struct sh_mobile_sdhi_info sh7724_sdhi1_data = { +	.dma_slave_tx	= SHDMA_SLAVE_SDHI1_TX, +	.dma_slave_rx	= SHDMA_SLAVE_SDHI1_RX, +}; +  static struct platform_device sdhi1_cn8_device = {  	.name           = "sh_mobile_sdhi",  	.id		= 1,  	.num_resources  = ARRAY_SIZE(sdhi1_cn8_resources),  	.resource       = sdhi1_cn8_resources, +	.dev = { +		.platform_data	= &sh7724_sdhi1_data, +	},  	.archdata = {  		.hwblk_id = HWBLK_SDHI1,  	},  }; +/* IrDA */ +static struct resource irda_resources[] = { +	[0] = { +		.name	= "IrDA", +		.start  = 0xA45D0000, +		.end    = 0xA45D0049, +		.flags  = IORESOURCE_MEM, +	}, +	[1] = { +		.start  = 20, +		.flags  = IORESOURCE_IRQ, +	}, +}; + +static struct platform_device irda_device = { +	.name           = "sh_sir", +	.num_resources  = ARRAY_SIZE(irda_resources), +	.resource       = irda_resources, +}; + +#include <media/ak881x.h> +#include <media/sh_vou.h> + +struct ak881x_pdata ak881x_pdata = { +	.flags = AK881X_IF_MODE_SLAVE, +}; + +static struct i2c_board_info ak8813 = { +	/* With open J18 jumper address is 0x21 */ +	I2C_BOARD_INFO("ak8813", 0x20), +	.platform_data = &ak881x_pdata, +}; + +struct sh_vou_pdata sh_vou_pdata = { +	.bus_fmt	= SH_VOU_BUS_8BIT, +	.flags		= SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, +	.board_info	= &ak8813, +	.i2c_adap	= 0, +	.module_name	= "ak881x", +}; + +static struct resource sh_vou_resources[] = { +	[0] = { +		.start  = 0xfe960000, +		.end    = 0xfe962043, +		.flags  = IORESOURCE_MEM, +	}, +	[1] = { +		.start  = 55, +		.flags  = IORESOURCE_IRQ, +	}, +}; + +static struct platform_device vou_device = { +	.name           = "sh-vou", +	.id		= -1, +	.num_resources  = ARRAY_SIZE(sh_vou_resources), +	.resource       = sh_vou_resources, +	.dev		= { +		.platform_data	= &sh_vou_pdata, +	}, +	.archdata	= { +		.hwblk_id	= HWBLK_VOU, +	}, +}; +  static struct platform_device *ms7724se_devices[] __initdata = {  	&heartbeat_device,  	&smc91x_eth_device, @@ -512,6 +592,8 @@ static struct platform_device *ms7724se_devices[] __initdata = {  	&fsi_device,  	&sdhi0_cn7_device,  	&sdhi1_cn8_device, +	&irda_device, +	&vou_device,  };  /* I2C device */ @@ -531,7 +613,7 @@ static int __init sh_eth_is_eeprom_ready(void)  	int t = 10000;  	while (t--) { -		if (!ctrl_inw(EEPROM_STAT)) +		if (!__raw_readw(EEPROM_STAT))  			return 1;  		udelay(1);  	} @@ -551,13 +633,13 @@ static void __init sh_eth_init(void)  	/* read MAC addr from EEPROM */  	for (i = 0 ; i < 3 ; i++) { -		ctrl_outw(0x0, EEPROM_OP); /* read */ -		ctrl_outw(i*2, EEPROM_ADR); -		ctrl_outw(0x1, EEPROM_STRT); +		__raw_writew(0x0, EEPROM_OP); /* read */ +		__raw_writew(i*2, EEPROM_ADR); +		__raw_writew(0x1, EEPROM_STRT);  		if (!sh_eth_is_eeprom_ready())  			return; -		mac = ctrl_inw(EEPROM_DATA); +		mac = __raw_readw(EEPROM_DATA);  		sh_eth_plat.mac_addr[i << 1] = mac & 0xff;  		sh_eth_plat.mac_addr[(i << 1) + 1] = mac >> 8;  	} @@ -594,28 +676,42 @@ arch_initcall(arch_setup);  static int __init devices_setup(void)  { -	u16 sw = ctrl_inw(SW4140); /* select camera, monitor */ -	struct clk *fsia_clk; +	u16 sw = __raw_readw(SW4140); /* select camera, monitor */ +	struct clk *clk; +	u16 fpga_out;  	/* register board specific self-refresh code */ -	sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF, +	sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | +					SUSP_SH_RSTANDBY,  					&ms7724se_sdram_enter_start,  					&ms7724se_sdram_enter_end,  					&ms7724se_sdram_leave_start,  					&ms7724se_sdram_leave_end);  	/* Reset Release */ -	ctrl_outw(ctrl_inw(FPGA_OUT) & -		  ~((1 << 1)  | /* LAN */ -		    (1 << 6)  | /* VIDEO DAC */ -		    (1 << 7)  | /* AK4643 */ -		    (1 << 12) | /* USB0 */ -		    (1 << 14)), /* RMII */ -		  FPGA_OUT); +	fpga_out = __raw_readw(FPGA_OUT); +	/* bit4: NTSC_PDN, bit5: NTSC_RESET */ +	fpga_out &= ~((1 << 1)  | /* LAN */ +		      (1 << 4)  | /* AK8813 PDN */ +		      (1 << 5)  | /* AK8813 RESET */ +		      (1 << 6)  | /* VIDEO DAC */ +		      (1 << 7)  | /* AK4643 */ +		      (1 << 8)  | /* IrDA */ +		      (1 << 12) | /* USB0 */ +		      (1 << 14)); /* RMII */ +	__raw_writew(fpga_out | (1 << 4), FPGA_OUT); + +	udelay(10); + +	/* AK8813 RESET */ +	__raw_writew(fpga_out | (1 << 5), FPGA_OUT); + +	udelay(10); + +	__raw_writew(fpga_out, FPGA_OUT);  	/* turn on USB clocks, use external clock */ -	ctrl_outw((ctrl_inw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); +	__raw_writew((__raw_readw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); -#ifdef CONFIG_PM  	/* Let LED9 show STATUS2 */  	gpio_request(GPIO_FN_STATUS2, NULL); @@ -624,28 +720,12 @@ static int __init devices_setup(void)  	/* Lit LED11 show PDSTATUS */  	gpio_request(GPIO_FN_PDSTATUS, NULL); -#else -	/* Lit LED9 */ -	gpio_request(GPIO_PTJ6, NULL); -	gpio_direction_output(GPIO_PTJ6, 1); -	gpio_export(GPIO_PTJ6, 0); - -	/* Lit LED10 */ -	gpio_request(GPIO_PTJ5, NULL); -	gpio_direction_output(GPIO_PTJ5, 1); -	gpio_export(GPIO_PTJ5, 0); - -	/* Lit LED11 */ -	gpio_request(GPIO_PTJ7, NULL); -	gpio_direction_output(GPIO_PTJ7, 1); -	gpio_export(GPIO_PTJ7, 0); -#endif  	/* enable USB0 port */ -	ctrl_outw(0x0600, 0xa40501d4); +	__raw_writew(0x0600, 0xa40501d4);  	/* enable USB1 port */ -	ctrl_outw(0x0600, 0xa4050192); +	__raw_writew(0x0600, 0xa4050192);  	/* enable IRQ 0,1,2 */  	gpio_request(GPIO_FN_INTC_IRQ0, NULL); @@ -693,7 +773,7 @@ static int __init devices_setup(void)  	gpio_request(GPIO_FN_LCDVCPWC, NULL);  	gpio_request(GPIO_FN_LCDRD,    NULL);  	gpio_request(GPIO_FN_LCDLCLK,  NULL); -	ctrl_outw((ctrl_inw(PORT_HIZA) & ~0x0001), PORT_HIZA); +	__raw_writew((__raw_readw(PORT_HIZA) & ~0x0001), PORT_HIZA);  	/* enable CEU0 */  	gpio_request(GPIO_FN_VIO0_D15, NULL); @@ -764,13 +844,22 @@ static int __init devices_setup(void)  	gpio_request(GPIO_FN_CLKAUDIOBO, NULL);  	gpio_request(GPIO_FN_FSIIASD,    NULL); +	/* set SPU2 clock to 83.4 MHz */ +	clk = clk_get(NULL, "spu_clk"); +	if (clk) { +		clk_set_rate(clk, clk_round_rate(clk, 83333333)); +		clk_put(clk); +	} +  	/* change parent of FSI A */ -	fsia_clk = clk_get(NULL, "fsia_clk"); -	clk_register(&fsimcka_clk); -	clk_set_parent(fsia_clk, &fsimcka_clk); -	clk_set_rate(fsia_clk, 11000); -	clk_set_rate(&fsimcka_clk, 11000); -	clk_put(fsia_clk); +	clk = clk_get(NULL, "fsia_clk"); +	if (clk) { +		clk_register(&fsimcka_clk); +		clk_set_parent(clk, &fsimcka_clk); +		clk_set_rate(clk, 11000); +		clk_set_rate(&fsimcka_clk, 11000); +		clk_put(clk); +	}  	/* SDHI0 connected to cn7 */  	gpio_request(GPIO_FN_SDHI0CD, NULL); @@ -792,6 +881,10 @@ static int __init devices_setup(void)  	gpio_request(GPIO_FN_SDHI1CMD, NULL);  	gpio_request(GPIO_FN_SDHI1CLK, NULL); +	/* enable IrDA */ +	gpio_request(GPIO_FN_IRDA_OUT, NULL); +	gpio_request(GPIO_FN_IRDA_IN,  NULL); +  	/*  	 * enable SH-Eth  	 * @@ -846,6 +939,20 @@ static int __init devices_setup(void)  		lcdc_info.ch[0].flags          = LCDC_FLAGS_DWPOL;  	} +	/* VOU */ +	gpio_request(GPIO_FN_DV_D15, NULL); +	gpio_request(GPIO_FN_DV_D14, NULL); +	gpio_request(GPIO_FN_DV_D13, NULL); +	gpio_request(GPIO_FN_DV_D12, NULL); +	gpio_request(GPIO_FN_DV_D11, NULL); +	gpio_request(GPIO_FN_DV_D10, NULL); +	gpio_request(GPIO_FN_DV_D9, NULL); +	gpio_request(GPIO_FN_DV_D8, NULL); +	gpio_request(GPIO_FN_DV_CLKI, NULL); +	gpio_request(GPIO_FN_DV_CLK, NULL); +	gpio_request(GPIO_FN_DV_VSYNC, NULL); +	gpio_request(GPIO_FN_DV_HSYNC, NULL); +  	return platform_add_devices(ms7724se_devices,  				    ARRAY_SIZE(ms7724se_devices));  } diff --git a/arch/sh/boards/mach-se/7780/irq.c b/arch/sh/boards/mach-se/7780/irq.c index 121744c0871..d5c9edc172a 100644 --- a/arch/sh/boards/mach-se/7780/irq.c +++ b/arch/sh/boards/mach-se/7780/irq.c @@ -24,30 +24,30 @@  void __init init_se7780_IRQ(void)  {  	/* enable all interrupt at FPGA */ -	ctrl_outw(0, FPGA_INTMSK1); +	__raw_writew(0, FPGA_INTMSK1);  	/* mask SM501 interrupt */ -	ctrl_outw((ctrl_inw(FPGA_INTMSK1) | 0x0002), FPGA_INTMSK1); +	__raw_writew((__raw_readw(FPGA_INTMSK1) | 0x0002), FPGA_INTMSK1);  	/* enable all interrupt at FPGA */ -	ctrl_outw(0, FPGA_INTMSK2); +	__raw_writew(0, FPGA_INTMSK2);  	/* set FPGA INTSEL register */  	/* FPGA + 0x06 */ -	ctrl_outw( ((IRQPIN_SM501 << IRQPOS_SM501) | +	__raw_writew( ((IRQPIN_SM501 << IRQPOS_SM501) |  		(IRQPIN_SMC91CX << IRQPOS_SMC91CX)), FPGA_INTSEL1);  	/* FPGA + 0x08 */ -	ctrl_outw(((IRQPIN_EXTINT4 << IRQPOS_EXTINT4) | +	__raw_writew(((IRQPIN_EXTINT4 << IRQPOS_EXTINT4) |  		(IRQPIN_EXTINT3 << IRQPOS_EXTINT3) |  		(IRQPIN_EXTINT2 << IRQPOS_EXTINT2) |  		(IRQPIN_EXTINT1 << IRQPOS_EXTINT1)), FPGA_INTSEL2);  	/* FPGA + 0x0A */ -	ctrl_outw((IRQPIN_PCCPW << IRQPOS_PCCPW), FPGA_INTSEL3); +	__raw_writew((IRQPIN_PCCPW << IRQPOS_PCCPW), FPGA_INTSEL3);  	plat_irq_setup_pins(IRQ_MODE_IRQ); /* install handlers for IRQ0-7 */  	/* ICR1: detect low level(for 2ndcut) */ -	ctrl_outl(0xAAAA0000, INTC_ICR1); +	__raw_writel(0xAAAA0000, INTC_ICR1);  	/*  	 * FPGA PCISEL register initialize @@ -63,6 +63,6 @@ void __init init_se7780_IRQ(void)  	 *  INTD || INTD  | INTC  |  --   | INTA  	 *  -------------------------------------  	 */ -	ctrl_outw(0x0013, FPGA_PCI_INTSEL1); -	ctrl_outw(0xE402, FPGA_PCI_INTSEL2); +	__raw_writew(0x0013, FPGA_PCI_INTSEL1); +	__raw_writew(0xE402, FPGA_PCI_INTSEL2);  } diff --git a/arch/sh/boards/mach-se/7780/setup.c b/arch/sh/boards/mach-se/7780/setup.c index 1d3a867e94e..6f7c207138e 100644 --- a/arch/sh/boards/mach-se/7780/setup.c +++ b/arch/sh/boards/mach-se/7780/setup.c @@ -17,26 +17,17 @@  #include <asm/heartbeat.h>  /* Heartbeat */ -static struct heartbeat_data heartbeat_data = { -	.regsize = 16, -}; - -static struct resource heartbeat_resources[] = { -	[0] = { -		.start  = PA_LED, -		.end    = PA_LED, -		.flags  = IORESOURCE_MEM, -	}, +static struct resource heartbeat_resource = { +	.start  = PA_LED, +	.end    = PA_LED, +	.flags  = IORESOURCE_MEM | IORESOURCE_MEM_16BIT,  };  static struct platform_device heartbeat_device = {  	.name           = "heartbeat",  	.id             = -1, -	.dev = { -		.platform_data = &heartbeat_data, -	}, -	.num_resources  = ARRAY_SIZE(heartbeat_resources), -	.resource       = heartbeat_resources, +	.num_resources  = 1, +	.resource       = &heartbeat_resource,  };  /* SMC91x */ @@ -84,14 +75,14 @@ device_initcall(se7780_devices_setup);  static void __init se7780_setup(char **cmdline_p)  {  	/* "SH-Linux" on LED Display */ -	ctrl_outw( 'S' , PA_LED_DISP + (DISP_SEL0_ADDR << 1) ); -	ctrl_outw( 'H' , PA_LED_DISP + (DISP_SEL1_ADDR << 1) ); -	ctrl_outw( '-' , PA_LED_DISP + (DISP_SEL2_ADDR << 1) ); -	ctrl_outw( 'L' , PA_LED_DISP + (DISP_SEL3_ADDR << 1) ); -	ctrl_outw( 'i' , PA_LED_DISP + (DISP_SEL4_ADDR << 1) ); -	ctrl_outw( 'n' , PA_LED_DISP + (DISP_SEL5_ADDR << 1) ); -	ctrl_outw( 'u' , PA_LED_DISP + (DISP_SEL6_ADDR << 1) ); -	ctrl_outw( 'x' , PA_LED_DISP + (DISP_SEL7_ADDR << 1) ); +	__raw_writew( 'S' , PA_LED_DISP + (DISP_SEL0_ADDR << 1) ); +	__raw_writew( 'H' , PA_LED_DISP + (DISP_SEL1_ADDR << 1) ); +	__raw_writew( '-' , PA_LED_DISP + (DISP_SEL2_ADDR << 1) ); +	__raw_writew( 'L' , PA_LED_DISP + (DISP_SEL3_ADDR << 1) ); +	__raw_writew( 'i' , PA_LED_DISP + (DISP_SEL4_ADDR << 1) ); +	__raw_writew( 'n' , PA_LED_DISP + (DISP_SEL5_ADDR << 1) ); +	__raw_writew( 'u' , PA_LED_DISP + (DISP_SEL6_ADDR << 1) ); +	__raw_writew( 'x' , PA_LED_DISP + (DISP_SEL7_ADDR << 1) );  	printk(KERN_INFO "Hitachi UL Solutions Engine 7780SE03 support.\n"); @@ -102,15 +93,15 @@ static void __init se7780_setup(char **cmdline_p)  	 *   REQ2/GNT2 -> Serial ATA  	 *   REQ3/GNT3 -> PCI slot  	 */ -	ctrl_outw(0x0213, FPGA_REQSEL); +	__raw_writew(0x0213, FPGA_REQSEL);  	/* GPIO setting */ -	ctrl_outw(0x0000, GPIO_PECR); -	ctrl_outw(ctrl_inw(GPIO_PHCR)&0xfff3, GPIO_PHCR); -	ctrl_outw(0x0c00, GPIO_PMSELR); +	__raw_writew(0x0000, GPIO_PECR); +	__raw_writew(__raw_readw(GPIO_PHCR)&0xfff3, GPIO_PHCR); +	__raw_writew(0x0c00, GPIO_PMSELR);  	/* iVDR Power ON */ -	ctrl_outw(0x0001, FPGA_IVDRPW); +	__raw_writew(0x0001, FPGA_IVDRPW);  }  /* diff --git a/arch/sh/boards/mach-sh03/rtc.c b/arch/sh/boards/mach-sh03/rtc.c index a8b9f844ab5..1b200990500 100644 --- a/arch/sh/boards/mach-sh03/rtc.c +++ b/arch/sh/boards/mach-sh03/rtc.c @@ -44,15 +44,15 @@ unsigned long get_cmos_time(void)  	spin_lock(&sh03_rtc_lock);   again:  	do { -		sec  = (ctrl_inb(RTC_SEC1) & 0xf) + (ctrl_inb(RTC_SEC10) & 0x7) * 10; -		min  = (ctrl_inb(RTC_MIN1) & 0xf) + (ctrl_inb(RTC_MIN10) & 0xf) * 10; -		hour = (ctrl_inb(RTC_HOU1) & 0xf) + (ctrl_inb(RTC_HOU10) & 0xf) * 10; -		day  = (ctrl_inb(RTC_DAY1) & 0xf) + (ctrl_inb(RTC_DAY10) & 0xf) * 10; -		mon  = (ctrl_inb(RTC_MON1) & 0xf) + (ctrl_inb(RTC_MON10) & 0xf) * 10; -		year = (ctrl_inb(RTC_YEA1) & 0xf) + (ctrl_inb(RTC_YEA10) & 0xf) * 10 -		     + (ctrl_inb(RTC_YEA100 ) & 0xf) * 100 -		     + (ctrl_inb(RTC_YEA1000) & 0xf) * 1000; -	} while (sec != (ctrl_inb(RTC_SEC1) & 0xf) + (ctrl_inb(RTC_SEC10) & 0x7) * 10); +		sec  = (__raw_readb(RTC_SEC1) & 0xf) + (__raw_readb(RTC_SEC10) & 0x7) * 10; +		min  = (__raw_readb(RTC_MIN1) & 0xf) + (__raw_readb(RTC_MIN10) & 0xf) * 10; +		hour = (__raw_readb(RTC_HOU1) & 0xf) + (__raw_readb(RTC_HOU10) & 0xf) * 10; +		day  = (__raw_readb(RTC_DAY1) & 0xf) + (__raw_readb(RTC_DAY10) & 0xf) * 10; +		mon  = (__raw_readb(RTC_MON1) & 0xf) + (__raw_readb(RTC_MON10) & 0xf) * 10; +		year = (__raw_readb(RTC_YEA1) & 0xf) + (__raw_readb(RTC_YEA10) & 0xf) * 10 +		     + (__raw_readb(RTC_YEA100 ) & 0xf) * 100 +		     + (__raw_readb(RTC_YEA1000) & 0xf) * 1000; +	} while (sec != (__raw_readb(RTC_SEC1) & 0xf) + (__raw_readb(RTC_SEC10) & 0x7) * 10);  	if (year == 0 || mon < 1 || mon > 12 || day > 31 || day < 1 ||  	    hour > 23 || min > 59 || sec > 59) {  		printk(KERN_ERR @@ -60,16 +60,16 @@ unsigned long get_cmos_time(void)  		printk("year=%d, mon=%d, day=%d, hour=%d, min=%d, sec=%d\n",  		       year, mon, day, hour, min, sec); -		ctrl_outb(0, RTC_SEC1); ctrl_outb(0, RTC_SEC10); -		ctrl_outb(0, RTC_MIN1); ctrl_outb(0, RTC_MIN10); -		ctrl_outb(0, RTC_HOU1); ctrl_outb(0, RTC_HOU10); -		ctrl_outb(6, RTC_WEE1); -		ctrl_outb(1, RTC_DAY1); ctrl_outb(0, RTC_DAY10); -		ctrl_outb(1, RTC_MON1); ctrl_outb(0, RTC_MON10); -		ctrl_outb(0, RTC_YEA1); ctrl_outb(0, RTC_YEA10); -		ctrl_outb(0, RTC_YEA100); -		ctrl_outb(2, RTC_YEA1000); -		ctrl_outb(0, RTC_CTL); +		__raw_writeb(0, RTC_SEC1); __raw_writeb(0, RTC_SEC10); +		__raw_writeb(0, RTC_MIN1); __raw_writeb(0, RTC_MIN10); +		__raw_writeb(0, RTC_HOU1); __raw_writeb(0, RTC_HOU10); +		__raw_writeb(6, RTC_WEE1); +		__raw_writeb(1, RTC_DAY1); __raw_writeb(0, RTC_DAY10); +		__raw_writeb(1, RTC_MON1); __raw_writeb(0, RTC_MON10); +		__raw_writeb(0, RTC_YEA1); __raw_writeb(0, RTC_YEA10); +		__raw_writeb(0, RTC_YEA100); +		__raw_writeb(2, RTC_YEA1000); +		__raw_writeb(0, RTC_CTL);  		goto again;  	} @@ -93,9 +93,9 @@ static int set_rtc_mmss(unsigned long nowtime)  	/* gets recalled with irq locally disabled */  	spin_lock(&sh03_rtc_lock);  	for (i = 0 ; i < 1000000 ; i++)	/* may take up to 1 second... */ -		if (!(ctrl_inb(RTC_CTL) & RTC_BUSY)) +		if (!(__raw_readb(RTC_CTL) & RTC_BUSY))  			break; -	cmos_minutes = (ctrl_inb(RTC_MIN1) & 0xf) + (ctrl_inb(RTC_MIN10) & 0xf) * 10; +	cmos_minutes = (__raw_readb(RTC_MIN1) & 0xf) + (__raw_readb(RTC_MIN10) & 0xf) * 10;  	real_seconds = nowtime % 60;  	real_minutes = nowtime / 60;  	if (((abs(real_minutes - cmos_minutes) + 15)/30) & 1) @@ -103,10 +103,10 @@ static int set_rtc_mmss(unsigned long nowtime)  	real_minutes %= 60;  	if (abs(real_minutes - cmos_minutes) < 30) { -		ctrl_outb(real_seconds % 10, RTC_SEC1); -		ctrl_outb(real_seconds / 10, RTC_SEC10); -		ctrl_outb(real_minutes % 10, RTC_MIN1); -		ctrl_outb(real_minutes / 10, RTC_MIN10); +		__raw_writeb(real_seconds % 10, RTC_SEC1); +		__raw_writeb(real_seconds / 10, RTC_SEC10); +		__raw_writeb(real_minutes % 10, RTC_MIN1); +		__raw_writeb(real_minutes / 10, RTC_MIN10);  	} else {  		printk(KERN_WARNING  		       "set_rtc_mmss: can't update from %d to %d\n", diff --git a/arch/sh/boards/mach-sh03/setup.c b/arch/sh/boards/mach-sh03/setup.c index 74cfb4b8b03..af4a0c012a9 100644 --- a/arch/sh/boards/mach-sh03/setup.c +++ b/arch/sh/boards/mach-sh03/setup.c @@ -82,7 +82,7 @@ static int __init sh03_devices_setup(void)  	/* open I/O area window */  	paddrbase = virt_to_phys((void *)PA_AREA5_IO);  	prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16); -	cf_ide_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot); +	cf_ide_base = ioremap_prot(paddrbase, PAGE_SIZE, pgprot_val(prot));  	if (!cf_ide_base) {  		printk("allocate_cf_area : can't open CF I/O window!\n");  		return -ENOMEM; diff --git a/arch/sh/boards/mach-sh7763rdp/irq.c b/arch/sh/boards/mach-sh7763rdp/irq.c index d8ebfa7d8c7..add698c8f2b 100644 --- a/arch/sh/boards/mach-sh7763rdp/irq.c +++ b/arch/sh/boards/mach-sh7763rdp/irq.c @@ -28,18 +28,18 @@  void __init init_sh7763rdp_IRQ(void)  {  	/* GPIO enabled */ -	ctrl_outl(1 << 25, INTC_INT2MSKCR); +	__raw_writel(1 << 25, INTC_INT2MSKCR);  	/* enable GPIO interrupts */ -	ctrl_outl((ctrl_inl(INTC_INT2PRI7) & 0xFF00FFFF) | 0x000F0000, +	__raw_writel((__raw_readl(INTC_INT2PRI7) & 0xFF00FFFF) | 0x000F0000,  		  INTC_INT2PRI7);  	/* USBH enabled */ -	ctrl_outl(1 << 17, INTC_INT2MSKCR1); +	__raw_writel(1 << 17, INTC_INT2MSKCR1);  	/* GETHER enabled */ -	ctrl_outl(1 << 16, INTC_INT2MSKCR1); +	__raw_writel(1 << 16, INTC_INT2MSKCR1);  	/* DMAC enabled */ -	ctrl_outl(1 << 8, INTC_INT2MSKCR); +	__raw_writel(1 << 8, INTC_INT2MSKCR);  } diff --git a/arch/sh/boards/mach-sh7763rdp/setup.c b/arch/sh/boards/mach-sh7763rdp/setup.c index 390534a0b35..f64a6918224 100644 --- a/arch/sh/boards/mach-sh7763rdp/setup.c +++ b/arch/sh/boards/mach-sh7763rdp/setup.c @@ -158,50 +158,50 @@ device_initcall(sh7763rdp_devices_setup);  static void __init sh7763rdp_setup(char **cmdline_p)  {  	/* Board version check */ -	if (ctrl_inw(CPLD_BOARD_ID_ERV_REG) == 0xECB1) +	if (__raw_readw(CPLD_BOARD_ID_ERV_REG) == 0xECB1)  		printk(KERN_INFO "RTE Standard Configuration\n");  	else  		printk(KERN_INFO "RTA Standard Configuration\n");  	/* USB pin select bits (clear bit 5-2 to 0) */ -	ctrl_outw((ctrl_inw(PORT_PSEL2) & 0xFFC3), PORT_PSEL2); +	__raw_writew((__raw_readw(PORT_PSEL2) & 0xFFC3), PORT_PSEL2);  	/* USBH setup port I controls to other (clear bits 4-9 to 0) */ -	ctrl_outw(ctrl_inw(PORT_PICR) & 0xFC0F, PORT_PICR); +	__raw_writew(__raw_readw(PORT_PICR) & 0xFC0F, PORT_PICR);  	/* Select USB Host controller */ -	ctrl_outw(0x00, USB_USBHSC); +	__raw_writew(0x00, USB_USBHSC);  	/* For LCD */  	/* set PTJ7-1, bits 15-2 of PJCR to 0 */ -	ctrl_outw(ctrl_inw(PORT_PJCR) & 0x0003, PORT_PJCR); +	__raw_writew(__raw_readw(PORT_PJCR) & 0x0003, PORT_PJCR);  	/* set PTI5, bits 11-10 of PICR to 0 */ -	ctrl_outw(ctrl_inw(PORT_PICR) & 0xF3FF, PORT_PICR); -	ctrl_outw(0, PORT_PKCR); -	ctrl_outw(0, PORT_PLCR); +	__raw_writew(__raw_readw(PORT_PICR) & 0xF3FF, PORT_PICR); +	__raw_writew(0, PORT_PKCR); +	__raw_writew(0, PORT_PLCR);  	/* set PSEL2 bits 14-8, 5-4, of PSEL2 to 0 */ -	ctrl_outw((ctrl_inw(PORT_PSEL2) & 0x00C0), PORT_PSEL2); +	__raw_writew((__raw_readw(PORT_PSEL2) & 0x00C0), PORT_PSEL2);  	/* set PSEL3 bits 14-12, 6-4, 2-0 of PSEL3 to 0 */ -	ctrl_outw((ctrl_inw(PORT_PSEL3) & 0x0700), PORT_PSEL3); +	__raw_writew((__raw_readw(PORT_PSEL3) & 0x0700), PORT_PSEL3);  	/* For HAC */  	/* bit3-0  0100:HAC & SSI1 enable */ -	ctrl_outw((ctrl_inw(PORT_PSEL1) & 0xFFF0) | 0x0004, PORT_PSEL1); +	__raw_writew((__raw_readw(PORT_PSEL1) & 0xFFF0) | 0x0004, PORT_PSEL1);  	/* bit14      1:SSI_HAC_CLK enable */ -	ctrl_outw(ctrl_inw(PORT_PSEL4) | 0x4000, PORT_PSEL4); +	__raw_writew(__raw_readw(PORT_PSEL4) | 0x4000, PORT_PSEL4);  	/* SH-Ether */ -	ctrl_outw((ctrl_inw(PORT_PSEL1) & ~0xff00) | 0x2400, PORT_PSEL1); -	ctrl_outw(0x0, PORT_PFCR); -	ctrl_outw(0x0, PORT_PFCR); -	ctrl_outw(0x0, PORT_PFCR); +	__raw_writew((__raw_readw(PORT_PSEL1) & ~0xff00) | 0x2400, PORT_PSEL1); +	__raw_writew(0x0, PORT_PFCR); +	__raw_writew(0x0, PORT_PFCR); +	__raw_writew(0x0, PORT_PFCR);  	/* MMC */  	/*selects SCIF and MMC other functions */ -	ctrl_outw(0x0001, PORT_PSEL0); +	__raw_writew(0x0001, PORT_PSEL0);  	/* MMC clock operates */ -	ctrl_outl(ctrl_inl(MSTPCR1) & ~0x8, MSTPCR1); -	ctrl_outw(ctrl_inw(PORT_PACR) & ~0x3000, PORT_PACR); -	ctrl_outw(ctrl_inw(PORT_PCCR) & ~0xCFC3, PORT_PCCR); +	__raw_writel(__raw_readl(MSTPCR1) & ~0x8, MSTPCR1); +	__raw_writew(__raw_readw(PORT_PACR) & ~0x3000, PORT_PACR); +	__raw_writew(__raw_readw(PORT_PCCR) & ~0xCFC3, PORT_PCCR);  }  static struct sh_machine_vector mv_sh7763rdp __initmv = { diff --git a/arch/sh/boards/mach-snapgear/setup.c b/arch/sh/boards/mach-snapgear/setup.c index a3277a23cf1..331745dee37 100644 --- a/arch/sh/boards/mach-snapgear/setup.c +++ b/arch/sh/boards/mach-snapgear/setup.c @@ -30,7 +30,7 @@  static irqreturn_t eraseconfig_interrupt(int irq, void *dev_id)  { -	(void)ctrl_inb(0xb8000000);	/* dummy read */ +	(void)__raw_readb(0xb8000000);	/* dummy read */  	printk("SnapGear: erase switch interrupt!\n"); diff --git a/arch/sh/boards/mach-systemh/irq.c b/arch/sh/boards/mach-systemh/irq.c index 986a0e71d22..523aea5dc94 100644 --- a/arch/sh/boards/mach-systemh/irq.c +++ b/arch/sh/boards/mach-systemh/irq.c @@ -41,13 +41,13 @@ static void disable_systemh_irq(unsigned int irq)  		unsigned long val, mask = 0x01 << 1;  		/* Clear the "irq"th bit in the mask and set it in the request */ -		val = ctrl_inl((unsigned long)systemh_irq_mask_register); +		val = __raw_readl((unsigned long)systemh_irq_mask_register);  		val &= ~mask; -		ctrl_outl(val, (unsigned long)systemh_irq_mask_register); +		__raw_writel(val, (unsigned long)systemh_irq_mask_register); -		val = ctrl_inl((unsigned long)systemh_irq_request_register); +		val = __raw_readl((unsigned long)systemh_irq_request_register);  		val |= mask; -		ctrl_outl(val, (unsigned long)systemh_irq_request_register); +		__raw_writel(val, (unsigned long)systemh_irq_request_register);  	}  } @@ -57,9 +57,9 @@ static void enable_systemh_irq(unsigned int irq)  		unsigned long val, mask = 0x01 << 1;  		/* Set "irq"th bit in the mask register */ -		val = ctrl_inl((unsigned long)systemh_irq_mask_register); +		val = __raw_readl((unsigned long)systemh_irq_mask_register);  		val |= mask; -		ctrl_outl(val, (unsigned long)systemh_irq_mask_register); +		__raw_writel(val, (unsigned long)systemh_irq_mask_register);  	}  } diff --git a/arch/sh/boards/mach-titan/Makefile b/arch/sh/boards/mach-titan/Makefile deleted file mode 100644 index 08d75370006..00000000000 --- a/arch/sh/boards/mach-titan/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# -# Makefile for the Nimble Microsystems TITAN specific parts of the kernel -# - -obj-y	 := setup.o io.o diff --git a/arch/sh/boards/mach-titan/io.c b/arch/sh/boards/mach-titan/io.c deleted file mode 100644 index 0130e9826ac..00000000000 --- a/arch/sh/boards/mach-titan/io.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - *	I/O routines for Titan - */ -#include <linux/pci.h> -#include <asm/machvec.h> -#include <asm/addrspace.h> -#include <mach/titan.h> -#include <asm/io.h> - -static inline unsigned int port2adr(unsigned int port) -{ -        maybebadio((unsigned long)port); -        return port; -} - -u8 titan_inb(unsigned long port) -{ -        if (PXSEG(port)) -                return ctrl_inb(port); -        return ctrl_inw(port2adr(port)) & 0xff; -} - -u8 titan_inb_p(unsigned long port) -{ -        u8 v; - -        if (PXSEG(port)) -                v = ctrl_inb(port); -        else -                v = ctrl_inw(port2adr(port)) & 0xff; -        ctrl_delay(); -        return v; -} - -u16 titan_inw(unsigned long port) -{ -        if (PXSEG(port)) -                return ctrl_inw(port); -        else if (port >= 0x2000) -                return ctrl_inw(port2adr(port)); -        else -                maybebadio(port); -        return 0; -} - -u32 titan_inl(unsigned long port) -{ -        if (PXSEG(port)) -                return ctrl_inl(port); -        else if (port >= 0x2000) -                return ctrl_inw(port2adr(port)); -        else -                maybebadio(port); -        return 0; -} - -void titan_outb(u8 value, unsigned long port) -{ -        if (PXSEG(port)) -                ctrl_outb(value, port); -        else -                ctrl_outw(value, port2adr(port)); -} - -void titan_outb_p(u8 value, unsigned long port) -{ -        if (PXSEG(port)) -                ctrl_outb(value, port); -        else -                ctrl_outw(value, port2adr(port)); -        ctrl_delay(); -} - -void titan_outw(u16 value, unsigned long port) -{ -        if (PXSEG(port)) -                ctrl_outw(value, port); -        else if (port >= 0x2000) -                ctrl_outw(value, port2adr(port)); -        else -                maybebadio(port); -} - -void titan_outl(u32 value, unsigned long port) -{ -        if (PXSEG(port)) -                ctrl_outl(value, port); -        else -                maybebadio(port); -} - -void titan_insl(unsigned long port, void *dst, unsigned long count) -{ -        maybebadio(port); -} - -void titan_outsl(unsigned long port, const void *src, unsigned long count) -{ -        maybebadio(port); -} - -void __iomem *titan_ioport_map(unsigned long port, unsigned int size) -{ -	if (PXSEG(port)) -		return (void __iomem *)port; - -	return (void __iomem *)port2adr(port); -} diff --git a/arch/sh/boards/mach-x3proto/ilsel.c b/arch/sh/boards/mach-x3proto/ilsel.c index b5c673c3933..5c9842704c6 100644 --- a/arch/sh/boards/mach-x3proto/ilsel.c +++ b/arch/sh/boards/mach-x3proto/ilsel.c @@ -70,10 +70,10 @@ static void __ilsel_enable(ilsel_source_t set, unsigned int bit)  	pr_debug("%s: bit#%d: addr - 0x%08lx (shift %d, set %d)\n",  		 __func__, bit, addr, shift, set); -	tmp = ctrl_inw(addr); +	tmp = __raw_readw(addr);  	tmp &= ~(0xf << shift);  	tmp |= set << shift; -	ctrl_outw(tmp, addr); +	__raw_writew(tmp, addr);  }  /** @@ -142,9 +142,9 @@ void ilsel_disable(unsigned int irq)  	addr = mk_ilsel_addr(irq); -	tmp = ctrl_inw(addr); +	tmp = __raw_readw(addr);  	tmp &= ~(0xf << mk_ilsel_shift(irq)); -	ctrl_outw(tmp, addr); +	__raw_writew(tmp, addr);  	clear_bit(irq, &ilsel_level_map);  } diff --git a/arch/sh/boards/mach-x3proto/setup.c b/arch/sh/boards/mach-x3proto/setup.c index efe4cb9f8a7..102bf56befb 100644 --- a/arch/sh/boards/mach-x3proto/setup.c +++ b/arch/sh/boards/mach-x3proto/setup.c @@ -19,6 +19,7 @@  #include <linux/usb/r8a66597.h>  #include <linux/usb/m66592.h>  #include <asm/ilsel.h> +#include <asm/smp-ops.h>  static struct resource heartbeat_resources[] = {  	[0] = { @@ -149,10 +150,16 @@ static void __init x3proto_init_irq(void)  	plat_irq_setup_pins(IRQ_MODE_IRL3210);  	/* Set ICR0.LVLMODE */ -	ctrl_outl(ctrl_inl(0xfe410000) | (1 << 21), 0xfe410000); +	__raw_writel(__raw_readl(0xfe410000) | (1 << 21), 0xfe410000); +} + +static void __init x3proto_setup(char **cmdline_p) +{ +	register_smp_ops(&shx3_smp_ops);  }  static struct sh_machine_vector mv_x3proto __initmv = {  	.mv_name		= "x3proto", +	.mv_setup		= x3proto_setup,  	.mv_init_irq		= x3proto_init_irq,  }; diff --git a/arch/sh/boot/Makefile b/arch/sh/boot/Makefile index cb8cf5572e7..1ce63624c9b 100644 --- a/arch/sh/boot/Makefile +++ b/arch/sh/boot/Makefile @@ -21,12 +21,15 @@ CONFIG_ZERO_PAGE_OFFSET	?= 0x00001000  CONFIG_ENTRY_OFFSET	?= 0x00001000  suffix-y := bin -suffix-$(CONFIG_KERNEL_GZIP)  := gz -suffix-$(CONFIG_KERNEL_BZIP2) := bz2 -suffix-$(CONFIG_KERNEL_LZMA)  := lzma +suffix-$(CONFIG_KERNEL_GZIP)	:= gz +suffix-$(CONFIG_KERNEL_BZIP2)	:= bz2 +suffix-$(CONFIG_KERNEL_LZMA)	:= lzma +suffix-$(CONFIG_KERNEL_LZO)	:= lzo -targets := zImage vmlinux.srec romImage uImage uImage.srec uImage.gz uImage.bz2 uImage.lzma uImage.bin -extra-y += vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma +targets := zImage vmlinux.srec romImage uImage uImage.srec uImage.gz \ +	   uImage.bz2 uImage.lzma uImage.lzo uImage.bin +extra-y += vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \ +	   vmlinux.bin.lzo  subdir- := compressed romimage  $(obj)/zImage: $(obj)/compressed/vmlinux FORCE @@ -43,15 +46,8 @@ $(obj)/romImage: $(obj)/romimage/vmlinux FORCE  $(obj)/romimage/vmlinux: $(obj)/zImage FORCE  	$(Q)$(MAKE) $(build)=$(obj)/romimage $@ -KERNEL_MEMORY := 0x00000000 -ifeq ($(CONFIG_PMB_FIXED),y) -KERNEL_MEMORY := $(shell /bin/bash -c 'printf "0x%08x" \ +KERNEL_MEMORY	:= $(shell /bin/bash -c 'printf "0x%08x" \  		     $$[$(CONFIG_MEMORY_START) & 0x1fffffff]') -endif -ifeq ($(CONFIG_29BIT),y) -KERNEL_MEMORY := $(shell /bin/bash -c 'printf "0x%08x" \ -		     $$[$(CONFIG_MEMORY_START)]') -endif  KERNEL_LOAD	:= $(shell /bin/bash -c 'printf "0x%08x" \  		     $$[$(CONFIG_PAGE_OFFSET)  + \ @@ -80,6 +76,9 @@ $(obj)/vmlinux.bin.bz2: $(obj)/vmlinux.bin FORCE  $(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE  	$(call if_changed,lzma) +$(obj)/vmlinux.bin.lzo: $(obj)/vmlinux.bin FORCE +	$(call if_changed,lzo) +  $(obj)/uImage.bz2: $(obj)/vmlinux.bin.bz2  	$(call if_changed,uimage,bzip2) @@ -89,6 +88,9 @@ $(obj)/uImage.gz: $(obj)/vmlinux.bin.gz  $(obj)/uImage.lzma: $(obj)/vmlinux.bin.lzma  	$(call if_changed,uimage,lzma) +$(obj)/uImage.lzo: $(obj)/vmlinux.bin.lzo +	$(call if_changed,uimage,lzo) +  $(obj)/uImage.bin: $(obj)/vmlinux.bin  	$(call if_changed,uimage,none) diff --git a/arch/sh/boot/compressed/Makefile b/arch/sh/boot/compressed/Makefile index 6182eca5180..cfa5a087a88 100644 --- a/arch/sh/boot/compressed/Makefile +++ b/arch/sh/boot/compressed/Makefile @@ -6,21 +6,24 @@  targets		:= vmlinux vmlinux.bin vmlinux.bin.gz \  		   vmlinux.bin.bz2 vmlinux.bin.lzma \ +		   vmlinux.bin.lzo \  		   head_$(BITS).o misc.o piggy.o  OBJECTS = $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/cache.o -ifdef CONFIG_SH_STANDARD_BIOS -OBJECTS += $(obj)/../../kernel/sh_bios.o -endif -  #  # IMAGE_OFFSET is the load offset of the compression loader  # +ifeq ($(CONFIG_32BIT),y) +IMAGE_OFFSET	:= $(shell /bin/bash -c 'printf "0x%08x" \ +		     $$[$(CONFIG_MEMORY_START)  + \ +			$(CONFIG_BOOT_LINK_OFFSET)]') +else  IMAGE_OFFSET	:= $(shell /bin/bash -c 'printf "0x%08x" \  		     $$[$(CONFIG_PAGE_OFFSET)  + \  			$(KERNEL_MEMORY) + \  			$(CONFIG_BOOT_LINK_OFFSET)]') +endif  LIBGCC	:= $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name) @@ -47,6 +50,8 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE  	$(call if_changed,bzip2)  $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE  	$(call if_changed,lzma) +$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE +	$(call if_changed,lzo)  OBJCOPYFLAGS += -R .empty_zero_page diff --git a/arch/sh/boot/compressed/cache.c b/arch/sh/boot/compressed/cache.c index e27fc74f228..d0b77b68a4d 100644 --- a/arch/sh/boot/compressed/cache.c +++ b/arch/sh/boot/compressed/cache.c @@ -5,7 +5,7 @@ int cache_control(unsigned int command)  	for (i = 0; i < (32 * 1024); i += 32) {  		(void)*p; -		p += (32 / sizeof (int)); +		p += (32 / sizeof(int));  	}  	return 0; diff --git a/arch/sh/boot/compressed/head_32.S b/arch/sh/boot/compressed/head_32.S index 02a30935f0b..200c1d4f1ef 100644 --- a/arch/sh/boot/compressed/head_32.S +++ b/arch/sh/boot/compressed/head_32.S @@ -97,7 +97,11 @@ init_stack_addr:  decompress_kernel_addr:  	.long	decompress_kernel  kernel_start_addr: +#ifdef CONFIG_32BIT +	.long	___pa(_text+PAGE_SIZE) +#else  	.long	_text+PAGE_SIZE +#endif  	.align	9  fake_headers_as_bzImage: diff --git a/arch/sh/boot/compressed/misc.c b/arch/sh/boot/compressed/misc.c index b51b1fc4baa..27140a6b365 100644 --- a/arch/sh/boot/compressed/misc.c +++ b/arch/sh/boot/compressed/misc.c @@ -14,7 +14,6 @@  #include <asm/uaccess.h>  #include <asm/addrspace.h>  #include <asm/page.h> -#include <asm/sh_bios.h>  /*   * gzip declarations @@ -62,29 +61,15 @@ static unsigned long free_mem_end_ptr;  #include "../../../../lib/decompress_unlzma.c"  #endif -#ifdef CONFIG_SH_STANDARD_BIOS -size_t strlen(const char *s) -{ -	int i = 0; - -	while (*s++) -		i++; -	return i; -} +#ifdef CONFIG_KERNEL_LZO +#include "../../../../lib/decompress_unlzo.c" +#endif  int puts(const char *s)  { -	int len = strlen(s); -	sh_bios_console_write(s, len); -	return len; -} -#else -int puts(const char *s) -{  	/* This should be updated to use the sh-sci routines */  	return 0;  } -#endif  void* memset(void* s, int c, size_t n)  { @@ -132,7 +117,7 @@ void decompress_kernel(void)  	output_addr = (CONFIG_MEMORY_START + 0x2000);  #else  	output_addr = __pa((unsigned long)&_text+PAGE_SIZE); -#ifdef CONFIG_29BIT +#if defined(CONFIG_29BIT)  	output_addr |= P2SEG;  #endif  #endif diff --git a/arch/sh/cchips/hd6446x/hd64461.c b/arch/sh/cchips/hd6446x/hd64461.c index 50aa0c1f76e..bcb31ae84a5 100644 --- a/arch/sh/cchips/hd6446x/hd64461.c +++ b/arch/sh/cchips/hd6446x/hd64461.c @@ -55,25 +55,22 @@ static struct irq_chip hd64461_irq_chip = {  static void hd64461_irq_demux(unsigned int irq, struct irq_desc *desc)  { -	unsigned short intv = ctrl_inw(HD64461_NIRR); -	struct irq_desc *ext_desc; +	unsigned short intv = __raw_readw(HD64461_NIRR);  	unsigned int ext_irq = HD64461_IRQBASE;  	intv &= (1 << HD64461_IRQ_NUM) - 1; -	while (intv) { -		if (intv & 1) { -			ext_desc = irq_desc + ext_irq; -			handle_level_irq(ext_irq, ext_desc); -		} -		intv >>= 1; -		ext_irq++; +	for (; intv; intv >>= 1, ext_irq++) { +		if (!(intv & 1)) +			continue; + +		generic_handle_irq(ext_irq);  	}  }  int __init setup_hd64461(void)  { -	int i; +	int i, nid = cpu_to_node(boot_cpu_data);  	if (!MACH_HD64461)  		return 0; @@ -90,9 +87,26 @@ int __init setup_hd64461(void)  	__raw_writew(0xffff, HD64461_NIMR);  	/*  IRQ 80 -> 95 belongs to HD64461  */ -	for (i = HD64461_IRQBASE; i < HD64461_IRQBASE + 16; i++) +	for (i = HD64461_IRQBASE; i < HD64461_IRQBASE + 16; i++) { +		unsigned int irq; + +		irq = create_irq_nr(i, nid); +		if (unlikely(irq == 0)) { +			pr_err("%s: failed hooking irq %d for HD64461\n", +			       __func__, i); +			return -EBUSY; +		} + +		if (unlikely(irq != i)) { +			pr_err("%s: got irq %d but wanted %d, bailing.\n", +			       __func__, irq, i); +			destroy_irq(irq); +			return -EINVAL; +		} +  		set_irq_chip_and_handler(i, &hd64461_irq_chip,  					 handle_level_irq); +	}  	set_irq_chained_handler(CONFIG_HD64461_IRQ, hd64461_irq_demux);  	set_irq_type(CONFIG_HD64461_IRQ, IRQ_TYPE_LEVEL_LOW); diff --git a/arch/sh/configs/ap325rxa_defconfig b/arch/sh/configs/ap325rxa_defconfig index 8931a60e37a..7fefa2b9e28 100644 --- a/arch/sh/configs/ap325rxa_defconfig +++ b/arch/sh/configs/ap325rxa_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:10:59 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:04:35 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -47,9 +48,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -71,11 +74,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -107,7 +105,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -116,13 +114,13 @@ CONFIG_SLAB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set  CONFIG_HAVE_OPROFILE=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -237,8 +235,8 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x08000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -246,6 +244,8 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -261,7 +261,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -335,7 +335,7 @@ CONFIG_SECCOMP=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -371,6 +371,7 @@ CONFIG_SUSPEND=y  CONFIG_SUSPEND_FREEZER=y  # CONFIG_HIBERNATION is not set  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  CONFIG_NET=y @@ -378,7 +379,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  # CONFIG_NET_KEY is not set  CONFIG_INET=y @@ -594,6 +594,7 @@ CONFIG_MISC_DEVICES=y  # CONFIG_ICS932S401 is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_ISL29003 is not set +# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_DS1682 is not set  # CONFIG_TI_DAC7512 is not set  # CONFIG_C2PORT is not set @@ -613,6 +614,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -774,6 +776,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=6  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -802,6 +805,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -814,15 +818,9 @@ CONFIG_I2C_SH_MOBILE=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  CONFIG_SPI=y  CONFIG_SPI_MASTER=y @@ -853,13 +851,16 @@ CONFIG_GPIOLIB=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set  #  # I2C GPIO expanders:  # +# CONFIG_GPIO_MAX7300 is not set  # CONFIG_GPIO_MAX732X is not set  # CONFIG_GPIO_PCA953X is not set  # CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set  #  # PCI GPIO expanders: @@ -891,22 +892,25 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set  # CONFIG_TPS65010 is not set  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_MFD_MC13783 is not set  # CONFIG_AB3100_CORE is not set  # CONFIG_EZX_PCAP is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_AB4500_CORE is not set  # CONFIG_REGULATOR is not set  CONFIG_MEDIA_SUPPORT=y @@ -1041,10 +1045,7 @@ CONFIG_MMC_BLOCK_BOUNCE=y  # MMC/SD/SDIO Host Controller Drivers  #  # CONFIG_MMC_SDHCI is not set -# CONFIG_MMC_AT91 is not set -# CONFIG_MMC_ATMELMCI is not set  CONFIG_MMC_SPI=y -# CONFIG_MMC_TMIO is not set  # CONFIG_MEMSTICK is not set  # CONFIG_NEW_LEDS is not set  # CONFIG_ACCESSIBILITY is not set @@ -1120,8 +1121,6 @@ CONFIG_RTC_DRV_PCF8563=y  CONFIG_UIO=y  # CONFIG_UIO_PDRV is not set  CONFIG_UIO_PDRV_GENIRQ=y -# CONFIG_UIO_SMX is not set -# CONFIG_UIO_SERCOS3 is not set  #  # TI VLYNQ @@ -1206,6 +1205,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set  # CONFIG_UBIFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1234,6 +1234,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1426,6 +1427,7 @@ CONFIG_CRYPTO_CBC=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/cayman_defconfig b/arch/sh/configs/cayman_defconfig index 92589a950d0..edae0a6830d 100644 --- a/arch/sh/configs/cayman_defconfig +++ b/arch/sh/configs/cayman_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:14:50 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 18:01:02 2010  #  CONFIG_SUPERH=y  # CONFIG_SUPERH32 is not set @@ -13,7 +13,6 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y @@ -32,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -47,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  # CONFIG_SYSVIPC is not set  CONFIG_POSIX_MQUEUE=y @@ -70,7 +72,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -114,7 +115,6 @@ CONFIG_SLAB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set  CONFIG_HAVE_OPROFILE=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y @@ -204,6 +204,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_IOREMAP_FIXED=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -225,7 +226,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -294,7 +295,6 @@ CONFIG_HZ=250  # CONFIG_PREEMPT_NONE is not set  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -309,9 +309,9 @@ CONFIG_ENTRY_OFFSET=0x00001000  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set @@ -337,7 +337,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -463,6 +462,7 @@ CONFIG_MISC_DEVICES=y  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_ISL29003 is not set +# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_DS1682 is not set  # CONFIG_C2PORT is not set @@ -480,6 +480,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -569,7 +570,7 @@ CONFIG_SCSI_LOWLEVEL=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -638,6 +639,8 @@ CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set  CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set  # CONFIG_ENIC is not set  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set @@ -650,6 +653,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_MLX4_CORE is not set  # CONFIG_TEHUTI is not set  # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set @@ -732,6 +736,7 @@ CONFIG_DEVKMEM=y  #  # CONFIG_SERIAL_SH_SCI is not set  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -779,6 +784,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  # CONFIG_I2C_SH_MOBILE is not set  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -791,15 +797,9 @@ CONFIG_I2C_HELPER_AUTO=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -823,10 +823,11 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_ADM1029 is not set  # CONFIG_SENSORS_ADM1031 is not set  # CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7411 is not set  # CONFIG_SENSORS_ADT7462 is not set  # CONFIG_SENSORS_ADT7470 is not set -# CONFIG_SENSORS_ADT7473 is not set  # CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_ASC7621 is not set  # CONFIG_SENSORS_ATXP1 is not set  # CONFIG_SENSORS_DS1621 is not set  # CONFIG_SENSORS_I5K_AMB is not set @@ -863,6 +864,7 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_SMSC47M192 is not set  # CONFIG_SENSORS_SMSC47B397 is not set  # CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_AMC6821 is not set  # CONFIG_SENSORS_THMC50 is not set  # CONFIG_SENSORS_TMP401 is not set  # CONFIG_SENSORS_TMP421 is not set @@ -909,9 +911,9 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_MFD_WM8400 is not set -# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set -# CONFIG_AB3100_CORE is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -919,6 +921,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=y @@ -1125,6 +1128,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1153,6 +1157,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1208,6 +1213,7 @@ CONFIG_SCHEDSTATS=y  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  CONFIG_DEBUG_PREEMPT=y  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set @@ -1234,6 +1240,7 @@ CONFIG_FRAME_POINTER=y  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set  # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set @@ -1361,6 +1368,7 @@ CONFIG_CRYPTO=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/dreamcast_defconfig b/arch/sh/configs/dreamcast_defconfig index 55f652be954..b96bf3d2cd0 100644 --- a/arch/sh/configs/dreamcast_defconfig +++ b/arch/sh/configs/dreamcast_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:17:35 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:11:55 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -48,9 +49,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -72,7 +75,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -124,6 +126,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -242,6 +245,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -263,7 +267,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -360,7 +364,6 @@ CONFIG_SECCOMP=y  CONFIG_PREEMPT=y  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -377,9 +380,9 @@ CONFIG_CMDLINE="console=ttySC1,115200 panic=3"  #  CONFIG_MAPLE=y  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set @@ -404,7 +407,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -532,6 +534,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -549,7 +552,7 @@ CONFIG_HAVE_IDE=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -589,6 +592,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -717,6 +721,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -771,6 +776,7 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -778,6 +784,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -918,7 +925,6 @@ CONFIG_RTC_LIB=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -976,6 +982,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -990,6 +997,7 @@ CONFIG_NETWORK_FILESYSTEMS=y  # CONFIG_NFS_FS is not set  # CONFIG_NFSD is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1135,6 +1143,7 @@ CONFIG_CRYPTO=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/ecovec24-romimage_defconfig b/arch/sh/configs/ecovec24-romimage_defconfig index 662c1ad2049..58aec9dd563 100644 --- a/arch/sh/configs/ecovec24-romimage_defconfig +++ b/arch/sh/configs/ecovec24-romimage_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:18:17 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:14:56 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -71,11 +74,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -86,6 +84,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -111,7 +110,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -120,13 +119,13 @@ CONFIG_SLAB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set  CONFIG_HAVE_OPROFILE=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -237,8 +236,8 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x10000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -246,6 +245,8 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -261,7 +262,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -336,7 +337,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -370,6 +371,7 @@ CONFIG_PM=y  # CONFIG_SUSPEND is not set  # CONFIG_HIBERNATION is not set  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  CONFIG_NET=y @@ -377,7 +379,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  # CONFIG_NET_KEY is not set  CONFIG_INET=y @@ -485,6 +486,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -585,6 +587,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -650,6 +653,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=6  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -678,6 +682,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -690,15 +695,9 @@ CONFIG_I2C_SH_MOBILE=y  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -712,13 +711,16 @@ CONFIG_GPIO_SYSFS=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set  #  # I2C GPIO expanders:  # +# CONFIG_GPIO_MAX7300 is not set  # CONFIG_GPIO_MAX732X is not set  # CONFIG_GPIO_PCA953X is not set  # CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set  #  # PCI GPIO expanders: @@ -747,20 +749,23 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set  # CONFIG_TPS65010 is not set  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -868,7 +873,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -880,7 +884,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -911,7 +914,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -1027,6 +1029,7 @@ CONFIG_DEBUG_FS=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  CONFIG_HAVE_FUNCTION_TRACER=y @@ -1056,6 +1059,7 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/ecovec24_defconfig b/arch/sh/configs/ecovec24_defconfig index 18e3356406f..67c665671c6 100644 --- a/arch/sh/configs/ecovec24_defconfig +++ b/arch/sh/configs/ecovec24_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:20:36 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:17:28 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -47,9 +48,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -71,14 +74,8 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set -CONFIG_SYSFS_DEPRECATED=y -CONFIG_SYSFS_DEPRECATED_V2=y +# CONFIG_SYSFS_DEPRECATED_V2 is not set  # CONFIG_RELAY is not set  # CONFIG_NAMESPACES is not set  # CONFIG_BLK_DEV_INITRD is not set @@ -107,7 +104,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -116,13 +113,13 @@ CONFIG_SLAB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set  CONFIG_HAVE_OPROFILE=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -234,12 +231,12 @@ CONFIG_CPU_SUBTYPE_SH7724=y  CONFIG_QUICKLIST=y  CONFIG_MMU=y  CONFIG_PAGE_OFFSET=0x80000000 -CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_FORCE_MAX_ZONEORDER=12  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x10000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -247,6 +244,8 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -262,7 +261,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -337,7 +336,7 @@ CONFIG_SECCOMP=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -347,7 +346,7 @@ CONFIG_BOOT_LINK_OFFSET=0x00800000  CONFIG_ENTRY_OFFSET=0x00001000  CONFIG_CMDLINE_OVERWRITE=y  # CONFIG_CMDLINE_EXTEND is not set -CONFIG_CMDLINE="console=tty0, console=ttySC0,115200 root=/dev/nfs ip=dhcp mem=120M memchunk.vpu=4m" +CONFIG_CMDLINE="console=tty0, console=ttySC0,115200 root=/dev/nfs ip=dhcp mem=248M memchunk.vpu=8m memchunk.veu0=4m"  #  # Bus options @@ -373,6 +372,7 @@ CONFIG_SUSPEND=y  CONFIG_SUSPEND_FREEZER=y  # CONFIG_HIBERNATION is not set  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  CONFIG_NET=y @@ -380,7 +380,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  # CONFIG_NET_KEY is not set  CONFIG_INET=y @@ -445,7 +444,45 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NET_PKTGEN is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set -# CONFIG_IRDA is not set +CONFIG_IRDA=y + +# +# IrDA protocols +# +# CONFIG_IRLAN is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +CONFIG_SH_SIR=y +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +# CONFIG_MCS_FIR is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set  CONFIG_WIRELESS=y @@ -556,6 +593,7 @@ CONFIG_MTD_NAND_IDS=y  # CONFIG_MTD_NAND_NANDSIM is not set  # CONFIG_MTD_NAND_PLATFORM is not set  # CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_NAND_SH_FLCTL is not set  # CONFIG_MTD_ONENAND is not set  # @@ -597,6 +635,7 @@ CONFIG_MISC_DEVICES=y  # CONFIG_ICS932S401 is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_ISL29003 is not set +# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_DS1682 is not set  # CONFIG_TI_DAC7512 is not set  # CONFIG_C2PORT is not set @@ -616,6 +655,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -723,6 +763,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -768,7 +809,29 @@ CONFIG_KEYBOARD_SH_KEYSC=y  # CONFIG_INPUT_MOUSE is not set  # CONFIG_INPUT_JOYSTICK is not set  # CONFIG_INPUT_TABLET is not set -# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_AD7877 is not set +# CONFIG_TOUCHSCREEN_AD7879_I2C is not set +# CONFIG_TOUCHSCREEN_AD7879_SPI is not set +# CONFIG_TOUCHSCREEN_AD7879 is not set +# CONFIG_TOUCHSCREEN_DYNAPRO is not set +# CONFIG_TOUCHSCREEN_EETI is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set +# CONFIG_TOUCHSCREEN_MCS5000 is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_INEXIO is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set +CONFIG_TOUCHSCREEN_TSC2007=y +# CONFIG_TOUCHSCREEN_W90X900 is not set  # CONFIG_INPUT_MISC is not set  # @@ -802,10 +865,10 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=6  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set -CONFIG_LEGACY_PTYS=y -CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_LEGACY_PTYS is not set  # CONFIG_IPMI_HANDLER is not set  CONFIG_HW_RANDOM=y  # CONFIG_HW_RANDOM_TIMERIOMEM is not set @@ -830,6 +893,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -843,15 +907,9 @@ CONFIG_I2C_SH_MOBILE=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  CONFIG_SPI=y  CONFIG_SPI_MASTER=y @@ -882,13 +940,16 @@ CONFIG_GPIOLIB=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set  #  # I2C GPIO expanders:  # +# CONFIG_GPIO_MAX7300 is not set  # CONFIG_GPIO_MAX732X is not set  # CONFIG_GPIO_PCA953X is not set  # CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set  #  # PCI GPIO expanders: @@ -919,23 +980,26 @@ CONFIG_SSB_POSSIBLE=y  #  # Multifunction device drivers  # -# CONFIG_MFD_CORE is not set +CONFIG_MFD_CORE=y +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set -# CONFIG_MFD_SH_MOBILE_SDHI is not set +CONFIG_MFD_SH_MOBILE_SDHI=y  # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set  # CONFIG_TPS65010 is not set  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_MFD_MC13783 is not set  # CONFIG_AB3100_CORE is not set  # CONFIG_EZX_PCAP is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_AB4500_CORE is not set  # CONFIG_REGULATOR is not set  CONFIG_MEDIA_SUPPORT=y @@ -985,10 +1049,10 @@ CONFIG_SOC_CAMERA=y  # CONFIG_SOC_CAMERA_MT9M001 is not set  # CONFIG_SOC_CAMERA_MT9M111 is not set  # CONFIG_SOC_CAMERA_MT9T031 is not set -# CONFIG_SOC_CAMERA_MT9T112 is not set +CONFIG_SOC_CAMERA_MT9T112=y  # CONFIG_SOC_CAMERA_MT9V022 is not set  # CONFIG_SOC_CAMERA_RJ54N1 is not set -# CONFIG_SOC_CAMERA_TW9910 is not set +CONFIG_SOC_CAMERA_TW9910=y  # CONFIG_SOC_CAMERA_PLATFORM is not set  # CONFIG_SOC_CAMERA_OV772X is not set  # CONFIG_SOC_CAMERA_OV9640 is not set @@ -1001,6 +1065,7 @@ CONFIG_RADIO_ADAPTERS=y  # CONFIG_RADIO_SI470X is not set  # CONFIG_USB_MR800 is not set  # CONFIG_RADIO_TEA5764 is not set +# CONFIG_RADIO_SAA7706H is not set  # CONFIG_RADIO_TEF6862 is not set  # CONFIG_DAB is not set @@ -1034,6 +1099,7 @@ CONFIG_FB_DEFERRED_IO=y  #  # CONFIG_FB_S1D13XXX is not set  CONFIG_FB_SH_MOBILE_LCDC=y +# CONFIG_FB_TMIO is not set  # CONFIG_FB_VIRTUAL is not set  # CONFIG_FB_METRONOME is not set  # CONFIG_FB_MB862XX is not set @@ -1062,7 +1128,46 @@ CONFIG_LOGO=y  # CONFIG_LOGO_SUPERH_MONO is not set  # CONFIG_LOGO_SUPERH_VGA16 is not set  CONFIG_LOGO_SUPERH_CLUT224=y -# CONFIG_SOUND is not set +CONFIG_SOUND=y +CONFIG_SOUND_OSS_CORE=y +CONFIG_SOUND_OSS_CORE_PRECLAIM=y +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_JACK=y +CONFIG_SND_SEQUENCER=y +CONFIG_SND_SEQ_DUMMY=y +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_SEQUENCER_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +# CONFIG_SND_RAWMIDI_SEQ is not set +# CONFIG_SND_OPL3_LIB_SEQ is not set +# CONFIG_SND_OPL4_LIB_SEQ is not set +# CONFIG_SND_SBAWE_SEQ is not set +# CONFIG_SND_EMU10K1_SEQ is not set +# CONFIG_SND_DRIVERS is not set +# CONFIG_SND_SPI is not set +CONFIG_SND_SUPERH=y +# CONFIG_SND_USB is not set +CONFIG_SND_SOC=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_SH4_FSI=y +# CONFIG_SND_FSI_AK4642 is not set +CONFIG_SND_FSI_DA7210=y +CONFIG_SND_SOC_I2C_AND_SPI=y +# CONFIG_SND_SOC_ALL_CODECS is not set +CONFIG_SND_SOC_DA7210=y +# CONFIG_SOUND_PRIME is not set  CONFIG_HID_SUPPORT=y  CONFIG_HID=y  # CONFIG_HIDRAW is not set @@ -1077,6 +1182,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  # CONFIG_HID_A4TECH is not set  # CONFIG_HID_APPLE is not set  # CONFIG_HID_BELKIN is not set @@ -1091,12 +1197,16 @@ CONFIG_USB_HID=y  # CONFIG_HID_KENSINGTON is not set  # CONFIG_HID_LOGITECH is not set  # CONFIG_HID_MICROSOFT is not set +# CONFIG_HID_MOSART is not set  # CONFIG_HID_MONTEREY is not set  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  # CONFIG_HID_PANTHERLORD is not set  # CONFIG_HID_PETALYNX is not set +# CONFIG_HID_QUANTA is not set  # CONFIG_HID_SAMSUNG is not set  # CONFIG_HID_SONY is not set +# CONFIG_HID_STANTUM is not set  # CONFIG_HID_SUNPLUS is not set  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -1136,6 +1246,7 @@ CONFIG_USB_MON=y  # CONFIG_USB_SL811_HCD is not set  CONFIG_USB_R8A66597_HCD=y  # CONFIG_USB_HWA_HCD is not set +# CONFIG_USB_GADGET_MUSB_HDRC is not set  #  # USB Device Class drivers @@ -1188,7 +1299,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1200,8 +1310,45 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set -# CONFIG_USB_GADGET is not set +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_PXA25X is not set +CONFIG_USB_GADGET_R8A66597=y +CONFIG_USB_R8A66597=y +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_S3C_HSOTG is not set +# CONFIG_USB_GADGET_IMX is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_FSL_QE is not set +# CONFIG_USB_GADGET_CI13XXX is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LANGWELL is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_ETH is not set +# CONFIG_USB_GADGETFS is not set +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +# CONFIG_USB_MASS_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +# CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_NOKIA is not set +# CONFIG_USB_G_MULTI is not set  #  # OTG and related infrastructure @@ -1224,10 +1371,8 @@ CONFIG_MMC_BLOCK_BOUNCE=y  # MMC/SD/SDIO Host Controller Drivers  #  # CONFIG_MMC_SDHCI is not set -# CONFIG_MMC_AT91 is not set -# CONFIG_MMC_ATMELMCI is not set  CONFIG_MMC_SPI=y -# CONFIG_MMC_TMIO is not set +CONFIG_MMC_TMIO=y  # CONFIG_MEMSTICK is not set  # CONFIG_NEW_LEDS is not set  # CONFIG_ACCESSIBILITY is not set @@ -1253,10 +1398,10 @@ CONFIG_RTC_INTF_DEV=y  # CONFIG_RTC_DRV_DS1374 is not set  # CONFIG_RTC_DRV_DS1672 is not set  # CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_RS5C372 is not set +CONFIG_RTC_DRV_RS5C372=y  # CONFIG_RTC_DRV_ISL1208 is not set  # CONFIG_RTC_DRV_X1205 is not set -CONFIG_RTC_DRV_PCF8563=y +# CONFIG_RTC_DRV_PCF8563 is not set  # CONFIG_RTC_DRV_PCF8583 is not set  # CONFIG_RTC_DRV_M41T80 is not set  # CONFIG_RTC_DRV_BQ32K is not set @@ -1303,8 +1448,6 @@ CONFIG_RTC_DRV_PCF8563=y  CONFIG_UIO=y  # CONFIG_UIO_PDRV is not set  CONFIG_UIO_PDRV_GENIRQ=y -# CONFIG_UIO_SMX is not set -# CONFIG_UIO_SERCOS3 is not set  #  # TI VLYNQ @@ -1390,6 +1533,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set  # CONFIG_UBIFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1418,6 +1562,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1487,6 +1632,7 @@ CONFIG_DEBUG_FS=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y  CONFIG_HAVE_FUNCTION_TRACER=y @@ -1611,6 +1757,7 @@ CONFIG_CRYPTO_CBC=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # @@ -1618,7 +1765,7 @@ CONFIG_CRYPTO_HW=y  #  CONFIG_BITREVERSE=y  CONFIG_GENERIC_FIND_LAST_BIT=y -# CONFIG_CRC_CCITT is not set +CONFIG_CRC_CCITT=y  # CONFIG_CRC16 is not set  CONFIG_CRC_T10DIF=y  CONFIG_CRC_ITU_T=y diff --git a/arch/sh/configs/edosk7705_defconfig b/arch/sh/configs/edosk7705_defconfig index 72f8718dd73..0883d873ea6 100644 --- a/arch/sh/configs/edosk7705_defconfig +++ b/arch/sh/configs/edosk7705_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:24:26 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:21:52 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -12,8 +12,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -29,6 +29,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -43,9 +44,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SYSVIPC is not set  # CONFIG_BSD_PROCESS_ACCT is not set @@ -61,11 +64,11 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=17 -# CONFIG_CGROUPS is not set  # CONFIG_RELAY is not set  # CONFIG_NAMESPACES is not set  # CONFIG_BLK_DEV_INITRD is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  # CONFIG_UID16 is not set  # CONFIG_KALLSYMS is not set @@ -87,7 +90,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  # CONFIG_VM_EVENT_COUNTERS is not set  # CONFIG_COMPAT_BRK is not set @@ -103,6 +106,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -202,6 +206,7 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -217,7 +222,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -330,6 +335,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_SCSI_DMA is not set  # CONFIG_SCSI_NETLINK is not set  # CONFIG_PHONE is not set @@ -361,6 +367,7 @@ CONFIG_HAVE_IDE=y  # Non-8250 serial port support  #  # CONFIG_SERIAL_SH_SCI is not set +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  # CONFIG_LEGACY_PTYS is not set  # CONFIG_IPMI_HANDLER is not set @@ -440,6 +447,7 @@ CONFIG_INOTIFY_USER=y  #  # Caches  # +# CONFIG_FSCACHE is not set  #  # Pseudo filesystems @@ -491,6 +499,7 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/edosk7760_defconfig b/arch/sh/configs/edosk7760_defconfig index 0932e6d656e..8257f577637 100644 --- a/arch/sh/configs/edosk7760_defconfig +++ b/arch/sh/configs/edosk7760_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:24:44 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:23:10 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -72,7 +75,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=17 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -83,6 +85,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -110,8 +113,9 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_SLUB_DEBUG=y  CONFIG_COMPAT_BRK=y @@ -128,6 +132,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -246,6 +251,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -261,7 +267,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -342,7 +348,6 @@ CONFIG_SCHED_HRTICK=y  CONFIG_PREEMPT=y  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -379,7 +384,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  # CONFIG_NET_KEY is not set  CONFIG_INET=y @@ -579,6 +583,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -685,6 +690,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=3  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -713,6 +719,7 @@ CONFIG_I2C_HELPER_AUTO=y  CONFIG_I2C_SH7760=y  # CONFIG_I2C_SH_MOBILE is not set  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -725,15 +732,9 @@ CONFIG_I2C_SH7760=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  CONFIG_I2C_DEBUG_CORE=y  CONFIG_I2C_DEBUG_ALGO=y  CONFIG_I2C_DEBUG_BUS=y -CONFIG_I2C_DEBUG_CHIP=y  # CONFIG_SPI is not set  # @@ -756,6 +757,7 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set @@ -763,12 +765,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -947,6 +950,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -969,6 +973,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1048,6 +1053,7 @@ CONFIG_TIMER_STATS=y  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK is not set  CONFIG_DEBUG_PREEMPT=y  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set @@ -1096,6 +1102,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1214,6 +1221,7 @@ CONFIG_CRYPTO_DES=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/espt_defconfig b/arch/sh/configs/espt_defconfig index f899e5613f8..8acdc374d03 100644 --- a/arch/sh/configs/espt_defconfig +++ b/arch/sh/configs/espt_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:26:55 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:27:14 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -69,11 +72,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -112,7 +110,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -120,7 +117,6 @@ CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set @@ -131,6 +127,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -243,7 +240,7 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x0c000000  CONFIG_MEMORY_SIZE=0x04000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set +# CONFIG_PMB is not set  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -253,6 +250,7 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -269,7 +267,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -344,7 +342,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -381,7 +379,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -444,7 +441,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -584,6 +580,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -688,6 +685,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -753,6 +751,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=3  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -944,7 +943,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -956,7 +954,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1052,6 +1049,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  CONFIG_CRAMFS=y  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1078,6 +1076,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1144,13 +1143,12 @@ CONFIG_FRAME_WARN=1024  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_STACKTRACE=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1158,10 +1156,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set @@ -1269,7 +1264,8 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/hp6xx_defconfig b/arch/sh/configs/hp6xx_defconfig index 06644908631..f894bdc97a6 100644 --- a/arch/sh/configs/hp6xx_defconfig +++ b/arch/sh/configs/hp6xx_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:30:31 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:30:50 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  # CONFIG_SYSVIPC is not set  CONFIG_BSD_PROCESS_ACCT=y @@ -66,7 +69,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -99,7 +101,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -115,6 +117,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -228,6 +231,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -243,7 +247,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -326,7 +330,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -344,7 +347,6 @@ CONFIG_ENTRY_OFFSET=0x00001000  CONFIG_PCCARD=y  CONFIG_PCMCIA=y  CONFIG_PCMCIA_LOAD_CIS=y -CONFIG_PCMCIA_IOCTL=y  #  # PC-card bridges @@ -369,6 +371,7 @@ CONFIG_SUSPEND_FREEZER=y  # CONFIG_HIBERNATION is not set  CONFIG_APM_EMULATION=y  # CONFIG_PM_RUNTIME is not set +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  # CONFIG_NET is not set @@ -412,6 +415,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -544,6 +548,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=3  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -722,7 +727,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -780,6 +784,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -977,6 +982,7 @@ CONFIG_CRYPTO_MD5=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  # CONFIG_CRYPTO_HW is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/kfr2r09-romimage_defconfig b/arch/sh/configs/kfr2r09-romimage_defconfig index 3d834e59e8f..8c54e1620e9 100644 --- a/arch/sh/configs/kfr2r09-romimage_defconfig +++ b/arch/sh/configs/kfr2r09-romimage_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:31:09 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:33:23 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  # CONFIG_POSIX_MQUEUE is not set @@ -70,11 +73,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -85,6 +83,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -110,7 +109,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -119,13 +118,13 @@ CONFIG_SLAB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set  CONFIG_HAVE_OPROFILE=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -222,8 +221,8 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x08000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -231,6 +230,8 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -246,7 +247,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -321,7 +322,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -354,6 +355,7 @@ CONFIG_PM=y  # CONFIG_PM_DEBUG is not set  # CONFIG_SUSPEND is not set  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  CONFIG_NET=y @@ -361,7 +363,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  # CONFIG_NET_KEY is not set  CONFIG_INET=y @@ -449,6 +450,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_SCSI_DMA is not set  # CONFIG_SCSI_NETLINK is not set  # CONFIG_NETDEVICES is not set @@ -511,6 +513,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=6  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -538,6 +541,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -549,15 +553,9 @@ CONFIG_I2C_SH_MOBILE=y  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -571,13 +569,16 @@ CONFIG_GPIO_SYSFS=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set  #  # I2C GPIO expanders:  # +# CONFIG_GPIO_MAX7300 is not set  # CONFIG_GPIO_MAX732X is not set  # CONFIG_GPIO_PCA953X is not set  # CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set  #  # PCI GPIO expanders: @@ -606,20 +607,23 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set  # CONFIG_TPS65010 is not set  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -690,6 +694,7 @@ CONFIG_USB_GADGET_DUALSPEED=y  # CONFIG_USB_MIDI_GADGET is not set  # CONFIG_USB_G_PRINTER is not set  CONFIG_USB_CDC_COMPOSITE=y +# CONFIG_USB_G_NOKIA is not set  # CONFIG_USB_G_MULTI is not set  # @@ -794,6 +799,7 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/kfr2r09_defconfig b/arch/sh/configs/kfr2r09_defconfig index f22be494ed9..2e74b08ca14 100644 --- a/arch/sh/configs/kfr2r09_defconfig +++ b/arch/sh/configs/kfr2r09_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:32:55 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:35:20 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -47,9 +48,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -72,11 +75,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -87,6 +85,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -112,7 +111,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -121,13 +120,13 @@ CONFIG_SLAB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set  CONFIG_HAVE_OPROFILE=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -243,8 +242,8 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x08000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -252,6 +251,8 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -267,7 +268,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -343,7 +344,7 @@ CONFIG_KEXEC=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -377,6 +378,7 @@ CONFIG_PM=y  # CONFIG_SUSPEND is not set  # CONFIG_HIBERNATION is not set  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  CONFIG_CPU_IDLE=y  CONFIG_CPU_IDLE_GOV_LADDER=y  CONFIG_CPU_IDLE_GOV_MENU=y @@ -386,7 +388,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  # CONFIG_NET_KEY is not set  CONFIG_INET=y @@ -580,6 +581,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -659,6 +661,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=6  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -687,6 +690,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -699,15 +703,9 @@ CONFIG_I2C_SH_MOBILE=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -721,13 +719,16 @@ CONFIG_GPIO_SYSFS=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set  #  # I2C GPIO expanders:  # +# CONFIG_GPIO_MAX7300 is not set  # CONFIG_GPIO_MAX732X is not set  # CONFIG_GPIO_PCA953X is not set  # CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set  #  # PCI GPIO expanders: @@ -756,20 +757,23 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set  # CONFIG_TPS65010 is not set  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -889,6 +893,7 @@ CONFIG_USB_GADGET_DUALSPEED=y  # CONFIG_USB_MIDI_GADGET is not set  # CONFIG_USB_G_PRINTER is not set  CONFIG_USB_CDC_COMPOSITE=m +# CONFIG_USB_G_NOKIA is not set  # CONFIG_USB_G_MULTI is not set  # @@ -912,9 +917,6 @@ CONFIG_MMC_BLOCK_BOUNCE=y  # MMC/SD/SDIO Host Controller Drivers  #  # CONFIG_MMC_SDHCI is not set -# CONFIG_MMC_AT91 is not set -# CONFIG_MMC_ATMELMCI is not set -# CONFIG_MMC_TMIO is not set  # CONFIG_MEMSTICK is not set  # CONFIG_NEW_LEDS is not set  # CONFIG_ACCESSIBILITY is not set @@ -982,8 +984,6 @@ CONFIG_RTC_DRV_SH=y  CONFIG_UIO=y  # CONFIG_UIO_PDRV is not set  CONFIG_UIO_PDRV_GENIRQ=y -# CONFIG_UIO_SMX is not set -# CONFIG_UIO_SERCOS3 is not set  #  # TI VLYNQ @@ -996,7 +996,6 @@ CONFIG_UIO_PDRV_GENIRQ=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -1074,6 +1073,7 @@ CONFIG_DEBUG_FS=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  CONFIG_HAVE_FUNCTION_TRACER=y @@ -1103,6 +1103,7 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/landisk_defconfig b/arch/sh/configs/landisk_defconfig index 2a42d4977fe..87789345d47 100644 --- a/arch/sh/configs/landisk_defconfig +++ b/arch/sh/configs/landisk_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:35:31 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:38:08 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -69,7 +72,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -102,7 +104,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y @@ -120,6 +122,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -238,6 +241,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -253,7 +257,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -333,7 +337,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -348,15 +351,14 @@ CONFIG_ENTRY_OFFSET=0x00001000  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set  CONFIG_PCCARD=y  CONFIG_PCMCIA=y  CONFIG_PCMCIA_LOAD_CIS=y -CONFIG_PCMCIA_IOCTL=y  CONFIG_CARDBUS=y  # @@ -392,7 +394,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -612,6 +613,7 @@ CONFIG_BLK_DEV_IDEDMA=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -711,7 +713,7 @@ CONFIG_MD_RAID1=m  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -751,6 +753,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -798,6 +801,8 @@ CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set  CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set  # CONFIG_ENIC is not set  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set @@ -810,6 +815,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_MLX4_CORE is not set  # CONFIG_TEHUTI is not set  # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set @@ -835,6 +841,7 @@ CONFIG_WLAN=y  CONFIG_USB_PEGASUS=m  CONFIG_USB_RTL8150=m  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_NET_PCMCIA is not set  # CONFIG_WAN is not set  # CONFIG_FDDI is not set @@ -910,6 +917,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -977,6 +985,7 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -984,6 +993,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1025,6 +1035,7 @@ CONFIG_USB_HID=m  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=m  CONFIG_HID_APPLE=m  CONFIG_HID_BELKIN=m @@ -1040,14 +1051,19 @@ CONFIG_HID_GYRATION=m  CONFIG_HID_LOGITECH=m  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=m +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=m  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=m  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=m +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=m  CONFIG_HID_SONY=m +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=m  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -1169,6 +1185,7 @@ CONFIG_USB_SERIAL_FTDI_SIO=m  # CONFIG_USB_SERIAL_NAVMAN is not set  CONFIG_USB_SERIAL_PL2303=m  # CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_QCAUX is not set  # CONFIG_USB_SERIAL_QUALCOMM is not set  # CONFIG_USB_SERIAL_SPCP8X5 is not set  # CONFIG_USB_SERIAL_HP4X is not set @@ -1182,6 +1199,7 @@ CONFIG_USB_SERIAL_PL2303=m  # CONFIG_USB_SERIAL_OPTION is not set  # CONFIG_USB_SERIAL_OMNINET is not set  # CONFIG_USB_SERIAL_OPTICON is not set +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set  # CONFIG_USB_SERIAL_DEBUG is not set  # @@ -1194,7 +1212,6 @@ CONFIG_USB_EMI26=m  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1208,7 +1225,6 @@ CONFIG_USB_SISUSBVGA_CON=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1313,6 +1329,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1347,6 +1364,7 @@ CONFIG_SUNRPC=m  # CONFIG_RPCSEC_GSS_SPKM3 is not set  CONFIG_SMB_FS=m  # CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1531,6 +1549,7 @@ CONFIG_CRYPTO=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/lboxre2_defconfig b/arch/sh/configs/lboxre2_defconfig index f2f1f8c73b2..6088a76bd21 100644 --- a/arch/sh/configs/lboxre2_defconfig +++ b/arch/sh/configs/lboxre2_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:37:01 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:42:57 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -69,7 +72,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -102,7 +104,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y @@ -120,6 +122,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -238,6 +241,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -253,7 +257,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -333,7 +337,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -349,15 +352,14 @@ CONFIG_CMDLINE="console=ttySC1,115200 root=/dev/sda1"  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set  CONFIG_PCCARD=y  CONFIG_PCMCIA=y  CONFIG_PCMCIA_LOAD_CIS=y -CONFIG_PCMCIA_IOCTL=y  CONFIG_CARDBUS=y  # @@ -392,7 +394,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -552,6 +553,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -670,6 +672,7 @@ CONFIG_ATA_SFF=y  # CONFIG_PATA_IT821X is not set  # CONFIG_PATA_IT8213 is not set  # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set  # CONFIG_PATA_TRIFLEX is not set  # CONFIG_PATA_MARVELL is not set  # CONFIG_PATA_MPIIX is not set @@ -707,7 +710,7 @@ CONFIG_PATA_PLATFORM=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -747,6 +750,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -798,6 +802,8 @@ CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set  CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set  # CONFIG_ENIC is not set  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set @@ -810,6 +816,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_MLX4_CORE is not set  # CONFIG_TEHUTI is not set  # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set @@ -908,6 +915,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -975,6 +983,7 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -982,6 +991,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1155,6 +1165,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1173,6 +1184,7 @@ CONFIG_NETWORK_FILESYSTEMS=y  # CONFIG_NFS_FS is not set  # CONFIG_NFSD is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1357,6 +1369,7 @@ CONFIG_CRYPTO=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/magicpanelr2_defconfig b/arch/sh/configs/magicpanelr2_defconfig index a7a16ce357a..28c104da0ba 100644 --- a/arch/sh/configs/magicpanelr2_defconfig +++ b/arch/sh/configs/magicpanelr2_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:37:42 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:44:00 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -71,7 +74,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=17 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -82,6 +84,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -109,8 +112,9 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y  CONFIG_SLAB=y @@ -126,6 +130,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -244,6 +249,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -259,7 +265,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -344,7 +350,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -380,7 +385,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  # CONFIG_NET_KEY is not set  CONFIG_INET=y @@ -586,6 +590,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -741,6 +746,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -765,6 +771,7 @@ CONFIG_GPIOLIB=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set  #  # I2C GPIO expanders: @@ -953,6 +960,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -977,6 +985,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1051,6 +1060,7 @@ CONFIG_DEBUG_KERNEL=y  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set  # CONFIG_DEBUG_SPINLOCK is not set @@ -1097,6 +1107,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1125,6 +1136,7 @@ CONFIG_DUMP_CODE=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/microdev_defconfig b/arch/sh/configs/microdev_defconfig index 7d43fabdc07..41cefa490ec 100644 --- a/arch/sh/configs/microdev_defconfig +++ b/arch/sh/configs/microdev_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:40:41 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:48:22 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  # CONFIG_SYSVIPC is not set  # CONFIG_POSIX_MQUEUE is not set @@ -69,7 +72,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -80,6 +82,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -106,7 +109,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -122,6 +125,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -235,6 +239,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -256,7 +261,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -334,7 +339,6 @@ CONFIG_HZ=250  CONFIG_PREEMPT=y  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -515,6 +519,7 @@ CONFIG_IDE_PROC_FS=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -596,6 +601,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -774,6 +780,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -800,6 +807,7 @@ CONFIG_SUNRPC_GSS=y  CONFIG_RPCSEC_GSS_KRB5=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -992,6 +1000,7 @@ CONFIG_CRYPTO_DES=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/migor_defconfig b/arch/sh/configs/migor_defconfig index d2b18311777..1c889b74cd5 100644 --- a/arch/sh/configs/migor_defconfig +++ b/arch/sh/configs/migor_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:41:41 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 18:01:29 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -47,9 +48,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -71,7 +74,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -82,6 +84,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -109,7 +112,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -117,17 +119,16 @@ CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -243,7 +244,7 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x0c000000  CONFIG_MEMORY_SIZE=0x04000000  CONFIG_29BIT=y -# CONFIG_X2TLB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_NUMA=y  CONFIG_NODES_SHIFT=1 @@ -254,6 +255,8 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -271,7 +274,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_MIGRATION is not set  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -348,7 +351,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -384,6 +387,7 @@ CONFIG_SUSPEND=y  CONFIG_SUSPEND_FREEZER=y  # CONFIG_HIBERNATION is not set  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  CONFIG_NET=y @@ -391,7 +395,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -454,7 +457,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -564,6 +566,7 @@ CONFIG_MTD_NAND_IDS=y  # CONFIG_MTD_NAND_DISKONCHIP is not set  # CONFIG_MTD_NAND_NANDSIM is not set  CONFIG_MTD_NAND_PLATFORM=y +# CONFIG_MTD_NAND_SH_FLCTL is not set  # CONFIG_MTD_ONENAND is not set  # @@ -596,6 +599,7 @@ CONFIG_MISC_DEVICES=y  # CONFIG_ICS932S401 is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_ISL29003 is not set +# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_DS1682 is not set  # CONFIG_C2PORT is not set @@ -612,6 +616,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -764,6 +769,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=3  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -792,6 +798,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -804,15 +811,9 @@ CONFIG_I2C_SH_MOBILE=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -826,13 +827,16 @@ CONFIG_GPIOLIB=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set  #  # I2C GPIO expanders:  # +# CONFIG_GPIO_MAX7300 is not set  # CONFIG_GPIO_MAX732X is not set  # CONFIG_GPIO_PCA953X is not set  # CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set  #  # PCI GPIO expanders: @@ -861,20 +865,23 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set  # CONFIG_TPS65010 is not set  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  CONFIG_MEDIA_SUPPORT=y @@ -1054,6 +1061,7 @@ CONFIG_USB_G_SERIAL=m  # CONFIG_USB_MIDI_GADGET is not set  # CONFIG_USB_G_PRINTER is not set  # CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_NOKIA is not set  # CONFIG_USB_G_MULTI is not set  # @@ -1129,8 +1137,6 @@ CONFIG_RTC_DRV_SH=y  CONFIG_UIO=y  # CONFIG_UIO_PDRV is not set  CONFIG_UIO_PDRV_GENIRQ=y -# CONFIG_UIO_SMX is not set -# CONFIG_UIO_SERCOS3 is not set  #  # TI VLYNQ @@ -1143,7 +1149,6 @@ CONFIG_UIO_PDRV_GENIRQ=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -1202,6 +1207,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1224,6 +1230,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1251,13 +1258,12 @@ CONFIG_FRAME_WARN=1024  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_STACKTRACE=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1265,10 +1271,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set @@ -1383,7 +1386,8 @@ CONFIG_CRYPTO_WORKQUEUE=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  # CONFIG_CRYPTO_HW is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/polaris_defconfig b/arch/sh/configs/polaris_defconfig index d50c0314281..826b1198959 100644 --- a/arch/sh/configs/polaris_defconfig +++ b/arch/sh/configs/polaris_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 11:45:25 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:53:51 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -30,6 +30,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -71,11 +74,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -109,8 +107,9 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y  CONFIG_SLAB=y @@ -126,6 +125,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -244,6 +244,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -259,7 +260,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=999999  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -340,7 +341,6 @@ CONFIG_SCHED_HRTICK=y  CONFIG_PREEMPT=y  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -377,7 +377,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  # CONFIG_NET_KEY is not set  CONFIG_INET=y @@ -583,6 +582,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -712,6 +712,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=3  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  # CONFIG_LEGACY_PTYS is not set @@ -829,7 +830,6 @@ CONFIG_RTC_DRV_SH=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -896,6 +896,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -919,6 +920,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -958,6 +960,7 @@ CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  CONFIG_DEBUG_PREEMPT=y  CONFIG_DEBUG_RT_MUTEXES=y  CONFIG_DEBUG_PI_LIST=y @@ -1010,6 +1013,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1038,6 +1042,7 @@ CONFIG_DUMP_CODE=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/r7780mp_defconfig b/arch/sh/configs/r7780mp_defconfig index efda63d4070..4b751bd37e2 100644 --- a/arch/sh/configs/r7780mp_defconfig +++ b/arch/sh/configs/r7780mp_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:16:13 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 15:58:09 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_IO_TRAPPED=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -48,9 +49,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -73,11 +76,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -112,7 +110,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  # CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y @@ -122,7 +119,6 @@ CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=m  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set @@ -133,6 +129,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -245,11 +242,8 @@ CONFIG_PAGE_OFFSET=0x80000000  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x08000000 -# CONFIG_29BIT is not set -CONFIG_32BIT=y -CONFIG_PMB_ENABLE=y +CONFIG_29BIT=y  # CONFIG_PMB is not set -CONFIG_PMB_FIXED=y  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -257,6 +251,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -278,7 +273,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -358,7 +353,7 @@ CONFIG_KEXEC=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -374,9 +369,9 @@ CONFIG_CMDLINE="console=ttySC0,115200 root=/dev/sda1"  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set @@ -402,7 +397,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -452,6 +446,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_ATM is not set  CONFIG_STP=m  CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y  # CONFIG_NET_DSA is not set  # CONFIG_VLAN_8021Q is not set  # CONFIG_DECNET is not set @@ -472,7 +467,6 @@ CONFIG_LLC=m  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -621,6 +615,7 @@ CONFIG_MISC_DEVICES=y  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_ISL29003 is not set +# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_DS1682 is not set  # CONFIG_C2PORT is not set @@ -638,6 +633,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -755,6 +751,7 @@ CONFIG_SATA_SIL=y  # CONFIG_PATA_IT821X is not set  # CONFIG_PATA_IT8213 is not set  # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set  # CONFIG_PATA_TRIFLEX is not set  # CONFIG_PATA_MARVELL is not set  # CONFIG_PATA_MPIIX is not set @@ -791,7 +788,7 @@ CONFIG_PATA_PLATFORM=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -832,6 +829,7 @@ CONFIG_NET_PCI=y  CONFIG_PCNET32=m  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -884,6 +882,8 @@ CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set  CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set  # CONFIG_ENIC is not set  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set @@ -896,6 +896,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_MLX4_CORE is not set  # CONFIG_TEHUTI is not set  # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set @@ -995,6 +996,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -1043,6 +1045,7 @@ CONFIG_I2C_HIGHLANDER=y  # CONFIG_I2C_OCORES is not set  # CONFIG_I2C_SH_MOBILE is not set  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -1055,15 +1058,9 @@ CONFIG_I2C_HIGHLANDER=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -1087,10 +1084,11 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_ADM1029 is not set  # CONFIG_SENSORS_ADM1031 is not set  # CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7411 is not set  # CONFIG_SENSORS_ADT7462 is not set  # CONFIG_SENSORS_ADT7470 is not set -# CONFIG_SENSORS_ADT7473 is not set  # CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_ASC7621 is not set  # CONFIG_SENSORS_ATXP1 is not set  # CONFIG_SENSORS_DS1621 is not set  # CONFIG_SENSORS_I5K_AMB is not set @@ -1127,6 +1125,7 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_SMSC47M192 is not set  # CONFIG_SENSORS_SMSC47B397 is not set  # CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_AMC6821 is not set  # CONFIG_SENSORS_THMC50 is not set  # CONFIG_SENSORS_TMP401 is not set  # CONFIG_SENSORS_TMP421 is not set @@ -1156,6 +1155,7 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set @@ -1163,12 +1163,14 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -1176,6 +1178,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1372,6 +1375,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1402,6 +1406,7 @@ CONFIG_SUNRPC_GSS=y  CONFIG_RPCSEC_GSS_KRB5=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1480,6 +1485,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_PREEMPT is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set @@ -1490,7 +1496,6 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -CONFIG_STACKTRACE=y  # CONFIG_DEBUG_KOBJECT is not set  CONFIG_DEBUG_BUGVERBOSE=y  CONFIG_DEBUG_INFO=y @@ -1507,11 +1512,11 @@ CONFIG_DEBUG_INFO=y  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set  # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  # CONFIG_PAGE_POISONING is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1519,10 +1524,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set @@ -1535,6 +1537,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1662,7 +1665,8 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/r7785rp_defconfig b/arch/sh/configs/r7785rp_defconfig index f4b00451dce..f5e3819469e 100644 --- a/arch/sh/configs/r7785rp_defconfig +++ b/arch/sh/configs/r7785rp_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:19:35 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:03:27 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -34,6 +34,7 @@ CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_IO_TRAPPED=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -49,9 +50,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -77,7 +80,6 @@ CONFIG_TREE_RCU_TRACE=y  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -112,7 +114,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  # CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y @@ -122,18 +123,17 @@ CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  CONFIG_KPROBES=y  CONFIG_KRETPROBES=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -247,12 +247,9 @@ CONFIG_PAGE_OFFSET=0x80000000  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x08000000 -# CONFIG_29BIT is not set -CONFIG_32BIT=y -CONFIG_PMB_ENABLE=y +CONFIG_29BIT=y  # CONFIG_PMB is not set -CONFIG_PMB_FIXED=y -# CONFIG_X2TLB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  # CONFIG_NUMA is not set  CONFIG_ARCH_FLATMEM_ENABLE=y @@ -263,6 +260,8 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -285,7 +284,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=999999  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -303,6 +302,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y  # CONFIG_CPU_BIG_ENDIAN is not set  CONFIG_SH_FPU=y  CONFIG_SH_STORE_QUEUES=y +# CONFIG_SPECULATIVE_EXECUTION is not set  CONFIG_CPU_HAS_INTEVT=y  CONFIG_CPU_HAS_SR_RB=y  CONFIG_CPU_HAS_FPU=y @@ -377,7 +377,7 @@ CONFIG_KEXEC=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -393,9 +393,9 @@ CONFIG_CMDLINE="console=ttySC0,115200 root=/dev/sda1"  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -# CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set @@ -421,7 +421,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -471,6 +470,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_ATM is not set  CONFIG_STP=m  CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y  # CONFIG_NET_DSA is not set  # CONFIG_VLAN_8021Q is not set  # CONFIG_DECNET is not set @@ -492,7 +492,6 @@ CONFIG_LLC=m  #  # CONFIG_NET_PKTGEN is not set  # CONFIG_NET_TCPPROBE is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -557,6 +556,7 @@ CONFIG_MISC_DEVICES=y  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_ISL29003 is not set +# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_DS1682 is not set  # CONFIG_C2PORT is not set @@ -574,6 +574,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -691,6 +692,7 @@ CONFIG_SATA_SIL=y  # CONFIG_PATA_IT821X is not set  # CONFIG_PATA_IT8213 is not set  # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set  # CONFIG_PATA_TRIFLEX is not set  # CONFIG_PATA_MARVELL is not set  # CONFIG_PATA_MPIIX is not set @@ -727,7 +729,7 @@ CONFIG_PATA_PLATFORM=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -797,6 +799,8 @@ CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set  CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set  # CONFIG_ENIC is not set  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set @@ -809,6 +813,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_MLX4_CORE is not set  # CONFIG_TEHUTI is not set  # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set @@ -910,6 +915,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -959,6 +965,7 @@ CONFIG_I2C_HIGHLANDER=y  # CONFIG_I2C_OCORES is not set  # CONFIG_I2C_SH_MOBILE is not set  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -971,15 +978,9 @@ CONFIG_I2C_HIGHLANDER=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -994,13 +995,17 @@ CONFIG_GPIOLIB=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set +# CONFIG_GPIO_SCH is not set  #  # I2C GPIO expanders:  # +# CONFIG_GPIO_MAX7300 is not set  # CONFIG_GPIO_MAX732X is not set  # CONFIG_GPIO_PCA953X is not set  # CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set  #  # PCI GPIO expanders: @@ -1033,10 +1038,11 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_ADM1029 is not set  # CONFIG_SENSORS_ADM1031 is not set  # CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7411 is not set  # CONFIG_SENSORS_ADT7462 is not set  # CONFIG_SENSORS_ADT7470 is not set -# CONFIG_SENSORS_ADT7473 is not set  # CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_ASC7621 is not set  # CONFIG_SENSORS_ATXP1 is not set  # CONFIG_SENSORS_DS1621 is not set  # CONFIG_SENSORS_I5K_AMB is not set @@ -1074,6 +1080,7 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_SMSC47M192 is not set  # CONFIG_SENSORS_SMSC47B397 is not set  # CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_AMC6821 is not set  # CONFIG_SENSORS_THMC50 is not set  # CONFIG_SENSORS_TMP401 is not set  # CONFIG_SENSORS_TMP421 is not set @@ -1102,20 +1109,25 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set  # CONFIG_TPS65010 is not set  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set +# CONFIG_MFD_TIMBERDALE is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -1123,6 +1135,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1371,6 +1384,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1401,6 +1415,7 @@ CONFIG_SUNRPC_GSS=y  CONFIG_RPCSEC_GSS_KRB5=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1475,6 +1490,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_PREEMPT is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set @@ -1510,7 +1526,6 @@ CONFIG_FRAME_POINTER=y  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  # CONFIG_PAGE_POISONING is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1518,10 +1533,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set @@ -1534,6 +1546,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1661,7 +1674,8 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/rsk7201_defconfig b/arch/sh/configs/rsk7201_defconfig index 2fc635a5a8c..80e7b41ca62 100644 --- a/arch/sh/configs/rsk7201_defconfig +++ b/arch/sh/configs/rsk7201_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:23:12 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:09:18 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -30,6 +30,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -44,9 +45,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_BSD_PROCESS_ACCT=y @@ -65,7 +68,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  # CONFIG_IKCONFIG_PROC is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  # CONFIG_SYSFS_DEPRECATED_V2 is not set  # CONFIG_RELAY is not set @@ -79,6 +81,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -105,7 +108,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -114,7 +116,6 @@ CONFIG_COMPAT_BRK=y  CONFIG_SLOB=y  # CONFIG_MMAP_ALLOW_UNINITIALIZED is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set @@ -124,6 +125,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -240,6 +242,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -255,7 +258,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  CONFIG_NOMMU_INITIAL_TRIM_EXCESS=1  # @@ -326,7 +329,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -485,6 +487,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -545,6 +548,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=8  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  # CONFIG_LEGACY_PTYS is not set  # CONFIG_IPMI_HANDLER is not set @@ -657,7 +661,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XATTR is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -720,6 +723,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -756,13 +760,12 @@ CONFIG_MAGIC_SYSRQ=y  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_STACKTRACE=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -770,10 +773,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set @@ -795,7 +795,8 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/rsk7203_defconfig b/arch/sh/configs/rsk7203_defconfig index 0169e60e094..66eb7d7dad4 100644 --- a/arch/sh/configs/rsk7203_defconfig +++ b/arch/sh/configs/rsk7203_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:23:54 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:11:37 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y @@ -70,7 +73,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  # CONFIG_IKCONFIG_PROC is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  # CONFIG_SYSFS_DEPRECATED_V2 is not set  # CONFIG_RELAY is not set @@ -85,6 +87,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -112,7 +115,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  # CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y @@ -122,7 +124,6 @@ CONFIG_COMPAT_BRK=y  CONFIG_SLOB=y  # CONFIG_MMAP_ALLOW_UNINITIALIZED is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set @@ -132,6 +133,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -248,6 +250,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -263,7 +266,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  CONFIG_NOMMU_INITIAL_TRIM_EXCESS=1  # @@ -350,7 +353,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -448,7 +450,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -592,6 +593,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -662,6 +664,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -723,6 +726,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=4  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  # CONFIG_LEGACY_PTYS is not set  # CONFIG_IPMI_HANDLER is not set @@ -745,6 +749,7 @@ CONFIG_GPIOLIB=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set  #  # I2C GPIO expanders: @@ -783,6 +788,7 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_TMIO is not set  CONFIG_REGULATOR=y  # CONFIG_REGULATOR_DEBUG is not set +# CONFIG_REGULATOR_DUMMY is not set  # CONFIG_REGULATOR_FIXED_VOLTAGE is not set  # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set  # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set @@ -816,6 +822,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y @@ -831,14 +838,19 @@ CONFIG_HID_GYRATION=y  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=y  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=y  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=y +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=y  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -859,7 +871,6 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y  CONFIG_USB_DEVICEFS=y  CONFIG_USB_DEVICE_CLASS=y  # CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set  # CONFIG_USB_OTG is not set  # CONFIG_USB_OTG_WHITELIST is not set  # CONFIG_USB_OTG_BLACKLIST_HUB is not set @@ -916,7 +927,6 @@ CONFIG_USB_R8A66597_HCD=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -928,7 +938,6 @@ CONFIG_USB_R8A66597_HCD=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -948,11 +957,11 @@ CONFIG_LEDS_GPIO=y  CONFIG_LEDS_GPIO_PLATFORM=y  # CONFIG_LEDS_REGULATOR is not set  # CONFIG_LEDS_LT3593 is not set +CONFIG_LEDS_TRIGGERS=y  #  # LED Triggers  # -CONFIG_LEDS_TRIGGERS=y  CONFIG_LEDS_TRIGGER_TIMER=y  CONFIG_LEDS_TRIGGER_HEARTBEAT=y  CONFIG_LEDS_TRIGGER_BACKLIGHT=y @@ -1018,7 +1027,6 @@ CONFIG_RTC_DRV_SH=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -1072,6 +1080,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1098,6 +1107,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1180,6 +1190,7 @@ CONFIG_DEBUG_OBJECTS=y  # CONFIG_DEBUG_OBJECTS_TIMERS is not set  # CONFIG_DEBUG_OBJECTS_WORK is not set  CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set  # CONFIG_DEBUG_SPINLOCK is not set @@ -1189,7 +1200,6 @@ CONFIG_DEBUG_MUTEXES=y  # CONFIG_LOCK_STAT is not set  CONFIG_DEBUG_SPINLOCK_SLEEP=y  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -CONFIG_STACKTRACE=y  # CONFIG_DEBUG_KOBJECT is not set  CONFIG_DEBUG_BUGVERBOSE=y  CONFIG_DEBUG_INFO=y @@ -1207,11 +1217,11 @@ CONFIG_FRAME_POINTER=y  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set  # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y  # CONFIG_PAGE_POISONING is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1219,10 +1229,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set @@ -1234,6 +1241,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1263,7 +1271,8 @@ CONFIG_DUMP_CODE=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/rts7751r2d1_defconfig b/arch/sh/configs/rts7751r2d1_defconfig index fba1f62d56e..6bd3d95d151 100644 --- a/arch/sh/configs/rts7751r2d1_defconfig +++ b/arch/sh/configs/rts7751r2d1_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:25:36 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:15:07 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_IO_TRAPPED=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -47,9 +48,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -70,7 +73,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -104,7 +106,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y @@ -113,7 +114,6 @@ CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set @@ -124,6 +124,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -242,6 +243,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -257,7 +259,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -343,7 +345,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -359,9 +360,9 @@ CONFIG_CMDLINE="console=tty0 console=ttySC1,115200 root=/dev/sda1"  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set @@ -389,7 +390,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -449,7 +449,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -525,6 +524,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -642,6 +642,7 @@ CONFIG_ATA_SFF=y  # CONFIG_PATA_IT821X is not set  # CONFIG_PATA_IT8213 is not set  # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set  # CONFIG_PATA_TRIFLEX is not set  # CONFIG_PATA_MARVELL is not set  # CONFIG_PATA_MPIIX is not set @@ -678,7 +679,7 @@ CONFIG_PATA_PLATFORM=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -719,6 +720,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -771,6 +773,8 @@ CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set  CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set  # CONFIG_ENIC is not set  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set @@ -783,6 +787,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_MLX4_CORE is not set  # CONFIG_TEHUTI is not set  # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set @@ -805,6 +810,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_FDDI is not set  # CONFIG_HIPPI is not set @@ -877,11 +883,12 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4  #  # CONFIG_SERIAL_MAX3100 is not set  CONFIG_SERIAL_SH_SCI=y -CONFIG_SERIAL_SH_SCI_NR_UARTS=1 +CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -964,6 +971,7 @@ CONFIG_MFD_SM501=y  # CONFIG_MFD_MC13783 is not set  # CONFIG_EZX_PCAP is not set  # CONFIG_AB4500_CORE is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -971,6 +979,7 @@ CONFIG_MFD_SM501=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -1152,6 +1161,7 @@ CONFIG_SND_SPI=y  CONFIG_SND_SUPERH=y  CONFIG_SND_USB=y  # CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_UA101 is not set  # CONFIG_SND_USB_CAIAQ is not set  # CONFIG_SND_SOC is not set  CONFIG_SOUND_PRIME=m @@ -1170,6 +1180,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y @@ -1185,14 +1196,19 @@ CONFIG_HID_GYRATION=y  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=y  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=y  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=y +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=y  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -1291,7 +1307,6 @@ CONFIG_USB_LIBUSUAL=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1303,7 +1318,6 @@ CONFIG_USB_LIBUSUAL=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1381,7 +1395,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -1442,6 +1455,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1456,6 +1470,7 @@ CONFIG_NETWORK_FILESYSTEMS=y  # CONFIG_NFS_FS is not set  # CONFIG_NFSD is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1522,13 +1537,12 @@ CONFIG_FRAME_WARN=1024  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_STACKTRACE=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1536,10 +1550,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set @@ -1648,7 +1659,8 @@ CONFIG_CRYPTO=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/rts7751r2dplus_defconfig b/arch/sh/configs/rts7751r2dplus_defconfig index a8d538f06e6..487abcc4d4e 100644 --- a/arch/sh/configs/rts7751r2dplus_defconfig +++ b/arch/sh/configs/rts7751r2dplus_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:26:39 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:20:00 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_IO_TRAPPED=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -47,9 +48,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -70,7 +73,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -104,7 +106,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y @@ -113,7 +114,6 @@ CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set @@ -124,6 +124,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -242,6 +243,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -257,7 +259,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -343,7 +345,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -359,9 +360,9 @@ CONFIG_CMDLINE="console=tty0 console=ttySC1,115200 root=/dev/sda1"  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set @@ -389,7 +390,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -449,7 +449,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -611,6 +610,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -728,6 +728,7 @@ CONFIG_ATA_SFF=y  # CONFIG_PATA_IT821X is not set  # CONFIG_PATA_IT8213 is not set  # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set  # CONFIG_PATA_TRIFLEX is not set  # CONFIG_PATA_MARVELL is not set  # CONFIG_PATA_MPIIX is not set @@ -764,7 +765,7 @@ CONFIG_PATA_PLATFORM=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -805,6 +806,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -857,6 +859,8 @@ CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set  CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set  # CONFIG_ENIC is not set  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set @@ -869,6 +873,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_MLX4_CORE is not set  # CONFIG_TEHUTI is not set  # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set @@ -891,6 +896,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_FDDI is not set  # CONFIG_HIPPI is not set @@ -963,11 +969,12 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4  #  # CONFIG_SERIAL_MAX3100 is not set  CONFIG_SERIAL_SH_SCI=y -CONFIG_SERIAL_SH_SCI_NR_UARTS=1 +CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -1050,6 +1057,7 @@ CONFIG_MFD_SM501=y  # CONFIG_MFD_MC13783 is not set  # CONFIG_EZX_PCAP is not set  # CONFIG_AB4500_CORE is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -1057,6 +1065,7 @@ CONFIG_MFD_SM501=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -1238,6 +1247,7 @@ CONFIG_SND_SPI=y  CONFIG_SND_SUPERH=y  CONFIG_SND_USB=y  # CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_UA101 is not set  # CONFIG_SND_USB_CAIAQ is not set  # CONFIG_SND_SOC is not set  CONFIG_SOUND_PRIME=m @@ -1256,6 +1266,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y @@ -1271,14 +1282,19 @@ CONFIG_HID_GYRATION=y  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=y  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=y  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=y +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=y  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -1377,7 +1393,6 @@ CONFIG_USB_LIBUSUAL=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1389,7 +1404,6 @@ CONFIG_USB_LIBUSUAL=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1467,7 +1481,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -1529,6 +1542,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1543,6 +1557,7 @@ CONFIG_NETWORK_FILESYSTEMS=y  # CONFIG_NFS_FS is not set  # CONFIG_NFSD is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1609,13 +1624,12 @@ CONFIG_FRAME_WARN=1024  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_STACKTRACE=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1623,10 +1637,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set @@ -1735,7 +1746,8 @@ CONFIG_CRYPTO=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/sdk7780_defconfig b/arch/sh/configs/sdk7780_defconfig index 1859ba09994..fe923142c2c 100644 --- a/arch/sh/configs/sdk7780_defconfig +++ b/arch/sh/configs/sdk7780_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:27:20 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:21:00 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -47,9 +48,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -73,7 +76,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=18 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -107,8 +109,9 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y @@ -126,6 +129,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -237,11 +241,8 @@ CONFIG_PAGE_OFFSET=0x80000000  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x08000000 -# CONFIG_29BIT is not set -CONFIG_32BIT=y -CONFIG_PMB_ENABLE=y +CONFIG_29BIT=y  # CONFIG_PMB is not set -CONFIG_PMB_FIXED=y  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -249,6 +250,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -270,7 +272,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -353,7 +355,7 @@ CONFIG_SCHED_HRTICK=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -369,16 +371,15 @@ CONFIG_CMDLINE="mem=128M console=tty0 console=ttySC0,115200 ip=bootp root=/dev/n  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -# CONFIG_PCI_LEGACY is not set  CONFIG_PCI_DEBUG=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set  CONFIG_PCCARD=y  CONFIG_PCMCIA=y  CONFIG_PCMCIA_LOAD_CIS=y -CONFIG_PCMCIA_IOCTL=y  CONFIG_CARDBUS=y  # @@ -417,7 +418,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -659,6 +659,7 @@ CONFIG_BLK_DEV_GENERIC=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -777,6 +778,7 @@ CONFIG_ATA_SFF=y  # CONFIG_PATA_IT821X is not set  # CONFIG_PATA_IT8213 is not set  # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set  # CONFIG_PATA_TRIFLEX is not set  # CONFIG_PATA_MARVELL is not set  # CONFIG_PATA_MPIIX is not set @@ -824,7 +826,7 @@ CONFIG_BLK_DEV_DM=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -890,6 +892,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_NET_PCMCIA is not set  # CONFIG_WAN is not set  # CONFIG_FDDI is not set @@ -995,6 +998,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -1057,6 +1061,7 @@ CONFIG_SSB_DRIVER_PCICORE=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -1064,6 +1069,7 @@ CONFIG_SSB_DRIVER_PCICORE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1167,6 +1173,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y @@ -1182,14 +1189,19 @@ CONFIG_HID_GYRATION=y  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=y  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=y  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=y +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=y  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -1288,7 +1300,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1301,7 +1312,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1317,10 +1327,6 @@ CONFIG_LEDS_CLASS=y  #  # LED drivers  # - -# -# LED Triggers -#  # CONFIG_LEDS_TRIGGERS is not set  # CONFIG_ACCESSIBILITY is not set  # CONFIG_INFINIBAND is not set @@ -1416,6 +1422,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1444,6 +1451,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1523,6 +1531,7 @@ CONFIG_TIMER_STATS=y  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK is not set  CONFIG_DEBUG_PREEMPT=y  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set @@ -1571,6 +1580,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1690,6 +1700,7 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/sdk7786_defconfig b/arch/sh/configs/sdk7786_defconfig new file mode 100644 index 00000000000..26982459852 --- /dev/null +++ b/arch/sh/configs/sdk7786_defconfig @@ -0,0 +1,2008 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 18:03:37 2010 +# +CONFIG_SUPERH=y +CONFIG_SUPERH32=y +# CONFIG_SUPERH64 is not set +CONFIG_ARCH_DEFCONFIG="arch/sh/configs/shx3_defconfig" +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y +# CONFIG_GENERIC_GPIO is not set +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_LOCKBREAK=y +# CONFIG_ARCH_SUSPEND_POSSIBLE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_SYS_SUPPORTS_HUGETLBFS=y +CONFIG_SYS_SUPPORTS_SMP=y +CONFIG_SYS_SUPPORTS_NUMA=y +CONFIG_SYS_SUPPORTS_PCI=y +CONFIG_SYS_SUPPORTS_TMU=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_ARCH_NO_VIRT_TO_BUS=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_DMA_COHERENT=y +# CONFIG_DMA_NONCOHERENT is not set +# CONFIG_NEED_DMA_MAP_STATE is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZMA is not set +CONFIG_KERNEL_LZO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_TREE=y + +# +# RCU Subsystem +# +# CONFIG_TREE_RCU is not set +CONFIG_TREE_PREEMPT_RCU=y +# CONFIG_TINY_RCU is not set +CONFIG_RCU_TRACE=y +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +CONFIG_TREE_RCU_TRACE=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_CGROUPS=y +CONFIG_CGROUP_DEBUG=y +CONFIG_CGROUP_NS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CPUSETS=y +# CONFIG_PROC_PID_CPUSET is not set +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +CONFIG_CGROUP_MEM_RES_CTLR=y +CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_MM_OWNER=y +# CONFIG_SYSFS_DEPRECATED_V2 is not set +CONFIG_RELAY=y +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_LZO=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_PCI_QUIRKS=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_PROFILING=y +CONFIG_TRACEPOINTS=y +CONFIG_OPROFILE=m +CONFIG_HAVE_OPROFILE=y +CONFIG_KPROBES=y +CONFIG_KRETPROBES=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_HAVE_CLK=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_SLOW_WORK=y +CONFIG_SLOW_WORK_DEBUG=y +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_STOP_MACHINE=y +CONFIG_BLOCK=y +CONFIG_LBDAF=y +CONFIG_BLK_DEV_BSG=y +# CONFIG_BLK_DEV_INTEGRITY is not set +CONFIG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_CFQ_GROUP_IOSCHED=y +# CONFIG_DEBUG_CFQ_IOSCHED is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +# CONFIG_INLINE_SPIN_UNLOCK is not set +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +# CONFIG_INLINE_READ_UNLOCK is not set +# CONFIG_INLINE_READ_UNLOCK_BH is not set +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +# CONFIG_INLINE_WRITE_UNLOCK is not set +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_FREEZER=y + +# +# System type +# +CONFIG_CPU_SH4=y +CONFIG_CPU_SH4A=y +CONFIG_CPU_SHX3=y +# CONFIG_CPU_SUBTYPE_SH7619 is not set +# CONFIG_CPU_SUBTYPE_SH7201 is not set +# CONFIG_CPU_SUBTYPE_SH7203 is not set +# CONFIG_CPU_SUBTYPE_SH7206 is not set +# CONFIG_CPU_SUBTYPE_SH7263 is not set +# CONFIG_CPU_SUBTYPE_MXG is not set +# CONFIG_CPU_SUBTYPE_SH7705 is not set +# CONFIG_CPU_SUBTYPE_SH7706 is not set +# CONFIG_CPU_SUBTYPE_SH7707 is not set +# CONFIG_CPU_SUBTYPE_SH7708 is not set +# CONFIG_CPU_SUBTYPE_SH7709 is not set +# CONFIG_CPU_SUBTYPE_SH7710 is not set +# CONFIG_CPU_SUBTYPE_SH7712 is not set +# CONFIG_CPU_SUBTYPE_SH7720 is not set +# CONFIG_CPU_SUBTYPE_SH7721 is not set +# CONFIG_CPU_SUBTYPE_SH7750 is not set +# CONFIG_CPU_SUBTYPE_SH7091 is not set +# CONFIG_CPU_SUBTYPE_SH7750R is not set +# CONFIG_CPU_SUBTYPE_SH7750S is not set +# CONFIG_CPU_SUBTYPE_SH7751 is not set +# CONFIG_CPU_SUBTYPE_SH7751R is not set +# CONFIG_CPU_SUBTYPE_SH7760 is not set +# CONFIG_CPU_SUBTYPE_SH4_202 is not set +# CONFIG_CPU_SUBTYPE_SH7723 is not set +# CONFIG_CPU_SUBTYPE_SH7724 is not set +# CONFIG_CPU_SUBTYPE_SH7757 is not set +# CONFIG_CPU_SUBTYPE_SH7763 is not set +# CONFIG_CPU_SUBTYPE_SH7770 is not set +# CONFIG_CPU_SUBTYPE_SH7780 is not set +# CONFIG_CPU_SUBTYPE_SH7785 is not set +CONFIG_CPU_SUBTYPE_SH7786=y +# CONFIG_CPU_SUBTYPE_SHX3 is not set +# CONFIG_CPU_SUBTYPE_SH7343 is not set +# CONFIG_CPU_SUBTYPE_SH7722 is not set +# CONFIG_CPU_SUBTYPE_SH7366 is not set + +# +# Memory management options +# +CONFIG_QUICKLIST=y +CONFIG_MMU=y +CONFIG_PAGE_OFFSET=0x80000000 +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_MEMORY_START=0x40000000 +CONFIG_MEMORY_SIZE=0x20000000 +# CONFIG_29BIT is not set +CONFIG_32BIT=y +CONFIG_PMB=y +CONFIG_X2TLB=y +CONFIG_VSYSCALL=y +CONFIG_NUMA=y +CONFIG_NODES_SHIFT=1 +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_MAX_ACTIVE_REGIONS=1 +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_ARCH_MEMORY_PROBE=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_8KB is not set +# CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_64KB is not set +# CONFIG_HUGETLB_PAGE_SIZE_64K is not set +# CONFIG_HUGETLB_PAGE_SIZE_256K is not set +# CONFIG_HUGETLB_PAGE_SIZE_1MB is not set +# CONFIG_HUGETLB_PAGE_SIZE_4MB is not set +CONFIG_HUGETLB_PAGE_SIZE_64MB=y +# CONFIG_HUGETLB_PAGE_SIZE_512MB is not set +CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_FLATMEM_MANUAL is not set +# CONFIG_DISCONTIGMEM_MANUAL is not set +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM=y +CONFIG_NEED_MULTIPLE_NODES=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_SPARSE=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_MIGRATION=y +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +CONFIG_NR_QUICK=1 +CONFIG_KSM=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_SCHED_MC=y + +# +# Cache configuration +# +CONFIG_CACHE_WRITEBACK=y +# CONFIG_CACHE_WRITETHROUGH is not set +# CONFIG_CACHE_OFF is not set + +# +# Processor features +# +CONFIG_CPU_LITTLE_ENDIAN=y +# CONFIG_CPU_BIG_ENDIAN is not set +CONFIG_SH_FPU=y +CONFIG_SH_STORE_QUEUES=y +CONFIG_SPECULATIVE_EXECUTION=y +CONFIG_CPU_HAS_INTEVT=y +CONFIG_CPU_HAS_SR_RB=y +CONFIG_CPU_HAS_PTEAEX=y +CONFIG_CPU_HAS_FPU=y + +# +# Board support +# +CONFIG_SH_SDK7786=y +# CONFIG_SH_URQUELL is not set + +# +# Timer and clock configuration +# +CONFIG_SH_TIMER_TMU=y +CONFIG_SH_CLK_CPG=y +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +# CONFIG_CPU_FREQ_DEBUG is not set +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=m +CONFIG_CPU_FREQ_GOV_ONDEMAND=m +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m +CONFIG_SH_CPU_FREQ=y + +# +# DMA support +# +CONFIG_SH_DMA=y +# CONFIG_SH_DMA_API is not set +CONFIG_NR_ONCHIP_DMA_CHANNELS=6 +# CONFIG_NR_DMA_CHANNELS_BOOL is not set + +# +# Companion Chips +# + +# +# Additional SuperH Device Drivers +# +CONFIG_HEARTBEAT=y +# CONFIG_PUSH_SWITCH is not set + +# +# Kernel features +# +# CONFIG_HZ_100 is not set +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +CONFIG_HZ_1000=y +CONFIG_HZ=1000 +CONFIG_SCHED_HRTICK=y +CONFIG_KEXEC=y +CONFIG_SECCOMP=y +CONFIG_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_HOTPLUG_CPU=y +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +CONFIG_INTC_USERIMASK=y +CONFIG_INTC_BALANCING=y + +# +# Boot options +# +CONFIG_ZERO_PAGE_OFFSET=0x00001000 +CONFIG_BOOT_LINK_OFFSET=0x00800000 +CONFIG_ENTRY_OFFSET=0x00001000 +CONFIG_CMDLINE_OVERWRITE=y +# CONFIG_CMDLINE_EXTEND is not set +CONFIG_CMDLINE="console=ttySC1,115200 earlyprintk=sh-sci.1,115200 root=/dev/sda1 nmi_debug=state,debounce rootdelay=5 pmb=iomap ignore_loglevel" + +# +# Bus options +# +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCIEAER=y +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIEAER_INJECT=y +CONFIG_PCIEASPM=y +CONFIG_PCIEASPM_DEBUG=y +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCI_DEBUG is not set +# CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +# CONFIG_HAVE_AOUT is not set +CONFIG_BINFMT_MISC=y + +# +# Power management options (EXPERIMENTAL) +# +CONFIG_PM=y +CONFIG_PM_DEBUG=y +# CONFIG_PM_ADVANCED_DEBUG is not set +CONFIG_PM_VERBOSE=y +# CONFIG_HIBERNATION is not set +CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +CONFIG_NET_KEY=y +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NET_TCPPROBE is not set +# CONFIG_NET_DROP_MONITOR is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +# CONFIG_WIRELESS is not set +# CONFIG_WIMAX is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +# CONFIG_FW_LOADER is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AR7_PARTS is not set + +# +# User Modules And Translation Layers +# +# CONFIG_MTD_CHAR is not set +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +CONFIG_FTL=y +CONFIG_NFTL=y +# CONFIG_NFTL_RW is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +CONFIG_MTD_OOPS=m + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +CONFIG_MTD_JEDECPROBE=y +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=y +CONFIG_MTD_RAM=y +CONFIG_MTD_ROM=m +CONFIG_MTD_ABSENT=m + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_INTEL_VR_NOR is not set +CONFIG_MTD_PLATRAM=y + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SST25L is not set +# CONFIG_MTD_SLRAM is not set +CONFIG_MTD_PHRAM=y +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_CAFE is not set +# CONFIG_MTD_NAND_NANDSIM is not set +CONFIG_MTD_NAND_PLATFORM=y +# CONFIG_MTD_ALAUDA is not set +CONFIG_MTD_NAND_SH_FLCTL=m +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set + +# +# UBI - Unsorted block images +# +CONFIG_MTD_UBI=y +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_RESERVE=1 +CONFIG_MTD_UBI_GLUEBI=m + +# +# UBI debugging options +# +# CONFIG_MTD_UBI_DEBUG is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_CRYPTOLOOP=y + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_HAVE_IDE=y +CONFIG_IDE=y + +# +# Please see Documentation/ide/ide.txt for help/info on IDE drives +# +CONFIG_IDE_ATAPI=y +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=y +CONFIG_IDE_GD_ATA=y +# CONFIG_IDE_GD_ATAPI is not set +CONFIG_BLK_DEV_IDECD=y +CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_BLK_DEV_PLATFORM=y + +# +# PCI IDE chipsets support +# +# CONFIG_BLK_DEV_GENERIC is not set +# CONFIG_BLK_DEV_OPTI621 is not set +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_JMICRON is not set +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_IT8172 is not set +# CONFIG_BLK_DEV_IT8213 is not set +# CONFIG_BLK_DEV_IT821X is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +# CONFIG_BLK_DEV_TC86C001 is not set +# CONFIG_BLK_DEV_IDEDMA is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_SR_VENDOR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set +CONFIG_SCSI_MULTI_LUN=y +CONFIG_SCSI_CONSTANTS=y +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_SATA_PMP=y +# CONFIG_SATA_AHCI is not set +CONFIG_SATA_SIL24=y +CONFIG_ATA_SFF=y +# CONFIG_SATA_SVW is not set +# CONFIG_ATA_PIIX is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATP867X is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RDC is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TOSHIBA is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +CONFIG_PATA_PLATFORM=y +# CONFIG_PATA_SCH is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=y +CONFIG_DM_DEBUG=y +# CONFIG_DM_CRYPT is not set +# CONFIG_DM_SNAPSHOT is not set +# CONFIG_DM_MIRROR is not set +# CONFIG_DM_ZERO is not set +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set +CONFIG_DM_UEVENT=y +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# You can enable one or both FireWire driver stacks. +# + +# +# The newer stack is recommended. +# +# CONFIG_FIREWIRE is not set +# CONFIG_IEEE1394 is not set +# CONFIG_I2O is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_ARCNET is not set +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +# CONFIG_MARVELL_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_LXT_PHY is not set +# CONFIG_CICADA_PHY is not set +# CONFIG_VITESSE_PHY is not set +# CONFIG_SMSC_PHY is not set +# CONFIG_BROADCOM_PHY is not set +# CONFIG_ICPLUS_PHY is not set +# CONFIG_REALTEK_PHY is not set +# CONFIG_NATIONAL_PHY is not set +# CONFIG_STE10XP is not set +# CONFIG_LSI_ET1011C_PHY is not set +# CONFIG_FIXED_PHY is not set +CONFIG_MDIO_BITBANG=y +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_AX88796 is not set +# CONFIG_STNIC is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +CONFIG_SMC91X=y +# CONFIG_ENC28J60 is not set +# CONFIG_ETHOC is not set +# CONFIG_SMC911X is not set +CONFIG_SMSC911X=y +# CONFIG_DNET is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +# CONFIG_NET_PCI is not set +# CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851 is not set +# CONFIG_KS8851_MLL is not set +# CONFIG_ATL2 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set +# CONFIG_WLAN is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_QT2160 is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_SH_KEYSC is not set +# CONFIG_KEYBOARD_XTKBD is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_ELANTECH is not set +# CONFIG_MOUSE_PS2_SENTELIC is not set +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_BCM5974 is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_DEVKMEM=y +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_NOZOMI is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MAX3100 is not set +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=6 +CONFIG_SERIAL_SH_SCI_CONSOLE=y +CONFIG_SERIAL_SH_SCI_DMA=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_COMPAT is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_HELPER_AUTO=y + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_ISCH is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_DESIGNWARE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_SH_MOBILE is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +# CONFIG_SPI_SH_MSIOF is not set +# CONFIG_SPI_SH_SCI is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set + +# +# SPI Protocol Masters +# +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set + +# +# PPS support +# +# CONFIG_PPS is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_ALIM7101_WDT is not set +CONFIG_SH_WDT=y +# CONFIG_SH_WDT_MMAP is not set + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SH_MOBILE_SDHI is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_MFD_TMIO is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_MFD_MC13783 is not set +# CONFIG_AB3100_CORE is not set +# CONFIG_EZX_PCAP is not set +# CONFIG_AB4500_CORE is not set +# CONFIG_LPC_SCH is not set +# CONFIG_REGULATOR is not set +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +# CONFIG_DRM is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +# CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +# CONFIG_SOUND is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +# CONFIG_USB_HIDDEV is not set + +# +# Special HID drivers +# +# CONFIG_HID_3M_PCT is not set +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_APPLE is not set +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_GYRATION is not set +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LOGITECH is not set +# CONFIG_HID_MICROSOFT is not set +# CONFIG_HID_MOSART is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_QUANTA is not set +# CONFIG_HID_SAMSUNG is not set +# CONFIG_HID_SONY is not set +# CONFIG_HID_STANTUM is not set +# CONFIG_HID_SUNPLUS is not set +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TOPSEED is not set +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_ZEROPLUS is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +CONFIG_USB_MON=y +# CONFIG_USB_WUSB is not set +# CONFIG_USB_WUSB_CBAF is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set +# CONFIG_USB_EHCI_HCD is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_UHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_WHCI_HCD is not set +# CONFIG_USB_HWA_HCD is not set +# CONFIG_USB_GADGET_MUSB_HDRC is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB port drivers +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_ISIGHTFW is not set +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_PXA25X is not set +# CONFIG_USB_GADGET_R8A66597 is not set +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_S3C_HSOTG is not set +# CONFIG_USB_GADGET_IMX is not set +# CONFIG_USB_GADGET_S3C2410 is not set +CONFIG_USB_GADGET_M66592=y +CONFIG_USB_M66592=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_FSL_QE is not set +# CONFIG_USB_GADGET_CI13XXX is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LANGWELL is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_ETH is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_MASS_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +# CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_NOKIA is not set +# CONFIG_USB_G_MULTI is not set + +# +# OTG and related infrastructure +# +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_UWB is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +# CONFIG_NEW_LEDS is not set +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +CONFIG_RTC_DRV_MAX6900=y +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_DS3234 is not set +# CONFIG_RTC_DRV_PCF2123 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SH=y +# CONFIG_RTC_DRV_GENERIC is not set +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +CONFIG_SH_DMAE=y +CONFIG_DMA_ENGINE=y + +# +# DMA Clients +# +# CONFIG_NET_DMA is not set +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_DMATEST is not set +# CONFIG_AUXDISPLAY is not set +CONFIG_UIO=m +# CONFIG_UIO_CIF is not set +CONFIG_UIO_PDRV=m +CONFIG_UIO_PDRV_GENIRQ=m +# CONFIG_UIO_AEC is not set +# CONFIG_UIO_SERCOS3 is not set +CONFIG_UIO_PCI_GENERIC=m +# CONFIG_UIO_NETX is not set + +# +# TI VLYNQ +# +CONFIG_STAGING=y +# CONFIG_STAGING_EXCLUDE_BUILD is not set +# CONFIG_USB_IP_COMMON is not set +# CONFIG_ECHO is not set +# CONFIG_POCH is not set +# CONFIG_COMEDI is not set +# CONFIG_ASUS_OLED is not set +# CONFIG_TRANZPORT is not set + +# +# Qualcomm MSM Camera And Video +# + +# +# Camera Sensor Selection +# +# CONFIG_INPUT_GPIO is not set +# CONFIG_POHMELFS is not set +# CONFIG_IDE_PHISON is not set +# CONFIG_VME_BUS is not set + +# +# RAR Register Driver +# +# CONFIG_RAR_REGISTER is not set +# CONFIG_IIO is not set +CONFIG_RAMZSWAP=m +CONFIG_RAMZSWAP_STATS=y +# CONFIG_BATMAN_ADV is not set +# CONFIG_STRIP is not set +# CONFIG_DT3155 is not set +# CONFIG_CRYSTALHD is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +# CONFIG_EXT2_FS_POSIX_ACL is not set +# CONFIG_EXT2_FS_SECURITY is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_XATTR=y +# CONFIG_EXT4_FS_POSIX_ACL is not set +# CONFIG_EXT4_FS_SECURITY is not set +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=y +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_XFS_RT is not set +# CONFIG_XFS_DEBUG is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +CONFIG_BTRFS_FS=y +# CONFIG_BTRFS_FS_POSIX_ACL is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=y +CONFIG_CUSE=m + +# +# Caches +# +CONFIG_FSCACHE=m +# CONFIG_FSCACHE_STATS is not set +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_CONFIGFS_FS=y +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +CONFIG_JFFS2_FS_XATTR=y +CONFIG_JFFS2_FS_POSIX_ACL=y +CONFIG_JFFS2_FS_SECURITY=y +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +CONFIG_UBIFS_FS=m +# CONFIG_UBIFS_FS_XATTR is not set +# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +# CONFIG_UBIFS_FS_DEBUG is not set +CONFIG_LOGFS=m +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +CONFIG_ROMFS_FS=m +CONFIG_ROMFS_BACKED_BY_BLOCK=y +# CONFIG_ROMFS_BACKED_BY_MTD is not set +# CONFIG_ROMFS_BACKED_BY_BOTH is not set +CONFIG_ROMFS_ON_BLOCK=y +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_V4_1 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=y +CONFIG_NLS_CODEPAGE_949=m +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +CONFIG_NLS_ISO8859_15=m +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_PRINTK_TIME=y +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_FRAME_WARN=1024 +CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +CONFIG_SCHED_DEBUG=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_SLAB is not set +CONFIG_DEBUG_PREEMPT=y +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +CONFIG_STACKTRACE=y +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_FRAME_POINTER=y +# CONFIG_RCU_TORTURE_TEST is not set +CONFIG_RCU_CPU_STALL_DETECTOR=y +# CONFIG_RCU_CPU_STALL_VERBOSE is not set +# CONFIG_KPROBES_SANITY_TEST is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_LATENCYTOP=y +CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_PAGE_POISONING is not set +CONFIG_NOP_TRACER=y +CONFIG_HAVE_FTRACE_NMI_ENTER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_RING_BUFFER=y +CONFIG_FTRACE_NMI_ENTER=y +CONFIG_EVENT_TRACING=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_RING_BUFFER_ALLOW_SWAP=y +CONFIG_TRACING=y +CONFIG_GENERIC_TRACER=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +CONFIG_FUNCTION_TRACER=y +# CONFIG_FUNCTION_GRAPH_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_PREEMPT_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_FTRACE_SYSCALLS is not set +# CONFIG_BOOT_TRACER is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +CONFIG_KSYM_TRACER=y +# CONFIG_PROFILE_KSYM_TRACER is not set +# CONFIG_STACK_TRACER is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_DYNAMIC_FTRACE=y +# CONFIG_FUNCTION_PROFILER is not set +CONFIG_FTRACE_MCOUNT_RECORD=y +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_DYNAMIC_DEBUG is not set +CONFIG_DMA_API_DEBUG=y +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +# CONFIG_SH_STANDARD_BIOS is not set +# CONFIG_STACK_DEBUG is not set +CONFIG_DEBUG_STACK_USAGE=y +# CONFIG_4KSTACKS is not set +CONFIG_DUMP_CODE=y +CONFIG_DWARF_UNWINDER=y +# CONFIG_SH_NO_BSS_INIT is not set +CONFIG_MCOUNT=y + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITYFS is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +# CONFIG_CRYPTO_GF128MUL is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_PCRYPT is not set +CONFIG_CRYPTO_WORKQUEUE=y +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_SEQIV is not set + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +# CONFIG_CRYPTO_ECB is not set +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_XTS is not set + +# +# Hash modes +# +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_GHASH is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_RMD128 is not set +# CONFIG_CRYPTO_RMD160 is not set +# CONFIG_CRYPTO_RMD256 is not set +# CONFIG_CRYPTO_RMD320 is not set +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_WP512 is not set + +# +# Ciphers +# +# CONFIG_CRYPTO_AES is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_ARC4 is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_TEA is not set +# CONFIG_CRYPTO_TWOFISH is not set + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=m +# CONFIG_CRYPTO_ZLIB is not set +CONFIG_CRYPTO_LZO=m + +# +# Random Number Generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +CONFIG_CRYPTO_HW=y +# CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_VIRTUALIZATION is not set +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_LAST_BIT=y +# CONFIG_CRC_CCITT is not set +CONFIG_CRC16=y +# CONFIG_CRC_T10DIF is not set +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=y +CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_BTREE=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y diff --git a/arch/sh/configs/se7206_defconfig b/arch/sh/configs/se7206_defconfig index 43e6780a89d..910eaec934c 100644 --- a/arch/sh/configs/se7206_defconfig +++ b/arch/sh/configs/se7206_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:30:00 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:34:06 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y @@ -72,7 +75,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_TREE_RCU_TRACE=y  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  CONFIG_CGROUPS=y  CONFIG_CGROUP_DEBUG=y  CONFIG_CGROUP_NS=y @@ -82,6 +84,7 @@ CONFIG_CGROUP_DEVICE=y  CONFIG_CGROUP_CPUACCT=y  CONFIG_RESOURCE_COUNTERS=y  CONFIG_CGROUP_MEM_RES_CTLR=y +# CONFIG_CGROUP_SCHED is not set  CONFIG_MM_OWNER=y  # CONFIG_SYSFS_DEPRECATED_V2 is not set  CONFIG_RELAY=y @@ -96,6 +99,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -123,7 +127,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  # CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y @@ -133,7 +136,6 @@ CONFIG_VM_EVENT_COUNTERS=y  CONFIG_SLOB=y  # CONFIG_MMAP_ALLOW_UNINITIALIZED is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set @@ -143,6 +145,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -162,7 +165,6 @@ CONFIG_BLOCK=y  CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set -# CONFIG_BLK_CGROUP is not set  #  # IO Schedulers @@ -261,6 +263,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -276,7 +279,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  CONFIG_NOMMU_INITIAL_TRIM_EXCESS=1  # @@ -361,7 +364,6 @@ CONFIG_HZ=1000  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -400,7 +402,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -463,7 +464,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -607,6 +607,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -688,6 +689,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=4  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  # CONFIG_LEGACY_PTYS is not set  # CONFIG_IPMI_HANDLER is not set @@ -799,7 +801,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XATTR is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -853,6 +854,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  CONFIG_CRAMFS=y  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -881,6 +883,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -919,6 +922,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_KMEMLEAK is not set  CONFIG_DEBUG_PREEMPT=y  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set @@ -929,7 +933,6 @@ CONFIG_DEBUG_PREEMPT=y  # CONFIG_LOCK_STAT is not set  CONFIG_DEBUG_SPINLOCK_SLEEP=y  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -CONFIG_STACKTRACE=y  # CONFIG_DEBUG_KOBJECT is not set  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_INFO is not set @@ -947,11 +950,11 @@ CONFIG_FRAME_POINTER=y  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set  # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  # CONFIG_PAGE_POISONING is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -959,10 +962,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set @@ -975,6 +975,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1094,7 +1095,8 @@ CONFIG_CRYPTO_LZO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  # CONFIG_CRYPTO_HW is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/se7343_defconfig b/arch/sh/configs/se7343_defconfig index ec494e32fa2..586cb1e02be 100644 --- a/arch/sh/configs/se7343_defconfig +++ b/arch/sh/configs/se7343_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:30:41 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:37:31 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -70,11 +73,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -107,7 +105,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -124,6 +122,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -245,6 +244,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -260,7 +260,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -335,7 +335,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -370,6 +370,7 @@ CONFIG_PM_SLEEP=y  CONFIG_SUSPEND=y  CONFIG_SUSPEND_FREEZER=y  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  CONFIG_NET=y @@ -377,7 +378,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -569,6 +569,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -635,6 +636,7 @@ CONFIG_USB_USBNET=y  CONFIG_USB_NET_CDCETHER=y  # CONFIG_USB_NET_CDC_EEM is not set  CONFIG_USB_NET_DM9601=y +# CONFIG_USB_NET_SMSC75XX is not set  # CONFIG_USB_NET_SMSC95XX is not set  # CONFIG_USB_NET_GL620A is not set  # CONFIG_USB_NET_NET1080 is not set @@ -644,6 +646,7 @@ CONFIG_USB_NET_DM9601=y  # CONFIG_USB_NET_CDC_SUBSET is not set  # CONFIG_USB_NET_ZAURUS is not set  # CONFIG_USB_NET_INT51X1 is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -713,6 +716,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=4  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  CONFIG_LEGACY_PTYS=y  CONFIG_LEGACY_PTY_COUNT=256 @@ -739,6 +743,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -752,15 +757,9 @@ CONFIG_I2C_SH_MOBILE=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -783,6 +782,7 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set @@ -790,12 +790,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -878,6 +879,7 @@ CONFIG_SND_DRIVERS=y  CONFIG_SND_SUPERH=y  CONFIG_SND_USB=y  # CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_UA101 is not set  # CONFIG_SND_USB_CAIAQ is not set  # CONFIG_SND_SOC is not set  # CONFIG_SOUND_PRIME is not set @@ -895,6 +897,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y @@ -910,14 +913,19 @@ CONFIG_HID_GYRATION=y  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=y  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=y  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=y +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=y  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -997,7 +1005,6 @@ CONFIG_USB_ISP116X_HCD=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1009,7 +1016,6 @@ CONFIG_USB_ISP116X_HCD=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1027,8 +1033,6 @@ CONFIG_RTC_LIB=y  CONFIG_UIO=y  # CONFIG_UIO_PDRV is not set  # CONFIG_UIO_PDRV_GENIRQ is not set -# CONFIG_UIO_SMX is not set -# CONFIG_UIO_SERCOS3 is not set  #  # TI VLYNQ @@ -1115,6 +1119,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  CONFIG_CRAMFS=y  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1141,6 +1146,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1324,6 +1330,7 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/se7619_defconfig b/arch/sh/configs/se7619_defconfig index ee87e2b2168..acb3e02a712 100644 --- a/arch/sh/configs/se7619_defconfig +++ b/arch/sh/configs/se7619_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:34:15 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:41:13 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -30,6 +30,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -44,9 +45,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SYSVIPC is not set  # CONFIG_BSD_PROCESS_ACCT is not set @@ -62,7 +65,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  # CONFIG_RELAY is not set  # CONFIG_NAMESPACES is not set @@ -91,7 +93,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  # CONFIG_VM_EVENT_COUNTERS is not set  CONFIG_COMPAT_BRK=y @@ -107,6 +109,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -217,6 +220,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -232,7 +236,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  CONFIG_NOMMU_INITIAL_TRIM_EXCESS=1  # @@ -301,7 +305,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -453,6 +456,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -513,6 +517,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=3  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  # CONFIG_LEGACY_PTYS is not set  # CONFIG_IPMI_HANDLER is not set @@ -612,7 +617,6 @@ CONFIG_RTC_LIB=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -664,6 +668,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -729,6 +734,7 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/se7705_defconfig b/arch/sh/configs/se7705_defconfig index 03f4219f208..084fec9e905 100644 --- a/arch/sh/configs/se7705_defconfig +++ b/arch/sh/configs/se7705_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:34:37 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:42:43 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -30,6 +30,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  # CONFIG_SYSVIPC is not set  # CONFIG_POSIX_MQUEUE is not set @@ -67,7 +70,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  # CONFIG_RELAY is not set  # CONFIG_NAMESPACES is not set @@ -76,6 +78,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -101,7 +104,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -117,6 +120,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -234,6 +238,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -249,7 +254,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -327,7 +332,6 @@ CONFIG_HZ=250  CONFIG_PREEMPT=y  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -362,7 +366,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -562,6 +565,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -679,6 +683,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  # CONFIG_LEGACY_PTYS is not set @@ -798,7 +803,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -863,6 +867,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -885,6 +890,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1026,6 +1032,7 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/se7712_defconfig b/arch/sh/configs/se7712_defconfig index cfa58199a36..4487a230466 100644 --- a/arch/sh/configs/se7712_defconfig +++ b/arch/sh/configs/se7712_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:44:56 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 18:05:15 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -12,8 +12,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -29,6 +29,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -43,9 +44,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -68,7 +71,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -102,8 +104,9 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y  CONFIG_SLAB=y @@ -119,6 +122,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -236,6 +240,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -251,7 +256,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -329,7 +334,6 @@ CONFIG_PREEMPT_VOLUNTARY=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -366,7 +370,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -614,6 +617,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -754,6 +758,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  # CONFIG_LEGACY_PTYS is not set @@ -834,11 +839,11 @@ CONFIG_LEDS_CLASS=y  #  # LED drivers  # +CONFIG_LEDS_TRIGGERS=y  #  # LED Triggers  # -CONFIG_LEDS_TRIGGERS=y  # CONFIG_LEDS_TRIGGER_TIMER is not set  # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set  # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set @@ -940,6 +945,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  CONFIG_CRAMFS=y  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -962,6 +968,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -997,6 +1004,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set  # CONFIG_DEBUG_SPINLOCK is not set @@ -1042,6 +1050,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1167,6 +1176,7 @@ CONFIG_CRYPTO_DEFLATE=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/se7721_defconfig b/arch/sh/configs/se7721_defconfig index 201283c829a..7c06b5c0b49 100644 --- a/arch/sh/configs/se7721_defconfig +++ b/arch/sh/configs/se7721_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:46:58 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 18:06:03 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -12,8 +12,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -30,6 +30,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -44,9 +45,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -69,11 +72,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -107,8 +105,9 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y  CONFIG_SLAB=y @@ -124,6 +123,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -241,6 +241,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -256,7 +257,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -334,7 +335,6 @@ CONFIG_PREEMPT_VOLUNTARY=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -371,7 +371,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -620,6 +619,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -687,6 +687,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -764,6 +765,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  # CONFIG_LEGACY_PTYS is not set @@ -829,6 +831,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y @@ -844,14 +847,19 @@ CONFIG_HID_GYRATION=y  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=y  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=y  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=y +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=y  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -946,7 +954,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -958,7 +965,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -973,11 +979,11 @@ CONFIG_LEDS_CLASS=y  #  # LED drivers  # +CONFIG_LEDS_TRIGGERS=y  #  # LED Triggers  # -CONFIG_LEDS_TRIGGERS=y  # CONFIG_LEDS_TRIGGER_TIMER is not set  # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set  # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set @@ -1082,6 +1088,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  CONFIG_CRAMFS=y  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1163,6 +1170,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set  # CONFIG_DEBUG_SPINLOCK is not set @@ -1208,6 +1216,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1333,6 +1342,7 @@ CONFIG_CRYPTO_DEFLATE=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/se7722_defconfig b/arch/sh/configs/se7722_defconfig index 4a4efd261d0..42782e7ff8b 100644 --- a/arch/sh/configs/se7722_defconfig +++ b/arch/sh/configs/se7722_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 13:49:15 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 18:07:07 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -48,9 +49,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -73,7 +76,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -84,6 +86,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -122,13 +125,13 @@ CONFIG_PROFILING=y  # CONFIG_OPROFILE is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -245,7 +248,7 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x0c000000  CONFIG_MEMORY_SIZE=0x04000000  CONFIG_29BIT=y -# CONFIG_X2TLB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_NUMA=y  CONFIG_NODES_SHIFT=1 @@ -256,6 +259,8 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -279,7 +284,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -356,7 +361,7 @@ CONFIG_KEXEC=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -391,6 +396,7 @@ CONFIG_SUSPEND=y  CONFIG_SUSPEND_FREEZER=y  # CONFIG_HIBERNATION is not set  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  CONFIG_NET=y @@ -398,7 +404,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -519,6 +524,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -676,6 +682,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=3  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -898,6 +905,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -912,6 +920,7 @@ CONFIG_NETWORK_FILESYSTEMS=y  # CONFIG_NFS_FS is not set  # CONFIG_NFSD is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -944,6 +953,7 @@ CONFIG_DEBUG_FS=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  CONFIG_HAVE_FUNCTION_TRACER=y @@ -1059,6 +1069,7 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/se7724_defconfig b/arch/sh/configs/se7724_defconfig index ab371afe359..ebb4ac4a7d8 100644 --- a/arch/sh/configs/se7724_defconfig +++ b/arch/sh/configs/se7724_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 14:36:56 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 16:55:41 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -47,9 +48,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -71,11 +74,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -107,7 +105,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -116,13 +114,13 @@ CONFIG_SLAB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set  CONFIG_HAVE_OPROFILE=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -237,8 +235,8 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x08000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -246,6 +244,8 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -261,7 +261,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -340,7 +340,7 @@ CONFIG_SECCOMP=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -376,6 +376,7 @@ CONFIG_SUSPEND=y  CONFIG_SUSPEND_FREEZER=y  # CONFIG_HIBERNATION is not set  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  CONFIG_NET=y @@ -383,7 +384,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  # CONFIG_NET_KEY is not set  CONFIG_INET=y @@ -559,6 +559,7 @@ CONFIG_MTD_NAND_IDS=y  # CONFIG_MTD_NAND_NANDSIM is not set  # CONFIG_MTD_NAND_PLATFORM is not set  # CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_NAND_SH_FLCTL is not set  # CONFIG_MTD_ONENAND is not set  # @@ -600,6 +601,7 @@ CONFIG_MISC_DEVICES=y  # CONFIG_ICS932S401 is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_ISL29003 is not set +# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_DS1682 is not set  # CONFIG_TI_DAC7512 is not set  # CONFIG_C2PORT is not set @@ -619,6 +621,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -726,6 +729,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -805,6 +809,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=6  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -833,6 +838,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -846,15 +852,9 @@ CONFIG_I2C_SH_MOBILE=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  CONFIG_SPI=y  CONFIG_SPI_MASTER=y @@ -885,13 +885,16 @@ CONFIG_GPIOLIB=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set  #  # I2C GPIO expanders:  # +# CONFIG_GPIO_MAX7300 is not set  # CONFIG_GPIO_MAX732X is not set  # CONFIG_GPIO_PCA953X is not set  # CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set  #  # PCI GPIO expanders: @@ -923,22 +926,25 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set  # CONFIG_TPS65010 is not set  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_MFD_MC13783 is not set  # CONFIG_AB3100_CORE is not set  # CONFIG_EZX_PCAP is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_AB4500_CORE is not set  # CONFIG_REGULATOR is not set  CONFIG_MEDIA_SUPPORT=y @@ -1001,7 +1007,9 @@ CONFIG_USB_GSPCA=m  # CONFIG_USB_M5602 is not set  # CONFIG_USB_STV06XX is not set  # CONFIG_USB_GL860 is not set +# CONFIG_USB_GSPCA_BENQ is not set  # CONFIG_USB_GSPCA_CONEX is not set +# CONFIG_USB_GSPCA_CPIA1 is not set  # CONFIG_USB_GSPCA_ETOMS is not set  # CONFIG_USB_GSPCA_FINEPIX is not set  # CONFIG_USB_GSPCA_JEILINJ is not set @@ -1009,9 +1017,11 @@ CONFIG_USB_GSPCA=m  # CONFIG_USB_GSPCA_MR97310A is not set  # CONFIG_USB_GSPCA_OV519 is not set  # CONFIG_USB_GSPCA_OV534 is not set +# CONFIG_USB_GSPCA_OV534_9 is not set  # CONFIG_USB_GSPCA_PAC207 is not set  # CONFIG_USB_GSPCA_PAC7302 is not set  # CONFIG_USB_GSPCA_PAC7311 is not set +# CONFIG_USB_GSPCA_SN9C2028 is not set  # CONFIG_USB_GSPCA_SN9C20X is not set  # CONFIG_USB_GSPCA_SONIXB is not set  # CONFIG_USB_GSPCA_SONIXJ is not set @@ -1033,6 +1043,7 @@ CONFIG_USB_GSPCA=m  # CONFIG_VIDEO_PVRUSB2 is not set  # CONFIG_VIDEO_HDPVR is not set  # CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_TLG2300 is not set  # CONFIG_VIDEO_CX231XX is not set  # CONFIG_VIDEO_USBVISION is not set  # CONFIG_USB_ET61X251 is not set @@ -1147,6 +1158,7 @@ CONFIG_SND_VERBOSE_PROCFS=y  # CONFIG_SND_SUPERH is not set  CONFIG_SND_USB=y  # CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_UA101 is not set  # CONFIG_SND_USB_CAIAQ is not set  CONFIG_SND_SOC=m @@ -1155,6 +1167,7 @@ CONFIG_SND_SOC=m  #  CONFIG_SND_SOC_SH4_FSI=m  CONFIG_SND_FSI_AK4642=y +# CONFIG_SND_FSI_DA7210 is not set  CONFIG_SND_SOC_I2C_AND_SPI=m  CONFIG_SND_SOC_ALL_CODECS=m  CONFIG_SND_SOC_WM_HUBS=m @@ -1167,6 +1180,7 @@ CONFIG_SND_SOC_AK4535=m  CONFIG_SND_SOC_AK4642=m  CONFIG_SND_SOC_AK4671=m  CONFIG_SND_SOC_CS4270=m +CONFIG_SND_SOC_DA7210=m  CONFIG_SND_SOC_L3=m  CONFIG_SND_SOC_PCM3008=m  CONFIG_SND_SOC_SPDIF=m @@ -1189,17 +1203,21 @@ CONFIG_SND_SOC_WM8753=m  CONFIG_SND_SOC_WM8776=m  CONFIG_SND_SOC_WM8900=m  CONFIG_SND_SOC_WM8903=m +CONFIG_SND_SOC_WM8904=m  CONFIG_SND_SOC_WM8940=m +CONFIG_SND_SOC_WM8955=m  CONFIG_SND_SOC_WM8960=m  CONFIG_SND_SOC_WM8961=m  CONFIG_SND_SOC_WM8971=m  CONFIG_SND_SOC_WM8974=m +CONFIG_SND_SOC_WM8978=m  CONFIG_SND_SOC_WM8988=m  CONFIG_SND_SOC_WM8990=m  CONFIG_SND_SOC_WM8993=m  CONFIG_SND_SOC_WM9081=m  CONFIG_SND_SOC_MAX9877=m  CONFIG_SND_SOC_TPA6130A2=m +CONFIG_SND_SOC_WM2000=m  # CONFIG_SOUND_PRIME is not set  CONFIG_HID_SUPPORT=y  CONFIG_HID=y @@ -1215,6 +1233,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  # CONFIG_HID_A4TECH is not set  # CONFIG_HID_APPLE is not set  # CONFIG_HID_BELKIN is not set @@ -1229,12 +1248,16 @@ CONFIG_USB_HID=y  # CONFIG_HID_KENSINGTON is not set  # CONFIG_HID_LOGITECH is not set  # CONFIG_HID_MICROSOFT is not set +# CONFIG_HID_MOSART is not set  # CONFIG_HID_MONTEREY is not set  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  # CONFIG_HID_PANTHERLORD is not set  # CONFIG_HID_PETALYNX is not set +# CONFIG_HID_QUANTA is not set  # CONFIG_HID_SAMSUNG is not set  # CONFIG_HID_SONY is not set +# CONFIG_HID_STANTUM is not set  # CONFIG_HID_SUNPLUS is not set  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -1327,7 +1350,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1339,7 +1361,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  CONFIG_USB_GADGET=y  # CONFIG_USB_GADGET_DEBUG_FILES is not set  CONFIG_USB_GADGET_VBUS_DRAW=2 @@ -1378,6 +1399,7 @@ CONFIG_USB_G_SERIAL=m  # CONFIG_USB_MIDI_GADGET is not set  # CONFIG_USB_G_PRINTER is not set  # CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_NOKIA is not set  # CONFIG_USB_G_MULTI is not set  # @@ -1401,10 +1423,7 @@ CONFIG_MMC_BLOCK_BOUNCE=y  # MMC/SD/SDIO Host Controller Drivers  #  # CONFIG_MMC_SDHCI is not set -# CONFIG_MMC_AT91 is not set -# CONFIG_MMC_ATMELMCI is not set  CONFIG_MMC_SPI=y -# CONFIG_MMC_TMIO is not set  # CONFIG_MEMSTICK is not set  # CONFIG_NEW_LEDS is not set  # CONFIG_ACCESSIBILITY is not set @@ -1480,8 +1499,6 @@ CONFIG_RTC_DRV_PCF8563=y  CONFIG_UIO=y  # CONFIG_UIO_PDRV is not set  CONFIG_UIO_PDRV_GENIRQ=y -# CONFIG_UIO_SMX is not set -# CONFIG_UIO_SERCOS3 is not set  #  # TI VLYNQ @@ -1566,6 +1583,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set  # CONFIG_UBIFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1594,6 +1612,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1786,6 +1805,7 @@ CONFIG_CRYPTO_CBC=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/se7750_defconfig b/arch/sh/configs/se7750_defconfig index b15a44e2ec4..e096c3e7e18 100644 --- a/arch/sh/configs/se7750_defconfig +++ b/arch/sh/configs/se7750_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 14:39:10 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:00:16 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -70,7 +73,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -103,7 +105,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -120,6 +122,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -237,6 +240,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -252,7 +256,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -329,7 +333,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -364,7 +367,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -580,6 +582,7 @@ CONFIG_IDE_PROC_FS=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -698,6 +701,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -816,7 +820,6 @@ CONFIG_RTC_LIB=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -885,6 +888,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -907,6 +911,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1063,6 +1068,7 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/se7751_defconfig b/arch/sh/configs/se7751_defconfig index d1effdeaa41..84d3facf6a3 100644 --- a/arch/sh/configs/se7751_defconfig +++ b/arch/sh/configs/se7751_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 14:39:56 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:03:26 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -69,7 +72,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -80,6 +82,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -106,7 +109,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -123,6 +126,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -240,6 +244,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -255,7 +260,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -333,7 +338,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -369,7 +373,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -589,6 +592,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -666,6 +670,7 @@ CONFIG_DEVKMEM=y  # Non-8250 serial port support  #  # CONFIG_SERIAL_SH_SCI is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -785,7 +790,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -854,6 +858,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -868,6 +873,7 @@ CONFIG_NETWORK_FILESYSTEMS=y  # CONFIG_NFS_FS is not set  # CONFIG_NFSD is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1012,6 +1018,7 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/se7780_defconfig b/arch/sh/configs/se7780_defconfig index 58533d50f06..f0d7e679e75 100644 --- a/arch/sh/configs/se7780_defconfig +++ b/arch/sh/configs/se7780_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 14:40:32 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:06:12 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -100,7 +103,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y @@ -117,6 +120,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -238,6 +242,7 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -253,7 +258,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -328,6 +333,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -343,9 +349,9 @@ CONFIG_CMDLINE="console=ttySC0,115200 root=/dev/sda1"  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set @@ -362,7 +368,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -571,6 +576,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -714,7 +720,7 @@ CONFIG_SATA_SIL=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -772,6 +778,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -807,6 +814,7 @@ CONFIG_WLAN=y  # CONFIG_USB_KAWETH is not set  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_FDDI is not set  # CONFIG_PPP is not set @@ -878,6 +886,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  # CONFIG_LEGACY_PTYS is not set @@ -928,6 +937,7 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -935,6 +945,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1032,6 +1043,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y @@ -1047,14 +1059,19 @@ CONFIG_HID_GYRATION=y  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=y  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=y  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=y +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=y  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -1148,7 +1165,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1161,7 +1177,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1192,7 +1207,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -1211,6 +1225,7 @@ CONFIG_INOTIFY_USER=y  #  # Caches  # +# CONFIG_FSCACHE is not set  #  # CD-ROM/DVD Filesystems @@ -1332,6 +1347,7 @@ CONFIG_DEBUG_FS=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  CONFIG_HAVE_FUNCTION_TRACER=y @@ -1442,6 +1458,7 @@ CONFIG_CRYPTO=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/sh03_defconfig b/arch/sh/configs/sh03_defconfig index 666fde110b2..562147d333e 100644 --- a/arch/sh/configs/sh03_defconfig +++ b/arch/sh/configs/sh03_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 14:41:25 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:10:00 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -48,9 +49,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -73,7 +76,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -84,6 +86,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -111,7 +114,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y @@ -120,7 +122,6 @@ CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=m  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set @@ -131,6 +132,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -250,6 +252,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -265,7 +268,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -342,7 +345,6 @@ CONFIG_HZ=250  CONFIG_PREEMPT=y  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -358,9 +360,9 @@ CONFIG_CMDLINE="console=ttySC1,115200 mem=64M root=/dev/nfs"  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set @@ -388,7 +390,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -453,7 +454,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -574,6 +574,7 @@ CONFIG_IDE_PROC_FS=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=m  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=m  CONFIG_SCSI_DMA=y @@ -664,7 +665,7 @@ CONFIG_SCSI_LOWLEVEL=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -704,6 +705,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -751,6 +753,8 @@ CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set  CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set  # CONFIG_ENIC is not set  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set @@ -763,6 +767,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_MLX4_CORE is not set  # CONFIG_TEHUTI is not set  # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set @@ -853,6 +858,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -927,6 +933,7 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -934,6 +941,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1075,6 +1083,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1105,6 +1114,7 @@ CONFIG_SUNRPC_GSS=y  CONFIG_RPCSEC_GSS_KRB5=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1187,13 +1197,12 @@ CONFIG_FRAME_WARN=1024  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_STACKTRACE=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1201,10 +1210,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set @@ -1323,7 +1329,8 @@ CONFIG_CRYPTO_DEFLATE=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/sh7710voipgw_defconfig b/arch/sh/configs/sh7710voipgw_defconfig index 35a3beeba18..98485ca4639 100644 --- a/arch/sh/configs/sh7710voipgw_defconfig +++ b/arch/sh/configs/sh7710voipgw_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 14:43:04 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:14:59 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -30,6 +30,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -44,9 +45,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -68,11 +71,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -105,7 +103,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -122,6 +120,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -240,6 +239,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -255,7 +255,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -331,7 +331,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -367,7 +366,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -620,6 +618,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -723,6 +722,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  CONFIG_LEGACY_PTYS=y  CONFIG_LEGACY_PTY_COUNT=256 @@ -824,7 +824,6 @@ CONFIG_RTC_LIB=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -890,6 +889,7 @@ CONFIG_JFFS2_ZLIB=y  # CONFIG_JFFS2_LZO is not set  CONFIG_JFFS2_RTIME=y  # CONFIG_JFFS2_RUBIN is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -904,6 +904,7 @@ CONFIG_NETWORK_FILESYSTEMS=y  # CONFIG_NFS_FS is not set  # CONFIG_NFSD is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -934,6 +935,7 @@ CONFIG_DEBUG_FS=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  CONFIG_HAVE_FUNCTION_TRACER=y @@ -1049,6 +1051,7 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/sh7724_generic_defconfig b/arch/sh/configs/sh7724_generic_defconfig index a3056b69d2b..a6a9e6887ef 100644 --- a/arch/sh/configs/sh7724_generic_defconfig +++ b/arch/sh/configs/sh7724_generic_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:03:45 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:17:36 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  # CONFIG_BSD_PROCESS_ACCT is not set @@ -65,11 +68,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=17 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_RT_GROUP_SCHED=y -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  CONFIG_CGROUPS=y  # CONFIG_CGROUP_DEBUG is not set  # CONFIG_CGROUP_NS is not set @@ -78,6 +76,7 @@ CONFIG_CGROUPS=y  # CONFIG_CPUSETS is not set  # CONFIG_CGROUP_CPUACCT is not set  # CONFIG_RESOURCE_COUNTERS is not set +# CONFIG_CGROUP_SCHED is not set  # CONFIG_RELAY is not set  # CONFIG_NAMESPACES is not set  # CONFIG_BLK_DEV_INITRD is not set @@ -106,7 +105,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  # CONFIG_COMPAT_BRK is not set @@ -114,21 +112,19 @@ CONFIG_VM_EVENT_COUNTERS=y  CONFIG_SLUB=y  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling  # -# CONFIG_GCOV_KERNEL is not set  # CONFIG_SLOW_WORK is not set  CONFIG_HAVE_GENERIC_DMA_COHERENT=y  CONFIG_RT_MUTEXES=y @@ -138,7 +134,6 @@ CONFIG_BLOCK=y  CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set -# CONFIG_BLK_CGROUP is not set  #  # IO Schedulers @@ -235,8 +230,8 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x04000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -246,6 +241,8 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -262,7 +259,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -353,7 +350,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -390,6 +387,7 @@ CONFIG_HIBERNATION_NVS=y  CONFIG_HIBERNATION=y  CONFIG_PM_STD_PARTITION=""  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  CONFIG_CPU_IDLE=y  CONFIG_CPU_IDLE_GOV_LADDER=y  CONFIG_CPU_IDLE_GOV_MENU=y @@ -428,6 +426,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -467,6 +466,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=6  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  # CONFIG_LEGACY_PTYS is not set  # CONFIG_IPMI_HANDLER is not set @@ -491,6 +491,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -502,15 +503,9 @@ CONFIG_I2C_SH_MOBILE=y  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -533,6 +528,7 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set @@ -540,12 +536,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -629,8 +626,6 @@ CONFIG_RTC_DRV_SH=y  CONFIG_UIO=y  # CONFIG_UIO_PDRV is not set  CONFIG_UIO_PDRV_GENIRQ=y -# CONFIG_UIO_SMX is not set -# CONFIG_UIO_SERCOS3 is not set  #  # TI VLYNQ @@ -643,7 +638,6 @@ CONFIG_UIO_PDRV_GENIRQ=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -707,15 +701,12 @@ CONFIG_FRAME_WARN=1024  # CONFIG_MAGIC_SYSRQ is not set  # CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set -CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_STACKTRACE=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_LATENCYTOP is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -723,13 +714,9 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set -# CONFIG_DYNAMIC_DEBUG is not set  # CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y @@ -747,7 +734,8 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/sh7763rdp_defconfig b/arch/sh/configs/sh7763rdp_defconfig index 04b841b2942..6f308b71f81 100644 --- a/arch/sh/configs/sh7763rdp_defconfig +++ b/arch/sh/configs/sh7763rdp_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:05:29 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:19:21 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -69,11 +72,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -112,7 +110,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -120,7 +117,6 @@ CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set @@ -131,6 +127,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -243,7 +240,7 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x0c000000  CONFIG_MEMORY_SIZE=0x04000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set +# CONFIG_PMB is not set  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -253,6 +250,7 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -269,7 +267,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -344,7 +342,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -381,7 +379,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -444,7 +441,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -585,6 +581,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -689,6 +686,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -754,6 +752,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=3  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -945,7 +944,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -957,7 +955,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -980,9 +977,6 @@ CONFIG_MMC_BLOCK_BOUNCE=y  # MMC/SD/SDIO Host Controller Drivers  #  # CONFIG_MMC_SDHCI is not set -# CONFIG_MMC_AT91 is not set -# CONFIG_MMC_ATMELMCI is not set -# CONFIG_MMC_TMIO is not set  # CONFIG_MEMSTICK is not set  # CONFIG_NEW_LEDS is not set  # CONFIG_ACCESSIBILITY is not set @@ -1074,6 +1068,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1096,6 +1091,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1162,13 +1158,12 @@ CONFIG_FRAME_WARN=1024  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_STACKTRACE=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_LKDTM is not set  # CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1176,10 +1171,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set @@ -1287,7 +1279,8 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/sh7770_generic_defconfig b/arch/sh/configs/sh7770_generic_defconfig index 7b247053ece..4327f898baa 100644 --- a/arch/sh/configs/sh7770_generic_defconfig +++ b/arch/sh/configs/sh7770_generic_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:06:28 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:20:25 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -45,9 +46,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  # CONFIG_BSD_PROCESS_ACCT is not set @@ -64,11 +67,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=17 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_RT_GROUP_SCHED=y -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  CONFIG_CGROUPS=y  # CONFIG_CGROUP_DEBUG is not set  # CONFIG_CGROUP_NS is not set @@ -77,6 +75,7 @@ CONFIG_CGROUPS=y  # CONFIG_CPUSETS is not set  # CONFIG_CGROUP_CPUACCT is not set  # CONFIG_RESOURCE_COUNTERS is not set +# CONFIG_CGROUP_SCHED is not set  # CONFIG_RELAY is not set  # CONFIG_NAMESPACES is not set  # CONFIG_BLK_DEV_INITRD is not set @@ -105,7 +104,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  # CONFIG_COMPAT_BRK is not set @@ -113,7 +111,6 @@ CONFIG_VM_EVENT_COUNTERS=y  CONFIG_SLUB=y  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  CONFIG_HAVE_IOREMAP_PROT=y @@ -123,11 +120,11 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling  # -# CONFIG_GCOV_KERNEL is not set  # CONFIG_SLOW_WORK is not set  CONFIG_HAVE_GENERIC_DMA_COHERENT=y  CONFIG_RT_MUTEXES=y @@ -137,7 +134,6 @@ CONFIG_BLOCK=y  CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set -# CONFIG_BLK_CGROUP is not set  #  # IO Schedulers @@ -232,7 +228,7 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x04000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set +# CONFIG_PMB is not set  CONFIG_VSYSCALL=y  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -242,6 +238,7 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -258,7 +255,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -347,7 +344,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -382,6 +379,7 @@ CONFIG_HIBERNATION_NVS=y  CONFIG_HIBERNATION=y  CONFIG_PM_STD_PARTITION=""  # CONFIG_PM_RUNTIME is not set +CONFIG_PM_OPS=y  CONFIG_CPU_IDLE=y  CONFIG_CPU_IDLE_GOV_LADDER=y  CONFIG_CPU_IDLE_GOV_MENU=y @@ -420,6 +418,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -459,6 +458,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=6  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  # CONFIG_LEGACY_PTYS is not set  # CONFIG_IPMI_HANDLER is not set @@ -483,6 +483,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  CONFIG_I2C_SH_MOBILE=y  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -494,15 +495,9 @@ CONFIG_I2C_SH_MOBILE=y  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -525,6 +520,7 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  # CONFIG_MFD_SM501 is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set @@ -532,12 +528,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -621,8 +618,6 @@ CONFIG_RTC_DRV_SH=y  CONFIG_UIO=y  # CONFIG_UIO_PDRV is not set  CONFIG_UIO_PDRV_GENIRQ=y -# CONFIG_UIO_SMX is not set -# CONFIG_UIO_SERCOS3 is not set  #  # TI VLYNQ @@ -635,7 +630,6 @@ CONFIG_UIO_PDRV_GENIRQ=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -699,15 +693,12 @@ CONFIG_FRAME_WARN=1024  # CONFIG_MAGIC_SYSRQ is not set  # CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set -CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_STACKTRACE=y  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_LATENCYTOP is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -715,13 +706,9 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set -# CONFIG_DYNAMIC_DEBUG is not set  # CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y @@ -739,7 +726,8 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/sh7785lcr_32bit_defconfig b/arch/sh/configs/sh7785lcr_32bit_defconfig index 8330813b0c1..71f39c71b04 100644 --- a/arch/sh/configs/sh7785lcr_32bit_defconfig +++ b/arch/sh/configs/sh7785lcr_32bit_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:07:40 2010 +# Linux kernel version: 2.6.34 +# Mon May 24 08:33:02 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -48,9 +49,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -73,12 +76,7 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set +CONFIG_LOG_BUF_SHIFT=16  # CONFIG_CGROUPS is not set  # CONFIG_SYSFS_DEPRECATED_V2 is not set  # CONFIG_RELAY is not set @@ -112,27 +110,26 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  CONFIG_PERF_COUNTERS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y -CONFIG_COMPAT_BRK=y +# CONFIG_COMPAT_BRK is not set  CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y -CONFIG_OPROFILE=y +# CONFIG_OPROFILE is not set  CONFIG_HAVE_OPROFILE=y -CONFIG_KPROBES=y -CONFIG_KRETPROBES=y -CONFIG_HAVE_IOREMAP_PROT=y +# CONFIG_KPROBES is not set  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y  #  # GCOV-based kernel profiling @@ -248,10 +245,8 @@ CONFIG_MEMORY_START=0x40000000  CONFIG_MEMORY_SIZE=0x20000000  # CONFIG_29BIT is not set  CONFIG_32BIT=y -CONFIG_PMB_ENABLE=y -# CONFIG_PMB is not set -CONFIG_PMB_FIXED=y -# CONFIG_X2TLB is not set +CONFIG_PMB=y +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  # CONFIG_NUMA is not set  CONFIG_ARCH_FLATMEM_ENABLE=y @@ -262,13 +257,15 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set  # CONFIG_PAGE_SIZE_64KB is not set -CONFIG_HUGETLB_PAGE_SIZE_64K=y +# CONFIG_HUGETLB_PAGE_SIZE_64K is not set  # CONFIG_HUGETLB_PAGE_SIZE_256K is not set -# CONFIG_HUGETLB_PAGE_SIZE_1MB is not set +CONFIG_HUGETLB_PAGE_SIZE_1MB=y  # CONFIG_HUGETLB_PAGE_SIZE_4MB is not set  # CONFIG_HUGETLB_PAGE_SIZE_64MB is not set  # CONFIG_HUGETLB_PAGE_SIZE_512MB is not set @@ -280,11 +277,11 @@ CONFIG_SPARSEMEM=y  CONFIG_HAVE_MEMORY_PRESENT=y  CONFIG_SPARSEMEM_STATIC=y  # CONFIG_MEMORY_HOTPLUG is not set -CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_SPLIT_PTLOCK_CPUS=999999  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -302,6 +299,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y  # CONFIG_CPU_BIG_ENDIAN is not set  CONFIG_SH_FPU=y  CONFIG_SH_STORE_QUEUES=y +CONFIG_SPECULATIVE_EXECUTION=y  CONFIG_CPU_HAS_INTEVT=y  CONFIG_CPU_HAS_SR_RB=y  CONFIG_CPU_HAS_FPU=y @@ -374,7 +372,7 @@ CONFIG_SECCOMP=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -CONFIG_SPARSE_IRQ=y +CONFIG_INTC_USERIMASK=y  #  # Boot options @@ -389,9 +387,10 @@ CONFIG_ENTRY_OFFSET=0x00001000  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -# CONFIG_PCI_LEGACY is not set +CONFIG_PCI_DEBUG=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set @@ -421,7 +420,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -469,6 +467,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set +# CONFIG_L2TP is not set  # CONFIG_BRIDGE is not set  # CONFIG_NET_DSA is not set  # CONFIG_VLAN_8021Q is not set @@ -489,8 +488,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Network testing  #  # CONFIG_NET_PKTGEN is not set -# CONFIG_NET_TCPPROBE is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  # CONFIG_CAN is not set  # CONFIG_IRDA is not set @@ -503,11 +500,20 @@ CONFIG_WIRELESS=y  #  # CFG80211 needs to be enabled for MAC80211  # + +# +# Some wireless drivers require a rate control algorithm +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set  # +# CAIF Support +# +# CONFIG_CAIF is not set + +#  # Device Drivers  # @@ -518,7 +524,11 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"  # CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y -# CONFIG_FW_LOADER is not set +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set  # CONFIG_SYS_HYPERVISOR is not set  # CONFIG_CONNECTOR is not set  CONFIG_MTD=y @@ -541,6 +551,7 @@ CONFIG_MTD_BLOCK=y  # CONFIG_INFTL is not set  # CONFIG_RFD_FTL is not set  # CONFIG_SSFDC is not set +# CONFIG_SM_FTL is not set  # CONFIG_MTD_OOPS is not set  # @@ -633,6 +644,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -671,7 +683,9 @@ CONFIG_ATA=y  CONFIG_ATA_VERBOSE_ERROR=y  CONFIG_SATA_PMP=y  # CONFIG_SATA_AHCI is not set +# CONFIG_SATA_AHCI_PLATFORM is not set  # CONFIG_SATA_SIL24 is not set +# CONFIG_SATA_INIC162X is not set  CONFIG_ATA_SFF=y  # CONFIG_SATA_SVW is not set  # CONFIG_ATA_PIIX is not set @@ -686,7 +700,6 @@ CONFIG_SATA_SIL=y  # CONFIG_SATA_ULI is not set  # CONFIG_SATA_VIA is not set  # CONFIG_SATA_VITESSE is not set -# CONFIG_SATA_INIC162X is not set  # CONFIG_PATA_ALI is not set  # CONFIG_PATA_AMD is not set  # CONFIG_PATA_ARTOP is not set @@ -706,6 +719,7 @@ CONFIG_SATA_SIL=y  # CONFIG_PATA_IT821X is not set  # CONFIG_PATA_IT8213 is not set  # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set  # CONFIG_PATA_TRIFLEX is not set  # CONFIG_PATA_MARVELL is not set  # CONFIG_PATA_MPIIX is not set @@ -742,7 +756,7 @@ CONFIG_SATA_SIL=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -755,8 +769,36 @@ CONFIG_NETDEVICES=y  # CONFIG_TUN is not set  # CONFIG_VETH is not set  # CONFIG_ARCNET is not set -# CONFIG_NET_ETHERNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y  CONFIG_MII=y +# CONFIG_AX88796 is not set +# CONFIG_STNIC is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=y +# CONFIG_TYPHOON is not set +# CONFIG_SMC91X is not set +# CONFIG_ETHOC is not set +# CONFIG_SMC911X is not set +# CONFIG_SMSC911X is not set +# CONFIG_DNET is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +# CONFIG_NET_PCI is not set +# CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set +# CONFIG_ATL2 is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -797,6 +839,7 @@ CONFIG_R8169=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_FDDI is not set  # CONFIG_HIPPI is not set @@ -837,6 +880,7 @@ CONFIG_INPUT_KEYBOARD=y  CONFIG_KEYBOARD_ATKBD=y  # CONFIG_QT2160 is not set  # CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_TCA6416 is not set  # CONFIG_KEYBOARD_MAX7359 is not set  # CONFIG_KEYBOARD_NEWTON is not set  # CONFIG_KEYBOARD_OPENCORES is not set @@ -885,6 +929,7 @@ CONFIG_HW_CONSOLE=y  CONFIG_VT_HW_CONSOLE_BINDING=y  # CONFIG_DEVKMEM is not set  # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set  # CONFIG_NOZOMI is not set  # @@ -901,6 +946,9 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set  CONFIG_UNIX98_PTYS=y  CONFIG_DEVPTS_MULTIPLE_INSTANCES=y  # CONFIG_LEGACY_PTYS is not set @@ -947,6 +995,7 @@ CONFIG_I2C_ALGOPCA=y  # CONFIG_I2C_OCORES is not set  # CONFIG_I2C_SH_MOBILE is not set  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -960,15 +1009,9 @@ CONFIG_I2C_ALGOPCA=y  #  CONFIG_I2C_PCA_PLATFORM=y  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -1011,6 +1054,7 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  CONFIG_MFD_SM501=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set @@ -1018,12 +1062,14 @@ CONFIG_MFD_SM501=y  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -1073,7 +1119,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y  # CONFIG_FB_SIS is not set  # CONFIG_FB_VIA is not set  # CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_KYRO is not set +CONFIG_FB_KYRO=y  # CONFIG_FB_3DFX is not set  # CONFIG_FB_VOODOO1 is not set  # CONFIG_FB_VT8623 is not set @@ -1099,15 +1145,15 @@ CONFIG_FB_SM501=y  #  CONFIG_DUMMY_CONSOLE=y  CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y  # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set  # CONFIG_FONTS is not set  CONFIG_FONT_8x8=y  CONFIG_FONT_8x16=y  CONFIG_LOGO=y -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 is not set -# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y  CONFIG_LOGO_SUPERH_MONO=y  CONFIG_LOGO_SUPERH_VGA16=y  CONFIG_LOGO_SUPERH_CLUT224=y @@ -1131,15 +1177,18 @@ CONFIG_SND_SEQ_HRTIMER_DEFAULT=y  CONFIG_SND_DYNAMIC_MINORS=y  # CONFIG_SND_SUPPORT_OLD_API is not set  # CONFIG_SND_VERBOSE_PROCFS is not set -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set +CONFIG_SND_VERBOSE_PRINTK=y +CONFIG_SND_DEBUG=y +CONFIG_SND_DEBUG_VERBOSE=y +CONFIG_SND_VMASTER=y  CONFIG_SND_RAWMIDI_SEQ=y  CONFIG_SND_OPL3_LIB_SEQ=y  # CONFIG_SND_OPL4_LIB_SEQ is not set  # CONFIG_SND_SBAWE_SEQ is not set -# CONFIG_SND_EMU10K1_SEQ is not set +CONFIG_SND_EMU10K1_SEQ=y  CONFIG_SND_MPU401_UART=y  CONFIG_SND_OPL3_LIB=y +CONFIG_SND_AC97_CODEC=y  # CONFIG_SND_DRIVERS is not set  CONFIG_SND_PCI=y  # CONFIG_SND_AD1889 is not set @@ -1174,7 +1223,7 @@ CONFIG_SND_CMIPCI=y  # CONFIG_SND_INDIGODJ is not set  # CONFIG_SND_INDIGOIOX is not set  # CONFIG_SND_INDIGODJX is not set -# CONFIG_SND_EMU10K1 is not set +CONFIG_SND_EMU10K1=y  # CONFIG_SND_EMU10K1X is not set  # CONFIG_SND_ENS1370 is not set  # CONFIG_SND_ENS1371 is not set @@ -1209,9 +1258,11 @@ CONFIG_SND_CMIPCI=y  # CONFIG_SND_SUPERH is not set  CONFIG_SND_USB=y  # CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_UA101 is not set  # CONFIG_SND_USB_CAIAQ is not set  # CONFIG_SND_SOC is not set  # CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=y  CONFIG_HID_SUPPORT=y  CONFIG_HID=y  # CONFIG_HIDRAW is not set @@ -1226,39 +1277,43 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # -CONFIG_HID_A4TECH=m -CONFIG_HID_APPLE=m -CONFIG_HID_BELKIN=m -CONFIG_HID_CHERRY=m -CONFIG_HID_CHICONY=m -CONFIG_HID_CYPRESS=m -CONFIG_HID_DRAGONRISE=m -# CONFIG_DRAGONRISE_FF is not set -CONFIG_HID_EZKEY=m -CONFIG_HID_KYE=m -CONFIG_HID_GYRATION=m -CONFIG_HID_TWINHAN=m -CONFIG_HID_KENSINGTON=m -CONFIG_HID_LOGITECH=m -# CONFIG_LOGITECH_FF is not set -# CONFIG_LOGIRUMBLEPAD2_FF is not set -CONFIG_HID_MICROSOFT=m -CONFIG_HID_MONTEREY=m -CONFIG_HID_NTRIG=m -CONFIG_HID_PANTHERLORD=m -# CONFIG_PANTHERLORD_FF is not set -CONFIG_HID_PETALYNX=m -CONFIG_HID_SAMSUNG=m -CONFIG_HID_SONY=m -CONFIG_HID_SUNPLUS=m -CONFIG_HID_GREENASIA=m -# CONFIG_GREENASIA_FF is not set -CONFIG_HID_SMARTJOYPLUS=m -# CONFIG_SMARTJOYPLUS_FF is not set -CONFIG_HID_TOPSEED=m +# CONFIG_HID_3M_PCT is not set +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_APPLE is not set +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_CANDO is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_PRODIKEYS is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EGALAX is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_GYRATION is not set +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LOGITECH is not set +# CONFIG_HID_MICROSOFT is not set +# CONFIG_HID_MOSART is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_QUANTA is not set +# CONFIG_HID_ROCCAT_KONE is not set +# CONFIG_HID_SAMSUNG is not set +# CONFIG_HID_SONY is not set +# CONFIG_HID_STANTUM is not set +# CONFIG_HID_SUNPLUS is not set +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TOPSEED is not set  # CONFIG_HID_THRUSTMASTER is not set -CONFIG_HID_ZEROPLUS=m -# CONFIG_ZEROPLUS_FF is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set  CONFIG_USB_SUPPORT=y  CONFIG_USB_ARCH_HAS_HCD=y  CONFIG_USB_ARCH_HAS_OHCI=y @@ -1271,10 +1326,8 @@ CONFIG_USB=y  # Miscellaneous USB options  #  # CONFIG_USB_DEVICEFS is not set -CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DEVICE_CLASS is not set  # CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set -# CONFIG_USB_OTG is not set  # CONFIG_USB_OTG_WHITELIST is not set  # CONFIG_USB_OTG_BLACKLIST_HUB is not set  # CONFIG_USB_MON is not set @@ -1286,9 +1339,7 @@ CONFIG_USB_DEVICE_CLASS=y  #  # CONFIG_USB_C67X00_HCD is not set  # CONFIG_USB_XHCI_HCD is not set -CONFIG_USB_EHCI_HCD=m -# CONFIG_USB_EHCI_ROOT_HUB_TT is not set -# CONFIG_USB_EHCI_TT_NEWSCHED is not set +# CONFIG_USB_EHCI_HCD is not set  # CONFIG_USB_OXU210HP_HCD is not set  # CONFIG_USB_ISP116X_HCD is not set  # CONFIG_USB_ISP1760_HCD is not set @@ -1351,20 +1402,17 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set  # CONFIG_USB_IDMOUSE is not set  # CONFIG_USB_FTDI_ELAN is not set  # CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_SISUSBVGA is not set  # CONFIG_USB_LD is not set  # CONFIG_USB_TRANCEVIBRATOR is not set  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1390,10 +1438,7 @@ CONFIG_MMC_BLOCK_BOUNCE=y  CONFIG_MMC_SDHCI=m  # CONFIG_MMC_SDHCI_PCI is not set  CONFIG_MMC_SDHCI_PLTFM=m -# CONFIG_MMC_AT91 is not set -# CONFIG_MMC_ATMELMCI is not set  # CONFIG_MMC_TIFM_SD is not set -# CONFIG_MMC_TMIO is not set  # CONFIG_MMC_CB710 is not set  # CONFIG_MMC_VIA_SDMMC is not set  # CONFIG_MEMSTICK is not set @@ -1460,23 +1505,21 @@ CONFIG_RTC_DRV_RS5C372=y  # CONFIG_RTC_DRV_SH is not set  # CONFIG_RTC_DRV_GENERIC is not set  CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set  #  # DMA Devices  # +# CONFIG_TIMB_DMA is not set  # CONFIG_AUXDISPLAY is not set  CONFIG_UIO=m  # CONFIG_UIO_CIF is not set  # CONFIG_UIO_PDRV is not set  # CONFIG_UIO_PDRV_GENIRQ is not set -# CONFIG_UIO_SMX is not set  # CONFIG_UIO_AEC is not set  # CONFIG_UIO_SERCOS3 is not set  # CONFIG_UIO_PCI_GENERIC is not set - -# -# TI VLYNQ -# +# CONFIG_UIO_NETX is not set  # CONFIG_STAGING is not set  # @@ -1556,6 +1599,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1586,6 +1630,7 @@ CONFIG_SUNRPC_GSS=y  CONFIG_RPCSEC_GSS_KRB5=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1651,61 +1696,75 @@ CONFIG_MAGIC_SYSRQ=y  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  CONFIG_SCHEDSTATS=y -CONFIG_TRACE_IRQFLAGS=y +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_SLAB is not set +CONFIG_DEBUG_KMEMLEAK=y +CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400 +# CONFIG_DEBUG_KMEMLEAK_TEST is not set +CONFIG_DEBUG_PREEMPT=y +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +CONFIG_DEBUG_SPINLOCK=y +CONFIG_DEBUG_MUTEXES=y +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +CONFIG_DEBUG_SPINLOCK_SLEEP=y +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  CONFIG_STACKTRACE=y +# CONFIG_DEBUG_KOBJECT is not set  CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set  # CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set  CONFIG_FRAME_POINTER=y +# CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set +# CONFIG_FAULT_INJECTION is not set  CONFIG_LATENCYTOP=y  CONFIG_SYSCTL_SYSCALL_CHECK=y -CONFIG_NOP_TRACER=y -CONFIG_HAVE_FTRACE_NMI_ENTER=y +# CONFIG_PAGE_POISONING is not set  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y -CONFIG_TRACER_MAX_TRACE=y -CONFIG_RING_BUFFER=y -CONFIG_FTRACE_NMI_ENTER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y -CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y -CONFIG_GENERIC_TRACER=y  CONFIG_TRACING_SUPPORT=y -CONFIG_FTRACE=y -CONFIG_FUNCTION_TRACER=y -CONFIG_FUNCTION_GRAPH_TRACER=y -CONFIG_IRQSOFF_TRACER=y -# CONFIG_PREEMPT_TRACER is not set -CONFIG_SCHED_TRACER=y -# CONFIG_FTRACE_SYSCALLS is not set -# CONFIG_BOOT_TRACER is not set -CONFIG_BRANCH_PROFILE_NONE=y -# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set -# CONFIG_PROFILE_ALL_BRANCHES is not set -CONFIG_STACK_TRACER=y -CONFIG_KMEMTRACE=y -CONFIG_WORKQUEUE_TRACER=y -# CONFIG_BLK_DEV_IO_TRACE is not set -CONFIG_DYNAMIC_FTRACE=y -# CONFIG_FUNCTION_PROFILER is not set -CONFIG_FTRACE_MCOUNT_RECORD=y -# CONFIG_FTRACE_STARTUP_TEST is not set -# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_FTRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set  # CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set  # CONFIG_SH_STANDARD_BIOS is not set -CONFIG_DWARF_UNWINDER=y -CONFIG_MCOUNT=y +# CONFIG_STACK_DEBUG is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_4KSTACKS is not set +CONFIG_DUMP_CODE=y +# CONFIG_DWARF_UNWINDER is not set +# CONFIG_SH_NO_BSS_INIT is not set  #  # Security options @@ -1815,7 +1874,8 @@ CONFIG_CRYPTO_DES=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  # CONFIG_CRYPTO_HW is not set -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/sh7785lcr_defconfig b/arch/sh/configs/sh7785lcr_defconfig index f196e87c766..30f38c2767b 100644 --- a/arch/sh/configs/sh7785lcr_defconfig +++ b/arch/sh/configs/sh7785lcr_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:09:09 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:27:53 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -48,9 +49,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -73,11 +76,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -124,13 +122,13 @@ CONFIG_PROFILING=y  # CONFIG_OPROFILE is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -244,8 +242,8 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x08000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  # CONFIG_NUMA is not set  CONFIG_ARCH_FLATMEM_ENABLE=y @@ -254,6 +252,8 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -269,7 +269,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -287,6 +287,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y  # CONFIG_CPU_BIG_ENDIAN is not set  CONFIG_SH_FPU=y  CONFIG_SH_STORE_QUEUES=y +# CONFIG_SPECULATIVE_EXECUTION is not set  CONFIG_CPU_HAS_INTEVT=y  CONFIG_CPU_HAS_SR_RB=y  CONFIG_CPU_HAS_FPU=y @@ -344,7 +345,7 @@ CONFIG_KEXEC=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -359,9 +360,9 @@ CONFIG_ENTRY_OFFSET=0x00001000  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set @@ -387,7 +388,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -598,6 +598,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -671,6 +672,7 @@ CONFIG_SATA_SIL=y  # CONFIG_PATA_IT821X is not set  # CONFIG_PATA_IT8213 is not set  # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set  # CONFIG_PATA_TRIFLEX is not set  # CONFIG_PATA_MARVELL is not set  # CONFIG_PATA_MPIIX is not set @@ -707,7 +709,7 @@ CONFIG_SATA_SIL=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -766,6 +768,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_FDDI is not set  # CONFIG_HIPPI is not set @@ -851,6 +854,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -899,6 +903,7 @@ CONFIG_I2C_ALGOPCA=y  # CONFIG_I2C_OCORES is not set  # CONFIG_I2C_SH_MOBILE is not set  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -912,15 +917,9 @@ CONFIG_I2C_ALGOPCA=y  #  CONFIG_I2C_PCA_PLATFORM=y  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -943,6 +942,7 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  CONFIG_MFD_SM501=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set @@ -950,12 +950,14 @@ CONFIG_MFD_SM501=y  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -963,6 +965,7 @@ CONFIG_MFD_SM501=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1059,6 +1062,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y @@ -1074,14 +1078,19 @@ CONFIG_HID_GYRATION=y  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=y  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=y  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=y +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=y  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -1182,7 +1191,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1195,7 +1203,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  CONFIG_USB_TEST=m  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1353,6 +1360,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1383,6 +1391,7 @@ CONFIG_SUNRPC_GSS=y  CONFIG_RPCSEC_GSS_KRB5=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1461,6 +1470,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  CONFIG_DEBUG_PREEMPT=y  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set @@ -1509,6 +1519,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1633,6 +1644,7 @@ CONFIG_CRYPTO_DES=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  # CONFIG_CRYPTO_HW is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/shmin_defconfig b/arch/sh/configs/shmin_defconfig index 45441c0ab30..4ba2705c7a4 100644 --- a/arch/sh/configs/shmin_defconfig +++ b/arch/sh/configs/shmin_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:10:09 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:32:23 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -12,8 +12,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -29,6 +29,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -43,9 +44,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  # CONFIG_SYSVIPC is not set  # CONFIG_POSIX_MQUEUE is not set @@ -65,7 +68,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  # CONFIG_RELAY is not set  # CONFIG_NAMESPACES is not set @@ -95,7 +97,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -111,6 +113,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -222,6 +225,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -237,7 +241,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -312,7 +316,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -544,6 +547,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -625,6 +629,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -719,7 +724,6 @@ CONFIG_RTC_LIB=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -773,6 +777,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  CONFIG_CRAMFS=y  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -797,6 +802,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -936,6 +942,7 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/shx3_defconfig b/arch/sh/configs/shx3_defconfig index ecf50cda4cb..42f6bd34440 100644 --- a/arch/sh/configs/shx3_defconfig +++ b/arch/sh/configs/shx3_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:10:45 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 18:08:45 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -28,6 +28,7 @@ CONFIG_SYS_SUPPORTS_NUMA=y  CONFIG_SYS_SUPPORTS_TMU=y  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y  # CONFIG_ARCH_HAS_ILOG2_U32 is not set  # CONFIG_ARCH_HAS_ILOG2_U64 is not set  CONFIG_ARCH_NO_VIRT_TO_BUS=y @@ -35,6 +36,7 @@ CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_COHERENT=y  # CONFIG_DMA_NONCOHERENT is not set +# CONFIG_NEED_DMA_MAP_STATE is not set  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -49,9 +51,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -73,15 +77,11 @@ CONFIG_TREE_RCU=y  CONFIG_RCU_TRACE=y  CONFIG_RCU_FANOUT=32  # CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_RCU_FAST_NO_HZ is not set  CONFIG_TREE_RCU_TRACE=y  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_RT_GROUP_SCHED=y -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set  CONFIG_CGROUPS=y  # CONFIG_CGROUP_DEBUG is not set  CONFIG_CGROUP_NS=y @@ -92,6 +92,7 @@ CONFIG_CGROUP_CPUACCT=y  CONFIG_RESOURCE_COUNTERS=y  CONFIG_CGROUP_MEM_RES_CTLR=y  # CONFIG_CGROUP_MEM_RES_CTLR_SWAP is not set +# CONFIG_CGROUP_SCHED is not set  CONFIG_MM_OWNER=y  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -131,7 +132,6 @@ CONFIG_PERF_USE_VMALLOC=y  # Kernel Performance Events And Counters  #  CONFIG_PERF_EVENTS=y -CONFIG_EVENT_PROFILE=y  # CONFIG_PERF_COUNTERS is not set  # CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y @@ -140,12 +140,10 @@ CONFIG_COMPAT_BRK=y  # CONFIG_SLUB is not set  CONFIG_SLOB=y  CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y  CONFIG_OPROFILE=y  CONFIG_HAVE_OPROFILE=y  CONFIG_KPROBES=y  CONFIG_KRETPROBES=y -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y @@ -153,6 +151,7 @@ CONFIG_HAVE_DMA_ATTRS=y  CONFIG_USE_GENERIC_SMP_HELPERS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -173,7 +172,6 @@ CONFIG_BLOCK=y  CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set -# CONFIG_BLK_CGROUP is not set  #  # IO Schedulers @@ -269,8 +267,8 @@ CONFIG_FORCE_MAX_ZONEORDER=7  CONFIG_MEMORY_START=0x0c000000  CONFIG_MEMORY_SIZE=0x04000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_NUMA=y  CONFIG_NODES_SHIFT=3 @@ -282,6 +280,8 @@ CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y  CONFIG_ARCH_MEMORY_PROBE=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  # CONFIG_PAGE_SIZE_4KB is not set  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -307,7 +307,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_SCHED_MC=y @@ -392,14 +392,14 @@ CONFIG_HZ_250=y  CONFIG_HZ=250  CONFIG_SCHED_HRTICK=y  CONFIG_KEXEC=y -# CONFIG_CRASH_DUMP is not set  CONFIG_SECCOMP=y  CONFIG_SMP=y  CONFIG_NR_CPUS=4 +# CONFIG_HOTPLUG_CPU is not set  # CONFIG_PREEMPT_NONE is not set  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -518,7 +518,6 @@ CONFIG_IPV6_NDISC_NODETYPE=y  #  # CONFIG_NET_PKTGEN is not set  # CONFIG_NET_TCPPROBE is not set -# CONFIG_NET_DROP_MONITOR is not set  # CONFIG_HAMRADIO is not set  CONFIG_CAN=m  CONFIG_CAN_RAW=m @@ -583,6 +582,7 @@ CONFIG_MISC_DEVICES=y  # CONFIG_ICS932S401 is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_ISL29003 is not set +# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_DS1682 is not set  # CONFIG_TI_DAC7512 is not set  # CONFIG_C2PORT is not set @@ -601,6 +601,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -693,6 +694,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -734,6 +736,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=2  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -760,6 +763,7 @@ CONFIG_I2C_HELPER_AUTO=y  # CONFIG_I2C_OCORES is not set  # CONFIG_I2C_SH_MOBILE is not set  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -773,15 +777,9 @@ CONFIG_I2C_HELPER_AUTO=y  #  # CONFIG_I2C_PCA_PLATFORM is not set  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  CONFIG_SPI=y  # CONFIG_SPI_DEBUG is not set  CONFIG_SPI_MASTER=y @@ -838,10 +836,9 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_MFD_WM8400 is not set -# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_MFD_MC13783 is not set -# CONFIG_AB3100_CORE is not set  # CONFIG_EZX_PCAP is not set  # CONFIG_AB4500_CORE is not set  # CONFIG_REGULATOR is not set @@ -933,7 +930,6 @@ CONFIG_USB_R8A66597_HCD=m  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -945,7 +941,6 @@ CONFIG_USB_R8A66597_HCD=m  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  CONFIG_USB_GADGET=y  # CONFIG_USB_GADGET_DEBUG is not set  # CONFIG_USB_GADGET_DEBUG_FILES is not set @@ -983,6 +978,7 @@ CONFIG_USB_GADGET_DUALSPEED=y  # CONFIG_USB_MIDI_GADGET is not set  # CONFIG_USB_G_PRINTER is not set  # CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_NOKIA is not set  # CONFIG_USB_G_MULTI is not set  # @@ -1065,8 +1061,6 @@ CONFIG_RTC_DRV_SH=y  CONFIG_UIO=m  # CONFIG_UIO_PDRV is not set  # CONFIG_UIO_PDRV_GENIRQ is not set -# CONFIG_UIO_SMX is not set -# CONFIG_UIO_SERCOS3 is not set  #  # TI VLYNQ @@ -1145,6 +1139,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1159,6 +1154,7 @@ CONFIG_NETWORK_FILESYSTEMS=y  # CONFIG_NFS_FS is not set  # CONFIG_NFSD is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1246,7 +1242,6 @@ CONFIG_DEBUG_PREEMPT=y  # CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -CONFIG_STACKTRACE=y  # CONFIG_DEBUG_KOBJECT is not set  CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_INFO is not set @@ -1266,9 +1261,9 @@ CONFIG_FRAME_POINTER=y  # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_LKDTM is not set  # CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  # CONFIG_PAGE_POISONING is not set -CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y @@ -1276,10 +1271,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y  CONFIG_RING_BUFFER_ALLOW_SWAP=y -CONFIG_TRACING=y  CONFIG_TRACING_SUPPORT=y  CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set @@ -1292,6 +1284,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1329,6 +1322,7 @@ CONFIG_CRYPTO=y  # CONFIG_CRYPTO_MANAGER2 is not set  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_PCRYPT is not set  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -1407,7 +1401,8 @@ CONFIG_CRYPTO=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y -CONFIG_BINARY_PRINTF=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines diff --git a/arch/sh/configs/snapgear_defconfig b/arch/sh/configs/snapgear_defconfig index 98352d75785..513834d2b8a 100644 --- a/arch/sh/configs/snapgear_defconfig +++ b/arch/sh/configs/snapgear_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:14:18 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:36:53 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  # CONFIG_SWAP is not set  # CONFIG_SYSVIPC is not set  # CONFIG_POSIX_MQUEUE is not set @@ -68,7 +71,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -79,6 +81,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -105,7 +108,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y @@ -122,6 +125,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -235,6 +239,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -250,7 +255,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -335,7 +340,6 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -350,9 +354,9 @@ CONFIG_ENTRY_OFFSET=0x00001000  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set @@ -569,6 +573,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -586,7 +591,7 @@ CONFIG_HAVE_IDE=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -626,6 +631,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -726,6 +732,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -764,6 +771,7 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -771,6 +779,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -848,7 +857,6 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -907,6 +915,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  CONFIG_CRAMFS=y  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -925,6 +934,7 @@ CONFIG_NETWORK_FILESYSTEMS=y  # CONFIG_NFS_FS is not set  # CONFIG_NFSD is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -983,6 +993,7 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/systemh_defconfig b/arch/sh/configs/systemh_defconfig index 72982e360e3..14e69a229c0 100644 --- a/arch/sh/configs/systemh_defconfig +++ b/arch/sh/configs/systemh_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:14:50 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:39:19 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -31,6 +31,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  # CONFIG_SYSVIPC is not set  # CONFIG_BSD_PROCESS_ACCT is not set @@ -65,7 +68,6 @@ CONFIG_RCU_FANOUT=32  # CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -76,6 +78,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -102,7 +105,7 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_COMPAT_BRK=y @@ -119,6 +122,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -237,6 +241,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -252,7 +257,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -332,7 +337,6 @@ CONFIG_HZ=250  CONFIG_PREEMPT=y  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -402,6 +406,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  # CONFIG_SCSI is not set  # CONFIG_SCSI_DMA is not set @@ -442,6 +447,7 @@ CONFIG_DEVKMEM=y  # Non-8250 serial port support  #  # CONFIG_SERIAL_SH_SCI is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -552,7 +558,6 @@ CONFIG_RTC_LIB=y  # CONFIG_EXT2_FS is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set -CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -609,6 +614,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BEFS_FS is not set  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set  CONFIG_CRAMFS=y  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -676,6 +682,7 @@ CONFIG_HAVE_ARCH_KGDB=y  CONFIG_DEFAULT_SECURITY_DAC=y  CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/titan_defconfig b/arch/sh/configs/titan_defconfig index 78c257053c7..79196b4dfdb 100644 --- a/arch/sh/configs/titan_defconfig +++ b/arch/sh/configs/titan_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:17:20 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 17:41:12 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -32,6 +32,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,9 +47,11 @@ CONFIG_LOCALVERSION=""  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -71,7 +74,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=16 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -82,6 +84,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -109,8 +112,9 @@ CONFIG_PERF_USE_VMALLOC=y  #  # Kernel Performance Events And Counters  # -# CONFIG_PERF_EVENTS is not set +CONFIG_PERF_EVENTS=y  # CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_COMPAT_BRK=y @@ -127,6 +131,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -245,6 +250,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y  CONFIG_MAX_ACTIVE_REGIONS=1  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -260,7 +266,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -345,7 +351,6 @@ CONFIG_PREEMPT_VOLUNTARY=y  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y  # CONFIG_GUSA_RB is not set -# CONFIG_SPARSE_IRQ is not set  #  # Boot options @@ -361,9 +366,9 @@ CONFIG_CMDLINE="console=ttySC1,38400N81 root=/dev/nfs ip=:::::eth1:autoconf rw"  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  # CONFIG_PCIEPORTBUS is not set  # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set @@ -392,7 +397,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -561,6 +565,7 @@ CONFIG_IP6_NF_RAW=m  # CONFIG_ATM is not set  CONFIG_STP=y  CONFIG_BRIDGE=y +CONFIG_BRIDGE_IGMP_SNOOPING=y  # CONFIG_NET_DSA is not set  CONFIG_VLAN_8021Q=y  # CONFIG_VLAN_8021Q_GVRP is not set @@ -749,6 +754,7 @@ CONFIG_MTD_NAND_IDS=m  # CONFIG_MTD_NAND_CAFE is not set  # CONFIG_MTD_NAND_PLATFORM is not set  # CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_NAND_SH_FLCTL is not set  # CONFIG_MTD_ONENAND is not set  # @@ -768,10 +774,6 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_COW_COMMON is not set  CONFIG_BLK_DEV_LOOP=m  CONFIG_BLK_DEV_CRYPTOLOOP=m - -# -# DRBD disabled because PROC_FS, INET or CONNECTOR not selected -#  # CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set @@ -802,6 +804,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -892,7 +895,7 @@ CONFIG_SCSI_LOWLEVEL=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -951,6 +954,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -1002,6 +1006,8 @@ CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set  CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set  # CONFIG_ENIC is not set  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set @@ -1014,6 +1020,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_MLX4_CORE is not set  # CONFIG_TEHUTI is not set  # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set @@ -1040,6 +1047,7 @@ CONFIG_USB_NET_AX8817X=m  CONFIG_USB_NET_CDCETHER=m  # CONFIG_USB_NET_CDC_EEM is not set  # CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_SMSC75XX is not set  # CONFIG_USB_NET_SMSC95XX is not set  # CONFIG_USB_NET_GL620A is not set  CONFIG_USB_NET_NET1080=m @@ -1049,6 +1057,7 @@ CONFIG_USB_NET_PLUSB=m  # CONFIG_USB_NET_CDC_SUBSET is not set  CONFIG_USB_NET_ZAURUS=m  # CONFIG_USB_NET_INT51X1 is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_FDDI is not set  # CONFIG_HIPPI is not set @@ -1136,6 +1145,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -1215,6 +1225,7 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -1222,6 +1233,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1372,6 +1384,7 @@ CONFIG_USB_SERIAL_ARK3116=m  # CONFIG_USB_SERIAL_NAVMAN is not set  CONFIG_USB_SERIAL_PL2303=m  # CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_QCAUX is not set  # CONFIG_USB_SERIAL_QUALCOMM is not set  # CONFIG_USB_SERIAL_SPCP8X5 is not set  # CONFIG_USB_SERIAL_HP4X is not set @@ -1385,6 +1398,7 @@ CONFIG_USB_SERIAL_PL2303=m  # CONFIG_USB_SERIAL_OPTION is not set  # CONFIG_USB_SERIAL_OMNINET is not set  # CONFIG_USB_SERIAL_OPTICON is not set +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set  # CONFIG_USB_SERIAL_DEBUG is not set  # @@ -1397,7 +1411,6 @@ CONFIG_USB_SERIAL_PL2303=m  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1410,7 +1423,6 @@ CONFIG_USB_SERIAL_PL2303=m  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1552,6 +1564,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1585,6 +1598,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  CONFIG_SMB_FS=m  # CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_CEPH_FS is not set  CONFIG_CIFS=m  # CONFIG_CIFS_STATS is not set  CONFIG_CIFS_WEAK_PW_HASH=y @@ -1680,6 +1694,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set  # CONFIG_DEBUG_SPINLOCK is not set @@ -1726,6 +1741,7 @@ CONFIG_FTRACE=y  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set  # CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_KSYM_TRACER is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set @@ -1853,6 +1869,7 @@ CONFIG_CRYPTO_DEFLATE=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/ul2_defconfig b/arch/sh/configs/ul2_defconfig index 4fa03bf086d..17b7258dcde 100644 --- a/arch/sh/configs/ul2_defconfig +++ b/arch/sh/configs/ul2_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:18:53 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 18:10:50 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  # CONFIG_GENERIC_GPIO is not set  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -33,6 +33,7 @@ CONFIG_ARCH_NO_VIRT_TO_BUS=y  CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -48,9 +49,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -73,7 +76,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_GROUP_SCHED is not set  # CONFIG_CGROUPS is not set  CONFIG_SYSFS_DEPRECATED=y  CONFIG_SYSFS_DEPRECATED_V2=y @@ -84,6 +86,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -122,13 +125,13 @@ CONFIG_PROFILING=y  # CONFIG_OPROFILE is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -244,7 +247,7 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x01f00000  CONFIG_29BIT=y -# CONFIG_X2TLB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  CONFIG_NUMA=y  CONFIG_NODES_SHIFT=1 @@ -255,6 +258,8 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -278,7 +283,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_MIGRATION is not set  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -352,7 +357,7 @@ CONFIG_KEXEC=y  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y  CONFIG_GUSA=y -# CONFIG_SPARSE_IRQ is not set +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -388,6 +393,7 @@ CONFIG_SUSPEND=y  CONFIG_SUSPEND_FREEZER=y  # CONFIG_HIBERNATION is not set  CONFIG_PM_RUNTIME=y +CONFIG_PM_OPS=y  # CONFIG_CPU_IDLE is not set  CONFIG_NET=y @@ -395,7 +401,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -473,7 +478,7 @@ CONFIG_CFG80211=y  # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set  # CONFIG_CFG80211_REG_DEBUG is not set  CONFIG_CFG80211_DEFAULT_PS=y -# CONFIG_WIRELESS_OLD_REGULATORY is not set +# CONFIG_CFG80211_INTERNAL_REGDB is not set  CONFIG_CFG80211_WEXT=y  CONFIG_WIRELESS_EXT_SYSFS=y  CONFIG_LIB80211=m @@ -619,6 +624,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -709,6 +715,7 @@ CONFIG_LIBERTAS=m  # CONFIG_LIBERTAS_USB is not set  CONFIG_LIBERTAS_SDIO=m  CONFIG_LIBERTAS_DEBUG=y +# CONFIG_LIBERTAS_MESH is not set  # CONFIG_P54_COMMON is not set  # CONFIG_RT2X00 is not set  # CONFIG_WL12XX is not set @@ -730,6 +737,7 @@ CONFIG_USB_NET_AX8817X=y  CONFIG_USB_NET_CDCETHER=y  # CONFIG_USB_NET_CDC_EEM is not set  # CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_SMSC75XX is not set  # CONFIG_USB_NET_SMSC95XX is not set  # CONFIG_USB_NET_GL620A is not set  # CONFIG_USB_NET_NET1080 is not set @@ -739,6 +747,7 @@ CONFIG_USB_NET_CDCETHER=y  # CONFIG_USB_NET_CDC_SUBSET is not set  # CONFIG_USB_NET_ZAURUS is not set  # CONFIG_USB_NET_INT51X1 is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set @@ -800,6 +809,7 @@ CONFIG_SERIAL_SH_SCI_NR_UARTS=1  CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set  # CONFIG_UNIX98_PTYS is not set  # CONFIG_LEGACY_PTYS is not set  # CONFIG_IPMI_HANDLER is not set @@ -952,7 +962,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -964,7 +973,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -987,9 +995,6 @@ CONFIG_MMC_BLOCK_BOUNCE=y  # MMC/SD/SDIO Host Controller Drivers  #  # CONFIG_MMC_SDHCI is not set -# CONFIG_MMC_AT91 is not set -# CONFIG_MMC_ATMELMCI is not set -# CONFIG_MMC_TMIO is not set  # CONFIG_MEMSTICK is not set  # CONFIG_NEW_LEDS is not set  # CONFIG_ACCESSIBILITY is not set @@ -1079,6 +1084,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  CONFIG_CRAMFS=y  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1104,6 +1110,7 @@ CONFIG_SUNRPC=y  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1299,6 +1306,7 @@ CONFIG_CRYPTO_ARC4=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/configs/urquell_defconfig b/arch/sh/configs/urquell_defconfig index 23bda1916f4..28bb19d2cbe 100644 --- a/arch/sh/configs/urquell_defconfig +++ b/arch/sh/configs/urquell_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33-rc2 -# Mon Jan  4 15:27:53 2010 +# Linux kernel version: 2.6.34-rc5 +# Tue May 18 18:13:10 2010  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -13,8 +13,8 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y +CONFIG_SPARSE_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_CLOCKEVENTS=y @@ -35,6 +35,7 @@ CONFIG_ARCH_HAS_DEFAULT_IDLE=y  CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y  CONFIG_DMA_COHERENT=y  # CONFIG_DMA_NONCOHERENT is not set +# CONFIG_NEED_DMA_MAP_STATE is not set  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -49,9 +50,11 @@ CONFIG_LOCALVERSION_AUTO=y  CONFIG_HAVE_KERNEL_GZIP=y  CONFIG_HAVE_KERNEL_BZIP2=y  CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y  CONFIG_KERNEL_GZIP=y  # CONFIG_KERNEL_BZIP2 is not set  # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set  CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y @@ -77,11 +80,6 @@ CONFIG_RCU_FANOUT=32  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_RT_GROUP_SCHED=y -# CONFIG_USER_SCHED is not set -CONFIG_CGROUP_SCHED=y  CONFIG_CGROUPS=y  CONFIG_CGROUP_DEBUG=y  CONFIG_CGROUP_NS=y @@ -93,6 +91,9 @@ CONFIG_CGROUP_CPUACCT=y  CONFIG_RESOURCE_COUNTERS=y  CONFIG_CGROUP_MEM_RES_CTLR=y  CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_RT_GROUP_SCHED=y  CONFIG_MM_OWNER=y  # CONFIG_SYSFS_DEPRECATED_V2 is not set  # CONFIG_RELAY is not set @@ -102,6 +103,7 @@ CONFIG_INITRAMFS_SOURCE=""  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  CONFIG_CC_OPTIMIZE_FOR_SIZE=y  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -142,13 +144,13 @@ CONFIG_PROFILING=y  # CONFIG_OPROFILE is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set -CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y  CONFIG_HAVE_CLK=y  CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y  #  # GCOV-based kernel profiling @@ -169,7 +171,6 @@ CONFIG_BLOCK=y  CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set -# CONFIG_BLK_CGROUP is not set  #  # IO Schedulers @@ -265,8 +266,8 @@ CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_MEMORY_START=0x08000000  CONFIG_MEMORY_SIZE=0x08000000  CONFIG_29BIT=y -# CONFIG_PMB_ENABLE is not set -# CONFIG_X2TLB is not set +# CONFIG_PMB is not set +CONFIG_X2TLB=y  CONFIG_VSYSCALL=y  # CONFIG_NUMA is not set  CONFIG_ARCH_FLATMEM_ENABLE=y @@ -277,6 +278,8 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_ARCH_SELECT_MEMORY_MODEL=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_IOREMAP_FIXED=y +CONFIG_UNCACHED_MAPPING=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set @@ -299,7 +302,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0 -CONFIG_NR_QUICK=2 +CONFIG_NR_QUICK=1  # CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -317,6 +320,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y  # CONFIG_CPU_BIG_ENDIAN is not set  CONFIG_SH_FPU=y  CONFIG_SH_STORE_QUEUES=y +# CONFIG_SPECULATIVE_EXECUTION is not set  CONFIG_CPU_HAS_INTEVT=y  CONFIG_CPU_HAS_SR_RB=y  CONFIG_CPU_HAS_PTEAEX=y @@ -325,15 +329,14 @@ CONFIG_CPU_HAS_FPU=y  #  # Board support  # +# CONFIG_SH_SDK7786 is not set  CONFIG_SH_URQUELL=y  #  # Timer and clock configuration  #  CONFIG_SH_TIMER_TMU=y -CONFIG_SH_PCLK_FREQ=33333333  CONFIG_SH_CLK_CPG=y -CONFIG_SH_CLK_CPG_LEGACY=y  CONFIG_TICK_ONESHOT=y  # CONFIG_NO_HZ is not set  CONFIG_HIGH_RES_TIMERS=y @@ -376,7 +379,7 @@ CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set  CONFIG_GUSA=y -CONFIG_SPARSE_IRQ=y +# CONFIG_INTC_USERIMASK is not set  #  # Boot options @@ -391,6 +394,7 @@ CONFIG_ENTRY_OFFSET=0x00001000  # Bus options  #  CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y  CONFIG_PCIEPORTBUS=y  CONFIG_PCIEAER=y  # CONFIG_PCIE_ECRC is not set @@ -398,7 +402,6 @@ CONFIG_PCIEAER=y  CONFIG_PCIEASPM=y  CONFIG_PCIEASPM_DEBUG=y  # CONFIG_ARCH_SUPPORTS_MSI is not set -# CONFIG_PCI_LEGACY is not set  CONFIG_PCI_DEBUG=y  # CONFIG_PCI_STUB is not set  # CONFIG_PCI_IOV is not set @@ -428,7 +431,6 @@ CONFIG_NET=y  # Networking options  #  CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y  CONFIG_XFRM=y  # CONFIG_XFRM_USER is not set @@ -639,6 +641,7 @@ CONFIG_HAVE_IDE=y  #  # SCSI device support  # +CONFIG_SCSI_MOD=y  # CONFIG_RAID_ATTRS is not set  CONFIG_SCSI=y  CONFIG_SCSI_DMA=y @@ -712,6 +715,7 @@ CONFIG_ATA_SFF=y  # CONFIG_PATA_IT821X is not set  # CONFIG_PATA_IT8213 is not set  # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set  # CONFIG_PATA_TRIFLEX is not set  # CONFIG_PATA_MARVELL is not set  # CONFIG_PATA_MPIIX is not set @@ -748,7 +752,7 @@ CONFIG_ATA_SFF=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -807,6 +811,7 @@ CONFIG_NET_PCI=y  # CONFIG_PCNET32 is not set  # CONFIG_AMD8111_ETH is not set  # CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set  # CONFIG_B44 is not set  # CONFIG_FORCEDETH is not set  # CONFIG_E100 is not set @@ -871,6 +876,7 @@ CONFIG_WLAN=y  # CONFIG_USB_PEGASUS is not set  # CONFIG_USB_RTL8150 is not set  # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set  # CONFIG_WAN is not set  # CONFIG_FDDI is not set  # CONFIG_HIPPI is not set @@ -958,6 +964,7 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -1007,6 +1014,7 @@ CONFIG_I2C_ALGOPCA=y  # CONFIG_I2C_OCORES is not set  # CONFIG_I2C_SH_MOBILE is not set  # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set  #  # External I2C/SMBus adapter drivers @@ -1020,15 +1028,9 @@ CONFIG_I2C_ALGOPCA=y  #  CONFIG_I2C_PCA_PLATFORM=y  # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set  # @@ -1043,13 +1045,17 @@ CONFIG_GPIOLIB=y  #  # Memory mapped GPIO expanders:  # +# CONFIG_GPIO_IT8761E is not set +# CONFIG_GPIO_SCH is not set  #  # I2C GPIO expanders:  # +# CONFIG_GPIO_MAX7300 is not set  # CONFIG_GPIO_MAX732X is not set  # CONFIG_GPIO_PCA953X is not set  # CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set  #  # PCI GPIO expanders: @@ -1082,10 +1088,11 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_ADM1029 is not set  # CONFIG_SENSORS_ADM1031 is not set  # CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7411 is not set  # CONFIG_SENSORS_ADT7462 is not set  # CONFIG_SENSORS_ADT7470 is not set -# CONFIG_SENSORS_ADT7473 is not set  # CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_ASC7621 is not set  # CONFIG_SENSORS_ATXP1 is not set  # CONFIG_SENSORS_DS1621 is not set  # CONFIG_SENSORS_I5K_AMB is not set @@ -1123,6 +1130,7 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_SMSC47M192 is not set  # CONFIG_SENSORS_SMSC47B397 is not set  # CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_AMC6821 is not set  # CONFIG_SENSORS_THMC50 is not set  # CONFIG_SENSORS_TMP401 is not set  # CONFIG_SENSORS_TMP421 is not set @@ -1151,21 +1159,26 @@ CONFIG_SSB_POSSIBLE=y  # Multifunction device drivers  #  # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set  CONFIG_MFD_SM501=y  # CONFIG_MFD_SM501_GPIO is not set  # CONFIG_MFD_SH_MOBILE_SDHI is not set  # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set  # CONFIG_TPS65010 is not set  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set  # CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set -# CONFIG_MFD_88PM8607 is not set +# CONFIG_MFD_TIMBERDALE is not set +# CONFIG_LPC_SCH is not set  # CONFIG_REGULATOR is not set  CONFIG_MEDIA_SUPPORT=y @@ -1187,6 +1200,7 @@ CONFIG_VIDEO_IR=y  # Graphics support  #  CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1283,6 +1297,7 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # +# CONFIG_HID_3M_PCT is not set  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y @@ -1298,14 +1313,19 @@ CONFIG_HID_GYRATION=y  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set  CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set  CONFIG_HID_MONTEREY=y  # CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set  CONFIG_HID_PANTHERLORD=y  # CONFIG_PANTHERLORD_FF is not set  CONFIG_HID_PETALYNX=y +# CONFIG_HID_QUANTA is not set  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set  CONFIG_HID_SUNPLUS=y  # CONFIG_HID_GREENASIA is not set  # CONFIG_HID_SMARTJOYPLUS is not set @@ -1326,7 +1346,6 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y  CONFIG_USB_DEVICEFS=y  CONFIG_USB_DEVICE_CLASS=y  # CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set  # CONFIG_USB_OTG is not set  # CONFIG_USB_OTG_WHITELIST is not set  # CONFIG_USB_OTG_BLACKLIST_HUB is not set @@ -1405,7 +1424,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_RIO500 is not set  # CONFIG_USB_LEGOTOWER is not set  # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set @@ -1417,7 +1435,6 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_IOWARRIOR is not set  # CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set  # @@ -1584,6 +1601,7 @@ CONFIG_MISC_FILESYSTEMS=y  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set  # CONFIG_CRAMFS is not set  # CONFIG_SQUASHFS is not set  # CONFIG_VXFS_FS is not set @@ -1610,6 +1628,7 @@ CONFIG_SUNRPC_GSS=y  CONFIG_RPCSEC_GSS_KRB5=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set  # CONFIG_CIFS is not set  # CONFIG_NCP_FS is not set  # CONFIG_CODA_FS is not set @@ -1688,6 +1707,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set  # CONFIG_DEBUG_SPINLOCK is not set @@ -1713,6 +1733,7 @@ CONFIG_FRAME_POINTER=y  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set  # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y @@ -1846,6 +1867,7 @@ CONFIG_CRYPTO_DES=y  #  # CONFIG_CRYPTO_ANSI_CPRNG is not set  # CONFIG_CRYPTO_HW is not set +# CONFIG_VIRTUALIZATION is not set  # CONFIG_BINARY_PRINTF is not set  # diff --git a/arch/sh/drivers/dma/dma-api.c b/arch/sh/drivers/dma/dma-api.c index 727126e907e..4a277224a87 100644 --- a/arch/sh/drivers/dma/dma-api.c +++ b/arch/sh/drivers/dma/dma-api.c @@ -17,6 +17,7 @@  #include <linux/platform_device.h>  #include <linux/mm.h>  #include <linux/sched.h> +#include <linux/slab.h>  #include <asm/dma.h>  DEFINE_SPINLOCK(dma_spin_lock); diff --git a/arch/sh/drivers/dma/dma-pvr2.c b/arch/sh/drivers/dma/dma-pvr2.c index 391cbe1c295..3cee58e7f1e 100644 --- a/arch/sh/drivers/dma/dma-pvr2.c +++ b/arch/sh/drivers/dma/dma-pvr2.c @@ -40,10 +40,10 @@ static irqreturn_t pvr2_dma_interrupt(int irq, void *dev_id)  static int pvr2_request_dma(struct dma_channel *chan)  { -	if (ctrl_inl(PVR2_DMA_MODE) != 0) +	if (__raw_readl(PVR2_DMA_MODE) != 0)  		return -EBUSY; -	ctrl_outl(0, PVR2_DMA_LMMODE0); +	__raw_writel(0, PVR2_DMA_LMMODE0);  	return 0;  } @@ -60,9 +60,9 @@ static int pvr2_xfer_dma(struct dma_channel *chan)  	xfer_complete = 0; -	ctrl_outl(chan->dar, PVR2_DMA_ADDR); -	ctrl_outl(chan->count, PVR2_DMA_COUNT); -	ctrl_outl(chan->mode & DMA_MODE_MASK, PVR2_DMA_MODE); +	__raw_writel(chan->dar, PVR2_DMA_ADDR); +	__raw_writel(chan->count, PVR2_DMA_COUNT); +	__raw_writel(chan->mode & DMA_MODE_MASK, PVR2_DMA_MODE);  	return 0;  } diff --git a/arch/sh/drivers/dma/dma-sh.c b/arch/sh/drivers/dma/dma-sh.c index 37fb5b8bbc3..827208781ed 100644 --- a/arch/sh/drivers/dma/dma-sh.c +++ b/arch/sh/drivers/dma/dma-sh.c @@ -52,11 +52,14 @@ static inline unsigned int get_dmte_irq(unsigned int chan)   *   * iterations to complete the transfer.   */ +static unsigned int ts_shift[] = TS_SHIFT;  static inline unsigned int calc_xmit_shift(struct dma_channel *chan)  { -	u32 chcr = ctrl_inl(dma_base_addr[chan->chan] + CHCR); +	u32 chcr = __raw_readl(dma_base_addr[chan->chan] + CHCR); +	int cnt = ((chcr & CHCR_TS_LOW_MASK) >> CHCR_TS_LOW_SHIFT) | +		((chcr & CHCR_TS_HIGH_MASK) >> CHCR_TS_HIGH_SHIFT); -	return ts_shift[(chcr & CHCR_TS_MASK)>>CHCR_TS_SHIFT]; +	return ts_shift[cnt];  }  /* @@ -70,13 +73,13 @@ static irqreturn_t dma_tei(int irq, void *dev_id)  	struct dma_channel *chan = dev_id;  	u32 chcr; -	chcr = ctrl_inl(dma_base_addr[chan->chan] + CHCR); +	chcr = __raw_readl(dma_base_addr[chan->chan] + CHCR);  	if (!(chcr & CHCR_TE))  		return IRQ_NONE;  	chcr &= ~(CHCR_IE | CHCR_DE); -	ctrl_outl(chcr, (dma_base_addr[chan->chan] + CHCR)); +	__raw_writel(chcr, (dma_base_addr[chan->chan] + CHCR));  	wake_up(&chan->wait_queue); @@ -115,7 +118,7 @@ sh_dmac_configure_channel(struct dma_channel *chan, unsigned long chcr)  		chan->flags &= ~DMA_TEI_CAPABLE;  	} -	ctrl_outl(chcr, (dma_base_addr[chan->chan] + CHCR)); +	__raw_writel(chcr, (dma_base_addr[chan->chan] + CHCR));  	chan->flags |= DMA_CONFIGURED;  	return 0; @@ -126,13 +129,13 @@ static void sh_dmac_enable_dma(struct dma_channel *chan)  	int irq;  	u32 chcr; -	chcr = ctrl_inl(dma_base_addr[chan->chan] + CHCR); +	chcr = __raw_readl(dma_base_addr[chan->chan] + CHCR);  	chcr |= CHCR_DE;  	if (chan->flags & DMA_TEI_CAPABLE)  		chcr |= CHCR_IE; -	ctrl_outl(chcr, (dma_base_addr[chan->chan] + CHCR)); +	__raw_writel(chcr, (dma_base_addr[chan->chan] + CHCR));  	if (chan->flags & DMA_TEI_CAPABLE) {  		irq = get_dmte_irq(chan->chan); @@ -150,9 +153,9 @@ static void sh_dmac_disable_dma(struct dma_channel *chan)  		disable_irq(irq);  	} -	chcr = ctrl_inl(dma_base_addr[chan->chan] + CHCR); +	chcr = __raw_readl(dma_base_addr[chan->chan] + CHCR);  	chcr &= ~(CHCR_DE | CHCR_TE | CHCR_IE); -	ctrl_outl(chcr, (dma_base_addr[chan->chan] + CHCR)); +	__raw_writel(chcr, (dma_base_addr[chan->chan] + CHCR));  }  static int sh_dmac_xfer_dma(struct dma_channel *chan) @@ -183,12 +186,12 @@ static int sh_dmac_xfer_dma(struct dma_channel *chan)  	 */  	if (chan->sar || (mach_is_dreamcast() &&  			  chan->chan == PVR2_CASCADE_CHAN)) -		ctrl_outl(chan->sar, (dma_base_addr[chan->chan]+SAR)); +		__raw_writel(chan->sar, (dma_base_addr[chan->chan]+SAR));  	if (chan->dar || (mach_is_dreamcast() &&  			  chan->chan == PVR2_CASCADE_CHAN)) -		ctrl_outl(chan->dar, (dma_base_addr[chan->chan] + DAR)); +		__raw_writel(chan->dar, (dma_base_addr[chan->chan] + DAR)); -	ctrl_outl(chan->count >> calc_xmit_shift(chan), +	__raw_writel(chan->count >> calc_xmit_shift(chan),  		(dma_base_addr[chan->chan] + TCR));  	sh_dmac_enable_dma(chan); @@ -198,10 +201,10 @@ static int sh_dmac_xfer_dma(struct dma_channel *chan)  static int sh_dmac_get_dma_residue(struct dma_channel *chan)  { -	if (!(ctrl_inl(dma_base_addr[chan->chan] + CHCR) & CHCR_DE)) +	if (!(__raw_readl(dma_base_addr[chan->chan] + CHCR) & CHCR_DE))  		return 0; -	return ctrl_inl(dma_base_addr[chan->chan] + TCR) +	return __raw_readl(dma_base_addr[chan->chan] + TCR)  		 << calc_xmit_shift(chan);  } diff --git a/arch/sh/drivers/dma/dmabrg.c b/arch/sh/drivers/dma/dmabrg.c index 5e22689c2fc..6ab9c4a1543 100644 --- a/arch/sh/drivers/dma/dmabrg.c +++ b/arch/sh/drivers/dma/dmabrg.c @@ -8,6 +8,7 @@  #include <linux/interrupt.h>  #include <linux/kernel.h> +#include <linux/slab.h>  #include <asm/dma.h>  #include <asm/dmabrg.h>  #include <asm/io.h> @@ -86,8 +87,8 @@ static irqreturn_t dmabrg_irq(int irq, void *data)  	unsigned long dcr;  	unsigned int i; -	dcr = ctrl_inl(DMABRGCR); -	ctrl_outl(dcr & ~0x00ff0003, DMABRGCR);	/* ack all */ +	dcr = __raw_readl(DMABRGCR); +	__raw_writel(dcr & ~0x00ff0003, DMABRGCR);	/* ack all */  	dcr &= dcr >> 8;	/* ignore masked */  	/* USB stuff, get it out of the way first */ @@ -109,17 +110,17 @@ static irqreturn_t dmabrg_irq(int irq, void *data)  static void dmabrg_disable_irq(unsigned int dmairq)  {  	unsigned long dcr; -	dcr = ctrl_inl(DMABRGCR); +	dcr = __raw_readl(DMABRGCR);  	dcr &= ~(1 << ((dmairq > 1) ? dmairq + 22 : dmairq + 8)); -	ctrl_outl(dcr, DMABRGCR); +	__raw_writel(dcr, DMABRGCR);  }  static void dmabrg_enable_irq(unsigned int dmairq)  {  	unsigned long dcr; -	dcr = ctrl_inl(DMABRGCR); +	dcr = __raw_readl(DMABRGCR);  	dcr |= (1 << ((dmairq > 1) ? dmairq + 22 : dmairq + 8)); -	ctrl_outl(dcr, DMABRGCR); +	__raw_writel(dcr, DMABRGCR);  }  int dmabrg_request_irq(unsigned int dmairq, void(*handler)(void*), @@ -165,13 +166,13 @@ static int __init dmabrg_init(void)  		printk(KERN_INFO "DMABRG: DMAC ch0 not reserved!\n");  #endif -	ctrl_outl(0, DMABRGCR); -	ctrl_outl(0, DMACHCR0); -	ctrl_outl(0x94000000, DMARSRA);	/* enable DMABRG in DMAC 0 */ +	__raw_writel(0, DMABRGCR); +	__raw_writel(0, DMACHCR0); +	__raw_writel(0x94000000, DMARSRA);	/* enable DMABRG in DMAC 0 */  	/* enable DMABRG mode, enable the DMAC */ -	or = ctrl_inl(DMAOR); -	ctrl_outl(or | DMAOR_BRG | DMAOR_DMEN, DMAOR); +	or = __raw_readl(DMAOR); +	__raw_writel(or | DMAOR_BRG | DMAOR_DMEN, DMAOR);  	ret = request_irq(DMABRGI0, dmabrg_irq, IRQF_DISABLED,  			"DMABRG USB address error", NULL); diff --git a/arch/sh/drivers/heartbeat.c b/arch/sh/drivers/heartbeat.c index a9339a6174f..7efc9c354fc 100644 --- a/arch/sh/drivers/heartbeat.c +++ b/arch/sh/drivers/heartbeat.c @@ -1,7 +1,7 @@  /*   * Generic heartbeat driver for regular LED banks   * - * Copyright (C) 2007  Paul Mundt + * Copyright (C) 2007 - 2010  Paul Mundt   *   * Most SH reference boards include a number of individual LEDs that can   * be independently controlled (either via a pre-defined hardware @@ -24,10 +24,11 @@  #include <linux/sched.h>  #include <linux/timer.h>  #include <linux/io.h> +#include <linux/slab.h>  #include <asm/heartbeat.h>  #define DRV_NAME "heartbeat" -#define DRV_VERSION "0.1.1" +#define DRV_VERSION "0.1.2"  static unsigned char default_bit_pos[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; @@ -98,7 +99,7 @@ static int heartbeat_drv_probe(struct platform_device *pdev)  			return -ENOMEM;  	} -	hd->base = ioremap_nocache(res->start, res->end - res->start + 1); +	hd->base = ioremap_nocache(res->start, resource_size(res));  	if (unlikely(!hd->base)) {  		dev_err(&pdev->dev, "ioremap failed\n"); @@ -117,8 +118,20 @@ static int heartbeat_drv_probe(struct platform_device *pdev)  	for (i = 0; i < hd->nr_bits; i++)  		hd->mask |= (1 << hd->bit_pos[i]); -	if (!hd->regsize) -		hd->regsize = 8;	/* default access size */ +	if (!hd->regsize) { +		switch (res->flags & IORESOURCE_MEM_TYPE_MASK) { +		case IORESOURCE_MEM_32BIT: +			hd->regsize = 32; +			break; +		case IORESOURCE_MEM_16BIT: +			hd->regsize = 16; +			break; +		case IORESOURCE_MEM_8BIT: +		default: +			hd->regsize = 8; +			break; +		} +	}  	setup_timer(&hd->timer, heartbeat_timer, (unsigned long)hd);  	platform_set_drvdata(pdev, hd); diff --git a/arch/sh/drivers/pci/Makefile b/arch/sh/drivers/pci/Makefile index 08af1f45975..4a59e689087 100644 --- a/arch/sh/drivers/pci/Makefile +++ b/arch/sh/drivers/pci/Makefile @@ -1,14 +1,14 @@  #  # Makefile for the PCI specific kernel interface routines under Linux.  # -obj-y					+= pci.o +obj-y					+= common.o pci.o  obj-$(CONFIG_CPU_SUBTYPE_SH7751)	+= pci-sh7751.o ops-sh4.o  obj-$(CONFIG_CPU_SUBTYPE_SH7751R)	+= pci-sh7751.o ops-sh4.o  obj-$(CONFIG_CPU_SUBTYPE_SH7763)	+= pci-sh7780.o ops-sh4.o  obj-$(CONFIG_CPU_SUBTYPE_SH7780)	+= pci-sh7780.o ops-sh4.o  obj-$(CONFIG_CPU_SUBTYPE_SH7785)	+= pci-sh7780.o ops-sh4.o -obj-$(CONFIG_CPU_SUBTYPE_SH7786)	+= ops-sh7786.o +obj-$(CONFIG_CPU_SUBTYPE_SH7786)	+= pcie-sh7786.o ops-sh7786.o  obj-$(CONFIG_CPU_SH5)			+= pci-sh5.o ops-sh5.o  obj-$(CONFIG_SH_DREAMCAST)		+= ops-dreamcast.o fixups-dreamcast.o \ @@ -25,4 +25,3 @@ obj-$(CONFIG_SH_TITAN)			+= fixups-titan.o  obj-$(CONFIG_SH_LANDISK)		+= fixups-landisk.o  obj-$(CONFIG_SH_LBOX_RE2)		+= fixups-rts7751r2d.o  obj-$(CONFIG_SH_CAYMAN)			+= fixups-cayman.o -obj-$(CONFIG_SH_URQUELL)		+= pcie-sh7786.o diff --git a/arch/sh/drivers/pci/common.c b/arch/sh/drivers/pci/common.c new file mode 100644 index 00000000000..dbf13819987 --- /dev/null +++ b/arch/sh/drivers/pci/common.c @@ -0,0 +1,162 @@ +#include <linux/pci.h> +#include <linux/interrupt.h> +#include <linux/timer.h> +#include <linux/kernel.h> + +/* + * These functions are used early on before PCI scanning is done + * and all of the pci_dev and pci_bus structures have been created. + */ +static struct pci_dev *fake_pci_dev(struct pci_channel *hose, +	int top_bus, int busnr, int devfn) +{ +	static struct pci_dev dev; +	static struct pci_bus bus; + +	dev.bus = &bus; +	dev.sysdata = hose; +	dev.devfn = devfn; +	bus.number = busnr; +	bus.sysdata = hose; +	bus.ops = hose->pci_ops; + +	if(busnr != top_bus) +		/* Fake a parent bus structure. */ +		bus.parent = &bus; +	else +		bus.parent = NULL; + +	return &dev; +} + +#define EARLY_PCI_OP(rw, size, type)					\ +int __init early_##rw##_config_##size(struct pci_channel *hose,		\ +	int top_bus, int bus, int devfn, int offset, type value)	\ +{									\ +	return pci_##rw##_config_##size(				\ +		fake_pci_dev(hose, top_bus, bus, devfn),		\ +		offset, value);						\ +} + +EARLY_PCI_OP(read, byte, u8 *) +EARLY_PCI_OP(read, word, u16 *) +EARLY_PCI_OP(read, dword, u32 *) +EARLY_PCI_OP(write, byte, u8) +EARLY_PCI_OP(write, word, u16) +EARLY_PCI_OP(write, dword, u32) + +int __init pci_is_66mhz_capable(struct pci_channel *hose, +				int top_bus, int current_bus) +{ +	u32 pci_devfn; +	unsigned short vid; +	int cap66 = -1; +	u16 stat; + +	printk(KERN_INFO "PCI: Checking 66MHz capabilities...\n"); + +	for (pci_devfn = 0; pci_devfn < 0xff; pci_devfn++) { +		if (PCI_FUNC(pci_devfn)) +			continue; +		if (early_read_config_word(hose, top_bus, current_bus, +					   pci_devfn, PCI_VENDOR_ID, &vid) != +		    PCIBIOS_SUCCESSFUL) +			continue; +		if (vid == 0xffff) +			continue; + +		/* check 66MHz capability */ +		if (cap66 < 0) +			cap66 = 1; +		if (cap66) { +			early_read_config_word(hose, top_bus, current_bus, +					       pci_devfn, PCI_STATUS, &stat); +			if (!(stat & PCI_STATUS_66MHZ)) { +				printk(KERN_DEBUG +				       "PCI: %02x:%02x not 66MHz capable.\n", +				       current_bus, pci_devfn); +				cap66 = 0; +				break; +			} +		} +	} + +	return cap66 > 0; +} + +static void pcibios_enable_err(unsigned long __data) +{ +	struct pci_channel *hose = (struct pci_channel *)__data; + +	del_timer(&hose->err_timer); +	printk(KERN_DEBUG "PCI: re-enabling error IRQ.\n"); +	enable_irq(hose->err_irq); +} + +static void pcibios_enable_serr(unsigned long __data) +{ +	struct pci_channel *hose = (struct pci_channel *)__data; + +	del_timer(&hose->serr_timer); +	printk(KERN_DEBUG "PCI: re-enabling system error IRQ.\n"); +	enable_irq(hose->serr_irq); +} + +void pcibios_enable_timers(struct pci_channel *hose) +{ +	if (hose->err_irq) { +		init_timer(&hose->err_timer); +		hose->err_timer.data = (unsigned long)hose; +		hose->err_timer.function = pcibios_enable_err; +	} + +	if (hose->serr_irq) { +		init_timer(&hose->serr_timer); +		hose->serr_timer.data = (unsigned long)hose; +		hose->serr_timer.function = pcibios_enable_serr; +	} +} + +/* + * A simple handler for the regular PCI status errors, called from IRQ + * context. + */ +unsigned int pcibios_handle_status_errors(unsigned long addr, +					  unsigned int status, +					  struct pci_channel *hose) +{ +	unsigned int cmd = 0; + +	if (status & PCI_STATUS_REC_MASTER_ABORT) { +		printk(KERN_DEBUG "PCI: master abort, pc=0x%08lx\n", addr); +		cmd |= PCI_STATUS_REC_MASTER_ABORT; +	} + +	if (status & PCI_STATUS_REC_TARGET_ABORT) { +		printk(KERN_DEBUG "PCI: target abort: "); +		pcibios_report_status(PCI_STATUS_REC_TARGET_ABORT | +				      PCI_STATUS_SIG_TARGET_ABORT | +				      PCI_STATUS_REC_MASTER_ABORT, 1); +		printk("\n"); + +		cmd |= PCI_STATUS_REC_TARGET_ABORT; +	} + +	if (status & (PCI_STATUS_PARITY | PCI_STATUS_DETECTED_PARITY)) { +		printk(KERN_DEBUG "PCI: parity error detected: "); +		pcibios_report_status(PCI_STATUS_PARITY | +				      PCI_STATUS_DETECTED_PARITY, 1); +		printk("\n"); + +		cmd |= PCI_STATUS_PARITY | PCI_STATUS_DETECTED_PARITY; + +		/* Now back off of the IRQ for awhile */ +		if (hose->err_irq) { +			disable_irq_nosync(hose->err_irq); +			hose->err_timer.expires = jiffies + HZ; +			add_timer(&hose->err_timer); +		} +	} + +	return cmd; +} diff --git a/arch/sh/drivers/pci/fixups-dreamcast.c b/arch/sh/drivers/pci/fixups-dreamcast.c index ed7f489936f..942ef4f155f 100644 --- a/arch/sh/drivers/pci/fixups-dreamcast.c +++ b/arch/sh/drivers/pci/fixups-dreamcast.c @@ -39,7 +39,7 @@ static void __init gapspci_fixup_resources(struct pci_dev *dev)  		/*  		 * We also assume that dev->devfn == 0  		 */ -		dev->resource[1].start	= p->io_resource->start  + 0x100; +		dev->resource[1].start	= p->resources[0].start  + 0x100;  		dev->resource[1].end	= dev->resource[1].start + 0x200 - 1;  		/* diff --git a/arch/sh/drivers/pci/fixups-r7780rp.c b/arch/sh/drivers/pci/fixups-r7780rp.c index 15ca65cb667..08b2d8658a0 100644 --- a/arch/sh/drivers/pci/fixups-r7780rp.c +++ b/arch/sh/drivers/pci/fixups-r7780rp.c @@ -22,15 +22,3 @@ int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)  {  	return irq_tab[slot];  } - -int pci_fixup_pcic(struct pci_channel *chan) -{ -	pci_write_reg(chan, 0x000043ff, SH4_PCIINTM); -	pci_write_reg(chan, 0x00000000, SH7780_PCIIBAR); -	pci_write_reg(chan, 0x08000000, SH7780_PCICSCR0); -	pci_write_reg(chan, 0x0000001b, SH7780_PCICSAR0); -	pci_write_reg(chan, 0xfd000000, SH7780_PCICSCR1); -	pci_write_reg(chan, 0x0000000f, SH7780_PCICSAR1); - -	return 0; -} diff --git a/arch/sh/drivers/pci/fixups-rts7751r2d.c b/arch/sh/drivers/pci/fixups-rts7751r2d.c index 7898f14d664..e248516118a 100644 --- a/arch/sh/drivers/pci/fixups-rts7751r2d.c +++ b/arch/sh/drivers/pci/fixups-rts7751r2d.c @@ -43,7 +43,7 @@ int pci_fixup_pcic(struct pci_channel *chan)  {  	unsigned long bcr1, mcr; -	bcr1 = ctrl_inl(SH7751_BCR1); +	bcr1 = __raw_readl(SH7751_BCR1);  	bcr1 |= 0x40080000;	/* Enable Bit 19 BREQEN, set PCIC to slave */  	pci_write_reg(chan, bcr1, SH4_PCIBCR1); @@ -54,7 +54,7 @@ int pci_fixup_pcic(struct pci_channel *chan)  	pci_write_reg(chan, 0xfb900047, SH7751_PCICONF1);  	pci_write_reg(chan, 0xab000001, SH7751_PCICONF4); -	mcr = ctrl_inl(SH7751_MCR); +	mcr = __raw_readl(SH7751_MCR);  	mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF;  	pci_write_reg(chan, mcr, SH4_PCIMCR); diff --git a/arch/sh/drivers/pci/fixups-sdk7780.c b/arch/sh/drivers/pci/fixups-sdk7780.c index 250b0edd736..0930f988ac2 100644 --- a/arch/sh/drivers/pci/fixups-sdk7780.c +++ b/arch/sh/drivers/pci/fixups-sdk7780.c @@ -31,22 +31,3 @@ int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)  {         return sdk7780_irq_tab[pin-1][slot];  } -int pci_fixup_pcic(struct pci_channel *chan) -{ -	/* Enable all interrupts, so we know what to fix */ -	pci_write_reg(chan, 0x0000C3FF, SH7780_PCIIMR); - -	/* Set up standard PCI config registers */ -	pci_write_reg(chan, 0x08000000, SH7780_PCIMBAR0);	/* PCI */ -	pci_write_reg(chan, 0x08000000, SH4_PCILAR0);	/* SHwy */ -	pci_write_reg(chan, 0x07F00001, SH4_PCILSR0);	/* size 128M w/ MBAR */ - -	pci_write_reg(chan, 0x00000000, SH7780_PCIMBAR1); -	pci_write_reg(chan, 0x00000000, SH4_PCILAR1); -	pci_write_reg(chan, 0x00000000, SH4_PCILSR1); - -	pci_write_reg(chan, 0xAB000801, SH7780_PCIIBAR); -	pci_write_reg(chan, 0xA5000C01, SH4_PCICR); - -	return 0; -} diff --git a/arch/sh/drivers/pci/fixups-se7751.c b/arch/sh/drivers/pci/fixups-se7751.c index 475fa9f0fe2..a4c7d3a4efc 100644 --- a/arch/sh/drivers/pci/fixups-se7751.c +++ b/arch/sh/drivers/pci/fixups-se7751.c @@ -97,12 +97,12 @@ int pci_fixup_pcic(struct pci_channel *chan)  	* meaning all calls go straight through... use BUG_ON to  	* catch erroneous assumption.  	*/ -	BUG_ON(chan->mem_resource->start != SH7751_PCI_MEMORY_BASE); +	BUG_ON(chan->resources[1].start != SH7751_PCI_MEMORY_BASE); -	PCIC_WRITE(SH7751_PCIMBR, chan->mem_resource->start); +	PCIC_WRITE(SH7751_PCIMBR, chan->resources[1].start);  	/* Set IOBR for window containing area specified in pci.h */ -	PCIC_WRITE(SH7751_PCIIOBR, (chan->io_resource->start & SH7751_PCIIOBR_MASK)); +	PCIC_WRITE(SH7751_PCIIOBR, (chan->resources[0].start & SH7751_PCIIOBR_MASK));  	/* All done, may as well say so... */  	printk("SH7751 PCI: Finished initialization of the PCI controller\n"); diff --git a/arch/sh/drivers/pci/ops-sh4.c b/arch/sh/drivers/pci/ops-sh4.c index 78bebebdc99..0b81999fb88 100644 --- a/arch/sh/drivers/pci/ops-sh4.c +++ b/arch/sh/drivers/pci/ops-sh4.c @@ -16,7 +16,7 @@   * Direct access to PCI hardware...   */  #define CONFIG_CMD(bus, devfn, where) \ -	(P1SEG | (bus->number << 16) | (devfn << 8) | (where & ~3)) +	(0x80000000 | (bus->number << 16) | (devfn << 8) | (where & ~3))  static DEFINE_SPINLOCK(sh4_pci_lock); @@ -102,34 +102,6 @@ struct pci_ops sh4_pci_ops = {  	.write		= sh4_pci_write,  }; -/* - * Not really related to pci_ops, but it's common and not worth shoving - * somewhere else for now.. - */ -int __init sh4_pci_check_direct(struct pci_channel *chan) -{ -	/* -	 * Check if configuration works. -	 */ -	unsigned int tmp = pci_read_reg(chan, SH4_PCIPAR); - -	pci_write_reg(chan, P1SEG, SH4_PCIPAR); - -	if (pci_read_reg(chan, SH4_PCIPAR) == P1SEG) { -		pci_write_reg(chan, tmp, SH4_PCIPAR); -		printk(KERN_INFO "PCI: Using configuration type 1\n"); -		request_region(chan->reg_base + SH4_PCIPAR, 8, -			       "PCI conf1"); -		return 0; -	} - -	pci_write_reg(chan, tmp, SH4_PCIPAR); - -	printk(KERN_ERR "PCI: %s failed\n", __func__); - -	return -EINVAL; -} -  int __attribute__((weak)) pci_fixup_pcic(struct pci_channel *chan)  {  	/* Nothing to do. */ diff --git a/arch/sh/drivers/pci/pci-dreamcast.c b/arch/sh/drivers/pci/pci-dreamcast.c index 210f9d4af14..633694193af 100644 --- a/arch/sh/drivers/pci/pci-dreamcast.c +++ b/arch/sh/drivers/pci/pci-dreamcast.c @@ -25,25 +25,25 @@  #include <asm/irq.h>  #include <mach/pci.h> -static struct resource gapspci_io_resource = { -	.name	= "GAPSPCI IO", -	.start	= GAPSPCI_BBA_CONFIG, -	.end	= GAPSPCI_BBA_CONFIG + GAPSPCI_BBA_CONFIG_SIZE - 1, -	.flags	= IORESOURCE_IO, -}; - -static struct resource gapspci_mem_resource = { -	.name	= "GAPSPCI mem", -	.start	= GAPSPCI_DMA_BASE, -	.end	= GAPSPCI_DMA_BASE + GAPSPCI_DMA_SIZE - 1, -	.flags	= IORESOURCE_MEM, +static struct resource gapspci_resources[] = { +	{ +		.name	= "GAPSPCI IO", +		.start	= GAPSPCI_BBA_CONFIG, +		.end	= GAPSPCI_BBA_CONFIG + GAPSPCI_BBA_CONFIG_SIZE - 1, +		.flags	= IORESOURCE_IO, +	},  { +		.name	= "GAPSPCI mem", +		.start	= GAPSPCI_DMA_BASE, +		.end	= GAPSPCI_DMA_BASE + GAPSPCI_DMA_SIZE - 1, +		.flags	= IORESOURCE_MEM, +	},  };  static struct pci_channel dreamcast_pci_controller = {  	.pci_ops	= &gapspci_pci_ops, -	.io_resource	= &gapspci_io_resource, +	.resources	= gapspci_resources, +	.nr_resources	= ARRAY_SIZE(gapspci_resources),  	.io_offset	= 0x00000000, -	.mem_resource	= &gapspci_mem_resource,  	.mem_offset	= 0x00000000,  }; @@ -95,8 +95,6 @@ static int __init gapspci_init(void)  	outl(0x00002001, GAPSPCI_BBA_CONFIG+0x10);  	outl(0x01000000, GAPSPCI_BBA_CONFIG+0x14); -	register_pci_controller(&dreamcast_pci_controller); - -	return 0; +	return register_pci_controller(&dreamcast_pci_controller);  }  arch_initcall(gapspci_init); diff --git a/arch/sh/drivers/pci/pci-sh4.h b/arch/sh/drivers/pci/pci-sh4.h index 3d5296cde62..cbf763b3015 100644 --- a/arch/sh/drivers/pci/pci-sh4.h +++ b/arch/sh/drivers/pci/pci-sh4.h @@ -49,6 +49,17 @@    #define SH4_PCIINT_MWPD	  0x00000002	/* Master Write PERR Detect */    #define SH4_PCIINT_MRPD	  0x00000001	/* Master Read PERR Detect */  #define SH4_PCIINTM		0x118		/* PCI Interrupt Mask */ +  #define SH4_PCIINTM_TTADIM	  BIT(14)	/* Target-target abort interrupt */ +  #define SH4_PCIINTM_TMTOIM	  BIT(9)	/* Target retry timeout */ +  #define SH4_PCIINTM_MDEIM	  BIT(8)	/* Master function disable error */ +  #define SH4_PCIINTM_APEDIM	  BIT(7)	/* Address parity error detection */ +  #define SH4_PCIINTM_SDIM	  BIT(6)	/* SERR detection */ +  #define SH4_PCIINTM_DPEITWM	  BIT(5)	/* Data parity error for target write */ +  #define SH4_PCIINTM_PEDITRM	  BIT(4)	/* PERR detection for target read */ +  #define SH4_PCIINTM_TADIMM	  BIT(3)	/* Target abort for master */ +  #define SH4_PCIINTM_MADIMM	  BIT(2)	/* Master abort for master */ +  #define SH4_PCIINTM_MWPDIM	  BIT(1)	/* Master write data parity error */ +  #define SH4_PCIINTM_MRDPEIM	  BIT(0)	/* Master read data parity error */  #define SH4_PCIALR		0x11C		/* Error Address Register */  #define SH4_PCICLR		0x120		/* Error Command/Data */    #define SH4_PCICLR_MPIO	  0x80000000 @@ -61,7 +72,7 @@  #define SH4_PCIAINT		0x130		/* Arbiter Interrupt Register */    #define SH4_PCIAINT_MBKN	  0x00002000	/* Master Broken Interrupt */    #define SH4_PCIAINT_TBTO	  0x00001000	/* Target Bus Time Out */ -  #define SH4_PCIAINT_MBTO	  0x00001000	/* Master Bus Time Out */ +  #define SH4_PCIAINT_MBTO	  0x00000800	/* Master Bus Time Out */    #define SH4_PCIAINT_TABT	  0x00000008	/* Target Abort */    #define SH4_PCIAINT_MABT	  0x00000004	/* Master Abort */    #define SH4_PCIAINT_RDPE	  0x00000002	/* Read Data Parity Error */ @@ -151,7 +162,6 @@  /* arch/sh/kernel/drivers/pci/ops-sh4.c */  extern struct pci_ops sh4_pci_ops; -int sh4_pci_check_direct(struct pci_channel *chan);  int pci_fixup_pcic(struct pci_channel *chan);  struct sh4_pci_address_space { @@ -167,13 +177,13 @@ struct sh4_pci_address_map {  static inline void pci_write_reg(struct pci_channel *chan,  				 unsigned long val, unsigned long reg)  { -	ctrl_outl(val, chan->reg_base + reg); +	__raw_writel(val, chan->reg_base + reg);  }  static inline unsigned long pci_read_reg(struct pci_channel *chan,  					 unsigned long reg)  { -	return ctrl_inl(chan->reg_base + reg); +	return __raw_readl(chan->reg_base + reg);  }  #endif /* __PCI_SH4_H */ diff --git a/arch/sh/drivers/pci/pci-sh5.c b/arch/sh/drivers/pci/pci-sh5.c index 873ed2b4405..0bf296c7879 100644 --- a/arch/sh/drivers/pci/pci-sh5.c +++ b/arch/sh/drivers/pci/pci-sh5.c @@ -89,14 +89,13 @@ static irqreturn_t pcish5_serr_irq(int irq, void *dev_id)  	return IRQ_NONE;  } -static struct resource sh5_io_resource = { /* place holder */ }; -static struct resource sh5_mem_resource = { /* place holder */ }; +static struct resource sh5_pci_resources[2];  static struct pci_channel sh5pci_controller = {  	.pci_ops		= &sh5_pci_ops, -	.mem_resource		= &sh5_mem_resource, +	.resources		= sh5_pci_resources, +	.nr_resources		= ARRAY_SIZE(sh5_pci_resources),  	.mem_offset		= 0x00000000, -	.io_resource		= &sh5_io_resource,  	.io_offset		= 0x00000000,  }; @@ -210,14 +209,12 @@ static int __init sh5pci_init(void)          SH5PCI_WRITE(AINTM, ~0);          SH5PCI_WRITE(PINTM, ~0); -	sh5_io_resource.start = PCI_IO_AREA; -	sh5_io_resource.end = PCI_IO_AREA + 0x10000; +	sh5_pci_resources[0].start = PCI_IO_AREA; +	sh5_pci_resources[0].end = PCI_IO_AREA + 0x10000; -	sh5_mem_resource.start = memStart; -	sh5_mem_resource.end = memStart + memSize; +	sh5_pci_resources[1].start = memStart; +	sh5_pci_resources[1].end = memStart + memSize; -	register_pci_controller(&sh5pci_controller); - -	return 0; +	return register_pci_controller(&sh5pci_controller);  }  arch_initcall(sh5pci_init); diff --git a/arch/sh/drivers/pci/pci-sh5.h b/arch/sh/drivers/pci/pci-sh5.h index f277628221f..3f01decb430 100644 --- a/arch/sh/drivers/pci/pci-sh5.h +++ b/arch/sh/drivers/pci/pci-sh5.h @@ -86,14 +86,14 @@ extern unsigned long pcicr_virt;  /* #define PCISH5_VCR_REG(x)                ( SH5PCI_VCR_BASE (PCISH5_VCR_##x)) */  /* Write I/O functions */ -#define SH5PCI_WRITE(reg,val)        ctrl_outl((u32)(val),PCISH5_ICR_REG(reg)) -#define SH5PCI_WRITE_SHORT(reg,val)  ctrl_outw((u16)(val),PCISH5_ICR_REG(reg)) -#define SH5PCI_WRITE_BYTE(reg,val)   ctrl_outb((u8)(val),PCISH5_ICR_REG(reg)) +#define SH5PCI_WRITE(reg,val)        __raw_writel((u32)(val),PCISH5_ICR_REG(reg)) +#define SH5PCI_WRITE_SHORT(reg,val)  __raw_writew((u16)(val),PCISH5_ICR_REG(reg)) +#define SH5PCI_WRITE_BYTE(reg,val)   __raw_writeb((u8)(val),PCISH5_ICR_REG(reg))  /* Read I/O functions */ -#define SH5PCI_READ(reg)             ctrl_inl(PCISH5_ICR_REG(reg)) -#define SH5PCI_READ_SHORT(reg)       ctrl_inw(PCISH5_ICR_REG(reg)) -#define SH5PCI_READ_BYTE(reg)        ctrl_inb(PCISH5_ICR_REG(reg)) +#define SH5PCI_READ(reg)             __raw_readl(PCISH5_ICR_REG(reg)) +#define SH5PCI_READ_SHORT(reg)       __raw_readw(PCISH5_ICR_REG(reg)) +#define SH5PCI_READ_BYTE(reg)        __raw_readb(PCISH5_ICR_REG(reg))  /* Set PCI config bits */  #define SET_CONFIG_BITS(bus,devfn,where)  ((((bus) << 16) | ((devfn) << 8) | ((where) & ~3)) | 0x80000000) diff --git a/arch/sh/drivers/pci/pci-sh7751.c b/arch/sh/drivers/pci/pci-sh7751.c index 70c1999a0ec..f98141b3b7d 100644 --- a/arch/sh/drivers/pci/pci-sh7751.c +++ b/arch/sh/drivers/pci/pci-sh7751.c @@ -17,6 +17,7 @@  #include <linux/io.h>  #include "pci-sh4.h"  #include <asm/addrspace.h> +#include <asm/sizes.h>  static int __init __area_sdram_check(struct pci_channel *chan,  				     unsigned int area) @@ -44,25 +45,25 @@ static int __init __area_sdram_check(struct pci_channel *chan,  	return 1;  } -static struct resource sh7751_io_resource = { -	.name	= "SH7751_IO", -	.start	= SH7751_PCI_IO_BASE, -	.end	= SH7751_PCI_IO_BASE + SH7751_PCI_IO_SIZE - 1, -	.flags	= IORESOURCE_IO -}; - -static struct resource sh7751_mem_resource = { -	.name	= "SH7751_mem", -	.start	= SH7751_PCI_MEMORY_BASE, -	.end	= SH7751_PCI_MEMORY_BASE + SH7751_PCI_MEM_SIZE - 1, -	.flags	= IORESOURCE_MEM +static struct resource sh7751_pci_resources[] = { +	{ +		.name	= "SH7751_IO", +		.start	= 0x1000, +		.end	= SZ_4M - 1, +		.flags	= IORESOURCE_IO +	}, { +		.name	= "SH7751_mem", +		.start	= SH7751_PCI_MEMORY_BASE, +		.end	= SH7751_PCI_MEMORY_BASE + SH7751_PCI_MEM_SIZE - 1, +		.flags	= IORESOURCE_MEM +	},  };  static struct pci_channel sh7751_pci_controller = {  	.pci_ops	= &sh4_pci_ops, -	.mem_resource	= &sh7751_mem_resource, +	.resources	= sh7751_pci_resources, +	.nr_resources	= ARRAY_SIZE(sh7751_pci_resources),  	.mem_offset	= 0x00000000, -	.io_resource	= &sh7751_io_resource,  	.io_offset	= 0x00000000,  	.io_map_base	= SH7751_PCI_IO_BASE,  }; @@ -79,7 +80,6 @@ static int __init sh7751_pci_init(void)  	struct pci_channel *chan = &sh7751_pci_controller;  	unsigned int id;  	u32 word, reg; -	int ret;  	printk(KERN_NOTICE "PCI: Starting intialization.\n"); @@ -93,13 +93,10 @@ static int __init sh7751_pci_init(void)  		return -ENODEV;  	} -	if ((ret = sh4_pci_check_direct(chan)) != 0) -		return ret; -  	/* Set the BCR's to enable PCI access */ -	reg = ctrl_inl(SH7751_BCR1); +	reg = __raw_readl(SH7751_BCR1);  	reg |= 0x80000; -	ctrl_outl(reg, SH7751_BCR1); +	__raw_writel(reg, SH7751_BCR1);  	/* Turn the clocks back on (not done in reset)*/  	pci_write_reg(chan, 0, SH4_PCICLKR); @@ -132,13 +129,13 @@ static int __init sh7751_pci_init(void)  	/* Set the local 16MB PCI memory space window to  	 * the lowest PCI mapped address  	 */ -	word = chan->mem_resource->start & SH4_PCIMBR_MASK; +	word = chan->resources[1].start & SH4_PCIMBR_MASK;  	pr_debug("PCI: Setting upper bits of Memory window to 0x%x\n", word);  	pci_write_reg(chan, word , SH4_PCIMBR);  	/* Make sure the MSB's of IO window are set to access PCI space  	 * correctly */ -	word = chan->io_resource->start & SH4_PCIIOBR_MASK; +	word = chan->resources[0].start & SH4_PCIIOBR_MASK;  	pr_debug("PCI: Setting upper bits of IO window to 0x%x\n", word);  	pci_write_reg(chan, word, SH4_PCIIOBR); @@ -159,13 +156,13 @@ static int __init sh7751_pci_init(void)  		return -1;  	/* configure the wait control registers */ -	word = ctrl_inl(SH7751_WCR1); +	word = __raw_readl(SH7751_WCR1);  	pci_write_reg(chan, word, SH4_PCIWCR1); -	word = ctrl_inl(SH7751_WCR2); +	word = __raw_readl(SH7751_WCR2);  	pci_write_reg(chan, word, SH4_PCIWCR2); -	word = ctrl_inl(SH7751_WCR3); +	word = __raw_readl(SH7751_WCR3);  	pci_write_reg(chan, word, SH4_PCIWCR3); -	word = ctrl_inl(SH7751_MCR); +	word = __raw_readl(SH7751_MCR);  	pci_write_reg(chan, word, SH4_PCIMCR);  	/* NOTE: I'm ignoring the PCI error IRQs for now.. @@ -180,8 +177,6 @@ static int __init sh7751_pci_init(void)  	word = SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_ARBM;  	pci_write_reg(chan, word, SH4_PCICR); -	register_pci_controller(chan); - -	return 0; +	return register_pci_controller(chan);  }  arch_initcall(sh7751_pci_init); diff --git a/arch/sh/drivers/pci/pci-sh7780.c b/arch/sh/drivers/pci/pci-sh7780.c index 323b92d565f..ffdcbf10b95 100644 --- a/arch/sh/drivers/pci/pci-sh7780.c +++ b/arch/sh/drivers/pci/pci-sh7780.c @@ -1,7 +1,7 @@  /*   * Low-Level PCI Support for the SH7780   * - *  Copyright (C) 2005 - 2009  Paul Mundt + *  Copyright (C) 2005 - 2010  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -11,52 +11,240 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/pci.h> +#include <linux/interrupt.h> +#include <linux/timer.h> +#include <linux/irq.h>  #include <linux/errno.h>  #include <linux/delay.h> +#include <linux/log2.h>  #include "pci-sh4.h" +#include <asm/mmu.h> +#include <asm/sizes.h> -static struct resource sh7785_io_resource = { -	.name	= "SH7785_IO", -	.start	= SH7780_PCI_IO_BASE, -	.end	= SH7780_PCI_IO_BASE + SH7780_PCI_IO_SIZE - 1, -	.flags	= IORESOURCE_IO -}; - -static struct resource sh7785_mem_resource = { -	.name	= "SH7785_mem", -	.start	= SH7780_PCI_MEMORY_BASE, -	.end	= SH7780_PCI_MEMORY_BASE + SH7780_PCI_MEM_SIZE - 1, -	.flags	= IORESOURCE_MEM +static struct resource sh7785_pci_resources[] = { +	{ +		.name	= "PCI IO", +		.start	= 0x1000, +		.end	= SZ_4M - 1, +		.flags	= IORESOURCE_IO, +	}, { +		.name	= "PCI MEM 0", +		.start	= 0xfd000000, +		.end	= 0xfd000000 + SZ_16M - 1, +		.flags	= IORESOURCE_MEM, +	}, { +		.name	= "PCI MEM 1", +		.start	= 0x10000000, +		.end	= 0x10000000 + SZ_64M - 1, +		.flags	= IORESOURCE_MEM, +	}, { +		/* +		 * 32-bit only resources must be last. +		 */ +		.name	= "PCI MEM 2", +		.start	= 0xc0000000, +		.end	= 0xc0000000 + SZ_512M - 1, +		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_32BIT, +	},  };  static struct pci_channel sh7780_pci_controller = {  	.pci_ops	= &sh4_pci_ops, -	.mem_resource	= &sh7785_mem_resource, -	.mem_offset	= 0x00000000, -	.io_resource	= &sh7785_io_resource, -	.io_offset	= 0x00000000, -	.io_map_base	= SH7780_PCI_IO_BASE, +	.resources	= sh7785_pci_resources, +	.nr_resources	= ARRAY_SIZE(sh7785_pci_resources), +	.io_offset	= 0, +	.mem_offset	= 0, +	.io_map_base	= 0xfe200000, +	.serr_irq	= evt2irq(0xa00), +	.err_irq	= evt2irq(0xaa0),  }; -static struct sh4_pci_address_map sh7780_pci_map = { -	.window0	= { -#if defined(CONFIG_32BIT) -		.base	= SH7780_32BIT_DDR_BASE_ADDR, -		.size	= 0x40000000, -#else -		.base	= SH7780_CS0_BASE_ADDR, -		.size	= 0x20000000, -#endif -	}, +struct pci_errors { +	unsigned int	mask; +	const char	*str; +} pci_arbiter_errors[] = { +	{ SH4_PCIAINT_MBKN,	"master broken" }, +	{ SH4_PCIAINT_TBTO,	"target bus time out" }, +	{ SH4_PCIAINT_MBTO,	"master bus time out" }, +	{ SH4_PCIAINT_TABT,	"target abort" }, +	{ SH4_PCIAINT_MABT,	"master abort" }, +	{ SH4_PCIAINT_RDPE,	"read data parity error" }, +	{ SH4_PCIAINT_WDPE,	"write data parity error" }, +}, pci_interrupt_errors[] = { +	{ SH4_PCIINT_MLCK,	"master lock error" }, +	{ SH4_PCIINT_TABT,	"target-target abort" }, +	{ SH4_PCIINT_TRET,	"target retry time out" }, +	{ SH4_PCIINT_MFDE,	"master function disable erorr" }, +	{ SH4_PCIINT_PRTY,	"address parity error" }, +	{ SH4_PCIINT_SERR,	"SERR" }, +	{ SH4_PCIINT_TWDP,	"data parity error for target write" }, +	{ SH4_PCIINT_TRDP,	"PERR detected for target read" }, +	{ SH4_PCIINT_MTABT,	"target abort for master" }, +	{ SH4_PCIINT_MMABT,	"master abort for master" }, +	{ SH4_PCIINT_MWPD,	"master write data parity error" }, +	{ SH4_PCIINT_MRPD,	"master read data parity error" },  }; +static irqreturn_t sh7780_pci_err_irq(int irq, void *dev_id) +{ +	struct pci_channel *hose = dev_id; +	unsigned long addr; +	unsigned int status; +	unsigned int cmd; +	int i; + +	addr = __raw_readl(hose->reg_base + SH4_PCIALR); + +	/* +	 * Handle status errors. +	 */ +	status = __raw_readw(hose->reg_base + PCI_STATUS); +	if (status & (PCI_STATUS_PARITY | +		      PCI_STATUS_DETECTED_PARITY | +		      PCI_STATUS_SIG_TARGET_ABORT | +		      PCI_STATUS_REC_TARGET_ABORT | +		      PCI_STATUS_REC_MASTER_ABORT)) { +		cmd = pcibios_handle_status_errors(addr, status, hose); +		if (likely(cmd)) +			__raw_writew(cmd, hose->reg_base + PCI_STATUS); +	} + +	/* +	 * Handle arbiter errors. +	 */ +	status = __raw_readl(hose->reg_base + SH4_PCIAINT); +	for (i = cmd = 0; i < ARRAY_SIZE(pci_arbiter_errors); i++) { +		if (status & pci_arbiter_errors[i].mask) { +			printk(KERN_DEBUG "PCI: %s, addr=%08lx\n", +			       pci_arbiter_errors[i].str, addr); +			cmd |= pci_arbiter_errors[i].mask; +		} +	} +	__raw_writel(cmd, hose->reg_base + SH4_PCIAINT); + +	/* +	 * Handle the remaining PCI errors. +	 */ +	status = __raw_readl(hose->reg_base + SH4_PCIINT); +	for (i = cmd = 0; i < ARRAY_SIZE(pci_interrupt_errors); i++) { +		if (status & pci_interrupt_errors[i].mask) { +			printk(KERN_DEBUG "PCI: %s, addr=%08lx\n", +			       pci_interrupt_errors[i].str, addr); +			cmd |= pci_interrupt_errors[i].mask; +		} +	} +	__raw_writel(cmd, hose->reg_base + SH4_PCIINT); + +	return IRQ_HANDLED; +} + +static irqreturn_t sh7780_pci_serr_irq(int irq, void *dev_id) +{ +	struct pci_channel *hose = dev_id; + +	printk(KERN_DEBUG "PCI: system error received: "); +	pcibios_report_status(PCI_STATUS_SIG_SYSTEM_ERROR, 1); +	printk("\n"); + +	/* Deassert SERR */ +	__raw_writel(SH4_PCIINTM_SDIM, hose->reg_base + SH4_PCIINTM); + +	/* Back off the IRQ for awhile */ +	disable_irq_nosync(irq); +	hose->serr_timer.expires = jiffies + HZ; +	add_timer(&hose->serr_timer); + +	return IRQ_HANDLED; +} + +static int __init sh7780_pci_setup_irqs(struct pci_channel *hose) +{ +	int ret; + +	/* Clear out PCI arbiter IRQs */ +	__raw_writel(0, hose->reg_base + SH4_PCIAINT); + +	/* Clear all error conditions */ +	__raw_writew(PCI_STATUS_DETECTED_PARITY  | \ +		     PCI_STATUS_SIG_SYSTEM_ERROR | \ +		     PCI_STATUS_REC_MASTER_ABORT | \ +		     PCI_STATUS_REC_TARGET_ABORT | \ +		     PCI_STATUS_SIG_TARGET_ABORT | \ +		     PCI_STATUS_PARITY, hose->reg_base + PCI_STATUS); + +	ret = request_irq(hose->serr_irq, sh7780_pci_serr_irq, IRQF_DISABLED, +			  "PCI SERR interrupt", hose); +	if (unlikely(ret)) { +		printk(KERN_ERR "PCI: Failed hooking SERR IRQ\n"); +		return ret; +	} + +	/* +	 * The PCI ERR IRQ needs to be IRQF_SHARED since all of the power +	 * down IRQ vectors are routed through the ERR IRQ vector. We +	 * only request_irq() once as there is only a single masking +	 * source for multiple events. +	 */ +	ret = request_irq(hose->err_irq, sh7780_pci_err_irq, IRQF_SHARED, +			  "PCI ERR interrupt", hose); +	if (unlikely(ret)) { +		free_irq(hose->serr_irq, hose); +		return ret; +	} + +	/* Unmask all of the arbiter IRQs. */ +	__raw_writel(SH4_PCIAINT_MBKN | SH4_PCIAINT_TBTO | SH4_PCIAINT_MBTO | \ +		     SH4_PCIAINT_TABT | SH4_PCIAINT_MABT | SH4_PCIAINT_RDPE | \ +		     SH4_PCIAINT_WDPE, hose->reg_base + SH4_PCIAINTM); + +	/* Unmask all of the PCI IRQs */ +	__raw_writel(SH4_PCIINTM_TTADIM  | SH4_PCIINTM_TMTOIM  | \ +		     SH4_PCIINTM_MDEIM   | SH4_PCIINTM_APEDIM  | \ +		     SH4_PCIINTM_SDIM    | SH4_PCIINTM_DPEITWM | \ +		     SH4_PCIINTM_PEDITRM | SH4_PCIINTM_TADIMM  | \ +		     SH4_PCIINTM_MADIMM  | SH4_PCIINTM_MWPDIM  | \ +		     SH4_PCIINTM_MRDPEIM, hose->reg_base + SH4_PCIINTM); + +	return ret; +} + +static inline void __init sh7780_pci_teardown_irqs(struct pci_channel *hose) +{ +	free_irq(hose->err_irq, hose); +	free_irq(hose->serr_irq, hose); +} + +static void __init sh7780_pci66_init(struct pci_channel *hose) +{ +	unsigned int tmp; + +	if (!pci_is_66mhz_capable(hose, 0, 0)) +		return; + +	/* Enable register access */ +	tmp = __raw_readl(hose->reg_base + SH4_PCICR); +	tmp |= SH4_PCICR_PREFIX; +	__raw_writel(tmp, hose->reg_base + SH4_PCICR); + +	/* Enable 66MHz operation */ +	tmp = __raw_readw(hose->reg_base + PCI_STATUS); +	tmp |= PCI_STATUS_66MHZ; +	__raw_writew(tmp, hose->reg_base + PCI_STATUS); + +	/* Done */ +	tmp = __raw_readl(hose->reg_base + SH4_PCICR); +	tmp |= SH4_PCICR_PREFIX | SH4_PCICR_CFIN; +	__raw_writel(tmp, hose->reg_base + SH4_PCICR); +} +  static int __init sh7780_pci_init(void)  {  	struct pci_channel *chan = &sh7780_pci_controller; +	phys_addr_t memphys; +	size_t memsize;  	unsigned int id; -	const char *type = NULL; -	int ret; -	u32 word; +	const char *type; +	int ret, i;  	printk(KERN_NOTICE "PCI: Starting intialization.\n"); @@ -65,17 +253,28 @@ static int __init sh7780_pci_init(void)  	/* Enable CPU access to the PCIC registers. */  	__raw_writel(PCIECR_ENBL, PCIECR); -	id = __raw_readw(chan->reg_base + SH7780_PCIVID); -	if (id != SH7780_VENDOR_ID) { +	/* Reset */ +	__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_PRST, +		     chan->reg_base + SH4_PCICR); + +	/* +	 * Wait for it to come back up. The spec says to allow for up to +	 * 1 second after toggling the reset pin, but in practice 100ms +	 * is more than enough. +	 */ +	mdelay(100); + +	id = __raw_readw(chan->reg_base + PCI_VENDOR_ID); +	if (id != PCI_VENDOR_ID_RENESAS) {  		printk(KERN_ERR "PCI: Unknown vendor ID 0x%04x.\n", id);  		return -ENODEV;  	} -	id = __raw_readw(chan->reg_base + SH7780_PCIDID); -	type = (id == SH7763_DEVICE_ID)	? "SH7763" : -	       (id == SH7780_DEVICE_ID) ? "SH7780" : -	       (id == SH7781_DEVICE_ID) ? "SH7781" : -	       (id == SH7785_DEVICE_ID) ? "SH7785" : +	id = __raw_readw(chan->reg_base + PCI_DEVICE_ID); +	type = (id == PCI_DEVICE_ID_RENESAS_SH7763) ? "SH7763" : +	       (id == PCI_DEVICE_ID_RENESAS_SH7780) ? "SH7780" : +	       (id == PCI_DEVICE_ID_RENESAS_SH7781) ? "SH7781" : +	       (id == PCI_DEVICE_ID_RENESAS_SH7785) ? "SH7785" :  					  NULL;  	if (unlikely(!type)) {  		printk(KERN_ERR "PCI: Found an unsupported Renesas host " @@ -85,62 +284,119 @@ static int __init sh7780_pci_init(void)  	printk(KERN_NOTICE "PCI: Found a Renesas %s host "  	       "controller, revision %d.\n", type, -	       __raw_readb(chan->reg_base + SH7780_PCIRID)); +	       __raw_readb(chan->reg_base + PCI_REVISION_ID)); -	if ((ret = sh4_pci_check_direct(chan)) != 0) +	/* +	 * Now throw it in to register initialization mode and +	 * start the real work. +	 */ +	__raw_writel(SH4_PCICR_PREFIX, chan->reg_base + SH4_PCICR); + +	memphys = __pa(memory_start); +	memsize = roundup_pow_of_two(memory_end - memory_start); + +	/* +	 * If there's more than 512MB of memory, we need to roll over to +	 * LAR1/LSR1. +	 */ +	if (memsize > SZ_512M) { +		__raw_writel(memphys + SZ_512M, chan->reg_base + SH4_PCILAR1); +		__raw_writel((((memsize - SZ_512M) - SZ_1M) & 0x1ff00000) | 1, +			     chan->reg_base + SH4_PCILSR1); +		memsize = SZ_512M; +	} else { +		/* +		 * Otherwise just zero it out and disable it. +		 */ +		__raw_writel(0, chan->reg_base + SH4_PCILAR1); +		__raw_writel(0, chan->reg_base + SH4_PCILSR1); +	} + +	/* +	 * LAR0/LSR0 covers up to the first 512MB, which is enough to +	 * cover all of lowmem on most platforms. +	 */ +	__raw_writel(memphys, chan->reg_base + SH4_PCILAR0); +	__raw_writel(((memsize - SZ_1M) & 0x1ff00000) | 1, +		     chan->reg_base + SH4_PCILSR0); + +	/* +	 * Hook up the ERR and SERR IRQs. +	 */ +	ret = sh7780_pci_setup_irqs(chan); +	if (unlikely(ret))  		return ret;  	/* -	 * Set the class and sub-class codes. +	 * Disable the cache snoop controller for non-coherent DMA.  	 */ -	__raw_writeb(PCI_CLASS_BRIDGE_HOST >> 8, -		     chan->reg_base + SH7780_PCIBCC); -	__raw_writeb(PCI_CLASS_BRIDGE_HOST & 0xff, -		     chan->reg_base + SH7780_PCISUB); +	__raw_writel(0, chan->reg_base + SH7780_PCICSCR0); +	__raw_writel(0, chan->reg_base + SH7780_PCICSAR0); +	__raw_writel(0, chan->reg_base + SH7780_PCICSCR1); +	__raw_writel(0, chan->reg_base + SH7780_PCICSAR1);  	/* -	 * Set IO and Mem windows to local address -	 * Make PCI and local address the same for easy 1 to 1 mapping +	 * Setup the memory BARs  	 */ -	pci_write_reg(chan, sh7780_pci_map.window0.size - 0xfffff, SH4_PCILSR0); -	/* Set the values on window 0 PCI config registers */ -	pci_write_reg(chan, sh7780_pci_map.window0.base, SH4_PCILAR0); -	pci_write_reg(chan, sh7780_pci_map.window0.base, SH7780_PCIMBAR0); +	for (i = 1; i < chan->nr_resources; i++) { +		struct resource *res = chan->resources + i; +		resource_size_t size; -	pci_write_reg(chan, 0x0000380f, SH4_PCIAINTM); +		if (unlikely(res->flags & IORESOURCE_IO)) +			continue; -	/* Set up standard PCI config registers */ -	__raw_writew(0xFB00, chan->reg_base + SH7780_PCISTATUS); -	__raw_writew(0x0047, chan->reg_base + SH7780_PCICMD); -	__raw_writew(0x1912, chan->reg_base + SH7780_PCISVID); -	__raw_writew(0x0001, chan->reg_base + SH7780_PCISID); +		/* +		 * Make sure we're in the right physical addressing mode +		 * for dealing with the resource. +		 */ +		if ((res->flags & IORESOURCE_MEM_32BIT) && __in_29bit_mode()) { +			chan->nr_resources--; +			continue; +		} -	__raw_writeb(0x00, chan->reg_base + SH7780_PCIPIF); +		size = resource_size(res); + +		/* +		 * The MBMR mask is calculated in units of 256kB, which +		 * keeps things pretty simple. +		 */ +		__raw_writel(((roundup_pow_of_two(size) / SZ_256K) - 1) << 18, +			     chan->reg_base + SH7780_PCIMBMR(i - 1)); +		__raw_writel(res->start, chan->reg_base + SH7780_PCIMBR(i - 1)); +	} -	/* Apply any last-minute PCIC fixups */ -	pci_fixup_pcic(chan); +	/* +	 * And I/O. +	 */ +	__raw_writel(0, chan->reg_base + PCI_BASE_ADDRESS_0); +	__raw_writel(0, chan->reg_base + SH7780_PCIIOBR); +	__raw_writel(0, chan->reg_base + SH7780_PCIIOBMR); -	pci_write_reg(chan, 0xfd000000, SH7780_PCIMBR0); -	pci_write_reg(chan, 0x00fc0000, SH7780_PCIMBMR0); +	__raw_writew(PCI_COMMAND_SERR   | PCI_COMMAND_WAIT   | \ +		     PCI_COMMAND_PARITY | PCI_COMMAND_MASTER | \ +		     PCI_COMMAND_MEMORY, chan->reg_base + PCI_COMMAND); -#ifdef CONFIG_32BIT -	pci_write_reg(chan, 0xc0000000, SH7780_PCIMBR2); -	pci_write_reg(chan, 0x20000000 - SH7780_PCI_IO_SIZE, SH7780_PCIMBMR2); -#endif +	/* +	 * Initialization mode complete, release the control register and +	 * enable round robin mode to stop device overruns/starvation. +	 */ +	__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_FTO, +		     chan->reg_base + SH4_PCICR); -	/* Set IOBR for windows containing area specified in pci.h */ -	pci_write_reg(chan, chan->io_resource->start & ~(SH7780_PCI_IO_SIZE-1), -		      SH7780_PCIIOBR); -	pci_write_reg(chan, ((SH7780_PCI_IO_SIZE-1) & (7<<18)), -		      SH7780_PCIIOBMR); +	ret = register_pci_controller(chan); +	if (unlikely(ret)) +		goto err; -	/* SH7780 init done, set central function init complete */ -	/* use round robin mode to stop a device starving/overruning */ -	word = SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_FTO; -	pci_write_reg(chan, word, SH4_PCICR); +	sh7780_pci66_init(chan); -	register_pci_controller(chan); +	printk(KERN_NOTICE "PCI: Running at %dMHz.\n", +	       (__raw_readw(chan->reg_base + PCI_STATUS) & PCI_STATUS_66MHZ) ? +	       66 : 33);  	return 0; + +err: +	sh7780_pci_teardown_irqs(chan); +	return ret;  }  arch_initcall(sh7780_pci_init); diff --git a/arch/sh/drivers/pci/pci-sh7780.h b/arch/sh/drivers/pci/pci-sh7780.h index 4a52478c97c..205dcbefe27 100644 --- a/arch/sh/drivers/pci/pci-sh7780.h +++ b/arch/sh/drivers/pci/pci-sh7780.h @@ -12,12 +12,11 @@  #ifndef _PCI_SH7780_H_  #define _PCI_SH7780_H_ -/* Platform Specific Values */ -#define SH7780_VENDOR_ID	0x1912 -#define SH7781_DEVICE_ID	0x0001 -#define SH7780_DEVICE_ID	0x0002 -#define SH7763_DEVICE_ID	0x0004 -#define SH7785_DEVICE_ID	0x0007 +#define PCI_VENDOR_ID_RENESAS		0x1912 +#define PCI_DEVICE_ID_RENESAS_SH7781	0x0001 +#define PCI_DEVICE_ID_RENESAS_SH7780	0x0002 +#define PCI_DEVICE_ID_RENESAS_SH7763	0x0004 +#define PCI_DEVICE_ID_RENESAS_SH7785	0x0007  /* SH7780 Control Registers */  #define	PCIECR			0xFE000008 @@ -27,44 +26,9 @@  #define SH7780_PCI_CONFIG_BASE	0xFD000000	/* Config space base addr */  #define SH7780_PCI_CONFIG_SIZE	0x01000000	/* Config space size */ -#define SH7780_PCI_MEMORY_BASE	0xFD000000	/* Memory space base addr */ -#define SH7780_PCI_MEM_SIZE	0x01000000	/* Size of Memory window */ - -#define SH7780_PCI_IO_BASE	0xFE200000	/* IO space base address */ -#define SH7780_PCI_IO_SIZE	0x00400000	/* Size of IO window */ -  #define SH7780_PCIREG_BASE	0xFE040000	/* PCI regs base address */  /* SH7780 PCI Config Registers */ -#define SH7780_PCIVID		0x000		/* Vendor ID */ -#define SH7780_PCIDID		0x002		/* Device ID */ -#define SH7780_PCICMD		0x004		/* Command */ -#define SH7780_PCISTATUS	0x006		/* Status */ -#define SH7780_PCIRID		0x008		/* Revision ID */ -#define SH7780_PCIPIF		0x009		/* Program Interface */ -#define SH7780_PCISUB		0x00a		/* Sub class code */ -#define SH7780_PCIBCC		0x00b		/* Base class code */ -#define SH7780_PCICLS		0x00c		/* Cache line size */ -#define SH7780_PCILTM		0x00d		/* latency timer */ -#define SH7780_PCIHDR		0x00e		/* Header type */ -#define SH7780_PCIBIST		0x00f		/* BIST */ -#define SH7780_PCIIBAR		0x010		/* IO Base address */ -#define SH7780_PCIMBAR0		0x014		/* Memory base address0 */ -#define SH7780_PCIMBAR1		0x018		/* Memory base address1 */ -#define SH7780_PCISVID		0x02c		/* Sub system vendor ID */ -#define SH7780_PCISID		0x02e		/* Sub system ID */ -#define SH7780_PCICP		0x034 -#define SH7780_PCIINTLINE	0x03c		/* Interrupt line */ -#define SH7780_PCIINTPIN	0x03d		/* Interrupt pin */ -#define SH7780_PCIMINGNT	0x03e		/* Minumum grand */ -#define SH7780_PCIMAXLAT	0x03f		/* Maxmum latency */ -#define SH7780_PCICID		0x040 -#define SH7780_PCINIP		0x041 -#define SH7780_PCIPMC		0x042 -#define SH7780_PCIPMCSR		0x044 -#define SH7780_PCIPMCSR_BSE	0x046 -#define SH7780_PCICDD		0x047 -  #define SH7780_PCIIR		0x114		/* PCI Interrupt Register */  #define SH7780_PCIIMR		0x118		/* PCI Interrupt Mask Register */  #define SH7780_PCIAIR		0x11C		/* Error Address Register */ @@ -76,10 +40,8 @@  #define SH7780_PCIPINT		0x1CC		/* Power Mgmnt Int. Register */  #define SH7780_PCIPINTM		0x1D0		/* Power Mgmnt Mask Register */ -#define SH7780_PCIMBR0		0x1E0 -#define SH7780_PCIMBMR0		0x1E4 -#define SH7780_PCIMBR2		0x1F0 -#define SH7780_PCIMBMR2		0x1F4 +#define SH7780_PCIMBR(x)	(0x1E0 + ((x) * 8)) +#define SH7780_PCIMBMR(x)	(0x1E4 + ((x) * 8))  #define SH7780_PCIIOBR		0x1F8  #define SH7780_PCIIOBMR		0x1FC  #define SH7780_PCICSCR0		0x210		/* Cache Snoop1 Cnt. Register */ @@ -87,16 +49,4 @@  #define SH7780_PCICSAR0		0x218	/* Cache Snoop1 Addr. Register */  #define SH7780_PCICSAR1		0x21C	/* Cache Snoop2 Addr. Register */ -/* General Memory Config Addresses */ -#define SH7780_CS0_BASE_ADDR	0x0 -#define SH7780_MEM_REGION_SIZE	0x04000000 -#define SH7780_CS1_BASE_ADDR	(SH7780_CS0_BASE_ADDR + SH7780_MEM_REGION_SIZE) -#define SH7780_CS2_BASE_ADDR	(SH7780_CS1_BASE_ADDR + SH7780_MEM_REGION_SIZE) -#define SH7780_CS3_BASE_ADDR	(SH7780_CS2_BASE_ADDR + SH7780_MEM_REGION_SIZE) -#define SH7780_CS4_BASE_ADDR	(SH7780_CS3_BASE_ADDR + SH7780_MEM_REGION_SIZE) -#define SH7780_CS5_BASE_ADDR	(SH7780_CS4_BASE_ADDR + SH7780_MEM_REGION_SIZE) -#define SH7780_CS6_BASE_ADDR	(SH7780_CS5_BASE_ADDR + SH7780_MEM_REGION_SIZE) - -#define SH7780_32BIT_DDR_BASE_ADDR	0x40000000 -  #endif /* _PCI_SH7780_H_ */ diff --git a/arch/sh/drivers/pci/pci.c b/arch/sh/drivers/pci/pci.c index c481df63902..953af139e23 100644 --- a/arch/sh/drivers/pci/pci.c +++ b/arch/sh/drivers/pci/pci.c @@ -33,15 +33,22 @@ static int pci_initialized;  static void __devinit pcibios_scanbus(struct pci_channel *hose)  {  	static int next_busno; +	static int need_domain_info;  	struct pci_bus *bus;  	bus = pci_scan_bus(next_busno, hose->pci_ops, hose); +	hose->bus = bus; + +	need_domain_info = need_domain_info || hose->index; +	hose->need_domain_info = need_domain_info;  	if (bus) {  		next_busno = bus->subordinate + 1;  		/* Don't allow 8-bit bus number overflow inside the hose -  		   reserve some space for bridges. */ -		if (next_busno > 224) +		if (next_busno > 224) {  			next_busno = 0; +			need_domain_info = 1; +		}  		pci_bus_size_bridges(bus);  		pci_bus_assign_resources(bus); @@ -51,10 +58,21 @@ static void __devinit pcibios_scanbus(struct pci_channel *hose)  static DEFINE_MUTEX(pci_scan_mutex); -void __devinit register_pci_controller(struct pci_channel *hose) +int __devinit register_pci_controller(struct pci_channel *hose)  { -	request_resource(&iomem_resource, hose->mem_resource); -	request_resource(&ioport_resource, hose->io_resource); +	int i; + +	for (i = 0; i < hose->nr_resources; i++) { +		struct resource *res = hose->resources + i; + +		if (res->flags & IORESOURCE_IO) { +			if (request_resource(&ioport_resource, res) < 0) +				goto out; +		} else { +			if (request_resource(&iomem_resource, res) < 0) +				goto out; +		} +	}  	*hose_tail = hose;  	hose_tail = &hose->next; @@ -68,6 +86,11 @@ void __devinit register_pci_controller(struct pci_channel *hose)  	}  	/* +	 * Setup the ERR/PERR and SERR timers, if available. +	 */ +	pcibios_enable_timers(hose); + +	/*  	 * Scan the bus if it is register after the PCI subsystem  	 * initialization.  	 */ @@ -76,6 +99,15 @@ void __devinit register_pci_controller(struct pci_channel *hose)  		pcibios_scanbus(hose);  		mutex_unlock(&pci_scan_mutex);  	} + +	return 0; + +out: +	for (--i; i >= 0; i--) +		release_resource(&hose->resources[i]); + +	printk(KERN_WARNING "Skipping PCI bus scan due to resource conflict\n"); +	return -1;  }  static int __init pcibios_init(void) @@ -127,11 +159,13 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)  {  	struct pci_dev *dev = bus->self;  	struct list_head *ln; -	struct pci_channel *chan = bus->sysdata; +	struct pci_channel *hose = bus->sysdata;  	if (!dev) { -		bus->resource[0] = chan->io_resource; -		bus->resource[1] = chan->mem_resource; +		int i; + +		for (i = 0; i < hose->nr_resources; i++) +			bus->resource[i] = hose->resources + i;  	}  	for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) { @@ -148,34 +182,29 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)   * addresses to be allocated in the 0x000-0x0ff region   * modulo 0x400.   */ -void pcibios_align_resource(void *data, struct resource *res, -			    resource_size_t size, resource_size_t align) +resource_size_t pcibios_align_resource(void *data, const struct resource *res, +				resource_size_t size, resource_size_t align)  {  	struct pci_dev *dev = data; -	struct pci_channel *chan = dev->sysdata; +	struct pci_channel *hose = dev->sysdata;  	resource_size_t start = res->start;  	if (res->flags & IORESOURCE_IO) { -		if (start < PCIBIOS_MIN_IO + chan->io_resource->start) -			start = PCIBIOS_MIN_IO + chan->io_resource->start; +		if (start < PCIBIOS_MIN_IO + hose->resources[0].start) +			start = PCIBIOS_MIN_IO + hose->resources[0].start;  		/*                   * Put everything into 0x00-0xff region modulo 0x400.  		 */ -		if (start & 0x300) { +		if (start & 0x300)  			start = (start + 0x3ff) & ~0x3ff; -			res->start = start; -		} -	} else if (res->flags & IORESOURCE_MEM) { -		if (start < PCIBIOS_MIN_MEM + chan->mem_resource->start) -			start = PCIBIOS_MIN_MEM + chan->mem_resource->start;  	} -	res->start = start; +	return start;  }  void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, -			 struct resource *res) +			     struct resource *res)  {  	struct pci_channel *hose = dev->sysdata;  	unsigned long offset = 0; @@ -189,9 +218,8 @@ void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,  	region->end = res->end - offset;  } -void __devinit -pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, -			struct pci_bus_region *region) +void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, +			     struct pci_bus_region *region)  {  	struct pci_channel *hose = dev->sysdata;  	unsigned long offset = 0; @@ -274,6 +302,86 @@ char * __devinit pcibios_setup(char *str)  	return str;  } +static void __init +pcibios_bus_report_status_early(struct pci_channel *hose, +				int top_bus, int current_bus, +				unsigned int status_mask, int warn) +{ +	unsigned int pci_devfn; +	u16 status; +	int ret; + +	for (pci_devfn = 0; pci_devfn < 0xff; pci_devfn++) { +		if (PCI_FUNC(pci_devfn)) +			continue; +		ret = early_read_config_word(hose, top_bus, current_bus, +					     pci_devfn, PCI_STATUS, &status); +		if (ret != PCIBIOS_SUCCESSFUL) +			continue; +		if (status == 0xffff) +			continue; + +		early_write_config_word(hose, top_bus, current_bus, +					pci_devfn, PCI_STATUS, +					status & status_mask); +		if (warn) +			printk("(%02x:%02x: %04X) ", current_bus, +			       pci_devfn, status); +	} +} + +/* + * We can't use pci_find_device() here since we are + * called from interrupt context. + */ +static void __init_refok +pcibios_bus_report_status(struct pci_bus *bus, unsigned int status_mask, +			  int warn) +{ +	struct pci_dev *dev; + +	list_for_each_entry(dev, &bus->devices, bus_list) { +		u16 status; + +		/* +		 * ignore host bridge - we handle +		 * that separately +		 */ +		if (dev->bus->number == 0 && dev->devfn == 0) +			continue; + +		pci_read_config_word(dev, PCI_STATUS, &status); +		if (status == 0xffff) +			continue; + +		if ((status & status_mask) == 0) +			continue; + +		/* clear the status errors */ +		pci_write_config_word(dev, PCI_STATUS, status & status_mask); + +		if (warn) +			printk("(%s: %04X) ", pci_name(dev), status); +	} + +	list_for_each_entry(dev, &bus->devices, bus_list) +		if (dev->subordinate) +			pcibios_bus_report_status(dev->subordinate, status_mask, warn); +} + +void __init_refok pcibios_report_status(unsigned int status_mask, int warn) +{ +	struct pci_channel *hose; + +	for (hose = hose_head; hose; hose = hose->next) { +		if (unlikely(!hose->bus)) +			pcibios_bus_report_status_early(hose, hose_head->index, +					hose->index, status_mask, warn); +		else +			pcibios_bus_report_status(hose->bus, status_mask, warn); +	} +} +  int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,  			enum pci_mmap_state mmap_state, int write_combine)  { @@ -302,9 +410,15 @@ static void __iomem *ioport_map_pci(struct pci_dev *dev,  {  	struct pci_channel *chan = dev->sysdata; -	if (!chan->io_map_base) +	if (unlikely(!chan->io_map_base)) {  		chan->io_map_base = generic_io_base; +		if (pci_domains_supported) +			panic("To avoid data corruption io_map_base MUST be " +			      "set with multiple PCI domains."); +	} + +  	return (void __iomem *)(chan->io_map_base + port);  } @@ -321,20 +435,9 @@ void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)  	if (flags & IORESOURCE_IO)  		return ioport_map_pci(dev, start, len); - -	/* -	 * Presently the IORESOURCE_MEM case is a bit special, most -	 * SH7751 style PCI controllers have PCI memory at a fixed -	 * location in the address space where no remapping is desired. -	 * With the IORESOURCE_MEM case more care has to be taken -	 * to inhibit page table mapping for legacy cores, but this is -	 * punted off to __ioremap(). -	 *					-- PFM. -	 */  	if (flags & IORESOURCE_MEM) {  		if (flags & IORESOURCE_CACHEABLE)  			return ioremap(start, len); -  		return ioremap_nocache(start, len);  	} diff --git a/arch/sh/drivers/pci/pcie-sh7786.c b/arch/sh/drivers/pci/pcie-sh7786.c index ac37ee879ba..68cb9b0ac9d 100644 --- a/arch/sh/drivers/pci/pcie-sh7786.c +++ b/arch/sh/drivers/pci/pcie-sh7786.c @@ -1,7 +1,7 @@  /*   * Low-Level PCI Express Support for the SH7786   * - *  Copyright (C) 2009  Paul Mundt + *  Copyright (C) 2009 - 2010  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -12,6 +12,7 @@  #include <linux/kernel.h>  #include <linux/io.h>  #include <linux/delay.h> +#include <linux/slab.h>  #include "pcie-sh7786.h"  #include <asm/sizes.h> @@ -30,60 +31,84 @@ static struct sh7786_pcie_hwops {  	int (*port_init_hw)(struct sh7786_pcie_port *port);  } *sh7786_pcie_hwops; -static struct resource sh7786_pci_32bit_mem_resources[] = { +static struct resource sh7786_pci0_resources[] = {  	{ -		.name	= "pci0_mem", -		.start	= SH4A_PCIMEM_BASEA, -		.end	= SH4A_PCIMEM_BASEA + SZ_64M - 1, -		.flags	= IORESOURCE_MEM, +		.name	= "PCIe0 IO", +		.start	= 0xfd000000, +		.end	= 0xfd000000 + SZ_8M - 1, +		.flags	= IORESOURCE_IO,  	}, { -		.name	= "pci1_mem", -		.start	= SH4A_PCIMEM_BASEA1, -		.end	= SH4A_PCIMEM_BASEA1 + SZ_64M - 1, -		.flags	= IORESOURCE_MEM, +		.name	= "PCIe0 MEM 0", +		.start	= 0xc0000000, +		.end	= 0xc0000000 + SZ_512M - 1, +		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_32BIT,  	}, { -		.name	= "pci2_mem", -		.start	= SH4A_PCIMEM_BASEA2, -		.end	= SH4A_PCIMEM_BASEA2 + SZ_64M - 1, +		.name	= "PCIe0 MEM 1", +		.start	= 0x10000000, +		.end	= 0x10000000 + SZ_64M - 1,  		.flags	= IORESOURCE_MEM, +	}, { +		.name	= "PCIe0 MEM 2", +		.start	= 0xfe100000, +		.end	= 0xfe100000 + SZ_1M - 1,  	},  }; -static struct resource sh7786_pci_29bit_mem_resource = { -	.start	= SH4A_PCIMEM_BASE, -	.end	= SH4A_PCIMEM_BASE + SZ_64M - 1, -	.flags	= IORESOURCE_MEM, +static struct resource sh7786_pci1_resources[] = { +	{ +		.name	= "PCIe1 IO", +		.start	= 0xfd800000, +		.end	= 0xfd800000 + SZ_8M - 1, +		.flags	= IORESOURCE_IO, +	}, { +		.name	= "PCIe1 MEM 0", +		.start	= 0xa0000000, +		.end	= 0xa0000000 + SZ_512M - 1, +		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_32BIT, +	}, { +		.name	= "PCIe1 MEM 1", +		.start	= 0x30000000, +		.end	= 0x30000000 + SZ_256M - 1, +		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_32BIT, +	}, { +		.name	= "PCIe1 MEM 2", +		.start	= 0xfe300000, +		.end	= 0xfe300000 + SZ_1M - 1, +	},  }; -static struct resource sh7786_pci_io_resources[] = { +static struct resource sh7786_pci2_resources[] = {  	{ -		.name	= "pci0_io", -		.start	= SH4A_PCIIO_BASE, -		.end	= SH4A_PCIIO_BASE + SZ_8M - 1, -		.flags	= IORESOURCE_IO, +		.name	= "PCIe2 IO", +		.start	= 0xfc800000, +		.end	= 0xfc800000 + SZ_4M - 1,  	}, { -		.name	= "pci1_io", -		.start	= SH4A_PCIIO_BASE1, -		.end	= SH4A_PCIIO_BASE1 + SZ_8M - 1, -		.flags	= IORESOURCE_IO, +		.name	= "PCIe2 MEM 0", +		.start	= 0x80000000, +		.end	= 0x80000000 + SZ_512M - 1, +		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_32BIT,  	}, { -		.name	= "pci2_io", -		.start	= SH4A_PCIIO_BASE2, -		.end	= SH4A_PCIIO_BASE2 + SZ_4M - 1, -		.flags	= IORESOURCE_IO, +		.name	= "PCIe2 MEM 1", +		.start	= 0x20000000, +		.end	= 0x20000000 + SZ_256M - 1, +		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_32BIT, +	}, { +		.name	= "PCIe2 MEM 2", +		.start	= 0xfcd00000, +		.end	= 0xfcd00000 + SZ_1M - 1,  	},  };  extern struct pci_ops sh7786_pci_ops; -#define DEFINE_CONTROLLER(start, idx)				\ -{								\ -	.pci_ops	= &sh7786_pci_ops,			\ -	.reg_base	= start,				\ -	/* mem_resource filled in at probe time */		\ -	.mem_offset	= 0,					\ -	.io_resource	= &sh7786_pci_io_resources[idx],	\ -	.io_offset	= 0,					\ +#define DEFINE_CONTROLLER(start, idx)					\ +{									\ +	.pci_ops	= &sh7786_pci_ops,				\ +	.resources	= sh7786_pci##idx##_resources,			\ +	.nr_resources	= ARRAY_SIZE(sh7786_pci##idx##_resources),	\ +	.reg_base	= start,					\ +	.mem_offset	= 0,						\ +	.io_offset	= 0,						\  }  static struct pci_channel sh7786_pci_channels[] = { @@ -180,7 +205,9 @@ static int pcie_init(struct sh7786_pcie_port *port)  {  	struct pci_channel *chan = port->hose;  	unsigned int data; -	int ret; +	phys_addr_t memphys; +	size_t memsize; +	int ret, i;  	/* Begin initialization */  	pci_write_reg(chan, 0, SH4A_PCIETCTLR); @@ -203,15 +230,24 @@ static int pcie_init(struct sh7786_pcie_port *port)  	data |= PCI_CAP_ID_EXP;  	pci_write_reg(chan, data, SH4A_PCIEEXPCAP0); -	/* Enable x4 link width and extended sync. */ +	/* Enable data link layer active state reporting */ +	pci_write_reg(chan, PCI_EXP_LNKCAP_DLLLARC, SH4A_PCIEEXPCAP3); + +	/* Enable extended sync and ASPM L0s support */  	data = pci_read_reg(chan, SH4A_PCIEEXPCAP4); -	data &= ~(PCI_EXP_LNKSTA_NLW << 16); -	data |= (1 << 22) | PCI_EXP_LNKCTL_ES; +	data &= ~PCI_EXP_LNKCTL_ASPMC; +	data |= PCI_EXP_LNKCTL_ES | 1;  	pci_write_reg(chan, data, SH4A_PCIEEXPCAP4); +	/* Write out the physical slot number */ +	data = pci_read_reg(chan, SH4A_PCIEEXPCAP5); +	data &= ~PCI_EXP_SLTCAP_PSN; +	data |= (port->index + 1) << 19; +	pci_write_reg(chan, data, SH4A_PCIEEXPCAP5); +  	/* Set the completion timer timeout to the maximum 32ms. */  	data = pci_read_reg(chan, SH4A_PCIETLCTLR); -	data &= ~0xffff; +	data &= ~0x3f00;  	data |= 0x32 << 8;  	pci_write_reg(chan, data, SH4A_PCIETLCTLR); @@ -224,6 +260,33 @@ static int pcie_init(struct sh7786_pcie_port *port)  	data |= (0xff << 16);  	pci_write_reg(chan, data, SH4A_PCIEMACCTLR); +	memphys = __pa(memory_start); +	memsize = roundup_pow_of_two(memory_end - memory_start); + +	/* +	 * If there's more than 512MB of memory, we need to roll over to +	 * LAR1/LAMR1. +	 */ +	if (memsize > SZ_512M) { +		__raw_writel(memphys + SZ_512M, chan->reg_base + SH4A_PCIELAR1); +		__raw_writel(((memsize - SZ_512M) - SZ_256) | 1, +			     chan->reg_base + SH4A_PCIELAMR1); +		memsize = SZ_512M; +	} else { +		/* +		 * Otherwise just zero it out and disable it. +		 */ +		__raw_writel(0, chan->reg_base + SH4A_PCIELAR1); +		__raw_writel(0, chan->reg_base + SH4A_PCIELAMR1); +	} + +	/* +	 * LAR0/LAMR0 covers up to the first 512MB, which is enough to +	 * cover all of lowmem on most platforms. +	 */ +	__raw_writel(memphys, chan->reg_base + SH4A_PCIELAR0); +	__raw_writel((memsize - SZ_256) | 1, chan->reg_base + SH4A_PCIELAMR0); +  	/* Finish initialization */  	data = pci_read_reg(chan, SH4A_PCIETCTLR);  	data |= 0x1; @@ -243,10 +306,14 @@ static int pcie_init(struct sh7786_pcie_port *port)  	if (unlikely(ret != 0))  		return -ENODEV; -	pci_write_reg(chan, 0x00100007, SH4A_PCIEPCICONF1); +	data = pci_read_reg(chan, SH4A_PCIEPCICONF1); +	data &= ~(PCI_STATUS_DEVSEL_MASK << 16); +	data |= PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | +		(PCI_STATUS_CAP_LIST | PCI_STATUS_DEVSEL_FAST) << 16; +	pci_write_reg(chan, data, SH4A_PCIEPCICONF1); +  	pci_write_reg(chan, 0x80888000, SH4A_PCIETXVC0DCTLR);  	pci_write_reg(chan, 0x00222000, SH4A_PCIERXVC0DCTLR); -	pci_write_reg(chan, 0x000050A0, SH4A_PCIEEXPCAP2);  	wmb(); @@ -254,15 +321,32 @@ static int pcie_init(struct sh7786_pcie_port *port)  	printk(KERN_NOTICE "PCI: PCIe#%d link width %d\n",  	       port->index, (data >> 20) & 0x3f); -	pci_write_reg(chan, 0x007c0000, SH4A_PCIEPAMR0); -	pci_write_reg(chan, 0x00000000, SH4A_PCIEPARH0); -	pci_write_reg(chan, 0x00000000, SH4A_PCIEPARL0); -	pci_write_reg(chan, 0x80000100, SH4A_PCIEPTCTLR0); -	pci_write_reg(chan, 0x03fc0000, SH4A_PCIEPAMR2); -	pci_write_reg(chan, 0x00000000, SH4A_PCIEPARH2); -	pci_write_reg(chan, 0x00000000, SH4A_PCIEPARL2); -	pci_write_reg(chan, 0x80000000, SH4A_PCIEPTCTLR2); +	for (i = 0; i < chan->nr_resources; i++) { +		struct resource *res = chan->resources + i; +		resource_size_t size; +		u32 enable_mask; + +		pci_write_reg(chan, 0x00000000, SH4A_PCIEPTCTLR(i)); + +		size = resource_size(res); + +		/* +		 * The PAMR mask is calculated in units of 256kB, which +		 * keeps things pretty simple. +		 */ +		__raw_writel(((roundup_pow_of_two(size) / SZ_256K) - 1) << 18, +			     chan->reg_base + SH4A_PCIEPAMR(i)); + +		pci_write_reg(chan, 0x00000000, SH4A_PCIEPARH(i)); +		pci_write_reg(chan, 0x00000000, SH4A_PCIEPARL(i)); + +		enable_mask = MASK_PARE; +		if (res->flags & IORESOURCE_IO) +			enable_mask |= MASK_SPC; + +		pci_write_reg(chan, enable_mask, SH4A_PCIEPTCTLR(i)); +	}  	return 0;  } @@ -296,9 +380,7 @@ static int __devinit sh7786_pcie_init_hw(struct sh7786_pcie_port *port)  	if (unlikely(ret < 0))  		return ret; -	register_pci_controller(port->hose); - -	return 0; +	return register_pci_controller(port->hose);  }  static struct sh7786_pcie_hwops sh7786_65nm_pcie_hwops __initdata = { @@ -332,17 +414,7 @@ static int __init sh7786_pcie_init(void)  		port->index		= i;  		port->hose		= sh7786_pci_channels + i; -		port->hose->io_map_base	= port->hose->io_resource->start; - -		/* -		 * Check if we are booting in 29 or 32-bit mode -		 * -		 * 32-bit mode provides each controller with its own -		 * memory window, while 29-bit mode uses a shared one. -		 */ -		port->hose->mem_resource = test_mode_pin(MODE_PIN10) ? -			&sh7786_pci_32bit_mem_resources[i] : -			&sh7786_pci_29bit_mem_resource; +		port->hose->io_map_base	= port->hose->resources[0].start;  		ret |= sh7786_pcie_hwops->port_init_hw(port);  	} diff --git a/arch/sh/drivers/pci/pcie-sh7786.h b/arch/sh/drivers/pci/pcie-sh7786.h index c655290a775..90a6992576b 100644 --- a/arch/sh/drivers/pci/pcie-sh7786.h +++ b/arch/sh/drivers/pci/pcie-sh7786.h @@ -30,47 +30,9 @@   * for other(Max Payload Size=4096B,PCIIO_SIZE=8M)   */ -/* PCI0-0: PCI I/O space */ -#define SH4A_PCIIO_BASE		0xFD000000	/* PCI I/O for controller 0 */ -#define SH4A_PCIIO_BASE1	0xFD800000	/* PCI I/O for controller 1 (Rev1.14)*/ -#define SH4A_PCIIO_BASE2	0xFC800000	/* PCI I/O for controller 2 (Rev1.171)*/ - -#define SH4A_PCIIO_SIZE64	0x00010000	/* PLX allows only 64K */ -#define SH4A_PCIIO_SIZE		0x00800000	/* 8M */ -#define SH4A_PCIIO_SIZE2	0x00400000	/* 4M (Rev1.171)*/ - -/* PCI0-1: PCI memory space 29-bit address */ -#define SH4A_PCIMEM_BASE	0x10000000 -#define SH4A_PCIMEM_SIZE	0x04000000	/* 64M */ - -/* PCI0-2: PCI memory space 32-bit address */ -#define SH4A_PCIMEM_BASEA	0xC0000000	/*  for controller 0 */ -#define SH4A_PCIMEM_BASEA1	0xA0000000	/*  for controller 1 (Rev1.14)*/ -#define SH4A_PCIMEM_BASEA2	0x80000000	/*  for controller 2 (Rev1.171)*/ -#define SH4A_PCIMEM_SIZEA	0x20000000	/* 512M */ -  /* PCI0: PCI memory target transfer 32-bit address translation value(Rev1.11T)*/  #define SH4A_PCIBMSTR_TRANSLATION	0x20000000 -#define SH4A_PCI_DEVICE_ID		0x0002 -#define SH4A_PCI_VENDOR_ID		0x1912 - -// PCI compatible 000-03f -#define PCI_CMD		0x004 -#define PCI_RID		0x008 -#define PCI_IBAR	0x010 -#define PCI_MBAR0	0x014 -#define PCI_MBAR1	0x018 - -/* PCI power management/MSI/capablity 040-0ff */ -/* PCIE extended 100-fff */ - -/* SH7786 device identification */	// Rev1.171 -#define SH4A_PVR		(0xFF000030) -#define SH4A_PVR_SHX3		(0x10400000) -#define SH4A_PRR		(0xFF000044) -#define SH4A_PRR_SH7786		(0x00000400)	// Rev1.171 -  /*	SPVCR0		*/  #define	SH4A_PCIEVCR0		(0x000000)	/* R - 0x0000 0000 32 */  #define		BITS_TOP_MB	(24) @@ -350,23 +312,23 @@  #define	SH4A_PCIECSAR5		(0x0202B4)	/* R/W R/W 0x0000 0000 32 */  #define	SH4A_PCIESTCTLR5	(0x0202B8)	/* R/W R/W 0x0000 0000 32 */ -/*	PCIEPARL0	*/ -#define	SH4A_PCIEPARL0		(0x020400)	/* R/W R/W 0x0000 0000 32 */ +/*	PCIEPARL	*/ +#define	SH4A_PCIEPARL(x)	(0x020400 + ((x) * 0x20)) /* R/W R/W 0x0000 0000 32 */  #define		BITS_PAL	(18)  #define		MASK_PAL	(0x3fff<<BITS_PAL) -/*	PCIEPARH0	*/ -#define	SH4A_PCIEPARH0		(0x020404)	/* R/W R/W 0x0000 0000 32 */ +/*	PCIEPARH	*/ +#define	SH4A_PCIEPARH(x)	(0x020404 + ((x) * 0x20)) /* R/W R/W 0x0000 0000 32 */  #define		BITS_PAH	(0)  #define		MASK_PAH	(0xffffffff<<BITS_PAH) -/*	PCIEPAMR0	 */ -#define	SH4A_PCIEPAMR0		(0x020408)	/* R/W R/W 0x0000 0000 32 */ +/*	PCIEPAMR	 */ +#define	SH4A_PCIEPAMR(x)	(0x020408 + ((x) * 0x20)) /* R/W R/W 0x0000 0000 32 */  #define		BITS_PAM	(18)  #define		MASK_PAM	(0x3fff<<BITS_PAM) -/*	PCIEPTCTLR0	*/ -#define	SH4A_PCIEPTCTLR0	(0x02040C)	/* R/W R/W 0x0000 0000 32 */ +/*	PCIEPTCTLR	*/ +#define SH4A_PCIEPTCTLR(x)	(0x02040C + ((x) * 0x20))  #define		BITS_PARE	(31)  #define		MASK_PARE	(0x1<<BITS_PARE)  #define		BITS_TC		(20) @@ -378,26 +340,6 @@  #define		BITS_SPC	(8)  #define		MASK_SPC	(0x1<<BITS_SPC) -#define	SH4A_PCIEPARL1		(0x020420)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPARH1		(0x020424)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPAMR1		(0x020428)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPTCTLR1	(0x02042C)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPARL2		(0x020440)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPARH2		(0x020444)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPAMR2		(0x020448)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPTCTLR2	(0x02044C)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPARL3		(0x020460)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPARH3		(0x020464)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPAMR3		(0x020468)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPTCTLR3	(0x02046C)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPARL4		(0x020480)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPARH4		(0x020484)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPAMR4		(0x020488)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPTCTLR4	(0x02048C)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPARL5		(0x0204A0)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPARH5		(0x0204A4)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPAMR5		(0x0204A8)	/* R/W R/W 0x0000 0000 32 */ -#define	SH4A_PCIEPTCTLR5	(0x0204AC)	/* R/W R/W 0x0000 0000 32 */  #define	SH4A_PCIEDMAOR		(0x021000)	/* R/W R/W 0x0000 0000 32 */  #define	SH4A_PCIEDMSAR0		(0x021100)	/* R/W R/W 0x0000 0000 32 */  #define	SH4A_PCIEDMSAHR0	(0x021104)	/* R/W R/W 0x0000 0000 32 */ diff --git a/arch/sh/drivers/push-switch.c b/arch/sh/drivers/push-switch.c index 725be6de589..7b42c247316 100644 --- a/arch/sh/drivers/push-switch.c +++ b/arch/sh/drivers/push-switch.c @@ -8,6 +8,7 @@   * for more details.   */  #include <linux/init.h> +#include <linux/slab.h>  #include <linux/module.h>  #include <linux/interrupt.h>  #include <linux/platform_device.h> diff --git a/arch/sh/drivers/superhyway/ops-sh4-202.c b/arch/sh/drivers/superhyway/ops-sh4-202.c index 3b14bf860db..6da62e9475c 100644 --- a/arch/sh/drivers/superhyway/ops-sh4-202.c +++ b/arch/sh/drivers/superhyway/ops-sh4-202.c @@ -134,8 +134,8 @@ static int sh4202_read_vcr(unsigned long base, struct superhyway_vcr_info *vcr)  	 *  	 * Do not trust the documentation, for it is evil.  	 */ -	vcrh = ctrl_inl(base); -	vcrl = ctrl_inl(base + sizeof(u32)); +	vcrh = __raw_readl(base); +	vcrl = __raw_readl(base + sizeof(u32));  	tmp = ((u64)vcrh << 32) | vcrl;  	memcpy(vcr, &tmp, sizeof(u64)); @@ -147,8 +147,8 @@ static int sh4202_write_vcr(unsigned long base, struct superhyway_vcr_info vcr)  {  	u64 tmp = *(u64 *)&vcr; -	ctrl_outl((tmp >> 32) & 0xffffffff, base); -	ctrl_outl(tmp & 0xffffffff, base + sizeof(u32)); +	__raw_writel((tmp >> 32) & 0xffffffff, base); +	__raw_writel(tmp & 0xffffffff, base + sizeof(u32));  	return 0;  } diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index e121c30f797..46cb93477bc 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -1,6 +1,8 @@  include include/asm-generic/Kbuild.asm -header-y += cachectl.h cpu-features.h +header-y += cachectl.h +header-y += cpu-features.h +header-y += hw_breakpoint.h  unifdef-y += unistd_32.h  unifdef-y += unistd_64.h diff --git a/arch/sh/include/asm/addrspace.h b/arch/sh/include/asm/addrspace.h index 99d6b3ecbe2..446b3831c21 100644 --- a/arch/sh/include/asm/addrspace.h +++ b/arch/sh/include/asm/addrspace.h @@ -28,7 +28,7 @@  /* Returns the privileged segment base of a given address  */  #define PXSEG(a)	(((unsigned long)(a)) & 0xe0000000) -#if defined(CONFIG_29BIT) || defined(CONFIG_PMB_FIXED) +#ifdef CONFIG_29BIT  /*   * Map an address to a certain privileged segment   */ @@ -40,7 +40,15 @@  	((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P3SEG))  #define P4SEGADDR(a)	\  	((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P4SEG)) -#endif /* 29BIT || PMB_FIXED */ +#else +/* + * These will never work in 32-bit, don't even bother. + */ +#define P1SEGADDR(a)	__futile_remapping_attempt +#define P2SEGADDR(a)	__futile_remapping_attempt +#define P3SEGADDR(a)	__futile_remapping_attempt +#define P4SEGADDR(a)	__futile_remapping_attempt +#endif  #endif /* P1SEG */  /* Check if an address can be reached in 29 bits */ @@ -57,11 +65,5 @@  #define P3_ADDR_MAX		P4SEG  #endif -#ifndef __ASSEMBLY__ -#ifdef CONFIG_PMB -extern int __in_29bit_mode(void); -#endif /* CONFIG_PMB */ -#endif /* __ASSEMBLY__ */ -  #endif /* __KERNEL__ */  #endif /* __ASM_SH_ADDRSPACE_H */ diff --git a/arch/sh/include/asm/alignment.h b/arch/sh/include/asm/alignment.h new file mode 100644 index 00000000000..b12efecf529 --- /dev/null +++ b/arch/sh/include/asm/alignment.h @@ -0,0 +1,21 @@ +#ifndef __ASM_SH_ALIGNMENT_H +#define __ASM_SH_ALIGNMENT_H + +#include <linux/types.h> + +extern void inc_unaligned_byte_access(void); +extern void inc_unaligned_word_access(void); +extern void inc_unaligned_dword_access(void); +extern void inc_unaligned_multi_access(void); +extern void inc_unaligned_user_access(void); +extern void inc_unaligned_kernel_access(void); + +#define UM_WARN		(1 << 0) +#define UM_FIXUP	(1 << 1) +#define UM_SIGNAL	(1 << 2) + +extern unsigned int unaligned_user_action(void); + +extern void unaligned_fixups_notify(struct task_struct *, insn_size_t, struct pt_regs *); + +#endif /* __ASM_SH_ALIGNMENT_H */ diff --git a/arch/sh/include/asm/atomic-grb.h b/arch/sh/include/asm/atomic-grb.h index 4c5b7dbfced..a273c88578f 100644 --- a/arch/sh/include/asm/atomic-grb.h +++ b/arch/sh/include/asm/atomic-grb.h @@ -120,50 +120,4 @@ static inline void atomic_set_mask(unsigned int mask, atomic_t *v)  		: "memory" , "r0", "r1");  } -static inline int atomic_cmpxchg(atomic_t *v, int old, int new) -{ -	int ret; - -	__asm__ __volatile__ ( -		"   .align 2		\n\t" -		"   mova     1f,  r0	\n\t" -		"   nop			\n\t" -		"   mov     r15,  r1	\n\t" -		"   mov    #-8,  r15	\n\t" -		"   mov.l   @%1,  %0	\n\t" -		"   cmp/eq   %2,  %0	\n\t" -		"   bf	     1f		\n\t" -		"   mov.l    %3, @%1	\n\t" -		"1: mov      r1,  r15	\n\t" -		: "=&r" (ret) -		: "r" (v), "r" (old), "r" (new) -		: "memory" , "r0", "r1" , "t"); - -	return ret; -} - -static inline int atomic_add_unless(atomic_t *v, int a, int u) -{ -	int ret; -	unsigned long tmp; - -	__asm__ __volatile__ ( -		"   .align 2		\n\t" -		"   mova    1f,   r0	\n\t" -		"   nop			\n\t" -		"   mov    r15,   r1	\n\t" -		"   mov    #-12,  r15	\n\t" -		"   mov.l  @%2,   %1	\n\t" -		"   mov	    %1,   %0    \n\t" -		"   cmp/eq  %4,   %0	\n\t" -		"   bt/s    1f		\n\t" -		"    add    %3,   %1	\n\t" -		"   mov.l   %1,  @%2	\n\t" -		"1: mov     r1,   r15	\n\t" -		: "=&r" (ret), "=&r" (tmp) -		: "r" (v), "r" (a), "r" (u) -		: "memory" , "r0", "r1" , "t"); - -	return ret != u; -}  #endif /* __ASM_SH_ATOMIC_GRB_H */ diff --git a/arch/sh/include/asm/atomic-llsc.h b/arch/sh/include/asm/atomic-llsc.h index b040e1e0861..4b00b78e3f4 100644 --- a/arch/sh/include/asm/atomic-llsc.h +++ b/arch/sh/include/asm/atomic-llsc.h @@ -104,31 +104,4 @@ static inline void atomic_set_mask(unsigned int mask, atomic_t *v)  	: "t");  } -#define atomic_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n))) - -/** - * atomic_add_unless - add unless the number is a given value - * @v: pointer of type atomic_t - * @a: the amount to add to v... - * @u: ...unless v is equal to u. - * - * Atomically adds @a to @v, so long as it was not @u. - * Returns non-zero if @v was not @u, and zero otherwise. - */ -static inline int atomic_add_unless(atomic_t *v, int a, int u) -{ -	int c, old; -	c = atomic_read(v); -	for (;;) { -		if (unlikely(c == (u))) -			break; -		old = atomic_cmpxchg((v), c, c + (a)); -		if (likely(old == c)) -			break; -		c = old; -	} - -	return c != (u); -} -  #endif /* __ASM_SH_ATOMIC_LLSC_H */ diff --git a/arch/sh/include/asm/atomic.h b/arch/sh/include/asm/atomic.h index b16388d7195..c7983124d99 100644 --- a/arch/sh/include/asm/atomic.h +++ b/arch/sh/include/asm/atomic.h @@ -13,7 +13,7 @@  #define ATOMIC_INIT(i)	( (atomic_t) { (i) } ) -#define atomic_read(v)		((v)->counter) +#define atomic_read(v)		(*(volatile int *)&(v)->counter)  #define atomic_set(v,i)		((v)->counter = (i))  #if defined(CONFIG_GUSA_RB) @@ -25,58 +25,43 @@  #endif  #define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0) +#define atomic_dec_return(v)		atomic_sub_return(1, (v)) +#define atomic_inc_return(v)		atomic_add_return(1, (v)) +#define atomic_inc_and_test(v)		(atomic_inc_return(v) == 0) +#define atomic_sub_and_test(i,v)	(atomic_sub_return((i), (v)) == 0) +#define atomic_dec_and_test(v)		(atomic_sub_return(1, (v)) == 0) +#define atomic_inc_not_zero(v)		atomic_add_unless((v), 1, 0) -#define atomic_dec_return(v) atomic_sub_return(1,(v)) -#define atomic_inc_return(v) atomic_add_return(1,(v)) +#define atomic_inc(v)			atomic_add(1, (v)) +#define atomic_dec(v)			atomic_sub(1, (v)) -/* - * atomic_inc_and_test - increment and test +#define atomic_xchg(v, new)		(xchg(&((v)->counter), new)) +#define atomic_cmpxchg(v, o, n)		(cmpxchg(&((v)->counter), (o), (n))) + +/** + * atomic_add_unless - add unless the number is a given value   * @v: pointer of type atomic_t + * @a: the amount to add to v... + * @u: ...unless v is equal to u.   * - * Atomically increments @v by 1 - * and returns true if the result is zero, or false for all - * other cases. + * Atomically adds @a to @v, so long as it was not @u. + * Returns non-zero if @v was not @u, and zero otherwise.   */ -#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0) - -#define atomic_sub_and_test(i,v) (atomic_sub_return((i), (v)) == 0) -#define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0) - -#define atomic_inc(v) atomic_add(1,(v)) -#define atomic_dec(v) atomic_sub(1,(v)) - -#if !defined(CONFIG_GUSA_RB) && !defined(CONFIG_CPU_SH4A) -static inline int atomic_cmpxchg(atomic_t *v, int old, int new) -{ -	int ret; -	unsigned long flags; - -	local_irq_save(flags); -	ret = v->counter; -	if (likely(ret == old)) -		v->counter = new; -	local_irq_restore(flags); - -	return ret; -} -  static inline int atomic_add_unless(atomic_t *v, int a, int u)  { -	int ret; -	unsigned long flags; - -	local_irq_save(flags); -	ret = v->counter; -	if (ret != u) -		v->counter += a; -	local_irq_restore(flags); +	int c, old; +	c = atomic_read(v); +	for (;;) { +		if (unlikely(c == (u))) +			break; +		old = atomic_cmpxchg((v), c, c + (a)); +		if (likely(old == c)) +			break; +		c = old; +	} -	return ret != u; +	return c != (u);  } -#endif /* !CONFIG_GUSA_RB && !CONFIG_CPU_SH4A */ - -#define atomic_xchg(v, new) (xchg(&((v)->counter), new)) -#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)  #define smp_mb__before_atomic_dec()	smp_mb()  #define smp_mb__after_atomic_dec()	smp_mb() diff --git a/arch/sh/include/asm/bug.h b/arch/sh/include/asm/bug.h index d02c01b3e6b..6323f864d11 100644 --- a/arch/sh/include/asm/bug.h +++ b/arch/sh/include/asm/bug.h @@ -48,7 +48,7 @@ do {							\  		   "i" (sizeof(struct bug_entry)));	\  } while (0) -#define __WARN()					\ +#define __WARN_TAINT(taint)				\  do {							\  	__asm__ __volatile__ (				\  		"1:\t.short %O0\n"			\ @@ -57,7 +57,7 @@ do {							\  		 : "n" (TRAPA_BUG_OPCODE),		\  		   "i" (__FILE__),			\  		   "i" (__LINE__),			\ -		   "i" (BUGFLAG_WARNING),		\ +		   "i" (BUGFLAG_TAINT(taint)),		\  		   "i" (sizeof(struct bug_entry)));	\  } while (0) diff --git a/arch/sh/include/asm/cache.h b/arch/sh/include/asm/cache.h index 455a9a9bd7d..ef9e555aafb 100644 --- a/arch/sh/include/asm/cache.h +++ b/arch/sh/include/asm/cache.h @@ -38,14 +38,10 @@ struct cache_info {  	 * 2. those in the physical page number.  	 */  	unsigned int alias_mask; -  	unsigned int n_aliases;		/* Number of aliases */  	unsigned long flags;  }; - -int __init detect_cpu_and_cache_system(void); -  #endif /* __ASSEMBLY__ */  #endif /* __KERNEL__ */  #endif /* __ASM_SH_CACHE_H */ diff --git a/arch/sh/include/asm/cacheflush.h b/arch/sh/include/asm/cacheflush.h index dda96eb3e7c..1f4e562c5e8 100644 --- a/arch/sh/include/asm/cacheflush.h +++ b/arch/sh/include/asm/cacheflush.h @@ -63,6 +63,14 @@ static inline void flush_anon_page(struct vm_area_struct *vma,  	if (boot_cpu_data.dcache.n_aliases && PageAnon(page))  		__flush_anon_page(page, vmaddr);  } +static inline void flush_kernel_vmap_range(void *addr, int size) +{ +	__flush_wback_region(addr, size); +} +static inline void invalidate_kernel_vmap_range(void *addr, int size) +{ +	__flush_invalidate_region(addr, size); +}  #define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE  static inline void flush_kernel_dcache_page(struct page *page) @@ -78,8 +86,8 @@ extern void copy_from_user_page(struct vm_area_struct *vma,  	struct page *page, unsigned long vaddr, void *dst, const void *src,  	unsigned long len); -#define flush_cache_vmap(start, end)		flush_cache_all() -#define flush_cache_vunmap(start, end)		flush_cache_all() +#define flush_cache_vmap(start, end)		local_flush_cache_all(NULL) +#define flush_cache_vunmap(start, end)		local_flush_cache_all(NULL)  #define flush_dcache_mmap_lock(mapping)		do { } while (0)  #define flush_dcache_mmap_unlock(mapping)	do { } while (0) diff --git a/arch/sh/include/asm/clkdev.h b/arch/sh/include/asm/clkdev.h new file mode 100644 index 00000000000..5645f358128 --- /dev/null +++ b/arch/sh/include/asm/clkdev.h @@ -0,0 +1,35 @@ +/* + *  arch/sh/include/asm/clkdev.h + * + * Cloned from arch/arm/include/asm/clkdev.h: + * + *  Copyright (C) 2008 Russell King. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Helper for the clk API to assist looking up a struct clk. + */ +#ifndef __ASM_CLKDEV_H +#define __ASM_CLKDEV_H + +struct clk; + +struct clk_lookup { +	struct list_head	node; +	const char		*dev_id; +	const char		*con_id; +	struct clk		*clk; +}; + +struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id, +	const char *dev_fmt, ...); + +void clkdev_add(struct clk_lookup *cl); +void clkdev_drop(struct clk_lookup *cl); + +void clkdev_add_table(struct clk_lookup *, size_t); +int clk_add_alias(const char *, const char *, char *, struct device *); + +#endif diff --git a/arch/sh/include/asm/clock.h b/arch/sh/include/asm/clock.h index 9fe7d7f8af4..803d4c7f09d 100644 --- a/arch/sh/include/asm/clock.h +++ b/arch/sh/include/asm/clock.h @@ -1,162 +1,16 @@  #ifndef __ASM_SH_CLOCK_H  #define __ASM_SH_CLOCK_H -#include <linux/list.h> -#include <linux/seq_file.h> -#include <linux/cpufreq.h> -#include <linux/clk.h> -#include <linux/err.h> - -struct clk; - -struct clk_ops { -	void (*init)(struct clk *clk); -	int (*enable)(struct clk *clk); -	void (*disable)(struct clk *clk); -	unsigned long (*recalc)(struct clk *clk); -	int (*set_rate)(struct clk *clk, unsigned long rate, int algo_id); -	int (*set_parent)(struct clk *clk, struct clk *parent); -	long (*round_rate)(struct clk *clk, unsigned long rate); -}; - -struct clk { -	struct list_head	node; -	const char		*name; -	int			id; -	struct module		*owner; - -	struct clk		*parent; -	struct clk_ops		*ops; - -	struct list_head	children; -	struct list_head	sibling;	/* node for children */ - -	int			usecount; - -	unsigned long		rate; -	unsigned long		flags; - -	void __iomem		*enable_reg; -	unsigned int		enable_bit; - -	unsigned long		arch_flags; -	void			*priv; -	struct dentry		*dentry; -	struct cpufreq_frequency_table *freq_table; -}; - -struct clk_lookup { -	struct list_head	node; -	const char		*dev_id; -	const char		*con_id; -	struct clk		*clk; -}; - -#define CLK_ENABLE_ON_INIT	(1 << 0) +#include <linux/sh_clk.h>  /* Should be defined by processor-specific code */  void __deprecated arch_init_clk_ops(struct clk_ops **, int type);  int __init arch_clk_init(void); -/* arch/sh/kernel/cpu/clock.c */ -int clk_init(void); -unsigned long followparent_recalc(struct clk *); -void recalculate_root_clocks(void); -void propagate_rate(struct clk *); -int clk_reparent(struct clk *child, struct clk *parent); -int clk_register(struct clk *); -void clk_unregister(struct clk *); -  /* arch/sh/kernel/cpu/clock-cpg.c */  int __init __deprecated cpg_clk_init(void); -/* the exported API, in addition to clk_set_rate */ -/** - * clk_set_rate_ex - set the clock rate for a clock source, with additional parameter - * @clk: clock source - * @rate: desired clock rate in Hz - * @algo_id: algorithm id to be passed down to ops->set_rate - * - * Returns success (0) or negative errno. - */ -int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id); - -enum clk_sh_algo_id { -	NO_CHANGE = 0, - -	IUS_N1_N1, -	IUS_322, -	IUS_522, -	IUS_N11, - -	SB_N1, - -	SB3_N1, -	SB3_32, -	SB3_43, -	SB3_54, - -	BP_N1, - -	IP_N1, -}; - -struct clk_div_mult_table { -	unsigned int *divisors; -	unsigned int nr_divisors; -	unsigned int *multipliers; -	unsigned int nr_multipliers; -}; - -struct cpufreq_frequency_table; -void clk_rate_table_build(struct clk *clk, -			  struct cpufreq_frequency_table *freq_table, -			  int nr_freqs, -			  struct clk_div_mult_table *src_table, -			  unsigned long *bitmap); - -long clk_rate_table_round(struct clk *clk, -			  struct cpufreq_frequency_table *freq_table, -			  unsigned long rate); - -int clk_rate_table_find(struct clk *clk, -			struct cpufreq_frequency_table *freq_table, -			unsigned long rate); - -#define SH_CLK_MSTP32(_name, _id, _parent, _enable_reg,	\ -	    _enable_bit, _flags)			\ -{							\ -	.name		= _name,			\ -	.id		= _id,				\ -	.parent		= _parent,			\ -	.enable_reg	= (void __iomem *)_enable_reg,	\ -	.enable_bit	= _enable_bit,			\ -	.flags		= _flags,			\ -} - -int sh_clk_mstp32_register(struct clk *clks, int nr); - -#define SH_CLK_DIV4(_name, _parent, _reg, _shift, _div_bitmap, _flags)	\ -{									\ -	.name = _name,							\ -	.parent = _parent,						\ -	.enable_reg = (void __iomem *)_reg,				\ -	.enable_bit = _shift,						\ -	.arch_flags = _div_bitmap,					\ -	.flags = _flags,						\ -} - -int sh_clk_div4_register(struct clk *clks, int nr, -			 struct clk_div_mult_table *table); - -#define SH_CLK_DIV6(_name, _parent, _reg, _flags)	\ -{							\ -	.name = _name,					\ -	.parent = _parent,				\ -	.enable_reg = (void __iomem *)_reg,		\ -	.flags = _flags,				\ -} - -int sh_clk_div6_register(struct clk *clks, int nr); +/* arch/sh/kernel/cpu/clock.c */ +int clk_init(void);  #endif /* __ASM_SH_CLOCK_H */ diff --git a/arch/sh/include/asm/cmpxchg-grb.h b/arch/sh/include/asm/cmpxchg-grb.h index e2681abe764..4676bf57693 100644 --- a/arch/sh/include/asm/cmpxchg-grb.h +++ b/arch/sh/include/asm/cmpxchg-grb.h @@ -57,11 +57,10 @@ static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,  		"   mov.l  @%1,   %0      \n\t" /* load  old value */  		"   cmp/eq  %0,   %2      \n\t"  		"   bf            1f      \n\t" /* if not equal */ -		"   mov.l   %2,   @%1     \n\t" /* store new value */ +		"   mov.l   %3,   @%1     \n\t" /* store new value */  		"1: mov     r1,   r15     \n\t" /* LOGOUT */ -		: "=&r" (retval), -		  "+r"  (m) -		: "r"   (new) +		: "=&r" (retval) +		:  "r"  (m), "r"  (old), "r"  (new)  		: "memory" , "r0", "r1", "t");  	return retval; diff --git a/arch/sh/include/asm/dma-mapping.h b/arch/sh/include/asm/dma-mapping.h index 87ced133a36..bea3337a426 100644 --- a/arch/sh/include/asm/dma-mapping.h +++ b/arch/sh/include/asm/dma-mapping.h @@ -89,8 +89,6 @@ static inline void dma_free_coherent(struct device *dev, size_t size,  {  	struct dma_map_ops *ops = get_dma_ops(dev); -	WARN_ON(irqs_disabled());	/* for portability */ -  	if (dma_release_from_coherent(dev, get_order(size), vaddr))  		return; diff --git a/arch/sh/include/asm/dma-register.h b/arch/sh/include/asm/dma-register.h new file mode 100644 index 00000000000..51cd78feacf --- /dev/null +++ b/arch/sh/include/asm/dma-register.h @@ -0,0 +1,51 @@ +/* + * Common header for the legacy SH DMA driver and the new dmaengine driver + * + * extracted from arch/sh/include/asm/dma-sh.h: + * + * Copyright (C) 2000  Takashi YOSHII + * Copyright (C) 2003  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#ifndef DMA_REGISTER_H +#define DMA_REGISTER_H + +/* DMA register */ +#define SAR	0x00 +#define DAR	0x04 +#define TCR	0x08 +#define CHCR	0x0C +#define DMAOR	0x40 + +/* DMAOR definitions */ +#define DMAOR_AE	0x00000004 +#define DMAOR_NMIF	0x00000002 +#define DMAOR_DME	0x00000001 + +/* Definitions for the SuperH DMAC */ +#define REQ_L	0x00000000 +#define REQ_E	0x00080000 +#define RACK_H	0x00000000 +#define RACK_L	0x00040000 +#define ACK_R	0x00000000 +#define ACK_W	0x00020000 +#define ACK_H	0x00000000 +#define ACK_L	0x00010000 +#define DM_INC	0x00004000 +#define DM_DEC	0x00008000 +#define DM_FIX	0x0000c000 +#define SM_INC	0x00001000 +#define SM_DEC	0x00002000 +#define SM_FIX	0x00003000 +#define RS_IN	0x00000200 +#define RS_OUT	0x00000300 +#define TS_BLK	0x00000040 +#define TM_BUR	0x00000020 +#define CHCR_DE	0x00000001 +#define CHCR_TE	0x00000002 +#define CHCR_IE	0x00000004 + +#endif diff --git a/arch/sh/include/asm/dma-sh.h b/arch/sh/include/asm/dma-sh.h index 78eed3e0bdf..f3acb8e34c6 100644 --- a/arch/sh/include/asm/dma-sh.h +++ b/arch/sh/include/asm/dma-sh.h @@ -11,7 +11,8 @@  #ifndef __DMA_SH_H  #define __DMA_SH_H -#include <asm/dma.h> +#include <asm/dma-register.h> +#include <cpu/dma-register.h>  #include <cpu/dma.h>  /* DMAOR contorl: The DMAOR access size is different by CPU.*/ @@ -20,14 +21,14 @@      defined(CONFIG_CPU_SUBTYPE_SH7780)	|| \      defined(CONFIG_CPU_SUBTYPE_SH7785)  #define dmaor_read_reg(n) \ -    (n ? ctrl_inw(SH_DMAC_BASE1 + DMAOR) \ -	: ctrl_inw(SH_DMAC_BASE0 + DMAOR)) +    (n ? __raw_readw(SH_DMAC_BASE1 + DMAOR) \ +	: __raw_readw(SH_DMAC_BASE0 + DMAOR))  #define dmaor_write_reg(n, data) \ -    (n ? ctrl_outw(data, SH_DMAC_BASE1 + DMAOR) \ -    : ctrl_outw(data, SH_DMAC_BASE0 + DMAOR)) +    (n ? __raw_writew(data, SH_DMAC_BASE1 + DMAOR) \ +    : __raw_writew(data, SH_DMAC_BASE0 + DMAOR))  #else /* Other CPU */ -#define dmaor_read_reg(n) ctrl_inw(SH_DMAC_BASE0 + DMAOR) -#define dmaor_write_reg(n, data) ctrl_outw(data, SH_DMAC_BASE0 + DMAOR) +#define dmaor_read_reg(n) __raw_readw(SH_DMAC_BASE0 + DMAOR) +#define dmaor_write_reg(n, data) __raw_writew(data, SH_DMAC_BASE0 + DMAOR)  #endif  static int dmte_irq_map[] __maybe_unused = { @@ -53,37 +54,11 @@ static int dmte_irq_map[] __maybe_unused = {  #endif  }; -/* Definitions for the SuperH DMAC */ -#define REQ_L	0x00000000 -#define REQ_E	0x00080000 -#define RACK_H	0x00000000 -#define RACK_L	0x00040000 -#define ACK_R	0x00000000 -#define ACK_W	0x00020000 -#define ACK_H	0x00000000 -#define ACK_L	0x00010000 -#define DM_INC	0x00004000 -#define DM_DEC	0x00008000 -#define SM_INC	0x00001000 -#define SM_DEC	0x00002000 -#define RS_IN	0x00000200 -#define RS_OUT	0x00000300 -#define TS_BLK	0x00000040 -#define TM_BUR	0x00000020 -#define CHCR_DE 0x00000001 -#define CHCR_TE 0x00000002 -#define CHCR_IE 0x00000004 - -/* DMAOR definitions */ -#define DMAOR_AE	0x00000004 -#define DMAOR_NMIF	0x00000002 -#define DMAOR_DME	0x00000001 -  /*   * Define the default configuration for dual address memory-memory transfer.   * The 0x400 value represents auto-request, external->external.   */ -#define RS_DUAL	(DM_INC | SM_INC | 0x400 | TS_32) +#define RS_DUAL	(DM_INC | SM_INC | 0x400 | TS_INDEX2VAL(XMIT_SZ_32BIT))  /* DMA base address */  static u32 dma_base_addr[] __maybe_unused = { @@ -109,24 +84,4 @@ static u32 dma_base_addr[] __maybe_unused = {  #endif  }; -/* DMA register */ -#define SAR     0x00 -#define DAR     0x04 -#define TCR     0x08 -#define CHCR    0x0C -#define DMAOR	0x40 - -/* - * for dma engine - * - * SuperH DMA mode - */ -#define SHDMA_MIX_IRQ	(1 << 1) -#define SHDMA_DMAOR1	(1 << 2) -#define SHDMA_DMAE1		(1 << 3) - -struct sh_dmae_pdata { -	unsigned int mode; -}; -  #endif /* __DMA_SH_H */ diff --git a/arch/sh/include/asm/dwarf.h b/arch/sh/include/asm/dwarf.h index bdccbbfdc0b..d62abd1d0c0 100644 --- a/arch/sh/include/asm/dwarf.h +++ b/arch/sh/include/asm/dwarf.h @@ -243,16 +243,13 @@ struct dwarf_cie {  	unsigned long cie_pointer; -	struct list_head link; -  	unsigned long flags;  #define DWARF_CIE_Z_AUGMENTATION	(1 << 0) -	/* -	 * 'mod' will be non-NULL if this CIE came from a module's -	 * .eh_frame section. -	 */ -	struct module *mod; +	/* linked-list entry if this CIE is from a module */ +	struct list_head link; + +	struct rb_node node;  };  /** @@ -266,13 +263,11 @@ struct dwarf_fde {  	unsigned long address_range;  	unsigned char *instructions;  	unsigned char *end; + +	/* linked-list entry if this FDE is from a module */  	struct list_head link; -	/* -	 * 'mod' will be non-NULL if this FDE came from a module's -	 * .eh_frame section. -	 */ -	struct module *mod; +	struct rb_node node;  };  /** diff --git a/arch/sh/include/asm/elf.h b/arch/sh/include/asm/elf.h index ac04255022b..ce830faeebb 100644 --- a/arch/sh/include/asm/elf.h +++ b/arch/sh/include/asm/elf.h @@ -211,7 +211,9 @@ extern void __kernel_vsyscall;  #define VSYSCALL_AUX_ENT					\  	if (vdso_enabled)					\ -		NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE); +		NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE);	\ +	else							\ +		NEW_AUX_ENT(AT_IGNORE, 0);  #else  #define VSYSCALL_AUX_ENT  #endif /* CONFIG_VSYSCALL */ @@ -219,7 +221,7 @@ extern void __kernel_vsyscall;  #ifdef CONFIG_SH_FPU  #define FPU_AUX_ENT	NEW_AUX_ENT(AT_FPUCW, FPSCR_INIT)  #else -#define FPU_AUX_ENT +#define FPU_AUX_ENT	NEW_AUX_ENT(AT_IGNORE, 0)  #endif  extern int l1i_cache_shape, l1d_cache_shape, l2_cache_shape; diff --git a/arch/sh/include/asm/fixmap.h b/arch/sh/include/asm/fixmap.h index 5ac1e40a511..6e7cea45389 100644 --- a/arch/sh/include/asm/fixmap.h +++ b/arch/sh/include/asm/fixmap.h @@ -55,16 +55,29 @@ enum fixed_addresses {  #define FIX_N_COLOURS 8  	FIX_CMAP_BEGIN,  	FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * NR_CPUS) - 1, -	FIX_UNCACHED, +  #ifdef CONFIG_HIGHMEM  	FIX_KMAP_BEGIN,	/* reserved pte's for temporary kernel mappings */  	FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,  #endif + +#ifdef CONFIG_IOREMAP_FIXED +	/* +	 * FIX_IOREMAP entries are useful for mapping physical address +	 * space before ioremap() is useable, e.g. really early in boot +	 * before kmalloc() is working. +	 */ +#define FIX_N_IOREMAPS	32 +	FIX_IOREMAP_BEGIN, +	FIX_IOREMAP_END = FIX_IOREMAP_BEGIN + FIX_N_IOREMAPS, +#endif +  	__end_of_fixed_addresses  };  extern void __set_fixmap(enum fixed_addresses idx,  			 unsigned long phys, pgprot_t flags); +extern void __clear_fixmap(enum fixed_addresses idx, pgprot_t flags);  #define set_fixmap(idx, phys) \  		__set_fixmap(idx, phys, PAGE_KERNEL) diff --git a/arch/sh/include/asm/fpu.h b/arch/sh/include/asm/fpu.h index fb6bbb9b1cc..06c4281aab6 100644 --- a/arch/sh/include/asm/fpu.h +++ b/arch/sh/include/asm/fpu.h @@ -2,8 +2,8 @@  #define __ASM_SH_FPU_H  #ifndef __ASSEMBLY__ -#include <linux/preempt.h> -#include <asm/ptrace.h> + +struct task_struct;  #ifdef CONFIG_SH_FPU  static inline void release_fpu(struct pt_regs *regs) @@ -16,22 +16,23 @@ static inline void grab_fpu(struct pt_regs *regs)  	regs->sr &= ~SR_FD;  } -struct task_struct; -  extern void save_fpu(struct task_struct *__tsk); -void fpu_state_restore(struct pt_regs *regs); +extern void restore_fpu(struct task_struct *__tsk); +extern void fpu_state_restore(struct pt_regs *regs); +extern void __fpu_state_restore(void);  #else - -#define save_fpu(tsk)		do { } while (0) -#define release_fpu(regs)	do { } while (0) -#define grab_fpu(regs)		do { } while (0) -#define fpu_state_restore(regs)	do { } while (0) - +#define save_fpu(tsk)			do { } while (0) +#define restore_fpu(tsk)		do { } while (0) +#define release_fpu(regs)		do { } while (0) +#define grab_fpu(regs)			do { } while (0) +#define fpu_state_restore(regs)		do { } while (0) +#define __fpu_state_restore(regs)	do { } while (0)  #endif  struct user_regset;  extern int do_fpu_inst(unsigned short, struct pt_regs *); +extern int init_fpu(struct task_struct *);  extern int fpregs_get(struct task_struct *target,  		      const struct user_regset *regset, @@ -65,18 +66,6 @@ static inline void clear_fpu(struct task_struct *tsk, struct pt_regs *regs)  	preempt_enable();  } -static inline int init_fpu(struct task_struct *tsk) -{ -	if (tsk_used_math(tsk)) { -		if ((boot_cpu_data.flags & CPU_HAS_FPU) && tsk == current) -			unlazy_fpu(tsk, task_pt_regs(tsk)); -		return 0; -	} - -	set_stopped_child_used_math(tsk); -	return 0; -} -  #endif /* __ASSEMBLY__ */  #endif /* __ASM_SH_FPU_H */ diff --git a/arch/sh/include/asm/hw_breakpoint.h b/arch/sh/include/asm/hw_breakpoint.h new file mode 100644 index 00000000000..89890f61a7b --- /dev/null +++ b/arch/sh/include/asm/hw_breakpoint.h @@ -0,0 +1,70 @@ +#ifndef __ASM_SH_HW_BREAKPOINT_H +#define __ASM_SH_HW_BREAKPOINT_H + +#ifdef __KERNEL__ +#define __ARCH_HW_BREAKPOINT_H + +#include <linux/kdebug.h> +#include <linux/types.h> + +struct arch_hw_breakpoint { +	char		*name; /* Contains name of the symbol to set bkpt */ +	unsigned long	address; +	u16		len; +	u16		type; +}; + +enum { +	SH_BREAKPOINT_READ	= (1 << 1), +	SH_BREAKPOINT_WRITE	= (1 << 2), +	SH_BREAKPOINT_RW	= SH_BREAKPOINT_READ | SH_BREAKPOINT_WRITE, + +	SH_BREAKPOINT_LEN_1	= (1 << 12), +	SH_BREAKPOINT_LEN_2	= (1 << 13), +	SH_BREAKPOINT_LEN_4	= SH_BREAKPOINT_LEN_1 | SH_BREAKPOINT_LEN_2, +	SH_BREAKPOINT_LEN_8	= (1 << 14), +}; + +struct sh_ubc { +	const char	*name; +	unsigned int	num_events; +	unsigned int	trap_nr; +	void		(*enable)(struct arch_hw_breakpoint *, int); +	void		(*disable)(struct arch_hw_breakpoint *, int); +	void		(*enable_all)(unsigned long); +	void		(*disable_all)(void); +	unsigned long	(*active_mask)(void); +	unsigned long	(*triggered_mask)(void); +	void		(*clear_triggered_mask)(unsigned long); +	struct clk	*clk;	/* optional interface clock / MSTP bit */ +}; + +struct perf_event; +struct task_struct; +struct pmu; + +/* Maximum number of UBC channels */ +#define HBP_NUM		2 + +static inline int hw_breakpoint_slots(int type) +{ +	return HBP_NUM; +} + +/* arch/sh/kernel/hw_breakpoint.c */ +extern int arch_check_bp_in_kernelspace(struct perf_event *bp); +extern int arch_validate_hwbkpt_settings(struct perf_event *bp); +extern int hw_breakpoint_exceptions_notify(struct notifier_block *unused, +					   unsigned long val, void *data); + +int arch_install_hw_breakpoint(struct perf_event *bp); +void arch_uninstall_hw_breakpoint(struct perf_event *bp); +void hw_breakpoint_pmu_read(struct perf_event *bp); + +extern void arch_fill_perf_breakpoint(struct perf_event *bp); +extern int register_sh_ubc(struct sh_ubc *); + +extern struct pmu perf_ops_bp; + +#endif /* __KERNEL__ */ +#endif /* __ASM_SH_HW_BREAKPOINT_H */ diff --git a/arch/sh/include/asm/hwblk.h b/arch/sh/include/asm/hwblk.h index 5d3ccae4202..855e945c619 100644 --- a/arch/sh/include/asm/hwblk.h +++ b/arch/sh/include/asm/hwblk.h @@ -58,13 +58,11 @@ void hwblk_cnt_inc(struct hwblk_info *info, int hwblk, int cnt);  void hwblk_cnt_dec(struct hwblk_info *info, int hwblk, int cnt);  /* allow clocks to enable and disable hardware blocks */ -#define SH_HWBLK_CLK(_name, _id, _parent, _hwblk, _flags)	\ -{							\ -	.name		= _name,			\ -	.id		= _id,				\ -	.parent		= _parent,			\ -	.arch_flags	= _hwblk,			\ -	.flags		= _flags,			\ +#define SH_HWBLK_CLK(_hwblk, _parent, _flags)	\ +[_hwblk] = {					\ +	.parent		= _parent,		\ +	.arch_flags	= _hwblk,		\ +	.flags		= _flags,		\  }  int sh_hwblk_clk_register(struct clk *clks, int nr); diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h index 026dd659a64..f689554e17c 100644 --- a/arch/sh/include/asm/io.h +++ b/arch/sh/include/asm/io.h @@ -22,6 +22,7 @@   * for old compat code for I/O offseting to SuperIOs, all of which are   * better handled through the machvec ioport mapping routines these days.   */ +#include <linux/errno.h>  #include <asm/cache.h>  #include <asm/system.h>  #include <asm/addrspace.h> @@ -79,16 +80,51 @@  #define writel(v,a)		({ __raw_writel((v),(a)); mb(); })  #define writeq(v,a)		({ __raw_writeq((v),(a)); mb(); }) -/* SuperH on-chip I/O functions */ -#define ctrl_inb		__raw_readb -#define ctrl_inw		__raw_readw -#define ctrl_inl		__raw_readl -#define ctrl_inq		__raw_readq +/* + * Legacy SuperH on-chip I/O functions + * + * These are all deprecated, all new (and especially cross-platform) code + * should be using the __raw_xxx() routines directly. + */ +static inline u8 __deprecated ctrl_inb(unsigned long addr) +{ +	return __raw_readb(addr); +} + +static inline u16 __deprecated ctrl_inw(unsigned long addr) +{ +	return __raw_readw(addr); +} + +static inline u32 __deprecated ctrl_inl(unsigned long addr) +{ +	return __raw_readl(addr); +} -#define ctrl_outb		__raw_writeb -#define ctrl_outw		__raw_writew -#define ctrl_outl		__raw_writel -#define ctrl_outq		__raw_writeq +static inline u64 __deprecated ctrl_inq(unsigned long addr) +{ +	return __raw_readq(addr); +} + +static inline void __deprecated ctrl_outb(u8 v, unsigned long addr) +{ +	__raw_writeb(v, addr); +} + +static inline void __deprecated ctrl_outw(u16 v, unsigned long addr) +{ +	__raw_writew(v, addr); +} + +static inline void __deprecated ctrl_outl(u32 v, unsigned long addr) +{ +	__raw_writel(v, addr); +} + +static inline void __deprecated ctrl_outq(u64 v, unsigned long addr) +{ +	__raw_writeq(v, addr); +}  extern unsigned long generic_io_base; @@ -97,6 +133,28 @@ static inline void ctrl_delay(void)  	__raw_readw(generic_io_base);  } +#define __BUILD_UNCACHED_IO(bwlq, type)					\ +static inline type read##bwlq##_uncached(unsigned long addr)		\ +{									\ +	type ret;							\ +	jump_to_uncached();						\ +	ret = __raw_read##bwlq(addr);					\ +	back_to_cached();						\ +	return ret;							\ +}									\ +									\ +static inline void write##bwlq##_uncached(type v, unsigned long addr)	\ +{									\ +	jump_to_uncached();						\ +	__raw_write##bwlq(v, addr);					\ +	back_to_cached();						\ +} + +__BUILD_UNCACHED_IO(b, u8) +__BUILD_UNCACHED_IO(w, u16) +__BUILD_UNCACHED_IO(l, u32) +__BUILD_UNCACHED_IO(q, u64) +  #define __BUILD_MEMORY_STRING(bwlq, type)				\  									\  static inline void __raw_writes##bwlq(volatile void __iomem *mem,	\ @@ -233,29 +291,22 @@ unsigned long long poke_real_address_q(unsigned long long addr,   * doesn't exist, so everything must go through page tables.   */  #ifdef CONFIG_MMU -void __iomem *__ioremap_caller(unsigned long offset, unsigned long size, -			       unsigned long flags, void *caller); +void __iomem *__ioremap_caller(phys_addr_t offset, unsigned long size, +			       pgprot_t prot, void *caller);  void __iounmap(void __iomem *addr);  static inline void __iomem * -__ioremap(unsigned long offset, unsigned long size, unsigned long flags) +__ioremap(phys_addr_t offset, unsigned long size, pgprot_t prot)  { -	return __ioremap_caller(offset, size, flags, __builtin_return_address(0)); +	return __ioremap_caller(offset, size, prot, __builtin_return_address(0));  }  static inline void __iomem * -__ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags) +__ioremap_29bit(phys_addr_t offset, unsigned long size, pgprot_t prot)  { -#if defined(CONFIG_SUPERH32) && !defined(CONFIG_PMB_FIXED) && !defined(CONFIG_PMB) -	unsigned long last_addr = offset + size - 1; -#endif -	void __iomem *ret; - -	ret = __ioremap_trapped(offset, size); -	if (ret) -		return ret; +#ifdef CONFIG_29BIT +	phys_addr_t last_addr = offset + size - 1; -#if defined(CONFIG_SUPERH32) && !defined(CONFIG_PMB_FIXED) && !defined(CONFIG_PMB)  	/*  	 * For P1 and P2 space this is trivial, as everything is already  	 * mapped. Uncached access for P1 addresses are done through P2. @@ -263,7 +314,7 @@ __ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags)  	 * mapping must be done by the PMB or by using page tables.  	 */  	if (likely(PXSEG(offset) < P3SEG && PXSEG(last_addr) < P3SEG)) { -		if (unlikely(flags & _PAGE_CACHABLE)) +		if (unlikely(pgprot_val(prot) & _PAGE_CACHABLE))  			return (void __iomem *)P1SEGADDR(offset);  		return (void __iomem *)P2SEGADDR(offset); @@ -274,26 +325,67 @@ __ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags)  		return (void __iomem *)P4SEGADDR(offset);  #endif -	return __ioremap(offset, size, flags); +	return NULL; +} + +static inline void __iomem * +__ioremap_mode(phys_addr_t offset, unsigned long size, pgprot_t prot) +{ +	void __iomem *ret; + +	ret = __ioremap_trapped(offset, size); +	if (ret) +		return ret; + +	ret = __ioremap_29bit(offset, size, prot); +	if (ret) +		return ret; + +	return __ioremap(offset, size, prot);  }  #else -#define __ioremap(offset, size, flags)		((void __iomem *)(offset)) -#define __ioremap_mode(offset, size, flags)	((void __iomem *)(offset)) +#define __ioremap(offset, size, prot)		((void __iomem *)(offset)) +#define __ioremap_mode(offset, size, prot)	((void __iomem *)(offset))  #define __iounmap(addr)				do { } while (0)  #endif /* CONFIG_MMU */ -#define ioremap(offset, size)				\ -	__ioremap_mode((offset), (size), 0) -#define ioremap_nocache(offset, size)			\ -	__ioremap_mode((offset), (size), 0) -#define ioremap_cache(offset, size)			\ -	__ioremap_mode((offset), (size), _PAGE_CACHABLE) -#define p3_ioremap(offset, size, flags)			\ -	__ioremap((offset), (size), (flags)) -#define ioremap_prot(offset, size, flags)		\ -	__ioremap_mode((offset), (size), (flags)) -#define iounmap(addr)					\ -	__iounmap((addr)) +static inline void __iomem *ioremap(phys_addr_t offset, unsigned long size) +{ +	return __ioremap_mode(offset, size, PAGE_KERNEL_NOCACHE); +} + +static inline void __iomem * +ioremap_cache(phys_addr_t offset, unsigned long size) +{ +	return __ioremap_mode(offset, size, PAGE_KERNEL); +} + +#ifdef CONFIG_HAVE_IOREMAP_PROT +static inline void __iomem * +ioremap_prot(phys_addr_t offset, unsigned long size, unsigned long flags) +{ +	return __ioremap_mode(offset, size, __pgprot(flags)); +} +#endif + +#ifdef CONFIG_IOREMAP_FIXED +extern void __iomem *ioremap_fixed(phys_addr_t, unsigned long, pgprot_t); +extern int iounmap_fixed(void __iomem *); +extern void ioremap_fixed_init(void); +#else +static inline void __iomem * +ioremap_fixed(phys_addr_t phys_addr, unsigned long size, pgprot_t prot) +{ +	BUG(); +	return NULL; +} + +static inline void ioremap_fixed_init(void) { } +static inline int iounmap_fixed(void __iomem *addr) { return -EINVAL; } +#endif + +#define ioremap_nocache	ioremap +#define iounmap		__iounmap  #define maybebadio(port) \  	printk(KERN_ERR "bad PC-like io %s:%u for port 0x%lx at 0x%08x\n", \ diff --git a/arch/sh/include/asm/io_generic.h b/arch/sh/include/asm/io_generic.h index 1e5d375f55d..491df93cbf8 100644 --- a/arch/sh/include/asm/io_generic.h +++ b/arch/sh/include/asm/io_generic.h @@ -38,5 +38,6 @@ void IO_CONCAT(__IO_PREFIX,iounmap)(void *addr);  void __iomem *IO_CONCAT(__IO_PREFIX,ioport_map)(unsigned long addr, unsigned int size);  void IO_CONCAT(__IO_PREFIX,ioport_unmap)(void __iomem *addr); +void IO_CONCAT(__IO_PREFIX,mem_init)(void);  #undef __IO_PREFIX diff --git a/arch/sh/include/asm/irq.h b/arch/sh/include/asm/irq.h index df8e1500527..02c2f0102cf 100644 --- a/arch/sh/include/asm/irq.h +++ b/arch/sh/include/asm/irq.h @@ -1,6 +1,7 @@  #ifndef __ASM_SH_IRQ_H  #define __ASM_SH_IRQ_H +#include <linux/cpumask.h>  #include <asm/machvec.h>  /* @@ -12,6 +13,14 @@  #define NR_IRQS_LEGACY		8	/* Legacy external IRQ0-7 */  /* + * This is a special IRQ number for indicating that no IRQ has been + * triggered and to simply ignore the IRQ dispatch. This is a special + * case that can happen with IRQ auto-distribution when multiple CPUs + * are woken up and signalled in parallel. + */ +#define NO_IRQ_IGNORE		((unsigned int)-1) + +/*   * Convert back and forth between INTEVT and IRQ values.   */  #ifdef CONFIG_CPU_HAS_INTEVT @@ -42,6 +51,8 @@ static inline int generic_irq_demux(int irq)  #define irq_demux(irq)		sh_mv.mv_irq_demux(irq)  void init_IRQ(void); +void migrate_irqs(void); +  asmlinkage int do_IRQ(unsigned int irq, struct pt_regs *regs);  #ifdef CONFIG_IRQSTACKS @@ -53,6 +64,14 @@ extern void irq_ctx_exit(int cpu);  # define irq_ctx_exit(cpu) do { } while (0)  #endif +#ifdef CONFIG_INTC_BALANCING +extern unsigned int irq_lookup(unsigned int irq); +extern void irq_finish(unsigned int irq); +#else +#define irq_lookup(irq)		(irq) +#define irq_finish(irq)		do { } while (0) +#endif +  #include <asm-generic/irq.h>  #ifdef CONFIG_CPU_SH5  #include <cpu/irq.h> diff --git a/arch/sh/include/asm/kdebug.h b/arch/sh/include/asm/kdebug.h index 985219f9759..5f6d2e9ccb7 100644 --- a/arch/sh/include/asm/kdebug.h +++ b/arch/sh/include/asm/kdebug.h @@ -6,6 +6,8 @@ enum die_val {  	DIE_TRAP,  	DIE_NMI,  	DIE_OOPS, +	DIE_BREAKPOINT, +	DIE_SSTEP,  };  #endif /* __ASM_SH_KDEBUG_H */ diff --git a/arch/sh/include/asm/kexec.h b/arch/sh/include/asm/kexec.h index 765a5e1660f..ad6ef8a275e 100644 --- a/arch/sh/include/asm/kexec.h +++ b/arch/sh/include/asm/kexec.h @@ -26,6 +26,10 @@  /* The native architecture */  #define KEXEC_ARCH KEXEC_ARCH_SH +#ifdef CONFIG_KEXEC +/* arch/sh/kernel/machine_kexec.c */ +void reserve_crashkernel(void); +  static inline void crash_setup_regs(struct pt_regs *newregs,  				    struct pt_regs *oldregs)  { @@ -59,4 +63,8 @@ static inline void crash_setup_regs(struct pt_regs *newregs,  		newregs->pc = (unsigned long)current_text_addr();  	}  } +#else +static inline void reserve_crashkernel(void) { } +#endif /* CONFIG_KEXEC */ +  #endif /* __ASM_SH_KEXEC_H */ diff --git a/arch/sh/include/asm/machvec.h b/arch/sh/include/asm/machvec.h index 9c30955630f..bc0218cb72e 100644 --- a/arch/sh/include/asm/machvec.h +++ b/arch/sh/include/asm/machvec.h @@ -49,6 +49,8 @@ struct sh_machine_vector {  	int (*mv_clk_init)(void);  	int (*mv_mode_pins)(void); + +	void (*mv_mem_init)(void);  };  extern struct sh_machine_vector sh_mv; diff --git a/arch/sh/include/asm/mmu.h b/arch/sh/include/asm/mmu.h index c7426ad9926..56e4418c19b 100644 --- a/arch/sh/include/asm/mmu.h +++ b/arch/sh/include/asm/mmu.h @@ -11,7 +11,9 @@  #define PMB_ADDR		0xf6100000  #define PMB_DATA		0xf7100000 -#define PMB_ENTRY_MAX		16 + +#define NR_PMB_ENTRIES		16 +  #define PMB_E_MASK		0x0000000f  #define PMB_E_SHIFT		8 @@ -25,11 +27,15 @@  #define PMB_C			0x00000008  #define PMB_WT			0x00000001  #define PMB_UB			0x00000200 +#define PMB_CACHE_MASK		(PMB_C | PMB_WT | PMB_UB)  #define PMB_V			0x00000100  #define PMB_NO_ENTRY		(-1)  #ifndef __ASSEMBLY__ +#include <linux/errno.h> +#include <linux/threads.h> +#include <asm/page.h>  /* Default "unsigned long" context */  typedef unsigned long mm_context_id_t[NR_CPUS]; @@ -47,29 +53,54 @@ typedef struct {  #endif  } mm_context_t; -struct pmb_entry; +#ifdef CONFIG_PMB +/* arch/sh/mm/pmb.c */ +bool __in_29bit_mode(void); -struct pmb_entry { -	unsigned long vpn; -	unsigned long ppn; -	unsigned long flags; +void pmb_init(void); +int pmb_bolt_mapping(unsigned long virt, phys_addr_t phys, +		     unsigned long size, pgprot_t prot); +void __iomem *pmb_remap_caller(phys_addr_t phys, unsigned long size, +			       pgprot_t prot, void *caller); +int pmb_unmap(void __iomem *addr); -	/* -	 * 0 .. NR_PMB_ENTRIES for specific entry selection, or -	 * PMB_NO_ENTRY to search for a free one -	 */ -	int entry; +#else -	struct pmb_entry *next; -	/* Adjacent entry link for contiguous multi-entry mappings */ -	struct pmb_entry *link; -}; +static inline int +pmb_bolt_mapping(unsigned long virt, phys_addr_t phys, +		 unsigned long size, pgprot_t prot) +{ +	return -EINVAL; +} + +static inline void __iomem * +pmb_remap_caller(phys_addr_t phys, unsigned long size, +		 pgprot_t prot, void *caller) +{ +	return NULL; +} + +static inline int pmb_unmap(void __iomem *addr) +{ +	return -EINVAL; +} + +#define pmb_init(addr)		do { } while (0) + +#ifdef CONFIG_29BIT +#define __in_29bit_mode()	(1) +#else +#define __in_29bit_mode()	(0) +#endif + +#endif /* CONFIG_PMB */ + +static inline void __iomem * +pmb_remap(phys_addr_t phys, unsigned long size, pgprot_t prot) +{ +	return pmb_remap_caller(phys, size, prot, __builtin_return_address(0)); +} -/* arch/sh/mm/pmb.c */ -long pmb_remap(unsigned long virt, unsigned long phys, -	       unsigned long size, unsigned long flags); -void pmb_unmap(unsigned long addr); -int pmb_init(void);  #endif /* __ASSEMBLY__ */  #endif /* __MMU_H */ diff --git a/arch/sh/include/asm/mmu_context.h b/arch/sh/include/asm/mmu_context.h index 41080b173a7..384c7471a37 100644 --- a/arch/sh/include/asm/mmu_context.h +++ b/arch/sh/include/asm/mmu_context.h @@ -158,7 +158,7 @@ static inline void enable_mmu(void)  	unsigned int cpu = smp_processor_id();  	/* Enable MMU */ -	ctrl_outl(MMU_CONTROL_INIT, MMUCR); +	__raw_writel(MMU_CONTROL_INIT, MMUCR);  	ctrl_barrier();  	if (asid_cache(cpu) == NO_CONTEXT) @@ -171,9 +171,9 @@ static inline void disable_mmu(void)  {  	unsigned long cr; -	cr = ctrl_inl(MMUCR); +	cr = __raw_readl(MMUCR);  	cr &= ~MMU_CONTROL_INIT; -	ctrl_outl(cr, MMUCR); +	__raw_writel(cr, MMUCR);  	ctrl_barrier();  } diff --git a/arch/sh/include/asm/mmu_context_32.h b/arch/sh/include/asm/mmu_context_32.h index 8ef800c549a..10e2e17210d 100644 --- a/arch/sh/include/asm/mmu_context_32.h +++ b/arch/sh/include/asm/mmu_context_32.h @@ -49,11 +49,11 @@ static inline unsigned long get_asid(void)  /* MMU_TTB is used for optimizing the fault handling. */  static inline void set_TTB(pgd_t *pgd)  { -	ctrl_outl((unsigned long)pgd, MMU_TTB); +	__raw_writel((unsigned long)pgd, MMU_TTB);  }  static inline pgd_t *get_TTB(void)  { -	return (pgd_t *)ctrl_inl(MMU_TTB); +	return (pgd_t *)__raw_readl(MMU_TTB);  }  #endif /* __ASM_SH_MMU_CONTEXT_32_H */ diff --git a/arch/sh/include/asm/mmzone.h b/arch/sh/include/asm/mmzone.h index 7f5363b29ba..8887baff5ef 100644 --- a/arch/sh/include/asm/mmzone.h +++ b/arch/sh/include/asm/mmzone.h @@ -42,9 +42,10 @@ setup_bootmem_node(int nid, unsigned long start, unsigned long end)  void __init plat_mem_setup(void);  /* arch/sh/kernel/setup.c */ -void __init setup_bootmem_allocator(unsigned long start_pfn);  void __init __add_active_range(unsigned int nid, unsigned long start_pfn,  			       unsigned long end_pfn); +/* arch/sh/mm/init.c */ +void __init allocate_pgdat(unsigned int nid);  #endif /* __KERNEL__ */  #endif /* __ASM_SH_MMZONE_H */ diff --git a/arch/sh/include/asm/module.h b/arch/sh/include/asm/module.h index 068bf165975..b7927de86f9 100644 --- a/arch/sh/include/asm/module.h +++ b/arch/sh/include/asm/module.h @@ -1,7 +1,22 @@  #ifndef _ASM_SH_MODULE_H  #define _ASM_SH_MODULE_H -#include <asm-generic/module.h> +struct mod_arch_specific { +#ifdef CONFIG_DWARF_UNWINDER +	struct list_head fde_list; +	struct list_head cie_list; +#endif +}; + +#ifdef CONFIG_64BIT +#define Elf_Shdr Elf64_Shdr +#define Elf_Sym Elf64_Sym +#define Elf_Ehdr Elf64_Ehdr +#else +#define Elf_Shdr Elf32_Shdr +#define Elf_Sym Elf32_Sym +#define Elf_Ehdr Elf32_Ehdr +#endif  #ifdef CONFIG_CPU_LITTLE_ENDIAN  # ifdef CONFIG_CPU_SH2 diff --git a/arch/sh/include/asm/page.h b/arch/sh/include/asm/page.h index 81bffc0d686..fb703d120d0 100644 --- a/arch/sh/include/asm/page.h +++ b/arch/sh/include/asm/page.h @@ -45,10 +45,11 @@  #endif  #ifndef __ASSEMBLY__ +#include <asm/uncached.h>  extern unsigned long shm_align_mask;  extern unsigned long max_low_pfn, min_low_pfn; -extern unsigned long memory_start, memory_end; +extern unsigned long memory_start, memory_end, memory_limit;  static inline unsigned long  pages_do_alias(unsigned long addr1, unsigned long addr2) @@ -56,7 +57,6 @@ pages_do_alias(unsigned long addr1, unsigned long addr2)  	return (addr1 ^ addr2) & shm_align_mask;  } -  #define clear_page(page)	memset((void *)(page), 0, PAGE_SIZE)  extern void copy_page(void *to, void *from); @@ -88,7 +88,7 @@ typedef struct { unsigned long pgd; } pgd_t;  #define __pte(x)	((pte_t) { (x) } )  #else  typedef struct { unsigned long long pte_low; } pte_t; -typedef struct { unsigned long pgprot; } pgprot_t; +typedef struct { unsigned long long pgprot; } pgprot_t;  typedef struct { unsigned long pgd; } pgd_t;  #define pte_val(x)	((x).pte_low)  #define __pte(x)	((pte_t) { (x) } ) @@ -127,17 +127,25 @@ typedef struct page *pgtable_t;   * is not visible (it is part of the PMB mapping) and so needs to be   * added or subtracted as required.   */ -#if defined(CONFIG_PMB_FIXED) -/* phys = virt - PAGE_OFFSET - (__MEMORY_START & 0xe0000000) */ -#define PMB_OFFSET	(PAGE_OFFSET - PXSEG(__MEMORY_START)) -#define __pa(x)	((unsigned long)(x) - PMB_OFFSET) -#define __va(x)	((void *)((unsigned long)(x) + PMB_OFFSET)) -#elif defined(CONFIG_32BIT) -#define __pa(x)	((unsigned long)(x)-PAGE_OFFSET+__MEMORY_START) -#define __va(x)	((void *)((unsigned long)(x)+PAGE_OFFSET-__MEMORY_START)) +#ifdef CONFIG_PMB +#define ___pa(x)	((x)-PAGE_OFFSET+__MEMORY_START) +#define ___va(x)	((x)+PAGE_OFFSET-__MEMORY_START) +#else +#define ___pa(x)	((x)-PAGE_OFFSET) +#define ___va(x)	((x)+PAGE_OFFSET) +#endif + +#ifndef __ASSEMBLY__ +#define __pa(x)		___pa((unsigned long)x) +#define __va(x)		(void *)___va((unsigned long)x) +#endif /* !__ASSEMBLY__ */ + +#ifdef CONFIG_UNCACHED_MAPPING +#define UNCAC_ADDR(addr)	((addr) - PAGE_OFFSET + uncached_start) +#define CAC_ADDR(addr)		((addr) - uncached_start + PAGE_OFFSET)  #else -#define __pa(x)	((unsigned long)(x)-PAGE_OFFSET) -#define __va(x)	((void *)((unsigned long)(x)+PAGE_OFFSET)) +#define UNCAC_ADDR(addr)	((addr)) +#define CAC_ADDR(addr)		((addr))  #endif  #define pfn_to_kaddr(pfn)	__va((pfn) << PAGE_SHIFT) diff --git a/arch/sh/include/asm/pci.h b/arch/sh/include/asm/pci.h index 67f3999b544..8bd952fcf3b 100644 --- a/arch/sh/include/asm/pci.h +++ b/arch/sh/include/asm/pci.h @@ -15,20 +15,49 @@   */  struct pci_channel {  	struct pci_channel	*next; +	struct pci_bus		*bus;  	struct pci_ops		*pci_ops; -	struct resource		*io_resource; -	struct resource		*mem_resource; + +	struct resource		*resources; +	unsigned int		nr_resources;  	unsigned long		io_offset;  	unsigned long		mem_offset;  	unsigned long		reg_base; -  	unsigned long		io_map_base; + +	unsigned int		index; +	unsigned int		need_domain_info; + +	/* Optional error handling */ +	struct timer_list	err_timer, serr_timer; +	unsigned int		err_irq, serr_irq;  }; -extern void register_pci_controller(struct pci_channel *hose); +/* arch/sh/drivers/pci/pci.c */ +extern int register_pci_controller(struct pci_channel *hose); +extern void pcibios_report_status(unsigned int status_mask, int warn); + +/* arch/sh/drivers/pci/common.c */ +extern int early_read_config_byte(struct pci_channel *hose, int top_bus, +				  int bus, int devfn, int offset, u8 *value); +extern int early_read_config_word(struct pci_channel *hose, int top_bus, +				  int bus, int devfn, int offset, u16 *value); +extern int early_read_config_dword(struct pci_channel *hose, int top_bus, +				   int bus, int devfn, int offset, u32 *value); +extern int early_write_config_byte(struct pci_channel *hose, int top_bus, +				   int bus, int devfn, int offset, u8 value); +extern int early_write_config_word(struct pci_channel *hose, int top_bus, +				   int bus, int devfn, int offset, u16 value); +extern int early_write_config_dword(struct pci_channel *hose, int top_bus, +				    int bus, int devfn, int offset, u32 value); +extern void pcibios_enable_timers(struct pci_channel *hose); +extern unsigned int pcibios_handle_status_errors(unsigned long addr, +				 unsigned int status, struct pci_channel *hose); +extern int pci_is_66mhz_capable(struct pci_channel *hose, +				int top_bus, int current_bus);  extern unsigned long PCIBIOS_MIN_IO, PCIBIOS_MIN_MEM; @@ -54,25 +83,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)   */  #define PCI_DMA_BUS_IS_PHYS	(dma_ops->is_phys) -/* pci_unmap_{single,page} being a nop depends upon the - * configuration. - */ -#ifdef CONFIG_DMA_NONCOHERENT -#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)	dma_addr_t ADDR_NAME; -#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)		__u32 LEN_NAME; -#define pci_unmap_addr(PTR, ADDR_NAME)		((PTR)->ADDR_NAME) -#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL)	(((PTR)->ADDR_NAME) = (VAL)) -#define pci_unmap_len(PTR, LEN_NAME)		((PTR)->LEN_NAME) -#define pci_unmap_len_set(PTR, LEN_NAME, VAL)	(((PTR)->LEN_NAME) = (VAL)) -#else -#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) -#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) -#define pci_unmap_addr(PTR, ADDR_NAME)		(0) -#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL)	do { } while (0) -#define pci_unmap_len(PTR, LEN_NAME)		(0) -#define pci_unmap_len_set(PTR, LEN_NAME, VAL)	do { } while (0) -#endif -  #ifdef CONFIG_PCI  /*   * None of the SH PCI controllers support MWI, it is always treated as a @@ -99,20 +109,6 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,  }  #endif -#ifdef CONFIG_SUPERH32 -/* - * If we're on an SH7751 or SH7780 PCI controller, PCI memory is mapped - * at the end of the address space in a special non-translatable area. - */ -#define PCI_MEM_FIXED_START	0xfd000000 -#define PCI_MEM_FIXED_END	(PCI_MEM_FIXED_START + 0x01000000) - -#define is_pci_memory_fixed_range(s, e)	\ -	((s) >= PCI_MEM_FIXED_START && (e) < PCI_MEM_FIXED_END) -#else -#define is_pci_memory_fixed_range(s, e)	(0) -#endif -  /* Board-specific fixup routines. */  int pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin); @@ -122,6 +118,14 @@ extern void pcibios_resource_to_bus(struct pci_dev *dev,  extern void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,  				    struct pci_bus_region *region); +#define pci_domain_nr(bus) ((struct pci_channel *)(bus)->sysdata)->index + +static inline int pci_proc_domain(struct pci_bus *bus) +{ +	struct pci_channel *hose = bus->sysdata; +	return hose->need_domain_info; +} +  /* Chances are this interrupt is wired PC-style ...  */  static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)  { diff --git a/arch/sh/include/asm/pgalloc.h b/arch/sh/include/asm/pgalloc.h index 63ca37bd9a9..8c00785c60d 100644 --- a/arch/sh/include/asm/pgalloc.h +++ b/arch/sh/include/asm/pgalloc.h @@ -4,8 +4,16 @@  #include <linux/quicklist.h>  #include <asm/page.h> -#define QUICK_PGD 0	/* We preserve special mappings over free */ -#define QUICK_PT 1	/* Other page table pages that are zero on free */ +#define QUICK_PT 0	/* Other page table pages that are zero on free */ + +extern pgd_t *pgd_alloc(struct mm_struct *); +extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); + +#if PAGETABLE_LEVELS > 2 +extern void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd); +extern pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address); +extern void pmd_free(struct mm_struct *mm, pmd_t *pmd); +#endif  static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,  				       pte_t *pte) @@ -20,28 +28,9 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,  }  #define pmd_pgtable(pmd) pmd_page(pmd) -static inline void pgd_ctor(void *x) -{ -	pgd_t *pgd = x; - -	memcpy(pgd + USER_PTRS_PER_PGD, -	       swapper_pg_dir + USER_PTRS_PER_PGD, -	       (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); -} -  /*   * Allocate and free page tables.   */ -static inline pgd_t *pgd_alloc(struct mm_struct *mm) -{ -	return quicklist_alloc(QUICK_PGD, GFP_KERNEL | __GFP_REPEAT, pgd_ctor); -} - -static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) -{ -	quicklist_free(QUICK_PGD, NULL, pgd); -} -  static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,  					  unsigned long address)  { @@ -81,7 +70,6 @@ do {							\  static inline void check_pgt_cache(void)  { -	quicklist_trim(QUICK_PGD, NULL, 25, 16);  	quicklist_trim(QUICK_PT, NULL, 25, 16);  } diff --git a/arch/sh/include/asm/pgtable-2level.h b/arch/sh/include/asm/pgtable-2level.h new file mode 100644 index 00000000000..19bd89db17e --- /dev/null +++ b/arch/sh/include/asm/pgtable-2level.h @@ -0,0 +1,23 @@ +#ifndef __ASM_SH_PGTABLE_2LEVEL_H +#define __ASM_SH_PGTABLE_2LEVEL_H + +#include <asm-generic/pgtable-nopmd.h> + +/* + * traditional two-level paging structure + */ +#define PAGETABLE_LEVELS	2 + +/* PTE bits */ +#define PTE_MAGNITUDE		2	/* 32-bit PTEs */ + +#define PTE_SHIFT		PAGE_SHIFT +#define PTE_BITS		(PTE_SHIFT - PTE_MAGNITUDE) + +/* PGD bits */ +#define PGDIR_SHIFT		(PTE_SHIFT + PTE_BITS) + +#define PTRS_PER_PGD		(PAGE_SIZE / (1 << PTE_MAGNITUDE)) +#define USER_PTRS_PER_PGD	(TASK_SIZE/PGDIR_SIZE) + +#endif /* __ASM_SH_PGTABLE_2LEVEL_H */ diff --git a/arch/sh/include/asm/pgtable-3level.h b/arch/sh/include/asm/pgtable-3level.h new file mode 100644 index 00000000000..249a985d964 --- /dev/null +++ b/arch/sh/include/asm/pgtable-3level.h @@ -0,0 +1,56 @@ +#ifndef __ASM_SH_PGTABLE_3LEVEL_H +#define __ASM_SH_PGTABLE_3LEVEL_H + +#include <asm-generic/pgtable-nopud.h> + +/* + * Some cores need a 3-level page table layout, for example when using + * 64-bit PTEs and 4K pages. + */ +#define PAGETABLE_LEVELS	3 + +#define PTE_MAGNITUDE		3	/* 64-bit PTEs on SH-X2 TLB */ + +/* PGD bits */ +#define PGDIR_SHIFT		30 + +#define PTRS_PER_PGD		4 +#define USER_PTRS_PER_PGD	2 + +/* PMD bits */ +#define PMD_SHIFT	(PAGE_SHIFT + (PAGE_SHIFT - PTE_MAGNITUDE)) +#define PMD_SIZE	(1UL << PMD_SHIFT) +#define PMD_MASK	(~(PMD_SIZE-1)) + +#define PTRS_PER_PMD	((1 << PGDIR_SHIFT) / PMD_SIZE) + +#define pmd_ERROR(e) \ +	printk("%s:%d: bad pmd %016llx.\n", __FILE__, __LINE__, pmd_val(e)) + +typedef struct { unsigned long long pmd; } pmd_t; +#define pmd_val(x)	((x).pmd) +#define __pmd(x)	((pmd_t) { (x) } ) + +static inline unsigned long pud_page_vaddr(pud_t pud) +{ +	return pud_val(pud); +} + +#define pmd_index(address)	(((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1)) +static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address) +{ +	return (pmd_t *)pud_page_vaddr(*pud) + pmd_index(address); +} + +#define pud_none(x)	(!pud_val(x)) +#define pud_present(x)	(pud_val(x)) +#define pud_clear(xp)	do { set_pud(xp, __pud(0)); } while (0) +#define	pud_bad(x)	(pud_val(x) & ~PAGE_MASK) + +/* + * (puds are folded into pgds so this doesn't get actually called, + * but the define is needed for a generic inline function.) + */ +#define set_pud(pudptr, pudval) do { *(pudptr) = (pudval); } while(0) + +#endif /* __ASM_SH_PGTABLE_3LEVEL_H */ diff --git a/arch/sh/include/asm/pgtable.h b/arch/sh/include/asm/pgtable.h index ba3046e4f06..02f77450cd8 100644 --- a/arch/sh/include/asm/pgtable.h +++ b/arch/sh/include/asm/pgtable.h @@ -12,7 +12,11 @@  #ifndef __ASM_SH_PGTABLE_H  #define __ASM_SH_PGTABLE_H -#include <asm-generic/pgtable-nopmd.h> +#ifdef CONFIG_X2TLB +#include <asm/pgtable-3level.h> +#else +#include <asm/pgtable-2level.h> +#endif  #include <asm/page.h>  #ifndef __ASSEMBLY__ @@ -51,28 +55,12 @@ static inline unsigned long long neff_sign_extend(unsigned long val)  #define	NPHYS_SIGN	(1LL << (NPHYS - 1))  #define	NPHYS_MASK	(-1LL << NPHYS) -/* - * traditional two-level paging structure - */ -/* PTE bits */ -#if defined(CONFIG_X2TLB) || defined(CONFIG_SUPERH64) -# define PTE_MAGNITUDE	3	/* 64-bit PTEs on extended mode SH-X2 TLB */ -#else -# define PTE_MAGNITUDE	2	/* 32-bit PTEs */ -#endif -#define PTE_SHIFT	PAGE_SHIFT -#define PTE_BITS	(PTE_SHIFT - PTE_MAGNITUDE) - -/* PGD bits */ -#define PGDIR_SHIFT	(PTE_SHIFT + PTE_BITS)  #define PGDIR_SIZE	(1UL << PGDIR_SHIFT)  #define PGDIR_MASK	(~(PGDIR_SIZE-1))  /* Entries per level */  #define PTRS_PER_PTE	(PAGE_SIZE / (1 << PTE_MAGNITUDE)) -#define PTRS_PER_PGD	(PAGE_SIZE / sizeof(pgd_t)) -#define USER_PTRS_PER_PGD	(TASK_SIZE/PGDIR_SIZE)  #define FIRST_USER_ADDRESS	0  #define PHYS_ADDR_MASK29		0x1fffffff @@ -153,9 +141,9 @@ typedef pte_t *pte_addr_t;  #define pte_pfn(x)		((unsigned long)(((x).pte_low >> PAGE_SHIFT)))  /* - * No page table caches to initialise + * Initialise the page table caches   */ -#define pgtable_cache_init()	do { } while (0) +extern void pgtable_cache_init(void);  struct vm_area_struct; @@ -165,8 +153,9 @@ extern void __update_tlb(struct vm_area_struct *vma,  			 unsigned long address, pte_t pte);  static inline void -update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t pte) +update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *ptep)  { +	pte_t pte = *ptep;  	__update_cache(vma, address, pte);  	__update_tlb(vma, address, pte);  } diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable_32.h index 5003ee86f67..e172d696e52 100644 --- a/arch/sh/include/asm/pgtable_32.h +++ b/arch/sh/include/asm/pgtable_32.h @@ -71,6 +71,8 @@  #define _PAGE_EXT_KERN_WRITE	0x1000	/* EPR4-bit: Kernel space writable */  #define _PAGE_EXT_KERN_READ	0x2000	/* EPR5-bit: Kernel space readable */ +#define _PAGE_EXT_WIRED		0x4000	/* software: Wire TLB entry */ +  /* Wrapper for extended mode pgprot twiddling */  #define _PAGE_EXT(x)		((unsigned long long)(x) << 32) @@ -141,12 +143,14 @@ static inline unsigned long copy_ptea_attributes(unsigned long x)  # elif defined(CONFIG_HUGETLB_PAGE_SIZE_64MB)  #  define _PAGE_SZHUGE	(_PAGE_EXT_ESZ2 | _PAGE_EXT_ESZ3)  # endif +# define _PAGE_WIRED	(_PAGE_EXT(_PAGE_EXT_WIRED))  #else  # if defined(CONFIG_HUGETLB_PAGE_SIZE_64K)  #  define _PAGE_SZHUGE	(_PAGE_SZ1)  # elif defined(CONFIG_HUGETLB_PAGE_SIZE_1MB)  #  define _PAGE_SZHUGE	(_PAGE_SZ0 | _PAGE_SZ1)  # endif +# define _PAGE_WIRED	(0)  #endif  /* diff --git a/arch/sh/include/asm/pgtable_64.h b/arch/sh/include/asm/pgtable_64.h index 17cdbecc3ad..0ee46776dad 100644 --- a/arch/sh/include/asm/pgtable_64.h +++ b/arch/sh/include/asm/pgtable_64.h @@ -43,11 +43,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)  }  #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) -static __inline__ void pmd_set(pmd_t *pmdp,pte_t *ptep) -{ -	pmd_val(*pmdp) = (unsigned long) ptep; -} -  /*   * PGD defines. Top level.   */ @@ -128,8 +123,21 @@ static __inline__ void pmd_set(pmd_t *pmdp,pte_t *ptep)  #define _PAGE_DIRTY	0x400  /* software: page accessed in write */  #define _PAGE_ACCESSED	0x800  /* software: page referenced */ +/* Wrapper for extended mode pgprot twiddling */ +#define _PAGE_EXT(x)		((unsigned long long)(x) << 32) + +/* + * We can use the sign-extended bits in the PTEL to get 32 bits of + * software flags. This works for now because no implementations uses + * anything above the PPN field. + */ +#define _PAGE_WIRED	_PAGE_EXT(0x001) /* software: wire the tlb entry */ + +#define _PAGE_CLEAR_FLAGS	(_PAGE_PRESENT | _PAGE_FILE | _PAGE_SHARED | \ +				 _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_WIRED) +  /* Mask which drops software flags */ -#define _PAGE_FLAGS_HARDWARE_MASK	0xfffffffffffff3dbLL +#define _PAGE_FLAGS_HARDWARE_MASK	(NEFF_MASK & ~(_PAGE_CLEAR_FLAGS))  /*   * HugeTLB support @@ -203,12 +211,6 @@ static __inline__ void pmd_set(pmd_t *pmdp,pte_t *ptep)  #define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~_PAGE_CACHABLE)  /* - * Handling allocation failures during page table setup. - */ -extern void __handle_bad_pmd_kernel(pmd_t * pmd); -#define __handle_bad_pmd(x)	__handle_bad_pmd_kernel(x) - -/*   * PTE level access routines.   *   * Note1: diff --git a/arch/sh/include/asm/processor.h b/arch/sh/include/asm/processor.h index 017e0c1807b..0a58cb25a65 100644 --- a/arch/sh/include/asm/processor.h +++ b/arch/sh/include/asm/processor.h @@ -85,6 +85,10 @@ struct sh_cpuinfo {  	struct tlb_info itlb;  	struct tlb_info dtlb; +#ifdef CONFIG_SMP +	struct task_struct *idle; +#endif +  	unsigned long flags;  } __attribute__ ((aligned(L1_CACHE_BYTES))); @@ -98,13 +102,37 @@ extern struct sh_cpuinfo cpu_data[];  /* Forward decl */  struct seq_operations; +struct task_struct;  extern struct pt_regs fake_swapper_regs; +extern void cpu_init(void); +extern void cpu_probe(void); + +/* arch/sh/kernel/process.c */ +extern unsigned int xstate_size; +extern void free_thread_xstate(struct task_struct *); +extern struct kmem_cache *task_xstate_cachep; + +/* arch/sh/mm/alignment.c */ +extern int get_unalign_ctl(struct task_struct *, unsigned long addr); +extern int set_unalign_ctl(struct task_struct *, unsigned int val); + +#define GET_UNALIGN_CTL(tsk, addr)	get_unalign_ctl((tsk), (addr)) +#define SET_UNALIGN_CTL(tsk, val)	set_unalign_ctl((tsk), (val)) + +/* arch/sh/mm/init.c */ +extern unsigned int mem_init_done; +  /* arch/sh/kernel/setup.c */  const char *get_cpu_subtype(struct sh_cpuinfo *c);  extern const struct seq_operations cpuinfo_op; +/* thread_struct flags */ +#define SH_THREAD_UAC_NOPRINT	(1 << 0) +#define SH_THREAD_UAC_SIGBUS	(1 << 1) +#define SH_THREAD_UAC_MASK	(SH_THREAD_UAC_NOPRINT | SH_THREAD_UAC_SIGBUS) +  /* processor boot mode configuration */  #define MODE_PIN0 (1 << 0)  #define MODE_PIN1 (1 << 1) diff --git a/arch/sh/include/asm/processor_32.h b/arch/sh/include/asm/processor_32.h index 1f3d6fab660..61a445d2d02 100644 --- a/arch/sh/include/asm/processor_32.h +++ b/arch/sh/include/asm/processor_32.h @@ -14,6 +14,7 @@  #include <asm/page.h>  #include <asm/types.h>  #include <asm/ptrace.h> +#include <asm/hw_breakpoint.h>  /*   * Default implementation of macro that returns current @@ -26,8 +27,6 @@  #define CCN_CVR		0xff000040  #define CCN_PRR		0xff000044 -asmlinkage void __init sh_cpu_init(void); -  /*   * User space process size: 2GB.   * @@ -90,9 +89,9 @@ struct sh_fpu_soft_struct {  	unsigned long entry_pc;  }; -union sh_fpu_union { -	struct sh_fpu_hard_struct hard; -	struct sh_fpu_soft_struct soft; +union thread_xstate { +	struct sh_fpu_hard_struct hardfpu; +	struct sh_fpu_soft_struct softfpu;  };  struct thread_struct { @@ -100,38 +99,30 @@ struct thread_struct {  	unsigned long sp;  	unsigned long pc; -	/* Hardware debugging registers */ -	unsigned long ubc_pc; +	/* Various thread flags, see SH_THREAD_xxx */ +	unsigned long flags; -	/* floating point info */ -	union sh_fpu_union fpu; +	/* Save middle states of ptrace breakpoints */ +	struct perf_event *ptrace_bps[HBP_NUM];  #ifdef CONFIG_SH_DSP  	/* Dsp status information */  	struct sh_dsp_struct dsp_status;  #endif -}; -/* Count of active tasks with UBC settings */ -extern int ubc_usercnt; +	/* Extended processor state */ +	union thread_xstate *xstate; +};  #define INIT_THREAD  {						\  	.sp = sizeof(init_stack) + (long) &init_stack,		\ +	.flags = 0,						\  } -/* - * Do necessary setup to start up a newly executed thread. - */ -#define start_thread(_regs, new_pc, new_sp)	 \ -	set_fs(USER_DS);			 \ -	_regs->pr = 0;				 \ -	_regs->sr = SR_FD;	/* User mode. */ \ -	_regs->pc = new_pc;			 \ -	_regs->regs[15] = new_sp -  /* Forward declaration, a strange C thing */  struct task_struct; -struct mm_struct; + +extern void start_thread(struct pt_regs *regs, unsigned long new_pc, unsigned long new_sp);  /* Free all resources held by a thread. */  extern void release_thread(struct task_struct *); diff --git a/arch/sh/include/asm/processor_64.h b/arch/sh/include/asm/processor_64.h index 5727d31b0cc..621bc4618c6 100644 --- a/arch/sh/include/asm/processor_64.h +++ b/arch/sh/include/asm/processor_64.h @@ -87,26 +87,31 @@ struct sh_fpu_hard_struct {  	/* long status; * software status information */  }; -#if 0  /* Dummy fpu emulator  */  struct sh_fpu_soft_struct { -	unsigned long long fp_regs[32]; +	unsigned long fp_regs[64];  	unsigned int fpscr;  	unsigned char lookahead;  	unsigned long entry_pc;  }; -#endif -union sh_fpu_union { -	struct sh_fpu_hard_struct hard; -	/* 'hard' itself only produces 32 bit alignment, yet we need -	   to access it using 64 bit load/store as well. */ +union thread_xstate { +	struct sh_fpu_hard_struct hardfpu; +	struct sh_fpu_soft_struct softfpu; +	/* +	 * The structure definitions only produce 32 bit alignment, yet we need +	 * to access them using 64 bit load/store as well. +	 */  	unsigned long long alignment_dummy;  };  struct thread_struct {  	unsigned long sp;  	unsigned long pc; + +	/* Various thread flags, see SH_THREAD_xxx */ +	unsigned long flags; +  	/* This stores the address of the pt_regs built during a context  	   switch, or of the register save area built for a kernel mode  	   exception.  It is used for backtracing the stack of a sleeping task @@ -122,7 +127,7 @@ struct thread_struct {  	/* Hardware debugging registers may come here */  	/* floating point info */ -	union sh_fpu_union fpu; +	union thread_xstate *xstate;  };  #define INIT_MMAP \ @@ -137,7 +142,7 @@ struct thread_struct {  	.trap_no	= 0,			\  	.error_code	= 0,			\  	.address	= 0,			\ -	.fpu		= { { { 0, } }, }	\ +	.flags		= 0,			\  }  /* diff --git a/arch/sh/include/asm/ptrace.h b/arch/sh/include/asm/ptrace.h index 1dc12cb44a2..2168fde2561 100644 --- a/arch/sh/include/asm/ptrace.h +++ b/arch/sh/include/asm/ptrace.h @@ -102,13 +102,15 @@ struct pt_dspregs {  #define	PTRACE_GETDSPREGS	55	/* DSP registers */  #define	PTRACE_SETDSPREGS	56 -#define PT_TEXT_END_ADDR 	240 -#define PT_TEXT_ADDR 		244	/* &(struct user)->start_code */ -#define PT_DATA_ADDR 		248	/* &(struct user)->start_data */ +#define PT_TEXT_END_ADDR	240 +#define PT_TEXT_ADDR		244	/* &(struct user)->start_code */ +#define PT_DATA_ADDR		248	/* &(struct user)->start_data */  #define PT_TEXT_LEN		252  #ifdef __KERNEL__  #include <asm/addrspace.h> +#include <asm/page.h> +#include <asm/system.h>  #define user_mode(regs)			(((regs)->sr & 0x40000000)==0)  #define instruction_pointer(regs)	((unsigned long)(regs)->pc) @@ -121,8 +123,12 @@ extern void show_regs(struct pt_regs *);  struct task_struct;  #define arch_has_single_step()	(1) -extern void user_enable_single_step(struct task_struct *); -extern void user_disable_single_step(struct task_struct *); + +struct perf_event; +struct perf_sample_data; + +extern void ptrace_triggered(struct perf_event *bp, int nmi, +		      struct perf_sample_data *data, struct pt_regs *regs);  #define task_pt_regs(task) \  	((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE) - 1) @@ -131,10 +137,8 @@ static inline unsigned long profile_pc(struct pt_regs *regs)  {  	unsigned long pc = instruction_pointer(regs); -#ifdef P2SEG -	if (pc >= P2SEG && pc < P3SEG) -		pc -= 0x20000000; -#endif +	if (virt_addr_uncached(pc)) +		return CAC_ADDR(pc);  	return pc;  } diff --git a/arch/sh/include/asm/reboot.h b/arch/sh/include/asm/reboot.h new file mode 100644 index 00000000000..b3da0c63fc3 --- /dev/null +++ b/arch/sh/include/asm/reboot.h @@ -0,0 +1,21 @@ +#ifndef __ASM_SH_REBOOT_H +#define __ASM_SH_REBOOT_H + +#include <linux/kdebug.h> + +struct pt_regs; + +struct machine_ops { +	void (*restart)(char *cmd); +	void (*halt)(void); +	void (*power_off)(void); +	void (*shutdown)(void); +	void (*crash_shutdown)(struct pt_regs *); +}; + +extern struct machine_ops machine_ops; + +/* arch/sh/kernel/machine_kexec.c */ +void native_machine_crash_shutdown(struct pt_regs *regs); + +#endif /* __ASM_SH_REBOOT_H */ diff --git a/arch/sh/include/asm/setup.h b/arch/sh/include/asm/setup.h index ce3743599b2..01fa17a3d75 100644 --- a/arch/sh/include/asm/setup.h +++ b/arch/sh/include/asm/setup.h @@ -18,8 +18,8 @@  /* ... */  #define COMMAND_LINE ((char *) (PARAM+0x100)) -int setup_early_printk(char *);  void sh_mv_setup(void); +void check_for_initrd(void);  #endif /* __KERNEL__ */ diff --git a/arch/sh/include/asm/sh_bios.h b/arch/sh/include/asm/sh_bios.h index d9c96d7cf6c..95714c28422 100644 --- a/arch/sh/include/asm/sh_bios.h +++ b/arch/sh/include/asm/sh_bios.h @@ -1,18 +1,27 @@  #ifndef __ASM_SH_BIOS_H  #define __ASM_SH_BIOS_H +#ifdef CONFIG_SH_STANDARD_BIOS +  /*   * Copyright (C) 2000 Greg Banks, Mitch Davis   * C API to interface to the standard LinuxSH BIOS   * usually from within the early stages of kernel boot.   */ - -  extern void sh_bios_console_write(const char *buf, unsigned int len); -extern void sh_bios_char_out(char ch);  extern void sh_bios_gdb_detach(void);  extern void sh_bios_get_node_addr(unsigned char *node_addr);  extern void sh_bios_shutdown(unsigned int how); +extern void sh_bios_vbr_init(void); +extern void sh_bios_vbr_reload(void); + +#else + +static inline void sh_bios_vbr_init(void) { } +static inline void sh_bios_vbr_reload(void) { } + +#endif /* CONFIG_SH_STANDARD_BIOS */ +  #endif /* __ASM_SH_BIOS_H */ diff --git a/arch/sh/include/asm/siu.h b/arch/sh/include/asm/siu.h new file mode 100644 index 00000000000..1d95c78808d --- /dev/null +++ b/arch/sh/include/asm/siu.h @@ -0,0 +1,24 @@ +/* + * platform header for the SIU ASoC driver + * + * Copyright (C) 2009-2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef ASM_SIU_H +#define ASM_SIU_H + +struct device; + +struct siu_platform { +	struct device *dma_dev; +	unsigned int dma_slave_tx_a; +	unsigned int dma_slave_rx_a; +	unsigned int dma_slave_tx_b; +	unsigned int dma_slave_rx_b; +}; + +#endif /* ASM_SIU_H */ diff --git a/arch/sh/include/asm/smp-ops.h b/arch/sh/include/asm/smp-ops.h new file mode 100644 index 00000000000..c590f76856f --- /dev/null +++ b/arch/sh/include/asm/smp-ops.h @@ -0,0 +1,51 @@ +#ifndef __ASM_SH_SMP_OPS_H +#define __ASM_SH_SMP_OPS_H + +struct plat_smp_ops { +	void (*smp_setup)(void); +	unsigned int (*smp_processor_id)(void); +	void (*prepare_cpus)(unsigned int max_cpus); +	void (*start_cpu)(unsigned int cpu, unsigned long entry_point); +	void (*send_ipi)(unsigned int cpu, unsigned int message); +	int (*cpu_disable)(unsigned int cpu); +	void (*cpu_die)(unsigned int cpu); +	void (*play_dead)(void); +}; + +extern struct plat_smp_ops *mp_ops; +extern struct plat_smp_ops shx3_smp_ops; + +#ifdef CONFIG_SMP + +static inline void plat_smp_setup(void) +{ +	BUG_ON(!mp_ops); +	mp_ops->smp_setup(); +} + +static inline void play_dead(void) +{ +	mp_ops->play_dead(); +} + +extern void register_smp_ops(struct plat_smp_ops *ops); + +#else + +static inline void plat_smp_setup(void) +{ +	/* UP, nothing to do ... */ +} + +static inline void register_smp_ops(struct plat_smp_ops *ops) +{ +} + +static inline void play_dead(void) +{ +	BUG(); +} + +#endif /* CONFIG_SMP */ + +#endif /* __ASM_SH_SMP_OPS_H */ diff --git a/arch/sh/include/asm/smp.h b/arch/sh/include/asm/smp.h index 53ef26ced75..9070d943ddd 100644 --- a/arch/sh/include/asm/smp.h +++ b/arch/sh/include/asm/smp.h @@ -3,15 +3,16 @@  #include <linux/bitops.h>  #include <linux/cpumask.h> +#include <asm/smp-ops.h>  #ifdef CONFIG_SMP  #include <linux/spinlock.h>  #include <asm/atomic.h>  #include <asm/current.h> +#include <asm/percpu.h>  #define raw_smp_processor_id()	(current_thread_info()->cpu) -#define hard_smp_processor_id()	plat_smp_processor_id()  /* Map from cpu id to sequential logical cpu number. */  extern int __cpu_number_map[NR_CPUS]; @@ -30,20 +31,43 @@ enum {  	SMP_MSG_NR,	/* must be last */  }; +DECLARE_PER_CPU(int, cpu_state); +  void smp_message_recv(unsigned int msg);  void smp_timer_broadcast(const struct cpumask *mask);  void local_timer_interrupt(void);  void local_timer_setup(unsigned int cpu); - -void plat_smp_setup(void); -void plat_prepare_cpus(unsigned int max_cpus); -int plat_smp_processor_id(void); -void plat_start_cpu(unsigned int cpu, unsigned long entry_point); -void plat_send_ipi(unsigned int cpu, unsigned int message); +void local_timer_stop(unsigned int cpu);  void arch_send_call_function_single_ipi(int cpu); -extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); +void arch_send_call_function_ipi_mask(const struct cpumask *mask); + +void native_play_dead(void); +void native_cpu_die(unsigned int cpu); +int native_cpu_disable(unsigned int cpu); + +#ifdef CONFIG_HOTPLUG_CPU +void play_dead_common(void); +extern int __cpu_disable(void); + +static inline void __cpu_die(unsigned int cpu) +{ +	extern struct plat_smp_ops *mp_ops;     /* private */ + +	mp_ops->cpu_die(cpu); +} +#endif + +static inline int hard_smp_processor_id(void) +{ +	extern struct plat_smp_ops *mp_ops;	/* private */ + +	if (!mp_ops) +		return 0;	/* boot CPU */ + +	return mp_ops->smp_processor_id(); +}  #else diff --git a/arch/sh/include/asm/suspend.h b/arch/sh/include/asm/suspend.h index fe9c2a1ad04..64eb41a063e 100644 --- a/arch/sh/include/asm/suspend.h +++ b/arch/sh/include/asm/suspend.h @@ -92,5 +92,6 @@ extern unsigned long sh_mobile_sleep_supported;  #define SUSP_SH_USTANDBY	(1 << 3) /* SH-Mobile U-standby mode */  #define SUSP_SH_SF		(1 << 4) /* Enable self-refresh */  #define SUSP_SH_MMU		(1 << 5) /* Save/restore MMU and cache */ +#define SUSP_SH_REGS		(1 << 6) /* Save/restore registers */  #endif /* _ASM_SH_SUSPEND_H */ diff --git a/arch/sh/include/asm/syscall.h b/arch/sh/include/asm/syscall.h index 6a381429ee9..aa7777bdc37 100644 --- a/arch/sh/include/asm/syscall.h +++ b/arch/sh/include/asm/syscall.h @@ -1,6 +1,8 @@  #ifndef __ASM_SH_SYSCALL_H  #define __ASM_SH_SYSCALL_H +extern const unsigned long sys_call_table[]; +  #ifdef CONFIG_SUPERH32  # include "syscall_32.h"  #else diff --git a/arch/sh/include/asm/syscalls.h b/arch/sh/include/asm/syscalls.h index c1e2b8deb83..507725af2e5 100644 --- a/arch/sh/include/asm/syscalls.h +++ b/arch/sh/include/asm/syscalls.h @@ -3,17 +3,12 @@  #ifdef __KERNEL__ -struct old_utsname; -  asmlinkage int old_mmap(unsigned long addr, unsigned long len,  			unsigned long prot, unsigned long flags,  			int fd, unsigned long off);  asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,  			  unsigned long prot, unsigned long flags,  			  unsigned long fd, unsigned long pgoff); -asmlinkage int sys_ipc(uint call, int first, int second, -		       int third, void __user *ptr, long fifth); -asmlinkage int sys_uname(struct old_utsname __user *name);  #ifdef CONFIG_SUPERH32  # include "syscalls_32.h" diff --git a/arch/sh/include/asm/system.h b/arch/sh/include/asm/system.h index c15415b4b16..0bd7a17d5e1 100644 --- a/arch/sh/include/asm/system.h +++ b/arch/sh/include/asm/system.h @@ -10,7 +10,6 @@  #include <linux/compiler.h>  #include <linux/linkage.h>  #include <asm/types.h> -#include <asm/ptrace.h>  #define AT_VECTOR_SIZE_ARCH 5 /* entries in ARCH_DLINFO */ @@ -32,7 +31,7 @@  #define mb()		__asm__ __volatile__ ("synco": : :"memory")  #define rmb()		mb()  #define wmb()		__asm__ __volatile__ ("synco": : :"memory") -#define ctrl_barrier()	__icbi(0xa8000000) +#define ctrl_barrier()	__icbi(PAGE_OFFSET)  #define read_barrier_depends()	do { } while(0)  #else  #define mb()		__asm__ __volatile__ ("": : :"memory") @@ -114,6 +113,8 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,  				    (unsigned long)_n_, sizeof(*(ptr))); \    }) +struct pt_regs; +  extern void die(const char *str, struct pt_regs *regs, long err) __attribute__ ((noreturn));  void free_initmem(void);  void free_initrd_mem(unsigned long start, unsigned long end); @@ -137,14 +138,14 @@ extern unsigned int instruction_size(unsigned int insn);  #endif  extern unsigned long cached_to_uncached; +extern unsigned long uncached_size;  extern struct dentry *sh_debugfs_root;  void per_cpu_trap_init(void);  void default_idle(void);  void cpu_idle_wait(void); - -asmlinkage void break_point_trap(void); +void stop_this_cpu(void *);  #ifdef CONFIG_SUPERH32  #define BUILD_TRAP_HANDLER(name)					\ diff --git a/arch/sh/include/asm/system_32.h b/arch/sh/include/asm/system_32.h index 06814f5b59c..51296b36770 100644 --- a/arch/sh/include/asm/system_32.h +++ b/arch/sh/include/asm/system_32.h @@ -2,6 +2,7 @@  #define __ASM_SH_SYSTEM_32_H  #include <linux/types.h> +#include <asm/mmu.h>  #ifdef CONFIG_SH_DSP @@ -144,9 +145,6 @@ do {								\  		__restore_dsp(prev);				\  } while (0) -#define __uses_jump_to_uncached \ -	noinline __attribute__ ((__section__ (".uncached.text"))) -  /*   * Jump to uncached area.   * When handling TLB or caches, we need to do it from an uncached area. @@ -216,6 +214,17 @@ static inline reg_size_t register_align(void *val)  int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,  			    struct mem_access *ma, int); +static inline void trigger_address_error(void) +{ +	if (__in_29bit_mode()) +		__asm__ __volatile__ ( +			"ldc %0, sr\n\t" +			"mov.l @%1, %0" +			: +			: "r" (0x10000000), "r" (0x80000001) +		); +} +  asmlinkage void do_address_error(struct pt_regs *regs,  				 unsigned long writeaccess,  				 unsigned long address); diff --git a/arch/sh/include/asm/system_64.h b/arch/sh/include/asm/system_64.h index ab1dd917ea8..36338646dfc 100644 --- a/arch/sh/include/asm/system_64.h +++ b/arch/sh/include/asm/system_64.h @@ -18,6 +18,7 @@  /*   *	switch_to() should switch tasks to task nr n, first   */ +struct thread_struct;  struct task_struct *sh64_switch_to(struct task_struct *prev,  				   struct thread_struct *prev_thread,  				   struct task_struct *next, @@ -33,8 +34,6 @@ do {								\  			      &next->thread);			\  } while (0) -#define __uses_jump_to_uncached -  #define jump_to_uncached()	do { } while (0)  #define back_to_cached()	do { } while (0) @@ -48,6 +47,13 @@ static inline reg_size_t register_align(void *val)  	return (unsigned long long)(signed long long)(signed long)val;  } +extern void phys_stext(void); + +static inline void trigger_address_error(void) +{ +	phys_stext(); +} +  #define SR_BL_LL	0x0000000010000000LL  static inline void set_bl_bit(void) diff --git a/arch/sh/include/asm/thread_info.h b/arch/sh/include/asm/thread_info.h index 1f3d927e226..c228946926e 100644 --- a/arch/sh/include/asm/thread_info.h +++ b/arch/sh/include/asm/thread_info.h @@ -93,14 +93,16 @@ static inline struct thread_info *current_thread_info(void)  #define THREAD_SIZE_ORDER	(THREAD_SHIFT - PAGE_SHIFT) -#else /* THREAD_SHIFT < PAGE_SHIFT */ - -#define __HAVE_ARCH_THREAD_INFO_ALLOCATOR +#endif  extern struct thread_info *alloc_thread_info(struct task_struct *tsk);  extern void free_thread_info(struct thread_info *ti); +extern void arch_task_cache_init(void); +#define arch_task_cache_init arch_task_cache_init +extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src); +extern void init_thread_xstate(void); -#endif /* THREAD_SHIFT < PAGE_SHIFT */ +#define __HAVE_ARCH_THREAD_INFO_ALLOCATOR  #endif /* __ASSEMBLY__ */ @@ -119,7 +121,7 @@ extern void free_thread_info(struct thread_info *ti);  #define TIF_NOTIFY_RESUME	7	/* callback before returning to user */  #define TIF_SYSCALL_TRACEPOINT	8	/* for ftrace syscall instrumentation */  #define TIF_POLLING_NRFLAG	17	/* true if poll_idle() is polling TIF_NEED_RESCHED */ -#define TIF_MEMDIE		18 +#define TIF_MEMDIE		18	/* is terminating due to OOM killer */  #define TIF_FREEZE		19	/* Freezing for suspend */  #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE) diff --git a/arch/sh/include/asm/tlb.h b/arch/sh/include/asm/tlb.h index da8fe7ab872..75abb38dffd 100644 --- a/arch/sh/include/asm/tlb.h +++ b/arch/sh/include/asm/tlb.h @@ -11,6 +11,7 @@  #ifdef CONFIG_MMU  #include <asm/pgalloc.h>  #include <asm/tlbflush.h> +#include <asm/mmu_context.h>  /*   * TLB handling.  This allows us to remove pages from the page @@ -97,6 +98,22 @@ tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)  #define tlb_migrate_finish(mm)		do { } while (0) +#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SUPERH64) +extern void tlb_wire_entry(struct vm_area_struct *, unsigned long, pte_t); +extern void tlb_unwire_entry(void); +#else +static inline void tlb_wire_entry(struct vm_area_struct *vma , +				  unsigned long addr, pte_t pte) +{ +	BUG(); +} + +static inline void tlb_unwire_entry(void) +{ +	BUG(); +} +#endif +  #else /* CONFIG_MMU */  #define tlb_start_vma(tlb, vma)				do { } while (0) diff --git a/arch/sh/include/asm/topology.h b/arch/sh/include/asm/topology.h index 37cdadd975a..88e734069fa 100644 --- a/arch/sh/include/asm/topology.h +++ b/arch/sh/include/asm/topology.h @@ -35,7 +35,7 @@  #define pcibus_to_node(bus)	((void)(bus), -1)  #define cpumask_of_pcibus(bus)	(pcibus_to_node(bus) == -1 ? \ -					CPU_MASK_ALL_PTR : \ +					cpu_all_mask : \  					cpumask_of_node(pcibus_to_node(bus)))  #endif diff --git a/arch/sh/include/asm/ubc.h b/arch/sh/include/asm/ubc.h deleted file mode 100644 index 9bf96168443..00000000000 --- a/arch/sh/include/asm/ubc.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * include/asm-sh/ubc.h - * - * Copyright (C) 1999 Niibe Yutaka - * Copyright (C) 2002, 2003 Paul Mundt - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#ifndef __ASM_SH_UBC_H -#define __ASM_SH_UBC_H -#ifdef __KERNEL__ - -#include <cpu/ubc.h> - -/* User Break Controller */ -#if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) -#define UBC_TYPE_SH7729	(current_cpu_data.type == CPU_SH7729) -#else -#define UBC_TYPE_SH7729	0 -#endif - -#define BAMR_ASID		(1 << 2) -#define BAMR_NONE		0 -#define BAMR_10			0x1 -#define BAMR_12			0x2 -#define BAMR_ALL		0x3 -#define BAMR_16			0x8 -#define BAMR_20			0x9 - -#define BBR_INST		(1 << 4) -#define BBR_DATA		(2 << 4) -#define BBR_READ		(1 << 2) -#define BBR_WRITE		(2 << 2) -#define BBR_BYTE		0x1 -#define BBR_HALF		0x2 -#define BBR_LONG		0x3 -#define BBR_QUAD		(1 << 6)	/* SH7750 */ -#define BBR_CPU			(1 << 6)	/* SH7709A,SH7729 */ -#define BBR_DMA			(2 << 6)	/* SH7709A,SH7729 */ - -#define BRCR_CMFA		(1 << 15) -#define BRCR_CMFB		(1 << 14) - -#if defined CONFIG_CPU_SH2A -#define BRCR_CMFCA		(1 << 15) -#define BRCR_CMFCB		(1 << 14) -#define BRCR_CMFDA		(1 << 13) -#define BRCR_CMFDB		(1 << 12) -#define BRCR_PCBB		(1 << 6)	/* 1: after execution */ -#define BRCR_PCBA		(1 << 5)	/* 1: after execution */ -#define BRCR_PCTE		0 -#else -#define BRCR_PCTE		(1 << 11) -#define BRCR_PCBA		(1 << 10)	/* 1: after execution */ -#define BRCR_DBEB		(1 << 7) -#define BRCR_PCBB		(1 << 6) -#define BRCR_SEQ		(1 << 3) -#define BRCR_UBDE		(1 << 0) -#endif - -#endif /* __KERNEL__ */ -#endif /* __ASM_SH_UBC_H */ diff --git a/arch/sh/include/asm/uncached.h b/arch/sh/include/asm/uncached.h new file mode 100644 index 00000000000..e3419f96626 --- /dev/null +++ b/arch/sh/include/asm/uncached.h @@ -0,0 +1,18 @@ +#ifndef __ASM_SH_UNCACHED_H +#define __ASM_SH_UNCACHED_H + +#include <linux/bug.h> + +#ifdef CONFIG_UNCACHED_MAPPING +extern unsigned long uncached_start, uncached_end; + +extern int virt_addr_uncached(unsigned long kaddr); +extern void uncached_init(void); +extern void uncached_resize(unsigned long size); +#else +#define virt_addr_uncached(kaddr)	(0) +#define uncached_init()			do { } while (0) +#define uncached_resize(size)		BUG() +#endif + +#endif /* __ASM_SH_UNCACHED_H */ diff --git a/arch/sh/include/asm/unistd_32.h b/arch/sh/include/asm/unistd_32.h index 365744b0526..0e7f0fc8f08 100644 --- a/arch/sh/include/asm/unistd_32.h +++ b/arch/sh/include/asm/unistd_32.h @@ -358,6 +358,7 @@  #define __ARCH_WANT_STAT64  #define __ARCH_WANT_SYS_ALARM  #define __ARCH_WANT_SYS_GETHOSTNAME +#define __ARCH_WANT_SYS_IPC  #define __ARCH_WANT_SYS_PAUSE  #define __ARCH_WANT_SYS_SGETMASK  #define __ARCH_WANT_SYS_SIGNAL @@ -370,6 +371,7 @@  #define __ARCH_WANT_SYS_LLSEEK  #define __ARCH_WANT_SYS_NICE  #define __ARCH_WANT_SYS_OLD_GETRLIMIT +#define __ARCH_WANT_SYS_OLD_UNAME  #define __ARCH_WANT_SYS_OLDUMOUNT  #define __ARCH_WANT_SYS_SIGPENDING  #define __ARCH_WANT_SYS_SIGPROCMASK diff --git a/arch/sh/include/asm/unistd_64.h b/arch/sh/include/asm/unistd_64.h index 25de158aac3..0580c33a1e0 100644 --- a/arch/sh/include/asm/unistd_64.h +++ b/arch/sh/include/asm/unistd_64.h @@ -398,6 +398,7 @@  #define __ARCH_WANT_STAT64  #define __ARCH_WANT_SYS_ALARM  #define __ARCH_WANT_SYS_GETHOSTNAME +#define __ARCH_WANT_SYS_IPC  #define __ARCH_WANT_SYS_PAUSE  #define __ARCH_WANT_SYS_SGETMASK  #define __ARCH_WANT_SYS_SIGNAL @@ -410,6 +411,7 @@  #define __ARCH_WANT_SYS_LLSEEK  #define __ARCH_WANT_SYS_NICE  #define __ARCH_WANT_SYS_OLD_GETRLIMIT +#define __ARCH_WANT_SYS_OLD_UNAME  #define __ARCH_WANT_SYS_OLDUMOUNT  #define __ARCH_WANT_SYS_SIGPENDING  #define __ARCH_WANT_SYS_SIGPROCMASK diff --git a/arch/sh/include/asm/vmlinux.lds.h b/arch/sh/include/asm/vmlinux.lds.h index 244ec4ad9a7..d58ad493b3a 100644 --- a/arch/sh/include/asm/vmlinux.lds.h +++ b/arch/sh/include/asm/vmlinux.lds.h @@ -14,4 +14,12 @@  #define DWARF_EH_FRAME  #endif +#ifdef CONFIG_SUPERH64 +#define EXTRA_TEXT		\ +	*(.text64)		\ +	*(.text..SHmedia32) +#else +#define EXTRA_TEXT +#endif +  #endif /* __ASM_SH_VMLINUX_LDS_H */ diff --git a/arch/sh/include/asm/watchdog.h b/arch/sh/include/asm/watchdog.h index 19dfff5c851..85a7aca7fb8 100644 --- a/arch/sh/include/asm/watchdog.h +++ b/arch/sh/include/asm/watchdog.h @@ -70,7 +70,7 @@   */  static inline __u32 sh_wdt_read_cnt(void)  { -	return ctrl_inl(WTCNT_R); +	return __raw_readl(WTCNT_R);  }  /** @@ -82,7 +82,7 @@ static inline __u32 sh_wdt_read_cnt(void)   */  static inline void sh_wdt_write_cnt(__u32 val)  { -	ctrl_outl((WTCNT_HIGH << 24) | (__u32)val, WTCNT); +	__raw_writel((WTCNT_HIGH << 24) | (__u32)val, WTCNT);  }  /** @@ -94,7 +94,7 @@ static inline void sh_wdt_write_cnt(__u32 val)   */  static inline void sh_wdt_write_bst(__u32 val)  { -	ctrl_outl((WTBST_HIGH << 24) | (__u32)val, WTBST); +	__raw_writel((WTBST_HIGH << 24) | (__u32)val, WTBST);  }  /**   * 	sh_wdt_read_csr - Read from Control/Status Register @@ -103,7 +103,7 @@ static inline void sh_wdt_write_bst(__u32 val)   */  static inline __u32 sh_wdt_read_csr(void)  { -	return ctrl_inl(WTCSR_R); +	return __raw_readl(WTCSR_R);  }  /** @@ -115,7 +115,7 @@ static inline __u32 sh_wdt_read_csr(void)   */  static inline void sh_wdt_write_csr(__u32 val)  { -	ctrl_outl((WTCSR_HIGH << 24) | (__u32)val, WTCSR); +	__raw_writel((WTCSR_HIGH << 24) | (__u32)val, WTCSR);  }  #else  /** @@ -124,7 +124,7 @@ static inline void sh_wdt_write_csr(__u32 val)   */  static inline __u8 sh_wdt_read_cnt(void)  { -	return ctrl_inb(WTCNT_R); +	return __raw_readb(WTCNT_R);  }  /** @@ -136,7 +136,7 @@ static inline __u8 sh_wdt_read_cnt(void)   */  static inline void sh_wdt_write_cnt(__u8 val)  { -	ctrl_outw((WTCNT_HIGH << 8) | (__u16)val, WTCNT); +	__raw_writew((WTCNT_HIGH << 8) | (__u16)val, WTCNT);  }  /** @@ -146,7 +146,7 @@ static inline void sh_wdt_write_cnt(__u8 val)   */  static inline __u8 sh_wdt_read_csr(void)  { -	return ctrl_inb(WTCSR_R); +	return __raw_readb(WTCSR_R);  }  /** @@ -158,7 +158,7 @@ static inline __u8 sh_wdt_read_csr(void)   */  static inline void sh_wdt_write_csr(__u8 val)  { -	ctrl_outw((WTCSR_HIGH << 8) | (__u16)val, WTCSR); +	__raw_writew((WTCSR_HIGH << 8) | (__u16)val, WTCSR);  }  #endif /* CONFIG_CPU_SUBTYPE_SH7785 || CONFIG_CPU_SUBTYPE_SH7780 */  #endif /* __KERNEL__ */ diff --git a/arch/sh/include/cpu-sh2/cpu/ubc.h b/arch/sh/include/cpu-sh2/cpu/ubc.h deleted file mode 100644 index ba0e87f19c7..00000000000 --- a/arch/sh/include/cpu-sh2/cpu/ubc.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * include/asm-sh/cpu-sh2/ubc.h - * - * Copyright (C) 2003 Paul Mundt - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#ifndef __ASM_CPU_SH2_UBC_H -#define __ASM_CPU_SH2_UBC_H - -#define UBC_BARA                0xffffff40 -#define UBC_BAMRA               0xffffff44 -#define UBC_BBRA                0xffffff48 -#define UBC_BARB                0xffffff60 -#define UBC_BAMRB               0xffffff64 -#define UBC_BBRB                0xffffff68 -#define UBC_BDRB                0xffffff70 -#define UBC_BDMRB               0xffffff74 -#define UBC_BRCR                0xffffff78 - -/* - * We don't have any ASID changes to make in the UBC on the SH-2. - * - * Make these purposely invalid to track misuse. - */ -#define UBC_BASRA		0x00000000 -#define UBC_BASRB		0x00000000 - -#endif /* __ASM_CPU_SH2_UBC_H */ - diff --git a/arch/sh/include/cpu-sh2/cpu/watchdog.h b/arch/sh/include/cpu-sh2/cpu/watchdog.h index 393161c9c6d..1eab8aa63a6 100644 --- a/arch/sh/include/cpu-sh2/cpu/watchdog.h +++ b/arch/sh/include/cpu-sh2/cpu/watchdog.h @@ -44,7 +44,7 @@ static inline __u8 sh_wdt_read_rstcsr(void)  	/*  	 * Same read/write brain-damage as for WTCNT here..  	 */ -	return ctrl_inb(RSTCSR_R); +	return __raw_readb(RSTCSR_R);  }  /** @@ -62,7 +62,7 @@ static inline void sh_wdt_write_rstcsr(__u8 val)  	 * we can't presently touch the WOVF bit, since the upper byte  	 * has to be swapped for this. So just leave it alone..  	 */ -	ctrl_outw((WTCNT_HIGH << 8) | (__u16)val, RSTCSR); +	__raw_writeb((WTCNT_HIGH << 8) | (__u16)val, RSTCSR);  }  #endif /* __ASM_CPU_SH2_WATCHDOG_H */ diff --git a/arch/sh/include/cpu-sh3/cpu/dac.h b/arch/sh/include/cpu-sh3/cpu/dac.h index 05fda8316eb..98f1d15f0ab 100644 --- a/arch/sh/include/cpu-sh3/cpu/dac.h +++ b/arch/sh/include/cpu-sh3/cpu/dac.h @@ -17,25 +17,25 @@  static __inline__ void sh_dac_enable(int channel)  {  	unsigned char v; -	v = ctrl_inb(DACR); +	v = __raw_readb(DACR);  	if(channel) v |= DACR_DAOE1;  	else v |= DACR_DAOE0; -	ctrl_outb(v,DACR); +	__raw_writeb(v,DACR);  }  static __inline__ void sh_dac_disable(int channel)  {  	unsigned char v; -	v = ctrl_inb(DACR); +	v = __raw_readb(DACR);  	if(channel) v &= ~DACR_DAOE1;  	else v &= ~DACR_DAOE0; -	ctrl_outb(v,DACR); +	__raw_writeb(v,DACR);  }  static __inline__ void sh_dac_output(u8 value, int channel)  { -	if(channel) ctrl_outb(value,DADR1); -	else ctrl_outb(value,DADR0); +	if(channel) __raw_writeb(value,DADR1); +	else __raw_writeb(value,DADR0);  }  #endif /* __ASM_CPU_SH3_DAC_H */ diff --git a/arch/sh/include/cpu-sh3/cpu/dma-register.h b/arch/sh/include/cpu-sh3/cpu/dma-register.h new file mode 100644 index 00000000000..2349e488c9a --- /dev/null +++ b/arch/sh/include/cpu-sh3/cpu/dma-register.h @@ -0,0 +1,41 @@ +/* + * SH3 CPU-specific DMA definitions, used by both DMA drivers + * + * Copyright (C) 2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#ifndef CPU_DMA_REGISTER_H +#define CPU_DMA_REGISTER_H + +#define CHCR_TS_LOW_MASK	0x18 +#define CHCR_TS_LOW_SHIFT	3 +#define CHCR_TS_HIGH_MASK	0 +#define CHCR_TS_HIGH_SHIFT	0 + +#define DMAOR_INIT	DMAOR_DME + +/* + * The SuperH DMAC supports a number of transmit sizes, we list them here, + * with their respective values as they appear in the CHCR registers. + */ +enum { +	XMIT_SZ_8BIT, +	XMIT_SZ_16BIT, +	XMIT_SZ_32BIT, +	XMIT_SZ_128BIT, +}; + +/* log2(size / 8) - used to calculate number of transfers */ +#define TS_SHIFT {			\ +	[XMIT_SZ_8BIT]		= 0,	\ +	[XMIT_SZ_16BIT]		= 1,	\ +	[XMIT_SZ_32BIT]		= 2,	\ +	[XMIT_SZ_128BIT]	= 4,	\ +} + +#define TS_INDEX2VAL(i)	(((i) & 3) << CHCR_TS_LOW_SHIFT) + +#endif diff --git a/arch/sh/include/cpu-sh3/cpu/dma.h b/arch/sh/include/cpu-sh3/cpu/dma.h index 0ea15f3f236..24e28b91c9d 100644 --- a/arch/sh/include/cpu-sh3/cpu/dma.h +++ b/arch/sh/include/cpu-sh3/cpu/dma.h @@ -20,27 +20,4 @@  #define TS_32		0x00000010  #define TS_128		0x00000018 -#define CHCR_TS_MASK	0x18 -#define CHCR_TS_SHIFT	3 - -#define DMAOR_INIT	DMAOR_DME - -/* - * The SuperH DMAC supports a number of transmit sizes, we list them here, - * with their respective values as they appear in the CHCR registers. - */ -enum { -	XMIT_SZ_8BIT, -	XMIT_SZ_16BIT, -	XMIT_SZ_32BIT, -	XMIT_SZ_128BIT, -}; - -static unsigned int ts_shift[] __maybe_unused = { -	[XMIT_SZ_8BIT]		= 0, -	[XMIT_SZ_16BIT]		= 1, -	[XMIT_SZ_32BIT]		= 2, -	[XMIT_SZ_128BIT]	= 4, -}; -  #endif /* __ASM_CPU_SH3_DMA_H */ diff --git a/arch/sh/include/cpu-sh3/cpu/ubc.h b/arch/sh/include/cpu-sh3/cpu/ubc.h deleted file mode 100644 index 4e6381d5ff7..00000000000 --- a/arch/sh/include/cpu-sh3/cpu/ubc.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * include/asm-sh/cpu-sh3/ubc.h - * - * Copyright (C) 1999 Niibe Yutaka - * Copyright (C) 2003 Paul Mundt - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#ifndef __ASM_CPU_SH3_UBC_H -#define __ASM_CPU_SH3_UBC_H - -#if defined(CONFIG_CPU_SUBTYPE_SH7710) || \ -    defined(CONFIG_CPU_SUBTYPE_SH7720) || \ -    defined(CONFIG_CPU_SUBTYPE_SH7721) -#define UBC_BARA		0xa4ffffb0 -#define UBC_BAMRA		0xa4ffffb4 -#define UBC_BBRA		0xa4ffffb8 -#define UBC_BASRA		0xffffffe4 -#define UBC_BARB		0xa4ffffa0 -#define UBC_BAMRB		0xa4ffffa4 -#define UBC_BBRB		0xa4ffffa8 -#define UBC_BASRB		0xffffffe8 -#define UBC_BDRB		0xa4ffff90 -#define UBC_BDMRB		0xa4ffff94 -#define UBC_BRCR		0xa4ffff98 -#else -#define UBC_BARA                0xffffffb0 -#define UBC_BAMRA               0xffffffb4 -#define UBC_BBRA                0xffffffb8 -#define UBC_BASRA               0xffffffe4 -#define UBC_BARB                0xffffffa0 -#define UBC_BAMRB               0xffffffa4 -#define UBC_BBRB                0xffffffa8 -#define UBC_BASRB               0xffffffe8 -#define UBC_BDRB                0xffffff90 -#define UBC_BDMRB               0xffffff94 -#define UBC_BRCR                0xffffff98 -#endif - -#endif /* __ASM_CPU_SH3_UBC_H */ diff --git a/arch/sh/include/cpu-sh4/cpu/addrspace.h b/arch/sh/include/cpu-sh4/cpu/addrspace.h index a3fa733c1c7..d51da25da72 100644 --- a/arch/sh/include/cpu-sh4/cpu/addrspace.h +++ b/arch/sh/include/cpu-sh4/cpu/addrspace.h @@ -28,6 +28,15 @@  #define P4SEG_TLB_DATA	0xf7000000  #define P4SEG_REG_BASE	0xff000000 +#define PA_AREA0	0x00000000 +#define PA_AREA1	0x04000000 +#define PA_AREA2	0x08000000 +#define PA_AREA3	0x0c000000 +#define PA_AREA4	0x10000000 +#define PA_AREA5	0x14000000 +#define PA_AREA6	0x18000000 +#define PA_AREA7	0x1c000000 +  #define PA_AREA5_IO	0xb4000000	/* Area 5 IO Memory */  #define PA_AREA6_IO	0xb8000000	/* Area 6 IO Memory */ diff --git a/arch/sh/include/cpu-sh4/cpu/dma-register.h b/arch/sh/include/cpu-sh4/cpu/dma-register.h new file mode 100644 index 00000000000..9a6125eb007 --- /dev/null +++ b/arch/sh/include/cpu-sh4/cpu/dma-register.h @@ -0,0 +1,113 @@ +/* + * SH4 CPU-specific DMA definitions, used by both DMA drivers + * + * Copyright (C) 2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#ifndef CPU_DMA_REGISTER_H +#define CPU_DMA_REGISTER_H + +/* SH7751/7760/7780 DMA IRQ sources */ + +#ifdef CONFIG_CPU_SH4A + +#define DMAOR_INIT	DMAOR_DME + +#if defined(CONFIG_CPU_SUBTYPE_SH7343) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7730) +#define CHCR_TS_LOW_MASK	0x00000018 +#define CHCR_TS_LOW_SHIFT	3 +#define CHCR_TS_HIGH_MASK	0 +#define CHCR_TS_HIGH_SHIFT	0 +#elif defined(CONFIG_CPU_SUBTYPE_SH7722) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7724) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7786) +#define CHCR_TS_LOW_MASK	0x00000018 +#define CHCR_TS_LOW_SHIFT	3 +#define CHCR_TS_HIGH_MASK	0x00300000 +#define CHCR_TS_HIGH_SHIFT	(20 - 2)	/* 2 bits for shifted low TS */ +#elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7764) +#define CHCR_TS_LOW_MASK	0x00000018 +#define CHCR_TS_LOW_SHIFT	3 +#define CHCR_TS_HIGH_MASK	0 +#define CHCR_TS_HIGH_SHIFT	0 +#elif defined(CONFIG_CPU_SUBTYPE_SH7723) +#define CHCR_TS_LOW_MASK	0x00000018 +#define CHCR_TS_LOW_SHIFT	3 +#define CHCR_TS_HIGH_MASK	0 +#define CHCR_TS_HIGH_SHIFT	0 +#elif defined(CONFIG_CPU_SUBTYPE_SH7780) +#define CHCR_TS_LOW_MASK	0x00000018 +#define CHCR_TS_LOW_SHIFT	3 +#define CHCR_TS_HIGH_MASK	0 +#define CHCR_TS_HIGH_SHIFT	0 +#else /* SH7785 */ +#define CHCR_TS_LOW_MASK	0x00000018 +#define CHCR_TS_LOW_SHIFT	3 +#define CHCR_TS_HIGH_MASK	0 +#define CHCR_TS_HIGH_SHIFT	0 +#endif + +/* Transmit sizes and respective CHCR register values */ +enum { +	XMIT_SZ_8BIT		= 0, +	XMIT_SZ_16BIT		= 1, +	XMIT_SZ_32BIT		= 2, +	XMIT_SZ_64BIT		= 7, +	XMIT_SZ_128BIT		= 3, +	XMIT_SZ_256BIT		= 4, +	XMIT_SZ_128BIT_BLK	= 0xb, +	XMIT_SZ_256BIT_BLK	= 0xc, +}; + +/* log2(size / 8) - used to calculate number of transfers */ +#define TS_SHIFT {			\ +	[XMIT_SZ_8BIT]		= 0,	\ +	[XMIT_SZ_16BIT]		= 1,	\ +	[XMIT_SZ_32BIT]		= 2,	\ +	[XMIT_SZ_64BIT]		= 3,	\ +	[XMIT_SZ_128BIT]	= 4,	\ +	[XMIT_SZ_256BIT]	= 5,	\ +	[XMIT_SZ_128BIT_BLK]	= 4,	\ +	[XMIT_SZ_256BIT_BLK]	= 5,	\ +} + +#define TS_INDEX2VAL(i)	((((i) & 3) << CHCR_TS_LOW_SHIFT) | \ +			 (((i) & 0xc) << CHCR_TS_HIGH_SHIFT)) + +#else /* CONFIG_CPU_SH4A */ + +#define DMAOR_INIT	(0x8000 | DMAOR_DME) + +#define CHCR_TS_LOW_MASK	0x70 +#define CHCR_TS_LOW_SHIFT	4 +#define CHCR_TS_HIGH_MASK	0 +#define CHCR_TS_HIGH_SHIFT	0 + +/* Transmit sizes and respective CHCR register values */ +enum { +	XMIT_SZ_8BIT	= 1, +	XMIT_SZ_16BIT	= 2, +	XMIT_SZ_32BIT	= 3, +	XMIT_SZ_64BIT	= 0, +	XMIT_SZ_256BIT	= 4, +}; + +/* log2(size / 8) - used to calculate number of transfers */ +#define TS_SHIFT {			\ +	[XMIT_SZ_8BIT]		= 0,	\ +	[XMIT_SZ_16BIT]		= 1,	\ +	[XMIT_SZ_32BIT]		= 2,	\ +	[XMIT_SZ_64BIT]		= 3,	\ +	[XMIT_SZ_256BIT]	= 5,	\ +} + +#define TS_INDEX2VAL(i)	(((i) & 7) << CHCR_TS_LOW_SHIFT) + +#endif /* CONFIG_CPU_SH4A */ + +#endif diff --git a/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h b/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h index c4ed660c14c..9647e681fd2 100644 --- a/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h +++ b/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h @@ -2,22 +2,26 @@  #define __ASM_SH_CPU_SH4_DMA_SH7780_H  #if defined(CONFIG_CPU_SUBTYPE_SH7343) || \ -	defined(CONFIG_CPU_SUBTYPE_SH7722) || \  	defined(CONFIG_CPU_SUBTYPE_SH7730)  #define DMTE0_IRQ	48  #define DMTE4_IRQ	76  #define DMAE0_IRQ	78	/* DMA Error IRQ*/  #define SH_DMAC_BASE0	0xFE008020 -#define SH_DMARS_BASE	0xFE009000 +#define SH_DMARS_BASE0	0xFE009000 +#elif defined(CONFIG_CPU_SUBTYPE_SH7722) +#define DMTE0_IRQ	48 +#define DMTE4_IRQ	76 +#define DMAE0_IRQ	78	/* DMA Error IRQ*/ +#define SH_DMAC_BASE0	0xFE008020 +#define SH_DMARS_BASE0	0xFE009000  #elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \  	defined(CONFIG_CPU_SUBTYPE_SH7764)  #define DMTE0_IRQ	34  #define DMTE4_IRQ	44  #define DMAE0_IRQ	38  #define SH_DMAC_BASE0	0xFF608020 -#define SH_DMARS_BASE	0xFF609000 -#elif defined(CONFIG_CPU_SUBTYPE_SH7723) || \ -      defined(CONFIG_CPU_SUBTYPE_SH7724) +#define SH_DMARS_BASE0	0xFF609000 +#elif defined(CONFIG_CPU_SUBTYPE_SH7723)  #define DMTE0_IRQ	48	/* DMAC0A*/  #define DMTE4_IRQ	76	/* DMAC0B */  #define DMTE6_IRQ	40 @@ -29,7 +33,21 @@  #define DMAE1_IRQ	74	/* DMA Error IRQ*/  #define SH_DMAC_BASE0	0xFE008020  #define SH_DMAC_BASE1	0xFDC08020 -#define SH_DMARS_BASE	0xFDC09000 +#define SH_DMARS_BASE0	0xFDC09000 +#elif defined(CONFIG_CPU_SUBTYPE_SH7724) +#define DMTE0_IRQ	48	/* DMAC0A*/ +#define DMTE4_IRQ	76	/* DMAC0B */ +#define DMTE6_IRQ	40 +#define DMTE8_IRQ	42	/* DMAC1A */ +#define DMTE9_IRQ	43 +#define DMTE10_IRQ	72	/* DMAC1B */ +#define DMTE11_IRQ	73 +#define DMAE0_IRQ	78	/* DMA Error IRQ*/ +#define DMAE1_IRQ	74	/* DMA Error IRQ*/ +#define SH_DMAC_BASE0	0xFE008020 +#define SH_DMAC_BASE1	0xFDC08020 +#define SH_DMARS_BASE0	0xFE009000 +#define SH_DMARS_BASE1	0xFDC09000  #elif defined(CONFIG_CPU_SUBTYPE_SH7780)  #define DMTE0_IRQ	34  #define DMTE4_IRQ	44 @@ -41,7 +59,7 @@  #define DMAE0_IRQ	38	/* DMA Error IRQ */  #define SH_DMAC_BASE0	0xFC808020  #define SH_DMAC_BASE1	0xFC818020 -#define SH_DMARS_BASE	0xFC809000 +#define SH_DMARS_BASE0	0xFC809000  #else /* SH7785 */  #define DMTE0_IRQ	33  #define DMTE4_IRQ	37 @@ -54,42 +72,12 @@  #define DMAE1_IRQ	58	/* DMA Error IRQ1 */  #define SH_DMAC_BASE0	0xFC808020  #define SH_DMAC_BASE1	0xFCC08020 -#define SH_DMARS_BASE	0xFC809000 +#define SH_DMARS_BASE0	0xFC809000  #endif -#define REQ_HE	0x000000C0 -#define REQ_H	0x00000080 -#define REQ_LE	0x00000040 -#define TM_BURST 0x0000020 -#define TS_8	0x00000000 -#define TS_16	0x00000008 -#define TS_32	0x00000010 -#define TS_16BLK	0x00000018 -#define TS_32BLK	0x00100000 - -/* - * The SuperH DMAC supports a number of transmit sizes, we list them here, - * with their respective values as they appear in the CHCR registers. - * - * Defaults to a 64-bit transfer size. - */ -enum { -	XMIT_SZ_8BIT, -	XMIT_SZ_16BIT, -	XMIT_SZ_32BIT, -	XMIT_SZ_128BIT, -	XMIT_SZ_256BIT, -}; - -/* - * The DMA count is defined as the number of bytes to transfer. - */ -static unsigned int ts_shift[] __maybe_unused = { -	[XMIT_SZ_8BIT]		= 0, -	[XMIT_SZ_16BIT]		= 1, -	[XMIT_SZ_32BIT]		= 2, -	[XMIT_SZ_128BIT]	= 4, -	[XMIT_SZ_256BIT]	= 5, -}; +#define REQ_HE		0x000000C0 +#define REQ_H		0x00000080 +#define REQ_LE		0x00000040 +#define TM_BURST	0x00000020  #endif /* __ASM_SH_CPU_SH4_DMA_SH7780_H */ diff --git a/arch/sh/include/cpu-sh4/cpu/dma.h b/arch/sh/include/cpu-sh4/cpu/dma.h index bcb30246e85..ca747e93c2e 100644 --- a/arch/sh/include/cpu-sh4/cpu/dma.h +++ b/arch/sh/include/cpu-sh4/cpu/dma.h @@ -5,11 +5,8 @@  #ifdef CONFIG_CPU_SH4A -#define DMAOR_INIT	(DMAOR_DME) -#define CHCR_TS_MASK	0x18 -#define CHCR_TS_SHIFT	3 -  #include <cpu/dma-sh4a.h> +  #else /* CONFIG_CPU_SH4A */  /*   * SH7750/SH7751/SH7760 @@ -19,7 +16,6 @@  #define DMTE6_IRQ	46  #define DMAE0_IRQ	38 -#define DMAOR_INIT	(0x8000|DMAOR_DME)  #define SH_DMAC_BASE0	0xffa00000  #define SH_DMAC_BASE1	0xffa00070  /* Definitions for the SuperH DMAC */ @@ -29,35 +25,8 @@  #define TS_32		0x00000030  #define TS_64		0x00000000 -#define CHCR_TS_MASK	0x70 -#define CHCR_TS_SHIFT	4 -  #define DMAOR_COD	0x00000008 -/* - * The SuperH DMAC supports a number of transmit sizes, we list them here, - * with their respective values as they appear in the CHCR registers. - * - * Defaults to a 64-bit transfer size. - */ -enum { -	XMIT_SZ_64BIT, -	XMIT_SZ_8BIT, -	XMIT_SZ_16BIT, -	XMIT_SZ_32BIT, -	XMIT_SZ_256BIT, -}; - -/* - * The DMA count is defined as the number of bytes to transfer. - */ -static unsigned int ts_shift[] __maybe_unused = { -	[XMIT_SZ_64BIT]		= 3, -	[XMIT_SZ_8BIT]		= 0, -	[XMIT_SZ_16BIT]		= 1, -	[XMIT_SZ_32BIT]		= 2, -	[XMIT_SZ_256BIT]	= 5, -};  #endif  #endif /* __ASM_CPU_SH4_DMA_H */ diff --git a/arch/sh/include/cpu-sh4/cpu/mmu_context.h b/arch/sh/include/cpu-sh4/cpu/mmu_context.h index 3ce7ef6c297..e46ec708105 100644 --- a/arch/sh/include/cpu-sh4/cpu/mmu_context.h +++ b/arch/sh/include/cpu-sh4/cpu/mmu_context.h @@ -19,11 +19,32 @@  #define MMUCR		0xFF000010	/* MMU Control Register */ +#define MMU_TLB_ENTRY_SHIFT	8 + +#define MMU_ITLB_ADDRESS_ARRAY  0xF2000000 +#define MMU_ITLB_ADDRESS_ARRAY2	0xF2800000 +#define MMU_ITLB_DATA_ARRAY	0xF3000000 +#define MMU_ITLB_DATA_ARRAY2	0xF3800000 +  #define MMU_UTLB_ADDRESS_ARRAY	0xF6000000  #define MMU_UTLB_ADDRESS_ARRAY2	0xF6800000 +#define MMU_UTLB_DATA_ARRAY	0xF7000000 +#define MMU_UTLB_DATA_ARRAY2	0xF7800000  #define MMU_PAGE_ASSOC_BIT	0x80 -#define MMUCR_TI		(1<<2) +#ifdef CONFIG_MMU +#define MMUCR_AT		(1 << 0) +#else +#define MMUCR_AT		(0) +#endif + +#define MMUCR_TI		(1 << 2) + +#define MMUCR_URB		0x00FC0000 +#define MMUCR_URB_SHIFT		18 +#define MMUCR_URB_NENTRIES	64 +#define MMUCR_URC		0x0000FC00 +#define MMUCR_URC_SHIFT		10  #if defined(CONFIG_32BIT) && defined(CONFIG_CPU_SUBTYPE_ST40)  #define MMUCR_SE		(1 << 4) @@ -50,7 +71,8 @@  #endif  #define MMU_NTLB_ENTRIES	64 -#define MMU_CONTROL_INIT	(0x05|MMUCR_SQMD|MMUCR_ME|MMUCR_SE|MMUCR_AEX) +#define MMU_CONTROL_INIT	(MMUCR_AT | MMUCR_TI | MMUCR_SQMD | \ +				 MMUCR_ME | MMUCR_SE | MMUCR_AEX)  #define TRA	0xff000020  #define EXPEVT	0xff000024 diff --git a/arch/sh/include/cpu-sh4/cpu/sh7722.h b/arch/sh/include/cpu-sh4/cpu/sh7722.h index 48560407cbe..7a5b8a331b4 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7722.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7722.h @@ -235,4 +235,19 @@ enum {  	HWBLK_NR,  }; +enum { +	SHDMA_SLAVE_SCIF0_TX, +	SHDMA_SLAVE_SCIF0_RX, +	SHDMA_SLAVE_SCIF1_TX, +	SHDMA_SLAVE_SCIF1_RX, +	SHDMA_SLAVE_SCIF2_TX, +	SHDMA_SLAVE_SCIF2_RX, +	SHDMA_SLAVE_SIUA_TX, +	SHDMA_SLAVE_SIUA_RX, +	SHDMA_SLAVE_SIUB_TX, +	SHDMA_SLAVE_SIUB_RX, +	SHDMA_SLAVE_SDHI0_TX, +	SHDMA_SLAVE_SDHI0_RX, +}; +  #endif /* __ASM_SH7722_H__ */ diff --git a/arch/sh/include/cpu-sh4/cpu/sh7724.h b/arch/sh/include/cpu-sh4/cpu/sh7724.h index 0cd1f71a111..fbbf550cc52 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7724.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7724.h @@ -283,4 +283,23 @@ enum {  	HWBLK_NR,  }; +enum { +	SHDMA_SLAVE_SCIF0_TX, +	SHDMA_SLAVE_SCIF0_RX, +	SHDMA_SLAVE_SCIF1_TX, +	SHDMA_SLAVE_SCIF1_RX, +	SHDMA_SLAVE_SCIF2_TX, +	SHDMA_SLAVE_SCIF2_RX, +	SHDMA_SLAVE_SCIF3_TX, +	SHDMA_SLAVE_SCIF3_RX, +	SHDMA_SLAVE_SCIF4_TX, +	SHDMA_SLAVE_SCIF4_RX, +	SHDMA_SLAVE_SCIF5_TX, +	SHDMA_SLAVE_SCIF5_RX, +	SHDMA_SLAVE_SDHI0_TX, +	SHDMA_SLAVE_SDHI0_RX, +	SHDMA_SLAVE_SDHI1_TX, +	SHDMA_SLAVE_SDHI1_RX, +}; +  #endif /* __ASM_SH7724_H__ */ diff --git a/arch/sh/include/cpu-sh4/cpu/sq.h b/arch/sh/include/cpu-sh4/cpu/sq.h index 586d6491816..74716ba2dc3 100644 --- a/arch/sh/include/cpu-sh4/cpu/sq.h +++ b/arch/sh/include/cpu-sh4/cpu/sq.h @@ -12,6 +12,7 @@  #define __ASM_CPU_SH4_SQ_H  #include <asm/addrspace.h> +#include <asm/page.h>  /*   * Store queues range from e0000000-e3fffffc, allowing approx. 64MB to be @@ -28,7 +29,7 @@  /* arch/sh/kernel/cpu/sh4/sq.c */  unsigned long sq_remap(unsigned long phys, unsigned int size, -		       const char *name, unsigned long flags); +		       const char *name, pgprot_t prot);  void sq_unmap(unsigned long vaddr);  void sq_flush_range(unsigned long start, unsigned int len); diff --git a/arch/sh/include/cpu-sh4/cpu/ubc.h b/arch/sh/include/cpu-sh4/cpu/ubc.h deleted file mode 100644 index c86e1705093..00000000000 --- a/arch/sh/include/cpu-sh4/cpu/ubc.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * include/asm-sh/cpu-sh4/ubc.h - * - * Copyright (C) 1999 Niibe Yutaka - * Copyright (C) 2003 Paul Mundt - * Copyright (C) 2006 Lineo Solutions Inc. support SH4A UBC - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#ifndef __ASM_CPU_SH4_UBC_H -#define __ASM_CPU_SH4_UBC_H - -#if defined(CONFIG_CPU_SH4A) -#define UBC_CBR0		0xff200000 -#define UBC_CRR0		0xff200004 -#define UBC_CAR0		0xff200008 -#define UBC_CAMR0		0xff20000c -#define UBC_CBR1		0xff200020 -#define UBC_CRR1		0xff200024 -#define UBC_CAR1		0xff200028 -#define UBC_CAMR1		0xff20002c -#define UBC_CDR1		0xff200030 -#define UBC_CDMR1		0xff200034 -#define UBC_CETR1		0xff200038 -#define UBC_CCMFR		0xff200600 -#define UBC_CBCR		0xff200620 - -/* CBR	*/ -#define UBC_CBR_AIE		(0x01<<30) -#define UBC_CBR_ID_INST		(0x01<<4) -#define UBC_CBR_RW_READ		(0x01<<1) -#define UBC_CBR_CE		(0x01) - -#define	UBC_CBR_AIV_MASK	(0x00FF0000) -#define	UBC_CBR_AIV_SHIFT	(16) -#define UBC_CBR_AIV_SET(asid)	(((asid)<<UBC_CBR_AIV_SHIFT) & UBC_CBR_AIV_MASK) - -#define UBC_CBR_INIT		0x20000000 - -/* CRR	*/ -#define UBC_CRR_RES		(0x01<<13) -#define UBC_CRR_PCB		(0x01<<1) -#define UBC_CRR_BIE		(0x01) - -#define UBC_CRR_INIT		0x00002000 - -#else	/* CONFIG_CPU_SH4 */ -#define UBC_BARA		0xff200000 -#define UBC_BAMRA		0xff200004 -#define UBC_BBRA		0xff200008 -#define UBC_BASRA		0xff000014 -#define UBC_BARB		0xff20000c -#define UBC_BAMRB		0xff200010 -#define UBC_BBRB		0xff200014 -#define UBC_BASRB		0xff000018 -#define UBC_BDRB		0xff200018 -#define UBC_BDMRB		0xff20001c -#define UBC_BRCR		0xff200020 -#endif	/* CONFIG_CPU_SH4 */ - -#endif /* __ASM_CPU_SH4_UBC_H */ - diff --git a/arch/sh/include/cpu-sh4/cpu/watchdog.h b/arch/sh/include/cpu-sh4/cpu/watchdog.h index 7672301d0c7..7f62b938093 100644 --- a/arch/sh/include/cpu-sh4/cpu/watchdog.h +++ b/arch/sh/include/cpu-sh4/cpu/watchdog.h @@ -21,6 +21,12 @@  #define WTCNT		0xffcc0000 /*WDTST*/  #define WTST		WTCNT  #define WTBST		0xffcc0008 /*WDTBST*/ +/* Register definitions */ +#elif	defined(CONFIG_CPU_SUBTYPE_SH7722) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7723) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7724) +#define WTCNT		0xa4520000 +#define WTCSR		0xa4520004  #else  /* Register definitions */  #define WTCNT		0xffc00008 diff --git a/arch/sh/include/mach-common/mach/magicpanelr2.h b/arch/sh/include/mach-common/mach/magicpanelr2.h index c644a77ee35..183a2f74425 100644 --- a/arch/sh/include/mach-common/mach/magicpanelr2.h +++ b/arch/sh/include/mach-common/mach/magicpanelr2.h @@ -19,12 +19,12 @@  #include <asm/io_generic.h> -#define SETBITS_OUTB(mask, reg)   ctrl_outb(ctrl_inb(reg) | mask, reg) -#define SETBITS_OUTW(mask, reg)   ctrl_outw(ctrl_inw(reg) | mask, reg) -#define SETBITS_OUTL(mask, reg)   ctrl_outl(ctrl_inl(reg) | mask, reg) -#define CLRBITS_OUTB(mask, reg)   ctrl_outb(ctrl_inb(reg) & ~mask, reg) -#define CLRBITS_OUTW(mask, reg)   ctrl_outw(ctrl_inw(reg) & ~mask, reg) -#define CLRBITS_OUTL(mask, reg)   ctrl_outl(ctrl_inl(reg) & ~mask, reg) +#define SETBITS_OUTB(mask, reg)   __raw_writeb(__raw_readb(reg) | mask, reg) +#define SETBITS_OUTW(mask, reg)   __raw_writew(__raw_readw(reg) | mask, reg) +#define SETBITS_OUTL(mask, reg)   __raw_writel(__raw_readl(reg) | mask, reg) +#define CLRBITS_OUTB(mask, reg)   __raw_writeb(__raw_readb(reg) & ~mask, reg) +#define CLRBITS_OUTW(mask, reg)   __raw_writew(__raw_readw(reg) & ~mask, reg) +#define CLRBITS_OUTL(mask, reg)   __raw_writel(__raw_readl(reg) & ~mask, reg)  #define PA_LED          PORT_PADR      /* LED */ diff --git a/arch/sh/include/mach-dreamcast/mach/sysasic.h b/arch/sh/include/mach-dreamcast/mach/sysasic.h index f33426608a8..58f710e1ebc 100644 --- a/arch/sh/include/mach-dreamcast/mach/sysasic.h +++ b/arch/sh/include/mach-dreamcast/mach/sysasic.h @@ -39,5 +39,10 @@  #define HW_EVENT_IRQ_MAX (HW_EVENT_IRQ_BASE + 95) +/* arch/sh/boards/mach-dreamcast/irq.c */ +extern int systemasic_irq_demux(int); +extern void systemasic_irq_init(void); +extern void aica_time_init(void); +  #endif /* __ASM_SH_DREAMCAST_SYSASIC_H */ diff --git a/arch/sh/include/mach-migor/mach/migor.h b/arch/sh/include/mach-migor/mach/migor.h index cee6cb88e02..42fccf93412 100644 --- a/arch/sh/include/mach-migor/mach/migor.h +++ b/arch/sh/include/mach-migor/mach/migor.h @@ -1,6 +1,7 @@  #ifndef __ASM_SH_MIGOR_H  #define __ASM_SH_MIGOR_H +#define PORT_MSELCRA 0xa4050180  #define PORT_MSELCRB 0xa4050182  #define BSC_CS4BCR 0xfec10010  #define BSC_CS6ABCR 0xfec1001c diff --git a/arch/sh/include/mach-sdk7786/mach/fpga.h b/arch/sh/include/mach-sdk7786/mach/fpga.h new file mode 100644 index 00000000000..416b621d94d --- /dev/null +++ b/arch/sh/include/mach-sdk7786/mach/fpga.h @@ -0,0 +1,123 @@ +#ifndef __MACH_SDK7786_FPGA_H +#define __MACH_SDK7786_FPGA_H + +#include <linux/io.h> +#include <linux/types.h> +#include <linux/bitops.h> + +#define SRSTR		0x000 +#define  SRSTR_MAGIC	0x1971	/* Fixed magical read value */ + +#define INTASR		0x010 +#define INTAMR		0x020 +#define MODSWR		0x030 +#define INTTESTR	0x040 +#define SYSSR		0x050 +#define NRGPR		0x060 +#define NMISR		0x070 + +#define NMIMR		0x080 +#define  NMIMR_MAN_NMIM	BIT(0)	/* Manual NMI mask */ +#define  NMIMR_AUX_NMIM	BIT(1)	/* Auxiliary NMI mask */ + +#define INTBSR		0x090 +#define INTBMR		0x0a0 +#define USRLEDR		0x0b0 +#define MAPSWR		0x0c0 +#define FPGAVR		0x0d0 +#define FPGADR		0x0e0 +#define PCBRR		0x0f0 +#define RSR		0x100 +#define EXTASR		0x110 +#define SPCAR		0x120 +#define INTMSR		0x130 +#define PCIECR		0x140 +#define FAER		0x150 +#define USRGPIR		0x160 +/* 0x170 reserved */ +#define LCLASR		0x180 + +#define SBCR		0x190 +#define  SCBR_I2CMEN	BIT(0)	/* FPGA I2C master enable */ +#define  SCBR_I2CCEN	BIT(1)	/* CPU I2C master enable */ + +#define PWRCR		0x1a0 +#define  PWRCR_SCISEL0	BIT(0) +#define  PWRCR_SCISEL1	BIT(1) +#define  PWRCR_SCIEN	BIT(2)	/* Serial port enable */ +#define  PWRCR_PDWNACK	BIT(5)	/* Power down acknowledge */ +#define  PWRCR_PDWNREQ	BIT(7)	/* Power down request */ +#define  PWRCR_INT2	BIT(11)	/* INT2 connection to power manager */ +#define  PWRCR_BUPINIT	BIT(13)	/* DDR backup initialize */ +#define  PWRCR_BKPRST	BIT(15) /* Backup power reset */ + +#define SPCBR		0x1b0 +#define SPICR		0x1c0 +#define SPIDR		0x1d0 +#define I2CCR		0x1e0 +#define I2CDR		0x1f0 +#define FPGACR		0x200 +#define IASELR1		0x210 +#define IASELR2		0x220 +#define IASELR3		0x230 +#define IASELR4		0x240 +#define IASELR5		0x250 +#define IASELR6		0x260 +#define IASELR7		0x270 +#define IASELR8		0x280 +#define IASELR9		0x290 +#define IASELR10	0x2a0 +#define IASELR11	0x2b0 +#define IASELR12	0x2c0 +#define IASELR13	0x2d0 +#define IASELR14	0x2e0 +#define IASELR15	0x2f0 +/* 0x300 reserved */ +#define IBSELR1		0x310 +#define IBSELR2		0x320 +#define IBSELR3		0x330 +#define IBSELR4		0x340 +#define IBSELR5		0x350 +#define IBSELR6		0x360 +#define IBSELR7		0x370 +#define IBSELR8		0x380 +#define IBSELR9		0x390 +#define IBSELR10	0x3a0 +#define IBSELR11	0x3b0 +#define IBSELR12	0x3c0 +#define IBSELR13	0x3d0 +#define IBSELR14	0x3e0 +#define IBSELR15	0x3f0 +#define USRACR		0x400 +#define BEEPR		0x410 +#define USRLCDR		0x420 +#define SMBCR		0x430 +#define SMBDR		0x440 +#define USBCR		0x450 +#define AMSR		0x460 +#define ACCR		0x470 +#define SDIFCR		0x480 + +/* arch/sh/boards/mach-sdk7786/fpga.c */ +extern void __iomem *sdk7786_fpga_base; +extern void sdk7786_fpga_init(void); + +#define SDK7786_FPGA_REGADDR(reg)	(sdk7786_fpga_base + (reg)) + +/* + * A convenience wrapper from register offset to internal I2C address, + * when the FPGA is in I2C slave mode. + */ +#define SDK7786_FPGA_I2CADDR(reg)	((reg) >> 3) + +static inline u16 fpga_read_reg(unsigned int reg) +{ +	return ioread16(sdk7786_fpga_base + reg); +} + +static inline void fpga_write_reg(u16 val, unsigned int reg) +{ +	iowrite16(val, sdk7786_fpga_base + reg); +} + +#endif /* __MACH_SDK7786_FPGA_H */ diff --git a/arch/sh/include/mach-sdk7786/mach/irq.h b/arch/sh/include/mach-sdk7786/mach/irq.h new file mode 100644 index 00000000000..0f584635e6e --- /dev/null +++ b/arch/sh/include/mach-sdk7786/mach/irq.h @@ -0,0 +1,7 @@ +#ifndef __MACH_SDK7786_IRQ_H +#define __MACH_SDK7786_IRQ_H + +/* arch/sh/boards/mach-sdk7786/irq.c */ +extern void sdk7786_init_irq(void); + +#endif /* __MACH_SDK7786_IRQ_H */ diff --git a/arch/sh/include/mach-se/mach/se7343.h b/arch/sh/include/mach-se/mach/se7343.h index 749914b400f..8d8170d6cc4 100644 --- a/arch/sh/include/mach-se/mach/se7343.h +++ b/arch/sh/include/mach-se/mach/se7343.h @@ -94,26 +94,26 @@  #define PORT_DRVCR	0xA4050180 -#define PORT_PADR  	0xA4050120 -#define PORT_PBDR  	0xA4050122 -#define PORT_PCDR  	0xA4050124 -#define PORT_PDDR  	0xA4050126 -#define PORT_PEDR  	0xA4050128 -#define PORT_PFDR  	0xA405012A -#define PORT_PGDR  	0xA405012C -#define PORT_PHDR  	0xA405012E -#define PORT_PJDR  	0xA4050130 -#define PORT_PKDR  	0xA4050132 -#define PORT_PLDR  	0xA4050134 -#define PORT_PMDR  	0xA4050136 -#define PORT_PNDR  	0xA4050138 -#define PORT_PQDR  	0xA405013A -#define PORT_PRDR  	0xA405013C -#define PORT_PTDR  	0xA4050160 -#define PORT_PUDR  	0xA4050162 -#define PORT_PVDR  	0xA4050164 -#define PORT_PWDR  	0xA4050166 -#define PORT_PYDR  	0xA4050168 +#define PORT_PADR	0xA4050120 +#define PORT_PBDR	0xA4050122 +#define PORT_PCDR	0xA4050124 +#define PORT_PDDR	0xA4050126 +#define PORT_PEDR	0xA4050128 +#define PORT_PFDR	0xA405012A +#define PORT_PGDR	0xA405012C +#define PORT_PHDR	0xA405012E +#define PORT_PJDR	0xA4050130 +#define PORT_PKDR	0xA4050132 +#define PORT_PLDR	0xA4050134 +#define PORT_PMDR	0xA4050136 +#define PORT_PNDR	0xA4050138 +#define PORT_PQDR	0xA405013A +#define PORT_PRDR	0xA405013C +#define PORT_PTDR	0xA4050160 +#define PORT_PUDR	0xA4050162 +#define PORT_PVDR	0xA4050164 +#define PORT_PWDR	0xA4050166 +#define PORT_PYDR	0xA4050168  #define FPGA_IN		0xb1400000  #define FPGA_OUT	0xb1400002 @@ -133,18 +133,10 @@  #define SE7343_FPGA_IRQ_UARTB	11  #define SE7343_FPGA_IRQ_NR	12 -#define SE7343_FPGA_IRQ_BASE	120 - -#define MRSHPC_IRQ3    	(SE7343_FPGA_IRQ_BASE + SE7343_FPGA_IRQ_MRSHPC3) -#define MRSHPC_IRQ2    	(SE7343_FPGA_IRQ_BASE + SE7343_FPGA_IRQ_MRSHPC2) -#define MRSHPC_IRQ1    	(SE7343_FPGA_IRQ_BASE + SE7343_FPGA_IRQ_MRSHPC1) -#define MRSHPC_IRQ0    	(SE7343_FPGA_IRQ_BASE + SE7343_FPGA_IRQ_MRSHPC0) -#define SMC_IRQ		(SE7343_FPGA_IRQ_BASE + SE7343_FPGA_IRQ_SMC) -#define USB_IRQ		(SE7343_FPGA_IRQ_BASE + SE7343_FPGA_IRQ_USB) -#define UARTA_IRQ	(SE7343_FPGA_IRQ_BASE + SE7343_FPGA_IRQ_UARTA) -#define UARTB_IRQ	(SE7343_FPGA_IRQ_BASE + SE7343_FPGA_IRQ_UARTB)  /* arch/sh/boards/se/7343/irq.c */ +extern unsigned int se7343_fpga_irq[]; +  void init_7343se_IRQ(void);  #endif  /* __ASM_SH_HITACHI_SE7343_H */ diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile index 0d587da1ef1..650b92f00ee 100644 --- a/arch/sh/kernel/Makefile +++ b/arch/sh/kernel/Makefile @@ -11,10 +11,11 @@ endif  CFLAGS_REMOVE_return_address.o = -pg -obj-y	:= debugtraps.o dma-nommu.o dumpstack.o 			\ +obj-y	:= clkdev.o debugtraps.o dma-nommu.o dumpstack.o 		\  	   idle.o io.o io_generic.o irq.o				\ -	   irq_$(BITS).o machvec.o nmi_debug.o process_$(BITS).o 	\ -	   ptrace_$(BITS).o return_address.o				\ +	   irq_$(BITS).o machvec.o nmi_debug.o process.o		\ +	   process_$(BITS).o ptrace_$(BITS).o				\ +	   reboot.o return_address.o					\  	   setup.o signal_$(BITS).o sys_sh.o sys_sh$(BITS).o		\  	   syscalls_$(BITS).o time.o topology.o traps.o			\  	   traps_$(BITS).o unwinder.o @@ -22,7 +23,7 @@ obj-y	:= debugtraps.o dma-nommu.o dumpstack.o 			\  obj-y				+= cpu/  obj-$(CONFIG_VSYSCALL)		+= vsyscall/  obj-$(CONFIG_SMP)		+= smp.o -obj-$(CONFIG_SH_STANDARD_BIOS)	+= sh_bios.o early_printk.o +obj-$(CONFIG_SH_STANDARD_BIOS)	+= sh_bios.o  obj-$(CONFIG_KGDB)		+= kgdb.o  obj-$(CONFIG_SH_CPU_FREQ)	+= cpufreq.o  obj-$(CONFIG_MODULES)		+= sh_ksyms_$(BITS).o module.o @@ -39,6 +40,7 @@ obj-$(CONFIG_HIBERNATION)	+= swsusp.o  obj-$(CONFIG_DWARF_UNWINDER)	+= dwarf.o  obj-$(CONFIG_PERF_EVENTS)	+= perf_event.o perf_callchain.o +obj-$(CONFIG_HAVE_HW_BREAKPOINT)		+= hw_breakpoint.o  obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)	+= localtimer.o  EXTRA_CFLAGS += -Werror diff --git a/arch/sh/kernel/clkdev.c b/arch/sh/kernel/clkdev.c new file mode 100644 index 00000000000..defdd6e3090 --- /dev/null +++ b/arch/sh/kernel/clkdev.c @@ -0,0 +1,169 @@ +/* + * arch/sh/kernel/clkdev.c + * + * Cloned from arch/arm/common/clkdev.c: + * + *  Copyright (C) 2008 Russell King. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Helper for the clk API to assist looking up a struct clk. + */ +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/device.h> +#include <linux/list.h> +#include <linux/errno.h> +#include <linux/err.h> +#include <linux/string.h> +#include <linux/mutex.h> +#include <linux/clk.h> +#include <linux/slab.h> +#include <linux/bootmem.h> +#include <linux/mm.h> +#include <asm/clock.h> +#include <asm/clkdev.h> + +static LIST_HEAD(clocks); +static DEFINE_MUTEX(clocks_mutex); + +/* + * Find the correct struct clk for the device and connection ID. + * We do slightly fuzzy matching here: + *  An entry with a NULL ID is assumed to be a wildcard. + *  If an entry has a device ID, it must match + *  If an entry has a connection ID, it must match + * Then we take the most specific entry - with the following + * order of precidence: dev+con > dev only > con only. + */ +static struct clk *clk_find(const char *dev_id, const char *con_id) +{ +	struct clk_lookup *p; +	struct clk *clk = NULL; +	int match, best = 0; + +	list_for_each_entry(p, &clocks, node) { +		match = 0; +		if (p->dev_id) { +			if (!dev_id || strcmp(p->dev_id, dev_id)) +				continue; +			match += 2; +		} +		if (p->con_id) { +			if (!con_id || strcmp(p->con_id, con_id)) +				continue; +			match += 1; +		} +		if (match == 0) +			continue; + +		if (match > best) { +			clk = p->clk; +			best = match; +		} +	} +	return clk; +} + +struct clk *clk_get_sys(const char *dev_id, const char *con_id) +{ +	struct clk *clk; + +	mutex_lock(&clocks_mutex); +	clk = clk_find(dev_id, con_id); +	mutex_unlock(&clocks_mutex); + +	return clk ? clk : ERR_PTR(-ENOENT); +} +EXPORT_SYMBOL(clk_get_sys); + +void clkdev_add(struct clk_lookup *cl) +{ +	mutex_lock(&clocks_mutex); +	list_add_tail(&cl->node, &clocks); +	mutex_unlock(&clocks_mutex); +} +EXPORT_SYMBOL(clkdev_add); + +void __init clkdev_add_table(struct clk_lookup *cl, size_t num) +{ +	mutex_lock(&clocks_mutex); +	while (num--) { +		list_add_tail(&cl->node, &clocks); +		cl++; +	} +	mutex_unlock(&clocks_mutex); +} + +#define MAX_DEV_ID	20 +#define MAX_CON_ID	16 + +struct clk_lookup_alloc { +	struct clk_lookup cl; +	char	dev_id[MAX_DEV_ID]; +	char	con_id[MAX_CON_ID]; +}; + +struct clk_lookup * __init_refok +clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...) +{ +	struct clk_lookup_alloc *cla; + +	if (!slab_is_available()) +		cla = alloc_bootmem_low_pages(sizeof(*cla)); +	else +		cla = kzalloc(sizeof(*cla), GFP_KERNEL); + +	if (!cla) +		return NULL; + +	cla->cl.clk = clk; +	if (con_id) { +		strlcpy(cla->con_id, con_id, sizeof(cla->con_id)); +		cla->cl.con_id = cla->con_id; +	} + +	if (dev_fmt) { +		va_list ap; + +		va_start(ap, dev_fmt); +		vscnprintf(cla->dev_id, sizeof(cla->dev_id), dev_fmt, ap); +		cla->cl.dev_id = cla->dev_id; +		va_end(ap); +	} + +	return &cla->cl; +} +EXPORT_SYMBOL(clkdev_alloc); + +int clk_add_alias(const char *alias, const char *alias_dev_name, char *id, +	struct device *dev) +{ +	struct clk *r = clk_get(dev, id); +	struct clk_lookup *l; + +	if (IS_ERR(r)) +		return PTR_ERR(r); + +	l = clkdev_alloc(r, alias, alias_dev_name); +	clk_put(r); +	if (!l) +		return -ENODEV; +	clkdev_add(l); +	return 0; +} +EXPORT_SYMBOL(clk_add_alias); + +/* + * clkdev_drop - remove a clock dynamically allocated + */ +void clkdev_drop(struct clk_lookup *cl) +{ +	mutex_lock(&clocks_mutex); +	list_del(&cl->node); +	mutex_unlock(&clocks_mutex); +	kfree(cl); +} +EXPORT_SYMBOL(clkdev_drop); diff --git a/arch/sh/kernel/cpu/Makefile b/arch/sh/kernel/cpu/Makefile index d97c803719e..4edcb60a135 100644 --- a/arch/sh/kernel/cpu/Makefile +++ b/arch/sh/kernel/cpu/Makefile @@ -16,6 +16,8 @@ obj-$(CONFIG_ARCH_SHMOBILE)	+= shmobile/  # Common interfaces.  obj-$(CONFIG_SH_ADC)		+= adc.o -obj-$(CONFIG_SH_CLK_CPG)	+= clock-cpg.o +obj-$(CONFIG_SH_CLK_CPG_LEGACY)	+= clock-cpg.o +obj-$(CONFIG_SH_FPU)		+= fpu.o +obj-$(CONFIG_SH_FPU_EMU)	+= fpu.o  obj-y	+= irq/ init.o clock.o hwblk.o diff --git a/arch/sh/kernel/cpu/adc.c b/arch/sh/kernel/cpu/adc.c index da3d6877f93..d307571d54b 100644 --- a/arch/sh/kernel/cpu/adc.c +++ b/arch/sh/kernel/cpu/adc.c @@ -18,19 +18,19 @@ int adc_single(unsigned int channel)  	off = (channel & 0x03) << 2; -	csr = ctrl_inb(ADCSR); +	csr = __raw_readb(ADCSR);  	csr = channel | ADCSR_ADST | ADCSR_CKS; -	ctrl_outb(csr, ADCSR); +	__raw_writeb(csr, ADCSR);  	do { -		csr = ctrl_inb(ADCSR); +		csr = __raw_readb(ADCSR);  	} while ((csr & ADCSR_ADF) == 0);  	csr &= ~(ADCSR_ADF | ADCSR_ADST); -	ctrl_outb(csr, ADCSR); +	__raw_writeb(csr, ADCSR); -	return (((ctrl_inb(ADDRAH + off) << 8) | -		ctrl_inb(ADDRAL + off)) >> 6); +	return (((__raw_readb(ADDRAH + off) << 8) | +		__raw_readb(ADDRAL + off)) >> 6);  }  EXPORT_SYMBOL(adc_single); diff --git a/arch/sh/kernel/cpu/clock-cpg.c b/arch/sh/kernel/cpu/clock-cpg.c index 6dfe2cced3f..e2f63d68da5 100644 --- a/arch/sh/kernel/cpu/clock-cpg.c +++ b/arch/sh/kernel/cpu/clock-cpg.c @@ -2,223 +2,25 @@  #include <linux/compiler.h>  #include <linux/slab.h>  #include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h> -static int sh_clk_mstp32_enable(struct clk *clk) -{ -	__raw_writel(__raw_readl(clk->enable_reg) & ~(1 << clk->enable_bit), -		     clk->enable_reg); -	return 0; -} - -static void sh_clk_mstp32_disable(struct clk *clk) -{ -	__raw_writel(__raw_readl(clk->enable_reg) | (1 << clk->enable_bit), -		     clk->enable_reg); -} - -static struct clk_ops sh_clk_mstp32_clk_ops = { -	.enable		= sh_clk_mstp32_enable, -	.disable	= sh_clk_mstp32_disable, -	.recalc		= followparent_recalc, -}; - -int __init sh_clk_mstp32_register(struct clk *clks, int nr) -{ -	struct clk *clkp; -	int ret = 0; -	int k; - -	for (k = 0; !ret && (k < nr); k++) { -		clkp = clks + k; -		clkp->ops = &sh_clk_mstp32_clk_ops; -		ret |= clk_register(clkp); -	} - -	return ret; -} - -static long sh_clk_div_round_rate(struct clk *clk, unsigned long rate) -{ -	return clk_rate_table_round(clk, clk->freq_table, rate); -} - -static int sh_clk_div6_divisors[64] = { -	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, -	17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -	33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, -	49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64 -}; - -static struct clk_div_mult_table sh_clk_div6_table = { -	.divisors = sh_clk_div6_divisors, -	.nr_divisors = ARRAY_SIZE(sh_clk_div6_divisors), -}; - -static unsigned long sh_clk_div6_recalc(struct clk *clk) -{ -	struct clk_div_mult_table *table = &sh_clk_div6_table; -	unsigned int idx; - -	clk_rate_table_build(clk, clk->freq_table, table->nr_divisors, -			     table, NULL); - -	idx = __raw_readl(clk->enable_reg) & 0x003f; - -	return clk->freq_table[idx].frequency; -} - -static int sh_clk_div6_set_rate(struct clk *clk, -				unsigned long rate, int algo_id) -{ -	unsigned long value; -	int idx; - -	idx = clk_rate_table_find(clk, clk->freq_table, rate); -	if (idx < 0) -		return idx; - -	value = __raw_readl(clk->enable_reg); -	value &= ~0x3f; -	value |= idx; -	__raw_writel(value, clk->enable_reg); -	return 0; -} - -static int sh_clk_div6_enable(struct clk *clk) -{ -	unsigned long value; -	int ret; - -	ret = sh_clk_div6_set_rate(clk, clk->rate, 0); -	if (ret == 0) { -		value = __raw_readl(clk->enable_reg); -		value &= ~0x100; /* clear stop bit to enable clock */ -		__raw_writel(value, clk->enable_reg); -	} -	return ret; -} - -static void sh_clk_div6_disable(struct clk *clk) -{ -	unsigned long value; - -	value = __raw_readl(clk->enable_reg); -	value |= 0x100; /* stop clock */ -	value |= 0x3f; /* VDIV bits must be non-zero, overwrite divider */ -	__raw_writel(value, clk->enable_reg); -} - -static struct clk_ops sh_clk_div6_clk_ops = { -	.recalc		= sh_clk_div6_recalc, -	.round_rate	= sh_clk_div_round_rate, -	.set_rate	= sh_clk_div6_set_rate, -	.enable		= sh_clk_div6_enable, -	.disable	= sh_clk_div6_disable, -}; - -int __init sh_clk_div6_register(struct clk *clks, int nr) -{ -	struct clk *clkp; -	void *freq_table; -	int nr_divs = sh_clk_div6_table.nr_divisors; -	int freq_table_size = sizeof(struct cpufreq_frequency_table); -	int ret = 0; -	int k; - -	freq_table_size *= (nr_divs + 1); -	freq_table = kzalloc(freq_table_size * nr, GFP_KERNEL); -	if (!freq_table) { -		pr_err("sh_clk_div6_register: unable to alloc memory\n"); -		return -ENOMEM; -	} - -	for (k = 0; !ret && (k < nr); k++) { -		clkp = clks + k; - -		clkp->ops = &sh_clk_div6_clk_ops; -		clkp->id = -1; -		clkp->freq_table = freq_table + (k * freq_table_size); -		clkp->freq_table[nr_divs].frequency = CPUFREQ_TABLE_END; - -		ret = clk_register(clkp); -	} - -	return ret; -} - -static unsigned long sh_clk_div4_recalc(struct clk *clk) -{ -	struct clk_div_mult_table *table = clk->priv; -	unsigned int idx; - -	clk_rate_table_build(clk, clk->freq_table, table->nr_divisors, -			     table, &clk->arch_flags); - -	idx = (__raw_readl(clk->enable_reg) >> clk->enable_bit) & 0x000f; - -	return clk->freq_table[idx].frequency; -} - -static struct clk_ops sh_clk_div4_clk_ops = { -	.recalc		= sh_clk_div4_recalc, -	.round_rate	= sh_clk_div_round_rate, -}; - -int __init sh_clk_div4_register(struct clk *clks, int nr, -				struct clk_div_mult_table *table) -{ -	struct clk *clkp; -	void *freq_table; -	int nr_divs = table->nr_divisors; -	int freq_table_size = sizeof(struct cpufreq_frequency_table); -	int ret = 0; -	int k; - -	freq_table_size *= (nr_divs + 1); -	freq_table = kzalloc(freq_table_size * nr, GFP_KERNEL); -	if (!freq_table) { -		pr_err("sh_clk_div4_register: unable to alloc memory\n"); -		return -ENOMEM; -	} - -	for (k = 0; !ret && (k < nr); k++) { -		clkp = clks + k; - -		clkp->ops = &sh_clk_div4_clk_ops; -		clkp->id = -1; -		clkp->priv = table; - -		clkp->freq_table = freq_table + (k * freq_table_size); -		clkp->freq_table[nr_divs].frequency = CPUFREQ_TABLE_END; - -		ret = clk_register(clkp); -	} - -	return ret; -} - -#ifdef CONFIG_SH_CLK_CPG_LEGACY  static struct clk master_clk = { -	.name		= "master_clk",  	.flags		= CLK_ENABLE_ON_INIT,  	.rate		= CONFIG_SH_PCLK_FREQ,  };  static struct clk peripheral_clk = { -	.name		= "peripheral_clk",  	.parent		= &master_clk,  	.flags		= CLK_ENABLE_ON_INIT,  };  static struct clk bus_clk = { -	.name		= "bus_clk",  	.parent		= &master_clk,  	.flags		= CLK_ENABLE_ON_INIT,  };  static struct clk cpu_clk = { -	.name		= "cpu_clk",  	.parent		= &master_clk,  	.flags		= CLK_ENABLE_ON_INIT,  }; @@ -233,6 +35,16 @@ static struct clk *onchip_clocks[] = {  	&cpu_clk,  }; +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("master_clk", &master_clk), +	CLKDEV_CON_ID("peripheral_clk", &peripheral_clk), +	CLKDEV_CON_ID("bus_clk", &bus_clk), +	CLKDEV_CON_ID("cpu_clk", &cpu_clk), +}; +  int __init __deprecated cpg_clk_init(void)  {  	int i, ret = 0; @@ -244,6 +56,13 @@ int __init __deprecated cpg_clk_init(void)  			ret |= clk_register(clk);  	} +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); + +	clk_add_alias("tmu_fck", NULL, "peripheral_clk", NULL); +	clk_add_alias("mtu2_fck", NULL, "peripheral_clk", NULL); +	clk_add_alias("cmt_fck", NULL, "peripheral_clk", NULL); +	clk_add_alias("sci_ick", NULL, "peripheral_clk", NULL); +  	return ret;  } @@ -255,4 +74,3 @@ int __init __weak arch_clk_init(void)  {  	return cpg_clk_init();  } -#endif /* CONFIG_SH_CPG_CLK_LEGACY */ diff --git a/arch/sh/kernel/cpu/clock.c b/arch/sh/kernel/cpu/clock.c index f3a46be2ae8..50f887dda56 100644 --- a/arch/sh/kernel/cpu/clock.c +++ b/arch/sh/kernel/cpu/clock.c @@ -10,558 +10,16 @@   *   *  Modified for omap shared clock framework by Tony Lindgren <tony@atomide.com>   * - *  With clkdev bits: - * - *	Copyright (C) 2008 Russell King. - *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   */  #include <linux/kernel.h>  #include <linux/init.h> -#include <linux/module.h> -#include <linux/mutex.h> -#include <linux/list.h> -#include <linux/kobject.h> -#include <linux/sysdev.h> -#include <linux/seq_file.h> -#include <linux/err.h> -#include <linux/platform_device.h> -#include <linux/debugfs.h> -#include <linux/cpufreq.h> +#include <linux/clk.h>  #include <asm/clock.h>  #include <asm/machvec.h> -static LIST_HEAD(clock_list); -static DEFINE_SPINLOCK(clock_lock); -static DEFINE_MUTEX(clock_list_sem); - -void clk_rate_table_build(struct clk *clk, -			  struct cpufreq_frequency_table *freq_table, -			  int nr_freqs, -			  struct clk_div_mult_table *src_table, -			  unsigned long *bitmap) -{ -	unsigned long mult, div; -	unsigned long freq; -	int i; - -	for (i = 0; i < nr_freqs; i++) { -		div = 1; -		mult = 1; - -		if (src_table->divisors && i < src_table->nr_divisors) -			div = src_table->divisors[i]; - -		if (src_table->multipliers && i < src_table->nr_multipliers) -			mult = src_table->multipliers[i]; - -		if (!div || !mult || (bitmap && !test_bit(i, bitmap))) -			freq = CPUFREQ_ENTRY_INVALID; -		else -			freq = clk->parent->rate * mult / div; - -		freq_table[i].index = i; -		freq_table[i].frequency = freq; -	} - -	/* Termination entry */ -	freq_table[i].index = i; -	freq_table[i].frequency = CPUFREQ_TABLE_END; -} - -long clk_rate_table_round(struct clk *clk, -			  struct cpufreq_frequency_table *freq_table, -			  unsigned long rate) -{ -	unsigned long rate_error, rate_error_prev = ~0UL; -	unsigned long rate_best_fit = rate; -	unsigned long highest, lowest; -	int i; - -	highest = lowest = 0; - -	for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { -		unsigned long freq = freq_table[i].frequency; - -		if (freq == CPUFREQ_ENTRY_INVALID) -			continue; - -		if (freq > highest) -			highest = freq; -		if (freq < lowest) -			lowest = freq; - -		rate_error = abs(freq - rate); -		if (rate_error < rate_error_prev) { -			rate_best_fit = freq; -			rate_error_prev = rate_error; -		} - -		if (rate_error == 0) -			break; -	} - -	if (rate >= highest) -		rate_best_fit = highest; -	if (rate <= lowest) -		rate_best_fit = lowest; - -	return rate_best_fit; -} - -int clk_rate_table_find(struct clk *clk, -			struct cpufreq_frequency_table *freq_table, -			unsigned long rate) -{ -	int i; - -	for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { -		unsigned long freq = freq_table[i].frequency; - -		if (freq == CPUFREQ_ENTRY_INVALID) -			continue; - -		if (freq == rate) -			return i; -	} - -	return -ENOENT; -} - -/* Used for clocks that always have same value as the parent clock */ -unsigned long followparent_recalc(struct clk *clk) -{ -	return clk->parent ? clk->parent->rate : 0; -} - -int clk_reparent(struct clk *child, struct clk *parent) -{ -	list_del_init(&child->sibling); -	if (parent) -		list_add(&child->sibling, &parent->children); -	child->parent = parent; - -	/* now do the debugfs renaming to reattach the child -	   to the proper parent */ - -	return 0; -} - -/* Propagate rate to children */ -void propagate_rate(struct clk *tclk) -{ -	struct clk *clkp; - -	list_for_each_entry(clkp, &tclk->children, sibling) { -		if (clkp->ops && clkp->ops->recalc) -			clkp->rate = clkp->ops->recalc(clkp); - -		propagate_rate(clkp); -	} -} - -static void __clk_disable(struct clk *clk) -{ -	if (clk->usecount == 0) { -		printk(KERN_ERR "Trying disable clock %s with 0 usecount\n", -		       clk->name); -		WARN_ON(1); -		return; -	} - -	if (!(--clk->usecount)) { -		if (likely(clk->ops && clk->ops->disable)) -			clk->ops->disable(clk); -		if (likely(clk->parent)) -			__clk_disable(clk->parent); -	} -} - -void clk_disable(struct clk *clk) -{ -	unsigned long flags; - -	if (!clk) -		return; - -	spin_lock_irqsave(&clock_lock, flags); -	__clk_disable(clk); -	spin_unlock_irqrestore(&clock_lock, flags); -} -EXPORT_SYMBOL_GPL(clk_disable); - -static int __clk_enable(struct clk *clk) -{ -	int ret = 0; - -	if (clk->usecount++ == 0) { -		if (clk->parent) { -			ret = __clk_enable(clk->parent); -			if (unlikely(ret)) -				goto err; -		} - -		if (clk->ops && clk->ops->enable) { -			ret = clk->ops->enable(clk); -			if (ret) { -				if (clk->parent) -					__clk_disable(clk->parent); -				goto err; -			} -		} -	} - -	return ret; -err: -	clk->usecount--; -	return ret; -} - -int clk_enable(struct clk *clk) -{ -	unsigned long flags; -	int ret; - -	if (!clk) -		return -EINVAL; - -	spin_lock_irqsave(&clock_lock, flags); -	ret = __clk_enable(clk); -	spin_unlock_irqrestore(&clock_lock, flags); - -	return ret; -} -EXPORT_SYMBOL_GPL(clk_enable); - -static LIST_HEAD(root_clks); - -/** - * recalculate_root_clocks - recalculate and propagate all root clocks - * - * Recalculates all root clocks (clocks with no parent), which if the - * clock's .recalc is set correctly, should also propagate their rates. - * Called at init. - */ -void recalculate_root_clocks(void) -{ -	struct clk *clkp; - -	list_for_each_entry(clkp, &root_clks, sibling) { -		if (clkp->ops && clkp->ops->recalc) -			clkp->rate = clkp->ops->recalc(clkp); -		propagate_rate(clkp); -	} -} - -int clk_register(struct clk *clk) -{ -	if (clk == NULL || IS_ERR(clk)) -		return -EINVAL; - -	/* -	 * trap out already registered clocks -	 */ -	if (clk->node.next || clk->node.prev) -		return 0; - -	mutex_lock(&clock_list_sem); - -	INIT_LIST_HEAD(&clk->children); -	clk->usecount = 0; - -	if (clk->parent) -		list_add(&clk->sibling, &clk->parent->children); -	else -		list_add(&clk->sibling, &root_clks); - -	list_add(&clk->node, &clock_list); -	if (clk->ops && clk->ops->init) -		clk->ops->init(clk); -	mutex_unlock(&clock_list_sem); - -	return 0; -} -EXPORT_SYMBOL_GPL(clk_register); - -void clk_unregister(struct clk *clk) -{ -	mutex_lock(&clock_list_sem); -	list_del(&clk->sibling); -	list_del(&clk->node); -	mutex_unlock(&clock_list_sem); -} -EXPORT_SYMBOL_GPL(clk_unregister); - -static void clk_enable_init_clocks(void) -{ -	struct clk *clkp; - -	list_for_each_entry(clkp, &clock_list, node) -		if (clkp->flags & CLK_ENABLE_ON_INIT) -			clk_enable(clkp); -} - -unsigned long clk_get_rate(struct clk *clk) -{ -	return clk->rate; -} -EXPORT_SYMBOL_GPL(clk_get_rate); - -int clk_set_rate(struct clk *clk, unsigned long rate) -{ -	return clk_set_rate_ex(clk, rate, 0); -} -EXPORT_SYMBOL_GPL(clk_set_rate); - -int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id) -{ -	int ret = -EOPNOTSUPP; -	unsigned long flags; - -	spin_lock_irqsave(&clock_lock, flags); - -	if (likely(clk->ops && clk->ops->set_rate)) { -		ret = clk->ops->set_rate(clk, rate, algo_id); -		if (ret != 0) -			goto out_unlock; -	} else { -		clk->rate = rate; -		ret = 0; -	} - -	if (clk->ops && clk->ops->recalc) -		clk->rate = clk->ops->recalc(clk); - -	propagate_rate(clk); - -out_unlock: -	spin_unlock_irqrestore(&clock_lock, flags); - -	return ret; -} -EXPORT_SYMBOL_GPL(clk_set_rate_ex); - -int clk_set_parent(struct clk *clk, struct clk *parent) -{ -	unsigned long flags; -	int ret = -EINVAL; - -	if (!parent || !clk) -		return ret; -	if (clk->parent == parent) -		return 0; - -	spin_lock_irqsave(&clock_lock, flags); -	if (clk->usecount == 0) { -		if (clk->ops->set_parent) -			ret = clk->ops->set_parent(clk, parent); -		else -			ret = clk_reparent(clk, parent); - -		if (ret == 0) { -			pr_debug("clock: set parent of %s to %s (new rate %ld)\n", -				 clk->name, clk->parent->name, clk->rate); -			if (clk->ops->recalc) -				clk->rate = clk->ops->recalc(clk); -			propagate_rate(clk); -		} -	} else -		ret = -EBUSY; -	spin_unlock_irqrestore(&clock_lock, flags); - -	return ret; -} -EXPORT_SYMBOL_GPL(clk_set_parent); - -struct clk *clk_get_parent(struct clk *clk) -{ -	return clk->parent; -} -EXPORT_SYMBOL_GPL(clk_get_parent); - -long clk_round_rate(struct clk *clk, unsigned long rate) -{ -	if (likely(clk->ops && clk->ops->round_rate)) { -		unsigned long flags, rounded; - -		spin_lock_irqsave(&clock_lock, flags); -		rounded = clk->ops->round_rate(clk, rate); -		spin_unlock_irqrestore(&clock_lock, flags); - -		return rounded; -	} - -	return clk_get_rate(clk); -} -EXPORT_SYMBOL_GPL(clk_round_rate); - -/* - * Find the correct struct clk for the device and connection ID. - * We do slightly fuzzy matching here: - *  An entry with a NULL ID is assumed to be a wildcard. - *  If an entry has a device ID, it must match - *  If an entry has a connection ID, it must match - * Then we take the most specific entry - with the following - * order of precidence: dev+con > dev only > con only. - */ -static struct clk *clk_find(const char *dev_id, const char *con_id) -{ -	struct clk_lookup *p; -	struct clk *clk = NULL; -	int match, best = 0; - -	list_for_each_entry(p, &clock_list, node) { -		match = 0; -		if (p->dev_id) { -			if (!dev_id || strcmp(p->dev_id, dev_id)) -				continue; -			match += 2; -		} -		if (p->con_id) { -			if (!con_id || strcmp(p->con_id, con_id)) -				continue; -			match += 1; -		} -		if (match == 0) -			continue; - -		if (match > best) { -			clk = p->clk; -			best = match; -		} -	} -	return clk; -} - -struct clk *clk_get_sys(const char *dev_id, const char *con_id) -{ -	struct clk *clk; - -	mutex_lock(&clock_list_sem); -	clk = clk_find(dev_id, con_id); -	mutex_unlock(&clock_list_sem); - -	return clk ? clk : ERR_PTR(-ENOENT); -} -EXPORT_SYMBOL_GPL(clk_get_sys); - -/* - * Returns a clock. Note that we first try to use device id on the bus - * and clock name. If this fails, we try to use clock name only. - */ -struct clk *clk_get(struct device *dev, const char *id) -{ -	const char *dev_id = dev ? dev_name(dev) : NULL; -	struct clk *p, *clk = ERR_PTR(-ENOENT); -	int idno; - -	clk = clk_get_sys(dev_id, id); -	if (clk && !IS_ERR(clk)) -		return clk; - -	if (dev == NULL || dev->bus != &platform_bus_type) -		idno = -1; -	else -		idno = to_platform_device(dev)->id; - -	mutex_lock(&clock_list_sem); -	list_for_each_entry(p, &clock_list, node) { -		if (p->id == idno && -		    strcmp(id, p->name) == 0 && try_module_get(p->owner)) { -			clk = p; -			goto found; -		} -	} - -	list_for_each_entry(p, &clock_list, node) { -		if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { -			clk = p; -			break; -		} -	} - -found: -	mutex_unlock(&clock_list_sem); - -	return clk; -} -EXPORT_SYMBOL_GPL(clk_get); - -void clk_put(struct clk *clk) -{ -	if (clk && !IS_ERR(clk)) -		module_put(clk->owner); -} -EXPORT_SYMBOL_GPL(clk_put); - -#ifdef CONFIG_PM -static int clks_sysdev_suspend(struct sys_device *dev, pm_message_t state) -{ -	static pm_message_t prev_state; -	struct clk *clkp; - -	switch (state.event) { -	case PM_EVENT_ON: -		/* Resumeing from hibernation */ -		if (prev_state.event != PM_EVENT_FREEZE) -			break; - -		list_for_each_entry(clkp, &clock_list, node) { -			if (likely(clkp->ops)) { -				unsigned long rate = clkp->rate; - -				if (likely(clkp->ops->set_parent)) -					clkp->ops->set_parent(clkp, -						clkp->parent); -				if (likely(clkp->ops->set_rate)) -					clkp->ops->set_rate(clkp, -						rate, NO_CHANGE); -				else if (likely(clkp->ops->recalc)) -					clkp->rate = clkp->ops->recalc(clkp); -			} -		} -		break; -	case PM_EVENT_FREEZE: -		break; -	case PM_EVENT_SUSPEND: -		break; -	} - -	prev_state = state; -	return 0; -} - -static int clks_sysdev_resume(struct sys_device *dev) -{ -	return clks_sysdev_suspend(dev, PMSG_ON); -} - -static struct sysdev_class clks_sysdev_class = { -	.name = "clks", -}; - -static struct sysdev_driver clks_sysdev_driver = { -	.suspend = clks_sysdev_suspend, -	.resume = clks_sysdev_resume, -}; - -static struct sys_device clks_sysdev_dev = { -	.cls = &clks_sysdev_class, -}; - -static int __init clk_sysdev_init(void) -{ -	sysdev_class_register(&clks_sysdev_class); -	sysdev_driver_register(&clks_sysdev_class, &clks_sysdev_driver); -	sysdev_register(&clks_sysdev_dev); - -	return 0; -} -subsys_initcall(clk_sysdev_init); -#endif -  int __init clk_init(void)  {  	int ret; @@ -591,89 +49,19 @@ int __init clk_init(void)  }  /* - *	debugfs support to trace clock tree hierarchy and attributes + * Returns a clock. Note that we first try to use device id on the bus + * and clock name. If this fails, we try to use clock name only.   */ -static struct dentry *clk_debugfs_root; - -static int clk_debugfs_register_one(struct clk *c) +struct clk *clk_get(struct device *dev, const char *con_id)  { -	int err; -	struct dentry *d, *child; -	struct clk *pa = c->parent; -	char s[255]; -	char *p = s; - -	p += sprintf(p, "%s", c->name); -	if (c->id >= 0) -		sprintf(p, ":%d", c->id); -	d = debugfs_create_dir(s, pa ? pa->dentry : clk_debugfs_root); -	if (!d) -		return -ENOMEM; -	c->dentry = d; - -	d = debugfs_create_u8("usecount", S_IRUGO, c->dentry, (u8 *)&c->usecount); -	if (!d) { -		err = -ENOMEM; -		goto err_out; -	} -	d = debugfs_create_u32("rate", S_IRUGO, c->dentry, (u32 *)&c->rate); -	if (!d) { -		err = -ENOMEM; -		goto err_out; -	} -	d = debugfs_create_x32("flags", S_IRUGO, c->dentry, (u32 *)&c->flags); -	if (!d) { -		err = -ENOMEM; -		goto err_out; -	} -	return 0; +	const char *dev_id = dev ? dev_name(dev) : NULL; -err_out: -	d = c->dentry; -	list_for_each_entry(child, &d->d_subdirs, d_u.d_child) -		debugfs_remove(child); -	debugfs_remove(c->dentry); -	return err; +	return clk_get_sys(dev_id, con_id);  } +EXPORT_SYMBOL_GPL(clk_get); -static int clk_debugfs_register(struct clk *c) +void clk_put(struct clk *clk)  { -	int err; -	struct clk *pa = c->parent; - -	if (pa && !pa->dentry) { -		err = clk_debugfs_register(pa); -		if (err) -			return err; -	} - -	if (!c->dentry) { -		err = clk_debugfs_register_one(c); -		if (err) -			return err; -	} -	return 0;  } +EXPORT_SYMBOL_GPL(clk_put); -static int __init clk_debugfs_init(void) -{ -	struct clk *c; -	struct dentry *d; -	int err; - -	d = debugfs_create_dir("clock", NULL); -	if (!d) -		return -ENOMEM; -	clk_debugfs_root = d; - -	list_for_each_entry(c, &clock_list, node) { -		err = clk_debugfs_register(c); -		if (err) -			goto err_out; -	} -	return 0; -err_out: -	debugfs_remove(clk_debugfs_root); /* REVISIT: Cleanup correctly */ -	return err; -} -late_initcall(clk_debugfs_init); diff --git a/arch/sh/kernel/cpu/fpu.c b/arch/sh/kernel/cpu/fpu.c new file mode 100644 index 00000000000..7f1b70cace3 --- /dev/null +++ b/arch/sh/kernel/cpu/fpu.c @@ -0,0 +1,85 @@ +#include <linux/sched.h> +#include <linux/slab.h> +#include <asm/processor.h> +#include <asm/fpu.h> + +int init_fpu(struct task_struct *tsk) +{ +	if (tsk_used_math(tsk)) { +		if ((boot_cpu_data.flags & CPU_HAS_FPU) && tsk == current) +			unlazy_fpu(tsk, task_pt_regs(tsk)); +		return 0; +	} + +	/* +	 * Memory allocation at the first usage of the FPU and other state. +	 */ +	if (!tsk->thread.xstate) { +		tsk->thread.xstate = kmem_cache_alloc(task_xstate_cachep, +						      GFP_KERNEL); +		if (!tsk->thread.xstate) +			return -ENOMEM; +	} + +	if (boot_cpu_data.flags & CPU_HAS_FPU) { +		struct sh_fpu_hard_struct *fp = &tsk->thread.xstate->hardfpu; +		memset(fp, 0, xstate_size); +		fp->fpscr = FPSCR_INIT; +	} else { +		struct sh_fpu_soft_struct *fp = &tsk->thread.xstate->softfpu; +		memset(fp, 0, xstate_size); +		fp->fpscr = FPSCR_INIT; +	} + +	set_stopped_child_used_math(tsk); +	return 0; +} + +#ifdef CONFIG_SH_FPU +void __fpu_state_restore(void) +{ +	struct task_struct *tsk = current; + +	restore_fpu(tsk); + +	task_thread_info(tsk)->status |= TS_USEDFPU; +	tsk->fpu_counter++; +} + +void fpu_state_restore(struct pt_regs *regs) +{ +	struct task_struct *tsk = current; + +	if (unlikely(!user_mode(regs))) { +		printk(KERN_ERR "BUG: FPU is used in kernel mode.\n"); +		BUG(); +		return; +	} + +	if (!tsk_used_math(tsk)) { +		local_irq_enable(); +		/* +		 * does a slab alloc which can sleep +		 */ +		if (init_fpu(tsk)) { +			/* +			 * ran out of memory! +			 */ +			do_group_exit(SIGKILL); +			return; +		} +		local_irq_disable(); +	} + +	grab_fpu(regs); + +	__fpu_state_restore(); +} + +BUILD_TRAP_HANDLER(fpu_state_restore) +{ +	TRAP_HANDLER_DECL; + +	fpu_state_restore(regs); +} +#endif /* CONFIG_SH_FPU */ diff --git a/arch/sh/kernel/cpu/hwblk.c b/arch/sh/kernel/cpu/hwblk.c index c0ad7d46e78..3e985aae5d9 100644 --- a/arch/sh/kernel/cpu/hwblk.c +++ b/arch/sh/kernel/cpu/hwblk.c @@ -1,6 +1,5 @@  #include <linux/clk.h>  #include <linux/compiler.h> -#include <linux/slab.h>  #include <linux/io.h>  #include <linux/spinlock.h>  #include <asm/suspend.h> @@ -147,6 +146,11 @@ int __init sh_hwblk_clk_register(struct clk *clks, int nr)  	for (k = 0; !ret && (k < nr); k++) {  		clkp = clks + k; + +		/* skip over clocks using hwblk 0 (HWBLK_UNKNOWN) */ +		if (!clkp->arch_flags) +			continue; +  		clkp->ops = &sh_hwblk_clk_ops;  		ret |= clk_register(clkp);  	} diff --git a/arch/sh/kernel/cpu/init.c b/arch/sh/kernel/cpu/init.c index 89b4b76c0d7..97661061ff2 100644 --- a/arch/sh/kernel/cpu/init.c +++ b/arch/sh/kernel/cpu/init.c @@ -24,22 +24,32 @@  #include <asm/elf.h>  #include <asm/io.h>  #include <asm/smp.h> -#ifdef CONFIG_SUPERH32 -#include <asm/ubc.h> +#include <asm/sh_bios.h> + +#ifdef CONFIG_SH_FPU +#define cpu_has_fpu	1 +#else +#define cpu_has_fpu	0 +#endif + +#ifdef CONFIG_SH_DSP +#define cpu_has_dsp	1 +#else +#define cpu_has_dsp	0  #endif  /*   * Generic wrapper for command line arguments to disable on-chip   * peripherals (nofpu, nodsp, and so forth).   */ -#define onchip_setup(x)				\ -static int x##_disabled __initdata = 0;		\ -						\ -static int __init x##_setup(char *opts)		\ -{						\ -	x##_disabled = 1;			\ -	return 1;				\ -}						\ +#define onchip_setup(x)					\ +static int x##_disabled __cpuinitdata = !cpu_has_##x;	\ +							\ +static int __cpuinit x##_setup(char *opts)			\ +{							\ +	x##_disabled = 1;				\ +	return 1;					\ +}							\  __setup("no" __stringify(x), x##_setup);  onchip_setup(fpu); @@ -49,13 +59,13 @@ onchip_setup(dsp);  #define CPUOPM		0xff2f0000  #define CPUOPM_RABD	(1 << 5) -static void __init speculative_execution_init(void) +static void __cpuinit speculative_execution_init(void)  {  	/* Clear RABD */ -	ctrl_outl(ctrl_inl(CPUOPM) & ~CPUOPM_RABD, CPUOPM); +	__raw_writel(__raw_readl(CPUOPM) & ~CPUOPM_RABD, CPUOPM);  	/* Flush the update */ -	(void)ctrl_inl(CPUOPM); +	(void)__raw_readl(CPUOPM);  	ctrl_barrier();  }  #else @@ -68,7 +78,7 @@ static void __init speculative_execution_init(void)  #define EXPMASK_BRDSSLP		(1 << 1)  #define EXPMASK_MMCAW		(1 << 4) -static void __init expmask_init(void) +static void __cpuinit expmask_init(void)  {  	unsigned long expmask = __raw_readl(EXPMASK); @@ -89,7 +99,7 @@ static void __init expmask_init(void)  #endif  /* 2nd-level cache init */ -void __uses_jump_to_uncached __attribute__ ((weak)) l2_cache_init(void) +void __attribute__ ((weak)) l2_cache_init(void)  {  } @@ -97,12 +107,12 @@ void __uses_jump_to_uncached __attribute__ ((weak)) l2_cache_init(void)   * Generic first-level cache init   */  #ifdef CONFIG_SUPERH32 -static void __uses_jump_to_uncached cache_init(void) +static void cache_init(void)  {  	unsigned long ccr, flags;  	jump_to_uncached(); -	ccr = ctrl_inl(CCR); +	ccr = __raw_readl(CCR);  	/*  	 * At this point we don't know whether the cache is enabled or not - a @@ -146,7 +156,7 @@ static void __uses_jump_to_uncached cache_init(void)  			for (addr = addrstart;  			     addr < addrstart + waysize;  			     addr += current_cpu_data.dcache.linesz) -				ctrl_outl(0, addr); +				__raw_writel(0, addr);  			addrstart += current_cpu_data.dcache.way_incr;  		} while (--ways); @@ -179,7 +189,7 @@ static void __uses_jump_to_uncached cache_init(void)  	l2_cache_init(); -	ctrl_outl(flags, CCR); +	__raw_writel(flags, CCR);  	back_to_cached();  }  #else @@ -207,8 +217,20 @@ static void detect_cache_shape(void)  		l2_cache_shape = -1; /* No S-cache */  } +static void __cpuinit fpu_init(void) +{ +	/* Disable the FPU */ +	if (fpu_disabled && (current_cpu_data.flags & CPU_HAS_FPU)) { +		printk("FPU Disabled\n"); +		current_cpu_data.flags &= ~CPU_HAS_FPU; +	} + +	disable_fpu(); +	clear_used_math(); +} +  #ifdef CONFIG_SH_DSP -static void __init release_dsp(void) +static void __cpuinit release_dsp(void)  {  	unsigned long sr; @@ -222,7 +244,7 @@ static void __init release_dsp(void)  	);  } -static void __init dsp_init(void) +static void __cpuinit dsp_init(void)  {  	unsigned long sr; @@ -244,34 +266,41 @@ static void __init dsp_init(void)  	if (sr & SR_DSP)  		current_cpu_data.flags |= CPU_HAS_DSP; +	/* Disable the DSP */ +	if (dsp_disabled && (current_cpu_data.flags & CPU_HAS_DSP)) { +		printk("DSP Disabled\n"); +		current_cpu_data.flags &= ~CPU_HAS_DSP; +	} +  	/* Now that we've determined the DSP status, clear the DSP bit. */  	release_dsp();  } +#else +static inline void __cpuinit dsp_init(void) { }  #endif /* CONFIG_SH_DSP */  /** - * sh_cpu_init + * cpu_init   * - * This is our initial entry point for each CPU, and is invoked on the boot - * CPU prior to calling start_kernel(). For SMP, a combination of this and - * start_secondary() will bring up each processor to a ready state prior - * to hand forking the idle loop. + * This is our initial entry point for each CPU, and is invoked on the + * boot CPU prior to calling start_kernel(). For SMP, a combination of + * this and start_secondary() will bring up each processor to a ready + * state prior to hand forking the idle loop.   * - * We do all of the basic processor init here, including setting up the - * caches, FPU, DSP, kicking the UBC, etc. By the time start_kernel() is - * hit (and subsequently platform_setup()) things like determining the - * CPU subtype and initial configuration will all be done. + * We do all of the basic processor init here, including setting up + * the caches, FPU, DSP, etc. By the time start_kernel() is hit (and + * subsequently platform_setup()) things like determining the CPU + * subtype and initial configuration will all be done.   *   * Each processor family is still responsible for doing its own probing - * and cache configuration in detect_cpu_and_cache_system(). + * and cache configuration in cpu_probe().   */ - -asmlinkage void __init sh_cpu_init(void) +asmlinkage void __cpuinit cpu_init(void)  {  	current_thread_info()->cpu = hard_smp_processor_id();  	/* First, probe the CPU */ -	detect_cpu_and_cache_system(); +	cpu_probe();  	if (current_cpu_data.type == CPU_SH_NONE)  		panic("Unknown CPU"); @@ -302,18 +331,8 @@ asmlinkage void __init sh_cpu_init(void)  		detect_cache_shape();  	} -	/* Disable the FPU */ -	if (fpu_disabled) { -		printk("FPU Disabled\n"); -		current_cpu_data.flags &= ~CPU_HAS_FPU; -	} - -	/* FPU initialization */ -	disable_fpu(); -	if ((current_cpu_data.flags & CPU_HAS_FPU)) { -		current_thread_info()->status &= ~TS_USEDFPU; -		clear_used_math(); -	} +	fpu_init(); +	dsp_init();  	/*  	 * Initialize the per-CPU ASID cache very early, since the @@ -321,18 +340,24 @@ asmlinkage void __init sh_cpu_init(void)  	 */  	current_cpu_data.asid_cache = NO_CONTEXT; -#ifdef CONFIG_SH_DSP -	/* Probe for DSP */ -	dsp_init(); - -	/* Disable the DSP */ -	if (dsp_disabled) { -		printk("DSP Disabled\n"); -		current_cpu_data.flags &= ~CPU_HAS_DSP; -		release_dsp(); -	} -#endif -  	speculative_execution_init();  	expmask_init(); + +	/* Do the rest of the boot processor setup */ +	if (raw_smp_processor_id() == 0) { +		/* Save off the BIOS VBR, if there is one */ +		sh_bios_vbr_init(); + +		/* +		 * Setup VBR for boot CPU. Secondary CPUs do this through +		 * start_secondary(). +		 */ +		per_cpu_trap_init(); + +		/* +		 * Boot processor to setup the FP and extended state +		 * context info. +		 */ +		init_thread_xstate(); +	}  } diff --git a/arch/sh/kernel/cpu/irq/intc-sh5.c b/arch/sh/kernel/cpu/irq/intc-sh5.c index 06e7e2959b5..96a23958394 100644 --- a/arch/sh/kernel/cpu/irq/intc-sh5.c +++ b/arch/sh/kernel/cpu/irq/intc-sh5.c @@ -123,7 +123,7 @@ static void enable_intc_irq(unsigned int irq)  		bitmask = 1 << (irq - 32);  	} -	ctrl_outl(bitmask, reg); +	__raw_writel(bitmask, reg);  }  static void disable_intc_irq(unsigned int irq) @@ -139,7 +139,7 @@ static void disable_intc_irq(unsigned int irq)  		bitmask = 1 << (irq - 32);  	} -	ctrl_outl(bitmask, reg); +	__raw_writel(bitmask, reg);  }  static void mask_and_ack_intc(unsigned int irq) @@ -170,11 +170,11 @@ void __init plat_irq_setup(void)  	/* Disable all interrupts and set all priorities to 0 to avoid trouble */ -	ctrl_outl(-1, INTC_INTDSB_0); -	ctrl_outl(-1, INTC_INTDSB_1); +	__raw_writel(-1, INTC_INTDSB_0); +	__raw_writel(-1, INTC_INTDSB_1);  	for (reg = INTC_INTPRI_0, i = 0; i < INTC_INTPRI_PREGS; i++, reg += 8) -		ctrl_outl( NO_PRIORITY, reg); +		__raw_writel( NO_PRIORITY, reg);  #ifdef CONFIG_SH_CAYMAN @@ -199,7 +199,7 @@ void __init plat_irq_setup(void)  			reg = INTC_ICR_SET;  			i = IRQ_IRL0;  		} -		ctrl_outl(INTC_ICR_IRLM, reg); +		__raw_writel(INTC_ICR_IRLM, reg);  		/* Set interrupt priorities according to platform description */  		for (data = 0, reg = INTC_INTPRI_0; i < NR_INTC_IRQS; i++) { @@ -207,7 +207,7 @@ void __init plat_irq_setup(void)  				((i % INTC_INTPRI_PPREG) * 4);  			if ((i % INTC_INTPRI_PPREG) == (INTC_INTPRI_PPREG - 1)) {  				/* Upon the 7th, set Priority Register */ -				ctrl_outl(data, reg); +				__raw_writel(data, reg);  				data = 0;  				reg += 8;  			} diff --git a/arch/sh/kernel/cpu/sh2/clock-sh7619.c b/arch/sh/kernel/cpu/sh2/clock-sh7619.c index 4fe863170e3..0c9f24d7a02 100644 --- a/arch/sh/kernel/cpu/sh2/clock-sh7619.c +++ b/arch/sh/kernel/cpu/sh2/clock-sh7619.c @@ -31,7 +31,7 @@ static const int pfc_divisors[] = {1,2,0,4};  static void master_clk_init(struct clk *clk)  { -	clk->rate *= PLL2 * pll1rate[(ctrl_inw(FREQCR) >> 8) & 7]; +	clk->rate *= PLL2 * pll1rate[(__raw_readw(FREQCR) >> 8) & 7];  }  static struct clk_ops sh7619_master_clk_ops = { @@ -40,7 +40,7 @@ static struct clk_ops sh7619_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FREQCR) & 0x0007); +	int idx = (__raw_readw(FREQCR) & 0x0007);  	return clk->parent->rate / pfc_divisors[idx];  } @@ -50,7 +50,7 @@ static struct clk_ops sh7619_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	return clk->parent->rate / pll1rate[(ctrl_inw(FREQCR) >> 8) & 7]; +	return clk->parent->rate / pll1rate[(__raw_readw(FREQCR) >> 8) & 7];  }  static struct clk_ops sh7619_bus_clk_ops = { diff --git a/arch/sh/kernel/cpu/sh2/probe.c b/arch/sh/kernel/cpu/sh2/probe.c index 1db6d888388..bab8e75958a 100644 --- a/arch/sh/kernel/cpu/sh2/probe.c +++ b/arch/sh/kernel/cpu/sh2/probe.c @@ -13,7 +13,7 @@  #include <asm/processor.h>  #include <asm/cache.h> -int __init detect_cpu_and_cache_system(void) +void __cpuinit cpu_probe(void)  {  #if defined(CONFIG_CPU_SUBTYPE_SH7619)  	boot_cpu_data.type			= CPU_SH7619; @@ -30,7 +30,4 @@ int __init detect_cpu_and_cache_system(void)  	boot_cpu_data.dcache.flags |= SH_CACHE_COMBINED;  	boot_cpu_data.icache = boot_cpu_data.dcache;  	boot_cpu_data.family = CPU_FAMILY_SH2; - -	return 0;  } - diff --git a/arch/sh/kernel/cpu/sh2/setup-sh7619.c b/arch/sh/kernel/cpu/sh2/setup-sh7619.c index 114c7cee718..c3638516bff 100644 --- a/arch/sh/kernel/cpu/sh2/setup-sh7619.c +++ b/arch/sh/kernel/cpu/sh2/setup-sh7619.c @@ -128,17 +128,14 @@ static struct platform_device eth_device = {  };  static struct sh_timer_config cmt0_platform_data = { -	.name = "CMT0",  	.channel_offset = 0x02,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 125,  	.clocksource_rating = 0, /* disabled due to code generation issues */  };  static struct resource cmt0_resources[] = {  	[0] = { -		.name	= "CMT0",  		.start	= 0xf84a0072,  		.end	= 0xf84a0077,  		.flags	= IORESOURCE_MEM, @@ -160,17 +157,14 @@ static struct platform_device cmt0_device = {  };  static struct sh_timer_config cmt1_platform_data = { -	.name = "CMT1",  	.channel_offset = 0x08,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clockevent_rating = 125,  	.clocksource_rating = 0, /* disabled due to code generation issues */  };  static struct resource cmt1_resources[] = {  	[0] = { -		.name	= "CMT1",  		.start	= 0xf84a0078,  		.end	= 0xf84a007d,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7201.c b/arch/sh/kernel/cpu/sh2a/clock-sh7201.c index 7814c76159a..b26264dc2ae 100644 --- a/arch/sh/kernel/cpu/sh2a/clock-sh7201.c +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7201.c @@ -34,7 +34,7 @@ static const int pfc_divisors[]={1,2,3,4,6,8,12};  static void master_clk_init(struct clk *clk)  { -	return 10000000 * PLL2 * pll1rate[(ctrl_inw(FREQCR) >> 8) & 0x0007]; +	return 10000000 * PLL2 * pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007];  }  static struct clk_ops sh7201_master_clk_ops = { @@ -43,7 +43,7 @@ static struct clk_ops sh7201_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FREQCR) & 0x0007); +	int idx = (__raw_readw(FREQCR) & 0x0007);  	return clk->parent->rate / pfc_divisors[idx];  } @@ -53,7 +53,7 @@ static struct clk_ops sh7201_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FREQCR) & 0x0007); +	int idx = (__raw_readw(FREQCR) & 0x0007);  	return clk->parent->rate / pfc_divisors[idx];  } @@ -63,7 +63,7 @@ static struct clk_ops sh7201_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inw(FREQCR) >> 4) & 0x0007); +	int idx = ((__raw_readw(FREQCR) >> 4) & 0x0007);  	return clk->parent->rate / ifc_divisors[idx];  } diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7203.c b/arch/sh/kernel/cpu/sh2a/clock-sh7203.c index 94098696510..7e75d8f7950 100644 --- a/arch/sh/kernel/cpu/sh2a/clock-sh7203.c +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7203.c @@ -39,7 +39,7 @@ static const int pfc_divisors[]={1,2,3,4,6,8,12};  static void master_clk_init(struct clk *clk)  { -	clk->rate *= pll1rate[(ctrl_inw(FREQCR) >> 8) & 0x0003] * PLL2 ; +	clk->rate *= pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0003] * PLL2 ;  }  static struct clk_ops sh7203_master_clk_ops = { @@ -48,7 +48,7 @@ static struct clk_ops sh7203_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FREQCR) & 0x0007); +	int idx = (__raw_readw(FREQCR) & 0x0007);  	return clk->parent->rate / pfc_divisors[idx];  } @@ -58,7 +58,7 @@ static struct clk_ops sh7203_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FREQCR) & 0x0007); +	int idx = (__raw_readw(FREQCR) & 0x0007);  	return clk->parent->rate / pfc_divisors[idx-2];  } diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7206.c b/arch/sh/kernel/cpu/sh2a/clock-sh7206.c index c2268bdecee..b27a5e2687a 100644 --- a/arch/sh/kernel/cpu/sh2a/clock-sh7206.c +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7206.c @@ -34,7 +34,7 @@ static const int pfc_divisors[]={1,2,3,4,6,8,12};  static void master_clk_init(struct clk *clk)  { -	clk->rate *= PLL2 * pll1rate[(ctrl_inw(FREQCR) >> 8) & 0x0007]; +	clk->rate *= PLL2 * pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007];  }  static struct clk_ops sh7206_master_clk_ops = { @@ -43,7 +43,7 @@ static struct clk_ops sh7206_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FREQCR) & 0x0007); +	int idx = (__raw_readw(FREQCR) & 0x0007);  	return clk->parent->rate / pfc_divisors[idx];  } @@ -53,7 +53,7 @@ static struct clk_ops sh7206_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	return clk->parent->rate / pll1rate[(ctrl_inw(FREQCR) >> 8) & 0x0007]; +	return clk->parent->rate / pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007];  }  static struct clk_ops sh7206_bus_clk_ops = { @@ -62,7 +62,7 @@ static struct clk_ops sh7206_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FREQCR) & 0x0007); +	int idx = (__raw_readw(FREQCR) & 0x0007);  	return clk->parent->rate / ifc_divisors[idx];  } diff --git a/arch/sh/kernel/cpu/sh2a/fpu.c b/arch/sh/kernel/cpu/sh2a/fpu.c index d395ce5740e..488d24e0cdf 100644 --- a/arch/sh/kernel/cpu/sh2a/fpu.c +++ b/arch/sh/kernel/cpu/sh2a/fpu.c @@ -26,8 +26,7 @@  /*   * Save FPU registers onto task structure.   */ -void -save_fpu(struct task_struct *tsk) +void save_fpu(struct task_struct *tsk)  {  	unsigned long dummy; @@ -52,7 +51,7 @@ save_fpu(struct task_struct *tsk)  		     "fmov.s	fr0, @-%0\n\t"  		     "lds	%3, fpscr\n\t"  		     : "=r" (dummy) -		     : "0" ((char *)(&tsk->thread.fpu.hard.status)), +		     : "0" ((char *)(&tsk->thread.xstate->hardfpu.status)),  		       "r" (FPSCR_RCHG),  		       "r" (FPSCR_INIT)  		     : "memory"); @@ -60,8 +59,7 @@ save_fpu(struct task_struct *tsk)  	disable_fpu();  } -static void -restore_fpu(struct task_struct *tsk) +void restore_fpu(struct task_struct *tsk)  {  	unsigned long dummy; @@ -85,45 +83,12 @@ restore_fpu(struct task_struct *tsk)  		     "lds.l	@%0+, fpscr\n\t"  		     "lds.l	@%0+, fpul\n\t"  		     : "=r" (dummy) -		     : "0" (&tsk->thread.fpu), "r" (FPSCR_RCHG) +		     : "0" (tsk->thread.xstate), "r" (FPSCR_RCHG)  		     : "memory");  	disable_fpu();  }  /* - * Load the FPU with signalling NANS.  This bit pattern we're using - * has the property that no matter wether considered as single or as - * double precission represents signaling NANS. - */ - -static void -fpu_init(void) -{ -	enable_fpu(); -	asm volatile("lds	%0, fpul\n\t" -		     "fsts	fpul, fr0\n\t" -		     "fsts	fpul, fr1\n\t" -		     "fsts	fpul, fr2\n\t" -		     "fsts	fpul, fr3\n\t" -		     "fsts	fpul, fr4\n\t" -		     "fsts	fpul, fr5\n\t" -		     "fsts	fpul, fr6\n\t" -		     "fsts	fpul, fr7\n\t" -		     "fsts	fpul, fr8\n\t" -		     "fsts	fpul, fr9\n\t" -		     "fsts	fpul, fr10\n\t" -		     "fsts	fpul, fr11\n\t" -		     "fsts	fpul, fr12\n\t" -		     "fsts	fpul, fr13\n\t" -		     "fsts	fpul, fr14\n\t" -		     "fsts	fpul, fr15\n\t" -		     "lds	%2, fpscr\n\t" -		     : /* no output */ -		     : "r" (0), "r" (FPSCR_RCHG), "r" (FPSCR_INIT)); -	disable_fpu(); -} - -/*   *	Emulate arithmetic ops on denormalized number for some FPU insns.   */ @@ -490,9 +455,9 @@ ieee_fpe_handler (struct pt_regs *regs)  	if ((finsn & 0xf1ff) == 0xf0ad) { /* fcnvsd */  		struct task_struct *tsk = current; -		if ((tsk->thread.fpu.hard.fpscr & FPSCR_FPU_ERROR)) { +		if ((tsk->thread.xstate->hardfpu.fpscr & FPSCR_FPU_ERROR)) {  			/* FPU error */ -			denormal_to_double (&tsk->thread.fpu.hard, +			denormal_to_double (&tsk->thread.xstate->hardfpu,  					    (finsn >> 8) & 0xf);  		} else  			return 0; @@ -507,9 +472,9 @@ ieee_fpe_handler (struct pt_regs *regs)  		n = (finsn >> 8) & 0xf;  		m = (finsn >> 4) & 0xf; -		hx = tsk->thread.fpu.hard.fp_regs[n]; -		hy = tsk->thread.fpu.hard.fp_regs[m]; -		fpscr = tsk->thread.fpu.hard.fpscr; +		hx = tsk->thread.xstate->hardfpu.fp_regs[n]; +		hy = tsk->thread.xstate->hardfpu.fp_regs[m]; +		fpscr = tsk->thread.xstate->hardfpu.fpscr;  		prec = fpscr & (1 << 19);  		if ((fpscr & FPSCR_FPU_ERROR) @@ -519,15 +484,15 @@ ieee_fpe_handler (struct pt_regs *regs)  			/* FPU error because of denormal */  			llx = ((long long) hx << 32) -			       | tsk->thread.fpu.hard.fp_regs[n+1]; +			       | tsk->thread.xstate->hardfpu.fp_regs[n+1];  			lly = ((long long) hy << 32) -			       | tsk->thread.fpu.hard.fp_regs[m+1]; +			       | tsk->thread.xstate->hardfpu.fp_regs[m+1];  			if ((hx & 0x7fffffff) >= 0x00100000)  				llx = denormal_muld(lly, llx);  			else  				llx = denormal_muld(llx, lly); -			tsk->thread.fpu.hard.fp_regs[n] = llx >> 32; -			tsk->thread.fpu.hard.fp_regs[n+1] = llx & 0xffffffff; +			tsk->thread.xstate->hardfpu.fp_regs[n] = llx >> 32; +			tsk->thread.xstate->hardfpu.fp_regs[n+1] = llx & 0xffffffff;  		} else if ((fpscr & FPSCR_FPU_ERROR)  		     && (!prec && ((hx & 0x7fffffff) < 0x00800000  				   || (hy & 0x7fffffff) < 0x00800000))) { @@ -536,7 +501,7 @@ ieee_fpe_handler (struct pt_regs *regs)  				hx = denormal_mulf(hy, hx);  			else  				hx = denormal_mulf(hx, hy); -			tsk->thread.fpu.hard.fp_regs[n] = hx; +			tsk->thread.xstate->hardfpu.fp_regs[n] = hx;  		} else  			return 0; @@ -550,9 +515,9 @@ ieee_fpe_handler (struct pt_regs *regs)  		n = (finsn >> 8) & 0xf;  		m = (finsn >> 4) & 0xf; -		hx = tsk->thread.fpu.hard.fp_regs[n]; -		hy = tsk->thread.fpu.hard.fp_regs[m]; -		fpscr = tsk->thread.fpu.hard.fpscr; +		hx = tsk->thread.xstate->hardfpu.fp_regs[n]; +		hy = tsk->thread.xstate->hardfpu.fp_regs[m]; +		fpscr = tsk->thread.xstate->hardfpu.fpscr;  		prec = fpscr & (1 << 19);  		if ((fpscr & FPSCR_FPU_ERROR) @@ -562,15 +527,15 @@ ieee_fpe_handler (struct pt_regs *regs)  			/* FPU error because of denormal */  			llx = ((long long) hx << 32) -			       | tsk->thread.fpu.hard.fp_regs[n+1]; +			       | tsk->thread.xstate->hardfpu.fp_regs[n+1];  			lly = ((long long) hy << 32) -			       | tsk->thread.fpu.hard.fp_regs[m+1]; +			       | tsk->thread.xstate->hardfpu.fp_regs[m+1];  			if ((finsn & 0xf00f) == 0xf000)  				llx = denormal_addd(llx, lly);  			else  				llx = denormal_addd(llx, lly ^ (1LL << 63)); -			tsk->thread.fpu.hard.fp_regs[n] = llx >> 32; -			tsk->thread.fpu.hard.fp_regs[n+1] = llx & 0xffffffff; +			tsk->thread.xstate->hardfpu.fp_regs[n] = llx >> 32; +			tsk->thread.xstate->hardfpu.fp_regs[n+1] = llx & 0xffffffff;  		} else if ((fpscr & FPSCR_FPU_ERROR)  		     && (!prec && ((hx & 0x7fffffff) < 0x00800000  				   || (hy & 0x7fffffff) < 0x00800000))) { @@ -579,7 +544,7 @@ ieee_fpe_handler (struct pt_regs *regs)  				hx = denormal_addf(hx, hy);  			else  				hx = denormal_addf(hx, hy ^ 0x80000000); -			tsk->thread.fpu.hard.fp_regs[n] = hx; +			tsk->thread.xstate->hardfpu.fp_regs[n] = hx;  		} else  			return 0; @@ -597,7 +562,7 @@ BUILD_TRAP_HANDLER(fpu_error)  	__unlazy_fpu(tsk, regs);  	if (ieee_fpe_handler(regs)) { -		tsk->thread.fpu.hard.fpscr &= +		tsk->thread.xstate->hardfpu.fpscr &=  			~(FPSCR_CAUSE_MASK | FPSCR_FLAG_MASK);  		grab_fpu(regs);  		restore_fpu(tsk); @@ -607,33 +572,3 @@ BUILD_TRAP_HANDLER(fpu_error)  	force_sig(SIGFPE, tsk);  } - -void fpu_state_restore(struct pt_regs *regs) -{ -	struct task_struct *tsk = current; - -	grab_fpu(regs); -	if (unlikely(!user_mode(regs))) { -		printk(KERN_ERR "BUG: FPU is used in kernel mode.\n"); -		BUG(); -		return; -	} - -	if (likely(used_math())) { -		/* Using the FPU again.  */ -		restore_fpu(tsk); -	} else	{ -		/* First time FPU user.  */ -		fpu_init(); -		set_used_math(); -	} -	task_thread_info(tsk)->status |= TS_USEDFPU; -	tsk->fpu_counter++; -} - -BUILD_TRAP_HANDLER(fpu_state_restore) -{ -	TRAP_HANDLER_DECL; - -	fpu_state_restore(regs); -} diff --git a/arch/sh/kernel/cpu/sh2a/probe.c b/arch/sh/kernel/cpu/sh2a/probe.c index 6825d650716..48e97a2a0c8 100644 --- a/arch/sh/kernel/cpu/sh2a/probe.c +++ b/arch/sh/kernel/cpu/sh2a/probe.c @@ -13,7 +13,7 @@  #include <asm/processor.h>  #include <asm/cache.h> -int __init detect_cpu_and_cache_system(void) +void __cpuinit cpu_probe(void)  {  	boot_cpu_data.family			= CPU_FAMILY_SH2A; @@ -51,6 +51,4 @@ int __init detect_cpu_and_cache_system(void)  	 * on the cache info.  	 */  	boot_cpu_data.icache		= boot_cpu_data.dcache; - -	return 0;  } diff --git a/arch/sh/kernel/cpu/sh2a/setup-mxg.c b/arch/sh/kernel/cpu/sh2a/setup-mxg.c index 8f669dc9b0d..6c96ea02bf8 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-mxg.c +++ b/arch/sh/kernel/cpu/sh2a/setup-mxg.c @@ -115,16 +115,13 @@ static DECLARE_INTC_DESC(intc_desc, "mxg", vectors, groups,  			 mask_registers, prio_registers, NULL);  static struct sh_timer_config mtu2_0_platform_data = { -	.name = "MTU2_0",  	.channel_offset = -0x80,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_0_resources[] = {  	[0] = { -		.name	= "MTU2_0",  		.start	= 0xff801300,  		.end	= 0xff801326,  		.flags	= IORESOURCE_MEM, @@ -146,16 +143,13 @@ static struct platform_device mtu2_0_device = {  };  static struct sh_timer_config mtu2_1_platform_data = { -	.name = "MTU2_1",  	.channel_offset = -0x100,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_1_resources[] = {  	[0] = { -		.name	= "MTU2_1",  		.start	= 0xff801380,  		.end	= 0xff801390,  		.flags	= IORESOURCE_MEM, @@ -177,16 +171,13 @@ static struct platform_device mtu2_1_device = {  };  static struct sh_timer_config mtu2_2_platform_data = { -	.name = "MTU2_2",  	.channel_offset = 0x80,  	.timer_bit = 2, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_2_resources[] = {  	[0] = { -		.name	= "MTU2_2",  		.start	= 0xff801000,  		.end	= 0xff80100a,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7201.c b/arch/sh/kernel/cpu/sh2a/setup-sh7201.c index 4ccfeb59eb1..d08bf4c07d6 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-sh7201.c +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7201.c @@ -318,16 +318,13 @@ static struct platform_device rtc_device = {  };  static struct sh_timer_config mtu2_0_platform_data = { -	.name = "MTU2_0",  	.channel_offset = -0x80,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_0_resources[] = {  	[0] = { -		.name	= "MTU2_0",  		.start	= 0xfffe4300,  		.end	= 0xfffe4326,  		.flags	= IORESOURCE_MEM, @@ -349,16 +346,13 @@ static struct platform_device mtu2_0_device = {  };  static struct sh_timer_config mtu2_1_platform_data = { -	.name = "MTU2_1",  	.channel_offset = -0x100,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_1_resources[] = {  	[0] = { -		.name	= "MTU2_1",  		.start	= 0xfffe4380,  		.end	= 0xfffe4390,  		.flags	= IORESOURCE_MEM, @@ -380,16 +374,13 @@ static struct platform_device mtu2_1_device = {  };  static struct sh_timer_config mtu2_2_platform_data = { -	.name = "MTU2_2",  	.channel_offset = 0x80,  	.timer_bit = 2, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_2_resources[] = {  	[0] = { -		.name	= "MTU2_2",  		.start	= 0xfffe4000,  		.end	= 0xfffe400a,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7203.c b/arch/sh/kernel/cpu/sh2a/setup-sh7203.c index 3136966cc9b..832f401b586 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-sh7203.c +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7203.c @@ -234,17 +234,14 @@ static struct platform_device scif3_device = {  };  static struct sh_timer_config cmt0_platform_data = { -	.name = "CMT0",  	.channel_offset = 0x02,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 125,  	.clocksource_rating = 0, /* disabled due to code generation issues */  };  static struct resource cmt0_resources[] = {  	[0] = { -		.name	= "CMT0",  		.start	= 0xfffec002,  		.end	= 0xfffec007,  		.flags	= IORESOURCE_MEM, @@ -266,17 +263,14 @@ static struct platform_device cmt0_device = {  };  static struct sh_timer_config cmt1_platform_data = { -	.name = "CMT1",  	.channel_offset = 0x08,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clockevent_rating = 125,  	.clocksource_rating = 0, /* disabled due to code generation issues */  };  static struct resource cmt1_resources[] = {  	[0] = { -		.name	= "CMT1",  		.start	= 0xfffec008,  		.end	= 0xfffec00d,  		.flags	= IORESOURCE_MEM, @@ -298,16 +292,13 @@ static struct platform_device cmt1_device = {  };  static struct sh_timer_config mtu2_0_platform_data = { -	.name = "MTU2_0",  	.channel_offset = -0x80,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_0_resources[] = {  	[0] = { -		.name	= "MTU2_0",  		.start	= 0xfffe4300,  		.end	= 0xfffe4326,  		.flags	= IORESOURCE_MEM, @@ -329,16 +320,13 @@ static struct platform_device mtu2_0_device = {  };  static struct sh_timer_config mtu2_1_platform_data = { -	.name = "MTU2_1",  	.channel_offset = -0x100,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_1_resources[] = {  	[0] = { -		.name	= "MTU2_1",  		.start	= 0xfffe4380,  		.end	= 0xfffe4390,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7206.c b/arch/sh/kernel/cpu/sh2a/setup-sh7206.c index 064873585a8..dc47b04e104 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-sh7206.c +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7206.c @@ -194,17 +194,14 @@ static struct platform_device scif3_device = {  };  static struct sh_timer_config cmt0_platform_data = { -	.name = "CMT0",  	.channel_offset = 0x02,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 125,  	.clocksource_rating = 0, /* disabled due to code generation issues */  };  static struct resource cmt0_resources[] = {  	[0] = { -		.name	= "CMT0",  		.start	= 0xfffec002,  		.end	= 0xfffec007,  		.flags	= IORESOURCE_MEM, @@ -226,17 +223,14 @@ static struct platform_device cmt0_device = {  };  static struct sh_timer_config cmt1_platform_data = { -	.name = "CMT1",  	.channel_offset = 0x08,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clockevent_rating = 125,  	.clocksource_rating = 0, /* disabled due to code generation issues */  };  static struct resource cmt1_resources[] = {  	[0] = { -		.name	= "CMT1",  		.start	= 0xfffec008,  		.end	= 0xfffec00d,  		.flags	= IORESOURCE_MEM, @@ -258,16 +252,13 @@ static struct platform_device cmt1_device = {  };  static struct sh_timer_config mtu2_0_platform_data = { -	.name = "MTU2_0",  	.channel_offset = -0x80,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_0_resources[] = {  	[0] = { -		.name	= "MTU2_0",  		.start	= 0xfffe4300,  		.end	= 0xfffe4326,  		.flags	= IORESOURCE_MEM, @@ -289,16 +280,13 @@ static struct platform_device mtu2_0_device = {  };  static struct sh_timer_config mtu2_1_platform_data = { -	.name = "MTU2_1",  	.channel_offset = -0x100,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_1_resources[] = {  	[0] = { -		.name	= "MTU2_1",  		.start	= 0xfffe4380,  		.end	= 0xfffe4390,  		.flags	= IORESOURCE_MEM, @@ -320,16 +308,13 @@ static struct platform_device mtu2_1_device = {  };  static struct sh_timer_config mtu2_2_platform_data = { -	.name = "MTU2_2",  	.channel_offset = 0x80,  	.timer_bit = 2, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource mtu2_2_resources[] = {  	[0] = { -		.name	= "MTU2_2",  		.start	= 0xfffe4000,  		.end	= 0xfffe400a,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh3/clock-sh3.c b/arch/sh/kernel/cpu/sh3/clock-sh3.c index 27b8738f0b0..b78384afac0 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh3.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh3.c @@ -28,7 +28,7 @@ static int pfc_divisors[]    = { 1, 2, 3, 4, 6, 1, 1, 1 };  static void master_clk_init(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x2000) >> 11) | (frqcr & 0x0003);  	clk->rate *= pfc_divisors[idx]; @@ -40,7 +40,7 @@ static struct clk_ops sh3_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x2000) >> 11) | (frqcr & 0x0003);  	return clk->parent->rate / pfc_divisors[idx]; @@ -52,7 +52,7 @@ static struct clk_ops sh3_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x8000) >> 13) | ((frqcr & 0x0030) >> 4);  	return clk->parent->rate / stc_multipliers[idx]; @@ -64,7 +64,7 @@ static struct clk_ops sh3_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x4000) >> 12) | ((frqcr & 0x000c) >> 2);  	return clk->parent->rate / ifc_divisors[idx]; diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7705.c b/arch/sh/kernel/cpu/sh3/clock-sh7705.c index 0ca8f2c3646..0ecea1451c6 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7705.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7705.c @@ -32,7 +32,7 @@ static int pfc_divisors[]    = { 1, 2, 3, 4, 6, 1, 1, 1 };  static void master_clk_init(struct clk *clk)  { -	clk->rate *= pfc_divisors[ctrl_inw(FRQCR) & 0x0003]; +	clk->rate *= pfc_divisors[__raw_readw(FRQCR) & 0x0003];  }  static struct clk_ops sh7705_master_clk_ops = { @@ -41,7 +41,7 @@ static struct clk_ops sh7705_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = ctrl_inw(FRQCR) & 0x0003; +	int idx = __raw_readw(FRQCR) & 0x0003;  	return clk->parent->rate / pfc_divisors[idx];  } @@ -51,7 +51,7 @@ static struct clk_ops sh7705_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FRQCR) & 0x0300) >> 8; +	int idx = (__raw_readw(FRQCR) & 0x0300) >> 8;  	return clk->parent->rate / stc_multipliers[idx];  } @@ -61,7 +61,7 @@ static struct clk_ops sh7705_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FRQCR) & 0x0030) >> 4; +	int idx = (__raw_readw(FRQCR) & 0x0030) >> 4;  	return clk->parent->rate / ifc_divisors[idx];  } diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7706.c b/arch/sh/kernel/cpu/sh3/clock-sh7706.c index 4bf7887d310..6f9ff8b57dd 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7706.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7706.c @@ -24,7 +24,7 @@ static int pfc_divisors[]    = { 1, 2, 4, 1, 3, 6, 1, 1 };  static void master_clk_init(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x2000) >> 11) | (frqcr & 0x0003);  	clk->rate *= pfc_divisors[idx]; @@ -36,7 +36,7 @@ static struct clk_ops sh7706_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x2000) >> 11) | (frqcr & 0x0003);  	return clk->parent->rate / pfc_divisors[idx]; @@ -48,7 +48,7 @@ static struct clk_ops sh7706_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x8000) >> 13) | ((frqcr & 0x0030) >> 4);  	return clk->parent->rate / stc_multipliers[idx]; @@ -60,7 +60,7 @@ static struct clk_ops sh7706_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x4000) >> 12) | ((frqcr & 0x000c) >> 2);  	return clk->parent->rate / ifc_divisors[idx]; diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7709.c b/arch/sh/kernel/cpu/sh3/clock-sh7709.c index e8749505bd2..f302ba09e68 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7709.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7709.c @@ -24,7 +24,7 @@ static int pfc_divisors[]    = { 1, 2, 4, 1, 3, 6, 1, 1 };  static void master_clk_init(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x2000) >> 11) | (frqcr & 0x0003);  	clk->rate *= pfc_divisors[idx]; @@ -36,7 +36,7 @@ static struct clk_ops sh7709_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x2000) >> 11) | (frqcr & 0x0003);  	return clk->parent->rate / pfc_divisors[idx]; @@ -48,7 +48,7 @@ static struct clk_ops sh7709_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = (frqcr & 0x0080) ?  		((frqcr & 0x8000) >> 13) | ((frqcr & 0x0030) >> 4) : 1; @@ -61,7 +61,7 @@ static struct clk_ops sh7709_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = ((frqcr & 0x4000) >> 12) | ((frqcr & 0x000c) >> 2);  	return clk->parent->rate / ifc_divisors[idx]; diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7710.c b/arch/sh/kernel/cpu/sh3/clock-sh7710.c index 030a58ba18a..29a87d8946a 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7710.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7710.c @@ -26,7 +26,7 @@ static int md_table[] = { 1, 2, 3, 4, 6, 8, 12 };  static void master_clk_init(struct clk *clk)  { -	clk->rate *= md_table[ctrl_inw(FRQCR) & 0x0007]; +	clk->rate *= md_table[__raw_readw(FRQCR) & 0x0007];  }  static struct clk_ops sh7710_master_clk_ops = { @@ -35,7 +35,7 @@ static struct clk_ops sh7710_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FRQCR) & 0x0007); +	int idx = (__raw_readw(FRQCR) & 0x0007);  	return clk->parent->rate / md_table[idx];  } @@ -45,7 +45,7 @@ static struct clk_ops sh7710_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FRQCR) & 0x0700) >> 8; +	int idx = (__raw_readw(FRQCR) & 0x0700) >> 8;  	return clk->parent->rate / md_table[idx];  } @@ -55,7 +55,7 @@ static struct clk_ops sh7710_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FRQCR) & 0x0070) >> 4; +	int idx = (__raw_readw(FRQCR) & 0x0070) >> 4;  	return clk->parent->rate / md_table[idx];  } diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7712.c b/arch/sh/kernel/cpu/sh3/clock-sh7712.c index 6428ee6c77e..b0d0c520399 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7712.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7712.c @@ -23,7 +23,7 @@ static int divisors[]    = { 1, 2, 3, 4, 6 };  static void master_clk_init(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = (frqcr & 0x0300) >> 8;  	clk->rate *= multipliers[idx]; @@ -35,7 +35,7 @@ static struct clk_ops sh7712_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = frqcr & 0x0007;  	return clk->parent->rate / divisors[idx]; @@ -47,7 +47,7 @@ static struct clk_ops sh7712_module_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int frqcr = ctrl_inw(FRQCR); +	int frqcr = __raw_readw(FRQCR);  	int idx = (frqcr & 0x0030) >> 4;  	return clk->parent->rate / divisors[idx]; diff --git a/arch/sh/kernel/cpu/sh3/entry.S b/arch/sh/kernel/cpu/sh3/entry.S index 3f7e2a22c7c..f6a389c996c 100644 --- a/arch/sh/kernel/cpu/sh3/entry.S +++ b/arch/sh/kernel/cpu/sh3/entry.S @@ -132,7 +132,6 @@ ENTRY(tlb_protection_violation_store)  	 mov	#1, r5  call_handle_tlbmiss: -	setup_frame_reg  	mov.l	1f, r0  	mov	r5, r8  	mov.l	@r0, r6 @@ -365,6 +364,8 @@ handle_exception:  	 mov.l	@k2, k2		! read out vector and keep in k2  handle_exception_special: +	setup_frame_reg +  	! Setup return address and jump to exception handler  	mov.l	7f, r9		! fetch return address  	stc	r2_bank, r0	! k2 (vector) diff --git a/arch/sh/kernel/cpu/sh3/ex.S b/arch/sh/kernel/cpu/sh3/ex.S index 46610c35c23..99b4d020179 100644 --- a/arch/sh/kernel/cpu/sh3/ex.S +++ b/arch/sh/kernel/cpu/sh3/ex.S @@ -49,7 +49,7 @@ ENTRY(exception_handling_table)  	.long	exception_error	! reserved_instruction (filled by trap_init) /* 180 */  	.long	exception_error	! illegal_slot_instruction (filled by trap_init) /*1A0*/  	.long	nmi_trap_handler	/* 1C0 */	! Allow trap to debugger -	.long	break_point_trap	/* 1E0 */ +	.long	breakpoint_trap_handler	/* 1E0 */  	/*  	 * Pad the remainder of the table out, exceptions residing in far diff --git a/arch/sh/kernel/cpu/sh3/probe.c b/arch/sh/kernel/cpu/sh3/probe.c index f9c7df64eb0..bf23c322e16 100644 --- a/arch/sh/kernel/cpu/sh3/probe.c +++ b/arch/sh/kernel/cpu/sh3/probe.c @@ -16,7 +16,7 @@  #include <asm/cache.h>  #include <asm/io.h> -int __uses_jump_to_uncached detect_cpu_and_cache_system(void) +void __cpuinit cpu_probe(void)  {  	unsigned long addr0, addr1, data0, data1, data2, data3; @@ -30,23 +30,23 @@ int __uses_jump_to_uncached detect_cpu_and_cache_system(void)  	addr1 = CACHE_OC_ADDRESS_ARRAY + (1 << 12);  	/* First, write back & invalidate */ -	data0  = ctrl_inl(addr0); -	ctrl_outl(data0&~(SH_CACHE_VALID|SH_CACHE_UPDATED), addr0); -	data1  = ctrl_inl(addr1); -	ctrl_outl(data1&~(SH_CACHE_VALID|SH_CACHE_UPDATED), addr1); +	data0  = __raw_readl(addr0); +	__raw_writel(data0&~(SH_CACHE_VALID|SH_CACHE_UPDATED), addr0); +	data1  = __raw_readl(addr1); +	__raw_writel(data1&~(SH_CACHE_VALID|SH_CACHE_UPDATED), addr1);  	/* Next, check if there's shadow or not */ -	data0 = ctrl_inl(addr0); +	data0 = __raw_readl(addr0);  	data0 ^= SH_CACHE_VALID; -	ctrl_outl(data0, addr0); -	data1 = ctrl_inl(addr1); +	__raw_writel(data0, addr0); +	data1 = __raw_readl(addr1);  	data2 = data1 ^ SH_CACHE_VALID; -	ctrl_outl(data2, addr1); -	data3 = ctrl_inl(addr0); +	__raw_writel(data2, addr1); +	data3 = __raw_readl(addr0);  	/* Lastly, invaliate them. */ -	ctrl_outl(data0&~SH_CACHE_VALID, addr0); -	ctrl_outl(data2&~SH_CACHE_VALID, addr1); +	__raw_writel(data0&~SH_CACHE_VALID, addr0); +	__raw_writel(data2&~SH_CACHE_VALID, addr1);  	back_to_cached(); @@ -94,9 +94,9 @@ int __uses_jump_to_uncached detect_cpu_and_cache_system(void)  		boot_cpu_data.dcache.way_incr	= (1 << 13);  		boot_cpu_data.dcache.entry_mask	= 0x1ff0;  		boot_cpu_data.dcache.sets	= 512; -		ctrl_outl(CCR_CACHE_32KB, CCR3_REG); +		__raw_writel(CCR_CACHE_32KB, CCR3_REG);  #else -		ctrl_outl(CCR_CACHE_16KB, CCR3_REG); +		__raw_writel(CCR_CACHE_16KB, CCR3_REG);  #endif  #endif  	} @@ -108,6 +108,4 @@ int __uses_jump_to_uncached detect_cpu_and_cache_system(void)  	boot_cpu_data.icache = boot_cpu_data.dcache;  	boot_cpu_data.family = CPU_FAMILY_SH3; - -	return 0;  } diff --git a/arch/sh/kernel/cpu/sh3/setup-sh3.c b/arch/sh/kernel/cpu/sh3/setup-sh3.c index c9884685785..53be70b9811 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh3.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh3.c @@ -58,7 +58,7 @@ static DECLARE_INTC_DESC_ACK(intc_desc_irq45, "sh3-irq45",  void __init plat_irq_setup_pins(int mode)  {  	if (mode == IRQ_MODE_IRQ) { -		ctrl_outw(ctrl_inw(INTC_ICR1) & ~INTC_ICR1_IRQLVL, INTC_ICR1); +		__raw_writew(__raw_readw(INTC_ICR1) & ~INTC_ICR1_IRQLVL, INTC_ICR1);  		register_intc_controller(&intc_desc_irq0123);  		return;  	} diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7705.c b/arch/sh/kernel/cpu/sh3/setup-sh7705.c index 7b892d60e3a..baadd7f54d9 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7705.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7705.c @@ -124,16 +124,13 @@ static struct platform_device rtc_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x02,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xfffffe94,  		.end	= 0xfffffe9f,  		.flags	= IORESOURCE_MEM, @@ -155,16 +152,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0xe,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xfffffea0,  		.end	= 0xfffffeab,  		.flags	= IORESOURCE_MEM, @@ -186,15 +180,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1a,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xfffffeac,  		.end	= 0xfffffebb,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh3/setup-sh770x.c b/arch/sh/kernel/cpu/sh3/setup-sh770x.c index bc0c4f68c7c..3cf8c8ef7b3 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh770x.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh770x.c @@ -157,16 +157,13 @@ static struct platform_device scif2_device = {  #endif  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x02,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xfffffe94,  		.end	= 0xfffffe9f,  		.flags	= IORESOURCE_MEM, @@ -188,16 +185,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0xe,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xfffffea0,  		.end	= 0xfffffeab,  		.flags	= IORESOURCE_MEM, @@ -219,15 +213,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1a,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xfffffeac,  		.end	= 0xfffffebb,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7710.c b/arch/sh/kernel/cpu/sh3/setup-sh7710.c index 0845a3ad006..b0c2fb4ab47 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7710.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7710.c @@ -127,16 +127,13 @@ static struct platform_device scif1_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x02,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xa412fe94,  		.end	= 0xa412fe9f,  		.flags	= IORESOURCE_MEM, @@ -158,16 +155,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0xe,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xa412fea0,  		.end	= 0xa412feab,  		.flags	= IORESOURCE_MEM, @@ -189,15 +183,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1a,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xa412feac,  		.end	= 0xa412feb5,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7720.c b/arch/sh/kernel/cpu/sh3/setup-sh7720.c index a718a623109..24b17135d5d 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7720.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7720.c @@ -130,17 +130,14 @@ static struct platform_device usbf_device = {  };  static struct sh_timer_config cmt0_platform_data = { -	.name = "CMT0",  	.channel_offset = 0x10,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 125,  	.clocksource_rating = 125,  };  static struct resource cmt0_resources[] = {  	[0] = { -		.name	= "CMT0",  		.start	= 0x044a0010,  		.end	= 0x044a001b,  		.flags	= IORESOURCE_MEM, @@ -162,15 +159,12 @@ static struct platform_device cmt0_device = {  };  static struct sh_timer_config cmt1_platform_data = { -	.name = "CMT1",  	.channel_offset = 0x20,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource cmt1_resources[] = {  	[0] = { -		.name	= "CMT1",  		.start	= 0x044a0020,  		.end	= 0x044a002b,  		.flags	= IORESOURCE_MEM, @@ -192,15 +186,12 @@ static struct platform_device cmt1_device = {  };  static struct sh_timer_config cmt2_platform_data = { -	.name = "CMT2",  	.channel_offset = 0x30,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource cmt2_resources[] = {  	[0] = { -		.name	= "CMT2",  		.start	= 0x044a0030,  		.end	= 0x044a003b,  		.flags	= IORESOURCE_MEM, @@ -222,15 +213,12 @@ static struct platform_device cmt2_device = {  };  static struct sh_timer_config cmt3_platform_data = { -	.name = "CMT3",  	.channel_offset = 0x40,  	.timer_bit = 3, -	.clk = "peripheral_clk",  };  static struct resource cmt3_resources[] = {  	[0] = { -		.name	= "CMT3",  		.start	= 0x044a0040,  		.end	= 0x044a004b,  		.flags	= IORESOURCE_MEM, @@ -252,15 +240,12 @@ static struct platform_device cmt3_device = {  };  static struct sh_timer_config cmt4_platform_data = { -	.name = "CMT4",  	.channel_offset = 0x50,  	.timer_bit = 4, -	.clk = "peripheral_clk",  };  static struct resource cmt4_resources[] = {  	[0] = { -		.name	= "CMT4",  		.start	= 0x044a0050,  		.end	= 0x044a005b,  		.flags	= IORESOURCE_MEM, @@ -282,16 +267,13 @@ static struct platform_device cmt4_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x02,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xa412fe94,  		.end	= 0xa412fe9f,  		.flags	= IORESOURCE_MEM, @@ -313,16 +295,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0xe,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xa412fea0,  		.end	= 0xa412feab,  		.flags	= IORESOURCE_MEM, @@ -344,15 +323,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1a,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xa412feac,  		.end	= 0xa412feb5,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh4/clock-sh4-202.c b/arch/sh/kernel/cpu/sh4/clock-sh4-202.c index 21421e34e7d..4eabc68cd75 100644 --- a/arch/sh/kernel/cpu/sh4/clock-sh4-202.c +++ b/arch/sh/kernel/cpu/sh4/clock-sh4-202.c @@ -12,9 +12,10 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/err.h> +#include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h> -#include <asm/io.h>  #define CPG2_FRQCR3	0xfe0a0018 @@ -23,7 +24,7 @@ static int frqcr3_values[]   = { 0, 1, 2, 3, 4, 5, 6  };  static unsigned long emi_clk_recalc(struct clk *clk)  { -	int idx = ctrl_inl(CPG2_FRQCR3) & 0x0007; +	int idx = __raw_readl(CPG2_FRQCR3) & 0x0007;  	return clk->parent->rate / frqcr3_divisors[idx];  } @@ -45,14 +46,13 @@ static struct clk_ops sh4202_emi_clk_ops = {  };  static struct clk sh4202_emi_clk = { -	.name		= "emi_clk",  	.flags		= CLK_ENABLE_ON_INIT,  	.ops		= &sh4202_emi_clk_ops,  };  static unsigned long femi_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inl(CPG2_FRQCR3) >> 3) & 0x0007; +	int idx = (__raw_readl(CPG2_FRQCR3) >> 3) & 0x0007;  	return clk->parent->rate / frqcr3_divisors[idx];  } @@ -61,7 +61,6 @@ static struct clk_ops sh4202_femi_clk_ops = {  };  static struct clk sh4202_femi_clk = { -	.name		= "femi_clk",  	.flags		= CLK_ENABLE_ON_INIT,  	.ops		= &sh4202_femi_clk_ops,  }; @@ -92,7 +91,7 @@ static void shoc_clk_init(struct clk *clk)  static unsigned long shoc_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inl(CPG2_FRQCR3) >> 6) & 0x0007; +	int idx = (__raw_readl(CPG2_FRQCR3) >> 6) & 0x0007;  	return clk->parent->rate / frqcr3_divisors[idx];  } @@ -122,10 +121,10 @@ static int shoc_clk_set_rate(struct clk *clk, unsigned long rate, int algo_id)  	tmp = frqcr3_lookup(clk, rate); -	frqcr3 = ctrl_inl(CPG2_FRQCR3); +	frqcr3 = __raw_readl(CPG2_FRQCR3);  	frqcr3 &= ~(0x0007 << 6);  	frqcr3 |= tmp << 6; -	ctrl_outl(frqcr3, CPG2_FRQCR3); +	__raw_writel(frqcr3, CPG2_FRQCR3);  	clk->rate = clk->parent->rate / frqcr3_divisors[tmp]; @@ -139,7 +138,6 @@ static struct clk_ops sh4202_shoc_clk_ops = {  };  static struct clk sh4202_shoc_clk = { -	.name		= "shoc_clk",  	.flags		= CLK_ENABLE_ON_INIT,  	.ops		= &sh4202_shoc_clk_ops,  }; @@ -150,6 +148,15 @@ static struct clk *sh4202_onchip_clocks[] = {  	&sh4202_shoc_clk,  }; +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("emi_clk", &sh4202_emi_clk), +	CLKDEV_CON_ID("femi_clk", &sh4202_femi_clk), +	CLKDEV_CON_ID("shoc_clk", &sh4202_shoc_clk), +}; +  int __init arch_clk_init(void)  {  	struct clk *clk; @@ -167,5 +174,7 @@ int __init arch_clk_init(void)  	clk_put(clk); +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); +  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4/clock-sh4.c b/arch/sh/kernel/cpu/sh4/clock-sh4.c index 73294d9cd04..5add75c1f53 100644 --- a/arch/sh/kernel/cpu/sh4/clock-sh4.c +++ b/arch/sh/kernel/cpu/sh4/clock-sh4.c @@ -28,7 +28,7 @@ static int pfc_divisors[] = { 2, 3, 4, 6, 8, 2, 2, 2 };  static void master_clk_init(struct clk *clk)  { -	clk->rate *= pfc_divisors[ctrl_inw(FRQCR) & 0x0007]; +	clk->rate *= pfc_divisors[__raw_readw(FRQCR) & 0x0007];  }  static struct clk_ops sh4_master_clk_ops = { @@ -37,7 +37,7 @@ static struct clk_ops sh4_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FRQCR) & 0x0007); +	int idx = (__raw_readw(FRQCR) & 0x0007);  	return clk->parent->rate / pfc_divisors[idx];  } @@ -47,7 +47,7 @@ static struct clk_ops sh4_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FRQCR) >> 3) & 0x0007; +	int idx = (__raw_readw(FRQCR) >> 3) & 0x0007;  	return clk->parent->rate / bfc_divisors[idx];  } @@ -57,7 +57,7 @@ static struct clk_ops sh4_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(FRQCR) >> 6) & 0x0007; +	int idx = (__raw_readw(FRQCR) >> 6) & 0x0007;  	return clk->parent->rate / ifc_divisors[idx];  } diff --git a/arch/sh/kernel/cpu/sh4/fpu.c b/arch/sh/kernel/cpu/sh4/fpu.c index e97857aec8a..447482d7f65 100644 --- a/arch/sh/kernel/cpu/sh4/fpu.c +++ b/arch/sh/kernel/cpu/sh4/fpu.c @@ -85,14 +85,14 @@ void save_fpu(struct task_struct *tsk)  		      "fmov.s	fr1, @-%0\n\t"  		      "fmov.s	fr0, @-%0\n\t"  		      "lds	%3, fpscr\n\t":"=r" (dummy) -		      :"0"((char *)(&tsk->thread.fpu.hard.status)), +		      :"0"((char *)(&tsk->thread.xstate->hardfpu.status)),  		      "r"(FPSCR_RCHG), "r"(FPSCR_INIT)  		      :"memory");  	disable_fpu();  } -static void restore_fpu(struct task_struct *tsk) +void restore_fpu(struct task_struct *tsk)  {  	unsigned long dummy; @@ -135,62 +135,11 @@ static void restore_fpu(struct task_struct *tsk)  		      "lds.l	@%0+, fpscr\n\t"  		      "lds.l	@%0+, fpul\n\t"  		      :"=r" (dummy) -		      :"0"(&tsk->thread.fpu), "r"(FPSCR_RCHG) +		      :"0" (tsk->thread.xstate), "r" (FPSCR_RCHG)  		      :"memory");  	disable_fpu();  } -/* - * Load the FPU with signalling NANS.  This bit pattern we're using - * has the property that no matter wether considered as single or as - * double precision represents signaling NANS. - */ - -static void fpu_init(void) -{ -	enable_fpu(); -	asm volatile (	"lds	%0, fpul\n\t" -			"lds	%1, fpscr\n\t" -			"fsts	fpul, fr0\n\t" -			"fsts	fpul, fr1\n\t" -			"fsts	fpul, fr2\n\t" -			"fsts	fpul, fr3\n\t" -			"fsts	fpul, fr4\n\t" -			"fsts	fpul, fr5\n\t" -			"fsts	fpul, fr6\n\t" -			"fsts	fpul, fr7\n\t" -			"fsts	fpul, fr8\n\t" -			"fsts	fpul, fr9\n\t" -			"fsts	fpul, fr10\n\t" -			"fsts	fpul, fr11\n\t" -			"fsts	fpul, fr12\n\t" -			"fsts	fpul, fr13\n\t" -			"fsts	fpul, fr14\n\t" -			"fsts	fpul, fr15\n\t" -			"frchg\n\t" -			"fsts	fpul, fr0\n\t" -			"fsts	fpul, fr1\n\t" -			"fsts	fpul, fr2\n\t" -			"fsts	fpul, fr3\n\t" -			"fsts	fpul, fr4\n\t" -			"fsts	fpul, fr5\n\t" -			"fsts	fpul, fr6\n\t" -			"fsts	fpul, fr7\n\t" -			"fsts	fpul, fr8\n\t" -			"fsts	fpul, fr9\n\t" -			"fsts	fpul, fr10\n\t" -			"fsts	fpul, fr11\n\t" -			"fsts	fpul, fr12\n\t" -			"fsts	fpul, fr13\n\t" -			"fsts	fpul, fr14\n\t" -			"fsts	fpul, fr15\n\t" -			"frchg\n\t" -			"lds	%2, fpscr\n\t" -			:	/* no output */ -			:"r" (0), "r"(FPSCR_RCHG), "r"(FPSCR_INIT)); -	disable_fpu(); -} -  /**   *      denormal_to_double - Given denormalized float number,   *                           store double float @@ -282,9 +231,9 @@ static int ieee_fpe_handler(struct pt_regs *regs)  		/* fcnvsd */  		struct task_struct *tsk = current; -		if ((tsk->thread.fpu.hard.fpscr & FPSCR_CAUSE_ERROR)) +		if ((tsk->thread.xstate->hardfpu.fpscr & FPSCR_CAUSE_ERROR))  			/* FPU error */ -			denormal_to_double(&tsk->thread.fpu.hard, +			denormal_to_double(&tsk->thread.xstate->hardfpu,  					   (finsn >> 8) & 0xf);  		else  			return 0; @@ -300,9 +249,9 @@ static int ieee_fpe_handler(struct pt_regs *regs)  		n = (finsn >> 8) & 0xf;  		m = (finsn >> 4) & 0xf; -		hx = tsk->thread.fpu.hard.fp_regs[n]; -		hy = tsk->thread.fpu.hard.fp_regs[m]; -		fpscr = tsk->thread.fpu.hard.fpscr; +		hx = tsk->thread.xstate->hardfpu.fp_regs[n]; +		hy = tsk->thread.xstate->hardfpu.fp_regs[m]; +		fpscr = tsk->thread.xstate->hardfpu.fpscr;  		prec = fpscr & FPSCR_DBL_PRECISION;  		if ((fpscr & FPSCR_CAUSE_ERROR) @@ -312,18 +261,18 @@ static int ieee_fpe_handler(struct pt_regs *regs)  			/* FPU error because of denormal (doubles) */  			llx = ((long long)hx << 32) -			    | tsk->thread.fpu.hard.fp_regs[n + 1]; +			    | tsk->thread.xstate->hardfpu.fp_regs[n + 1];  			lly = ((long long)hy << 32) -			    | tsk->thread.fpu.hard.fp_regs[m + 1]; +			    | tsk->thread.xstate->hardfpu.fp_regs[m + 1];  			llx = float64_mul(llx, lly); -			tsk->thread.fpu.hard.fp_regs[n] = llx >> 32; -			tsk->thread.fpu.hard.fp_regs[n + 1] = llx & 0xffffffff; +			tsk->thread.xstate->hardfpu.fp_regs[n] = llx >> 32; +			tsk->thread.xstate->hardfpu.fp_regs[n + 1] = llx & 0xffffffff;  		} else if ((fpscr & FPSCR_CAUSE_ERROR)  			   && (!prec && ((hx & 0x7fffffff) < 0x00800000  					 || (hy & 0x7fffffff) < 0x00800000))) {  			/* FPU error because of denormal (floats) */  			hx = float32_mul(hx, hy); -			tsk->thread.fpu.hard.fp_regs[n] = hx; +			tsk->thread.xstate->hardfpu.fp_regs[n] = hx;  		} else  			return 0; @@ -338,9 +287,9 @@ static int ieee_fpe_handler(struct pt_regs *regs)  		n = (finsn >> 8) & 0xf;  		m = (finsn >> 4) & 0xf; -		hx = tsk->thread.fpu.hard.fp_regs[n]; -		hy = tsk->thread.fpu.hard.fp_regs[m]; -		fpscr = tsk->thread.fpu.hard.fpscr; +		hx = tsk->thread.xstate->hardfpu.fp_regs[n]; +		hy = tsk->thread.xstate->hardfpu.fp_regs[m]; +		fpscr = tsk->thread.xstate->hardfpu.fpscr;  		prec = fpscr & FPSCR_DBL_PRECISION;  		if ((fpscr & FPSCR_CAUSE_ERROR) @@ -350,15 +299,15 @@ static int ieee_fpe_handler(struct pt_regs *regs)  			/* FPU error because of denormal (doubles) */  			llx = ((long long)hx << 32) -			    | tsk->thread.fpu.hard.fp_regs[n + 1]; +			    | tsk->thread.xstate->hardfpu.fp_regs[n + 1];  			lly = ((long long)hy << 32) -			    | tsk->thread.fpu.hard.fp_regs[m + 1]; +			    | tsk->thread.xstate->hardfpu.fp_regs[m + 1];  			if ((finsn & 0xf00f) == 0xf000)  				llx = float64_add(llx, lly);  			else  				llx = float64_sub(llx, lly); -			tsk->thread.fpu.hard.fp_regs[n] = llx >> 32; -			tsk->thread.fpu.hard.fp_regs[n + 1] = llx & 0xffffffff; +			tsk->thread.xstate->hardfpu.fp_regs[n] = llx >> 32; +			tsk->thread.xstate->hardfpu.fp_regs[n + 1] = llx & 0xffffffff;  		} else if ((fpscr & FPSCR_CAUSE_ERROR)  			   && (!prec && ((hx & 0x7fffffff) < 0x00800000  					 || (hy & 0x7fffffff) < 0x00800000))) { @@ -367,7 +316,7 @@ static int ieee_fpe_handler(struct pt_regs *regs)  				hx = float32_add(hx, hy);  			else  				hx = float32_sub(hx, hy); -			tsk->thread.fpu.hard.fp_regs[n] = hx; +			tsk->thread.xstate->hardfpu.fp_regs[n] = hx;  		} else  			return 0; @@ -382,9 +331,9 @@ static int ieee_fpe_handler(struct pt_regs *regs)  		n = (finsn >> 8) & 0xf;  		m = (finsn >> 4) & 0xf; -		hx = tsk->thread.fpu.hard.fp_regs[n]; -		hy = tsk->thread.fpu.hard.fp_regs[m]; -		fpscr = tsk->thread.fpu.hard.fpscr; +		hx = tsk->thread.xstate->hardfpu.fp_regs[n]; +		hy = tsk->thread.xstate->hardfpu.fp_regs[m]; +		fpscr = tsk->thread.xstate->hardfpu.fpscr;  		prec = fpscr & FPSCR_DBL_PRECISION;  		if ((fpscr & FPSCR_CAUSE_ERROR) @@ -394,20 +343,20 @@ static int ieee_fpe_handler(struct pt_regs *regs)  			/* FPU error because of denormal (doubles) */  			llx = ((long long)hx << 32) -			    | tsk->thread.fpu.hard.fp_regs[n + 1]; +			    | tsk->thread.xstate->hardfpu.fp_regs[n + 1];  			lly = ((long long)hy << 32) -			    | tsk->thread.fpu.hard.fp_regs[m + 1]; +			    | tsk->thread.xstate->hardfpu.fp_regs[m + 1];  			llx = float64_div(llx, lly); -			tsk->thread.fpu.hard.fp_regs[n] = llx >> 32; -			tsk->thread.fpu.hard.fp_regs[n + 1] = llx & 0xffffffff; +			tsk->thread.xstate->hardfpu.fp_regs[n] = llx >> 32; +			tsk->thread.xstate->hardfpu.fp_regs[n + 1] = llx & 0xffffffff;  		} else if ((fpscr & FPSCR_CAUSE_ERROR)  			   && (!prec && ((hx & 0x7fffffff) < 0x00800000  					 || (hy & 0x7fffffff) < 0x00800000))) {  			/* FPU error because of denormal (floats) */  			hx = float32_div(hx, hy); -			tsk->thread.fpu.hard.fp_regs[n] = hx; +			tsk->thread.xstate->hardfpu.fp_regs[n] = hx;  		} else  			return 0; @@ -420,17 +369,17 @@ static int ieee_fpe_handler(struct pt_regs *regs)  		unsigned int hx;  		m = (finsn >> 8) & 0x7; -		hx = tsk->thread.fpu.hard.fp_regs[m]; +		hx = tsk->thread.xstate->hardfpu.fp_regs[m]; -		if ((tsk->thread.fpu.hard.fpscr & FPSCR_CAUSE_ERROR) +		if ((tsk->thread.xstate->hardfpu.fpscr & FPSCR_CAUSE_ERROR)  			&& ((hx & 0x7fffffff) < 0x00100000)) {  			/* subnormal double to float conversion */  			long long llx; -			llx = ((long long)tsk->thread.fpu.hard.fp_regs[m] << 32) -			    | tsk->thread.fpu.hard.fp_regs[m + 1]; +			llx = ((long long)tsk->thread.xstate->hardfpu.fp_regs[m] << 32) +			    | tsk->thread.xstate->hardfpu.fp_regs[m + 1]; -			tsk->thread.fpu.hard.fpul = float64_to_float32(llx); +			tsk->thread.xstate->hardfpu.fpul = float64_to_float32(llx);  		} else  			return 0; @@ -449,7 +398,7 @@ void float_raise(unsigned int flags)  int float_rounding_mode(void)  {  	struct task_struct *tsk = current; -	int roundingMode = FPSCR_ROUNDING_MODE(tsk->thread.fpu.hard.fpscr); +	int roundingMode = FPSCR_ROUNDING_MODE(tsk->thread.xstate->hardfpu.fpscr);  	return roundingMode;  } @@ -461,16 +410,16 @@ BUILD_TRAP_HANDLER(fpu_error)  	__unlazy_fpu(tsk, regs);  	fpu_exception_flags = 0;  	if (ieee_fpe_handler(regs)) { -		tsk->thread.fpu.hard.fpscr &= +		tsk->thread.xstate->hardfpu.fpscr &=  		    ~(FPSCR_CAUSE_MASK | FPSCR_FLAG_MASK); -		tsk->thread.fpu.hard.fpscr |= fpu_exception_flags; +		tsk->thread.xstate->hardfpu.fpscr |= fpu_exception_flags;  		/* Set the FPSCR flag as well as cause bits - simply  		 * replicate the cause */ -		tsk->thread.fpu.hard.fpscr |= (fpu_exception_flags >> 10); +		tsk->thread.xstate->hardfpu.fpscr |= (fpu_exception_flags >> 10);  		grab_fpu(regs);  		restore_fpu(tsk);  		task_thread_info(tsk)->status |= TS_USEDFPU; -		if ((((tsk->thread.fpu.hard.fpscr & FPSCR_ENABLE_MASK) >> 7) & +		if ((((tsk->thread.xstate->hardfpu.fpscr & FPSCR_ENABLE_MASK) >> 7) &  		     (fpu_exception_flags >> 2)) == 0) {  			return;  		} @@ -478,33 +427,3 @@ BUILD_TRAP_HANDLER(fpu_error)  	force_sig(SIGFPE, tsk);  } - -void fpu_state_restore(struct pt_regs *regs) -{ -	struct task_struct *tsk = current; - -	grab_fpu(regs); -	if (unlikely(!user_mode(regs))) { -		printk(KERN_ERR "BUG: FPU is used in kernel mode.\n"); -		BUG(); -		return; -	} - -	if (likely(used_math())) { -		/* Using the FPU again.  */ -		restore_fpu(tsk); -	} else { -		/* First time FPU user.  */ -		fpu_init(); -		set_used_math(); -	} -	task_thread_info(tsk)->status |= TS_USEDFPU; -	tsk->fpu_counter++; -} - -BUILD_TRAP_HANDLER(fpu_state_restore) -{ -	TRAP_HANDLER_DECL; - -	fpu_state_restore(regs); -} diff --git a/arch/sh/kernel/cpu/sh4/probe.c b/arch/sh/kernel/cpu/sh4/probe.c index d36f0c45f55..d180f16281e 100644 --- a/arch/sh/kernel/cpu/sh4/probe.c +++ b/arch/sh/kernel/cpu/sh4/probe.c @@ -15,7 +15,7 @@  #include <asm/processor.h>  #include <asm/cache.h> -int __init detect_cpu_and_cache_system(void) +void __cpuinit cpu_probe(void)  {  	unsigned long pvr, prr, cvr;  	unsigned long size; @@ -28,9 +28,9 @@ int __init detect_cpu_and_cache_system(void)  		[9] = (1 << 16)  	}; -	pvr = (ctrl_inl(CCN_PVR) >> 8) & 0xffffff; -	prr = (ctrl_inl(CCN_PRR) >> 4) & 0xff; -	cvr = (ctrl_inl(CCN_CVR)); +	pvr = (__raw_readl(CCN_PVR) >> 8) & 0xffffff; +	prr = (__raw_readl(CCN_PRR) >> 4) & 0xff; +	cvr = (__raw_readl(CCN_CVR));  	/*  	 * Setup some sane SH-4 defaults for the icache @@ -71,11 +71,11 @@ int __init detect_cpu_and_cache_system(void)  		boot_cpu_data.dcache.ways = 4;  	} else {  		/* And some SH-4 defaults.. */ -		boot_cpu_data.flags |= CPU_HAS_PTEA; +		boot_cpu_data.flags |= CPU_HAS_PTEA | CPU_HAS_FPU;  		boot_cpu_data.family = CPU_FAMILY_SH4;  	} -	/* FPU detection works for everyone */ +	/* FPU detection works for almost everyone */  	if ((cvr & 0x20000000))  		boot_cpu_data.flags |= CPU_HAS_FPU; @@ -124,6 +124,7 @@ int __init detect_cpu_and_cache_system(void)  		boot_cpu_data.type = CPU_SH7785;  		break;  	case 0x4004: +	case 0x4005:  		boot_cpu_data.type = CPU_SH7786;  		boot_cpu_data.flags |= CPU_HAS_PTEAEX | CPU_HAS_L2_CACHE;  		break; @@ -160,6 +161,7 @@ int __init detect_cpu_and_cache_system(void)  		break;  	case 0x700:  		boot_cpu_data.type = CPU_SH4_501; +		boot_cpu_data.flags &= ~CPU_HAS_FPU;  		boot_cpu_data.icache.ways = 2;  		boot_cpu_data.dcache.ways = 2;  		break; @@ -227,7 +229,7 @@ int __init detect_cpu_and_cache_system(void)  			 * Size calculation is much more sensible  			 * than it is for the L1.  			 * -			 * Sizes are 128KB, 258KB, 512KB, and 1MB. +			 * Sizes are 128KB, 256KB, 512KB, and 1MB.  			 */  			size = (cvr & 0xf) << 17; @@ -249,6 +251,4 @@ int __init detect_cpu_and_cache_system(void)  				 boot_cpu_data.scache.linesz);  		}  	} - -	return 0;  } diff --git a/arch/sh/kernel/cpu/sh4/setup-sh4-202.c b/arch/sh/kernel/cpu/sh4/setup-sh4-202.c index 4b733715cdb..e916b18e1f7 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh4-202.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh4-202.c @@ -31,16 +31,13 @@ static struct platform_device scif0_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -62,16 +59,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -93,15 +87,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002f,  		.flags	= IORESOURCE_MEM, @@ -198,7 +189,7 @@ void __init plat_irq_setup_pins(int mode)  {  	switch (mode) {  	case IRQ_MODE_IRQ: /* individual interrupt mode for IRL3-0 */ -		ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); +		__raw_writew(__raw_readw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR);  		register_intc_controller(&intc_desc_irlm);  		break;  	default: diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7750.c b/arch/sh/kernel/cpu/sh4/setup-sh7750.c index b2a9df1af64..911d196e86b 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh7750.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh7750.c @@ -66,16 +66,13 @@ static struct platform_device scif1_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -97,16 +94,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -128,15 +122,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002f,  		.flags	= IORESOURCE_MEM, @@ -163,15 +154,12 @@ static struct platform_device tmu2_device = {  	defined(CONFIG_CPU_SUBTYPE_SH7751R)  static struct sh_timer_config tmu3_platform_data = { -	.name = "TMU3",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  };  static struct resource tmu3_resources[] = {  	[0] = { -		.name	= "TMU3",  		.start	= 0xfe100008,  		.end	= 0xfe100013,  		.flags	= IORESOURCE_MEM, @@ -193,15 +181,12 @@ static struct platform_device tmu3_device = {  };  static struct sh_timer_config tmu4_platform_data = { -	.name = "TMU4",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource tmu4_resources[] = {  	[0] = { -		.name	= "TMU4",  		.start	= 0xfe100014,  		.end	= 0xfe10001f,  		.flags	= IORESOURCE_MEM, @@ -442,7 +427,7 @@ void __init plat_irq_setup_pins(int mode)  	switch (mode) {  	case IRQ_MODE_IRQ: /* individual interrupt mode for IRL3-0 */ -		ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); +		__raw_writew(__raw_readw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR);  		register_intc_controller(&intc_desc_irlm);  		break;  	default: diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7760.c b/arch/sh/kernel/cpu/sh4/setup-sh7760.c index 5b74cc0b43d..48ea8fe85dc 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh7760.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh7760.c @@ -187,16 +187,13 @@ static struct platform_device scif3_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -218,16 +215,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -249,15 +243,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002f,  		.flags	= IORESOURCE_MEM, @@ -319,7 +310,7 @@ void __init plat_irq_setup_pins(int mode)  {  	switch (mode) {  	case IRQ_MODE_IRQ: -		ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); +		__raw_writew(__raw_readw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR);  		register_intc_controller(&intc_desc_irq);  		break;  	default: diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c index 8a8a993f55e..14726eef1ce 100644 --- a/arch/sh/kernel/cpu/sh4/sq.c +++ b/arch/sh/kernel/cpu/sh4/sq.c @@ -43,9 +43,9 @@ static unsigned long *sq_bitmap;  #define store_queue_barrier()			\  do {						\ -	(void)ctrl_inl(P4SEG_STORE_QUE);	\ -	ctrl_outl(0, P4SEG_STORE_QUE + 0);	\ -	ctrl_outl(0, P4SEG_STORE_QUE + 8);	\ +	(void)__raw_readl(P4SEG_STORE_QUE);	\ +	__raw_writel(0, P4SEG_STORE_QUE + 0);	\ +	__raw_writel(0, P4SEG_STORE_QUE + 8);	\  } while (0);  /** @@ -100,7 +100,7 @@ static inline void sq_mapping_list_del(struct sq_mapping *map)  	spin_unlock_irq(&sq_mapping_lock);  } -static int __sq_remap(struct sq_mapping *map, unsigned long flags) +static int __sq_remap(struct sq_mapping *map, pgprot_t prot)  {  #if defined(CONFIG_MMU)  	struct vm_struct *vma; @@ -113,7 +113,7 @@ static int __sq_remap(struct sq_mapping *map, unsigned long flags)  	if (ioremap_page_range((unsigned long)vma->addr,  			       (unsigned long)vma->addr + map->size, -			       vma->phys_addr, __pgprot(flags))) { +			       vma->phys_addr, prot)) {  		vunmap(vma->addr);  		return -EAGAIN;  	} @@ -123,8 +123,8 @@ static int __sq_remap(struct sq_mapping *map, unsigned long flags)  	 * straightforward, as we can just load up each queue's QACR with  	 * the physical address appropriately masked.  	 */ -	ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR0); -	ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR1); +	__raw_writel(((map->addr >> 26) << 2) & 0x1c, SQ_QACR0); +	__raw_writel(((map->addr >> 26) << 2) & 0x1c, SQ_QACR1);  #endif  	return 0; @@ -135,14 +135,14 @@ static int __sq_remap(struct sq_mapping *map, unsigned long flags)   * @phys: Physical address of mapping.   * @size: Length of mapping.   * @name: User invoking mapping. - * @flags: Protection flags. + * @prot: Protection bits.   *   * Remaps the physical address @phys through the next available store queue   * address of @size length. @name is logged at boot time as well as through   * the sysfs interface.   */  unsigned long sq_remap(unsigned long phys, unsigned int size, -		       const char *name, unsigned long flags) +		       const char *name, pgprot_t prot)  {  	struct sq_mapping *map;  	unsigned long end; @@ -177,7 +177,7 @@ unsigned long sq_remap(unsigned long phys, unsigned int size,  	map->sq_addr = P4SEG_STORE_QUE + (page << PAGE_SHIFT); -	ret = __sq_remap(map, pgprot_val(PAGE_KERNEL_NOCACHE) | flags); +	ret = __sq_remap(map, prot);  	if (unlikely(ret != 0))  		goto out; @@ -309,8 +309,7 @@ static ssize_t mapping_store(const char *buf, size_t count)  		return -EIO;  	if (likely(len)) { -		int ret = sq_remap(base, len, "Userspace", -				   pgprot_val(PAGE_SHARED)); +		int ret = sq_remap(base, len, "Userspace", PAGE_SHARED);  		if (ret < 0)  			return ret;  	} else @@ -327,7 +326,7 @@ static struct attribute *sq_sysfs_attrs[] = {  	NULL,  }; -static struct sysfs_ops sq_sysfs_ops = { +static const struct sysfs_ops sq_sysfs_ops = {  	.show	= sq_sysfs_show,  	.store	= sq_sysfs_store,  }; diff --git a/arch/sh/kernel/cpu/sh4a/Makefile b/arch/sh/kernel/cpu/sh4a/Makefile index 33bab477d2e..b144e8af89d 100644 --- a/arch/sh/kernel/cpu/sh4a/Makefile +++ b/arch/sh/kernel/cpu/sh4a/Makefile @@ -41,7 +41,8 @@ pinmux-$(CONFIG_CPU_SUBTYPE_SH7757)	:= pinmux-sh7757.o  pinmux-$(CONFIG_CPU_SUBTYPE_SH7785)	:= pinmux-sh7785.o  pinmux-$(CONFIG_CPU_SUBTYPE_SH7786)	:= pinmux-sh7786.o -obj-y				+= $(clock-y) -obj-$(CONFIG_SMP)		+= $(smp-y) -obj-$(CONFIG_GENERIC_GPIO)	+= $(pinmux-y) -obj-$(CONFIG_PERF_EVENTS)	+= perf_event.o +obj-y					+= $(clock-y) +obj-$(CONFIG_SMP)			+= $(smp-y) +obj-$(CONFIG_GENERIC_GPIO)		+= $(pinmux-y) +obj-$(CONFIG_PERF_EVENTS)		+= perf_event.o +obj-$(CONFIG_HAVE_HW_BREAKPOINT)	+= ubc.o diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7343.c b/arch/sh/kernel/cpu/sh4a/clock-sh7343.c index 0ee3ee86125..71291ae201b 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7343.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7343.c @@ -21,6 +21,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  /* SH7343 registers */ @@ -36,8 +37,6 @@  /* Fixed 32 KHz root clock for RTC and Power Management purposes */  static struct clk r_clk = { -	.name           = "rclk", -	.id             = -1,  	.rate           = 32768,  }; @@ -46,8 +45,6 @@ static struct clk r_clk = {   * from the platform code.   */  struct clk extal_clk = { -	.name		= "extal", -	.id		= -1,  	.rate		= 33333333,  }; @@ -69,8 +66,6 @@ static struct clk_ops dll_clk_ops = {  };  static struct clk dll_clk = { -	.name           = "dll_clk", -	.id             = -1,  	.ops		= &dll_clk_ops,  	.parent		= &r_clk,  	.flags		= CLK_ENABLE_ON_INIT, @@ -91,8 +86,6 @@ static struct clk_ops pll_clk_ops = {  };  static struct clk pll_clk = { -	.name		= "pll_clk", -	.id		= -1,  	.ops		= &pll_clk_ops,  	.flags		= CLK_ENABLE_ON_INIT,  }; @@ -107,82 +100,182 @@ struct clk *main_clks[] = {  static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 };  static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 }; -static struct clk_div_mult_table div4_table = { +static struct clk_div_mult_table div4_div_mult_table = {  	.divisors = divisors,  	.nr_divisors = ARRAY_SIZE(divisors),  	.multipliers = multipliers,  	.nr_multipliers = ARRAY_SIZE(multipliers),  }; +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table, +}; +  enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P,         DIV4_SIUA, DIV4_SIUB, DIV4_NR }; -#define DIV4(_str, _reg, _bit, _mask, _flags) \ -  SH_CLK_DIV4(_str, &pll_clk, _reg, _bit, _mask, _flags) +#define DIV4(_reg, _bit, _mask, _flags) \ +  SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags)  struct clk div4_clks[DIV4_NR] = { -	[DIV4_I] = DIV4("cpu_clk", FRQCR, 20, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_U] = DIV4("umem_clk", FRQCR, 16, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_SH] = DIV4("shyway_clk", FRQCR, 12, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_B] = DIV4("bus_clk", FRQCR, 8, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_B3] = DIV4("b3_clk", FRQCR, 4, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_P] = DIV4("peripheral_clk", FRQCR, 0, 0x1fff, 0), -	[DIV4_SIUA] = DIV4("siua_clk", SCLKACR, 0, 0x1fff, 0), -	[DIV4_SIUB] = DIV4("siub_clk", SCLKBCR, 0, 0x1fff, 0), +	[DIV4_I] = DIV4(FRQCR, 20, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_U] = DIV4(FRQCR, 16, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_SH] = DIV4(FRQCR, 12, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_B] = DIV4(FRQCR, 8, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_B3] = DIV4(FRQCR, 4, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_P] = DIV4(FRQCR, 0, 0x1fff, 0), +	[DIV4_SIUA] = DIV4(SCLKACR, 0, 0x1fff, 0), +	[DIV4_SIUB] = DIV4(SCLKBCR, 0, 0x1fff, 0),  }; -struct clk div6_clks[] = { -	SH_CLK_DIV6("video_clk", &pll_clk, VCLKCR, 0), +enum { DIV6_V, DIV6_NR }; + +struct clk div6_clks[DIV6_NR] = { +	[DIV6_V] = SH_CLK_DIV6(&pll_clk, VCLKCR, 0),  }; -#define MSTP(_str, _parent, _reg, _bit, _flags) \ -  SH_CLK_MSTP32(_str, -1, _parent, _reg, _bit, _flags) +#define MSTP(_parent, _reg, _bit, _flags) \ +  SH_CLK_MSTP32(_parent, _reg, _bit, _flags) -static struct clk mstp_clks[] = { -	MSTP("tlb0", &div4_clks[DIV4_I], MSTPCR0, 31, CLK_ENABLE_ON_INIT), -	MSTP("ic0", &div4_clks[DIV4_I], MSTPCR0, 30, CLK_ENABLE_ON_INIT), -	MSTP("oc0", &div4_clks[DIV4_I], MSTPCR0, 29, CLK_ENABLE_ON_INIT), -	MSTP("uram0", &div4_clks[DIV4_U], MSTPCR0, 28, CLK_ENABLE_ON_INIT), -	MSTP("xymem0", &div4_clks[DIV4_B], MSTPCR0, 26, CLK_ENABLE_ON_INIT), -	MSTP("intc3", &div4_clks[DIV4_P], MSTPCR0, 23, 0), -	MSTP("intc0", &div4_clks[DIV4_P], MSTPCR0, 22, 0), -	MSTP("dmac0", &div4_clks[DIV4_P], MSTPCR0, 21, 0), -	MSTP("sh0", &div4_clks[DIV4_P], MSTPCR0, 20, 0), -	MSTP("hudi0", &div4_clks[DIV4_P], MSTPCR0, 19, 0), -	MSTP("ubc0", &div4_clks[DIV4_P], MSTPCR0, 17, 0), -	MSTP("tmu0", &div4_clks[DIV4_P], MSTPCR0, 15, 0), -	MSTP("cmt0", &r_clk, MSTPCR0, 14, 0), -	MSTP("rwdt0", &r_clk, MSTPCR0, 13, 0), -	MSTP("mfi0", &div4_clks[DIV4_P], MSTPCR0, 11, 0), -	MSTP("flctl0", &div4_clks[DIV4_P], MSTPCR0, 10, 0), -	MSTP("scif0", &div4_clks[DIV4_P], MSTPCR0, 7, 0), -	MSTP("scif1", &div4_clks[DIV4_P], MSTPCR0, 6, 0), -	MSTP("scif2", &div4_clks[DIV4_P], MSTPCR0, 5, 0), -	MSTP("scif3", &div4_clks[DIV4_P], MSTPCR0, 4, 0), -	MSTP("sio0", &div4_clks[DIV4_P], MSTPCR0, 3, 0), -	MSTP("siof0", &div4_clks[DIV4_P], MSTPCR0, 2, 0), -	MSTP("siof1", &div4_clks[DIV4_P], MSTPCR0, 1, 0), +enum { MSTP031, MSTP030, MSTP029, MSTP028, MSTP026, +       MSTP023, MSTP022, MSTP021, MSTP020, MSTP019, MSTP018, MSTP017, MSTP016, +       MSTP015, MSTP014, MSTP013, MSTP012, MSTP011, MSTP010, +       MSTP007, MSTP006, MSTP005, MSTP004, MSTP003, MSTP002, MSTP001, +       MSTP109, MSTP108, MSTP100, +       MSTP225, MSTP224, MSTP218, MSTP217, MSTP216, +       MSTP214, MSTP213, MSTP212, MSTP211, MSTP208, +       MSTP206, MSTP205, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200, +       MSTP_NR }; -	MSTP("i2c0", &div4_clks[DIV4_P], MSTPCR1, 9, 0), -	MSTP("i2c1", &div4_clks[DIV4_P], MSTPCR1, 8, 0), +static struct clk mstp_clks[MSTP_NR] = { +	[MSTP031] = MSTP(&div4_clks[DIV4_I], MSTPCR0, 31, CLK_ENABLE_ON_INIT), +	[MSTP030] = MSTP(&div4_clks[DIV4_I], MSTPCR0, 30, CLK_ENABLE_ON_INIT), +	[MSTP029] = MSTP(&div4_clks[DIV4_I], MSTPCR0, 29, CLK_ENABLE_ON_INIT), +	[MSTP028] = MSTP(&div4_clks[DIV4_U], MSTPCR0, 28, CLK_ENABLE_ON_INIT), +	[MSTP026] = MSTP(&div4_clks[DIV4_B], MSTPCR0, 26, CLK_ENABLE_ON_INIT), +	[MSTP023] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 23, 0), +	[MSTP022] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 22, 0), +	[MSTP021] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 21, 0), +	[MSTP020] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 20, 0), +	[MSTP019] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 19, 0), +	[MSTP017] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 17, 0), +	[MSTP015] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 15, 0), +	[MSTP014] = MSTP(&r_clk, MSTPCR0, 14, 0), +	[MSTP013] = MSTP(&r_clk, MSTPCR0, 13, 0), +	[MSTP011] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 11, 0), +	[MSTP010] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 10, 0), +	[MSTP007] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 7, 0), +	[MSTP006] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 6, 0), +	[MSTP005] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 5, 0), +	[MSTP004] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 4, 0), +	[MSTP003] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 3, 0), +	[MSTP002] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 2, 0), +	[MSTP001] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 1, 0), -	MSTP("tpu0", &div4_clks[DIV4_P], MSTPCR2, 25, 0), -	MSTP("irda0", &div4_clks[DIV4_P], MSTPCR2, 24, 0), -	MSTP("sdhi0", &div4_clks[DIV4_P], MSTPCR2, 18, 0), -	MSTP("mmcif0", &div4_clks[DIV4_P], MSTPCR2, 17, 0), -	MSTP("sim0", &div4_clks[DIV4_P], MSTPCR2, 16, 0), -	MSTP("keysc0", &r_clk, MSTPCR2, 14, 0), -	MSTP("tsif0", &div4_clks[DIV4_P], MSTPCR2, 13, 0), -	MSTP("s3d40", &div4_clks[DIV4_P], MSTPCR2, 12, 0), -	MSTP("usbf0", &div4_clks[DIV4_P], MSTPCR2, 11, 0), -	MSTP("siu0", &div4_clks[DIV4_B], MSTPCR2, 8, 0), -	MSTP("jpu0", &div4_clks[DIV4_B], MSTPCR2, 6, CLK_ENABLE_ON_INIT), -	MSTP("vou0", &div4_clks[DIV4_B], MSTPCR2, 5, 0), -	MSTP("beu0", &div4_clks[DIV4_B], MSTPCR2, 4, 0), -	MSTP("ceu0", &div4_clks[DIV4_B], MSTPCR2, 3, 0), -	MSTP("veu0", &div4_clks[DIV4_B], MSTPCR2, 2, CLK_ENABLE_ON_INIT), -	MSTP("vpu0", &div4_clks[DIV4_B], MSTPCR2, 1, CLK_ENABLE_ON_INIT), -	MSTP("lcdc0", &div4_clks[DIV4_B], MSTPCR2, 0, 0), +	[MSTP109] = MSTP(&div4_clks[DIV4_P], MSTPCR1, 9, 0), +	[MSTP108] = MSTP(&div4_clks[DIV4_P], MSTPCR1, 8, 0), + +	[MSTP225] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 25, 0), +	[MSTP224] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 24, 0), +	[MSTP218] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 18, 0), +	[MSTP217] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 17, 0), +	[MSTP216] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 16, 0), +	[MSTP214] = MSTP(&r_clk, MSTPCR2, 14, 0), +	[MSTP213] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 13, 0), +	[MSTP212] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 12, 0), +	[MSTP211] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 11, 0), +	[MSTP208] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 8, 0), +	[MSTP206] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 6, CLK_ENABLE_ON_INIT), +	[MSTP205] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 5, 0), +	[MSTP204] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 4, 0), +	[MSTP203] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 3, 0), +	[MSTP202] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 2, CLK_ENABLE_ON_INIT), +	[MSTP201] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 1, CLK_ENABLE_ON_INIT), +	[MSTP200] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 0, 0), +}; + +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("rclk", &r_clk), +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("dll_clk", &dll_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), + +	/* DIV4 clocks */ +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), +	CLKDEV_CON_ID("umem_clk", &div4_clks[DIV4_U]), +	CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_SH]), +	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), +	CLKDEV_CON_ID("b3_clk", &div4_clks[DIV4_B3]), +	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), +	CLKDEV_CON_ID("siua_clk", &div4_clks[DIV4_SIUA]), +	CLKDEV_CON_ID("siub_clk", &div4_clks[DIV4_SIUB]), + +	/* DIV6 clocks */ +	CLKDEV_CON_ID("video_clk", &div6_clks[DIV6_V]), + +	/* MSTP32 clocks */ +	CLKDEV_CON_ID("tlb0", &mstp_clks[MSTP031]), +	CLKDEV_CON_ID("ic0", &mstp_clks[MSTP030]), +	CLKDEV_CON_ID("oc0", &mstp_clks[MSTP029]), +	CLKDEV_CON_ID("uram0", &mstp_clks[MSTP028]), +	CLKDEV_CON_ID("xymem0", &mstp_clks[MSTP026]), +	CLKDEV_CON_ID("intc3", &mstp_clks[MSTP023]), +	CLKDEV_CON_ID("intc0", &mstp_clks[MSTP022]), +	CLKDEV_CON_ID("dmac0", &mstp_clks[MSTP021]), +	CLKDEV_CON_ID("sh0", &mstp_clks[MSTP020]), +	CLKDEV_CON_ID("hudi0", &mstp_clks[MSTP019]), +	CLKDEV_CON_ID("ubc0", &mstp_clks[MSTP017]), +	CLKDEV_CON_ID("tmu_fck", &mstp_clks[MSTP015]), +	CLKDEV_CON_ID("cmt_fck", &mstp_clks[MSTP014]), +	CLKDEV_CON_ID("rwdt0", &mstp_clks[MSTP013]), +	CLKDEV_CON_ID("mfi0", &mstp_clks[MSTP011]), +	CLKDEV_CON_ID("flctl0", &mstp_clks[MSTP010]), +	{ +		/* SCIF0 */ +		.dev_id		= "sh-sci.0", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP007], +	}, { +		/* SCIF1 */ +		.dev_id		= "sh-sci.1", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP006], +	}, { +		/* SCIF2 */ +		.dev_id		= "sh-sci.2", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP005], +	}, { +		/* SCIF3 */ +		.dev_id		= "sh-sci.3", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP004], +	}, +	CLKDEV_CON_ID("sio0", &mstp_clks[MSTP003]), +	CLKDEV_CON_ID("siof0", &mstp_clks[MSTP002]), +	CLKDEV_CON_ID("siof1", &mstp_clks[MSTP001]), +	CLKDEV_CON_ID("i2c0", &mstp_clks[MSTP109]), +	CLKDEV_CON_ID("i2c1", &mstp_clks[MSTP108]), +	CLKDEV_CON_ID("tpu0", &mstp_clks[MSTP225]), +	CLKDEV_CON_ID("irda0", &mstp_clks[MSTP224]), +	CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP218]), +	CLKDEV_CON_ID("mmcif0", &mstp_clks[MSTP217]), +	CLKDEV_CON_ID("sim0", &mstp_clks[MSTP216]), +	CLKDEV_CON_ID("keysc0", &mstp_clks[MSTP214]), +	CLKDEV_CON_ID("tsif0", &mstp_clks[MSTP213]), +	CLKDEV_CON_ID("s3d40", &mstp_clks[MSTP212]), +	CLKDEV_CON_ID("usbf0", &mstp_clks[MSTP211]), +	CLKDEV_CON_ID("siu0", &mstp_clks[MSTP208]), +	CLKDEV_CON_ID("jpu0", &mstp_clks[MSTP206]), +	CLKDEV_CON_ID("vou0", &mstp_clks[MSTP205]), +	CLKDEV_CON_ID("beu0", &mstp_clks[MSTP204]), +	CLKDEV_CON_ID("ceu0", &mstp_clks[MSTP203]), +	CLKDEV_CON_ID("veu0", &mstp_clks[MSTP202]), +	CLKDEV_CON_ID("vpu0", &mstp_clks[MSTP201]), +	CLKDEV_CON_ID("lcdc0", &mstp_clks[MSTP200]),  };  int __init arch_clk_init(void) @@ -198,14 +291,16 @@ int __init arch_clk_init(void)  	for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++)  		ret = clk_register(main_clks[k]); +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); +  	if (!ret)  		ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);  	if (!ret) -		ret = sh_clk_div6_register(div6_clks, ARRAY_SIZE(div6_clks)); +		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_clk_mstp32_register(mstp_clks, ARRAY_SIZE(mstp_clks)); +		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7366.c b/arch/sh/kernel/cpu/sh4a/clock-sh7366.c index a95ebaba095..7ce5bbcd408 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7366.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7366.c @@ -21,6 +21,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  /* SH7366 registers */ @@ -36,8 +37,6 @@  /* Fixed 32 KHz root clock for RTC and Power Management purposes */  static struct clk r_clk = { -	.name           = "rclk", -	.id             = -1,  	.rate           = 32768,  }; @@ -46,8 +45,6 @@ static struct clk r_clk = {   * from the platform code.   */  struct clk extal_clk = { -	.name		= "extal", -	.id		= -1,  	.rate		= 33333333,  }; @@ -69,8 +66,6 @@ static struct clk_ops dll_clk_ops = {  };  static struct clk dll_clk = { -	.name           = "dll_clk", -	.id             = -1,  	.ops		= &dll_clk_ops,  	.parent		= &r_clk,  	.flags		= CLK_ENABLE_ON_INIT, @@ -94,8 +89,6 @@ static struct clk_ops pll_clk_ops = {  };  static struct clk pll_clk = { -	.name		= "pll_clk", -	.id		= -1,  	.ops		= &pll_clk_ops,  	.flags		= CLK_ENABLE_ON_INIT,  }; @@ -110,79 +103,168 @@ struct clk *main_clks[] = {  static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 };  static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 }; -static struct clk_div_mult_table div4_table = { +static struct clk_div_mult_table div4_div_mult_table = {  	.divisors = divisors,  	.nr_divisors = ARRAY_SIZE(divisors),  	.multipliers = multipliers,  	.nr_multipliers = ARRAY_SIZE(multipliers),  }; +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table, +}; +  enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P,         DIV4_SIUA, DIV4_SIUB, DIV4_NR }; -#define DIV4(_str, _reg, _bit, _mask, _flags) \ -  SH_CLK_DIV4(_str, &pll_clk, _reg, _bit, _mask, _flags) +#define DIV4(_reg, _bit, _mask, _flags) \ +  SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags)  struct clk div4_clks[DIV4_NR] = { -	[DIV4_I] = DIV4("cpu_clk", FRQCR, 20, 0x1fef, CLK_ENABLE_ON_INIT), -	[DIV4_U] = DIV4("umem_clk", FRQCR, 16, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_SH] = DIV4("shyway_clk", FRQCR, 12, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_B] = DIV4("bus_clk", FRQCR, 8, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_B3] = DIV4("b3_clk", FRQCR, 4, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_P] = DIV4("peripheral_clk", FRQCR, 0, 0x1fff, 0), -	[DIV4_SIUA] = DIV4("siua_clk", SCLKACR, 0, 0x1fff, 0), -	[DIV4_SIUB] = DIV4("siub_clk", SCLKBCR, 0, 0x1fff, 0), +	[DIV4_I] = DIV4(FRQCR, 20, 0x1fef, CLK_ENABLE_ON_INIT), +	[DIV4_U] = DIV4(FRQCR, 16, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_SH] = DIV4(FRQCR, 12, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_B] = DIV4(FRQCR, 8, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_B3] = DIV4(FRQCR, 4, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_P] = DIV4(FRQCR, 0, 0x1fff, 0), +	[DIV4_SIUA] = DIV4(SCLKACR, 0, 0x1fff, 0), +	[DIV4_SIUB] = DIV4(SCLKBCR, 0, 0x1fff, 0),  }; -struct clk div6_clks[] = { -	SH_CLK_DIV6("video_clk", &pll_clk, VCLKCR, 0), +enum { DIV6_V, DIV6_NR }; + +struct clk div6_clks[DIV6_NR] = { +	[DIV6_V] = SH_CLK_DIV6(&pll_clk, VCLKCR, 0),  }; -#define MSTP(_str, _parent, _reg, _bit, _flags) \ -  SH_CLK_MSTP32(_str, -1, _parent, _reg, _bit, _flags) +#define MSTP(_parent, _reg, _bit, _flags) \ +  SH_CLK_MSTP32(_parent, _reg, _bit, _flags) -static struct clk mstp_clks[] = { +enum { MSTP031, MSTP030, MSTP029, MSTP028, MSTP026, +       MSTP023, MSTP022, MSTP021, MSTP020, MSTP019, MSTP018, MSTP017, MSTP016, +       MSTP015, MSTP014, MSTP013, MSTP012, MSTP011, MSTP010, +       MSTP007, MSTP006, MSTP005, MSTP002, MSTP001, +       MSTP109, MSTP100, +       MSTP227, MSTP226, MSTP224, MSTP223, MSTP222, MSTP218, MSTP217, +       MSTP211, MSTP207, MSTP205, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200, +       MSTP_NR }; + +static struct clk mstp_clks[MSTP_NR] = {  	/* See page 52 of Datasheet V0.40: Overview -> Block Diagram */ -	MSTP("tlb0", &div4_clks[DIV4_I], MSTPCR0, 31, CLK_ENABLE_ON_INIT), -	MSTP("ic0", &div4_clks[DIV4_I], MSTPCR0, 30, CLK_ENABLE_ON_INIT), -	MSTP("oc0", &div4_clks[DIV4_I], MSTPCR0, 29, CLK_ENABLE_ON_INIT), -	MSTP("rsmem0", &div4_clks[DIV4_SH], MSTPCR0, 28, CLK_ENABLE_ON_INIT), -	MSTP("xymem0", &div4_clks[DIV4_B], MSTPCR0, 26, CLK_ENABLE_ON_INIT), -	MSTP("intc3", &div4_clks[DIV4_P], MSTPCR0, 23, 0), -	MSTP("intc0", &div4_clks[DIV4_P], MSTPCR0, 22, 0), -	MSTP("dmac0", &div4_clks[DIV4_P], MSTPCR0, 21, 0), -	MSTP("sh0", &div4_clks[DIV4_P], MSTPCR0, 20, 0), -	MSTP("hudi0", &div4_clks[DIV4_P], MSTPCR0, 19, 0), -	MSTP("ubc0", &div4_clks[DIV4_P], MSTPCR0, 17, 0), -	MSTP("tmu0", &div4_clks[DIV4_P], MSTPCR0, 15, 0), -	MSTP("cmt0", &r_clk, MSTPCR0, 14, 0), -	MSTP("rwdt0", &r_clk, MSTPCR0, 13, 0), -	MSTP("mfi0", &div4_clks[DIV4_P], MSTPCR0, 11, 0), -	MSTP("flctl0", &div4_clks[DIV4_P], MSTPCR0, 10, 0), -	MSTP("scif0", &div4_clks[DIV4_P], MSTPCR0, 7, 0), -	MSTP("scif1", &div4_clks[DIV4_P], MSTPCR0, 6, 0), -	MSTP("scif2", &div4_clks[DIV4_P], MSTPCR0, 5, 0), -	MSTP("msiof0", &div4_clks[DIV4_P], MSTPCR0, 2, 0), -	MSTP("sbr0", &div4_clks[DIV4_P], MSTPCR0, 1, 0), +	[MSTP031] = MSTP(&div4_clks[DIV4_I], MSTPCR0, 31, CLK_ENABLE_ON_INIT), +	[MSTP030] = MSTP(&div4_clks[DIV4_I], MSTPCR0, 30, CLK_ENABLE_ON_INIT), +	[MSTP029] = MSTP(&div4_clks[DIV4_I], MSTPCR0, 29, CLK_ENABLE_ON_INIT), +	[MSTP028] = MSTP(&div4_clks[DIV4_SH], MSTPCR0, 28, CLK_ENABLE_ON_INIT), +	[MSTP026] = MSTP(&div4_clks[DIV4_B], MSTPCR0, 26, CLK_ENABLE_ON_INIT), +	[MSTP023] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 23, 0), +	[MSTP022] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 22, 0), +	[MSTP021] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 21, 0), +	[MSTP020] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 20, 0), +	[MSTP019] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 19, 0), +	[MSTP017] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 17, 0), +	[MSTP015] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 15, 0), +	[MSTP014] = MSTP(&r_clk, MSTPCR0, 14, 0), +	[MSTP013] = MSTP(&r_clk, MSTPCR0, 13, 0), +	[MSTP011] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 11, 0), +	[MSTP010] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 10, 0), +	[MSTP007] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 7, 0), +	[MSTP006] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 6, 0), +	[MSTP005] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 5, 0), +	[MSTP002] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 2, 0), +	[MSTP001] = MSTP(&div4_clks[DIV4_P], MSTPCR0, 1, 0), -	MSTP("i2c0", &div4_clks[DIV4_P], MSTPCR1, 9, 0), +	[MSTP109] = MSTP(&div4_clks[DIV4_P], MSTPCR1, 9, 0), -	MSTP("icb0", &div4_clks[DIV4_P], MSTPCR2, 27, 0), -	MSTP("meram0", &div4_clks[DIV4_P], MSTPCR2, 26, 0), -	MSTP("dacy1", &div4_clks[DIV4_P], MSTPCR2, 24, 0), -	MSTP("dacy0", &div4_clks[DIV4_P], MSTPCR2, 23, 0), -	MSTP("tsif0", &div4_clks[DIV4_P], MSTPCR2, 22, 0), -	MSTP("sdhi0", &div4_clks[DIV4_P], MSTPCR2, 18, 0), -	MSTP("mmcif0", &div4_clks[DIV4_P], MSTPCR2, 17, 0), -	MSTP("usbf0", &div4_clks[DIV4_P], MSTPCR2, 11, 0), -	MSTP("siu0", &div4_clks[DIV4_B], MSTPCR2, 9, 0), -	MSTP("veu1", &div4_clks[DIV4_B], MSTPCR2, 7, CLK_ENABLE_ON_INIT), -	MSTP("vou0", &div4_clks[DIV4_B], MSTPCR2, 5, 0), -	MSTP("beu0", &div4_clks[DIV4_B], MSTPCR2, 4, 0), -	MSTP("ceu0", &div4_clks[DIV4_B], MSTPCR2, 3, 0), -	MSTP("veu0", &div4_clks[DIV4_B], MSTPCR2, 2, CLK_ENABLE_ON_INIT), -	MSTP("vpu0", &div4_clks[DIV4_B], MSTPCR2, 1, CLK_ENABLE_ON_INIT), -	MSTP("lcdc0", &div4_clks[DIV4_B], MSTPCR2, 0, 0), +	[MSTP227] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 27, 0), +	[MSTP226] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 26, 0), +	[MSTP224] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 24, 0), +	[MSTP223] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 23, 0), +	[MSTP222] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 22, 0), +	[MSTP218] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 18, 0), +	[MSTP217] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 17, 0), +	[MSTP211] = MSTP(&div4_clks[DIV4_P], MSTPCR2, 11, 0), +	[MSTP207] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 7, CLK_ENABLE_ON_INIT), +	[MSTP205] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 5, 0), +	[MSTP204] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 4, 0), +	[MSTP203] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 3, 0), +	[MSTP202] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 2, CLK_ENABLE_ON_INIT), +	[MSTP201] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 1, CLK_ENABLE_ON_INIT), +	[MSTP200] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 0, 0), +}; + +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("rclk", &r_clk), +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("dll_clk", &dll_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), + +	/* DIV4 clocks */ +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), +	CLKDEV_CON_ID("umem_clk", &div4_clks[DIV4_U]), +	CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_SH]), +	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), +	CLKDEV_CON_ID("b3_clk", &div4_clks[DIV4_B3]), +	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), +	CLKDEV_CON_ID("siua_clk", &div4_clks[DIV4_SIUA]), +	CLKDEV_CON_ID("siub_clk", &div4_clks[DIV4_SIUB]), + +	/* DIV6 clocks */ +	CLKDEV_CON_ID("video_clk", &div6_clks[DIV6_V]), + +	/* MSTP32 clocks */ +	CLKDEV_CON_ID("tlb0", &mstp_clks[MSTP031]), +	CLKDEV_CON_ID("ic0", &mstp_clks[MSTP030]), +	CLKDEV_CON_ID("oc0", &mstp_clks[MSTP029]), +	CLKDEV_CON_ID("rsmem0", &mstp_clks[MSTP028]), +	CLKDEV_CON_ID("xymem0", &mstp_clks[MSTP026]), +	CLKDEV_CON_ID("intc3", &mstp_clks[MSTP023]), +	CLKDEV_CON_ID("intc0", &mstp_clks[MSTP022]), +	CLKDEV_CON_ID("dmac0", &mstp_clks[MSTP021]), +	CLKDEV_CON_ID("sh0", &mstp_clks[MSTP020]), +	CLKDEV_CON_ID("hudi0", &mstp_clks[MSTP019]), +	CLKDEV_CON_ID("ubc0", &mstp_clks[MSTP017]), +	CLKDEV_CON_ID("tmu_fck", &mstp_clks[MSTP015]), +	CLKDEV_CON_ID("cmt_fck", &mstp_clks[MSTP014]), +	CLKDEV_CON_ID("rwdt0", &mstp_clks[MSTP013]), +	CLKDEV_CON_ID("mfi0", &mstp_clks[MSTP011]), +	CLKDEV_CON_ID("flctl0", &mstp_clks[MSTP010]), +	{ +		/* SCIF0 */ +		.dev_id		= "sh-sci.0", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP007], +	}, { +		/* SCIF1 */ +		.dev_id		= "sh-sci.1", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP006], +	}, { +		/* SCIF2 */ +		.dev_id		= "sh-sci.2", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP005], +	}, +	CLKDEV_CON_ID("msiof0", &mstp_clks[MSTP002]), +	CLKDEV_CON_ID("sbr0", &mstp_clks[MSTP001]), +	CLKDEV_CON_ID("i2c0", &mstp_clks[MSTP109]), +	CLKDEV_CON_ID("icb0", &mstp_clks[MSTP227]), +	CLKDEV_CON_ID("meram0", &mstp_clks[MSTP226]), +	CLKDEV_CON_ID("dacy1", &mstp_clks[MSTP224]), +	CLKDEV_CON_ID("dacy0", &mstp_clks[MSTP223]), +	CLKDEV_CON_ID("tsif0", &mstp_clks[MSTP222]), +	CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP218]), +	CLKDEV_CON_ID("mmcif0", &mstp_clks[MSTP217]), +	CLKDEV_CON_ID("usbf0", &mstp_clks[MSTP211]), +	CLKDEV_CON_ID("veu1", &mstp_clks[MSTP207]), +	CLKDEV_CON_ID("vou0", &mstp_clks[MSTP205]), +	CLKDEV_CON_ID("beu0", &mstp_clks[MSTP204]), +	CLKDEV_CON_ID("ceu0", &mstp_clks[MSTP203]), +	CLKDEV_CON_ID("veu0", &mstp_clks[MSTP202]), +	CLKDEV_CON_ID("vpu0", &mstp_clks[MSTP201]), +	CLKDEV_CON_ID("lcdc0", &mstp_clks[MSTP200]),  };  int __init arch_clk_init(void) @@ -198,14 +280,16 @@ int __init arch_clk_init(void)  	for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++)  		ret = clk_register(main_clks[k]); +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); +  	if (!ret)  		ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);  	if (!ret) -		ret = sh_clk_div6_register(div6_clks, ARRAY_SIZE(div6_clks)); +		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_clk_mstp32_register(mstp_clks, ARRAY_SIZE(mstp_clks)); +		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c index ea38b554dc0..2030f3d9fac 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c @@ -21,6 +21,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/hwblk.h>  #include <cpu/sh7722.h> @@ -36,8 +37,6 @@  /* Fixed 32 KHz root clock for RTC and Power Management purposes */  static struct clk r_clk = { -	.name           = "rclk", -	.id             = -1,  	.rate           = 32768,  }; @@ -46,8 +45,6 @@ static struct clk r_clk = {   * from the platform code.   */  struct clk extal_clk = { -	.name		= "extal", -	.id		= -1,  	.rate		= 33333333,  }; @@ -69,8 +66,6 @@ static struct clk_ops dll_clk_ops = {  };  static struct clk dll_clk = { -	.name           = "dll_clk", -	.id             = -1,  	.ops		= &dll_clk_ops,  	.parent		= &r_clk,  	.flags		= CLK_ENABLE_ON_INIT, @@ -94,8 +89,6 @@ static struct clk_ops pll_clk_ops = {  };  static struct clk pll_clk = { -	.name		= "pll_clk", -	.id		= -1,  	.ops		= &pll_clk_ops,  	.flags		= CLK_ENABLE_ON_INIT,  }; @@ -110,66 +103,153 @@ struct clk *main_clks[] = {  static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 };  static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 }; -static struct clk_div_mult_table div4_table = { +static struct clk_div_mult_table div4_div_mult_table = {  	.divisors = divisors,  	.nr_divisors = ARRAY_SIZE(divisors),  	.multipliers = multipliers,  	.nr_multipliers = ARRAY_SIZE(multipliers),  }; -enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P, -       DIV4_SIUA, DIV4_SIUB, DIV4_IRDA, DIV4_NR }; +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table, +}; + +#define DIV4(_reg, _bit, _mask, _flags) \ +  SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags) -#define DIV4(_str, _reg, _bit, _mask, _flags) \ -  SH_CLK_DIV4(_str, &pll_clk, _reg, _bit, _mask, _flags) +enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P, DIV4_NR };  struct clk div4_clks[DIV4_NR] = { -	[DIV4_I] = DIV4("cpu_clk", FRQCR, 20, 0x1fef, CLK_ENABLE_ON_INIT), -	[DIV4_U] = DIV4("umem_clk", FRQCR, 16, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_SH] = DIV4("shyway_clk", FRQCR, 12, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_B] = DIV4("bus_clk", FRQCR, 8, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_B3] = DIV4("b3_clk", FRQCR, 4, 0x1fff, CLK_ENABLE_ON_INIT), -	[DIV4_P] = DIV4("peripheral_clk", FRQCR, 0, 0x1fff, 0), -	[DIV4_SIUA] = DIV4("siua_clk", SCLKACR, 0, 0x1fff, 0), -	[DIV4_SIUB] = DIV4("siub_clk", SCLKBCR, 0, 0x1fff, 0), -	[DIV4_IRDA] = DIV4("irda_clk", IRDACLKCR, 0, 0x1fff, 0), +	[DIV4_I] = DIV4(FRQCR, 20, 0x1fef, CLK_ENABLE_ON_INIT), +	[DIV4_U] = DIV4(FRQCR, 16, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_SH] = DIV4(FRQCR, 12, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_B] = DIV4(FRQCR, 8, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_B3] = DIV4(FRQCR, 4, 0x1fff, CLK_ENABLE_ON_INIT), +	[DIV4_P] = DIV4(FRQCR, 0, 0x1fff, 0), +}; + +enum { DIV4_IRDA, DIV4_ENABLE_NR }; + +struct clk div4_enable_clks[DIV4_ENABLE_NR] = { +	[DIV4_IRDA] = DIV4(IRDACLKCR, 0, 0x1fff, 0),  }; -struct clk div6_clks[] = { -	SH_CLK_DIV6("video_clk", &pll_clk, VCLKCR, 0), +enum { DIV4_SIUA, DIV4_SIUB, DIV4_REPARENT_NR }; + +struct clk div4_reparent_clks[DIV4_REPARENT_NR] = { +	[DIV4_SIUA] = DIV4(SCLKACR, 0, 0x1fff, 0), +	[DIV4_SIUB] = DIV4(SCLKBCR, 0, 0x1fff, 0),  }; -#define R_CLK &r_clk -#define P_CLK &div4_clks[DIV4_P] -#define B_CLK &div4_clks[DIV4_B] -#define U_CLK &div4_clks[DIV4_U] +enum { DIV6_V, DIV6_NR }; + +struct clk div6_clks[DIV6_NR] = { +	[DIV6_V] = SH_CLK_DIV6(&pll_clk, VCLKCR, 0), +}; -static struct clk mstp_clks[] = { -	SH_HWBLK_CLK("uram0", -1, U_CLK, HWBLK_URAM, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("xymem0", -1, B_CLK, HWBLK_XYMEM, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("tmu0", -1, P_CLK, HWBLK_TMU, 0), -	SH_HWBLK_CLK("cmt0", -1, R_CLK, HWBLK_CMT, 0), -	SH_HWBLK_CLK("rwdt0", -1, R_CLK, HWBLK_RWDT, 0), -	SH_HWBLK_CLK("flctl0", -1, P_CLK, HWBLK_FLCTL, 0), -	SH_HWBLK_CLK("scif0", -1, P_CLK, HWBLK_SCIF0, 0), -	SH_HWBLK_CLK("scif1", -1, P_CLK, HWBLK_SCIF1, 0), -	SH_HWBLK_CLK("scif2", -1, P_CLK, HWBLK_SCIF2, 0), +static struct clk mstp_clks[HWBLK_NR] = { +	SH_HWBLK_CLK(HWBLK_URAM, &div4_clks[DIV4_U], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_XYMEM, &div4_clks[DIV4_B], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_TMU, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_CMT, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_RWDT, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_FLCTL, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF0, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF1, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF2, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK("i2c0", -1, P_CLK, HWBLK_IIC, 0), -	SH_HWBLK_CLK("rtc0", -1, R_CLK, HWBLK_RTC, 0), +	SH_HWBLK_CLK(HWBLK_IIC, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_RTC, &r_clk, 0), -	SH_HWBLK_CLK("sdhi0", -1, P_CLK, HWBLK_SDHI, 0), -	SH_HWBLK_CLK("keysc0", -1, R_CLK, HWBLK_KEYSC, 0), -	SH_HWBLK_CLK("usbf0", -1, P_CLK, HWBLK_USBF, 0), -	SH_HWBLK_CLK("2dg0", -1, B_CLK, HWBLK_2DG, 0), -	SH_HWBLK_CLK("siu0", -1, B_CLK, HWBLK_SIU, 0), -	SH_HWBLK_CLK("vou0", -1, B_CLK, HWBLK_VOU, 0), -	SH_HWBLK_CLK("jpu0", -1, B_CLK, HWBLK_JPU, 0), -	SH_HWBLK_CLK("beu0", -1, B_CLK, HWBLK_BEU, 0), -	SH_HWBLK_CLK("ceu0", -1, B_CLK, HWBLK_CEU, 0), -	SH_HWBLK_CLK("veu0", -1, B_CLK, HWBLK_VEU, 0), -	SH_HWBLK_CLK("vpu0", -1, B_CLK, HWBLK_VPU, 0), -	SH_HWBLK_CLK("lcdc0", -1, P_CLK, HWBLK_LCDC, 0), +	SH_HWBLK_CLK(HWBLK_SDHI, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_KEYSC, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_USBF, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_2DG, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SIU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VOU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_JPU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_BEU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_CEU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VEU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VPU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_LCDC, &div4_clks[DIV4_P], 0), +}; + +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("rclk", &r_clk), +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("dll_clk", &dll_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), + +	/* DIV4 clocks */ +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), +	CLKDEV_CON_ID("umem_clk", &div4_clks[DIV4_U]), +	CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_SH]), +	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), +	CLKDEV_CON_ID("b3_clk", &div4_clks[DIV4_B3]), +	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), +	CLKDEV_CON_ID("irda_clk", &div4_enable_clks[DIV4_IRDA]), +	CLKDEV_CON_ID("siua_clk", &div4_reparent_clks[DIV4_SIUA]), +	CLKDEV_CON_ID("siub_clk", &div4_reparent_clks[DIV4_SIUB]), + +	/* DIV6 clocks */ +	CLKDEV_CON_ID("video_clk", &div6_clks[DIV6_V]), + +	/* MSTP clocks */ +	CLKDEV_CON_ID("uram0", &mstp_clks[HWBLK_URAM]), +	CLKDEV_CON_ID("xymem0", &mstp_clks[HWBLK_XYMEM]), +	{ +		/* TMU0 */ +		.dev_id		= "sh_tmu.0", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU], +	}, { +		/* TMU1 */ +		.dev_id		= "sh_tmu.1", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU], +	}, { +		/* TMU2 */ +		.dev_id		= "sh_tmu.2", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU], +	}, +	CLKDEV_CON_ID("cmt_fck", &mstp_clks[HWBLK_CMT]), +	CLKDEV_CON_ID("rwdt0", &mstp_clks[HWBLK_RWDT]), +	CLKDEV_CON_ID("flctl0", &mstp_clks[HWBLK_FLCTL]), +	{ +		/* SCIF0 */ +		.dev_id		= "sh-sci.0", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF0], +	}, { +		/* SCIF1 */ +		.dev_id		= "sh-sci.1", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF1], +	}, { +		/* SCIF2 */ +		.dev_id		= "sh-sci.2", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF2], +	}, +	CLKDEV_CON_ID("i2c0", &mstp_clks[HWBLK_IIC]), +	CLKDEV_CON_ID("rtc0", &mstp_clks[HWBLK_RTC]), +	CLKDEV_CON_ID("sdhi0", &mstp_clks[HWBLK_SDHI]), +	CLKDEV_CON_ID("keysc0", &mstp_clks[HWBLK_KEYSC]), +	CLKDEV_CON_ID("usbf0", &mstp_clks[HWBLK_USBF]), +	CLKDEV_CON_ID("2dg0", &mstp_clks[HWBLK_2DG]), +	CLKDEV_CON_ID("siu0", &mstp_clks[HWBLK_SIU]), +	CLKDEV_CON_ID("vou0", &mstp_clks[HWBLK_VOU]), +	CLKDEV_CON_ID("jpu0", &mstp_clks[HWBLK_JPU]), +	CLKDEV_CON_ID("beu0", &mstp_clks[HWBLK_BEU]), +	CLKDEV_CON_ID("ceu0", &mstp_clks[HWBLK_CEU]), +	CLKDEV_CON_ID("veu0", &mstp_clks[HWBLK_VEU]), +	CLKDEV_CON_ID("vpu0", &mstp_clks[HWBLK_VPU]), +	CLKDEV_CON_ID("lcdc0", &mstp_clks[HWBLK_LCDC]),  };  int __init arch_clk_init(void) @@ -185,14 +265,24 @@ int __init arch_clk_init(void)  	for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++)  		ret = clk_register(main_clks[k]); +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); +  	if (!ret)  		ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);  	if (!ret) -		ret = sh_clk_div6_register(div6_clks, ARRAY_SIZE(div6_clks)); +		ret = sh_clk_div4_enable_register(div4_enable_clks, +					DIV4_ENABLE_NR, &div4_table); + +	if (!ret) +		ret = sh_clk_div4_reparent_register(div4_reparent_clks, +					DIV4_REPARENT_NR, &div4_table); + +	if (!ret) +		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_hwblk_clk_register(mstp_clks, ARRAY_SIZE(mstp_clks)); +		ret = sh_hwblk_clk_register(mstp_clks, HWBLK_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7723.c b/arch/sh/kernel/cpu/sh4a/clock-sh7723.c index 20a31c2255a..d3938f0d370 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7723.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7723.c @@ -21,6 +21,8 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> +#include <linux/clk.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/hwblk.h>  #include <cpu/sh7723.h> @@ -36,8 +38,6 @@  /* Fixed 32 KHz root clock for RTC and Power Management purposes */  static struct clk r_clk = { -	.name           = "rclk", -	.id             = -1,  	.rate           = 32768,  }; @@ -46,8 +46,6 @@ static struct clk r_clk = {   * from the platform code.   */  struct clk extal_clk = { -	.name		= "extal", -	.id		= -1,  	.rate		= 33333333,  }; @@ -69,8 +67,6 @@ static struct clk_ops dll_clk_ops = {  };  static struct clk dll_clk = { -	.name           = "dll_clk", -	.id             = -1,  	.ops		= &dll_clk_ops,  	.parent		= &r_clk,  	.flags		= CLK_ENABLE_ON_INIT, @@ -94,8 +90,6 @@ static struct clk_ops pll_clk_ops = {  };  static struct clk pll_clk = { -	.name		= "pll_clk", -	.id		= -1,  	.ops		= &pll_clk_ops,  	.flags		= CLK_ENABLE_ON_INIT,  }; @@ -110,93 +104,228 @@ struct clk *main_clks[] = {  static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 };  static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 }; -static struct clk_div_mult_table div4_table = { +static struct clk_div_mult_table div4_div_mult_table = {  	.divisors = divisors,  	.nr_divisors = ARRAY_SIZE(divisors),  	.multipliers = multipliers,  	.nr_multipliers = ARRAY_SIZE(multipliers),  }; -enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P, -       DIV4_SIUA, DIV4_SIUB, DIV4_IRDA, DIV4_NR }; +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table, +}; + +enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P, DIV4_NR }; -#define DIV4(_str, _reg, _bit, _mask, _flags) \ -  SH_CLK_DIV4(_str, &pll_clk, _reg, _bit, _mask, _flags) +#define DIV4(_reg, _bit, _mask, _flags) \ +  SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags)  struct clk div4_clks[DIV4_NR] = { -	[DIV4_I] = DIV4("cpu_clk", FRQCR, 20, 0x0dbf, CLK_ENABLE_ON_INIT), -	[DIV4_U] = DIV4("umem_clk", FRQCR, 16, 0x0dbf, CLK_ENABLE_ON_INIT), -	[DIV4_SH] = DIV4("shyway_clk", FRQCR, 12, 0x0dbf, CLK_ENABLE_ON_INIT), -	[DIV4_B] = DIV4("bus_clk", FRQCR, 8, 0x0dbf, CLK_ENABLE_ON_INIT), -	[DIV4_B3] = DIV4("b3_clk", FRQCR, 4, 0x0db4, CLK_ENABLE_ON_INIT), -	[DIV4_P] = DIV4("peripheral_clk", FRQCR, 0, 0x0dbf, 0), -	[DIV4_SIUA] = DIV4("siua_clk", SCLKACR, 0, 0x0dbf, 0), -	[DIV4_SIUB] = DIV4("siub_clk", SCLKBCR, 0, 0x0dbf, 0), -	[DIV4_IRDA] = DIV4("irda_clk", IRDACLKCR, 0, 0x0dbf, 0), +	[DIV4_I] = DIV4(FRQCR, 20, 0x0dbf, CLK_ENABLE_ON_INIT), +	[DIV4_U] = DIV4(FRQCR, 16, 0x0dbf, CLK_ENABLE_ON_INIT), +	[DIV4_SH] = DIV4(FRQCR, 12, 0x0dbf, CLK_ENABLE_ON_INIT), +	[DIV4_B] = DIV4(FRQCR, 8, 0x0dbf, CLK_ENABLE_ON_INIT), +	[DIV4_B3] = DIV4(FRQCR, 4, 0x0db4, CLK_ENABLE_ON_INIT), +	[DIV4_P] = DIV4(FRQCR, 0, 0x0dbf, 0),  }; -struct clk div6_clks[] = { -	SH_CLK_DIV6("video_clk", &pll_clk, VCLKCR, 0), +enum { DIV4_IRDA, DIV4_ENABLE_NR }; + +struct clk div4_enable_clks[DIV4_ENABLE_NR] = { +	[DIV4_IRDA] = DIV4(IRDACLKCR, 0, 0x0dbf, 0),  }; -#define R_CLK (&r_clk) -#define P_CLK (&div4_clks[DIV4_P]) -#define B_CLK (&div4_clks[DIV4_B]) -#define U_CLK (&div4_clks[DIV4_U]) -#define I_CLK (&div4_clks[DIV4_I]) -#define SH_CLK (&div4_clks[DIV4_SH]) +enum { DIV4_SIUA, DIV4_SIUB, DIV4_REPARENT_NR }; + +struct clk div4_reparent_clks[DIV4_REPARENT_NR] = { +	[DIV4_SIUA] = DIV4(SCLKACR, 0, 0x0dbf, 0), +	[DIV4_SIUB] = DIV4(SCLKBCR, 0, 0x0dbf, 0), +}; +enum { DIV6_V, DIV6_NR }; + +struct clk div6_clks[DIV6_NR] = { +	[DIV6_V] = SH_CLK_DIV6(&pll_clk, VCLKCR, 0), +};  static struct clk mstp_clks[] = {  	/* See page 60 of Datasheet V1.0: Overview -> Block Diagram */ -	SH_HWBLK_CLK("tlb0", -1, I_CLK, HWBLK_TLB, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("ic0", -1, I_CLK, HWBLK_IC, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("oc0", -1, I_CLK, HWBLK_OC, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("l2c0", -1, SH_CLK, HWBLK_L2C, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("ilmem0", -1, I_CLK, HWBLK_ILMEM, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("fpu0", -1, I_CLK, HWBLK_FPU, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("intc0", -1, I_CLK, HWBLK_INTC, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("dmac0", -1, B_CLK, HWBLK_DMAC0, 0), -	SH_HWBLK_CLK("sh0", -1, SH_CLK, HWBLK_SHYWAY, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("hudi0", -1, P_CLK, HWBLK_HUDI, 0), -	SH_HWBLK_CLK("ubc0", -1, I_CLK, HWBLK_UBC, 0), -	SH_HWBLK_CLK("tmu0", -1, P_CLK, HWBLK_TMU0, 0), -	SH_HWBLK_CLK("cmt0", -1, R_CLK, HWBLK_CMT, 0), -	SH_HWBLK_CLK("rwdt0", -1, R_CLK, HWBLK_RWDT, 0), -	SH_HWBLK_CLK("dmac1", -1, B_CLK, HWBLK_DMAC1, 0), -	SH_HWBLK_CLK("tmu1", -1, P_CLK, HWBLK_TMU1, 0), -	SH_HWBLK_CLK("flctl0", -1, P_CLK, HWBLK_FLCTL, 0), -	SH_HWBLK_CLK("scif0", -1, P_CLK, HWBLK_SCIF0, 0), -	SH_HWBLK_CLK("scif1", -1, P_CLK, HWBLK_SCIF1, 0), -	SH_HWBLK_CLK("scif2", -1, P_CLK, HWBLK_SCIF2, 0), -	SH_HWBLK_CLK("scif3", -1, B_CLK, HWBLK_SCIF3, 0), -	SH_HWBLK_CLK("scif4", -1, B_CLK, HWBLK_SCIF4, 0), -	SH_HWBLK_CLK("scif5", -1, B_CLK, HWBLK_SCIF5, 0), -	SH_HWBLK_CLK("msiof0", -1, B_CLK, HWBLK_MSIOF0, 0), -	SH_HWBLK_CLK("msiof1", -1, B_CLK, HWBLK_MSIOF1, 0), -	SH_HWBLK_CLK("meram0", -1, SH_CLK, HWBLK_MERAM, 0), +	SH_HWBLK_CLK(HWBLK_TLB, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_IC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_OC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_L2C, &div4_clks[DIV4_SH], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_ILMEM, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_FPU, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_INTC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_DMAC0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SHYWAY, &div4_clks[DIV4_SH], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_HUDI, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_UBC, &div4_clks[DIV4_I], 0), +	SH_HWBLK_CLK(HWBLK_TMU0, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_CMT, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_RWDT, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_DMAC1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_TMU1, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_FLCTL, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF0, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF1, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF2, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF3, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SCIF4, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SCIF5, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_MSIOF0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_MSIOF1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_MERAM, &div4_clks[DIV4_SH], 0), + +	SH_HWBLK_CLK(HWBLK_IIC, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_RTC, &r_clk, 0), + +	SH_HWBLK_CLK(HWBLK_ATAPI, &div4_clks[DIV4_SH], 0), +	SH_HWBLK_CLK(HWBLK_ADC, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_TPU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_IRDA, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_TSIF, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_ICB, &div4_clks[DIV4_B], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_SDHI0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SDHI1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_KEYSC, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_USB, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_2DG, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SIU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VEU2H1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VOU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_BEU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_CEU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VEU2H0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VPU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_LCDC, &div4_clks[DIV4_B], 0), +}; + +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("rclk", &r_clk), +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("dll_clk", &dll_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), -	SH_HWBLK_CLK("i2c0", -1, P_CLK, HWBLK_IIC, 0), -	SH_HWBLK_CLK("rtc0", -1, R_CLK, HWBLK_RTC, 0), +	/* DIV4 clocks */ +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), +	CLKDEV_CON_ID("umem_clk", &div4_clks[DIV4_U]), +	CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_SH]), +	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), +	CLKDEV_CON_ID("b3_clk", &div4_clks[DIV4_B3]), +	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), +	CLKDEV_CON_ID("irda_clk", &div4_enable_clks[DIV4_IRDA]), +	CLKDEV_CON_ID("siua_clk", &div4_reparent_clks[DIV4_SIUA]), +	CLKDEV_CON_ID("siub_clk", &div4_reparent_clks[DIV4_SIUB]), -	SH_HWBLK_CLK("atapi0", -1, SH_CLK, HWBLK_ATAPI, 0), -	SH_HWBLK_CLK("adc0", -1, P_CLK, HWBLK_ADC, 0), -	SH_HWBLK_CLK("tpu0", -1, B_CLK, HWBLK_TPU, 0), -	SH_HWBLK_CLK("irda0", -1, P_CLK, HWBLK_IRDA, 0), -	SH_HWBLK_CLK("tsif0", -1, B_CLK, HWBLK_TSIF, 0), -	SH_HWBLK_CLK("icb0", -1, B_CLK, HWBLK_ICB, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("sdhi0", -1, B_CLK, HWBLK_SDHI0, 0), -	SH_HWBLK_CLK("sdhi1", -1, B_CLK, HWBLK_SDHI1, 0), -	SH_HWBLK_CLK("keysc0", -1, R_CLK, HWBLK_KEYSC, 0), -	SH_HWBLK_CLK("usb0", -1, B_CLK, HWBLK_USB, 0), -	SH_HWBLK_CLK("2dg0", -1, B_CLK, HWBLK_2DG, 0), -	SH_HWBLK_CLK("siu0", -1, B_CLK, HWBLK_SIU, 0), -	SH_HWBLK_CLK("veu1", -1, B_CLK, HWBLK_VEU2H1, 0), -	SH_HWBLK_CLK("vou0", -1, B_CLK, HWBLK_VOU, 0), -	SH_HWBLK_CLK("beu0", -1, B_CLK, HWBLK_BEU, 0), -	SH_HWBLK_CLK("ceu0", -1, B_CLK, HWBLK_CEU, 0), -	SH_HWBLK_CLK("veu0", -1, B_CLK, HWBLK_VEU2H0, 0), -	SH_HWBLK_CLK("vpu0", -1, B_CLK, HWBLK_VPU, 0), -	SH_HWBLK_CLK("lcdc0", -1, B_CLK, HWBLK_LCDC, 0), +	/* DIV6 clocks */ +	CLKDEV_CON_ID("video_clk", &div6_clks[DIV6_V]), + +	/* MSTP clocks */ +	CLKDEV_CON_ID("tlb0", &mstp_clks[HWBLK_TLB]), +	CLKDEV_CON_ID("ic0", &mstp_clks[HWBLK_IC]), +	CLKDEV_CON_ID("oc0", &mstp_clks[HWBLK_OC]), +	CLKDEV_CON_ID("l2c0", &mstp_clks[HWBLK_L2C]), +	CLKDEV_CON_ID("ilmem0", &mstp_clks[HWBLK_ILMEM]), +	CLKDEV_CON_ID("fpu0", &mstp_clks[HWBLK_FPU]), +	CLKDEV_CON_ID("intc0", &mstp_clks[HWBLK_INTC]), +	CLKDEV_CON_ID("dmac0", &mstp_clks[HWBLK_DMAC0]), +	CLKDEV_CON_ID("sh0", &mstp_clks[HWBLK_SHYWAY]), +	CLKDEV_CON_ID("hudi0", &mstp_clks[HWBLK_HUDI]), +	CLKDEV_CON_ID("ubc0", &mstp_clks[HWBLK_UBC]), +	{ +		/* TMU0 */ +		.dev_id		= "sh_tmu.0", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU0], +	}, { +		/* TMU1 */ +		.dev_id		= "sh_tmu.1", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU0], +	}, { +		/* TMU2 */ +		.dev_id		= "sh_tmu.2", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU0], +	}, +	CLKDEV_CON_ID("cmt_fck", &mstp_clks[HWBLK_CMT]), +	CLKDEV_CON_ID("rwdt0", &mstp_clks[HWBLK_RWDT]), +	CLKDEV_CON_ID("dmac1", &mstp_clks[HWBLK_DMAC1]), +	{ +		/* TMU3 */ +		.dev_id		= "sh_tmu.3", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU1], +	}, { +		/* TMU4 */ +		.dev_id		= "sh_tmu.4", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU1], +	}, { +		/* TMU5 */ +		.dev_id		= "sh_tmu.5", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU1], +	}, +	CLKDEV_CON_ID("flctl0", &mstp_clks[HWBLK_FLCTL]), +	{ +		/* SCIF0 */ +		.dev_id		= "sh-sci.0", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF0], +	}, { +		/* SCIF1 */ +		.dev_id		= "sh-sci.1", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF1], +	}, { +		/* SCIF2 */ +		.dev_id		= "sh-sci.2", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF2], +	}, { +		/* SCIF3 */ +		.dev_id		= "sh-sci.3", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF3], +	}, { +		/* SCIF4 */ +		.dev_id		= "sh-sci.4", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF4], +	}, { +		/* SCIF5 */ +		.dev_id		= "sh-sci.5", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF5], +	}, +	CLKDEV_CON_ID("msiof0", &mstp_clks[HWBLK_MSIOF0]), +	CLKDEV_CON_ID("msiof1", &mstp_clks[HWBLK_MSIOF1]), +	CLKDEV_CON_ID("meram0", &mstp_clks[HWBLK_MERAM]), +	CLKDEV_CON_ID("i2c0", &mstp_clks[HWBLK_IIC]), +	CLKDEV_CON_ID("rtc0", &mstp_clks[HWBLK_RTC]), +	CLKDEV_CON_ID("atapi0", &mstp_clks[HWBLK_ATAPI]), +	CLKDEV_CON_ID("adc0", &mstp_clks[HWBLK_ADC]), +	CLKDEV_CON_ID("tpu0", &mstp_clks[HWBLK_TPU]), +	CLKDEV_CON_ID("irda0", &mstp_clks[HWBLK_IRDA]), +	CLKDEV_CON_ID("tsif0", &mstp_clks[HWBLK_TSIF]), +	CLKDEV_CON_ID("icb0", &mstp_clks[HWBLK_ICB]), +	CLKDEV_CON_ID("sdhi0", &mstp_clks[HWBLK_SDHI0]), +	CLKDEV_CON_ID("sdhi1", &mstp_clks[HWBLK_SDHI1]), +	CLKDEV_CON_ID("keysc0", &mstp_clks[HWBLK_KEYSC]), +	CLKDEV_CON_ID("usb0", &mstp_clks[HWBLK_USB]), +	CLKDEV_CON_ID("2dg0", &mstp_clks[HWBLK_2DG]), +	CLKDEV_CON_ID("siu0", &mstp_clks[HWBLK_SIU]), +	CLKDEV_CON_ID("veu1", &mstp_clks[HWBLK_VEU2H1]), +	CLKDEV_CON_ID("vou0", &mstp_clks[HWBLK_VOU]), +	CLKDEV_CON_ID("beu0", &mstp_clks[HWBLK_BEU]), +	CLKDEV_CON_ID("ceu0", &mstp_clks[HWBLK_CEU]), +	CLKDEV_CON_ID("veu0", &mstp_clks[HWBLK_VEU2H0]), +	CLKDEV_CON_ID("vpu0", &mstp_clks[HWBLK_VPU]), +	CLKDEV_CON_ID("lcdc0", &mstp_clks[HWBLK_LCDC]),  };  int __init arch_clk_init(void) @@ -210,16 +339,26 @@ int __init arch_clk_init(void)  		pll_clk.parent = &extal_clk;  	for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) -		ret = clk_register(main_clks[k]); +		ret |= clk_register(main_clks[k]); + +	clkdev_add_table(lookups, ARRAY_SIZE(lookups));  	if (!ret)  		ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);  	if (!ret) -		ret = sh_clk_div6_register(div6_clks, ARRAY_SIZE(div6_clks)); +		ret = sh_clk_div4_enable_register(div4_enable_clks, +					DIV4_ENABLE_NR, &div4_table); + +	if (!ret) +		ret = sh_clk_div4_reparent_register(div4_reparent_clks, +					DIV4_REPARENT_NR, &div4_table); + +	if (!ret) +		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_hwblk_clk_register(mstp_clks, ARRAY_SIZE(mstp_clks)); +		ret = sh_hwblk_clk_register(mstp_clks, HWBLK_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7724.c b/arch/sh/kernel/cpu/sh4a/clock-sh7724.c index 9db743802f0..2d9700c6b53 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7724.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7724.c @@ -21,6 +21,8 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> +#include <linux/clk.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/hwblk.h>  #include <cpu/sh7724.h> @@ -39,8 +41,6 @@  /* Fixed 32 KHz root clock for RTC and Power Management purposes */  static struct clk r_clk = { -	.name           = "rclk", -	.id             = -1,  	.rate           = 32768,  }; @@ -49,8 +49,6 @@ static struct clk r_clk = {   * from the platform code.   */  struct clk extal_clk = { -	.name		= "extal", -	.id		= -1,  	.rate		= 33333333,  }; @@ -74,8 +72,6 @@ static struct clk_ops fll_clk_ops = {  };  static struct clk fll_clk = { -	.name           = "fll_clk", -	.id             = -1,  	.ops		= &fll_clk_ops,  	.parent		= &r_clk,  	.flags		= CLK_ENABLE_ON_INIT, @@ -96,8 +92,6 @@ static struct clk_ops pll_clk_ops = {  };  static struct clk pll_clk = { -	.name		= "pll_clk", -	.id		= -1,  	.ops		= &pll_clk_ops,  	.flags		= CLK_ENABLE_ON_INIT,  }; @@ -113,8 +107,6 @@ static struct clk_ops div3_clk_ops = {  };  static struct clk div3_clk = { -	.name		= "div3_clk", -	.id		= -1,  	.ops		= &div3_clk_ops,  	.parent		= &pll_clk,  }; @@ -127,95 +119,239 @@ struct clk *main_clks[] = {  	&div3_clk,  }; +static void div4_kick(struct clk *clk) +{ +	unsigned long value; + +	/* set KICK bit in FRQCRA to update hardware setting */ +	value = __raw_readl(FRQCRA); +	value |= (1 << 31); +	__raw_writel(value, FRQCRA); +} +  static int divisors[] = { 2, 3, 4, 6, 8, 12, 16, 0, 24, 32, 36, 48, 0, 72 }; -static struct clk_div_mult_table div4_table = { +static struct clk_div_mult_table div4_div_mult_table = {  	.divisors = divisors,  	.nr_divisors = ARRAY_SIZE(divisors),  }; +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table, +	.kick = div4_kick, +}; +  enum { DIV4_I, DIV4_SH, DIV4_B, DIV4_P, DIV4_M1, DIV4_NR }; -#define DIV4(_str, _reg, _bit, _mask, _flags) \ -  SH_CLK_DIV4(_str, &pll_clk, _reg, _bit, _mask, _flags) +#define DIV4(_reg, _bit, _mask, _flags) \ +  SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags)  struct clk div4_clks[DIV4_NR] = { -	[DIV4_I] = DIV4("cpu_clk", FRQCRA, 20, 0x2f7d, CLK_ENABLE_ON_INIT), -	[DIV4_SH] = DIV4("shyway_clk", FRQCRA, 12, 0x2f7c, CLK_ENABLE_ON_INIT), -	[DIV4_B] = DIV4("bus_clk", FRQCRA, 8, 0x2f7c, CLK_ENABLE_ON_INIT), -	[DIV4_P] = DIV4("peripheral_clk", FRQCRA, 0, 0x2f7c, 0), -	[DIV4_M1] = DIV4("vpu_clk", FRQCRB, 4, 0x2f7c, 0), +	[DIV4_I] = DIV4(FRQCRA, 20, 0x2f7d, CLK_ENABLE_ON_INIT), +	[DIV4_SH] = DIV4(FRQCRA, 12, 0x2f7c, CLK_ENABLE_ON_INIT), +	[DIV4_B] = DIV4(FRQCRA, 8, 0x2f7c, CLK_ENABLE_ON_INIT), +	[DIV4_P] = DIV4(FRQCRA, 0, 0x2f7c, 0), +	[DIV4_M1] = DIV4(FRQCRB, 4, 0x2f7c, CLK_ENABLE_ON_INIT),  }; -struct clk div6_clks[] = { -	SH_CLK_DIV6("video_clk", &div3_clk, VCLKCR, 0), -	SH_CLK_DIV6("fsia_clk", &div3_clk, FCLKACR, 0), -	SH_CLK_DIV6("fsib_clk", &div3_clk, FCLKBCR, 0), -	SH_CLK_DIV6("irda_clk", &div3_clk, IRDACLKCR, 0), -	SH_CLK_DIV6("spu_clk", &div3_clk, SPUCLKCR, CLK_ENABLE_ON_INIT), +enum { DIV6_V, DIV6_FA, DIV6_FB, DIV6_I, DIV6_S, DIV6_NR }; + +struct clk div6_clks[DIV6_NR] = { +	[DIV6_V] = SH_CLK_DIV6(&div3_clk, VCLKCR, 0), +	[DIV6_FA] = SH_CLK_DIV6(&div3_clk, FCLKACR, 0), +	[DIV6_FB] = SH_CLK_DIV6(&div3_clk, FCLKBCR, 0), +	[DIV6_I] = SH_CLK_DIV6(&div3_clk, IRDACLKCR, 0), +	[DIV6_S] = SH_CLK_DIV6(&div3_clk, SPUCLKCR, CLK_ENABLE_ON_INIT),  }; -#define R_CLK (&r_clk) -#define P_CLK (&div4_clks[DIV4_P]) -#define B_CLK (&div4_clks[DIV4_B]) -#define I_CLK (&div4_clks[DIV4_I]) -#define SH_CLK (&div4_clks[DIV4_SH]) +static struct clk mstp_clks[HWBLK_NR] = { +	SH_HWBLK_CLK(HWBLK_TLB, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_IC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_OC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_RSMEM, &div4_clks[DIV4_B], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_ILMEM, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_L2C, &div4_clks[DIV4_SH], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_FPU, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_INTC, &div4_clks[DIV4_P], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_DMAC0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SHYWAY, &div4_clks[DIV4_SH], CLK_ENABLE_ON_INIT), +	SH_HWBLK_CLK(HWBLK_HUDI, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_UBC, &div4_clks[DIV4_I], 0), +	SH_HWBLK_CLK(HWBLK_TMU0, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_CMT, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_RWDT, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_DMAC1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_TMU1, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF0, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF1, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF2, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_SCIF3, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SCIF4, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SCIF5, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_MSIOF0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_MSIOF1, &div4_clks[DIV4_B], 0), -static struct clk mstp_clks[] = { -	SH_HWBLK_CLK("tlb0", -1, I_CLK, HWBLK_TLB, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("ic0", -1, I_CLK, HWBLK_IC, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("oc0", -1, I_CLK, HWBLK_OC, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("rs0", -1, B_CLK, HWBLK_RSMEM, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("ilmem0", -1, I_CLK, HWBLK_ILMEM, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("l2c0", -1, SH_CLK, HWBLK_L2C, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("fpu0", -1, I_CLK, HWBLK_FPU, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("intc0", -1, P_CLK, HWBLK_INTC, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("dmac0", -1, B_CLK, HWBLK_DMAC0, 0), -	SH_HWBLK_CLK("sh0", -1, SH_CLK, HWBLK_SHYWAY, CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK("hudi0", -1, P_CLK, HWBLK_HUDI, 0), -	SH_HWBLK_CLK("ubc0", -1, I_CLK, HWBLK_UBC, 0), -	SH_HWBLK_CLK("tmu0", -1, P_CLK, HWBLK_TMU0, 0), -	SH_HWBLK_CLK("cmt0", -1, R_CLK, HWBLK_CMT, 0), -	SH_HWBLK_CLK("rwdt0", -1, R_CLK, HWBLK_RWDT, 0), -	SH_HWBLK_CLK("dmac1", -1, B_CLK, HWBLK_DMAC1, 0), -	SH_HWBLK_CLK("tmu1", -1, P_CLK, HWBLK_TMU1, 0), -	SH_HWBLK_CLK("scif0", -1, P_CLK, HWBLK_SCIF0, 0), -	SH_HWBLK_CLK("scif1", -1, P_CLK, HWBLK_SCIF1, 0), -	SH_HWBLK_CLK("scif2", -1, P_CLK, HWBLK_SCIF2, 0), -	SH_HWBLK_CLK("scif3", -1, B_CLK, HWBLK_SCIF3, 0), -	SH_HWBLK_CLK("scif4", -1, B_CLK, HWBLK_SCIF4, 0), -	SH_HWBLK_CLK("scif5", -1, B_CLK, HWBLK_SCIF5, 0), -	SH_HWBLK_CLK("msiof0", -1, B_CLK, HWBLK_MSIOF0, 0), -	SH_HWBLK_CLK("msiof1", -1, B_CLK, HWBLK_MSIOF1, 0), +	SH_HWBLK_CLK(HWBLK_KEYSC, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_RTC, &r_clk, 0), +	SH_HWBLK_CLK(HWBLK_IIC0, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_IIC1, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK("keysc0", -1, R_CLK, HWBLK_KEYSC, 0), -	SH_HWBLK_CLK("rtc0", -1, R_CLK, HWBLK_RTC, 0), -	SH_HWBLK_CLK("i2c0", -1, P_CLK, HWBLK_IIC0, 0), -	SH_HWBLK_CLK("i2c1", -1, P_CLK, HWBLK_IIC1, 0), +	SH_HWBLK_CLK(HWBLK_MMC, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_ETHER, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_ATAPI, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_TPU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_IRDA, &div4_clks[DIV4_P], 0), +	SH_HWBLK_CLK(HWBLK_TSIF, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_USB1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_USB0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_2DG, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SDHI0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_SDHI1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VEU1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_CEU1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_BEU1, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_2DDMAC, &div4_clks[DIV4_SH], 0), +	SH_HWBLK_CLK(HWBLK_SPU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_JPU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VOU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_BEU0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_CEU0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VEU0, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_VPU, &div4_clks[DIV4_B], 0), +	SH_HWBLK_CLK(HWBLK_LCDC, &div4_clks[DIV4_B], 0), +}; + +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("rclk", &r_clk), +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("fll_clk", &fll_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), +	CLKDEV_CON_ID("div3_clk", &div3_clk), -	SH_HWBLK_CLK("mmc0", -1, B_CLK, HWBLK_MMC, 0), -	SH_HWBLK_CLK("eth0", -1, B_CLK, HWBLK_ETHER, 0), -	SH_HWBLK_CLK("atapi0", -1, B_CLK, HWBLK_ATAPI, 0), -	SH_HWBLK_CLK("tpu0", -1, B_CLK, HWBLK_TPU, 0), -	SH_HWBLK_CLK("irda0", -1, P_CLK, HWBLK_IRDA, 0), -	SH_HWBLK_CLK("tsif0", -1, B_CLK, HWBLK_TSIF, 0), -	SH_HWBLK_CLK("usb1", -1, B_CLK, HWBLK_USB1, 0), -	SH_HWBLK_CLK("usb0", -1, B_CLK, HWBLK_USB0, 0), -	SH_HWBLK_CLK("2dg0", -1, B_CLK, HWBLK_2DG, 0), -	SH_HWBLK_CLK("sdhi0", -1, B_CLK, HWBLK_SDHI0, 0), -	SH_HWBLK_CLK("sdhi1", -1, B_CLK, HWBLK_SDHI1, 0), -	SH_HWBLK_CLK("veu1", -1, B_CLK, HWBLK_VEU1, 0), -	SH_HWBLK_CLK("ceu1", -1, B_CLK, HWBLK_CEU1, 0), -	SH_HWBLK_CLK("beu1", -1, B_CLK, HWBLK_BEU1, 0), -	SH_HWBLK_CLK("2ddmac0", -1, SH_CLK, HWBLK_2DDMAC, 0), -	SH_HWBLK_CLK("spu0", -1, B_CLK, HWBLK_SPU, 0), -	SH_HWBLK_CLK("jpu0", -1, B_CLK, HWBLK_JPU, 0), -	SH_HWBLK_CLK("vou0", -1, B_CLK, HWBLK_VOU, 0), -	SH_HWBLK_CLK("beu0", -1, B_CLK, HWBLK_BEU0, 0), -	SH_HWBLK_CLK("ceu0", -1, B_CLK, HWBLK_CEU0, 0), -	SH_HWBLK_CLK("veu0", -1, B_CLK, HWBLK_VEU0, 0), -	SH_HWBLK_CLK("vpu0", -1, B_CLK, HWBLK_VPU, 0), -	SH_HWBLK_CLK("lcdc0", -1, B_CLK, HWBLK_LCDC, 0), +	/* DIV4 clocks */ +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), +	CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_SH]), +	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), +	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), +	CLKDEV_CON_ID("vpu_clk", &div4_clks[DIV4_M1]), + +	/* DIV6 clocks */ +	CLKDEV_CON_ID("video_clk", &div6_clks[DIV6_V]), +	CLKDEV_CON_ID("fsia_clk", &div6_clks[DIV6_FA]), +	CLKDEV_CON_ID("fsib_clk", &div6_clks[DIV6_FB]), +	CLKDEV_CON_ID("irda_clk", &div6_clks[DIV6_I]), +	CLKDEV_CON_ID("spu_clk", &div6_clks[DIV6_S]), + +	/* MSTP clocks */ +	CLKDEV_CON_ID("tlb0", &mstp_clks[HWBLK_TLB]), +	CLKDEV_CON_ID("ic0", &mstp_clks[HWBLK_IC]), +	CLKDEV_CON_ID("oc0", &mstp_clks[HWBLK_OC]), +	CLKDEV_CON_ID("rs0", &mstp_clks[HWBLK_RSMEM]), +	CLKDEV_CON_ID("ilmem0", &mstp_clks[HWBLK_ILMEM]), +	CLKDEV_CON_ID("l2c0", &mstp_clks[HWBLK_L2C]), +	CLKDEV_CON_ID("fpu0", &mstp_clks[HWBLK_FPU]), +	CLKDEV_CON_ID("intc0", &mstp_clks[HWBLK_INTC]), +	CLKDEV_CON_ID("dmac0", &mstp_clks[HWBLK_DMAC0]), +	CLKDEV_CON_ID("sh0", &mstp_clks[HWBLK_SHYWAY]), +	CLKDEV_CON_ID("hudi0", &mstp_clks[HWBLK_HUDI]), +	CLKDEV_CON_ID("ubc0", &mstp_clks[HWBLK_UBC]), +	{ +		/* TMU0 */ +		.dev_id		= "sh_tmu.0", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU0], +	}, { +		/* TMU1 */ +		.dev_id		= "sh_tmu.1", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU0], +	}, { +		/* TMU2 */ +		.dev_id		= "sh_tmu.2", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU0], +	}, { +		/* TMU3 */ +		.dev_id		= "sh_tmu.3", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU1], +	}, +	CLKDEV_CON_ID("cmt_fck", &mstp_clks[HWBLK_CMT]), +	CLKDEV_CON_ID("rwdt0", &mstp_clks[HWBLK_RWDT]), +	CLKDEV_CON_ID("dmac1", &mstp_clks[HWBLK_DMAC1]), +	{ +		/* TMU4 */ +		.dev_id		= "sh_tmu.4", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU1], +	}, { +		/* TMU5 */ +		.dev_id		= "sh_tmu.5", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[HWBLK_TMU1], +	}, { +		/* SCIF0 */ +		.dev_id		= "sh-sci.0", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF0], +	}, { +		/* SCIF1 */ +		.dev_id		= "sh-sci.1", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF1], +	}, { +		/* SCIF2 */ +		.dev_id		= "sh-sci.2", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF2], +	}, { +		/* SCIF3 */ +		.dev_id		= "sh-sci.3", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF3], +	}, { +		/* SCIF4 */ +		.dev_id		= "sh-sci.4", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF4], +	}, { +		/* SCIF5 */ +		.dev_id		= "sh-sci.5", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[HWBLK_SCIF5], +	}, +	CLKDEV_CON_ID("msiof0", &mstp_clks[HWBLK_MSIOF0]), +	CLKDEV_CON_ID("msiof1", &mstp_clks[HWBLK_MSIOF1]), +	CLKDEV_CON_ID("keysc0", &mstp_clks[HWBLK_KEYSC]), +	CLKDEV_CON_ID("rtc0", &mstp_clks[HWBLK_RTC]), +	CLKDEV_CON_ID("i2c0", &mstp_clks[HWBLK_IIC0]), +	CLKDEV_CON_ID("i2c1", &mstp_clks[HWBLK_IIC1]), +	CLKDEV_CON_ID("mmc0", &mstp_clks[HWBLK_MMC]), +	CLKDEV_CON_ID("eth0", &mstp_clks[HWBLK_ETHER]), +	CLKDEV_CON_ID("atapi0", &mstp_clks[HWBLK_ATAPI]), +	CLKDEV_CON_ID("tpu0", &mstp_clks[HWBLK_TPU]), +	CLKDEV_CON_ID("irda0", &mstp_clks[HWBLK_IRDA]), +	CLKDEV_CON_ID("tsif0", &mstp_clks[HWBLK_TSIF]), +	CLKDEV_CON_ID("usb1", &mstp_clks[HWBLK_USB1]), +	CLKDEV_CON_ID("usb0", &mstp_clks[HWBLK_USB0]), +	CLKDEV_CON_ID("2dg0", &mstp_clks[HWBLK_2DG]), +	CLKDEV_CON_ID("sdhi0", &mstp_clks[HWBLK_SDHI0]), +	CLKDEV_CON_ID("sdhi1", &mstp_clks[HWBLK_SDHI1]), +	CLKDEV_CON_ID("veu1", &mstp_clks[HWBLK_VEU1]), +	CLKDEV_CON_ID("ceu1", &mstp_clks[HWBLK_CEU1]), +	CLKDEV_CON_ID("beu1", &mstp_clks[HWBLK_BEU1]), +	CLKDEV_CON_ID("2ddmac0", &mstp_clks[HWBLK_2DDMAC]), +	CLKDEV_CON_ID("spu0", &mstp_clks[HWBLK_SPU]), +	CLKDEV_CON_ID("jpu0", &mstp_clks[HWBLK_JPU]), +	CLKDEV_CON_ID("vou0", &mstp_clks[HWBLK_VOU]), +	CLKDEV_CON_ID("beu0", &mstp_clks[HWBLK_BEU0]), +	CLKDEV_CON_ID("ceu0", &mstp_clks[HWBLK_CEU0]), +	CLKDEV_CON_ID("veu0", &mstp_clks[HWBLK_VEU0]), +	CLKDEV_CON_ID("vpu0", &mstp_clks[HWBLK_VPU]), +	CLKDEV_CON_ID("lcdc0", &mstp_clks[HWBLK_LCDC]),  };  int __init arch_clk_init(void) @@ -231,14 +367,16 @@ int __init arch_clk_init(void)  	for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++)  		ret = clk_register(main_clks[k]); +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); +  	if (!ret)  		ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);  	if (!ret) -		ret = sh_clk_div6_register(div6_clks, ARRAY_SIZE(div6_clks)); +		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_hwblk_clk_register(mstp_clks, ARRAY_SIZE(mstp_clks)); +		ret = sh_hwblk_clk_register(mstp_clks, HWBLK_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7757.c b/arch/sh/kernel/cpu/sh4a/clock-sh7757.c index ddc235ca966..0a752bd324a 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7757.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7757.c @@ -12,6 +12,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h> @@ -35,7 +36,7 @@ static struct clk_ops sh7757_master_clk_ops = {  static void module_clk_recalc(struct clk *clk)  { -	int idx = ctrl_inl(FRQCR) & 0x0000000f; +	int idx = __raw_readl(FRQCR) & 0x0000000f;  	clk->rate = clk->parent->rate / p1fc_divisors[idx];  } @@ -45,7 +46,7 @@ static struct clk_ops sh7757_module_clk_ops = {  static void bus_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inl(FRQCR) >> 8) & 0x0000000f; +	int idx = (__raw_readl(FRQCR) >> 8) & 0x0000000f;  	clk->rate = clk->parent->rate / bfc_divisors[idx];  } @@ -55,7 +56,7 @@ static struct clk_ops sh7757_bus_clk_ops = {  static void cpu_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inl(FRQCR) >> 20) & 0x0000000f; +	int idx = (__raw_readl(FRQCR) >> 20) & 0x0000000f;  	clk->rate = clk->parent->rate / ifc_divisors[idx];  } @@ -78,7 +79,7 @@ void __init arch_init_clk_ops(struct clk_ops **ops, int idx)  static void shyway_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inl(FRQCR) >> 12) & 0x0000000f; +	int idx = (__raw_readl(FRQCR) >> 12) & 0x0000000f;  	clk->rate = clk->parent->rate / sfc_divisors[idx];  } @@ -87,7 +88,6 @@ static struct clk_ops sh7757_shyway_clk_ops = {  };  static struct clk sh7757_shyway_clk = { -	.name		= "shyway_clk",  	.flags		= CLK_ENABLE_ON_INIT,  	.ops		= &sh7757_shyway_clk_ops,  }; @@ -100,6 +100,13 @@ static struct clk *sh7757_onchip_clocks[] = {  	&sh7757_shyway_clk,  }; +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("shyway_clk", &sh7757_shyway_clk), +}; +  static int __init sh7757_clk_init(void)  {  	struct clk *clk = clk_get(NULL, "master_clk"); @@ -123,6 +130,8 @@ static int __init sh7757_clk_init(void)  	clk_put(clk); +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); +  	return 0;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7763.c b/arch/sh/kernel/cpu/sh4a/clock-sh7763.c index 370cd47642e..1f1df48008c 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7763.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7763.c @@ -12,6 +12,8 @@   */  #include <linux/init.h>  #include <linux/kernel.h> +#include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h>  #include <asm/io.h> @@ -22,7 +24,7 @@ static int cfc_divisors[] = { 1, 1, 4, 1, 1, 1, 1, 1 };  static void master_clk_init(struct clk *clk)  { -	clk->rate *= p0fc_divisors[(ctrl_inl(FRQCR) >> 4) & 0x07]; +	clk->rate *= p0fc_divisors[(__raw_readl(FRQCR) >> 4) & 0x07];  }  static struct clk_ops sh7763_master_clk_ops = { @@ -31,7 +33,7 @@ static struct clk_ops sh7763_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> 4) & 0x07); +	int idx = ((__raw_readl(FRQCR) >> 4) & 0x07);  	return clk->parent->rate / p0fc_divisors[idx];  } @@ -41,7 +43,7 @@ static struct clk_ops sh7763_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> 16) & 0x07); +	int idx = ((__raw_readl(FRQCR) >> 16) & 0x07);  	return clk->parent->rate / bfc_divisors[idx];  } @@ -68,7 +70,7 @@ void __init arch_init_clk_ops(struct clk_ops **ops, int idx)  static unsigned long shyway_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> 20) & 0x07); +	int idx = ((__raw_readl(FRQCR) >> 20) & 0x07);  	return clk->parent->rate / cfc_divisors[idx];  } @@ -77,7 +79,6 @@ static struct clk_ops sh7763_shyway_clk_ops = {  };  static struct clk sh7763_shyway_clk = { -	.name		= "shyway_clk",  	.flags		= CLK_ENABLE_ON_INIT,  	.ops		= &sh7763_shyway_clk_ops,  }; @@ -90,6 +91,13 @@ static struct clk *sh7763_onchip_clocks[] = {  	&sh7763_shyway_clk,  }; +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("shyway_clk", &sh7763_shyway_clk), +}; +  int __init arch_clk_init(void)  {  	struct clk *clk; @@ -107,5 +115,7 @@ int __init arch_clk_init(void)  	clk_put(clk); +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); +  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7770.c b/arch/sh/kernel/cpu/sh4a/clock-sh7770.c index e0b89676920..9e3354365d4 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7770.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7770.c @@ -21,7 +21,7 @@ static int pfc_divisors[] = { 1, 8, 1,10,12,16, 1, 1 };  static void master_clk_init(struct clk *clk)  { -	clk->rate *= pfc_divisors[(ctrl_inl(FRQCR) >> 28) & 0x000f]; +	clk->rate *= pfc_divisors[(__raw_readl(FRQCR) >> 28) & 0x000f];  }  static struct clk_ops sh7770_master_clk_ops = { @@ -30,7 +30,7 @@ static struct clk_ops sh7770_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> 28) & 0x000f); +	int idx = ((__raw_readl(FRQCR) >> 28) & 0x000f);  	return clk->parent->rate / pfc_divisors[idx];  } @@ -40,7 +40,7 @@ static struct clk_ops sh7770_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inl(FRQCR) & 0x000f); +	int idx = (__raw_readl(FRQCR) & 0x000f);  	return clk->parent->rate / bfc_divisors[idx];  } @@ -50,7 +50,7 @@ static struct clk_ops sh7770_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> 24) & 0x000f); +	int idx = ((__raw_readl(FRQCR) >> 24) & 0x000f);  	return clk->parent->rate / ifc_divisors[idx];  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7780.c b/arch/sh/kernel/cpu/sh4a/clock-sh7780.c index a249d823578..62d70635006 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7780.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7780.c @@ -11,6 +11,8 @@   */  #include <linux/init.h>  #include <linux/kernel.h> +#include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h>  #include <asm/io.h> @@ -22,7 +24,7 @@ static int cfc_divisors[] = { 1, 1, 4, 1, 6, 1, 1, 1 };  static void master_clk_init(struct clk *clk)  { -	clk->rate *= pfc_divisors[ctrl_inl(FRQCR) & 0x0003]; +	clk->rate *= pfc_divisors[__raw_readl(FRQCR) & 0x0003];  }  static struct clk_ops sh7780_master_clk_ops = { @@ -31,7 +33,7 @@ static struct clk_ops sh7780_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inl(FRQCR) & 0x0003); +	int idx = (__raw_readl(FRQCR) & 0x0003);  	return clk->parent->rate / pfc_divisors[idx];  } @@ -41,7 +43,7 @@ static struct clk_ops sh7780_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> 16) & 0x0007); +	int idx = ((__raw_readl(FRQCR) >> 16) & 0x0007);  	return clk->parent->rate / bfc_divisors[idx];  } @@ -51,7 +53,7 @@ static struct clk_ops sh7780_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> 24) & 0x0001); +	int idx = ((__raw_readl(FRQCR) >> 24) & 0x0001);  	return clk->parent->rate / ifc_divisors[idx];  } @@ -74,7 +76,7 @@ void __init arch_init_clk_ops(struct clk_ops **ops, int idx)  static unsigned long shyway_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> 20) & 0x0007); +	int idx = ((__raw_readl(FRQCR) >> 20) & 0x0007);  	return clk->parent->rate / cfc_divisors[idx];  } @@ -83,7 +85,6 @@ static struct clk_ops sh7780_shyway_clk_ops = {  };  static struct clk sh7780_shyway_clk = { -	.name		= "shyway_clk",  	.flags		= CLK_ENABLE_ON_INIT,  	.ops		= &sh7780_shyway_clk_ops,  }; @@ -96,6 +97,13 @@ static struct clk *sh7780_onchip_clocks[] = {  	&sh7780_shyway_clk,  }; +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("shyway_clk", &sh7780_shyway_clk), +}; +  int __init arch_clk_init(void)  {  	struct clk *clk; @@ -113,5 +121,7 @@ int __init arch_clk_init(void)  	clk_put(clk); +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); +  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c index 73abfbf2f16..c3e458aaa2b 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c @@ -3,7 +3,7 @@   *   * SH7785 support for the clock framework   * - *  Copyright (C) 2007 - 2009  Paul Mundt + *  Copyright (C) 2007 - 2010  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -14,6 +14,7 @@  #include <linux/clk.h>  #include <linux/io.h>  #include <linux/cpufreq.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h>  #include <cpu/sh7785.h> @@ -23,8 +24,6 @@   * from the platform code.   */  static struct clk extal_clk = { -	.name		= "extal", -	.id		= -1,  	.rate		= 33333333,  }; @@ -42,8 +41,6 @@ static struct clk_ops pll_clk_ops = {  };  static struct clk pll_clk = { -	.name		= "pll_clk", -	.id		= -1,  	.ops		= &pll_clk_ops,  	.parent		= &extal_clk,  	.flags		= CLK_ENABLE_ON_INIT, @@ -57,56 +54,161 @@ static struct clk *clks[] = {  static unsigned int div2[] = { 1, 2, 4, 6, 8, 12, 16, 18,  			       24, 32, 36, 48 }; -static struct clk_div_mult_table div4_table = { +static struct clk_div_mult_table div4_div_mult_table = {  	.divisors = div2,  	.nr_divisors = ARRAY_SIZE(div2),  }; +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table, +}; +  enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_DDR, DIV4_GA,  	DIV4_DU, DIV4_P, DIV4_NR }; -#define DIV4(_str, _bit, _mask, _flags) \ -  SH_CLK_DIV4(_str, &pll_clk, FRQMR1, _bit, _mask, _flags) +#define DIV4(_bit, _mask, _flags) \ +  SH_CLK_DIV4(&pll_clk, FRQMR1, _bit, _mask, _flags)  struct clk div4_clks[DIV4_NR] = { -	[DIV4_P] = DIV4("peripheral_clk", 0, 0x0f80, 0), -	[DIV4_DU] = DIV4("du_clk", 4, 0x0ff0, 0), -	[DIV4_GA] = DIV4("ga_clk", 8, 0x0030, 0), -	[DIV4_DDR] = DIV4("ddr_clk", 12, 0x000c, CLK_ENABLE_ON_INIT), -	[DIV4_B] = DIV4("bus_clk", 16, 0x0fe0, CLK_ENABLE_ON_INIT), -	[DIV4_SH] = DIV4("shyway_clk", 20, 0x000c, CLK_ENABLE_ON_INIT), -	[DIV4_U] = DIV4("umem_clk", 24, 0x000c, CLK_ENABLE_ON_INIT), -	[DIV4_I] = DIV4("cpu_clk", 28, 0x000e, CLK_ENABLE_ON_INIT), +	[DIV4_P] = DIV4(0, 0x0f80, 0), +	[DIV4_DU] = DIV4(4, 0x0ff0, 0), +	[DIV4_GA] = DIV4(8, 0x0030, 0), +	[DIV4_DDR] = DIV4(12, 0x000c, CLK_ENABLE_ON_INIT), +	[DIV4_B] = DIV4(16, 0x0fe0, CLK_ENABLE_ON_INIT), +	[DIV4_SH] = DIV4(20, 0x000c, CLK_ENABLE_ON_INIT), +	[DIV4_U] = DIV4(24, 0x000c, CLK_ENABLE_ON_INIT), +	[DIV4_I] = DIV4(28, 0x000e, CLK_ENABLE_ON_INIT),  };  #define MSTPCR0		0xffc80030  #define MSTPCR1		0xffc80034 -static struct clk mstp_clks[] = { +enum { MSTP029, MSTP028, MSTP027, MSTP026, MSTP025, MSTP024, +       MSTP021, MSTP020, MSTP017, MSTP016, +       MSTP013, MSTP012, MSTP009, MSTP008, MSTP003, MSTP002, +       MSTP119, MSTP117, MSTP105, MSTP104, MSTP100, +       MSTP_NR }; + +static struct clk mstp_clks[MSTP_NR] = {  	/* MSTPCR0 */ -	SH_CLK_MSTP32("scif_fck", 5, &div4_clks[DIV4_P], MSTPCR0, 29, 0), -	SH_CLK_MSTP32("scif_fck", 4, &div4_clks[DIV4_P], MSTPCR0, 28, 0), -	SH_CLK_MSTP32("scif_fck", 3, &div4_clks[DIV4_P], MSTPCR0, 27, 0), -	SH_CLK_MSTP32("scif_fck", 2, &div4_clks[DIV4_P], MSTPCR0, 26, 0), -	SH_CLK_MSTP32("scif_fck", 1, &div4_clks[DIV4_P], MSTPCR0, 25, 0), -	SH_CLK_MSTP32("scif_fck", 0, &div4_clks[DIV4_P], MSTPCR0, 24, 0), -	SH_CLK_MSTP32("ssi_fck", 1, &div4_clks[DIV4_P], MSTPCR0, 21, 0), -	SH_CLK_MSTP32("ssi_fck", 0, &div4_clks[DIV4_P], MSTPCR0, 20, 0), -	SH_CLK_MSTP32("hac_fck", 1, &div4_clks[DIV4_P], MSTPCR0, 17, 0), -	SH_CLK_MSTP32("hac_fck", 0, &div4_clks[DIV4_P], MSTPCR0, 16, 0), -	SH_CLK_MSTP32("mmcif_fck", -1, &div4_clks[DIV4_P], MSTPCR0, 13, 0), -	SH_CLK_MSTP32("flctl_fck", -1, &div4_clks[DIV4_P], MSTPCR0, 12, 0), -	SH_CLK_MSTP32("tmu345_fck", -1, &div4_clks[DIV4_P], MSTPCR0, 9, 0), -	SH_CLK_MSTP32("tmu012_fck", -1, &div4_clks[DIV4_P], MSTPCR0, 8, 0), -	SH_CLK_MSTP32("siof_fck", -1, &div4_clks[DIV4_P], MSTPCR0, 3, 0), -	SH_CLK_MSTP32("hspi_fck", -1, &div4_clks[DIV4_P], MSTPCR0, 2, 0), +	[MSTP029] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 29, 0), +	[MSTP028] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 28, 0), +	[MSTP027] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 27, 0), +	[MSTP026] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 26, 0), +	[MSTP025] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 25, 0), +	[MSTP024] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 24, 0), +	[MSTP021] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 21, 0), +	[MSTP020] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 20, 0), +	[MSTP017] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 17, 0), +	[MSTP016] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 16, 0), +	[MSTP013] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 13, 0), +	[MSTP012] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 12, 0), +	[MSTP009] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 9, 0), +	[MSTP008] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 8, 0), +	[MSTP003] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 3, 0), +	[MSTP002] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 2, 0),  	/* MSTPCR1 */ -	SH_CLK_MSTP32("hudi_fck", -1, NULL, MSTPCR1, 19, 0), -	SH_CLK_MSTP32("ubc_fck", -1, NULL, MSTPCR1, 17, 0), -	SH_CLK_MSTP32("dmac_11_6_fck", -1, NULL, MSTPCR1, 5, 0), -	SH_CLK_MSTP32("dmac_5_0_fck", -1, NULL, MSTPCR1, 4, 0), -	SH_CLK_MSTP32("gdta_fck", -1, NULL, MSTPCR1, 0, 0), +	[MSTP119] = SH_CLK_MSTP32(NULL, MSTPCR1, 19, 0), +	[MSTP117] = SH_CLK_MSTP32(NULL, MSTPCR1, 17, 0), +	[MSTP105] = SH_CLK_MSTP32(NULL, MSTPCR1, 5, 0), +	[MSTP104] = SH_CLK_MSTP32(NULL, MSTPCR1, 4, 0), +	[MSTP100] = SH_CLK_MSTP32(NULL, MSTPCR1, 0, 0), +}; + +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), + +	/* DIV4 clocks */ +	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), +	CLKDEV_CON_ID("du_clk", &div4_clks[DIV4_DU]), +	CLKDEV_CON_ID("ga_clk", &div4_clks[DIV4_GA]), +	CLKDEV_CON_ID("ddr_clk", &div4_clks[DIV4_DDR]), +	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), +	CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_SH]), +	CLKDEV_CON_ID("umem_clk", &div4_clks[DIV4_U]), +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), + +	/* MSTP32 clocks */ +	{ +		/* SCIF5 */ +		.dev_id		= "sh-sci.5", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP029], +	}, { +		/* SCIF4 */ +		.dev_id		= "sh-sci.4", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP028], +	}, { +		/* SCIF3 */ +		.dev_id		= "sh-sci.3", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP027], +	}, { +		/* SCIF2 */ +		.dev_id		= "sh-sci.2", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP026], +	}, { +		/* SCIF1 */ +		.dev_id		= "sh-sci.1", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP025], +	}, { +		/* SCIF0 */ +		.dev_id		= "sh-sci.0", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP024], +	}, +	CLKDEV_CON_ID("ssi1_fck", &mstp_clks[MSTP021]), +	CLKDEV_CON_ID("ssi0_fck", &mstp_clks[MSTP020]), +	CLKDEV_CON_ID("hac1_fck", &mstp_clks[MSTP017]), +	CLKDEV_CON_ID("hac0_fck", &mstp_clks[MSTP016]), +	CLKDEV_CON_ID("mmcif_fck", &mstp_clks[MSTP013]), +	CLKDEV_CON_ID("flctl_fck", &mstp_clks[MSTP012]), +	{ +		/* TMU0 */ +		.dev_id		= "sh_tmu.0", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP008], +	}, { +		/* TMU1 */ +		.dev_id		= "sh_tmu.1", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP008], +	}, { +		/* TMU2 */ +		.dev_id		= "sh_tmu.2", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP008], +	}, { +		/* TMU3 */ +		.dev_id		= "sh_tmu.3", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP009], +	}, { +		/* TMU4 */ +		.dev_id		= "sh_tmu.4", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP009], +	}, { +		/* TMU5 */ +		.dev_id		= "sh_tmu.5", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP009], +	}, +	CLKDEV_CON_ID("siof_fck", &mstp_clks[MSTP003]), +	CLKDEV_CON_ID("hspi_fck", &mstp_clks[MSTP002]), +	CLKDEV_CON_ID("hudi_fck", &mstp_clks[MSTP119]), +	CLKDEV_CON_ID("ubc_fck", &mstp_clks[MSTP117]), +	CLKDEV_CON_ID("dmac_11_6_fck", &mstp_clks[MSTP105]), +	CLKDEV_CON_ID("dmac_5_0_fck", &mstp_clks[MSTP104]), +	CLKDEV_CON_ID("gdta_fck", &mstp_clks[MSTP100]),  };  int __init arch_clk_init(void) @@ -115,12 +217,14 @@ int __init arch_clk_init(void)  	for (i = 0; i < ARRAY_SIZE(clks); i++)  		ret |= clk_register(clks[i]); +	for (i = 0; i < ARRAY_SIZE(lookups); i++) +		clkdev_add(&lookups[i]);  	if (!ret)  		ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks),  					   &div4_table);  	if (!ret) -		ret = sh_clk_mstp32_register(mstp_clks, ARRAY_SIZE(mstp_clks)); +		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7786.c b/arch/sh/kernel/cpu/sh4a/clock-sh7786.c index a0e8869071a..597c9fbe49c 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7786.c @@ -3,11 +3,7 @@   *   * SH7786 support for the clock framework   * - * Copyright (C) 2008, 2009  Renesas Solutions Corp. - * Kuninori Morimoto <morimoto.kuninori@renesas.com> - * - * Based on SH7785 - *  Copyright (C) 2007  Paul Mundt + *  Copyright (C) 2010  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -15,127 +11,263 @@   */  #include <linux/init.h>  #include <linux/kernel.h> +#include <linux/clk.h> +#include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h> -#include <asm/io.h> -static int ifc_divisors[] = { 1, 2, 4, 1 }; -static int sfc_divisors[] = { 1, 1, 4, 1 }; -static int bfc_divisors[] = { 1, 1, 1, 1, 1, 12, 16, 1, -			     24, 32, 1, 1, 1, 1, 1, 1 }; -static int mfc_divisors[] = { 1, 1, 4, 1 }; -static int pfc_divisors[] = { 1, 1, 1, 1, 1, 1, 16, 1, -			      24, 32, 1, 48, 1, 1, 1, 1 }; +/* + * Default rate for the root input clock, reset this with clk_set_rate() + * from the platform code. + */ +static struct clk extal_clk = { +	.rate		= 33333333, +}; -static void master_clk_init(struct clk *clk) +static unsigned long pll_recalc(struct clk *clk)  { -	clk->rate *= pfc_divisors[ctrl_inl(FRQMR1) & 0x000f]; -} +	int multiplier; -static struct clk_ops sh7786_master_clk_ops = { -	.init		= master_clk_init, -}; +	/* +	 * Clock modes 0, 1, and 2 use an x64 multiplier against PLL1, +	 * while modes 3, 4, and 5 use an x32. +	 */ +	multiplier = (sh_mv.mv_mode_pins() & 0xf) < 3 ? 64 : 32; -static unsigned long module_clk_recalc(struct clk *clk) -{ -	int idx = (ctrl_inl(FRQMR1) & 0x000f); -	return clk->parent->rate / pfc_divisors[idx]; +	return clk->parent->rate * multiplier;  } -static struct clk_ops sh7786_module_clk_ops = { -	.recalc		= module_clk_recalc, +static struct clk_ops pll_clk_ops = { +	.recalc		= pll_recalc,  }; -static unsigned long bus_clk_recalc(struct clk *clk) -{ -	int idx = ((ctrl_inl(FRQMR1) >> 16) & 0x000f); -	return clk->parent->rate / bfc_divisors[idx]; -} +static struct clk pll_clk = { +	.ops		= &pll_clk_ops, +	.parent		= &extal_clk, +	.flags		= CLK_ENABLE_ON_INIT, +}; -static struct clk_ops sh7786_bus_clk_ops = { -	.recalc		= bus_clk_recalc, +static struct clk *clks[] = { +	&extal_clk, +	&pll_clk,  }; -static unsigned long cpu_clk_recalc(struct clk *clk) -{ -	int idx = ((ctrl_inl(FRQMR1) >> 28) & 0x0003); -	return clk->parent->rate / ifc_divisors[idx]; -} +static unsigned int div2[] = { 1, 2, 4, 6, 8, 12, 16, 18, +			       24, 32, 36, 48 }; -static struct clk_ops sh7786_cpu_clk_ops = { -	.recalc		= cpu_clk_recalc, +static struct clk_div_mult_table div4_div_mult_table = { +	.divisors = div2, +	.nr_divisors = ARRAY_SIZE(div2),  }; -static struct clk_ops *sh7786_clk_ops[] = { -	&sh7786_master_clk_ops, -	&sh7786_module_clk_ops, -	&sh7786_bus_clk_ops, -	&sh7786_cpu_clk_ops, +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) -{ -	if (idx < ARRAY_SIZE(sh7786_clk_ops)) -		*ops = sh7786_clk_ops[idx]; -} +enum { DIV4_I, DIV4_SH, DIV4_B, DIV4_DDR, DIV4_DU, DIV4_P, DIV4_NR }; -static unsigned long shyway_clk_recalc(struct clk *clk) -{ -	int idx = ((ctrl_inl(FRQMR1) >> 20) & 0x0003); -	return clk->parent->rate / sfc_divisors[idx]; -} +#define DIV4(_bit, _mask, _flags) \ +  SH_CLK_DIV4(&pll_clk, FRQMR1, _bit, _mask, _flags) -static struct clk_ops sh7786_shyway_clk_ops = { -	.recalc		= shyway_clk_recalc, +struct clk div4_clks[DIV4_NR] = { +	[DIV4_P] = DIV4(0, 0x0b40, 0), +	[DIV4_DU] = DIV4(4, 0x0010, 0), +	[DIV4_DDR] = DIV4(12, 0x0002, CLK_ENABLE_ON_INIT), +	[DIV4_B] = DIV4(16, 0x0360, CLK_ENABLE_ON_INIT), +	[DIV4_SH] = DIV4(20, 0x0002, CLK_ENABLE_ON_INIT), +	[DIV4_I] = DIV4(28, 0x0006, CLK_ENABLE_ON_INIT),  }; -static struct clk sh7786_shyway_clk = { -	.name		= "shyway_clk", -	.flags		= CLK_ENABLE_ON_INIT, -	.ops		= &sh7786_shyway_clk_ops, -}; +#define MSTPCR0		0xffc40030 +#define MSTPCR1		0xffc40034 -static unsigned long ddr_clk_recalc(struct clk *clk) -{ -	int idx = ((ctrl_inl(FRQMR1) >> 12) & 0x0003); -	return clk->parent->rate / mfc_divisors[idx]; -} +enum { MSTP029, MSTP028, MSTP027, MSTP026, MSTP025, MSTP024, +       MSTP023, MSTP022, MSTP021, MSTP020, MSTP017, MSTP016, +       MSTP015, MSTP014, MSTP011, MSTP010, MSTP009, MSTP008, +       MSTP005, MSTP004, MSTP002, +       MSTP112, MSTP110, MSTP109, MSTP108, +       MSTP105, MSTP104, MSTP103, MSTP102, +       MSTP_NR }; -static struct clk_ops sh7786_ddr_clk_ops = { -	.recalc		= ddr_clk_recalc, -}; +static struct clk mstp_clks[MSTP_NR] = { +	/* MSTPCR0 */ +	[MSTP029] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 29, 0), +	[MSTP028] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 28, 0), +	[MSTP027] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 27, 0), +	[MSTP026] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 26, 0), +	[MSTP025] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 25, 0), +	[MSTP024] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 24, 0), +	[MSTP023] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 23, 0), +	[MSTP022] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 22, 0), +	[MSTP021] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 21, 0), +	[MSTP020] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 20, 0), +	[MSTP017] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 17, 0), +	[MSTP016] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 16, 0), +	[MSTP015] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 15, 0), +	[MSTP014] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 14, 0), +	[MSTP011] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 11, 0), +	[MSTP010] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 10, 0), +	[MSTP009] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 9, 0), +	[MSTP008] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 8, 0), +	[MSTP005] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 5, 0), +	[MSTP004] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 4, 0), +	[MSTP002] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 2, 0), -static struct clk sh7786_ddr_clk = { -	.name		= "ddr_clk", -	.flags		= CLK_ENABLE_ON_INIT, -	.ops		= &sh7786_ddr_clk_ops, +	/* MSTPCR1 */ +	[MSTP112] = SH_CLK_MSTP32(NULL, MSTPCR1, 12, 0), +	[MSTP110] = SH_CLK_MSTP32(NULL, MSTPCR1, 10, 0), +	[MSTP109] = SH_CLK_MSTP32(NULL, MSTPCR1, 9, 0), +	[MSTP108] = SH_CLK_MSTP32(NULL, MSTPCR1, 8, 0), +	[MSTP105] = SH_CLK_MSTP32(NULL, MSTPCR1, 5, 0), +	[MSTP104] = SH_CLK_MSTP32(NULL, MSTPCR1, 4, 0), +	[MSTP103] = SH_CLK_MSTP32(NULL, MSTPCR1, 3, 0), +	[MSTP102] = SH_CLK_MSTP32(NULL, MSTPCR1, 2, 0),  }; -/* - * Additional SH7786-specific on-chip clocks that aren't already part of the - * clock framework - */ -static struct clk *sh7786_onchip_clocks[] = { -	&sh7786_shyway_clk, -	&sh7786_ddr_clk, +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), + +	/* DIV4 clocks */ +	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), +	CLKDEV_CON_ID("du_clk", &div4_clks[DIV4_DU]), +	CLKDEV_CON_ID("ddr_clk", &div4_clks[DIV4_DDR]), +	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), +	CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_SH]), +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), + +	/* MSTP32 clocks */ +	{ +		/* SCIF5 */ +		.dev_id		= "sh-sci.5", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP029], +	}, { +		/* SCIF4 */ +		.dev_id		= "sh-sci.4", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP028], +	}, { +		/* SCIF3 */ +		.dev_id		= "sh-sci.3", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP027], +	}, { +		/* SCIF2 */ +		.dev_id		= "sh-sci.2", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP026], +	}, { +		/* SCIF1 */ +		.dev_id		= "sh-sci.1", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP025], +	}, { +		/* SCIF0 */ +		.dev_id		= "sh-sci.0", +		.con_id		= "sci_fck", +		.clk		= &mstp_clks[MSTP024], +	}, +	CLKDEV_CON_ID("ssi3_fck", &mstp_clks[MSTP023]), +	CLKDEV_CON_ID("ssi2_fck", &mstp_clks[MSTP022]), +	CLKDEV_CON_ID("ssi1_fck", &mstp_clks[MSTP021]), +	CLKDEV_CON_ID("ssi0_fck", &mstp_clks[MSTP020]), +	CLKDEV_CON_ID("hac1_fck", &mstp_clks[MSTP017]), +	CLKDEV_CON_ID("hac0_fck", &mstp_clks[MSTP016]), +	CLKDEV_CON_ID("i2c1_fck", &mstp_clks[MSTP015]), +	CLKDEV_CON_ID("i2c0_fck", &mstp_clks[MSTP014]), +	{ +		/* TMU0 */ +		.dev_id		= "sh_tmu.0", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP008], +	}, { +		/* TMU1 */ +		.dev_id		= "sh_tmu.1", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP008], +	}, { +		/* TMU2 */ +		.dev_id		= "sh_tmu.2", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP008], +	}, { +		/* TMU3 */ +		.dev_id		= "sh_tmu.3", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP009], +	}, { +		/* TMU4 */ +		.dev_id		= "sh_tmu.4", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP009], +	}, { +		/* TMU5 */ +		.dev_id		= "sh_tmu.5", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP009], +	}, { +		/* TMU6 */ +		.dev_id		= "sh_tmu.6", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP010], +	}, { +		/* TMU7 */ +		.dev_id		= "sh_tmu.7", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP010], +	}, { +		/* TMU8 */ +		.dev_id		= "sh_tmu.8", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP010], +	}, { +		/* TMU9 */ +		.dev_id		= "sh_tmu.9", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP011], +	}, { +		/* TMU10 */ +		.dev_id		= "sh_tmu.10", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP011], +	}, { +		/* TMU11 */ +		.dev_id		= "sh_tmu.11", +		.con_id		= "tmu_fck", +		.clk		= &mstp_clks[MSTP011], +	}, +	CLKDEV_CON_ID("sdif1_fck", &mstp_clks[MSTP005]), +	CLKDEV_CON_ID("sdif0_fck", &mstp_clks[MSTP004]), +	CLKDEV_CON_ID("hspi_fck", &mstp_clks[MSTP002]), +	CLKDEV_CON_ID("usb_fck", &mstp_clks[MSTP112]), +	CLKDEV_CON_ID("pcie2_fck", &mstp_clks[MSTP110]), +	CLKDEV_CON_ID("pcie1_fck", &mstp_clks[MSTP109]), +	CLKDEV_CON_ID("pcie0_fck", &mstp_clks[MSTP108]), +	CLKDEV_CON_ID("dmac_11_6_fck", &mstp_clks[MSTP105]), +	CLKDEV_CON_ID("dmac_5_0_fck", &mstp_clks[MSTP104]), +	CLKDEV_CON_ID("du_fck", &mstp_clks[MSTP103]), +	CLKDEV_CON_ID("ether_fck", &mstp_clks[MSTP102]),  };  int __init arch_clk_init(void)  { -	struct clk *clk;  	int i, ret = 0; -	cpg_clk_init(); - -	clk = clk_get(NULL, "master_clk"); -	for (i = 0; i < ARRAY_SIZE(sh7786_onchip_clocks); i++) { -		struct clk *clkp = sh7786_onchip_clocks[i]; - -		clkp->parent = clk; -		ret |= clk_register(clkp); -	} +	for (i = 0; i < ARRAY_SIZE(clks); i++) +		ret |= clk_register(clks[i]); +	for (i = 0; i < ARRAY_SIZE(lookups); i++) +		clkdev_add(&lookups[i]); -	clk_put(clk); +	if (!ret) +		ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks), +					   &div4_table); +	if (!ret) +		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-shx3.c b/arch/sh/kernel/cpu/sh4a/clock-shx3.c index 23c27d32d98..236a6282d77 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-shx3.c +++ b/arch/sh/kernel/cpu/sh4a/clock-shx3.c @@ -13,9 +13,10 @@   */  #include <linux/init.h>  #include <linux/kernel.h> +#include <linux/io.h> +#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h> -#include <asm/io.h>  static int ifc_divisors[] = { 1, 2, 4 ,6 };  static int bfc_divisors[] = { 1, 1, 1, 1, 1, 12, 16, 18, 24, 32, 36, 48 }; @@ -33,7 +34,7 @@ static int cfc_divisors[] = { 1, 1, 4, 6 };  static void master_clk_init(struct clk *clk)  { -	clk->rate *= pfc_divisors[(ctrl_inl(FRQCR) >> PFC_POS) & PFC_MSK]; +	clk->rate *= pfc_divisors[(__raw_readl(FRQCR) >> PFC_POS) & PFC_MSK];  }  static struct clk_ops shx3_master_clk_ops = { @@ -42,7 +43,7 @@ static struct clk_ops shx3_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> PFC_POS) & PFC_MSK); +	int idx = ((__raw_readl(FRQCR) >> PFC_POS) & PFC_MSK);  	return clk->parent->rate / pfc_divisors[idx];  } @@ -52,7 +53,7 @@ static struct clk_ops shx3_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> BFC_POS) & BFC_MSK); +	int idx = ((__raw_readl(FRQCR) >> BFC_POS) & BFC_MSK);  	return clk->parent->rate / bfc_divisors[idx];  } @@ -62,7 +63,7 @@ static struct clk_ops shx3_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> IFC_POS) & IFC_MSK); +	int idx = ((__raw_readl(FRQCR) >> IFC_POS) & IFC_MSK);  	return clk->parent->rate / ifc_divisors[idx];  } @@ -85,7 +86,7 @@ void __init arch_init_clk_ops(struct clk_ops **ops, int idx)  static unsigned long shyway_clk_recalc(struct clk *clk)  { -	int idx = ((ctrl_inl(FRQCR) >> CFC_POS) & CFC_MSK); +	int idx = ((__raw_readl(FRQCR) >> CFC_POS) & CFC_MSK);  	return clk->parent->rate / cfc_divisors[idx];  } @@ -94,7 +95,6 @@ static struct clk_ops shx3_shyway_clk_ops = {  };  static struct clk shx3_shyway_clk = { -	.name		= "shyway_clk",  	.flags		= CLK_ENABLE_ON_INIT,  	.ops		= &shx3_shyway_clk_ops,  }; @@ -107,6 +107,13 @@ static struct clk *shx3_onchip_clocks[] = {  	&shx3_shyway_clk,  }; +#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("shyway_clk", &shx3_shyway_clk), +}; +  int __init arch_clk_init(void)  {  	struct clk *clk; @@ -124,5 +131,7 @@ int __init arch_clk_init(void)  	clk_put(clk); +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); +  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/pinmux-sh7722.c b/arch/sh/kernel/cpu/sh4a/pinmux-sh7722.c index cb9d07bd59f..0688a7502f8 100644 --- a/arch/sh/kernel/cpu/sh4a/pinmux-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/pinmux-sh7722.c @@ -278,6 +278,7 @@ enum {  	HIZA8_LCDC, HIZA8_HIZ,  	HIZA7_LCDC, HIZA7_HIZ,  	HIZA6_LCDC, HIZA6_HIZ, +	HIZB4_SIUA, HIZB4_HIZ,  	HIZB1_VIO, HIZB1_HIZ,  	HIZB0_VIO, HIZB0_HIZ,  	HIZC15_IRQ7, HIZC15_HIZ, @@ -546,7 +547,7 @@ static pinmux_enum_t pinmux_data[] = {  	PINMUX_DATA(VIO_VD2_MARK, PSE3_VIO, MSELB9_VIO2,  		    HIZB0_VIO, FOE_VIO_VD2),  	PINMUX_DATA(VIO_HD2_MARK, PSE3_VIO, MSELB9_VIO2, -		    HIZB1_VIO, HIZB1_VIO, FCE_VIO_HD2), +		    HIZB1_VIO, FCE_VIO_HD2),  	PINMUX_DATA(VIO_CLK2_MARK, PSE3_VIO, MSELB9_VIO2,  		    HIZB1_VIO, FRB_VIO_CLK2), @@ -658,14 +659,14 @@ static pinmux_enum_t pinmux_data[] = {  	PINMUX_DATA(SDHICLK_MARK, SDHICLK),  	/* SIU - Port A */ -	PINMUX_DATA(SIUAOLR_MARK, PSC13_SIUAOLR, SIUAOLR_SIOF1_SYNC), -	PINMUX_DATA(SIUAOBT_MARK, PSC14_SIUAOBT, SIUAOBT_SIOF1_SCK), -	PINMUX_DATA(SIUAISLD_MARK, PSC15_SIUAISLD, SIUAISLD_SIOF1_RXD), -	PINMUX_DATA(SIUAILR_MARK, PSC11_SIUAILR, SIUAILR_SIOF1_SS2), -	PINMUX_DATA(SIUAIBT_MARK, PSC12_SIUAIBT, SIUAIBT_SIOF1_SS1), -	PINMUX_DATA(SIUAOSLD_MARK, PSB0_SIUAOSLD, SIUAOSLD_SIOF1_TXD), -	PINMUX_DATA(SIUMCKA_MARK, PSE11_SIUMCKA_SIOF1_MCK, PSB1_SIUMCKA, PTK0), -	PINMUX_DATA(SIUFCKA_MARK, PSE11_SIUFCKA, PTK0), +	PINMUX_DATA(SIUAOLR_MARK, PSC13_SIUAOLR, HIZB4_SIUA, SIUAOLR_SIOF1_SYNC), +	PINMUX_DATA(SIUAOBT_MARK, PSC14_SIUAOBT, HIZB4_SIUA, SIUAOBT_SIOF1_SCK), +	PINMUX_DATA(SIUAISLD_MARK, PSC15_SIUAISLD, HIZB4_SIUA, SIUAISLD_SIOF1_RXD), +	PINMUX_DATA(SIUAILR_MARK, PSC11_SIUAILR, HIZB4_SIUA, SIUAILR_SIOF1_SS2), +	PINMUX_DATA(SIUAIBT_MARK, PSC12_SIUAIBT, HIZB4_SIUA, SIUAIBT_SIOF1_SS1), +	PINMUX_DATA(SIUAOSLD_MARK, PSB0_SIUAOSLD, HIZB4_SIUA, SIUAOSLD_SIOF1_TXD), +	PINMUX_DATA(SIUMCKA_MARK, PSE11_SIUMCKA_SIOF1_MCK, HIZB4_SIUA, PSB1_SIUMCKA, PTK0), +	PINMUX_DATA(SIUFCKA_MARK, PSE11_SIUFCKA, HIZB4_SIUA, PTK0),  	/* SIU - Port B */  	PINMUX_DATA(SIUBOLR_MARK, PSB11_SIUBOLR, SIOSTRB1_SIUBOLR), @@ -1612,7 +1613,7 @@ static struct pinmux_cfg_reg pinmux_config_regs[] = {  		0, 0,  		0, 0,  		0, 0, -		0, 0, +		HIZB4_SIUA, HIZB4_HIZ,  		0, 0,  		0, 0,  		HIZB1_VIO, HIZB1_HIZ, diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7343.c b/arch/sh/kernel/cpu/sh4a/setup-sh7343.c index 45eb1bfd42c..3681cafdb4a 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7343.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7343.c @@ -21,7 +21,6 @@ static struct plat_sci_port scif0_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 80, 80, 80, 80 }, -	.clk		= "scif0",  };  static struct platform_device scif0_device = { @@ -37,7 +36,6 @@ static struct plat_sci_port scif1_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 81, 81, 81, 81 }, -	.clk		= "scif1",  };  static struct platform_device scif1_device = { @@ -53,7 +51,6 @@ static struct plat_sci_port scif2_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 82, 82, 82, 82 }, -	.clk		= "scif2",  };  static struct platform_device scif2_device = { @@ -69,7 +66,6 @@ static struct plat_sci_port scif3_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 83, 83, 83, 83 }, -	.clk		= "scif3",  };  static struct platform_device scif3_device = { @@ -207,17 +203,14 @@ static struct platform_device jpu_device = {  };  static struct sh_timer_config cmt_platform_data = { -	.name = "CMT",  	.channel_offset = 0x60,  	.timer_bit = 5, -	.clk = "cmt0",  	.clockevent_rating = 125,  	.clocksource_rating = 200,  };  static struct resource cmt_resources[] = {  	[0] = { -		.name	= "CMT",  		.start	= 0x044a0060,  		.end	= 0x044a006b,  		.flags	= IORESOURCE_MEM, @@ -239,16 +232,13 @@ static struct platform_device cmt_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "tmu0",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -270,16 +260,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "tmu0",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -301,15 +288,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "tmu0",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002b,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7366.c b/arch/sh/kernel/cpu/sh4a/setup-sh7366.c index c494c193e3b..8dab9e1bbd8 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7366.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7366.c @@ -23,7 +23,6 @@ static struct plat_sci_port scif0_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.type		= PORT_SCIF,  	.irqs		= { 80, 80, 80, 80 }, -	.clk		= "scif0",  };  static struct platform_device scif0_device = { @@ -169,17 +168,14 @@ static struct platform_device veu1_device = {  };  static struct sh_timer_config cmt_platform_data = { -	.name = "CMT",  	.channel_offset = 0x60,  	.timer_bit = 5, -	.clk = "cmt0",  	.clockevent_rating = 125,  	.clocksource_rating = 200,  };  static struct resource cmt_resources[] = {  	[0] = { -		.name	= "CMT",  		.start	= 0x044a0060,  		.end	= 0x044a006b,  		.flags	= IORESOURCE_MEM, @@ -201,16 +197,13 @@ static struct platform_device cmt_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "tmu0",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -232,16 +225,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "tmu0",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -263,15 +253,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "tmu0",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002b,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c index b5335b5e309..156ccc96001 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c @@ -7,26 +7,182 @@   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   */ -#include <linux/platform_device.h>  #include <linux/init.h> +#include <linux/mm.h> +#include <linux/platform_device.h>  #include <linux/serial.h>  #include <linux/serial_sci.h> -#include <linux/mm.h> +#include <linux/sh_timer.h>  #include <linux/uio_driver.h>  #include <linux/usb/m66592.h> -#include <linux/sh_timer.h> +  #include <asm/clock.h>  #include <asm/mmzone.h> -#include <asm/dma-sh.h> +#include <asm/siu.h> + +#include <cpu/dma-register.h>  #include <cpu/sh7722.h> +static const struct sh_dmae_slave_config sh7722_dmae_slaves[] = { +	{ +		.slave_id	= SHDMA_SLAVE_SCIF0_TX, +		.addr		= 0xffe0000c, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x21, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF0_RX, +		.addr		= 0xffe00014, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x22, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF1_TX, +		.addr		= 0xffe1000c, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x25, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF1_RX, +		.addr		= 0xffe10014, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x26, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF2_TX, +		.addr		= 0xffe2000c, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x29, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF2_RX, +		.addr		= 0xffe20014, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x2a, +	}, { +		.slave_id	= SHDMA_SLAVE_SIUA_TX, +		.addr		= 0xa454c098, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xb1, +	}, { +		.slave_id	= SHDMA_SLAVE_SIUA_RX, +		.addr		= 0xa454c090, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xb2, +	}, { +		.slave_id	= SHDMA_SLAVE_SIUB_TX, +		.addr		= 0xa454c09c, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xb5, +	}, { +		.slave_id	= SHDMA_SLAVE_SIUB_RX, +		.addr		= 0xa454c094, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xb6, +	}, { +		.slave_id	= SHDMA_SLAVE_SDHI0_TX, +		.addr		= 0x04ce0030, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xc1, +	}, { +		.slave_id	= SHDMA_SLAVE_SDHI0_RX, +		.addr		= 0x04ce0030, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xc2, +	}, +}; + +static const struct sh_dmae_channel sh7722_dmae_channels[] = { +	{ +		.offset = 0, +		.dmars = 0, +		.dmars_bit = 0, +	}, { +		.offset = 0x10, +		.dmars = 0, +		.dmars_bit = 8, +	}, { +		.offset = 0x20, +		.dmars = 4, +		.dmars_bit = 0, +	}, { +		.offset = 0x30, +		.dmars = 4, +		.dmars_bit = 8, +	}, { +		.offset = 0x50, +		.dmars = 8, +		.dmars_bit = 0, +	}, { +		.offset = 0x60, +		.dmars = 8, +		.dmars_bit = 8, +	} +}; + +static const unsigned int ts_shift[] = TS_SHIFT; + +static struct sh_dmae_pdata dma_platform_data = { +	.slave		= sh7722_dmae_slaves, +	.slave_num	= ARRAY_SIZE(sh7722_dmae_slaves), +	.channel	= sh7722_dmae_channels, +	.channel_num	= ARRAY_SIZE(sh7722_dmae_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT, +}; + +static struct resource sh7722_dmae_resources[] = { +	[0] = { +		/* Channel registers and DMAOR */ +		.start	= 0xfe008020, +		.end	= 0xfe00808f, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		/* DMARSx */ +		.start	= 0xfe009000, +		.end	= 0xfe00900b, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		/* DMA error IRQ */ +		.start	= 78, +		.end	= 78, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		/* IRQ for channels 0-3 */ +		.start	= 48, +		.end	= 51, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		/* IRQ for channels 4-5 */ +		.start	= 76, +		.end	= 77, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +struct platform_device dma_device = { +	.name		= "sh-dma-engine", +	.id		= -1, +	.resource	= sh7722_dmae_resources, +	.num_resources	= ARRAY_SIZE(sh7722_dmae_resources), +	.dev		= { +		.platform_data	= &dma_platform_data, +	}, +	.archdata = { +		.hwblk_id = HWBLK_DMAC, +	}, +}; +  /* Serial */  static struct plat_sci_port scif0_platform_data = {  	.mapbase        = 0xffe00000,  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 80, 80, 80, 80 }, -	.clk		= "scif0",  };  static struct platform_device scif0_device = { @@ -42,7 +198,6 @@ static struct plat_sci_port scif1_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 81, 81, 81, 81 }, -	.clk		= "scif1",  };  static struct platform_device scif1_device = { @@ -58,7 +213,6 @@ static struct plat_sci_port scif2_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 82, 82, 82, 82 }, -	.clk		= "scif2",  };  static struct platform_device scif2_device = { @@ -253,17 +407,14 @@ static struct platform_device jpu_device = {  };  static struct sh_timer_config cmt_platform_data = { -	.name = "CMT",  	.channel_offset = 0x60,  	.timer_bit = 5, -	.clk = "cmt0",  	.clockevent_rating = 125,  	.clocksource_rating = 125,  };  static struct resource cmt_resources[] = {  	[0] = { -		.name	= "CMT",  		.start	= 0x044a0060,  		.end	= 0x044a006b,  		.flags	= IORESOURCE_MEM, @@ -288,16 +439,13 @@ static struct platform_device cmt_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "tmu0",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -322,16 +470,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "tmu0",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -356,15 +501,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "tmu0",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002b,  		.flags	= IORESOURCE_MEM, @@ -388,15 +530,36 @@ static struct platform_device tmu2_device = {  	},  }; -static struct sh_dmae_pdata dma_platform_data = { -	.mode = 0, +static struct siu_platform siu_platform_data = { +	.dma_dev	= &dma_device.dev, +	.dma_slave_tx_a	= SHDMA_SLAVE_SIUA_TX, +	.dma_slave_rx_a	= SHDMA_SLAVE_SIUA_RX, +	.dma_slave_tx_b	= SHDMA_SLAVE_SIUB_TX, +	.dma_slave_rx_b	= SHDMA_SLAVE_SIUB_RX,  }; -static struct platform_device dma_device = { -	.name		= "sh-dma-engine", +static struct resource siu_resources[] = { +	[0] = { +		.start	= 0xa4540000, +		.end	= 0xa454c10f, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= 108, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device siu_device = { +	.name		= "sh_siu",  	.id		= -1, -	.dev		= { -		.platform_data	= &dma_platform_data, +	.dev = { +		.platform_data	= &siu_platform_data, +	}, +	.resource	= siu_resources, +	.num_resources	= ARRAY_SIZE(siu_resources), +	.archdata = { +		.hwblk_id = HWBLK_SIU,  	},  }; @@ -414,6 +577,7 @@ static struct platform_device *sh7722_devices[] __initdata = {  	&vpu_device,  	&veu_device,  	&jpu_device, +	&siu_device,  	&dma_device,  }; @@ -446,6 +610,8 @@ void __init plat_early_device_setup(void)  enum {  	UNUSED=0, +	ENABLED, +	DISABLED,  	/* interrupt sources */  	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, @@ -461,7 +627,6 @@ enum {  	SCIF0, SCIF1, SCIF2, SIOF0, SIOF1, SIO,  	FLCTL_FLSTEI, FLCTL_FLENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I,  	I2C_ALI, I2C_TACKI, I2C_WAITI, I2C_DTEI, -	SDHI0, SDHI1, SDHI2, SDHI3,  	CMT, TSIF, SIU, TWODG,  	TMU0, TMU1, TMU2,  	IRDA, JPU, LCDC, @@ -494,8 +659,8 @@ static struct intc_vect vectors[] __initdata = {  	INTC_VECT(FLCTL_FLTREQ0I, 0xdc0), INTC_VECT(FLCTL_FLTREQ1I, 0xde0),  	INTC_VECT(I2C_ALI, 0xe00), INTC_VECT(I2C_TACKI, 0xe20),  	INTC_VECT(I2C_WAITI, 0xe40), INTC_VECT(I2C_DTEI, 0xe60), -	INTC_VECT(SDHI0, 0xe80), INTC_VECT(SDHI1, 0xea0), -	INTC_VECT(SDHI2, 0xec0), INTC_VECT(SDHI3, 0xee0), +	INTC_VECT(SDHI, 0xe80), INTC_VECT(SDHI, 0xea0), +	INTC_VECT(SDHI, 0xec0), INTC_VECT(SDHI, 0xee0),  	INTC_VECT(CMT, 0xf00), INTC_VECT(TSIF, 0xf20),  	INTC_VECT(SIU, 0xf80), INTC_VECT(TWODG, 0xfa0),  	INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420), @@ -513,7 +678,6 @@ static struct intc_group groups[] __initdata = {  	INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLENDI,  		   FLCTL_FLTREQ0I, FLCTL_FLTREQ1I),  	INTC_GROUP(I2C, I2C_ALI, I2C_TACKI, I2C_WAITI, I2C_DTEI), -	INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2, SDHI3),  };  static struct intc_mask_reg mask_registers[] __initdata = { @@ -535,7 +699,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	  { I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,  	    FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLENDI, FLCTL_FLSTEI } },  	{ 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */ -	  { SDHI3, SDHI2, SDHI1, SDHI0, 0, 0, TWODG, SIU } }, +	  { DISABLED, DISABLED, ENABLED, ENABLED, 0, 0, TWODG, SIU } },  	{ 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */  	  { 0, 0, 0, CMT, 0, USB_USBI1, USB_USBI0, } },  	{ 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */ @@ -573,9 +737,13 @@ static struct intc_mask_reg ack_registers[] __initdata = {  	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },  }; -static DECLARE_INTC_DESC_ACK(intc_desc, "sh7722", vectors, groups, -			     mask_registers, prio_registers, sense_registers, -			     ack_registers); +static struct intc_desc intc_desc __initdata = { +	.name = "sh7722", +	.force_enable = ENABLED, +	.force_disable = DISABLED, +	.hw = INTC_HW_DESC(vectors, groups, mask_registers, +			   prio_registers, sense_registers, ack_registers), +};  void __init plat_irq_setup(void)  { diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c index 772b9265d0e..0eadefdbbba 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c @@ -26,7 +26,6 @@ static struct plat_sci_port scif0_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 80, 80, 80, 80 }, -	.clk		= "scif0",  };  static struct platform_device scif0_device = { @@ -42,7 +41,6 @@ static struct plat_sci_port scif1_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 81, 81, 81, 81 }, -	.clk		= "scif1",  };  static struct platform_device scif1_device = { @@ -58,7 +56,6 @@ static struct plat_sci_port scif2_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 82, 82, 82, 82 }, -	.clk		= "scif2",  };  static struct platform_device scif2_device = { @@ -74,7 +71,6 @@ static struct plat_sci_port scif3_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIFA,  	.irqs           = { 56, 56, 56, 56 }, -	.clk		= "scif3",  };  static struct platform_device scif3_device = { @@ -90,7 +86,6 @@ static struct plat_sci_port scif4_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIFA,  	.irqs           = { 88, 88, 88, 88 }, -	.clk		= "scif4",  };  static struct platform_device scif4_device = { @@ -106,7 +101,6 @@ static struct plat_sci_port scif5_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIFA,  	.irqs           = { 109, 109, 109, 109 }, -	.clk		= "scif5",  };  static struct platform_device scif5_device = { @@ -211,17 +205,14 @@ static struct platform_device veu1_device = {  };  static struct sh_timer_config cmt_platform_data = { -	.name = "CMT",  	.channel_offset = 0x60,  	.timer_bit = 5, -	.clk = "cmt0",  	.clockevent_rating = 125,  	.clocksource_rating = 125,  };  static struct resource cmt_resources[] = {  	[0] = { -		.name	= "CMT",  		.start	= 0x044a0060,  		.end	= 0x044a006b,  		.flags	= IORESOURCE_MEM, @@ -246,16 +237,13 @@ static struct platform_device cmt_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "tmu0",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -280,16 +268,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "tmu0",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -314,15 +299,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "tmu0",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002b,  		.flags	= IORESOURCE_MEM, @@ -347,15 +329,12 @@ static struct platform_device tmu2_device = {  };  static struct sh_timer_config tmu3_platform_data = { -	.name = "TMU3",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "tmu1",  };  static struct resource tmu3_resources[] = {  	[0] = { -		.name	= "TMU3",  		.start	= 0xffd90008,  		.end	= 0xffd90013,  		.flags	= IORESOURCE_MEM, @@ -380,15 +359,12 @@ static struct platform_device tmu3_device = {  };  static struct sh_timer_config tmu4_platform_data = { -	.name = "TMU4",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "tmu1",  };  static struct resource tmu4_resources[] = {  	[0] = { -		.name	= "TMU4",  		.start	= 0xffd90014,  		.end	= 0xffd9001f,  		.flags	= IORESOURCE_MEM, @@ -413,15 +389,12 @@ static struct platform_device tmu4_device = {  };  static struct sh_timer_config tmu5_platform_data = { -	.name = "TMU5",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "tmu1",  };  static struct resource tmu5_resources[] = {  	[0] = { -		.name	= "TMU5",  		.start	= 0xffd90020,  		.end	= 0xffd9002b,  		.flags	= IORESOURCE_MEM, @@ -592,14 +565,17 @@ void __init plat_early_device_setup(void)  #define RAMCR_CACHE_L2FC	0x0002  #define RAMCR_CACHE_L2E		0x0001  #define L2_CACHE_ENABLE		(RAMCR_CACHE_L2E|RAMCR_CACHE_L2FC) -void __uses_jump_to_uncached l2_cache_init(void) + +void l2_cache_init(void)  {  	/* Enable L2 cache */ -	ctrl_outl(L2_CACHE_ENABLE, RAMCR); +	__raw_writel(L2_CACHE_ENABLE, RAMCR);  }  enum {  	UNUSED=0, +	ENABLED, +	DISABLED,  	/* interrupt sources */  	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, @@ -622,7 +598,6 @@ enum {  	SCIFA_SCIFA1,  	FLCTL_FLSTEI,FLCTL_FLTENDI,FLCTL_FLTREQ0I,FLCTL_FLTREQ1I,  	I2C_ALI,I2C_TACKI,I2C_WAITI,I2C_DTEI, -	SDHI0_SDHII0,SDHI0_SDHII1,SDHI0_SDHII2,  	CMT_CMTI,  	TSIF_TSIFI,  	SIU_SIUI, @@ -630,7 +605,6 @@ enum {  	TMU0_TUNI0, TMU0_TUNI1, TMU0_TUNI2,  	IRDA_IRDAI,  	ATAPI_ATAPII, -	SDHI1_SDHII0,SDHI1_SDHII1,SDHI1_SDHII2,  	VEU2H1_VEU2HI,  	LCDC_LCDCI,  	TMU1_TUNI0,TMU1_TUNI1,TMU1_TUNI2, @@ -701,9 +675,9 @@ static struct intc_vect vectors[] __initdata = {  	INTC_VECT(I2C_WAITI,0xE40),  	INTC_VECT(I2C_DTEI,0xE60), -	INTC_VECT(SDHI0_SDHII0,0xE80), -	INTC_VECT(SDHI0_SDHII1,0xEA0), -	INTC_VECT(SDHI0_SDHII2,0xEC0), +	INTC_VECT(SDHI0, 0xE80), +	INTC_VECT(SDHI0, 0xEA0), +	INTC_VECT(SDHI0, 0xEC0),  	INTC_VECT(CMT_CMTI,0xF00),  	INTC_VECT(TSIF_TSIFI,0xF20), @@ -717,9 +691,9 @@ static struct intc_vect vectors[] __initdata = {  	INTC_VECT(IRDA_IRDAI,0x480),  	INTC_VECT(ATAPI_ATAPII,0x4A0), -	INTC_VECT(SDHI1_SDHII0,0x4E0), -	INTC_VECT(SDHI1_SDHII1,0x500), -	INTC_VECT(SDHI1_SDHII2,0x520), +	INTC_VECT(SDHI1, 0x4E0), +	INTC_VECT(SDHI1, 0x500), +	INTC_VECT(SDHI1, 0x520),  	INTC_VECT(VEU2H1_VEU2HI,0x560),  	INTC_VECT(LCDC_LCDCI,0x580), @@ -738,15 +712,14 @@ static struct intc_group groups[] __initdata = {  	INTC_GROUP(FLCTL,FLCTL_FLSTEI,FLCTL_FLTENDI,FLCTL_FLTREQ0I,FLCTL_FLTREQ1I),  	INTC_GROUP(I2C,I2C_ALI,I2C_TACKI,I2C_WAITI,I2C_DTEI),  	INTC_GROUP(_2DG, _2DG_TRI,_2DG_INI,_2DG_CEI), -	INTC_GROUP(SDHI1, SDHI1_SDHII0,SDHI1_SDHII1,SDHI1_SDHII2),  	INTC_GROUP(RTC, RTC_ATI,RTC_PRI,RTC_CUI),  	INTC_GROUP(DMAC1B, DMAC1B_DEI4,DMAC1B_DEI5,DMAC1B_DADERR), -	INTC_GROUP(SDHI0,SDHI0_SDHII0,SDHI0_SDHII1,SDHI0_SDHII2),  };  static struct intc_mask_reg mask_registers[] __initdata = {  	{ 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */ -	  { 0,  TMU1_TUNI2,TMU1_TUNI1,TMU1_TUNI0,0,SDHI1_SDHII2,SDHI1_SDHII1,SDHI1_SDHII0} }, +	  { 0, TMU1_TUNI2, TMU1_TUNI1, TMU1_TUNI0, +	    0, DISABLED, ENABLED, ENABLED } },  	{ 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */  	  { VIO_VOUI, VIO_VEU2HI,VIO_BEUI,VIO_CEUI,DMAC0A_DEI3,DMAC0A_DEI2,DMAC0A_DEI1,DMAC0A_DEI0 } },  	{ 0xa4080088, 0xa40800c8, 8, /* IMR2 / IMCR2 */ @@ -763,7 +736,8 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	  { I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,  	    FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } },  	{ 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */ -	  { 0,SDHI0_SDHII2,SDHI0_SDHII1,SDHI0_SDHII0,0,0,SCIFA_SCIFA2,SIU_SIUI } }, +	  { 0, DISABLED, ENABLED, ENABLED, +	    0, 0, SCIFA_SCIFA2, SIU_SIUI } },  	{ 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */  	  { 0, 0, 0, CMT_CMTI, 0, 0, USB_USI0,0 } },  	{ 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */ @@ -803,9 +777,13 @@ static struct intc_mask_reg ack_registers[] __initdata = {  	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },  }; -static DECLARE_INTC_DESC_ACK(intc_desc, "sh7723", vectors, groups, -			     mask_registers, prio_registers, sense_registers, -			     ack_registers); +static struct intc_desc intc_desc __initdata = { +	.name = "sh7723", +	.force_enable = ENABLED, +	.force_disable = DISABLED, +	.hw = INTC_HW_DESC(vectors, groups, mask_registers, +			   prio_registers, sense_registers, ack_registers), +};  void __init plat_irq_setup(void)  { diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c index d32f96c1cc1..79c556e5626 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c @@ -18,26 +18,239 @@  #include <linux/mm.h>  #include <linux/serial_sci.h>  #include <linux/uio_driver.h> +#include <linux/sh_dma.h>  #include <linux/sh_timer.h>  #include <linux/io.h>  #include <linux/notifier.h> +  #include <asm/suspend.h>  #include <asm/clock.h> -#include <asm/dma-sh.h>  #include <asm/mmzone.h> + +#include <cpu/dma-register.h>  #include <cpu/sh7724.h>  /* DMA */ +static const struct sh_dmae_slave_config sh7724_dmae_slaves[] = { +	{ +		.slave_id	= SHDMA_SLAVE_SCIF0_TX, +		.addr		= 0xffe0000c, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x21, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF0_RX, +		.addr		= 0xffe00014, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x22, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF1_TX, +		.addr		= 0xffe1000c, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x25, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF1_RX, +		.addr		= 0xffe10014, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x26, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF2_TX, +		.addr		= 0xffe2000c, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x29, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF2_RX, +		.addr		= 0xffe20014, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x2a, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF3_TX, +		.addr		= 0xa4e30020, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x2d, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF3_RX, +		.addr		= 0xa4e30024, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x2e, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF4_TX, +		.addr		= 0xa4e40020, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x31, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF4_RX, +		.addr		= 0xa4e40024, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x32, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF5_TX, +		.addr		= 0xa4e50020, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x35, +	}, { +		.slave_id	= SHDMA_SLAVE_SCIF5_RX, +		.addr		= 0xa4e50024, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x36, +	}, { +		.slave_id	= SHDMA_SLAVE_SDHI0_TX, +		.addr		= 0x04ce0030, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xc1, +	}, { +		.slave_id	= SHDMA_SLAVE_SDHI0_RX, +		.addr		= 0x04ce0030, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xc2, +	}, { +		.slave_id	= SHDMA_SLAVE_SDHI1_TX, +		.addr		= 0x04cf0030, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xc9, +	}, { +		.slave_id	= SHDMA_SLAVE_SDHI1_RX, +		.addr		= 0x04cf0030, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xca, +	}, +}; + +static const struct sh_dmae_channel sh7724_dmae_channels[] = { +	{ +		.offset = 0, +		.dmars = 0, +		.dmars_bit = 0, +	}, { +		.offset = 0x10, +		.dmars = 0, +		.dmars_bit = 8, +	}, { +		.offset = 0x20, +		.dmars = 4, +		.dmars_bit = 0, +	}, { +		.offset = 0x30, +		.dmars = 4, +		.dmars_bit = 8, +	}, { +		.offset = 0x50, +		.dmars = 8, +		.dmars_bit = 0, +	}, { +		.offset = 0x60, +		.dmars = 8, +		.dmars_bit = 8, +	} +}; + +static const unsigned int ts_shift[] = TS_SHIFT; +  static struct sh_dmae_pdata dma_platform_data = { -	.mode = SHDMA_DMAOR1, +	.slave		= sh7724_dmae_slaves, +	.slave_num	= ARRAY_SIZE(sh7724_dmae_slaves), +	.channel	= sh7724_dmae_channels, +	.channel_num	= ARRAY_SIZE(sh7724_dmae_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT,  }; -static struct platform_device dma_device = { -	.name	= "sh-dma-engine", -	.id		= -1, -	.dev	= { +/* Resource order important! */ +static struct resource sh7724_dmae0_resources[] = { +	{ +		/* Channel registers and DMAOR */ +		.start	= 0xfe008020, +		.end	= 0xfe00808f, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		/* DMARSx */ +		.start	= 0xfe009000, +		.end	= 0xfe00900b, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		/* DMA error IRQ */ +		.start	= 78, +		.end	= 78, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		/* IRQ for channels 0-3 */ +		.start	= 48, +		.end	= 51, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		/* IRQ for channels 4-5 */ +		.start	= 76, +		.end	= 77, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +/* Resource order important! */ +static struct resource sh7724_dmae1_resources[] = { +	{ +		/* Channel registers and DMAOR */ +		.start	= 0xfdc08020, +		.end	= 0xfdc0808f, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		/* DMARSx */ +		.start	= 0xfdc09000, +		.end	= 0xfdc0900b, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		/* DMA error IRQ */ +		.start	= 74, +		.end	= 74, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		/* IRQ for channels 0-3 */ +		.start	= 40, +		.end	= 43, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		/* IRQ for channels 4-5 */ +		.start	= 72, +		.end	= 73, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device dma0_device = { +	.name		= "sh-dma-engine", +	.id		= 0, +	.resource	= sh7724_dmae0_resources, +	.num_resources	= ARRAY_SIZE(sh7724_dmae0_resources), +	.dev		= {  		.platform_data	= &dma_platform_data,  	}, +	.archdata = { +		.hwblk_id = HWBLK_DMAC0, +	}, +}; + +static struct platform_device dma1_device = { +	.name		= "sh-dma-engine", +	.id		= 1, +	.resource	= sh7724_dmae1_resources, +	.num_resources	= ARRAY_SIZE(sh7724_dmae1_resources), +	.dev		= { +		.platform_data	= &dma_platform_data, +	}, +	.archdata = { +		.hwblk_id = HWBLK_DMAC1, +	},  };  /* Serial */ @@ -46,7 +259,6 @@ static struct plat_sci_port scif0_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 80, 80, 80, 80 }, -	.clk		= "scif0",  };  static struct platform_device scif0_device = { @@ -62,7 +274,6 @@ static struct plat_sci_port scif1_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 81, 81, 81, 81 }, -	.clk		= "scif1",  };  static struct platform_device scif1_device = { @@ -78,7 +289,6 @@ static struct plat_sci_port scif2_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIF,  	.irqs           = { 82, 82, 82, 82 }, -	.clk		= "scif2",  };  static struct platform_device scif2_device = { @@ -94,7 +304,6 @@ static struct plat_sci_port scif3_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIFA,  	.irqs           = { 56, 56, 56, 56 }, -	.clk		= "scif3",  };  static struct platform_device scif3_device = { @@ -110,7 +319,6 @@ static struct plat_sci_port scif4_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIFA,  	.irqs           = { 88, 88, 88, 88 }, -	.clk		= "scif4",  };  static struct platform_device scif4_device = { @@ -126,7 +334,6 @@ static struct plat_sci_port scif5_platform_data = {  	.flags          = UPF_BOOT_AUTOCONF,  	.type           = PORT_SCIFA,  	.irqs           = { 109, 109, 109, 109 }, -	.clk		= "scif5",  };  static struct platform_device scif5_device = { @@ -318,17 +525,14 @@ static struct platform_device veu1_device = {  };  static struct sh_timer_config cmt_platform_data = { -	.name = "CMT",  	.channel_offset = 0x60,  	.timer_bit = 5, -	.clk = "cmt0",  	.clockevent_rating = 125,  	.clocksource_rating = 200,  };  static struct resource cmt_resources[] = {  	[0] = { -		.name	= "CMT",  		.start	= 0x044a0060,  		.end	= 0x044a006b,  		.flags	= IORESOURCE_MEM, @@ -353,16 +557,13 @@ static struct platform_device cmt_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "tmu0",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -387,16 +588,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "tmu0",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -421,15 +619,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "tmu0",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002b,  		.flags	= IORESOURCE_MEM, @@ -455,15 +650,12 @@ static struct platform_device tmu2_device = {  static struct sh_timer_config tmu3_platform_data = { -	.name = "TMU3",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "tmu1",  };  static struct resource tmu3_resources[] = {  	[0] = { -		.name	= "TMU3",  		.start	= 0xffd90008,  		.end	= 0xffd90013,  		.flags	= IORESOURCE_MEM, @@ -488,15 +680,12 @@ static struct platform_device tmu3_device = {  };  static struct sh_timer_config tmu4_platform_data = { -	.name = "TMU4",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "tmu1",  };  static struct resource tmu4_resources[] = {  	[0] = { -		.name	= "TMU4",  		.start	= 0xffd90014,  		.end	= 0xffd9001f,  		.flags	= IORESOURCE_MEM, @@ -521,15 +710,12 @@ static struct platform_device tmu4_device = {  };  static struct sh_timer_config tmu5_platform_data = { -	.name = "TMU5",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "tmu1",  };  static struct resource tmu5_resources[] = {  	[0] = { -		.name	= "TMU5",  		.start	= 0xffd90020,  		.end	= 0xffd9002b,  		.flags	= IORESOURCE_MEM, @@ -663,7 +849,8 @@ static struct platform_device *sh7724_devices[] __initdata = {  	&tmu3_device,  	&tmu4_device,  	&tmu5_device, -	&dma_device, +	&dma0_device, +	&dma1_device,  	&rtc_device,  	&iic0_device,  	&iic1_device, @@ -714,14 +901,17 @@ void __init plat_early_device_setup(void)  #define RAMCR_CACHE_L2FC	0x0002  #define RAMCR_CACHE_L2E		0x0001  #define L2_CACHE_ENABLE		(RAMCR_CACHE_L2E|RAMCR_CACHE_L2FC) -void __uses_jump_to_uncached l2_cache_init(void) + +void l2_cache_init(void)  {  	/* Enable L2 cache */ -	ctrl_outl(L2_CACHE_ENABLE, RAMCR); +	__raw_writel(L2_CACHE_ENABLE, RAMCR);  }  enum {  	UNUSED = 0, +	ENABLED, +	DISABLED,  	/* interrupt sources */  	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, @@ -750,14 +940,12 @@ enum {  	ETHI,  	I2C1_ALI, I2C1_TACKI, I2C1_WAITI, I2C1_DTEI,  	I2C0_ALI, I2C0_TACKI, I2C0_WAITI, I2C0_DTEI, -	SDHI0_SDHII0, SDHI0_SDHII1, SDHI0_SDHII2, SDHI0_SDHII3,  	CMT,  	TSIF,  	FSI,  	SCIFA5,  	TMU0_TUNI0, TMU0_TUNI1, TMU0_TUNI2,  	IRDA, -	SDHI1_SDHII0, SDHI1_SDHII1, SDHI1_SDHII2,  	JPU,  	_2DDMAC,  	MMC_MMC2I, MMC_MMC3I, @@ -839,10 +1027,10 @@ static struct intc_vect vectors[] __initdata = {  	INTC_VECT(I2C0_WAITI, 0xE40),  	INTC_VECT(I2C0_DTEI, 0xE60), -	INTC_VECT(SDHI0_SDHII0, 0xE80), -	INTC_VECT(SDHI0_SDHII1, 0xEA0), -	INTC_VECT(SDHI0_SDHII2, 0xEC0), -	INTC_VECT(SDHI0_SDHII3, 0xEE0), +	INTC_VECT(SDHI0, 0xE80), +	INTC_VECT(SDHI0, 0xEA0), +	INTC_VECT(SDHI0, 0xEC0), +	INTC_VECT(SDHI0, 0xEE0),  	INTC_VECT(CMT,    0xF00),  	INTC_VECT(TSIF,   0xF20), @@ -855,9 +1043,9 @@ static struct intc_vect vectors[] __initdata = {  	INTC_VECT(IRDA,    0x480), -	INTC_VECT(SDHI1_SDHII0, 0x4E0), -	INTC_VECT(SDHI1_SDHII1, 0x500), -	INTC_VECT(SDHI1_SDHII2, 0x520), +	INTC_VECT(SDHI1, 0x4E0), +	INTC_VECT(SDHI1, 0x500), +	INTC_VECT(SDHI1, 0x520),  	INTC_VECT(JPU, 0x560),  	INTC_VECT(_2DDMAC, 0x4A0), @@ -883,8 +1071,6 @@ static struct intc_group groups[] __initdata = {  	INTC_GROUP(DMAC0B, DMAC0B_DEI4, DMAC0B_DEI5, DMAC0B_DADERR),  	INTC_GROUP(I2C0, I2C0_ALI, I2C0_TACKI, I2C0_WAITI, I2C0_DTEI),  	INTC_GROUP(I2C1, I2C1_ALI, I2C1_TACKI, I2C1_WAITI, I2C1_DTEI), -	INTC_GROUP(SDHI0, SDHI0_SDHII0, SDHI0_SDHII1, SDHI0_SDHII2, SDHI0_SDHII3), -	INTC_GROUP(SDHI1, SDHI1_SDHII0, SDHI1_SDHII1, SDHI1_SDHII2),  	INTC_GROUP(SPU, SPU_SPUI0, SPU_SPUI1),  	INTC_GROUP(MMCIF, MMC_MMC2I, MMC_MMC3I),  }; @@ -892,7 +1078,7 @@ static struct intc_group groups[] __initdata = {  static struct intc_mask_reg mask_registers[] __initdata = {  	{ 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */  	  { 0, TMU1_TUNI2, TMU1_TUNI1, TMU1_TUNI0, -	    0, SDHI1_SDHII2, SDHI1_SDHII1, SDHI1_SDHII0 } }, +	    0, DISABLED, ENABLED, ENABLED } },  	{ 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */  	  { VIO_VOU, VIO_VEU1, VIO_BEU0, VIO_CEU0,  	    DMAC0A_DEI3, DMAC0A_DEI2, DMAC0A_DEI1, DMAC0A_DEI0 } }, @@ -914,7 +1100,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	  { I2C0_DTEI, I2C0_WAITI, I2C0_TACKI, I2C0_ALI,  	    I2C1_DTEI, I2C1_WAITI, I2C1_TACKI, I2C1_ALI } },  	{ 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */ -	  { SDHI0_SDHII3, SDHI0_SDHII2, SDHI0_SDHII1, SDHI0_SDHII0, +	  { DISABLED, DISABLED, ENABLED, ENABLED,  	    0, 0, SCIFA5, FSI } },  	{ 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */  	  { 0, 0, 0, CMT, 0, USB1, USB0, 0 } }, @@ -961,9 +1147,13 @@ static struct intc_mask_reg ack_registers[] __initdata = {  	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },  }; -static DECLARE_INTC_DESC_ACK(intc_desc, "sh7724", vectors, groups, -			     mask_registers, prio_registers, sense_registers, -			     ack_registers); +static struct intc_desc intc_desc __initdata = { +	.name = "sh7724", +	.force_enable = ENABLED, +	.force_disable = DISABLED, +	.hw = INTC_HW_DESC(vectors, groups, mask_registers, +			   prio_registers, sense_registers, ack_registers), +};  void __init plat_irq_setup(void)  { diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c index 37e32efbbaa..444aca95b20 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c @@ -63,16 +63,13 @@ static struct platform_device scif4_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xfe430008,  		.end	= 0xfe430013,  		.flags	= IORESOURCE_MEM, @@ -94,16 +91,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xfe430014,  		.end	= 0xfe43001f,  		.flags	= IORESOURCE_MEM, @@ -487,17 +481,17 @@ static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7757-irl4567", vectors_irl4567,  void __init plat_irq_setup(void)  {  	/* disable IRQ3-0 + IRQ7-4 */ -	ctrl_outl(0xff000000, INTC_INTMSK0); +	__raw_writel(0xff000000, INTC_INTMSK0);  	/* disable IRL3-0 + IRL7-4 */ -	ctrl_outl(0xc0000000, INTC_INTMSK1); -	ctrl_outl(0xfffefffe, INTC_INTMSK2); +	__raw_writel(0xc0000000, INTC_INTMSK1); +	__raw_writel(0xfffefffe, INTC_INTMSK2);  	/* select IRL mode for IRL3-0 + IRL7-4 */ -	ctrl_outl(ctrl_inl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); +	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);  	/* disable holding function, ie enable "SH-4 Mode" */ -	ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00200000, INTC_ICR0); +	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0);  	register_intc_controller(&intc_desc);  } @@ -507,32 +501,32 @@ void __init plat_irq_setup_pins(int mode)  	switch (mode) {  	case IRQ_MODE_IRQ7654:  		/* select IRQ mode for IRL7-4 */ -		ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00400000, INTC_ICR0); +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00400000, INTC_ICR0);  		register_intc_controller(&intc_desc_irq4567);  		break;  	case IRQ_MODE_IRQ3210:  		/* select IRQ mode for IRL3-0 */ -		ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00800000, INTC_ICR0); +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0);  		register_intc_controller(&intc_desc_irq0123);  		break;  	case IRQ_MODE_IRL7654:  		/* enable IRL7-4 but don't provide any masking */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); -		ctrl_outl(0x0000fffe, INTC_INTMSKCLR2); +		__raw_writel(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x0000fffe, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL3210:  		/* enable IRL0-3 but don't provide any masking */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); -		ctrl_outl(0xfffe0000, INTC_INTMSKCLR2); +		__raw_writel(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0xfffe0000, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL7654_MASK:  		/* enable IRL7-4 and mask using cpu intc controller */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x40000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_desc_irl4567);  		break;  	case IRQ_MODE_IRL3210_MASK:  		/* enable IRL0-3 and mask using cpu intc controller */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0x80000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_desc_irl0123);  		break;  	default: diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7763.c b/arch/sh/kernel/cpu/sh4a/setup-sh7763.c index 6aba26fec41..5b5f6b005fc 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7763.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7763.c @@ -131,16 +131,13 @@ static struct platform_device usbf_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -162,16 +159,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -193,15 +187,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002f,  		.flags	= IORESOURCE_MEM, @@ -223,15 +214,12 @@ static struct platform_device tmu2_device = {  };  static struct sh_timer_config tmu3_platform_data = { -	.name = "TMU3",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  };  static struct resource tmu3_resources[] = {  	[0] = { -		.name	= "TMU3",  		.start	= 0xffd88008,  		.end	= 0xffd88013,  		.flags	= IORESOURCE_MEM, @@ -253,15 +241,12 @@ static struct platform_device tmu3_device = {  };  static struct sh_timer_config tmu4_platform_data = { -	.name = "TMU4",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource tmu4_resources[] = {  	[0] = { -		.name	= "TMU4",  		.start	= 0xffd88014,  		.end	= 0xffd8801f,  		.flags	= IORESOURCE_MEM, @@ -283,15 +268,12 @@ static struct platform_device tmu4_device = {  };  static struct sh_timer_config tmu5_platform_data = { -	.name = "TMU5",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu5_resources[] = {  	[0] = { -		.name	= "TMU5",  		.start	= 0xffd88020,  		.end	= 0xffd8802b,  		.flags	= IORESOURCE_MEM, @@ -538,11 +520,11 @@ static DECLARE_INTC_DESC(intc_irl3210_desc, "sh7763-irl3210", irl_vectors,  void __init plat_irq_setup(void)  {  	/* disable IRQ7-0 */ -	ctrl_outl(0xff000000, INTC_INTMSK0); +	__raw_writel(0xff000000, INTC_INTMSK0);  	/* disable IRL3-0 + IRL7-4 */ -	ctrl_outl(0xc0000000, INTC_INTMSK1); -	ctrl_outl(0xfffefffe, INTC_INTMSK2); +	__raw_writel(0xc0000000, INTC_INTMSK1); +	__raw_writel(0xfffefffe, INTC_INTMSK2);  	register_intc_controller(&intc_desc);  } @@ -552,27 +534,27 @@ void __init plat_irq_setup_pins(int mode)  	switch (mode) {  	case IRQ_MODE_IRQ:  		/* select IRQ mode for IRL3-0 + IRL7-4 */ -		ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00c00000, INTC_ICR0); +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00c00000, INTC_ICR0);  		register_intc_controller(&intc_irq_desc);  		break;  	case IRQ_MODE_IRL7654:  		/* enable IRL7-4 but don't provide any masking */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); -		ctrl_outl(0x0000fffe, INTC_INTMSKCLR2); +		__raw_writel(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x0000fffe, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL3210:  		/* enable IRL0-3 but don't provide any masking */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); -		ctrl_outl(0xfffe0000, INTC_INTMSKCLR2); +		__raw_writel(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0xfffe0000, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL7654_MASK:  		/* enable IRL7-4 and mask using cpu intc controller */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x40000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_irl7654_desc);  		break;  	case IRQ_MODE_IRL3210_MASK:  		/* enable IRL0-3 and mask using cpu intc controller */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0x80000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_irl3210_desc);  		break;  	default: diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7770.c b/arch/sh/kernel/cpu/sh4a/setup-sh7770.c index c1643bc9590..7270d7fd676 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7770.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7770.c @@ -165,16 +165,13 @@ static struct platform_device scif9_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -196,16 +193,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -227,15 +221,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002f,  		.flags	= IORESOURCE_MEM, @@ -257,15 +248,12 @@ static struct platform_device tmu2_device = {  };  static struct sh_timer_config tmu3_platform_data = { -	.name = "TMU3",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  };  static struct resource tmu3_resources[] = {  	[0] = { -		.name	= "TMU3",  		.start	= 0xffd81008,  		.end	= 0xffd81013,  		.flags	= IORESOURCE_MEM, @@ -287,15 +275,12 @@ static struct platform_device tmu3_device = {  };  static struct sh_timer_config tmu4_platform_data = { -	.name = "TMU4",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource tmu4_resources[] = {  	[0] = { -		.name	= "TMU4",  		.start	= 0xffd81014,  		.end	= 0xffd8101f,  		.flags	= IORESOURCE_MEM, @@ -317,15 +302,12 @@ static struct platform_device tmu4_device = {  };  static struct sh_timer_config tmu5_platform_data = { -	.name = "TMU5",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu5_resources[] = {  	[0] = { -		.name	= "TMU5",  		.start	= 0xffd81020,  		.end	= 0xffd8102f,  		.flags	= IORESOURCE_MEM, @@ -347,15 +329,12 @@ static struct platform_device tmu5_device = {  };  static struct sh_timer_config tmu6_platform_data = { -	.name = "TMU6",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  };  static struct resource tmu6_resources[] = {  	[0] = { -		.name	= "TMU6",  		.start	= 0xffd82008,  		.end	= 0xffd82013,  		.flags	= IORESOURCE_MEM, @@ -377,15 +356,12 @@ static struct platform_device tmu6_device = {  };  static struct sh_timer_config tmu7_platform_data = { -	.name = "TMU7",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource tmu7_resources[] = {  	[0] = { -		.name	= "TMU7",  		.start	= 0xffd82014,  		.end	= 0xffd8201f,  		.flags	= IORESOURCE_MEM, @@ -407,15 +383,12 @@ static struct platform_device tmu7_device = {  };  static struct sh_timer_config tmu8_platform_data = { -	.name = "TMU8",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu8_resources[] = {  	[0] = { -		.name	= "TMU8",  		.start	= 0xffd82020,  		.end	= 0xffd8202b,  		.flags	= IORESOURCE_MEM, @@ -694,17 +667,17 @@ static DECLARE_INTC_DESC(intc_irl3210_desc, "sh7780-irl3210", irl_vectors,  void __init plat_irq_setup(void)  {  	/* disable IRQ7-0 */ -	ctrl_outl(0xff000000, INTC_INTMSK0); +	__raw_writel(0xff000000, INTC_INTMSK0);  	/* disable IRL3-0 + IRL7-4 */ -	ctrl_outl(0xc0000000, INTC_INTMSK1); -	ctrl_outl(0xfffefffe, INTC_INTMSK2); +	__raw_writel(0xc0000000, INTC_INTMSK1); +	__raw_writel(0xfffefffe, INTC_INTMSK2);  	/* select IRL mode for IRL3-0 + IRL7-4 */ -	ctrl_outl(ctrl_inl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); +	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);  	/* disable holding function, ie enable "SH-4 Mode" */ -	ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00200000, INTC_ICR0); +	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0);  	register_intc_controller(&intc_desc);  } @@ -714,27 +687,27 @@ void __init plat_irq_setup_pins(int mode)  	switch (mode) {  	case IRQ_MODE_IRQ:  		/* select IRQ mode for IRL3-0 + IRL7-4 */ -		ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00c00000, INTC_ICR0); +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00c00000, INTC_ICR0);  		register_intc_controller(&intc_irq_desc);  		break;  	case IRQ_MODE_IRL7654:  		/* enable IRL7-4 but don't provide any masking */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); -		ctrl_outl(0x0000fffe, INTC_INTMSKCLR2); +		__raw_writel(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x0000fffe, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL3210:  		/* enable IRL0-3 but don't provide any masking */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); -		ctrl_outl(0xfffe0000, INTC_INTMSKCLR2); +		__raw_writel(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0xfffe0000, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL7654_MASK:  		/* enable IRL7-4 and mask using cpu intc controller */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x40000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_irl7654_desc);  		break;  	case IRQ_MODE_IRL3210_MASK:  		/* enable IRL0-3 and mask using cpu intc controller */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0x80000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_irl3210_desc);  		break;  	default: diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c index c310558490d..0f414864f76 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c @@ -12,8 +12,10 @@  #include <linux/serial.h>  #include <linux/io.h>  #include <linux/serial_sci.h> +#include <linux/sh_dma.h>  #include <linux/sh_timer.h> -#include <asm/dma-sh.h> + +#include <cpu/dma-register.h>  static struct plat_sci_port scif0_platform_data = {  	.mapbase	= 0xffe00000, @@ -46,16 +48,13 @@ static struct platform_device scif1_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -77,16 +76,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -108,15 +104,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002f,  		.flags	= IORESOURCE_MEM, @@ -138,15 +131,12 @@ static struct platform_device tmu2_device = {  };  static struct sh_timer_config tmu3_platform_data = { -	.name = "TMU3",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  };  static struct resource tmu3_resources[] = {  	[0] = { -		.name	= "TMU3",  		.start	= 0xffdc0008,  		.end	= 0xffdc0013,  		.flags	= IORESOURCE_MEM, @@ -168,15 +158,12 @@ static struct platform_device tmu3_device = {  };  static struct sh_timer_config tmu4_platform_data = { -	.name = "TMU4",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource tmu4_resources[] = {  	[0] = { -		.name	= "TMU4",  		.start	= 0xffdc0014,  		.end	= 0xffdc001f,  		.flags	= IORESOURCE_MEM, @@ -198,15 +185,12 @@ static struct platform_device tmu4_device = {  };  static struct sh_timer_config tmu5_platform_data = { -	.name = "TMU5",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu5_resources[] = {  	[0] = { -		.name	= "TMU5",  		.start	= 0xffdc0020,  		.end	= 0xffdc002b,  		.flags	= IORESOURCE_MEM, @@ -247,15 +231,131 @@ static struct platform_device rtc_device = {  	.resource	= rtc_resources,  }; -static struct sh_dmae_pdata dma_platform_data = { -	.mode = (SHDMA_MIX_IRQ | SHDMA_DMAOR1), +/* DMA */ +static const struct sh_dmae_channel sh7780_dmae0_channels[] = { +	{ +		.offset = 0, +		.dmars = 0, +		.dmars_bit = 0, +	}, { +		.offset = 0x10, +		.dmars = 0, +		.dmars_bit = 8, +	}, { +		.offset = 0x20, +		.dmars = 4, +		.dmars_bit = 0, +	}, { +		.offset = 0x30, +		.dmars = 4, +		.dmars_bit = 8, +	}, { +		.offset = 0x50, +		.dmars = 8, +		.dmars_bit = 0, +	}, { +		.offset = 0x60, +		.dmars = 8, +		.dmars_bit = 8, +	} +}; + +static const struct sh_dmae_channel sh7780_dmae1_channels[] = { +	{ +		.offset = 0, +	}, { +		.offset = 0x10, +	}, { +		.offset = 0x20, +	}, { +		.offset = 0x30, +	}, { +		.offset = 0x50, +	}, { +		.offset = 0x60, +	} +}; + +static const unsigned int ts_shift[] = TS_SHIFT; + +static struct sh_dmae_pdata dma0_platform_data = { +	.channel	= sh7780_dmae0_channels, +	.channel_num	= ARRAY_SIZE(sh7780_dmae0_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT, +}; + +static struct sh_dmae_pdata dma1_platform_data = { +	.channel	= sh7780_dmae1_channels, +	.channel_num	= ARRAY_SIZE(sh7780_dmae1_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT, +}; + +static struct resource sh7780_dmae0_resources[] = { +	[0] = { +		/* Channel registers and DMAOR */ +		.start	= 0xfc808020, +		.end	= 0xfc80808f, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		/* DMARSx */ +		.start	= 0xfc809000, +		.end	= 0xfc80900b, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		/* Real DMA error IRQ is 38, and channel IRQs are 34-37, 44-45 */ +		.start	= 34, +		.end	= 34, +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +}; + +static struct resource sh7780_dmae1_resources[] = { +	[0] = { +		/* Channel registers and DMAOR */ +		.start	= 0xfc818020, +		.end	= 0xfc81808f, +		.flags	= IORESOURCE_MEM, +	}, +	/* DMAC1 has no DMARS */ +	{ +		/* Real DMA error IRQ is 38, and channel IRQs are 46-47, 92-95 */ +		.start	= 46, +		.end	= 46, +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	},  }; -static struct platform_device dma_device = { +static struct platform_device dma0_device = {  	.name           = "sh-dma-engine", -	.id             = -1, +	.id             = 0, +	.resource	= sh7780_dmae0_resources, +	.num_resources	= ARRAY_SIZE(sh7780_dmae0_resources),  	.dev            = { -		.platform_data  = &dma_platform_data, +		.platform_data	= &dma0_platform_data, +	}, +}; + +static struct platform_device dma1_device = { +	.name		= "sh-dma-engine", +	.id		= 1, +	.resource	= sh7780_dmae1_resources, +	.num_resources	= ARRAY_SIZE(sh7780_dmae1_resources), +	.dev		= { +		.platform_data	= &dma1_platform_data,  	},  }; @@ -269,7 +369,8 @@ static struct platform_device *sh7780_devices[] __initdata = {  	&tmu4_device,  	&tmu5_device,  	&rtc_device, -	&dma_device, +	&dma0_device, +	&dma1_device,  };  static int __init sh7780_devices_setup(void) @@ -461,17 +562,17 @@ static DECLARE_INTC_DESC(intc_irl3210_desc, "sh7780-irl3210", irl_vectors,  void __init plat_irq_setup(void)  {  	/* disable IRQ7-0 */ -	ctrl_outl(0xff000000, INTC_INTMSK0); +	__raw_writel(0xff000000, INTC_INTMSK0);  	/* disable IRL3-0 + IRL7-4 */ -	ctrl_outl(0xc0000000, INTC_INTMSK1); -	ctrl_outl(0xfffefffe, INTC_INTMSK2); +	__raw_writel(0xc0000000, INTC_INTMSK1); +	__raw_writel(0xfffefffe, INTC_INTMSK2);  	/* select IRL mode for IRL3-0 + IRL7-4 */ -	ctrl_outl(ctrl_inl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); +	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);  	/* disable holding function, ie enable "SH-4 Mode" */ -	ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00200000, INTC_ICR0); +	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0);  	register_intc_controller(&intc_desc);  } @@ -481,27 +582,27 @@ void __init plat_irq_setup_pins(int mode)  	switch (mode) {  	case IRQ_MODE_IRQ:  		/* select IRQ mode for IRL3-0 + IRL7-4 */ -		ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00c00000, INTC_ICR0); +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00c00000, INTC_ICR0);  		register_intc_controller(&intc_irq_desc);  		break;  	case IRQ_MODE_IRL7654:  		/* enable IRL7-4 but don't provide any masking */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); -		ctrl_outl(0x0000fffe, INTC_INTMSKCLR2); +		__raw_writel(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x0000fffe, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL3210:  		/* enable IRL0-3 but don't provide any masking */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); -		ctrl_outl(0xfffe0000, INTC_INTMSKCLR2); +		__raw_writel(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0xfffe0000, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL7654_MASK:  		/* enable IRL7-4 and mask using cpu intc controller */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x40000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_irl7654_desc);  		break;  	case IRQ_MODE_IRL3210_MASK:  		/* enable IRL0-3 and mask using cpu intc controller */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0x80000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_irl3210_desc);  		break;  	default: diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c index f685b9b2199..c9a572bc6dc 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c @@ -13,16 +13,18 @@  #include <linux/serial_sci.h>  #include <linux/io.h>  #include <linux/mm.h> +#include <linux/sh_dma.h>  #include <linux/sh_timer.h> -#include <asm/dma-sh.h> +  #include <asm/mmzone.h> +#include <cpu/dma-register.h> +  static struct plat_sci_port scif0_platform_data = {  	.mapbase	= 0xffea0000,  	.flags		= UPF_BOOT_AUTOCONF,  	.type		= PORT_SCIF,  	.irqs		= { 40, 40, 40, 40 }, -	.clk		= "scif_fck",  };  static struct platform_device scif0_device = { @@ -38,7 +40,6 @@ static struct plat_sci_port scif1_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.type		= PORT_SCIF,  	.irqs		= { 44, 44, 44, 44 }, -	.clk		= "scif_fck",  };  static struct platform_device scif1_device = { @@ -54,7 +55,6 @@ static struct plat_sci_port scif2_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.type		= PORT_SCIF,  	.irqs		= { 60, 60, 60, 60 }, -	.clk		= "scif_fck",  };  static struct platform_device scif2_device = { @@ -70,7 +70,6 @@ static struct plat_sci_port scif3_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.type		= PORT_SCIF,  	.irqs		= { 61, 61, 61, 61 }, -	.clk		= "scif_fck",  };  static struct platform_device scif3_device = { @@ -86,7 +85,6 @@ static struct plat_sci_port scif4_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.type		= PORT_SCIF,  	.irqs		= { 62, 62, 62, 62 }, -	.clk		= "scif_fck",  };  static struct platform_device scif4_device = { @@ -102,7 +100,6 @@ static struct plat_sci_port scif5_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.type		= PORT_SCIF,  	.irqs		= { 63, 63, 63, 63 }, -	.clk		= "scif_fck",  };  static struct platform_device scif5_device = { @@ -114,16 +111,13 @@ static struct platform_device scif5_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "tmu012_fck",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -145,16 +139,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "tmu012_fck",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -176,15 +167,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "tmu012_fck",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002f,  		.flags	= IORESOURCE_MEM, @@ -206,15 +194,12 @@ static struct platform_device tmu2_device = {  };  static struct sh_timer_config tmu3_platform_data = { -	.name = "TMU3",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "tmu345_fck",  };  static struct resource tmu3_resources[] = {  	[0] = { -		.name	= "TMU3",  		.start	= 0xffdc0008,  		.end	= 0xffdc0013,  		.flags	= IORESOURCE_MEM, @@ -236,15 +221,12 @@ static struct platform_device tmu3_device = {  };  static struct sh_timer_config tmu4_platform_data = { -	.name = "TMU4",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "tmu345_fck",  };  static struct resource tmu4_resources[] = {  	[0] = { -		.name	= "TMU4",  		.start	= 0xffdc0014,  		.end	= 0xffdc001f,  		.flags	= IORESOURCE_MEM, @@ -266,15 +248,12 @@ static struct platform_device tmu4_device = {  };  static struct sh_timer_config tmu5_platform_data = { -	.name = "TMU5",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "tmu345_fck",  };  static struct resource tmu5_resources[] = {  	[0] = { -		.name	= "TMU5",  		.start	= 0xffdc0020,  		.end	= 0xffdc002b,  		.flags	= IORESOURCE_MEM, @@ -295,15 +274,131 @@ static struct platform_device tmu5_device = {  	.num_resources	= ARRAY_SIZE(tmu5_resources),  }; -static struct sh_dmae_pdata dma_platform_data = { -	.mode = (SHDMA_MIX_IRQ | SHDMA_DMAOR1), +/* DMA */ +static const struct sh_dmae_channel sh7785_dmae0_channels[] = { +	{ +		.offset = 0, +		.dmars = 0, +		.dmars_bit = 0, +	}, { +		.offset = 0x10, +		.dmars = 0, +		.dmars_bit = 8, +	}, { +		.offset = 0x20, +		.dmars = 4, +		.dmars_bit = 0, +	}, { +		.offset = 0x30, +		.dmars = 4, +		.dmars_bit = 8, +	}, { +		.offset = 0x50, +		.dmars = 8, +		.dmars_bit = 0, +	}, { +		.offset = 0x60, +		.dmars = 8, +		.dmars_bit = 8, +	} +}; + +static const struct sh_dmae_channel sh7785_dmae1_channels[] = { +	{ +		.offset = 0, +	}, { +		.offset = 0x10, +	}, { +		.offset = 0x20, +	}, { +		.offset = 0x30, +	}, { +		.offset = 0x50, +	}, { +		.offset = 0x60, +	} +}; + +static const unsigned int ts_shift[] = TS_SHIFT; + +static struct sh_dmae_pdata dma0_platform_data = { +	.channel	= sh7785_dmae0_channels, +	.channel_num	= ARRAY_SIZE(sh7785_dmae0_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT, +}; + +static struct sh_dmae_pdata dma1_platform_data = { +	.channel	= sh7785_dmae1_channels, +	.channel_num	= ARRAY_SIZE(sh7785_dmae1_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT,  }; -static struct platform_device dma_device = { +static struct resource sh7785_dmae0_resources[] = { +	[0] = { +		/* Channel registers and DMAOR */ +		.start	= 0xfc808020, +		.end	= 0xfc80808f, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		/* DMARSx */ +		.start	= 0xfc809000, +		.end	= 0xfc80900b, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		/* Real DMA error IRQ is 39, and channel IRQs are 33-38 */ +		.start	= 33, +		.end	= 33, +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +}; + +static struct resource sh7785_dmae1_resources[] = { +	[0] = { +		/* Channel registers and DMAOR */ +		.start	= 0xfcc08020, +		.end	= 0xfcc0808f, +		.flags	= IORESOURCE_MEM, +	}, +	/* DMAC1 has no DMARS */ +	{ +		/* Real DMA error IRQ is 58, and channel IRQs are 52-57 */ +		.start	= 52, +		.end	= 52, +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +}; + +static struct platform_device dma0_device = {  	.name           = "sh-dma-engine", -	.id             = -1, +	.id             = 0, +	.resource	= sh7785_dmae0_resources, +	.num_resources	= ARRAY_SIZE(sh7785_dmae0_resources),  	.dev            = { -		.platform_data  = &dma_platform_data, +		.platform_data	= &dma0_platform_data, +	}, +}; + +static struct platform_device dma1_device = { +	.name		= "sh-dma-engine", +	.id		= 1, +	.resource	= sh7785_dmae1_resources, +	.num_resources	= ARRAY_SIZE(sh7785_dmae1_resources), +	.dev		= { +		.platform_data	= &dma1_platform_data,  	},  }; @@ -320,7 +415,8 @@ static struct platform_device *sh7785_devices[] __initdata = {  	&tmu3_device,  	&tmu4_device,  	&tmu5_device, -	&dma_device, +	&dma0_device, +	&dma1_device,  };  static int __init sh7785_devices_setup(void) @@ -541,17 +637,17 @@ static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7785-irl4567", vectors_irl4567,  void __init plat_irq_setup(void)  {  	/* disable IRQ3-0 + IRQ7-4 */ -	ctrl_outl(0xff000000, INTC_INTMSK0); +	__raw_writel(0xff000000, INTC_INTMSK0);  	/* disable IRL3-0 + IRL7-4 */ -	ctrl_outl(0xc0000000, INTC_INTMSK1); -	ctrl_outl(0xfffefffe, INTC_INTMSK2); +	__raw_writel(0xc0000000, INTC_INTMSK1); +	__raw_writel(0xfffefffe, INTC_INTMSK2);  	/* select IRL mode for IRL3-0 + IRL7-4 */ -	ctrl_outl(ctrl_inl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); +	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);  	/* disable holding function, ie enable "SH-4 Mode" */ -	ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00200000, INTC_ICR0); +	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0);  	register_intc_controller(&intc_desc);  } @@ -561,32 +657,32 @@ void __init plat_irq_setup_pins(int mode)  	switch (mode) {  	case IRQ_MODE_IRQ7654:  		/* select IRQ mode for IRL7-4 */ -		ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00400000, INTC_ICR0); +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00400000, INTC_ICR0);  		register_intc_controller(&intc_desc_irq4567);  		break;  	case IRQ_MODE_IRQ3210:  		/* select IRQ mode for IRL3-0 */ -		ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00800000, INTC_ICR0); +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0);  		register_intc_controller(&intc_desc_irq0123);  		break;  	case IRQ_MODE_IRL7654:  		/* enable IRL7-4 but don't provide any masking */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); -		ctrl_outl(0x0000fffe, INTC_INTMSKCLR2); +		__raw_writel(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x0000fffe, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL3210:  		/* enable IRL0-3 but don't provide any masking */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); -		ctrl_outl(0xfffe0000, INTC_INTMSKCLR2); +		__raw_writel(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0xfffe0000, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL7654_MASK:  		/* enable IRL7-4 and mask using cpu intc controller */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x40000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_desc_irl4567);  		break;  	case IRQ_MODE_IRL3210_MASK:  		/* enable IRL0-3 and mask using cpu intc controller */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0x80000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_desc_irl0123);  		break;  	default: diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 71673487ace..8797723231e 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c @@ -1,7 +1,7 @@  /*   * SH7786 Setup   * - * Copyright (C) 2009  Renesas Solutions Corp. + * Copyright (C) 2009 - 2010  Renesas Solutions Corp.   * Kuninori Morimoto <morimoto.kuninori@renesas.com>   * Paul Mundt <paul.mundt@renesas.com>   * @@ -21,6 +21,9 @@  #include <linux/mm.h>  #include <linux/dma-mapping.h>  #include <linux/sh_timer.h> +#include <linux/sh_dma.h> +#include <linux/sh_intc.h> +#include <cpu/dma-register.h>  #include <asm/mmzone.h>  static struct plat_sci_port scif0_platform_data = { @@ -117,16 +120,13 @@ static struct platform_device scif5_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffd80008,  		.end	= 0xffd80013,  		.flags	= IORESOURCE_MEM, @@ -148,16 +148,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffd80014,  		.end	= 0xffd8001f,  		.flags	= IORESOURCE_MEM, @@ -179,15 +176,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffd80020,  		.end	= 0xffd8002f,  		.flags	= IORESOURCE_MEM, @@ -209,15 +203,12 @@ static struct platform_device tmu2_device = {  };  static struct sh_timer_config tmu3_platform_data = { -	.name = "TMU3",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  };  static struct resource tmu3_resources[] = {  	[0] = { -		.name	= "TMU3",  		.start	= 0xffda0008,  		.end	= 0xffda0013,  		.flags	= IORESOURCE_MEM, @@ -239,15 +230,12 @@ static struct platform_device tmu3_device = {  };  static struct sh_timer_config tmu4_platform_data = { -	.name = "TMU4",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource tmu4_resources[] = {  	[0] = { -		.name	= "TMU4",  		.start	= 0xffda0014,  		.end	= 0xffda001f,  		.flags	= IORESOURCE_MEM, @@ -269,15 +257,12 @@ static struct platform_device tmu4_device = {  };  static struct sh_timer_config tmu5_platform_data = { -	.name = "TMU5",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu5_resources[] = {  	[0] = { -		.name	= "TMU5",  		.start	= 0xffda0020,  		.end	= 0xffda002b,  		.flags	= IORESOURCE_MEM, @@ -299,15 +284,12 @@ static struct platform_device tmu5_device = {  };  static struct sh_timer_config tmu6_platform_data = { -	.name = "TMU6",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  };  static struct resource tmu6_resources[] = {  	[0] = { -		.name	= "TMU6",  		.start	= 0xffdc0008,  		.end	= 0xffdc0013,  		.flags	= IORESOURCE_MEM, @@ -329,15 +311,12 @@ static struct platform_device tmu6_device = {  };  static struct sh_timer_config tmu7_platform_data = { -	.name = "TMU7",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource tmu7_resources[] = {  	[0] = { -		.name	= "TMU7",  		.start	= 0xffdc0014,  		.end	= 0xffdc001f,  		.flags	= IORESOURCE_MEM, @@ -359,15 +338,12 @@ static struct platform_device tmu7_device = {  };  static struct sh_timer_config tmu8_platform_data = { -	.name = "TMU8",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu8_resources[] = {  	[0] = { -		.name	= "TMU8",  		.start	= 0xffdc0020,  		.end	= 0xffdc002b,  		.flags	= IORESOURCE_MEM, @@ -389,15 +365,12 @@ static struct platform_device tmu8_device = {  };  static struct sh_timer_config tmu9_platform_data = { -	.name = "TMU9",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  };  static struct resource tmu9_resources[] = {  	[0] = { -		.name	= "TMU9",  		.start	= 0xffde0008,  		.end	= 0xffde0013,  		.flags	= IORESOURCE_MEM, @@ -419,15 +392,12 @@ static struct platform_device tmu9_device = {  };  static struct sh_timer_config tmu10_platform_data = { -	.name = "TMU10",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource tmu10_resources[] = {  	[0] = { -		.name	= "TMU10",  		.start	= 0xffde0014,  		.end	= 0xffde001f,  		.flags	= IORESOURCE_MEM, @@ -449,15 +419,12 @@ static struct platform_device tmu10_device = {  };  static struct sh_timer_config tmu11_platform_data = { -	.name = "TMU11",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu11_resources[] = {  	[0] = { -		.name	= "TMU11",  		.start	= 0xffde0020,  		.end	= 0xffde002b,  		.flags	= IORESOURCE_MEM, @@ -478,6 +445,83 @@ static struct platform_device tmu11_device = {  	.num_resources	= ARRAY_SIZE(tmu11_resources),  }; +static const struct sh_dmae_channel dmac0_channels[] = { +	{ +		.offset = 0, +		.dmars = 0, +		.dmars_bit = 0, +	}, { +		.offset = 0x10, +		.dmars = 0, +		.dmars_bit = 8, +	}, { +		.offset = 0x20, +		.dmars = 4, +		.dmars_bit = 0, +	}, { +		.offset = 0x30, +		.dmars = 4, +		.dmars_bit = 8, +	}, { +		.offset = 0x50, +		.dmars = 8, +		.dmars_bit = 0, +	}, { +		.offset = 0x60, +		.dmars = 8, +		.dmars_bit = 8, +	} +}; + +static const unsigned int ts_shift[] = TS_SHIFT; + +static struct sh_dmae_pdata dma0_platform_data = { +	.channel	= dmac0_channels, +	.channel_num	= ARRAY_SIZE(dmac0_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT, +}; + +/* Resource order important! */ +static struct resource dmac0_resources[] = { +	{ +		/* Channel registers and DMAOR */ +		.start	= 0xfe008020, +		.end	= 0xfe00808f, +		.flags	= IORESOURCE_MEM, +	}, { +		/* DMARSx */ +		.start	= 0xfe009000, +		.end	= 0xfe00900b, +		.flags	= IORESOURCE_MEM, +	}, { +		/* DMA error IRQ */ +		.start	= evt2irq(0x5c0), +		.end	= evt2irq(0x5c0), +		.flags	= IORESOURCE_IRQ, +	}, { +		/* IRQ for channels 0-5 */ +		.start	= evt2irq(0x500), +		.end	= evt2irq(0x5a0), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device dma0_device = { +	.name		= "sh-dma-engine", +	.id		= 0, +	.resource	= dmac0_resources, +	.num_resources	= ARRAY_SIZE(dmac0_resources), +	.dev		= { +		.platform_data	= &dma0_platform_data, +	}, +}; +  static struct resource usb_ohci_resources[] = {  	[0] = {  		.start	= 0xffe70400, @@ -525,10 +569,10 @@ static struct platform_device *sh7786_early_devices[] __initdata = {  };  static struct platform_device *sh7786_devices[] __initdata = { +	&dma0_device,  	&usb_ohci_device,  }; -  /*   * Please call this function if your platform board   * use external clock for USB @@ -536,6 +580,7 @@ static struct platform_device *sh7786_devices[] __initdata = {  #define USBCTL0		0xffe70858  #define CLOCK_MODE_MASK 0xffffff7f  #define EXT_CLOCK_MODE  0x00000080 +  void __init sh7786_usb_use_exclock(void)  {  	u32 val = __raw_readl(USBCTL0) & CLOCK_MODE_MASK; @@ -553,6 +598,7 @@ void __init sh7786_usb_use_exclock(void)  #define PLL_ENB		0x00000002  #define PHY_RST		0x00000004  #define ACT_PLL_STATUS	0xc0000000 +  static void __init sh7786_usb_setup(void)  {  	int i = 1000000; @@ -708,9 +754,19 @@ static struct intc_vect vectors[] __initdata = {  #define INTMSK2		0xfe410068  #define INTMSKCLR2	0xfe41006c +#define INTDISTCR0	0xfe4100b0 +#define INTDISTCR1	0xfe4100b4 +#define INTACK		0xfe4100b8 +#define INTACKCLR	0xfe4100bc +#define INT2DISTCR0	0xfe410900 +#define INT2DISTCR1	0xfe410904 +#define INT2DISTCR2	0xfe410908 +#define INT2DISTCR3	0xfe41090c +  static struct intc_mask_reg mask_registers[] __initdata = {  	{ CnINTMSK0, CnINTMSKCLR0, 32, -	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } }, +	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 }, +	    INTC_SMP_BALANCING(INTDISTCR0) },  	{ INTMSK2, INTMSKCLR2, 32,  	  { IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,  	    IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH, @@ -722,7 +778,8 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	    IRL4_HHLL, IRL4_HHLH, IRL4_HHHL, 0, } },  	{ CnINT2MSKR0, CnINT2MSKCR0 , 32,  	  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -	    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WDT } }, +	    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WDT }, +	    INTC_SMP_BALANCING(INT2DISTCR0) },  	{ CnINT2MSKR1, CnINT2MSKCR1, 32,  	  { TMU0_0, TMU0_1, TMU0_2, TMU0_3, TMU1_0, TMU1_1, TMU1_2, 0,  	    DMAC0_0, DMAC0_1, DMAC0_2, DMAC0_3, DMAC0_4, DMAC0_5, DMAC0_6, @@ -731,14 +788,14 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	    HPB_0, HPB_1, HPB_2,  	    SCIF0_0, SCIF0_1, SCIF0_2, SCIF0_3,  	    SCIF1, -	    TMU2, TMU3, 0, } }, +	    TMU2, TMU3, 0, }, INTC_SMP_BALANCING(INT2DISTCR1) },  	{ CnINT2MSKR2, CnINT2MSKCR2, 32,  	  { 0, 0, SCIF2, SCIF3, SCIF4, SCIF5,  	    Eth_0, Eth_1,  	    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  	    PCIeC0_0, PCIeC0_1, PCIeC0_2,  	    PCIeC1_0, PCIeC1_1, PCIeC1_2, -	    USB, 0, 0 } }, +	    USB, 0, 0 }, INTC_SMP_BALANCING(INT2DISTCR2) },  	{ CnINT2MSKR3, CnINT2MSKCR3, 32,  	  { 0, 0, 0, 0, 0, 0,  	    I2C0, I2C1, @@ -747,7 +804,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	    HAC0, HAC1,  	    FLCTL, 0,  	    HSPI, GPIO0, GPIO1, Thermal, -	    0, 0, 0, 0, 0, 0, 0, 0 } }, +	    0, 0, 0, 0, 0, 0, 0, 0 }, INTC_SMP_BALANCING(INT2DISTCR3) },  };  static struct intc_prio_reg prio_registers[] __initdata = { @@ -863,20 +920,34 @@ static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7786-irl4567", vectors_irl4567,  #define INTC_INTMSK2	INTMSK2  #define INTC_INTMSKCLR1	CnINTMSKCLR1  #define INTC_INTMSKCLR2	INTMSKCLR2 +#define INTC_USERIMASK	0xfe411000 + +#ifdef CONFIG_INTC_BALANCING +unsigned int irq_lookup(unsigned int irq) +{ +	return __raw_readl(INTACK) & 1 ? irq : NO_IRQ_IGNORE; +} + +void irq_finish(unsigned int irq) +{ +	__raw_writel(irq2evt(irq), INTACKCLR); +} +#endif  void __init plat_irq_setup(void)  {  	/* disable IRQ3-0 + IRQ7-4 */ -	ctrl_outl(0xff000000, INTC_INTMSK0); +	__raw_writel(0xff000000, INTC_INTMSK0);  	/* disable IRL3-0 + IRL7-4 */ -	ctrl_outl(0xc0000000, INTC_INTMSK1); -	ctrl_outl(0xfffefffe, INTC_INTMSK2); +	__raw_writel(0xc0000000, INTC_INTMSK1); +	__raw_writel(0xfffefffe, INTC_INTMSK2);  	/* select IRL mode for IRL3-0 + IRL7-4 */ -	ctrl_outl(ctrl_inl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); +	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);  	register_intc_controller(&intc_desc); +	register_intc_userimask(INTC_USERIMASK);  }  void __init plat_irq_setup_pins(int mode) @@ -884,32 +955,32 @@ void __init plat_irq_setup_pins(int mode)  	switch (mode) {  	case IRQ_MODE_IRQ7654:  		/* select IRQ mode for IRL7-4 */ -		ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00400000, INTC_ICR0); +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00400000, INTC_ICR0);  		register_intc_controller(&intc_desc_irq4567);  		break;  	case IRQ_MODE_IRQ3210:  		/* select IRQ mode for IRL3-0 */ -		ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00800000, INTC_ICR0); +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0);  		register_intc_controller(&intc_desc_irq0123);  		break;  	case IRQ_MODE_IRL7654:  		/* enable IRL7-4 but don't provide any masking */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); -		ctrl_outl(0x0000fffe, INTC_INTMSKCLR2); +		__raw_writel(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x0000fffe, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL3210:  		/* enable IRL0-3 but don't provide any masking */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); -		ctrl_outl(0xfffe0000, INTC_INTMSKCLR2); +		__raw_writel(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0xfffe0000, INTC_INTMSKCLR2);  		break;  	case IRQ_MODE_IRL7654_MASK:  		/* enable IRL7-4 and mask using cpu intc controller */ -		ctrl_outl(0x40000000, INTC_INTMSKCLR1); +		__raw_writel(0x40000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_desc_irl4567);  		break;  	case IRQ_MODE_IRL3210_MASK:  		/* enable IRL0-3 and mask using cpu intc controller */ -		ctrl_outl(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0x80000000, INTC_INTMSKCLR1);  		register_intc_controller(&intc_desc_irl0123);  		break;  	default: diff --git a/arch/sh/kernel/cpu/sh4a/setup-shx3.c b/arch/sh/kernel/cpu/sh4a/setup-shx3.c index 780ba17a559..9158bc5ea38 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-shx3.c +++ b/arch/sh/kernel/cpu/sh4a/setup-shx3.c @@ -70,16 +70,13 @@ static struct platform_device scif2_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= 0xffc10008,  		.end	= 0xffc10013,  		.flags	= IORESOURCE_MEM, @@ -101,16 +98,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= 0xffc10014,  		.end	= 0xffc1001f,  		.flags	= IORESOURCE_MEM, @@ -132,15 +126,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= 0xffc10020,  		.end	= 0xffc1002f,  		.flags	= IORESOURCE_MEM, @@ -162,15 +153,12 @@ static struct platform_device tmu2_device = {  };  static struct sh_timer_config tmu3_platform_data = { -	.name = "TMU3",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  };  static struct resource tmu3_resources[] = {  	[0] = { -		.name	= "TMU3",  		.start	= 0xffc20008,  		.end	= 0xffc20013,  		.flags	= IORESOURCE_MEM, @@ -192,15 +180,12 @@ static struct platform_device tmu3_device = {  };  static struct sh_timer_config tmu4_platform_data = { -	.name = "TMU4",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  };  static struct resource tmu4_resources[] = {  	[0] = { -		.name	= "TMU4",  		.start	= 0xffc20014,  		.end	= 0xffc2001f,  		.flags	= IORESOURCE_MEM, @@ -222,15 +207,12 @@ static struct platform_device tmu4_device = {  };  static struct sh_timer_config tmu5_platform_data = { -	.name = "TMU5",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu5_resources[] = {  	[0] = { -		.name	= "TMU5",  		.start	= 0xffc20020,  		.end	= 0xffc2002b,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/sh4a/smp-shx3.c b/arch/sh/kernel/cpu/sh4a/smp-shx3.c index 5863e0c4d02..de865cac02e 100644 --- a/arch/sh/kernel/cpu/sh4a/smp-shx3.c +++ b/arch/sh/kernel/cpu/sh4a/smp-shx3.c @@ -1,7 +1,7 @@  /*   * SH-X3 SMP   * - *  Copyright (C) 2007 - 2008  Paul Mundt + *  Copyright (C) 2007 - 2010  Paul Mundt   *  Copyright (C) 2007  Magnus Damm   *   * This file is subject to the terms and conditions of the GNU General Public @@ -9,16 +9,22 @@   * for more details.   */  #include <linux/init.h> +#include <linux/kernel.h>  #include <linux/cpumask.h>  #include <linux/smp.h>  #include <linux/interrupt.h>  #include <linux/io.h> +#include <linux/sched.h> +#include <linux/delay.h> +#include <linux/cpu.h> +#include <asm/sections.h>  #define STBCR_REG(phys_id) (0xfe400004 | (phys_id << 12))  #define RESET_REG(phys_id) (0xfe400008 | (phys_id << 12))  #define STBCR_MSTP	0x00000001  #define STBCR_RESET	0x00000002 +#define STBCR_SLEEP	0x00000004  #define STBCR_LTSLP	0x80000000  static irqreturn_t ipi_interrupt_handler(int irq, void *arg) @@ -37,7 +43,7 @@ static irqreturn_t ipi_interrupt_handler(int irq, void *arg)  	return IRQ_HANDLED;  } -void __init plat_smp_setup(void) +static void shx3_smp_setup(void)  {  	unsigned int cpu = 0;  	int i, num; @@ -63,7 +69,7 @@ void __init plat_smp_setup(void)          printk(KERN_INFO "Detected %i available secondary CPU(s)\n", num);  } -void __init plat_prepare_cpus(unsigned int max_cpus) +static void shx3_prepare_cpus(unsigned int max_cpus)  {  	int i; @@ -72,13 +78,19 @@ void __init plat_prepare_cpus(unsigned int max_cpus)  	BUILD_BUG_ON(SMP_MSG_NR >= 8);  	for (i = 0; i < SMP_MSG_NR; i++) -		request_irq(104 + i, ipi_interrupt_handler, IRQF_DISABLED, -			    "IPI", (void *)(long)i); +		request_irq(104 + i, ipi_interrupt_handler, +			    IRQF_DISABLED | IRQF_PERCPU, "IPI", (void *)(long)i); + +	for (i = 0; i < max_cpus; i++) +		set_cpu_present(i, true);  } -void plat_start_cpu(unsigned int cpu, unsigned long entry_point) +static void shx3_start_cpu(unsigned int cpu, unsigned long entry_point)  { -	__raw_writel(entry_point, RESET_REG(cpu)); +	if (__in_29bit_mode()) +		__raw_writel(entry_point, RESET_REG(cpu)); +	else +		__raw_writel(virt_to_phys(entry_point), RESET_REG(cpu));  	if (!(__raw_readl(STBCR_REG(cpu)) & STBCR_MSTP))  		__raw_writel(STBCR_MSTP, STBCR_REG(cpu)); @@ -90,12 +102,12 @@ void plat_start_cpu(unsigned int cpu, unsigned long entry_point)  	__raw_writel(STBCR_RESET | STBCR_LTSLP, STBCR_REG(cpu));  } -int plat_smp_processor_id(void) +static unsigned int shx3_smp_processor_id(void)  {  	return __raw_readl(0xff000048); /* CPIDR */  } -void plat_send_ipi(unsigned int cpu, unsigned int message) +static void shx3_send_ipi(unsigned int cpu, unsigned int message)  {  	unsigned long addr = 0xfe410070 + (cpu * 4); @@ -103,3 +115,52 @@ void plat_send_ipi(unsigned int cpu, unsigned int message)  	__raw_writel(1 << (message << 2), addr); /* C0INTICI..CnINTICI */  } + +static void shx3_update_boot_vector(unsigned int cpu) +{ +	__raw_writel(STBCR_MSTP, STBCR_REG(cpu)); +	while (!(__raw_readl(STBCR_REG(cpu)) & STBCR_MSTP)) +		cpu_relax(); +	__raw_writel(STBCR_RESET, STBCR_REG(cpu)); +} + +static int __cpuinit +shx3_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) +{ +	unsigned int cpu = (unsigned int)hcpu; + +	switch (action) { +	case CPU_UP_PREPARE: +		shx3_update_boot_vector(cpu); +		break; +	case CPU_ONLINE: +		pr_info("CPU %u is now online\n", cpu); +		break; +	case CPU_DEAD: +		break; +	} + +	return NOTIFY_OK; +} + +static struct notifier_block __cpuinitdata shx3_cpu_notifier = { +	.notifier_call		= shx3_cpu_callback, +}; + +static int __cpuinit register_shx3_cpu_notifier(void) +{ +	register_hotcpu_notifier(&shx3_cpu_notifier); +	return 0; +} +late_initcall(register_shx3_cpu_notifier); + +struct plat_smp_ops shx3_smp_ops = { +	.smp_setup		= shx3_smp_setup, +	.prepare_cpus		= shx3_prepare_cpus, +	.start_cpu		= shx3_start_cpu, +	.smp_processor_id	= shx3_smp_processor_id, +	.send_ipi		= shx3_send_ipi, +	.cpu_die		= native_cpu_die, +	.cpu_disable		= native_cpu_disable, +	.play_dead		= native_play_dead, +}; diff --git a/arch/sh/kernel/cpu/sh4a/ubc.c b/arch/sh/kernel/cpu/sh4a/ubc.c new file mode 100644 index 00000000000..efb2745bcb3 --- /dev/null +++ b/arch/sh/kernel/cpu/sh4a/ubc.c @@ -0,0 +1,133 @@ +/* + * arch/sh/kernel/cpu/sh4a/ubc.c + * + * On-chip UBC support for SH-4A CPUs. + * + * Copyright (C) 2009 - 2010  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/err.h> +#include <linux/clk.h> +#include <linux/io.h> +#include <asm/hw_breakpoint.h> + +#define UBC_CBR(idx)	(0xff200000 + (0x20 * idx)) +#define UBC_CRR(idx)	(0xff200004 + (0x20 * idx)) +#define UBC_CAR(idx)	(0xff200008 + (0x20 * idx)) +#define UBC_CAMR(idx)	(0xff20000c + (0x20 * idx)) + +#define UBC_CCMFR	0xff200600 +#define UBC_CBCR	0xff200620 + +/* CRR */ +#define UBC_CRR_PCB	(1 << 1) +#define UBC_CRR_BIE	(1 << 0) + +/* CBR */ +#define UBC_CBR_CE	(1 << 0) + +static struct sh_ubc sh4a_ubc; + +static void sh4a_ubc_enable(struct arch_hw_breakpoint *info, int idx) +{ +	__raw_writel(UBC_CBR_CE | info->len | info->type, UBC_CBR(idx)); +	__raw_writel(info->address, UBC_CAR(idx)); +} + +static void sh4a_ubc_disable(struct arch_hw_breakpoint *info, int idx) +{ +	__raw_writel(0, UBC_CBR(idx)); +	__raw_writel(0, UBC_CAR(idx)); +} + +static void sh4a_ubc_enable_all(unsigned long mask) +{ +	int i; + +	for (i = 0; i < sh4a_ubc.num_events; i++) +		if (mask & (1 << i)) +			__raw_writel(__raw_readl(UBC_CBR(i)) | UBC_CBR_CE, +				     UBC_CBR(i)); +} + +static void sh4a_ubc_disable_all(void) +{ +	int i; + +	for (i = 0; i < sh4a_ubc.num_events; i++) +		__raw_writel(__raw_readl(UBC_CBR(i)) & ~UBC_CBR_CE, +			     UBC_CBR(i)); +} + +static unsigned long sh4a_ubc_active_mask(void) +{ +	unsigned long active = 0; +	int i; + +	for (i = 0; i < sh4a_ubc.num_events; i++) +		if (__raw_readl(UBC_CBR(i)) & UBC_CBR_CE) +			active |= (1 << i); + +	return active; +} + +static unsigned long sh4a_ubc_triggered_mask(void) +{ +	return __raw_readl(UBC_CCMFR); +} + +static void sh4a_ubc_clear_triggered_mask(unsigned long mask) +{ +	__raw_writel(__raw_readl(UBC_CCMFR) & ~mask, UBC_CCMFR); +} + +static struct sh_ubc sh4a_ubc = { +	.name			= "SH-4A", +	.num_events		= 2, +	.trap_nr		= 0x1e0, +	.enable			= sh4a_ubc_enable, +	.disable		= sh4a_ubc_disable, +	.enable_all		= sh4a_ubc_enable_all, +	.disable_all		= sh4a_ubc_disable_all, +	.active_mask		= sh4a_ubc_active_mask, +	.triggered_mask		= sh4a_ubc_triggered_mask, +	.clear_triggered_mask	= sh4a_ubc_clear_triggered_mask, +}; + +static int __init sh4a_ubc_init(void) +{ +	struct clk *ubc_iclk = clk_get(NULL, "ubc0"); +	int i; + +	/* +	 * The UBC MSTP bit is optional, as not all platforms will have +	 * it. Just ignore it if we can't find it. +	 */ +	if (IS_ERR(ubc_iclk)) +		ubc_iclk = NULL; + +	clk_enable(ubc_iclk); + +	__raw_writel(0, UBC_CBCR); + +	for (i = 0; i < sh4a_ubc.num_events; i++) { +		__raw_writel(0, UBC_CAMR(i)); +		__raw_writel(0, UBC_CBR(i)); + +		__raw_writel(UBC_CRR_BIE | UBC_CRR_PCB, UBC_CRR(i)); + +		/* dummy read for write posting */ +		(void)__raw_readl(UBC_CRR(i)); +	} + +	clk_disable(ubc_iclk); + +	sh4a_ubc.clk = ubc_iclk; + +	return register_sh_ubc(&sh4a_ubc); +} +arch_initcall(sh4a_ubc_init); diff --git a/arch/sh/kernel/cpu/sh5/clock-sh5.c b/arch/sh/kernel/cpu/sh5/clock-sh5.c index 7f864ebc51d..9cfc19b8dbe 100644 --- a/arch/sh/kernel/cpu/sh5/clock-sh5.c +++ b/arch/sh/kernel/cpu/sh5/clock-sh5.c @@ -24,7 +24,7 @@ static unsigned long cprc_base;  static void master_clk_init(struct clk *clk)  { -	int idx = (ctrl_inl(cprc_base + 0x00) >> 6) & 0x0007; +	int idx = (__raw_readl(cprc_base + 0x00) >> 6) & 0x0007;  	clk->rate *= ifc_table[idx];  } @@ -34,7 +34,7 @@ static struct clk_ops sh5_master_clk_ops = {  static unsigned long module_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(cprc_base) >> 12) & 0x0007; +	int idx = (__raw_readw(cprc_base) >> 12) & 0x0007;  	return clk->parent->rate / ifc_table[idx];  } @@ -44,7 +44,7 @@ static struct clk_ops sh5_module_clk_ops = {  static unsigned long bus_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(cprc_base) >> 3) & 0x0007; +	int idx = (__raw_readw(cprc_base) >> 3) & 0x0007;  	return clk->parent->rate / ifc_table[idx];  } @@ -54,7 +54,7 @@ static struct clk_ops sh5_bus_clk_ops = {  static unsigned long cpu_clk_recalc(struct clk *clk)  { -	int idx = (ctrl_inw(cprc_base) & 0x0007); +	int idx = (__raw_readw(cprc_base) & 0x0007);  	return clk->parent->rate / ifc_table[idx];  } diff --git a/arch/sh/kernel/cpu/sh5/entry.S b/arch/sh/kernel/cpu/sh5/entry.S index 8f13f73cb2c..6b80295dd7a 100644 --- a/arch/sh/kernel/cpu/sh5/entry.S +++ b/arch/sh/kernel/cpu/sh5/entry.S @@ -187,7 +187,7 @@ trap_jtable:  	.rept 6  		.long do_exception_error	/* 0x880 - 0x920 */  	.endr -	.long	do_software_break_point	/* 0x940 */ +	.long	breakpoint_trap_handler	/* 0x940 */  	.long	do_exception_error		/* 0x960 */  	.long	do_single_step		/* 0x980 */ @@ -1124,7 +1124,7 @@ fpu_error_or_IRQA:  	pta	its_IRQ, tr0  	beqi/l	r4, EVENT_INTERRUPT, tr0  #ifdef CONFIG_SH_FPU -	movi	do_fpu_state_restore, r6 +	movi	fpu_state_restore_trap_handler, r6  #else  	movi	do_exception_error, r6  #endif @@ -1135,7 +1135,7 @@ fpu_error_or_IRQB:  	pta	its_IRQ, tr0  	beqi/l	r4, EVENT_INTERRUPT, tr0  #ifdef CONFIG_SH_FPU -	movi	do_fpu_state_restore, r6 +	movi	fpu_state_restore_trap_handler, r6  #else  	movi	do_exception_error, r6  #endif diff --git a/arch/sh/kernel/cpu/sh5/fpu.c b/arch/sh/kernel/cpu/sh5/fpu.c index 4648ccee6c4..4b3bb35e99f 100644 --- a/arch/sh/kernel/cpu/sh5/fpu.c +++ b/arch/sh/kernel/cpu/sh5/fpu.c @@ -15,24 +15,6 @@  #include <linux/sched.h>  #include <linux/signal.h>  #include <asm/processor.h> -#include <asm/user.h> -#include <asm/io.h> -#include <asm/fpu.h> - -/* - * Initially load the FPU with signalling NANS.  This bit pattern - * has the property that no matter whether considered as single or as - * double precision, it still represents a signalling NAN. - */ -#define sNAN64		0xFFFFFFFFFFFFFFFFULL -#define sNAN32		0xFFFFFFFFUL - -static union sh_fpu_union init_fpuregs = { -	.hard = { -		.fp_regs = { [0 ... 63] = sNAN32 }, -		.fpscr = FPSCR_INIT -	} -};  void save_fpu(struct task_struct *tsk)  { @@ -72,12 +54,11 @@ void save_fpu(struct task_struct *tsk)  		     "fgetscr   fr63\n\t"  		     "fst.s     %0, (32*8), fr63\n\t"  		: /* no output */ -		: "r" (&tsk->thread.fpu.hard) +		: "r" (&tsk->thread.xstate->hardfpu)  		: "memory");  } -static inline void -fpload(struct sh_fpu_hard_struct *fpregs) +void restore_fpu(struct task_struct *tsk)  {  	asm volatile("fld.p     %0, (0*8), fp0\n\t"  		     "fld.p     %0, (1*8), fp2\n\t" @@ -116,16 +97,11 @@ fpload(struct sh_fpu_hard_struct *fpregs)  		     "fld.p     %0, (31*8), fp62\n\t"  		: /* no output */ -		: "r" (fpregs) ); -} - -void fpinit(struct sh_fpu_hard_struct *fpregs) -{ -	*fpregs = init_fpuregs.hard; +		: "r" (&tsk->thread.xstate->hardfpu) +		: "memory");  } -asmlinkage void -do_fpu_error(unsigned long ex, struct pt_regs *regs) +asmlinkage void do_fpu_error(unsigned long ex, struct pt_regs *regs)  {  	struct task_struct *tsk = current; @@ -133,35 +109,6 @@ do_fpu_error(unsigned long ex, struct pt_regs *regs)  	tsk->thread.trap_no = 11;  	tsk->thread.error_code = 0; -	force_sig(SIGFPE, tsk); -} - - -asmlinkage void -do_fpu_state_restore(unsigned long ex, struct pt_regs *regs) -{ -	void die(const char *str, struct pt_regs *regs, long err); - -	if (! user_mode(regs)) -		die("FPU used in kernel", regs, ex); -	regs->sr &= ~SR_FD; - -	if (last_task_used_math == current) -		return; - -	enable_fpu(); -	if (last_task_used_math != NULL) -		/* Other processes fpu state, save away */ -		save_fpu(last_task_used_math); - -        last_task_used_math = current; -        if (used_math()) { -                fpload(¤t->thread.fpu.hard); -        } else { -		/* First time FPU user.  */ -		fpload(&init_fpuregs.hard); -                set_used_math(); -        } -	disable_fpu(); +	force_sig(SIGFPE, tsk);  } diff --git a/arch/sh/kernel/cpu/sh5/probe.c b/arch/sh/kernel/cpu/sh5/probe.c index 521d05b3f7b..9e882409e4e 100644 --- a/arch/sh/kernel/cpu/sh5/probe.c +++ b/arch/sh/kernel/cpu/sh5/probe.c @@ -17,7 +17,7 @@  #include <asm/cache.h>  #include <asm/tlb.h> -int __init detect_cpu_and_cache_system(void) +void __cpuinit cpu_probe(void)  {  	unsigned long long cir; @@ -72,6 +72,4 @@ int __init detect_cpu_and_cache_system(void)  	/* Setup some I/D TLB defaults */  	sh64_tlb_init(); - -	return 0;  } diff --git a/arch/sh/kernel/cpu/sh5/setup-sh5.c b/arch/sh/kernel/cpu/sh5/setup-sh5.c index e7a3c1e4b60..d910666142b 100644 --- a/arch/sh/kernel/cpu/sh5/setup-sh5.c +++ b/arch/sh/kernel/cpu/sh5/setup-sh5.c @@ -68,16 +68,13 @@ static struct platform_device rtc_device = {  #define TMU2_BASE	(TMU_BASE + 0x8 + (0xc * 0x2))  static struct sh_timer_config tmu0_platform_data = { -	.name = "TMU0",  	.channel_offset = 0x04,  	.timer_bit = 0, -	.clk = "peripheral_clk",  	.clockevent_rating = 200,  };  static struct resource tmu0_resources[] = {  	[0] = { -		.name	= "TMU0",  		.start	= TMU0_BASE,  		.end	= TMU0_BASE + 0xc - 1,  		.flags	= IORESOURCE_MEM, @@ -99,16 +96,13 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.name = "TMU1",  	.channel_offset = 0x10,  	.timer_bit = 1, -	.clk = "peripheral_clk",  	.clocksource_rating = 200,  };  static struct resource tmu1_resources[] = {  	[0] = { -		.name	= "TMU1",  		.start	= TMU1_BASE,  		.end	= TMU1_BASE + 0xc - 1,  		.flags	= IORESOURCE_MEM, @@ -130,15 +124,12 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.name = "TMU2",  	.channel_offset = 0x1c,  	.timer_bit = 2, -	.clk = "peripheral_clk",  };  static struct resource tmu2_resources[] = {  	[0] = { -		.name	= "TMU2",  		.start	= TMU2_BASE,  		.end	= TMU2_BASE + 0xc - 1,  		.flags	= IORESOURCE_MEM, diff --git a/arch/sh/kernel/cpu/shmobile/pm.c b/arch/sh/kernel/cpu/shmobile/pm.c index ca029a44743..e5596871270 100644 --- a/arch/sh/kernel/cpu/shmobile/pm.c +++ b/arch/sh/kernel/cpu/shmobile/pm.c @@ -33,7 +33,8 @@ ATOMIC_NOTIFIER_HEAD(sh_mobile_post_sleep_notifier_list);  #define SUSP_MODE_SLEEP		(SUSP_SH_SLEEP)  #define SUSP_MODE_SLEEP_SF	(SUSP_SH_SLEEP | SUSP_SH_SF)  #define SUSP_MODE_STANDBY_SF	(SUSP_SH_STANDBY | SUSP_SH_SF) -#define SUSP_MODE_RSTANDBY	(SUSP_SH_RSTANDBY | SUSP_SH_MMU | SUSP_SH_SF) +#define SUSP_MODE_RSTANDBY_SF \ +	(SUSP_SH_RSTANDBY | SUSP_SH_MMU | SUSP_SH_REGS | SUSP_SH_SF)   /*    * U-standby mode is unsupported since it needs bootloader hacks    */ diff --git a/arch/sh/kernel/cpu/shmobile/sleep.S b/arch/sh/kernel/cpu/shmobile/sleep.S index e9dd7fa0abd..e6aac65f575 100644 --- a/arch/sh/kernel/cpu/shmobile/sleep.S +++ b/arch/sh/kernel/cpu/shmobile/sleep.S @@ -48,8 +48,48 @@ ENTRY(sh_mobile_sleep_enter_start)  	stc	sr, r0  	mov.l	r0, @(SH_SLEEP_SR, r5) -	/* save sp */ +	/* save general purpose registers to stack if needed */ +	mov.l	@(SH_SLEEP_MODE, r5), r0 +	tst	#SUSP_SH_REGS, r0 +	bt	skip_regs_save + +	sts.l	pr, @-r15 +	mov.l	r14, @-r15 +	mov.l	r13, @-r15 +	mov.l	r12, @-r15 +	mov.l	r11, @-r15 +	mov.l	r10, @-r15 +	mov.l	r9, @-r15 +	mov.l	r8, @-r15 + +	/* make sure bank0 is selected, save low registers */ +	mov.l	rb_bit, r9 +	not	r9, r9 +	bsr	set_sr +	 mov	#0, r10 + +	bsr	save_low_regs +	 nop + +	/* switch to bank 1, save low registers */ +	mov.l	rb_bit, r10 +	bsr	set_sr +	 mov	#-1, r9 + +	bsr	save_low_regs +	 nop + +	/* switch back to bank 0 */ +	mov.l	rb_bit, r9 +	not	r9, r9 +	bsr	set_sr +	 mov	#0, r10 + +skip_regs_save: + +	/* save sp, also set to internal ram */  	mov.l	r15, @(SH_SLEEP_SP, r5) +	mov	r5, r15  	/* save stbcr */  	bsr     save_register @@ -60,7 +100,7 @@ ENTRY(sh_mobile_sleep_enter_start)  	tst	#SUSP_SH_MMU, r0  	bt	skip_mmu_save_disable -       /* save mmu state */ +	/* save mmu state */  	bsr	save_register  	 mov	#SH_SLEEP_REG_PTEH, r0 @@ -177,6 +217,29 @@ get_register:  	mov.l	@(r0, r5), r0  	rts  	 nop + +set_sr: +	stc	sr, r8 +	and	r9, r8 +	or	r10, r8 +	ldc	r8, sr +	rts +	 nop + +save_low_regs: +	mov.l	r7, @-r15 +	mov.l	r6, @-r15 +	mov.l	r5, @-r15 +	mov.l	r4, @-r15 +	mov.l	r3, @-r15 +	mov.l	r2, @-r15 +	mov.l	r1, @-r15 +	rts +	 mov.l	r0, @-r15 + +	.balign 4 +rb_bit:	.long	0x20000000 ! RB=1 +  ENTRY(sh_mobile_sleep_enter_end)  	.balign 4 @@ -270,6 +333,40 @@ skip_restore_sf:  	icbi	@r0  skip_restore_mmu: + +	/* restore general purpose registers if needed */ +	mov.l	@(SH_SLEEP_MODE, r5), r0 +	tst	#SUSP_SH_REGS, r0 +	bt	skip_restore_regs + +	/* switch to bank 1, restore low registers */ +	mov.l	_rb_bit, r10 +	bsr	_set_sr +	 mov	#-1, r9 + +	bsr	restore_low_regs +	 nop + +	/* switch to bank0, restore low registers */ +	mov.l	_rb_bit, r9 +	not	r9, r9 +	bsr	_set_sr +	 mov	#0, r10 + +	bsr	restore_low_regs +	 nop + +	/* restore the rest of the registers */ +	mov.l	@r15+, r8 +	mov.l	@r15+, r9 +	mov.l	@r15+, r10 +	mov.l	@r15+, r11 +	mov.l	@r15+, r12 +	mov.l	@r15+, r13 +	mov.l	@r15+, r14 +	lds.l	@r15+, pr + +skip_restore_regs:  	rte  	 nop @@ -283,6 +380,26 @@ restore_register:  	rts  	 nop +_set_sr: +	stc	sr, r8 +	and	r9, r8 +	or	r10, r8 +	ldc	r8, sr +	rts +	 nop + +restore_low_regs: +	mov.l	@r15+, r0 +	mov.l	@r15+, r1 +	mov.l	@r15+, r2 +	mov.l	@r15+, r3 +	mov.l	@r15+, r4 +	mov.l	@r15+, r5 +	mov.l	@r15+, r6 +	rts +	 mov.l	@r15+, r7 +  	.balign 4 +_rb_bit:	.long	0x20000000 ! RB=1  1:	.long	~0x7ff  ENTRY(sh_mobile_sleep_resume_end) diff --git a/arch/sh/kernel/cpufreq.c b/arch/sh/kernel/cpufreq.c index dce4f3ff093..0fffacea6ed 100644 --- a/arch/sh/kernel/cpufreq.c +++ b/arch/sh/kernel/cpufreq.c @@ -48,7 +48,7 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy,  		return -ENODEV;  	cpus_allowed = current->cpus_allowed; -	set_cpus_allowed(current, cpumask_of_cpu(cpu)); +	set_cpus_allowed_ptr(current, cpumask_of(cpu));  	BUG_ON(smp_processor_id() != cpu); @@ -66,7 +66,7 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy,  	freqs.flags	= 0;  	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); -	set_cpus_allowed(current, cpus_allowed); +	set_cpus_allowed_ptr(current, &cpus_allowed);  	clk_set_rate(cpuclk, freq);  	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c index 95d21625556..37c97d44457 100644 --- a/arch/sh/kernel/crash_dump.c +++ b/arch/sh/kernel/crash_dump.c @@ -4,7 +4,6 @@   *	Created by: Hariprasad Nellitheertha (hari@in.ibm.com)   *	Copyright (C) IBM Corporation, 2004. All rights reserved   */ -  #include <linux/errno.h>  #include <linux/crash_dump.h>  #include <linux/io.h> @@ -13,6 +12,25 @@  /* Stores the physical address of elf header of crash image. */  unsigned long long elfcorehdr_addr = ELFCORE_ADDR_MAX; +/* + * Note: elfcorehdr_addr is not just limited to vmcore. It is also used by + * is_kdump_kernel() to determine if we are booting after a panic. Hence + * ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. + * + * elfcorehdr= specifies the location of elf core header + * stored by the crashed kernel. + */ +static int __init parse_elfcorehdr(char *arg) +{ +	if (!arg) +		return -EINVAL; + +	elfcorehdr_addr = memparse(arg, &arg); + +	return 0; +} +early_param("elfcorehdr", parse_elfcorehdr); +  /**   * copy_oldmem_page - copy one page from "oldmem"   * @pfn: page frame number to be copied diff --git a/arch/sh/kernel/debugtraps.S b/arch/sh/kernel/debugtraps.S index 591741383ee..7a1b46fec0f 100644 --- a/arch/sh/kernel/debugtraps.S +++ b/arch/sh/kernel/debugtraps.S @@ -13,7 +13,6 @@  #include <linux/linkage.h>  #if !defined(CONFIG_KGDB) -#define breakpoint_trap_handler		debug_trap_handler  #define singlestep_trap_handler		debug_trap_handler  #endif diff --git a/arch/sh/kernel/dwarf.c b/arch/sh/kernel/dwarf.c index 3576b709f05..886d7d83ace 100644 --- a/arch/sh/kernel/dwarf.c +++ b/arch/sh/kernel/dwarf.c @@ -22,6 +22,8 @@  #include <linux/mm.h>  #include <linux/elf.h>  #include <linux/ftrace.h> +#include <linux/module.h> +#include <linux/slab.h>  #include <asm/dwarf.h>  #include <asm/unwinder.h>  #include <asm/sections.h> @@ -39,10 +41,10 @@ static mempool_t *dwarf_frame_pool;  static struct kmem_cache *dwarf_reg_cachep;  static mempool_t *dwarf_reg_pool; -static LIST_HEAD(dwarf_cie_list); +static struct rb_root cie_root;  static DEFINE_SPINLOCK(dwarf_cie_lock); -static LIST_HEAD(dwarf_fde_list); +static struct rb_root fde_root;  static DEFINE_SPINLOCK(dwarf_fde_lock);  static struct dwarf_cie *cached_cie; @@ -301,7 +303,8 @@ static inline int dwarf_entry_len(char *addr, unsigned long *len)   */  static struct dwarf_cie *dwarf_lookup_cie(unsigned long cie_ptr)  { -	struct dwarf_cie *cie; +	struct rb_node **rb_node = &cie_root.rb_node; +	struct dwarf_cie *cie = NULL;  	unsigned long flags;  	spin_lock_irqsave(&dwarf_cie_lock, flags); @@ -315,16 +318,24 @@ static struct dwarf_cie *dwarf_lookup_cie(unsigned long cie_ptr)  		goto out;  	} -	list_for_each_entry(cie, &dwarf_cie_list, link) { -		if (cie->cie_pointer == cie_ptr) { -			cached_cie = cie; -			break; +	while (*rb_node) { +		struct dwarf_cie *cie_tmp; + +		cie_tmp = rb_entry(*rb_node, struct dwarf_cie, node); +		BUG_ON(!cie_tmp); + +		if (cie_ptr == cie_tmp->cie_pointer) { +			cie = cie_tmp; +			cached_cie = cie_tmp; +			goto out; +		} else { +			if (cie_ptr < cie_tmp->cie_pointer) +				rb_node = &(*rb_node)->rb_left; +			else +				rb_node = &(*rb_node)->rb_right;  		}  	} -	/* Couldn't find the entry in the list. */ -	if (&cie->link == &dwarf_cie_list) -		cie = NULL;  out:  	spin_unlock_irqrestore(&dwarf_cie_lock, flags);  	return cie; @@ -336,25 +347,34 @@ out:   */  struct dwarf_fde *dwarf_lookup_fde(unsigned long pc)  { -	struct dwarf_fde *fde; +	struct rb_node **rb_node = &fde_root.rb_node; +	struct dwarf_fde *fde = NULL;  	unsigned long flags;  	spin_lock_irqsave(&dwarf_fde_lock, flags); -	list_for_each_entry(fde, &dwarf_fde_list, link) { -		unsigned long start, end; +	while (*rb_node) { +		struct dwarf_fde *fde_tmp; +		unsigned long tmp_start, tmp_end; -		start = fde->initial_location; -		end = fde->initial_location + fde->address_range; +		fde_tmp = rb_entry(*rb_node, struct dwarf_fde, node); +		BUG_ON(!fde_tmp); -		if (pc >= start && pc < end) -			break; -	} +		tmp_start = fde_tmp->initial_location; +		tmp_end = fde_tmp->initial_location + fde_tmp->address_range; -	/* Couldn't find the entry in the list. */ -	if (&fde->link == &dwarf_fde_list) -		fde = NULL; +		if (pc < tmp_start) { +			rb_node = &(*rb_node)->rb_left; +		} else { +			if (pc < tmp_end) { +				fde = fde_tmp; +				goto out; +			} else +				rb_node = &(*rb_node)->rb_right; +		} +	} +out:  	spin_unlock_irqrestore(&dwarf_fde_lock, flags);  	return fde; @@ -540,6 +560,8 @@ void dwarf_free_frame(struct dwarf_frame *frame)  	mempool_free(frame, dwarf_frame_pool);  } +extern void ret_from_irq(void); +  /**   *	dwarf_unwind_stack - unwind the stack   * @@ -550,8 +572,8 @@ void dwarf_free_frame(struct dwarf_frame *frame)   *	on the callstack. Each of the lower (older) stack frames are   *	linked via the "prev" member.   */ -struct dwarf_frame * dwarf_unwind_stack(unsigned long pc, -					struct dwarf_frame *prev) +struct dwarf_frame *dwarf_unwind_stack(unsigned long pc, +				       struct dwarf_frame *prev)  {  	struct dwarf_frame *frame;  	struct dwarf_cie *cie; @@ -678,6 +700,24 @@ struct dwarf_frame * dwarf_unwind_stack(unsigned long pc,  	addr = frame->cfa + reg->addr;  	frame->return_addr = __raw_readl(addr); +	/* +	 * Ah, the joys of unwinding through interrupts. +	 * +	 * Interrupts are tricky - the DWARF info needs to be _really_ +	 * accurate and unfortunately I'm seeing a lot of bogus DWARF +	 * info. For example, I've seen interrupts occur in epilogues +	 * just after the frame pointer (r14) had been restored. The +	 * problem was that the DWARF info claimed that the CFA could be +	 * reached by using the value of the frame pointer before it was +	 * restored. +	 * +	 * So until the compiler can be trusted to produce reliable +	 * DWARF info when it really matters, let's stop unwinding once +	 * we've calculated the function that was interrupted. +	 */ +	if (prev && prev->pc == (unsigned long)ret_from_irq) +		frame->return_addr = 0; +  	return frame;  bail: @@ -688,6 +728,8 @@ bail:  static int dwarf_parse_cie(void *entry, void *p, unsigned long len,  			   unsigned char *end, struct module *mod)  { +	struct rb_node **rb_node = &cie_root.rb_node; +	struct rb_node *parent = *rb_node;  	struct dwarf_cie *cie;  	unsigned long flags;  	int count; @@ -782,11 +824,32 @@ static int dwarf_parse_cie(void *entry, void *p, unsigned long len,  	cie->initial_instructions = p;  	cie->instructions_end = end; -	cie->mod = mod; -  	/* Add to list */  	spin_lock_irqsave(&dwarf_cie_lock, flags); -	list_add_tail(&cie->link, &dwarf_cie_list); + +	while (*rb_node) { +		struct dwarf_cie *cie_tmp; + +		cie_tmp = rb_entry(*rb_node, struct dwarf_cie, node); + +		parent = *rb_node; + +		if (cie->cie_pointer < cie_tmp->cie_pointer) +			rb_node = &parent->rb_left; +		else if (cie->cie_pointer >= cie_tmp->cie_pointer) +			rb_node = &parent->rb_right; +		else +			WARN_ON(1); +	} + +	rb_link_node(&cie->node, parent, rb_node); +	rb_insert_color(&cie->node, &cie_root); + +#ifdef CONFIG_MODULES +	if (mod != NULL) +		list_add_tail(&cie->link, &mod->arch.cie_list); +#endif +  	spin_unlock_irqrestore(&dwarf_cie_lock, flags);  	return 0; @@ -796,6 +859,8 @@ static int dwarf_parse_fde(void *entry, u32 entry_type,  			   void *start, unsigned long len,  			   unsigned char *end, struct module *mod)  { +	struct rb_node **rb_node = &fde_root.rb_node; +	struct rb_node *parent = *rb_node;  	struct dwarf_fde *fde;  	struct dwarf_cie *cie;  	unsigned long flags; @@ -843,11 +908,40 @@ static int dwarf_parse_fde(void *entry, u32 entry_type,  	fde->instructions = p;  	fde->end = end; -	fde->mod = mod; -  	/* Add to list. */  	spin_lock_irqsave(&dwarf_fde_lock, flags); -	list_add_tail(&fde->link, &dwarf_fde_list); + +	while (*rb_node) { +		struct dwarf_fde *fde_tmp; +		unsigned long tmp_start, tmp_end; +		unsigned long start, end; + +		fde_tmp = rb_entry(*rb_node, struct dwarf_fde, node); + +		start = fde->initial_location; +		end = fde->initial_location + fde->address_range; + +		tmp_start = fde_tmp->initial_location; +		tmp_end = fde_tmp->initial_location + fde_tmp->address_range; + +		parent = *rb_node; + +		if (start < tmp_start) +			rb_node = &parent->rb_left; +		else if (start >= tmp_end) +			rb_node = &parent->rb_right; +		else +			WARN_ON(1); +	} + +	rb_link_node(&fde->node, parent, rb_node); +	rb_insert_color(&fde->node, &fde_root); + +#ifdef CONFIG_MODULES +	if (mod != NULL) +		list_add_tail(&fde->link, &mod->arch.fde_list); +#endif +  	spin_unlock_irqrestore(&dwarf_fde_lock, flags);  	return 0; @@ -892,19 +986,29 @@ static struct unwinder dwarf_unwinder = {  static void dwarf_unwinder_cleanup(void)  { -	struct dwarf_cie *cie; -	struct dwarf_fde *fde; +	struct rb_node **fde_rb_node = &fde_root.rb_node; +	struct rb_node **cie_rb_node = &cie_root.rb_node;  	/*  	 * Deallocate all the memory allocated for the DWARF unwinder.  	 * Traverse all the FDE/CIE lists and remove and free all the  	 * memory associated with those data structures.  	 */ -	list_for_each_entry(cie, &dwarf_cie_list, link) -		kfree(cie); +	while (*fde_rb_node) { +		struct dwarf_fde *fde; -	list_for_each_entry(fde, &dwarf_fde_list, link) +		fde = rb_entry(*fde_rb_node, struct dwarf_fde, node); +		rb_erase(*fde_rb_node, &fde_root);  		kfree(fde); +	} + +	while (*cie_rb_node) { +		struct dwarf_cie *cie; + +		cie = rb_entry(*cie_rb_node, struct dwarf_cie, node); +		rb_erase(*cie_rb_node, &cie_root); +		kfree(cie); +	}  	kmem_cache_destroy(dwarf_reg_cachep);  	kmem_cache_destroy(dwarf_frame_cachep); @@ -1004,6 +1108,8 @@ int module_dwarf_finalize(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs,  	/* Did we find the .eh_frame section? */  	if (i != hdr->e_shnum) { +		INIT_LIST_HEAD(&me->arch.cie_list); +		INIT_LIST_HEAD(&me->arch.fde_list);  		err = dwarf_parse_section((char *)start, (char *)end, me);  		if (err) {  			printk(KERN_WARNING "%s: failed to parse DWARF info\n", @@ -1024,38 +1130,26 @@ int module_dwarf_finalize(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs,   */  void module_dwarf_cleanup(struct module *mod)  { -	struct dwarf_fde *fde; -	struct dwarf_cie *cie; +	struct dwarf_fde *fde, *ftmp; +	struct dwarf_cie *cie, *ctmp;  	unsigned long flags;  	spin_lock_irqsave(&dwarf_cie_lock, flags); -again_cie: -	list_for_each_entry(cie, &dwarf_cie_list, link) { -		if (cie->mod == mod) -			break; -	} - -	if (&cie->link != &dwarf_cie_list) { +	list_for_each_entry_safe(cie, ctmp, &mod->arch.cie_list, link) {  		list_del(&cie->link); +		rb_erase(&cie->node, &cie_root);  		kfree(cie); -		goto again_cie;  	}  	spin_unlock_irqrestore(&dwarf_cie_lock, flags);  	spin_lock_irqsave(&dwarf_fde_lock, flags); -again_fde: -	list_for_each_entry(fde, &dwarf_fde_list, link) { -		if (fde->mod == mod) -			break; -	} - -	if (&fde->link != &dwarf_fde_list) { +	list_for_each_entry_safe(fde, ftmp, &mod->arch.fde_list, link) {  		list_del(&fde->link); +		rb_erase(&fde->node, &fde_root);  		kfree(fde); -		goto again_fde;  	}  	spin_unlock_irqrestore(&dwarf_fde_lock, flags); @@ -1074,8 +1168,6 @@ again_fde:  static int __init dwarf_unwinder_init(void)  {  	int err; -	INIT_LIST_HEAD(&dwarf_cie_list); -	INIT_LIST_HEAD(&dwarf_fde_list);  	dwarf_frame_cachep = kmem_cache_create("dwarf_frames",  			sizeof(struct dwarf_frame), 0, diff --git a/arch/sh/kernel/early_printk.c b/arch/sh/kernel/early_printk.c deleted file mode 100644 index f8bb50c6e05..00000000000 --- a/arch/sh/kernel/early_printk.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * arch/sh/kernel/early_printk.c - * - *  Copyright (C) 1999, 2000  Niibe Yutaka - *  Copyright (C) 2002  M. R. Brown - *  Copyright (C) 2004 - 2007  Paul Mundt - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#include <linux/console.h> -#include <linux/tty.h> -#include <linux/init.h> -#include <linux/io.h> -#include <linux/delay.h> - -#include <asm/sh_bios.h> - -/* - *	Print a string through the BIOS - */ -static void sh_console_write(struct console *co, const char *s, -				 unsigned count) -{ -	sh_bios_console_write(s, count); -} - -/* - *	Setup initial baud/bits/parity. We do two things here: - *	- construct a cflag setting for the first rs_open() - *	- initialize the serial port - *	Return non-zero if we didn't find a serial port. - */ -static int __init sh_console_setup(struct console *co, char *options) -{ -	int	cflag = CREAD | HUPCL | CLOCAL; - -	/* -	 *	Now construct a cflag setting. -	 *	TODO: this is a totally bogus cflag, as we have -	 *	no idea what serial settings the BIOS is using, or -	 *	even if its using the serial port at all. -	 */ -	cflag |= B115200 | CS8 | /*no parity*/0; - -	co->cflag = cflag; - -	return 0; -} - -static struct console bios_console = { -	.name		= "bios", -	.write		= sh_console_write, -	.setup		= sh_console_setup, -	.flags		= CON_PRINTBUFFER, -	.index		= -1, -}; - -static struct console *early_console; - -static int __init setup_early_printk(char *buf) -{ -	int keep_early = 0; - -	if (!buf) -		return 0; - -	if (strstr(buf, "keep")) -		keep_early = 1; - -	if (!strncmp(buf, "bios", 4)) -		early_console = &bios_console; - -	if (likely(early_console)) { -		if (keep_early) -			early_console->flags &= ~CON_BOOT; -		else -			early_console->flags |= CON_BOOT; -		register_console(early_console); -	} - -	return 0; -} -early_param("earlyprintk", setup_early_printk); diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S index f0abd58c3a6..2b15ae60c3a 100644 --- a/arch/sh/kernel/entry-common.S +++ b/arch/sh/kernel/entry-common.S @@ -70,8 +70,14 @@ ret_from_exception:  	CFI_STARTPROC simple  	CFI_DEF_CFA r14, 0  	CFI_REL_OFFSET 17, 64 -	CFI_REL_OFFSET 15, 0 +	CFI_REL_OFFSET 15, 60  	CFI_REL_OFFSET 14, 56 +	CFI_REL_OFFSET 13, 52 +	CFI_REL_OFFSET 12, 48 +	CFI_REL_OFFSET 11, 44 +	CFI_REL_OFFSET 10, 40 +	CFI_REL_OFFSET 9, 36 +	CFI_REL_OFFSET 8, 32  	preempt_stop()  ENTRY(ret_from_irq)  	! diff --git a/arch/sh/kernel/ftrace.c b/arch/sh/kernel/ftrace.c index a48cdedc73b..30e13196d35 100644 --- a/arch/sh/kernel/ftrace.c +++ b/arch/sh/kernel/ftrace.c @@ -399,12 +399,3 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)  	}  }  #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ - -#ifdef CONFIG_FTRACE_SYSCALLS -extern unsigned long *sys_call_table; - -unsigned long __init arch_syscall_addr(int nr) -{ -	return (unsigned long)sys_call_table[nr]; -} -#endif /* CONFIG_FTRACE_SYSCALLS */ diff --git a/arch/sh/kernel/head_32.S b/arch/sh/kernel/head_32.S index 1151ecdffa7..6e35f012cc0 100644 --- a/arch/sh/kernel/head_32.S +++ b/arch/sh/kernel/head_32.S @@ -3,6 +3,7 @@   *  arch/sh/kernel/head.S   *   *  Copyright (C) 1999, 2000  Niibe Yutaka & Kaz Kojima + *  Copyright (C) 2010  Matt Fleming   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -13,6 +14,8 @@  #include <linux/init.h>  #include <linux/linkage.h>  #include <asm/thread_info.h> +#include <asm/mmu.h> +#include <cpu/mmu_context.h>  #ifdef CONFIG_CPU_SH4A  #define SYNCO()		synco @@ -33,7 +36,7 @@ ENTRY(empty_zero_page)  	.long	1		/* LOADER_TYPE */  	.long	0x00000000	/* INITRD_START */  	.long	0x00000000	/* INITRD_SIZE */ -#if defined(CONFIG_32BIT) && defined(CONFIG_PMB_FIXED) +#ifdef CONFIG_32BIT  	.long	0x53453f00 + 32	/* "SE?" = 32 bit */  #else  	.long	0x53453f00 + 29	/* "SE?" = 29 bit */ @@ -82,6 +85,211 @@ ENTRY(_stext)  	ldc	r0, r7_bank	! ... and initial thread_info  #endif +#ifdef CONFIG_PMB +/* + * Reconfigure the initial PMB mappings setup by the hardware. + * + * When we boot in 32-bit MMU mode there are 2 PMB entries already + * setup for us. + * + * Entry       VPN	   PPN	    V	SZ	C	UB	WT + * --------------------------------------------------------------- + *   0	    0x80000000 0x00000000   1  512MB	1	0	1 + *   1	    0xA0000000 0x00000000   1  512MB	0	0	0 + * + * But we reprogram them here because we want complete control over + * our address space and the initial mappings may not map PAGE_OFFSET + * to __MEMORY_START (or even map all of our RAM). + * + * Once we've setup cached and uncached mappings we clear the rest of the + * PMB entries. This clearing also deals with the fact that PMB entries + * can persist across reboots. The PMB could have been left in any state + * when the reboot occurred, so to be safe we clear all entries and start + * with with a clean slate. + * + * The uncached mapping is constructed using the smallest possible + * mapping with a single unbufferable page. Only the kernel text needs to + * be covered via the uncached mapping so that certain functions can be + * run uncached. + * + * Drivers and the like that have previously abused the 1:1 identity + * mapping are unsupported in 32-bit mode and must specify their caching + * preference when page tables are constructed. + * + * This frees up the P2 space for more nefarious purposes. + * + * Register utilization is as follows: + * + *	r0 = PMB_DATA data field + *	r1 = PMB_DATA address field + *	r2 = PMB_ADDR data field + *	r3 = PMB_ADDR address field + *	r4 = PMB_E_SHIFT + *	r5 = remaining amount of RAM to map + *	r6 = PMB mapping size we're trying to use + *	r7 = cached_to_uncached + *	r8 = scratch register + *	r9 = scratch register + *	r10 = number of PMB entries we've setup + *	r11 = scratch register + */ + +	mov.l	.LMMUCR, r1	/* Flush the TLB */ +	mov.l	@r1, r0 +	or	#MMUCR_TI, r0 +	mov.l	r0, @r1 + +	mov.l	.LMEMORY_SIZE, r5 + +	mov	#PMB_E_SHIFT, r0 +	mov	#0x1, r4 +	shld	r0, r4 + +	mov.l	.LFIRST_DATA_ENTRY, r0 +	mov.l	.LPMB_DATA, r1 +	mov.l	.LFIRST_ADDR_ENTRY, r2 +	mov.l	.LPMB_ADDR, r3 + +	/* +	 * First we need to walk the PMB and figure out if there are any +	 * existing mappings that match the initial mappings VPN/PPN. +	 * If these have already been established by the bootloader, we +	 * don't bother setting up new entries here, and let the late PMB +	 * initialization take care of things instead. +	 * +	 * Note that we may need to coalesce and merge entries in order +	 * to reclaim more available PMB slots, which is much more than +	 * we want to do at this early stage. +	 */ +	mov	#0, r10 +	mov	#NR_PMB_ENTRIES, r9 + +	mov	r1, r7		/* temporary PMB_DATA iter */ + +.Lvalidate_existing_mappings: + +	mov.l	.LPMB_DATA_MASK, r11 +	mov.l	@r7, r8 +	and	r11, r8 +	cmp/eq	r0, r8		/* Check for valid __MEMORY_START mappings */ +	bt	.Lpmb_done + +	add	#1, r10		/* Increment the loop counter */ +	cmp/eq	r9, r10 +	bf/s	.Lvalidate_existing_mappings +	 add	r4, r7		/* Increment to the next PMB_DATA entry */ + +	/* +	 * If we've fallen through, continue with setting up the initial +	 * mappings. +	 */ + +	mov	r5, r7		/* cached_to_uncached */ +	mov	#0, r10 + +#ifdef CONFIG_UNCACHED_MAPPING +	/* +	 * Uncached mapping +	 */ +	mov	#(PMB_SZ_16M >> 2), r9 +	shll2	r9 + +	mov	#(PMB_UB >> 8), r8 +	shll8	r8 + +	or	r0, r8 +	or	r9, r8 +	mov.l	r8, @r1 +	mov	r2, r8 +	add	r7, r8 +	mov.l	r8, @r3 + +	add	r4, r1 +	add	r4, r3 +	add	#1, r10 +#endif + +/* + * Iterate over all of the available sizes from largest to + * smallest for constructing the cached mapping. + */ +#define __PMB_ITER_BY_SIZE(size)			\ +.L##size:						\ +	mov	#(size >> 4), r6;			\ +	shll16	r6;					\ +	shll8	r6;					\ +							\ +	cmp/hi	r5, r6;					\ +	bt	9999f;					\ +							\ +	mov	#(PMB_SZ_##size##M >> 2), r9;		\ +	shll2	r9;					\ +							\ +	/*						\ +	 * Cached mapping				\ +	 */						\ +	mov	#PMB_C, r8;				\ +	or	r0, r8;					\ +	or	r9, r8;					\ +	mov.l	r8, @r1;				\ +	mov.l	r2, @r3;				\ +							\ +	/* Increment to the next PMB_DATA entry */	\ +	add	r4, r1;					\ +	/* Increment to the next PMB_ADDR entry */	\ +	add	r4, r3;					\ +	/* Increment number of PMB entries */		\ +	add	#1, r10;				\ +							\ +	sub	r6, r5;					\ +	add	r6, r0;					\ +	add	r6, r2;					\ +							\ +	bra	.L##size;				\ +9999: + +	__PMB_ITER_BY_SIZE(512) +	__PMB_ITER_BY_SIZE(128) +	__PMB_ITER_BY_SIZE(64) +	__PMB_ITER_BY_SIZE(16) + +#ifdef CONFIG_UNCACHED_MAPPING +	/* +	 * Now that we can access it, update cached_to_uncached and +	 * uncached_size. +	 */ +	mov.l	.Lcached_to_uncached, r0 +	mov.l	r7, @r0 + +	mov.l	.Luncached_size, r0 +	mov	#1, r7 +	shll16	r7 +	shll8	r7 +	mov.l	r7, @r0 +#endif + +	/* +	 * Clear the remaining PMB entries. +	 * +	 * r3 = entry to begin clearing from +	 * r10 = number of entries we've setup so far +	 */ +	mov	#0, r1 +	mov	#NR_PMB_ENTRIES, r0 + +.Lagain: +	mov.l	r1, @r3		/* Clear PMB_ADDR entry */ +	add	#1, r10		/* Increment the loop counter */ +	cmp/eq	r0, r10 +	bf/s	.Lagain +	 add	r4, r3		/* Increment to the next PMB_ADDR entry */ + +	mov.l	6f, r0 +	icbi	@r0 + +.Lpmb_done: +#endif /* CONFIG_PMB */ +  #ifndef CONFIG_SH_NO_BSS_INIT  	/*  	 * Don't clear BSS if running on slow platforms such as an RTL simulation, @@ -129,5 +337,19 @@ ENTRY(stack_start)  3:	.long	__bss_start  4:	.long	_end  5:	.long	start_kernel -6:	.long	sh_cpu_init +6:	.long	cpu_init  7:	.long	init_thread_union + +#ifdef CONFIG_PMB +.LPMB_ADDR:		.long	PMB_ADDR +.LPMB_DATA:		.long	PMB_DATA +.LPMB_DATA_MASK:	.long	PMB_PFN_MASK | PMB_V +.LFIRST_ADDR_ENTRY:	.long	PAGE_OFFSET | PMB_V +.LFIRST_DATA_ENTRY:	.long	__MEMORY_START | PMB_V +.LMMUCR:		.long	MMUCR +.LMEMORY_SIZE:		.long	__MEMORY_SIZE +#ifdef CONFIG_UNCACHED_MAPPING +.Lcached_to_uncached:	.long	cached_to_uncached +.Luncached_size:	.long	uncached_size +#endif +#endif diff --git a/arch/sh/kernel/head_64.S b/arch/sh/kernel/head_64.S index 3ea765844c7..defd851abef 100644 --- a/arch/sh/kernel/head_64.S +++ b/arch/sh/kernel/head_64.S @@ -220,7 +220,6 @@ clear_DTLB:  	add.l	r22, r63, r22		/* Sign extend */  	putcfg	r21, 0, r22		/* Set MMUDR[0].PTEH */ -#ifdef CONFIG_EARLY_PRINTK  	/*  	 * Setup a DTLB translation for SCIF phys.  	 */ @@ -231,7 +230,6 @@ clear_DTLB:  	movi    0xfa03, r22	/* 0xfa030000, fixed SCIF virt */  	shori   0x0003, r22  	putcfg  r21, 0, r22	/* PTEH last */ -#endif  	/*  	 * Set cache behaviours. diff --git a/arch/sh/kernel/hw_breakpoint.c b/arch/sh/kernel/hw_breakpoint.c new file mode 100644 index 00000000000..efae6ab3d54 --- /dev/null +++ b/arch/sh/kernel/hw_breakpoint.c @@ -0,0 +1,420 @@ +/* + * arch/sh/kernel/hw_breakpoint.c + * + * Unified kernel/user-space hardware breakpoint facility for the on-chip UBC. + * + * Copyright (C) 2009 - 2010  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/perf_event.h> +#include <linux/hw_breakpoint.h> +#include <linux/percpu.h> +#include <linux/kallsyms.h> +#include <linux/notifier.h> +#include <linux/kprobes.h> +#include <linux/kdebug.h> +#include <linux/io.h> +#include <linux/clk.h> +#include <asm/hw_breakpoint.h> +#include <asm/mmu_context.h> +#include <asm/ptrace.h> + +/* + * Stores the breakpoints currently in use on each breakpoint address + * register for each cpus + */ +static DEFINE_PER_CPU(struct perf_event *, bp_per_reg[HBP_NUM]); + +/* + * A dummy placeholder for early accesses until the CPUs get a chance to + * register their UBCs later in the boot process. + */ +static struct sh_ubc ubc_dummy = { .num_events = 0 }; + +static struct sh_ubc *sh_ubc __read_mostly = &ubc_dummy; + +/* + * Install a perf counter breakpoint. + * + * We seek a free UBC channel and use it for this breakpoint. + * + * Atomic: we hold the counter->ctx->lock and we only handle variables + * and registers local to this cpu. + */ +int arch_install_hw_breakpoint(struct perf_event *bp) +{ +	struct arch_hw_breakpoint *info = counter_arch_bp(bp); +	int i; + +	for (i = 0; i < sh_ubc->num_events; i++) { +		struct perf_event **slot = &__get_cpu_var(bp_per_reg[i]); + +		if (!*slot) { +			*slot = bp; +			break; +		} +	} + +	if (WARN_ONCE(i == sh_ubc->num_events, "Can't find any breakpoint slot")) +		return -EBUSY; + +	clk_enable(sh_ubc->clk); +	sh_ubc->enable(info, i); + +	return 0; +} + +/* + * Uninstall the breakpoint contained in the given counter. + * + * First we search the debug address register it uses and then we disable + * it. + * + * Atomic: we hold the counter->ctx->lock and we only handle variables + * and registers local to this cpu. + */ +void arch_uninstall_hw_breakpoint(struct perf_event *bp) +{ +	struct arch_hw_breakpoint *info = counter_arch_bp(bp); +	int i; + +	for (i = 0; i < sh_ubc->num_events; i++) { +		struct perf_event **slot = &__get_cpu_var(bp_per_reg[i]); + +		if (*slot == bp) { +			*slot = NULL; +			break; +		} +	} + +	if (WARN_ONCE(i == sh_ubc->num_events, "Can't find any breakpoint slot")) +		return; + +	sh_ubc->disable(info, i); +	clk_disable(sh_ubc->clk); +} + +static int get_hbp_len(u16 hbp_len) +{ +	unsigned int len_in_bytes = 0; + +	switch (hbp_len) { +	case SH_BREAKPOINT_LEN_1: +		len_in_bytes = 1; +		break; +	case SH_BREAKPOINT_LEN_2: +		len_in_bytes = 2; +		break; +	case SH_BREAKPOINT_LEN_4: +		len_in_bytes = 4; +		break; +	case SH_BREAKPOINT_LEN_8: +		len_in_bytes = 8; +		break; +	} +	return len_in_bytes; +} + +/* + * Check for virtual address in kernel space. + */ +int arch_check_bp_in_kernelspace(struct perf_event *bp) +{ +	unsigned int len; +	unsigned long va; +	struct arch_hw_breakpoint *info = counter_arch_bp(bp); + +	va = info->address; +	len = get_hbp_len(info->len); + +	return (va >= TASK_SIZE) && ((va + len - 1) >= TASK_SIZE); +} + +int arch_bp_generic_fields(int sh_len, int sh_type, +			   int *gen_len, int *gen_type) +{ +	/* Len */ +	switch (sh_len) { +	case SH_BREAKPOINT_LEN_1: +		*gen_len = HW_BREAKPOINT_LEN_1; +		break; +	case SH_BREAKPOINT_LEN_2: +		*gen_len = HW_BREAKPOINT_LEN_2; +		break; +	case SH_BREAKPOINT_LEN_4: +		*gen_len = HW_BREAKPOINT_LEN_4; +		break; +	case SH_BREAKPOINT_LEN_8: +		*gen_len = HW_BREAKPOINT_LEN_8; +		break; +	default: +		return -EINVAL; +	} + +	/* Type */ +	switch (sh_type) { +	case SH_BREAKPOINT_READ: +		*gen_type = HW_BREAKPOINT_R; +	case SH_BREAKPOINT_WRITE: +		*gen_type = HW_BREAKPOINT_W; +		break; +	case SH_BREAKPOINT_RW: +		*gen_type = HW_BREAKPOINT_W | HW_BREAKPOINT_R; +		break; +	default: +		return -EINVAL; +	} + +	return 0; +} + +static int arch_build_bp_info(struct perf_event *bp) +{ +	struct arch_hw_breakpoint *info = counter_arch_bp(bp); + +	info->address = bp->attr.bp_addr; + +	/* Len */ +	switch (bp->attr.bp_len) { +	case HW_BREAKPOINT_LEN_1: +		info->len = SH_BREAKPOINT_LEN_1; +		break; +	case HW_BREAKPOINT_LEN_2: +		info->len = SH_BREAKPOINT_LEN_2; +		break; +	case HW_BREAKPOINT_LEN_4: +		info->len = SH_BREAKPOINT_LEN_4; +		break; +	case HW_BREAKPOINT_LEN_8: +		info->len = SH_BREAKPOINT_LEN_8; +		break; +	default: +		return -EINVAL; +	} + +	/* Type */ +	switch (bp->attr.bp_type) { +	case HW_BREAKPOINT_R: +		info->type = SH_BREAKPOINT_READ; +		break; +	case HW_BREAKPOINT_W: +		info->type = SH_BREAKPOINT_WRITE; +		break; +	case HW_BREAKPOINT_W | HW_BREAKPOINT_R: +		info->type = SH_BREAKPOINT_RW; +		break; +	default: +		return -EINVAL; +	} + +	return 0; +} + +/* + * Validate the arch-specific HW Breakpoint register settings + */ +int arch_validate_hwbkpt_settings(struct perf_event *bp) +{ +	struct arch_hw_breakpoint *info = counter_arch_bp(bp); +	unsigned int align; +	int ret; + +	ret = arch_build_bp_info(bp); +	if (ret) +		return ret; + +	ret = -EINVAL; + +	switch (info->len) { +	case SH_BREAKPOINT_LEN_1: +		align = 0; +		break; +	case SH_BREAKPOINT_LEN_2: +		align = 1; +		break; +	case SH_BREAKPOINT_LEN_4: +		align = 3; +		break; +	case SH_BREAKPOINT_LEN_8: +		align = 7; +		break; +	default: +		return ret; +	} + +	/* +	 * For kernel-addresses, either the address or symbol name can be +	 * specified. +	 */ +	if (info->name) +		info->address = (unsigned long)kallsyms_lookup_name(info->name); + +	/* +	 * Check that the low-order bits of the address are appropriate +	 * for the alignment implied by len. +	 */ +	if (info->address & align) +		return -EINVAL; + +	return 0; +} + +/* + * Release the user breakpoints used by ptrace + */ +void flush_ptrace_hw_breakpoint(struct task_struct *tsk) +{ +	int i; +	struct thread_struct *t = &tsk->thread; + +	for (i = 0; i < sh_ubc->num_events; i++) { +		unregister_hw_breakpoint(t->ptrace_bps[i]); +		t->ptrace_bps[i] = NULL; +	} +} + +static int __kprobes hw_breakpoint_handler(struct die_args *args) +{ +	int cpu, i, rc = NOTIFY_STOP; +	struct perf_event *bp; +	unsigned int cmf, resume_mask; + +	/* +	 * Do an early return if none of the channels triggered. +	 */ +	cmf = sh_ubc->triggered_mask(); +	if (unlikely(!cmf)) +		return NOTIFY_DONE; + +	/* +	 * By default, resume all of the active channels. +	 */ +	resume_mask = sh_ubc->active_mask(); + +	/* +	 * Disable breakpoints during exception handling. +	 */ +	sh_ubc->disable_all(); + +	cpu = get_cpu(); +	for (i = 0; i < sh_ubc->num_events; i++) { +		unsigned long event_mask = (1 << i); + +		if (likely(!(cmf & event_mask))) +			continue; + +		/* +		 * The counter may be concurrently released but that can only +		 * occur from a call_rcu() path. We can then safely fetch +		 * the breakpoint, use its callback, touch its counter +		 * while we are in an rcu_read_lock() path. +		 */ +		rcu_read_lock(); + +		bp = per_cpu(bp_per_reg[i], cpu); +		if (bp) +			rc = NOTIFY_DONE; + +		/* +		 * Reset the condition match flag to denote completion of +		 * exception handling. +		 */ +		sh_ubc->clear_triggered_mask(event_mask); + +		/* +		 * bp can be NULL due to concurrent perf counter +		 * removing. +		 */ +		if (!bp) { +			rcu_read_unlock(); +			break; +		} + +		/* +		 * Don't restore the channel if the breakpoint is from +		 * ptrace, as it always operates in one-shot mode. +		 */ +		if (bp->overflow_handler == ptrace_triggered) +			resume_mask &= ~(1 << i); + +		perf_bp_event(bp, args->regs); + +		/* Deliver the signal to userspace */ +		if (!arch_check_bp_in_kernelspace(bp)) { +			siginfo_t info; + +			info.si_signo = args->signr; +			info.si_errno = notifier_to_errno(rc); +			info.si_code = TRAP_HWBKPT; + +			force_sig_info(args->signr, &info, current); +		} + +		rcu_read_unlock(); +	} + +	if (cmf == 0) +		rc = NOTIFY_DONE; + +	sh_ubc->enable_all(resume_mask); + +	put_cpu(); + +	return rc; +} + +BUILD_TRAP_HANDLER(breakpoint) +{ +	unsigned long ex = lookup_exception_vector(); +	TRAP_HANDLER_DECL; + +	notify_die(DIE_BREAKPOINT, "breakpoint", regs, 0, ex, SIGTRAP); +} + +/* + * Handle debug exception notifications. + */ +int __kprobes hw_breakpoint_exceptions_notify(struct notifier_block *unused, +				    unsigned long val, void *data) +{ +	struct die_args *args = data; + +	if (val != DIE_BREAKPOINT) +		return NOTIFY_DONE; + +	/* +	 * If the breakpoint hasn't been triggered by the UBC, it's +	 * probably from a debugger, so don't do anything more here. +	 * +	 * This also permits the UBC interface clock to remain off for +	 * non-UBC breakpoints, as we don't need to check the triggered +	 * or active channel masks. +	 */ +	if (args->trapnr != sh_ubc->trap_nr) +		return NOTIFY_DONE; + +	return hw_breakpoint_handler(data); +} + +void hw_breakpoint_pmu_read(struct perf_event *bp) +{ +	/* TODO */ +} + +int register_sh_ubc(struct sh_ubc *ubc) +{ +	/* Bail if it's already assigned */ +	if (sh_ubc != &ubc_dummy) +		return -EBUSY; +	sh_ubc = ubc; + +	pr_info("HW Breakpoints: %s UBC support registered\n", ubc->name); + +	WARN_ON(ubc->num_events > HBP_NUM); + +	return 0; +} diff --git a/arch/sh/kernel/idle.c b/arch/sh/kernel/idle.c index 6b3d706deac..425d604e3a2 100644 --- a/arch/sh/kernel/idle.c +++ b/arch/sh/kernel/idle.c @@ -19,11 +19,11 @@  #include <asm/pgalloc.h>  #include <asm/system.h>  #include <asm/atomic.h> +#include <asm/smp.h> -static int hlt_counter;  void (*pm_idle)(void) = NULL; -void (*pm_power_off)(void); -EXPORT_SYMBOL(pm_power_off); + +static int hlt_counter;  static int __init nohlt_setup(char *__unused)  { @@ -90,10 +90,13 @@ void cpu_idle(void)  	while (1) {  		tick_nohz_stop_sched_tick(1); -		while (!need_resched() && cpu_online(cpu)) { +		while (!need_resched()) {  			check_pgt_cache();  			rmb(); +			if (cpu_is_offline(cpu)) +				play_dead(); +  			local_irq_disable();  			/* Don't trace irqs off for idle */  			stop_critical_timings(); @@ -113,7 +116,7 @@ void cpu_idle(void)  	}  } -void __cpuinit select_idle_routine(void) +void __init select_idle_routine(void)  {  	/*  	 * If a platform has set its own idle routine, leave it alone. @@ -131,6 +134,15 @@ static void do_nothing(void *unused)  {  } +void stop_this_cpu(void *unused) +{ +	local_irq_disable(); +	set_cpu_online(smp_processor_id(), false); + +	for (;;) +		cpu_sleep(); +} +  /*   * cpu_idle_wait - Used to ensure that all the CPUs discard old value of   * pm_idle and update to new pm_idle value. Required while changing pm_idle diff --git a/arch/sh/kernel/io_trapped.c b/arch/sh/kernel/io_trapped.c index 69be603aa2d..4a8bb4eeb8a 100644 --- a/arch/sh/kernel/io_trapped.c +++ b/arch/sh/kernel/io_trapped.c @@ -184,31 +184,31 @@ static unsigned long long copy_word(unsigned long src_addr, int src_len,  	switch (src_len) {  	case 1: -		tmp = ctrl_inb(src_addr); +		tmp = __raw_readb(src_addr);  		break;  	case 2: -		tmp = ctrl_inw(src_addr); +		tmp = __raw_readw(src_addr);  		break;  	case 4: -		tmp = ctrl_inl(src_addr); +		tmp = __raw_readl(src_addr);  		break;  	case 8: -		tmp = ctrl_inq(src_addr); +		tmp = __raw_readq(src_addr);  		break;  	}  	switch (dst_len) {  	case 1: -		ctrl_outb(tmp, dst_addr); +		__raw_writeb(tmp, dst_addr);  		break;  	case 2: -		ctrl_outw(tmp, dst_addr); +		__raw_writew(tmp, dst_addr);  		break;  	case 4: -		ctrl_outl(tmp, dst_addr); +		__raw_writel(tmp, dst_addr);  		break;  	case 8: -		ctrl_outq(tmp, dst_addr); +		__raw_writeq(tmp, dst_addr);  		break;  	} @@ -271,6 +271,8 @@ int handle_trapped_io(struct pt_regs *regs, unsigned long address)  	insn_size_t instruction;  	int tmp; +	if (trapped_io_disable) +		return 0;  	if (!lookup_tiop(address))  		return 0; diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index d2d41d04665..257de1f0692 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c @@ -12,6 +12,7 @@  #include <linux/kernel_stat.h>  #include <linux/seq_file.h>  #include <linux/ftrace.h> +#include <linux/delay.h>  #include <asm/processor.h>  #include <asm/machvec.h>  #include <asm/uaccess.h> @@ -113,19 +114,14 @@ union irq_ctx {  static union irq_ctx *hardirq_ctx[NR_CPUS] __read_mostly;  static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly; -#endif -asmlinkage __irq_entry int do_IRQ(unsigned int irq, struct pt_regs *regs) +static char softirq_stack[NR_CPUS * THREAD_SIZE] __page_aligned_bss; +static char hardirq_stack[NR_CPUS * THREAD_SIZE] __page_aligned_bss; + +static inline void handle_one_irq(unsigned int irq)  { -	struct pt_regs *old_regs = set_irq_regs(regs); -#ifdef CONFIG_IRQSTACKS  	union irq_ctx *curctx, *irqctx; -#endif - -	irq_enter(); -	irq = irq_demux(irq); -#ifdef CONFIG_IRQSTACKS  	curctx = (union irq_ctx *)current_thread_info();  	irqctx = hardirq_ctx[smp_processor_id()]; @@ -164,20 +160,9 @@ asmlinkage __irq_entry int do_IRQ(unsigned int irq, struct pt_regs *regs)  			  "r5", "r6", "r7", "r8", "t", "pr"  		);  	} else -#endif  		generic_handle_irq(irq); - -	irq_exit(); - -	set_irq_regs(old_regs); -	return 1;  } -#ifdef CONFIG_IRQSTACKS -static char softirq_stack[NR_CPUS * THREAD_SIZE] __page_aligned_bss; - -static char hardirq_stack[NR_CPUS * THREAD_SIZE] __page_aligned_bss; -  /*   * allocate per-cpu stacks for hardirq and for softirq processing   */ @@ -257,8 +242,33 @@ asmlinkage void do_softirq(void)  	local_irq_restore(flags);  } +#else +static inline void handle_one_irq(unsigned int irq) +{ +	generic_handle_irq(irq); +}  #endif +asmlinkage __irq_entry int do_IRQ(unsigned int irq, struct pt_regs *regs) +{ +	struct pt_regs *old_regs = set_irq_regs(regs); + +	irq_enter(); + +	irq = irq_demux(irq_lookup(irq)); + +	if (irq != NO_IRQ_IGNORE) { +		handle_one_irq(irq); +		irq_finish(irq); +	} + +	irq_exit(); + +	set_irq_regs(old_regs); + +	return IRQ_HANDLED; +} +  void __init init_IRQ(void)  {  	plat_irq_setup(); @@ -283,3 +293,44 @@ int __init arch_probe_nr_irqs(void)  	return 0;  }  #endif + +#ifdef CONFIG_HOTPLUG_CPU +static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu) +{ +	printk(KERN_INFO "IRQ%u: moving from cpu%u to cpu%u\n", +	       irq, desc->node, cpu); + +	raw_spin_lock_irq(&desc->lock); +	desc->chip->set_affinity(irq, cpumask_of(cpu)); +	raw_spin_unlock_irq(&desc->lock); +} + +/* + * The CPU has been marked offline.  Migrate IRQs off this CPU.  If + * the affinity settings do not allow other CPUs, force them onto any + * available CPU. + */ +void migrate_irqs(void) +{ +	struct irq_desc *desc; +	unsigned int irq, cpu = smp_processor_id(); + +	for_each_irq_desc(irq, desc) { +		if (desc->node == cpu) { +			unsigned int newcpu = cpumask_any_and(desc->affinity, +							      cpu_online_mask); +			if (newcpu >= nr_cpu_ids) { +				if (printk_ratelimit()) +					printk(KERN_INFO "IRQ%u no longer affine to CPU%u\n", +					       irq, cpu); + +				cpumask_setall(desc->affinity); +				newcpu = cpumask_any_and(desc->affinity, +							 cpu_online_mask); +			} + +			route_irq(desc, irq, newcpu); +		} +	} +} +#endif diff --git a/arch/sh/kernel/kgdb.c b/arch/sh/kernel/kgdb.c index 3e532d0d4a5..efb6d398dec 100644 --- a/arch/sh/kernel/kgdb.c +++ b/arch/sh/kernel/kgdb.c @@ -1,7 +1,7 @@  /*   * SuperH KGDB support   * - * Copyright (C) 2008  Paul Mundt + * Copyright (C) 2008 - 2009  Paul Mundt   *   * Single stepping taken from the old stub by Henry Bell and Jeremy Siegel.   * @@ -237,6 +237,18 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,  	return -1;  } +unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs) +{ +	if (exception == 60) +		return instruction_pointer(regs) - 2; +	return instruction_pointer(regs); +} + +void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long ip) +{ +	regs->pc = ip; +} +  /*   * The primary entry points for the kgdb debug trap table entries.   */ @@ -247,28 +259,64 @@ BUILD_TRAP_HANDLER(singlestep)  	local_irq_save(flags);  	regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); -	kgdb_handle_exception(vec >> 2, SIGTRAP, 0, regs); +	kgdb_handle_exception(0, SIGTRAP, 0, regs);  	local_irq_restore(flags);  } +static int __kgdb_notify(struct die_args *args, unsigned long cmd) +{ +	int ret; + +	switch (cmd) { +	case DIE_BREAKPOINT: +		/* +		 * This means a user thread is single stepping +		 * a system call which should be ignored +		 */ +		if (test_thread_flag(TIF_SINGLESTEP)) +			return NOTIFY_DONE; + +		ret = kgdb_handle_exception(args->trapnr & 0xff, args->signr, +					    args->err, args->regs); +		if (ret) +			return NOTIFY_DONE; -BUILD_TRAP_HANDLER(breakpoint) +		break; +	} + +	return NOTIFY_STOP; +} + +static int +kgdb_notify(struct notifier_block *self, unsigned long cmd, void *ptr)  {  	unsigned long flags; -	TRAP_HANDLER_DECL; +	int ret;  	local_irq_save(flags); -	kgdb_handle_exception(vec >> 2, SIGTRAP, 0, regs); +	ret = __kgdb_notify(ptr, cmd);  	local_irq_restore(flags); + +	return ret;  } +static struct notifier_block kgdb_notifier = { +	.notifier_call	= kgdb_notify, + +	/* +	 * Lowest-prio notifier priority, we want to be notified last: +	 */ +	.priority	= -INT_MAX, +}; +  int kgdb_arch_init(void)  { -	return 0; +	return register_die_notifier(&kgdb_notifier);  }  void kgdb_arch_exit(void)  { +	unregister_die_notifier(&kgdb_notifier);  }  struct kgdb_arch arch_kgdb_ops = { diff --git a/arch/sh/kernel/kprobes.c b/arch/sh/kernel/kprobes.c index c96850b061f..4049d99f76e 100644 --- a/arch/sh/kernel/kprobes.c +++ b/arch/sh/kernel/kprobes.c @@ -13,6 +13,7 @@  #include <linux/ptrace.h>  #include <linux/preempt.h>  #include <linux/kdebug.h> +#include <linux/slab.h>  #include <asm/cacheflush.h>  #include <asm/uaccess.h> diff --git a/arch/sh/kernel/localtimer.c b/arch/sh/kernel/localtimer.c index 0b04e7d4a9b..8bfc6dfa8b9 100644 --- a/arch/sh/kernel/localtimer.c +++ b/arch/sh/kernel/localtimer.c @@ -44,7 +44,7 @@ static void dummy_timer_set_mode(enum clock_event_mode mode,  {  } -void __cpuinit local_timer_setup(unsigned int cpu) +void local_timer_setup(unsigned int cpu)  {  	struct clock_event_device *clk = &per_cpu(local_clockevent, cpu); @@ -60,3 +60,7 @@ void __cpuinit local_timer_setup(unsigned int cpu)  	clockevents_register_device(clk);  } + +void local_timer_stop(unsigned int cpu) +{ +} diff --git a/arch/sh/kernel/machine_kexec.c b/arch/sh/kernel/machine_kexec.c index 76f280223eb..5a559e666eb 100644 --- a/arch/sh/kernel/machine_kexec.c +++ b/arch/sh/kernel/machine_kexec.c @@ -8,7 +8,6 @@   * This source code is licensed under the GNU General Public License,   * Version 2.  See the file COPYING for more details.   */ -  #include <linux/mm.h>  #include <linux/kexec.h>  #include <linux/delay.h> @@ -16,11 +15,14 @@  #include <linux/numa.h>  #include <linux/ftrace.h>  #include <linux/suspend.h> +#include <linux/lmb.h>  #include <asm/pgtable.h>  #include <asm/pgalloc.h>  #include <asm/mmu_context.h>  #include <asm/io.h>  #include <asm/cacheflush.h> +#include <asm/sh_bios.h> +#include <asm/reboot.h>  typedef void (*relocate_new_kernel_t)(unsigned long indirection_page,  				      unsigned long reboot_code_buffer, @@ -28,15 +30,11 @@ typedef void (*relocate_new_kernel_t)(unsigned long indirection_page,  extern const unsigned char relocate_new_kernel[];  extern const unsigned int relocate_new_kernel_size; -extern void *gdb_vbr_vector;  extern void *vbr_base; -void machine_shutdown(void) -{ -} - -void machine_crash_shutdown(struct pt_regs *regs) +void native_machine_crash_shutdown(struct pt_regs *regs)  { +	/* Nothing to do for UP, but definitely broken for SMP.. */  }  /* @@ -117,11 +115,7 @@ void machine_kexec(struct kimage *image)  	kexec_info(image);  	flush_cache_all(); -#if defined(CONFIG_SH_STANDARD_BIOS) -	asm volatile("ldc %0, vbr" : -		     : "r" (((unsigned long) gdb_vbr_vector) - 0x100) -		     : "memory"); -#endif +	sh_bios_vbr_reload();  	/* now call it */  	rnk = (relocate_new_kernel_t) reboot_code_buffer; @@ -153,4 +147,64 @@ void arch_crash_save_vmcoreinfo(void)  	VMCOREINFO_SYMBOL(node_data);  	VMCOREINFO_LENGTH(node_data, MAX_NUMNODES);  #endif +#ifdef CONFIG_X2TLB +	VMCOREINFO_CONFIG(X2TLB); +#endif +} + +void __init reserve_crashkernel(void) +{ +	unsigned long long crash_size, crash_base; +	int ret; + +	/* this is necessary because of lmb_phys_mem_size() */ +	lmb_analyze(); + +	ret = parse_crashkernel(boot_command_line, lmb_phys_mem_size(), +			&crash_size, &crash_base); +	if (ret == 0 && crash_size > 0) { +		crashk_res.start = crash_base; +		crashk_res.end = crash_base + crash_size - 1; +	} + +	if (crashk_res.end == crashk_res.start) +		goto disable; + +	crash_size = PAGE_ALIGN(crashk_res.end - crashk_res.start + 1); +	if (!crashk_res.start) { +		unsigned long max = lmb_end_of_DRAM() - memory_limit; +		crashk_res.start = __lmb_alloc_base(crash_size, PAGE_SIZE, max); +		if (!crashk_res.start) { +			pr_err("crashkernel allocation failed\n"); +			goto disable; +		} +	} else { +		ret = lmb_reserve(crashk_res.start, crash_size); +		if (unlikely(ret < 0)) { +			pr_err("crashkernel reservation failed - " +			       "memory is in use\n"); +			goto disable; +		} +	} + +	crashk_res.end = crashk_res.start + crash_size - 1; + +	/* +	 * Crash kernel trumps memory limit +	 */ +	if ((lmb_end_of_DRAM() - memory_limit) <= crashk_res.end) { +		memory_limit = 0; +		pr_info("Disabled memory limit for crashkernel\n"); +	} + +	pr_info("Reserving %ldMB of memory at 0x%08lx " +		"for crashkernel (System RAM: %ldMB)\n", +		(unsigned long)(crash_size >> 20), +		(unsigned long)(crashk_res.start), +		(unsigned long)(lmb_phys_mem_size() >> 20)); + +	return; + +disable: +	crashk_res.start = crashk_res.end = 0;  } diff --git a/arch/sh/kernel/machvec.c b/arch/sh/kernel/machvec.c index 1652340ba3f..85cfaf916fd 100644 --- a/arch/sh/kernel/machvec.c +++ b/arch/sh/kernel/machvec.c @@ -131,6 +131,7 @@ void __init sh_mv_setup(void)  	mv_set(ioport_unmap);  	mv_set(irq_demux);  	mv_set(mode_pins); +	mv_set(mem_init);  	if (!sh_mv.mv_nr_irqs)  		sh_mv.mv_nr_irqs = NR_IRQS; diff --git a/arch/sh/kernel/perf_callchain.c b/arch/sh/kernel/perf_callchain.c index 24ea837eac5..a9dd3abde28 100644 --- a/arch/sh/kernel/perf_callchain.c +++ b/arch/sh/kernel/perf_callchain.c @@ -68,9 +68,6 @@ perf_do_callchain(struct pt_regs *regs, struct perf_callchain_entry *entry)  	is_user = user_mode(regs); -	if (!current || current->pid == 0) -		return; -  	if (is_user && current->state != TASK_RUNNING)  		return; diff --git a/arch/sh/kernel/perf_event.c b/arch/sh/kernel/perf_event.c index 7ff0943e7a0..81b6de41ae5 100644 --- a/arch/sh/kernel/perf_event.c +++ b/arch/sh/kernel/perf_event.c @@ -275,13 +275,30 @@ const struct pmu *hw_perf_event_init(struct perf_event *event)  	return &pmu;  } -void hw_perf_event_setup(int cpu) +static void sh_pmu_setup(int cpu)  {  	struct cpu_hw_events *cpuhw = &per_cpu(cpu_hw_events, cpu);  	memset(cpuhw, 0, sizeof(struct cpu_hw_events));  } +static int __cpuinit +sh_pmu_notifier(struct notifier_block *self, unsigned long action, void *hcpu) +{ +	unsigned int cpu = (long)hcpu; + +	switch (action & ~CPU_TASKS_FROZEN) { +	case CPU_UP_PREPARE: +		sh_pmu_setup(cpu); +		break; + +	default: +		break; +	} + +	return NOTIFY_OK; +} +  void hw_perf_enable(void)  {  	if (!sh_pmu_initialized()) @@ -298,7 +315,7 @@ void hw_perf_disable(void)  	sh_pmu->disable_all();  } -int register_sh_pmu(struct sh_pmu *pmu) +int __cpuinit register_sh_pmu(struct sh_pmu *pmu)  {  	if (sh_pmu)  		return -EBUSY; @@ -308,5 +325,6 @@ int register_sh_pmu(struct sh_pmu *pmu)  	WARN_ON(pmu->num_events > MAX_HWEVENTS); +	perf_cpu_notifier(sh_pmu_notifier);  	return 0;  } diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c new file mode 100644 index 00000000000..dcb126dc76f --- /dev/null +++ b/arch/sh/kernel/process.c @@ -0,0 +1,101 @@ +#include <linux/mm.h> +#include <linux/kernel.h> +#include <linux/slab.h> +#include <linux/sched.h> + +struct kmem_cache *task_xstate_cachep = NULL; +unsigned int xstate_size; + +int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src) +{ +	*dst = *src; + +	if (src->thread.xstate) { +		dst->thread.xstate = kmem_cache_alloc(task_xstate_cachep, +						      GFP_KERNEL); +		if (!dst->thread.xstate) +			return -ENOMEM; +		memcpy(dst->thread.xstate, src->thread.xstate, xstate_size); +	} + +	return 0; +} + +void free_thread_xstate(struct task_struct *tsk) +{ +	if (tsk->thread.xstate) { +		kmem_cache_free(task_xstate_cachep, tsk->thread.xstate); +		tsk->thread.xstate = NULL; +	} +} + +#if THREAD_SHIFT < PAGE_SHIFT +static struct kmem_cache *thread_info_cache; + +struct thread_info *alloc_thread_info(struct task_struct *tsk) +{ +	struct thread_info *ti; + +	ti = kmem_cache_alloc(thread_info_cache, GFP_KERNEL); +	if (unlikely(ti == NULL)) +		return NULL; +#ifdef CONFIG_DEBUG_STACK_USAGE +	memset(ti, 0, THREAD_SIZE); +#endif +	return ti; +} + +void free_thread_info(struct thread_info *ti) +{ +	free_thread_xstate(ti->task); +	kmem_cache_free(thread_info_cache, ti); +} + +void thread_info_cache_init(void) +{ +	thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE, +					      THREAD_SIZE, SLAB_PANIC, NULL); +} +#else +struct thread_info *alloc_thread_info(struct task_struct *tsk) +{ +#ifdef CONFIG_DEBUG_STACK_USAGE +	gfp_t mask = GFP_KERNEL | __GFP_ZERO; +#else +	gfp_t mask = GFP_KERNEL; +#endif +	return (struct thread_info *)__get_free_pages(mask, THREAD_SIZE_ORDER); +} + +void free_thread_info(struct thread_info *ti) +{ +	free_thread_xstate(ti->task); +	free_pages((unsigned long)ti, THREAD_SIZE_ORDER); +} +#endif /* THREAD_SHIFT < PAGE_SHIFT */ + +void arch_task_cache_init(void) +{ +	if (!xstate_size) +		return; + +	task_xstate_cachep = kmem_cache_create("task_xstate", xstate_size, +					       __alignof__(union thread_xstate), +					       SLAB_PANIC | SLAB_NOTRACK, NULL); +} + +#ifdef CONFIG_SH_FPU_EMU +# define HAVE_SOFTFP	1 +#else +# define HAVE_SOFTFP	0 +#endif + +void __cpuinit init_thread_xstate(void) +{ +	if (boot_cpu_data.flags & CPU_HAS_FPU) +		xstate_size = sizeof(struct sh_fpu_hard_struct); +	else if (HAVE_SOFTFP) +		xstate_size = sizeof(struct sh_fpu_soft_struct); +	else +		xstate_size = 0; +} diff --git a/arch/sh/kernel/process_32.c b/arch/sh/kernel/process_32.c index d8af889366a..052981972ae 100644 --- a/arch/sh/kernel/process_32.c +++ b/arch/sh/kernel/process_32.c @@ -15,66 +15,17 @@   */  #include <linux/module.h>  #include <linux/mm.h> +#include <linux/slab.h>  #include <linux/elfcore.h> -#include <linux/pm.h>  #include <linux/kallsyms.h> -#include <linux/kexec.h> -#include <linux/kdebug.h> -#include <linux/tick.h> -#include <linux/reboot.h>  #include <linux/fs.h>  #include <linux/ftrace.h> -#include <linux/preempt.h> +#include <linux/hw_breakpoint.h>  #include <asm/uaccess.h>  #include <asm/mmu_context.h> -#include <asm/pgalloc.h>  #include <asm/system.h> -#include <asm/ubc.h>  #include <asm/fpu.h>  #include <asm/syscalls.h> -#include <asm/watchdog.h> - -int ubc_usercnt = 0; - -#ifdef CONFIG_32BIT -static void watchdog_trigger_immediate(void) -{ -	sh_wdt_write_cnt(0xFF); -	sh_wdt_write_csr(0xC2); -} - -void machine_restart(char * __unused) -{ -	local_irq_disable(); - -	/* Use watchdog timer to trigger reset */ -	watchdog_trigger_immediate(); - -	while (1) -		cpu_sleep(); -} -#else -void machine_restart(char * __unused) -{ -	/* SR.BL=1 and invoke address error to let CPU reset (manual reset) */ -	asm volatile("ldc %0, sr\n\t" -		     "mov.l @%1, %0" : : "r" (0x10000000), "r" (0x80000001)); -} -#endif - -void machine_halt(void) -{ -	local_irq_disable(); - -	while (1) -		cpu_sleep(); -} - -void machine_power_off(void) -{ -	if (pm_power_off) -		pm_power_off(); -}  void show_regs(struct pt_regs * regs)  { @@ -91,7 +42,7 @@ void show_regs(struct pt_regs * regs)  	printk("PC  : %08lx SP  : %08lx SR  : %08lx ",  	       regs->pc, regs->regs[15], regs->sr);  #ifdef CONFIG_MMU -	printk("TEA : %08x\n", ctrl_inl(MMU_TEA)); +	printk("TEA : %08x\n", __raw_readl(MMU_TEA));  #else  	printk("\n");  #endif @@ -147,21 +98,34 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)  }  EXPORT_SYMBOL(kernel_thread); +void start_thread(struct pt_regs *regs, unsigned long new_pc, +		  unsigned long new_sp) +{ +	set_fs(USER_DS); + +	regs->pr = 0; +	regs->sr = SR_FD; +	regs->pc = new_pc; +	regs->regs[15] = new_sp; + +	free_thread_xstate(current); +} +EXPORT_SYMBOL(start_thread); +  /*   * Free current thread data structures etc..   */  void exit_thread(void)  { -	if (current->thread.ubc_pc) { -		current->thread.ubc_pc = 0; -		ubc_usercnt -= 1; -	}  }  void flush_thread(void)  { -#if defined(CONFIG_SH_FPU)  	struct task_struct *tsk = current; + +	flush_ptrace_hw_breakpoint(tsk); + +#if defined(CONFIG_SH_FPU)  	/* Forget lazy FPU state */  	clear_fpu(tsk, task_pt_regs(tsk));  	clear_used_math(); @@ -209,11 +173,10 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,  {  	struct thread_info *ti = task_thread_info(p);  	struct pt_regs *childregs; +  #if defined(CONFIG_SH_DSP)  	struct task_struct *tsk = current; -#endif -#if defined(CONFIG_SH_DSP)  	if (is_dsp_enabled(tsk)) {  		/* We can use the __save_dsp or just copy the struct:  		 * __save_dsp(p); @@ -244,53 +207,11 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,  	p->thread.sp = (unsigned long) childregs;  	p->thread.pc = (unsigned long) ret_from_fork; -	p->thread.ubc_pc = 0; +	memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps));  	return 0;  } -/* Tracing by user break controller.  */ -static void ubc_set_tracing(int asid, unsigned long pc) -{ -#if defined(CONFIG_CPU_SH4A) -	unsigned long val; - -	val = (UBC_CBR_ID_INST | UBC_CBR_RW_READ | UBC_CBR_CE); -	val |= (UBC_CBR_AIE | UBC_CBR_AIV_SET(asid)); - -	ctrl_outl(val, UBC_CBR0); -	ctrl_outl(pc,  UBC_CAR0); -	ctrl_outl(0x0, UBC_CAMR0); -	ctrl_outl(0x0, UBC_CBCR); - -	val = (UBC_CRR_RES | UBC_CRR_PCB | UBC_CRR_BIE); -	ctrl_outl(val, UBC_CRR0); - -	/* Read UBC register that we wrote last, for checking update */ -	val = ctrl_inl(UBC_CRR0); - -#else	/* CONFIG_CPU_SH4A */ -	ctrl_outl(pc, UBC_BARA); - -#ifdef CONFIG_MMU -	ctrl_outb(asid, UBC_BASRA); -#endif - -	ctrl_outl(0, UBC_BAMRA); - -	if (current_cpu_data.type == CPU_SH7729 || -	    current_cpu_data.type == CPU_SH7710 || -	    current_cpu_data.type == CPU_SH7712 || -	    current_cpu_data.type == CPU_SH7203){ -		ctrl_outw(BBR_INST | BBR_READ | BBR_CPU, UBC_BBRA); -		ctrl_outl(BRCR_PCBA | BRCR_PCTE, UBC_BRCR); -	} else { -		ctrl_outw(BBR_INST | BBR_READ, UBC_BBRA); -		ctrl_outw(BRCR_PCBA, UBC_BRCR); -	} -#endif	/* CONFIG_CPU_SH4A */ -} -  /*   *	switch_to(x,y) should switch tasks from x to y.   * @@ -304,7 +225,7 @@ __switch_to(struct task_struct *prev, struct task_struct *next)  	/* we're going to use this soon, after a few expensive things */  	if (next->fpu_counter > 5) -		prefetch(&next_t->fpu.hard); +		prefetch(next_t->xstate);  #ifdef CONFIG_MMU  	/* @@ -316,32 +237,13 @@ __switch_to(struct task_struct *prev, struct task_struct *next)  		     : "r" (task_thread_info(next)));  #endif -	/* If no tasks are using the UBC, we're done */ -	if (ubc_usercnt == 0) -		/* If no tasks are using the UBC, we're done */; -	else if (next->thread.ubc_pc && next->mm) { -		int asid = 0; -#ifdef CONFIG_MMU -		asid |= cpu_asid(smp_processor_id(), next->mm); -#endif -		ubc_set_tracing(asid, next->thread.ubc_pc); -	} else { -#if defined(CONFIG_CPU_SH4A) -		ctrl_outl(UBC_CBR_INIT, UBC_CBR0); -		ctrl_outl(UBC_CRR_INIT, UBC_CRR0); -#else -		ctrl_outw(0, UBC_BBRA); -		ctrl_outw(0, UBC_BBRB); -#endif -	} -  	/*  	 * If the task has used fpu the last 5 timeslices, just do a full  	 * restore of the math state immediately to avoid the trap; the  	 * chances of needing FPU soon are obviously high now  	 */  	if (next->fpu_counter > 5) -		fpu_state_restore(task_pt_regs(next)); +		__fpu_state_restore();  	return prev;  } @@ -434,20 +336,3 @@ unsigned long get_wchan(struct task_struct *p)  	return pc;  } - -asmlinkage void break_point_trap(void) -{ -	/* Clear tracing.  */ -#if defined(CONFIG_CPU_SH4A) -	ctrl_outl(UBC_CBR_INIT, UBC_CBR0); -	ctrl_outl(UBC_CRR_INIT, UBC_CRR0); -#else -	ctrl_outw(0, UBC_BBRA); -	ctrl_outw(0, UBC_BBRB); -	ctrl_outl(0, UBC_BRCR); -#endif -	current->thread.ubc_pc = 0; -	ubc_usercnt -= 1; - -	force_sig(SIGTRAP, current); -} diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c index ec79faf6f02..d4ca6480e35 100644 --- a/arch/sh/kernel/process_64.c +++ b/arch/sh/kernel/process_64.c @@ -21,6 +21,7 @@  #include <linux/fs.h>  #include <linux/ptrace.h>  #include <linux/reboot.h> +#include <linux/slab.h>  #include <linux/init.h>  #include <linux/module.h>  #include <linux/io.h> @@ -32,30 +33,7 @@  struct task_struct *last_task_used_math = NULL; -void machine_restart(char * __unused) -{ -	extern void phys_stext(void); - -	phys_stext(); -} - -void machine_halt(void) -{ -	for (;;); -} - -void machine_power_off(void) -{ -	__asm__ __volatile__ ( -		"sleep\n\t" -		"synci\n\t" -		"nop;nop;nop;nop\n\t" -	); - -	panic("Unexpected wakeup!\n"); -} - -void show_regs(struct pt_regs * regs) +void show_regs(struct pt_regs *regs)  {  	unsigned long long ah, al, bh, bl, ch, cl; @@ -410,7 +388,7 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)  			regs->sr |= SR_FD;  		} -		memcpy(fpu, &tsk->thread.fpu.hard, sizeof(*fpu)); +		memcpy(fpu, &tsk->thread.xstate->hardfpu, sizeof(*fpu));  	}  	return fpvalid; @@ -527,13 +505,6 @@ out:  	return error;  } -/* - * These bracket the sleeping functions.. - */ -extern void interruptible_sleep_on(wait_queue_head_t *q); - -#define mid_sched	((unsigned long) interruptible_sleep_on) -  #ifdef CONFIG_FRAME_POINTER  static int in_sh64_switch_to(unsigned long pc)  { diff --git a/arch/sh/kernel/ptrace_32.c b/arch/sh/kernel/ptrace_32.c index 9be35f34809..6c4bbba2a67 100644 --- a/arch/sh/kernel/ptrace_32.c +++ b/arch/sh/kernel/ptrace_32.c @@ -2,7 +2,7 @@   * SuperH process tracing   *   * Copyright (C) 1999, 2000  Kaz Kojima & Niibe Yutaka - * Copyright (C) 2002 - 2008  Paul Mundt + * Copyright (C) 2002 - 2009  Paul Mundt   *   * Audit support by Yuichi Nakamura <ynakam@hitachisoft.jp>   * @@ -17,7 +17,6 @@  #include <linux/errno.h>  #include <linux/ptrace.h>  #include <linux/user.h> -#include <linux/slab.h>  #include <linux/security.h>  #include <linux/signal.h>  #include <linux/io.h> @@ -26,6 +25,7 @@  #include <linux/tracehook.h>  #include <linux/elf.h>  #include <linux/regset.h> +#include <linux/hw_breakpoint.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h>  #include <asm/system.h> @@ -63,33 +63,64 @@ static inline int put_stack_long(struct task_struct *task, int offset,  	return 0;  } -void user_enable_single_step(struct task_struct *child) +void ptrace_triggered(struct perf_event *bp, int nmi, +		      struct perf_sample_data *data, struct pt_regs *regs)  { -	/* Next scheduling will set up UBC */ -	if (child->thread.ubc_pc == 0) -		ubc_usercnt += 1; +	struct perf_event_attr attr; + +	/* +	 * Disable the breakpoint request here since ptrace has defined a +	 * one-shot behaviour for breakpoint exceptions. +	 */ +	attr = bp->attr; +	attr.disabled = true; +	modify_user_hw_breakpoint(bp, &attr); +} + +static int set_single_step(struct task_struct *tsk, unsigned long addr) +{ +	struct thread_struct *thread = &tsk->thread; +	struct perf_event *bp; +	struct perf_event_attr attr; + +	bp = thread->ptrace_bps[0]; +	if (!bp) { +		ptrace_breakpoint_init(&attr); + +		attr.bp_addr = addr; +		attr.bp_len = HW_BREAKPOINT_LEN_2; +		attr.bp_type = HW_BREAKPOINT_R; -	child->thread.ubc_pc = get_stack_long(child, -				offsetof(struct pt_regs, pc)); +		bp = register_user_hw_breakpoint(&attr, ptrace_triggered, tsk); +		if (IS_ERR(bp)) +			return PTR_ERR(bp); + +		thread->ptrace_bps[0] = bp; +	} else { +		int err; + +		attr = bp->attr; +		attr.bp_addr = addr; +		err = modify_user_hw_breakpoint(bp, &attr); +		if (unlikely(err)) +			return err; +	} + +	return 0; +} + +void user_enable_single_step(struct task_struct *child) +{ +	unsigned long pc = get_stack_long(child, offsetof(struct pt_regs, pc));  	set_tsk_thread_flag(child, TIF_SINGLESTEP); + +	set_single_step(child, pc);  }  void user_disable_single_step(struct task_struct *child)  {  	clear_tsk_thread_flag(child, TIF_SINGLESTEP); - -	/* -	 * Ensure the UBC is not programmed at the next context switch. -	 * -	 * Normally this is not needed but there are sequences such as -	 * singlestep, signal delivery, and continue that leave the -	 * ubc_pc non-zero leading to spurious SIGTRAPs. -	 */ -	if (child->thread.ubc_pc != 0) { -		ubc_usercnt -= 1; -		child->thread.ubc_pc = 0; -	}  }  /* @@ -163,10 +194,10 @@ int fpregs_get(struct task_struct *target,  	if ((boot_cpu_data.flags & CPU_HAS_FPU))  		return user_regset_copyout(&pos, &count, &kbuf, &ubuf, -					   &target->thread.fpu.hard, 0, -1); +					   &target->thread.xstate->hardfpu, 0, -1);  	return user_regset_copyout(&pos, &count, &kbuf, &ubuf, -				   &target->thread.fpu.soft, 0, -1); +				   &target->thread.xstate->softfpu, 0, -1);  }  static int fpregs_set(struct task_struct *target, @@ -184,10 +215,10 @@ static int fpregs_set(struct task_struct *target,  	if ((boot_cpu_data.flags & CPU_HAS_FPU))  		return user_regset_copyin(&pos, &count, &kbuf, &ubuf, -					  &target->thread.fpu.hard, 0, -1); +					  &target->thread.xstate->hardfpu, 0, -1);  	return user_regset_copyin(&pos, &count, &kbuf, &ubuf, -				  &target->thread.fpu.soft, 0, -1); +				  &target->thread.xstate->softfpu, 0, -1);  }  static int fpregs_active(struct task_struct *target, @@ -333,7 +364,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  				else  					tmp = 0;  			} else -				tmp = ((long *)&child->thread.fpu) +				tmp = ((long *)child->thread.xstate)  					[(addr - (long)&dummy->fpu) >> 2];  		} else if (addr == (long) &dummy->u_fpvalid)  			tmp = !!tsk_used_math(child); @@ -362,7 +393,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  		else if (addr >= (long) &dummy->fpu &&  			 addr < (long) &dummy->u_fpvalid) {  			set_stopped_child_used_math(child); -			((long *)&child->thread.fpu) +			((long *)child->thread.xstate)  				[(addr - (long)&dummy->fpu) >> 2] = data;  			ret = 0;  		} else if (addr == (long) &dummy->u_fpvalid) { @@ -405,29 +436,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  					     0, sizeof(struct pt_dspregs),  					     (const void __user *)data);  #endif -#ifdef CONFIG_BINFMT_ELF_FDPIC -	case PTRACE_GETFDPIC: { -		unsigned long tmp = 0; - -		switch (addr) { -		case PTRACE_GETFDPIC_EXEC: -			tmp = child->mm->context.exec_fdpic_loadmap; -			break; -		case PTRACE_GETFDPIC_INTERP: -			tmp = child->mm->context.interp_fdpic_loadmap; -			break; -		default: -			break; -		} - -		ret = 0; -		if (put_user(tmp, datap)) { -			ret = -EFAULT; -			break; -		} -		break; -	} -#endif  	default:  		ret = ptrace_request(child, request, addr, data);  		break; diff --git a/arch/sh/kernel/ptrace_64.c b/arch/sh/kernel/ptrace_64.c index 873ebdc4f98..5fd644da7f0 100644 --- a/arch/sh/kernel/ptrace_64.c +++ b/arch/sh/kernel/ptrace_64.c @@ -88,7 +88,7 @@ get_fpu_long(struct task_struct *task, unsigned long addr)  		regs->sr |= SR_FD;  	} -	tmp = ((long *)&task->thread.fpu)[addr / sizeof(unsigned long)]; +	tmp = ((long *)task->thread.xstate)[addr / sizeof(unsigned long)];  	return tmp;  } @@ -114,8 +114,7 @@ put_fpu_long(struct task_struct *task, unsigned long addr, unsigned long data)  	regs = (struct pt_regs*)((unsigned char *)task + THREAD_SIZE) - 1;  	if (!tsk_used_math(task)) { -		fpinit(&task->thread.fpu.hard); -		set_stopped_child_used_math(task); +		init_fpu(task);  	} else if (last_task_used_math == task) {  		enable_fpu();  		save_fpu(task); @@ -124,7 +123,7 @@ put_fpu_long(struct task_struct *task, unsigned long addr, unsigned long data)  		regs->sr |= SR_FD;  	} -	((long *)&task->thread.fpu)[addr / sizeof(unsigned long)] = data; +	((long *)task->thread.xstate)[addr / sizeof(unsigned long)] = data;  	return 0;  } @@ -133,6 +132,8 @@ void user_enable_single_step(struct task_struct *child)  	struct pt_regs *regs = child->thread.uregs;  	regs->sr |= SR_SSTEP;	/* auto-resetting upon exception */ + +	set_tsk_thread_flag(child, TIF_SINGLESTEP);  }  void user_disable_single_step(struct task_struct *child) @@ -140,6 +141,8 @@ void user_disable_single_step(struct task_struct *child)  	struct pt_regs *regs = child->thread.uregs;  	regs->sr &= ~SR_SSTEP; + +	clear_tsk_thread_flag(child, TIF_SINGLESTEP);  }  static int genregs_get(struct task_struct *target, @@ -222,7 +225,7 @@ int fpregs_get(struct task_struct *target,  		return ret;  	return user_regset_copyout(&pos, &count, &kbuf, &ubuf, -				   &target->thread.fpu.hard, 0, -1); +				   &target->thread.xstate->hardfpu, 0, -1);  }  static int fpregs_set(struct task_struct *target, @@ -239,7 +242,7 @@ static int fpregs_set(struct task_struct *target,  	set_stopped_child_used_math(target);  	return user_regset_copyin(&pos, &count, &kbuf, &ubuf, -				  &target->thread.fpu.hard, 0, -1); +				  &target->thread.xstate->hardfpu, 0, -1);  }  static int fpregs_active(struct task_struct *target, @@ -454,6 +457,8 @@ asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs)  asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)  { +	int step; +  	if (unlikely(current->audit_context))  		audit_syscall_exit(AUDITSC_RESULT(regs->regs[9]),  				   regs->regs[9]); @@ -461,8 +466,9 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)  	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))  		trace_sys_exit(regs, regs->regs[9]); -	if (test_thread_flag(TIF_SYSCALL_TRACE)) -		tracehook_report_syscall_exit(regs, 0); +	step = test_thread_flag(TIF_SINGLESTEP); +	if (step || test_thread_flag(TIF_SYSCALL_TRACE)) +		tracehook_report_syscall_exit(regs, step);  }  /* Called with interrupts disabled */ @@ -479,9 +485,10 @@ asmlinkage void do_single_step(unsigned long long vec, struct pt_regs *regs)  }  /* Called with interrupts disabled */ -asmlinkage void do_software_break_point(unsigned long long vec, -					struct pt_regs *regs) +BUILD_TRAP_HANDLER(breakpoint)  { +	TRAP_HANDLER_DECL; +  	/* We need to forward step the PC, to counteract the backstep done  	   in signal.c. */  	local_irq_enable(); diff --git a/arch/sh/kernel/reboot.c b/arch/sh/kernel/reboot.c new file mode 100644 index 00000000000..b1fca66bb92 --- /dev/null +++ b/arch/sh/kernel/reboot.c @@ -0,0 +1,98 @@ +#include <linux/pm.h> +#include <linux/kexec.h> +#include <linux/kernel.h> +#include <linux/reboot.h> +#include <linux/module.h> +#ifdef CONFIG_SUPERH32 +#include <asm/watchdog.h> +#endif +#include <asm/addrspace.h> +#include <asm/reboot.h> +#include <asm/system.h> + +void (*pm_power_off)(void); +EXPORT_SYMBOL(pm_power_off); + +#ifdef CONFIG_SUPERH32 +static void watchdog_trigger_immediate(void) +{ +	sh_wdt_write_cnt(0xFF); +	sh_wdt_write_csr(0xC2); +} +#endif + +static void native_machine_restart(char * __unused) +{ +	local_irq_disable(); + +	/* Address error with SR.BL=1 first. */ +	trigger_address_error(); + +#ifdef CONFIG_SUPERH32 +	/* If that fails or is unsupported, go for the watchdog next. */ +	watchdog_trigger_immediate(); +#endif + +	/* +	 * Give up and sleep. +	 */ +	while (1) +		cpu_sleep(); +} + +static void native_machine_shutdown(void) +{ +	smp_send_stop(); +} + +static void native_machine_power_off(void) +{ +	if (pm_power_off) +		pm_power_off(); +} + +static void native_machine_halt(void) +{ +	/* stop other cpus */ +	machine_shutdown(); + +	/* stop this cpu */ +	stop_this_cpu(NULL); +} + +struct machine_ops machine_ops = { +	.power_off	= native_machine_power_off, +	.shutdown	= native_machine_shutdown, +	.restart	= native_machine_restart, +	.halt		= native_machine_halt, +#ifdef CONFIG_KEXEC +	.crash_shutdown = native_machine_crash_shutdown, +#endif +}; + +void machine_power_off(void) +{ +	machine_ops.power_off(); +} + +void machine_shutdown(void) +{ +	machine_ops.shutdown(); +} + +void machine_restart(char *cmd) +{ +	machine_ops.restart(cmd); +} + +void machine_halt(void) +{ +	machine_ops.halt(); +} + +#ifdef CONFIG_KEXEC +void machine_crash_shutdown(struct pt_regs *regs) +{ +	machine_ops.crash_shutdown(regs); +} +#endif diff --git a/arch/sh/kernel/return_address.c b/arch/sh/kernel/return_address.c index df3ab581107..cbf1dd5372b 100644 --- a/arch/sh/kernel/return_address.c +++ b/arch/sh/kernel/return_address.c @@ -9,6 +9,7 @@   * for more details.   */  #include <linux/kernel.h> +#include <linux/module.h>  #include <asm/dwarf.h>  #ifdef CONFIG_DWARF_UNWINDER @@ -52,3 +53,5 @@ void *return_address(unsigned int depth)  }  #endif + +EXPORT_SYMBOL_GPL(return_address); diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c index 8b0e69792cf..272734681d2 100644 --- a/arch/sh/kernel/setup.c +++ b/arch/sh/kernel/setup.c @@ -4,7 +4,7 @@   * This file handles the architecture-dependent parts of initialization   *   *  Copyright (C) 1999  Niibe Yutaka - *  Copyright (C) 2002 - 2007 Paul Mundt + *  Copyright (C) 2002 - 2010 Paul Mundt   */  #include <linux/screen_info.h>  #include <linux/ioport.h> @@ -39,7 +39,9 @@  #include <asm/irq.h>  #include <asm/setup.h>  #include <asm/clock.h> +#include <asm/smp.h>  #include <asm/mmu_context.h> +#include <asm/mmzone.h>  /*   * Initialize loops_per_jiffy as 10000000 (1000MIPS). @@ -93,6 +95,7 @@ unsigned long memory_start;  EXPORT_SYMBOL(memory_start);  unsigned long memory_end = 0;  EXPORT_SYMBOL(memory_end); +unsigned long memory_limit = 0;  static struct resource mem_resources[MAX_NUMNODES]; @@ -100,92 +103,73 @@ int l1i_cache_shape, l1d_cache_shape, l2_cache_shape;  static int __init early_parse_mem(char *p)  { -	unsigned long size; +	if (!p) +		return 1; -	memory_start = (unsigned long)__va(__MEMORY_START); -	size = memparse(p, &p); +	memory_limit = PAGE_ALIGN(memparse(p, &p)); -	if (size > __MEMORY_SIZE) { -		printk(KERN_ERR -			"Using mem= to increase the size of kernel memory " -			"is not allowed.\n" -			"  Recompile the kernel with the correct value for " -			"CONFIG_MEMORY_SIZE.\n"); -		return 0; -	} - -	memory_end = memory_start + size; +	pr_notice("Memory limited to %ldMB\n", memory_limit >> 20);  	return 0;  }  early_param("mem", early_parse_mem); -/* - * Register fully available low RAM pages with the bootmem allocator. - */ -static void __init register_bootmem_low_pages(void) +void __init check_for_initrd(void)  { -	unsigned long curr_pfn, last_pfn, pages; +#ifdef CONFIG_BLK_DEV_INITRD +	unsigned long start, end;  	/* -	 * We are rounding up the start address of usable memory: +	 * Check for the rare cases where boot loaders adhere to the boot +	 * ABI.  	 */ -	curr_pfn = PFN_UP(__MEMORY_START); +	if (!LOADER_TYPE || !INITRD_START || !INITRD_SIZE) +		goto disable; -	/* -	 * ... and at the end of the usable range downwards: -	 */ -	last_pfn = PFN_DOWN(__pa(memory_end)); +	start = INITRD_START + __MEMORY_START; +	end = start + INITRD_SIZE; -	if (last_pfn > max_low_pfn) -		last_pfn = max_low_pfn; +	if (unlikely(end <= start)) +		goto disable; +	if (unlikely(start & ~PAGE_MASK)) { +		pr_err("initrd must be page aligned\n"); +		goto disable; +	} -	pages = last_pfn - curr_pfn; -	free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(pages)); -} +	if (unlikely(start < PAGE_OFFSET)) { +		pr_err("initrd start < PAGE_OFFSET\n"); +		goto disable; +	} -#ifdef CONFIG_KEXEC -static void __init reserve_crashkernel(void) -{ -	unsigned long long free_mem; -	unsigned long long crash_size, crash_base; -	void *vp; -	int ret; +	if (unlikely(end > lmb_end_of_DRAM())) { +		pr_err("initrd extends beyond end of memory " +		       "(0x%08lx > 0x%08lx)\ndisabling initrd\n", +		       end, (unsigned long)lmb_end_of_DRAM()); +		goto disable; +	} -	free_mem = ((unsigned long long)max_low_pfn - min_low_pfn) << PAGE_SHIFT; +	/* +	 * If we got this far inspite of the boot loader's best efforts +	 * to the contrary, assume we actually have a valid initrd and +	 * fix up the root dev. +	 */ +	ROOT_DEV = Root_RAM0; -	ret = parse_crashkernel(boot_command_line, free_mem, -			&crash_size, &crash_base); -	if (ret == 0 && crash_size) { -		if (crash_base <= 0) { -			vp = alloc_bootmem_nopanic(crash_size); -			if (!vp) { -				printk(KERN_INFO "crashkernel allocation " -				       "failed\n"); -				return; -			} -			crash_base = __pa(vp); -		} else if (reserve_bootmem(crash_base, crash_size, -					BOOTMEM_EXCLUSIVE) < 0) { -			printk(KERN_INFO "crashkernel reservation failed - " -					"memory is in use\n"); -			return; -		} +	/* +	 * Address sanitization +	 */ +	initrd_start = (unsigned long)__va(__pa(start)); +	initrd_end = initrd_start + INITRD_SIZE; -		printk(KERN_INFO "Reserving %ldMB of memory at %ldMB " -				"for crashkernel (System RAM: %ldMB)\n", -				(unsigned long)(crash_size >> 20), -				(unsigned long)(crash_base >> 20), -				(unsigned long)(free_mem >> 20)); -		crashk_res.start = crash_base; -		crashk_res.end   = crash_base + crash_size - 1; -		insert_resource(&iomem_resource, &crashk_res); -	} -} -#else -static inline void __init reserve_crashkernel(void) -{} +	lmb_reserve(__pa(initrd_start), INITRD_SIZE); + +	return; + +disable: +	pr_info("initrd disabled\n"); +	initrd_start = initrd_end = 0;  #endif +}  void __cpuinit calibrate_delay(void)  { @@ -207,13 +191,18 @@ void __init __add_active_range(unsigned int nid, unsigned long start_pfn,  						unsigned long end_pfn)  {  	struct resource *res = &mem_resources[nid]; +	unsigned long start, end;  	WARN_ON(res->name); /* max one active range per node for now */ +	start = start_pfn << PAGE_SHIFT; +	end = end_pfn << PAGE_SHIFT; +  	res->name = "System RAM"; -	res->start = start_pfn << PAGE_SHIFT; -	res->end = (end_pfn << PAGE_SHIFT) - 1; +	res->start = start; +	res->end = end - 1;  	res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; +  	if (request_resource(&iomem_resource, res)) {  		pr_err("unable to request memory_resource 0x%lx 0x%lx\n",  		       start_pfn, end_pfn); @@ -229,138 +218,18 @@ void __init __add_active_range(unsigned int nid, unsigned long start_pfn,  	request_resource(res, &data_resource);  	request_resource(res, &bss_resource); -	add_active_range(nid, start_pfn, end_pfn); -} - -void __init setup_bootmem_allocator(unsigned long free_pfn) -{ -	unsigned long bootmap_size; -	unsigned long bootmap_pages, bootmem_paddr; -	u64 total_pages = (lmb_end_of_DRAM() - __MEMORY_START) >> PAGE_SHIFT; -	int i; - -	bootmap_pages = bootmem_bootmap_pages(total_pages); - -	bootmem_paddr = lmb_alloc(bootmap_pages << PAGE_SHIFT, PAGE_SIZE); - -	/* -	 * Find a proper area for the bootmem bitmap. After this -	 * bootstrap step all allocations (until the page allocator -	 * is intact) must be done via bootmem_alloc(). -	 */ -	bootmap_size = init_bootmem_node(NODE_DATA(0), -					 bootmem_paddr >> PAGE_SHIFT, -					 min_low_pfn, max_low_pfn); - -	/* Add active regions with valid PFNs. */ -	for (i = 0; i < lmb.memory.cnt; i++) { -		unsigned long start_pfn, end_pfn; -		start_pfn = lmb.memory.region[i].base >> PAGE_SHIFT; -		end_pfn = start_pfn + lmb_size_pages(&lmb.memory, i); -		__add_active_range(0, start_pfn, end_pfn); -	} - -	/* -	 * Add all physical memory to the bootmem map and mark each -	 * area as present. -	 */ -	register_bootmem_low_pages(); - -	/* Reserve the sections we're already using. */ -	for (i = 0; i < lmb.reserved.cnt; i++) -		reserve_bootmem(lmb.reserved.region[i].base, -				lmb_size_bytes(&lmb.reserved, i), -				BOOTMEM_DEFAULT); - -	node_set_online(0); - -	sparse_memory_present_with_active_regions(0); - -#ifdef CONFIG_BLK_DEV_INITRD -	ROOT_DEV = Root_RAM0; - -	if (LOADER_TYPE && INITRD_START) { -		unsigned long initrd_start_phys = INITRD_START + __MEMORY_START; - -		if (initrd_start_phys + INITRD_SIZE <= PFN_PHYS(max_low_pfn)) { -			reserve_bootmem(initrd_start_phys, INITRD_SIZE, -					BOOTMEM_DEFAULT); -			initrd_start = (unsigned long)__va(initrd_start_phys); -			initrd_end = initrd_start + INITRD_SIZE; -		} else { -			printk("initrd extends beyond end of memory " -			       "(0x%08lx > 0x%08lx)\ndisabling initrd\n", -			       initrd_start_phys + INITRD_SIZE, -			       (unsigned long)PFN_PHYS(max_low_pfn)); -			initrd_start = 0; -		} -	} -#endif - -	reserve_crashkernel(); -} - -#ifndef CONFIG_NEED_MULTIPLE_NODES -static void __init setup_memory(void) -{ -	unsigned long start_pfn; -	u64 base = min_low_pfn << PAGE_SHIFT; -	u64 size = (max_low_pfn << PAGE_SHIFT) - base; -  	/* -	 * Partially used pages are not usable - thus -	 * we are rounding upwards: +	 * Also make sure that there is a PMB mapping that covers this +	 * range before we attempt to activate it, to avoid reset by MMU. +	 * We can hit this path with NUMA or memory hot-add.  	 */ -	start_pfn = PFN_UP(__pa(_end)); +	pmb_bolt_mapping((unsigned long)__va(start), start, end - start, +			 PAGE_KERNEL); -	lmb_add(base, size); - -	/* -	 * Reserve the kernel text and -	 * Reserve the bootmem bitmap. We do this in two steps (first step -	 * was init_bootmem()), because this catches the (definitely buggy) -	 * case of us accidentally initializing the bootmem allocator with -	 * an invalid RAM area. -	 */ -	lmb_reserve(__MEMORY_START + CONFIG_ZERO_PAGE_OFFSET, -		    (PFN_PHYS(start_pfn) + PAGE_SIZE - 1) - -		    (__MEMORY_START + CONFIG_ZERO_PAGE_OFFSET)); - -	/* -	 * Reserve physical pages below CONFIG_ZERO_PAGE_OFFSET. -	 */ -	if (CONFIG_ZERO_PAGE_OFFSET != 0) -		lmb_reserve(__MEMORY_START, CONFIG_ZERO_PAGE_OFFSET); - -	lmb_analyze(); -	lmb_dump_all(); - -	setup_bootmem_allocator(start_pfn); -} -#else -extern void __init setup_memory(void); -#endif - -/* - * Note: elfcorehdr_addr is not just limited to vmcore. It is also used by - * is_kdump_kernel() to determine if we are booting after a panic. Hence - * ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. - */ -#ifdef CONFIG_CRASH_DUMP -/* elfcorehdr= specifies the location of elf core header - * stored by the crashed kernel. - */ -static int __init parse_elfcorehdr(char *arg) -{ -	if (!arg) -		return -EINVAL; -	elfcorehdr_addr = memparse(arg, &arg); -	return 0; +	add_active_range(nid, start_pfn, end_pfn);  } -early_param("elfcorehdr", parse_elfcorehdr); -#endif -void __init __attribute__ ((weak)) plat_early_device_setup(void) +void __init __weak plat_early_device_setup(void)  {  } @@ -401,10 +270,6 @@ void __init setup_arch(char **cmdline_p)  	bss_resource.start = virt_to_phys(__bss_start);  	bss_resource.end = virt_to_phys(_ebss)-1; -	memory_start = (unsigned long)__va(__MEMORY_START); -	if (!memory_end) -		memory_end = memory_start + __MEMORY_SIZE; -  #ifdef CONFIG_CMDLINE_OVERWRITE  	strlcpy(command_line, CONFIG_CMDLINE, sizeof(command_line));  #else @@ -423,28 +288,12 @@ void __init setup_arch(char **cmdline_p)  	plat_early_device_setup(); -	/* Let earlyprintk output early console messages */ -	early_platform_driver_probe("earlyprintk", 1, 1); -  	sh_mv_setup(); -	/* -	 * Find the highest page frame number we have available -	 */ -	max_pfn = PFN_DOWN(__pa(memory_end)); - -	/* -	 * Determine low and high memory ranges: -	 */ -	max_low_pfn = max_pfn; -	min_low_pfn = __MEMORY_START >> PAGE_SHIFT; - -	nodes_clear(node_online_map); +	/* Let earlyprintk output early console messages */ +	early_platform_driver_probe("earlyprintk", 1, 1); -	/* Setup bootmem with available RAM */ -	lmb_init(); -	setup_memory(); -	sparse_init(); +	paging_init();  #ifdef CONFIG_DUMMY_CONSOLE  	conswitchp = &dummy_con; @@ -454,15 +303,7 @@ void __init setup_arch(char **cmdline_p)  	if (likely(sh_mv.mv_setup))  		sh_mv.mv_setup(cmdline_p); -	paging_init(); - -#ifdef CONFIG_PMB_ENABLE -	pmb_init(); -#endif - -#ifdef CONFIG_SMP  	plat_smp_setup(); -#endif  }  /* processor boot mode configuration */ diff --git a/arch/sh/kernel/sh_bios.c b/arch/sh/kernel/sh_bios.c index c852f780572..47475cca068 100644 --- a/arch/sh/kernel/sh_bios.c +++ b/arch/sh/kernel/sh_bios.c @@ -1,19 +1,30 @@  /* - *  linux/arch/sh/kernel/sh_bios.c   *  C interface for trapping into the standard LinuxSH BIOS.   *   *  Copyright (C) 2000 Greg Banks, Mitch Davis + *  Copyright (C) 1999, 2000  Niibe Yutaka + *  Copyright (C) 2002  M. R. Brown + *  Copyright (C) 2004 - 2010  Paul Mundt   * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details.   */  #include <linux/module.h> +#include <linux/console.h> +#include <linux/tty.h> +#include <linux/init.h> +#include <linux/io.h> +#include <linux/delay.h>  #include <asm/sh_bios.h>  #define BIOS_CALL_CONSOLE_WRITE		0  #define BIOS_CALL_ETH_NODE_ADDR		10  #define BIOS_CALL_SHUTDOWN		11 -#define BIOS_CALL_CHAR_OUT		0x1f	/* TODO: hack */  #define BIOS_CALL_GDB_DETACH		0xff +void *gdb_vbr_vector = NULL; +  static inline long sh_bios_call(long func, long arg0, long arg1, long arg2,  				    long arg3)  { @@ -23,6 +34,9 @@ static inline long sh_bios_call(long func, long arg0, long arg1, long arg2,  	register long r6 __asm__("r6") = arg2;  	register long r7 __asm__("r7") = arg3; +	if (!gdb_vbr_vector) +		return -ENOSYS; +  	__asm__ __volatile__("trapa	#0x3f":"=z"(r0)  			     :"0"(r0), "r"(r4), "r"(r5), "r"(r6), "r"(r7)  			     :"memory"); @@ -34,11 +48,6 @@ void sh_bios_console_write(const char *buf, unsigned int len)  	sh_bios_call(BIOS_CALL_CONSOLE_WRITE, (long)buf, (long)len, 0, 0);  } -void sh_bios_char_out(char ch) -{ -	sh_bios_call(BIOS_CALL_CHAR_OUT, ch, 0, 0, 0); -} -  void sh_bios_gdb_detach(void)  {  	sh_bios_call(BIOS_CALL_GDB_DETACH, 0, 0, 0, 0); @@ -55,3 +64,109 @@ void sh_bios_shutdown(unsigned int how)  {  	sh_bios_call(BIOS_CALL_SHUTDOWN, how, 0, 0, 0);  } + +/* + * Read the old value of the VBR register to initialise the vector + * through which debug and BIOS traps are delegated by the Linux trap + * handler. + */ +void sh_bios_vbr_init(void) +{ +	unsigned long vbr; + +	if (unlikely(gdb_vbr_vector)) +		return; + +	__asm__ __volatile__ ("stc vbr, %0" : "=r" (vbr)); + +	if (vbr) { +		gdb_vbr_vector = (void *)(vbr + 0x100); +		printk(KERN_NOTICE "Setting GDB trap vector to %p\n", +		       gdb_vbr_vector); +	} else +		printk(KERN_NOTICE "SH-BIOS not detected\n"); +} + +/** + * sh_bios_vbr_reload - Re-load the system VBR from the BIOS vector. + * + * This can be used by save/restore code to reinitialize the system VBR + * from the fixed BIOS VBR. A no-op if no BIOS VBR is known. + */ +void sh_bios_vbr_reload(void) +{ +	if (gdb_vbr_vector) +		__asm__ __volatile__ ( +			"ldc %0, vbr" +			: +			: "r" (((unsigned long) gdb_vbr_vector) - 0x100) +			: "memory" +		); +} + +/* + *	Print a string through the BIOS + */ +static void sh_console_write(struct console *co, const char *s, +				 unsigned count) +{ +	sh_bios_console_write(s, count); +} + +/* + *	Setup initial baud/bits/parity. We do two things here: + *	- construct a cflag setting for the first rs_open() + *	- initialize the serial port + *	Return non-zero if we didn't find a serial port. + */ +static int __init sh_console_setup(struct console *co, char *options) +{ +	int	cflag = CREAD | HUPCL | CLOCAL; + +	/* +	 *	Now construct a cflag setting. +	 *	TODO: this is a totally bogus cflag, as we have +	 *	no idea what serial settings the BIOS is using, or +	 *	even if its using the serial port at all. +	 */ +	cflag |= B115200 | CS8 | /*no parity*/0; + +	co->cflag = cflag; + +	return 0; +} + +static struct console bios_console = { +	.name		= "bios", +	.write		= sh_console_write, +	.setup		= sh_console_setup, +	.flags		= CON_PRINTBUFFER, +	.index		= -1, +}; + +static struct console *early_console; + +static int __init setup_early_printk(char *buf) +{ +	int keep_early = 0; + +	if (!buf) +		return 0; + +	if (strstr(buf, "keep")) +		keep_early = 1; + +	if (!strncmp(buf, "bios", 4)) +		early_console = &bios_console; + +	if (likely(early_console)) { +		if (keep_early) +			early_console->flags &= ~CON_BOOT; +		else +			early_console->flags |= CON_BOOT; +		register_console(early_console); +	} + +	return 0; +} +early_param("earlyprintk", setup_early_printk); diff --git a/arch/sh/kernel/signal_32.c b/arch/sh/kernel/signal_32.c index 12815ce01ec..579cd2ca358 100644 --- a/arch/sh/kernel/signal_32.c +++ b/arch/sh/kernel/signal_32.c @@ -150,7 +150,7 @@ static inline int restore_sigcontext_fpu(struct sigcontext __user *sc)  		return 0;  	set_used_math(); -	return __copy_from_user(&tsk->thread.fpu.hard, &sc->sc_fpregs[0], +	return __copy_from_user(&tsk->thread.xstate->hardfpu, &sc->sc_fpregs[0],  				sizeof(long)*(16*2+2));  } @@ -175,7 +175,7 @@ static inline int save_sigcontext_fpu(struct sigcontext __user *sc,  	clear_used_math();  	unlazy_fpu(tsk, regs); -	return __copy_to_user(&sc->sc_fpregs[0], &tsk->thread.fpu.hard, +	return __copy_to_user(&sc->sc_fpregs[0], &tsk->thread.xstate->hardfpu,  			      sizeof(long)*(16*2+2));  }  #endif /* CONFIG_SH_FPU */ @@ -528,7 +528,7 @@ handle_syscall_restart(unsigned long save_r0, struct pt_regs *regs,  		/* fallthrough */  		case -ERESTARTNOINTR:  			regs->regs[0] = save_r0; -			regs->pc -= instruction_size(ctrl_inw(regs->pc - 4)); +			regs->pc -= instruction_size(__raw_readw(regs->pc - 4));  			break;  	}  } @@ -626,9 +626,9 @@ no_signal:  		    regs->regs[0] == -ERESTARTSYS ||  		    regs->regs[0] == -ERESTARTNOINTR) {  			regs->regs[0] = save_r0; -			regs->pc -= instruction_size(ctrl_inw(regs->pc - 4)); +			regs->pc -= instruction_size(__raw_readw(regs->pc - 4));  		} else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) { -			regs->pc -= instruction_size(ctrl_inw(regs->pc - 4)); +			regs->pc -= instruction_size(__raw_readw(regs->pc - 4));  			regs->regs[3] = __NR_restart_syscall;  		}  	} diff --git a/arch/sh/kernel/signal_64.c b/arch/sh/kernel/signal_64.c index ce76dbdef29..5a9f1f10ebf 100644 --- a/arch/sh/kernel/signal_64.c +++ b/arch/sh/kernel/signal_64.c @@ -118,7 +118,9 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset)  			 * clear the TS_RESTORE_SIGMASK flag.  			 */  			current_thread_info()->status &= ~TS_RESTORE_SIGMASK; -			tracehook_signal_handler(signr, &info, &ka, regs, 0); + +			tracehook_signal_handler(signr, &info, &ka, regs, +					test_thread_flag(TIF_SINGLESTEP));  			return 1;  		}  	} @@ -295,7 +297,7 @@ restore_sigcontext_fpu(struct pt_regs *regs, struct sigcontext __user *sc)  		regs->sr |= SR_FD;  	} -	err |= __copy_from_user(¤t->thread.fpu.hard, &sc->sc_fpregs[0], +	err |= __copy_from_user(¤t->thread.xstate->hardfpu, &sc->sc_fpregs[0],  				(sizeof(long long) * 32) + (sizeof(int) * 1));  	return err; @@ -320,7 +322,7 @@ setup_sigcontext_fpu(struct pt_regs *regs, struct sigcontext __user *sc)  		regs->sr |= SR_FD;  	} -	err |= __copy_to_user(&sc->sc_fpregs[0], ¤t->thread.fpu.hard, +	err |= __copy_to_user(&sc->sc_fpregs[0], ¤t->thread.xstate->hardfpu,  			      (sizeof(long long) * 32) + (sizeof(int) * 1));  	clear_used_math(); diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index 983e0792d5f..509b36b4511 100644 --- a/arch/sh/kernel/smp.c +++ b/arch/sh/kernel/smp.c @@ -3,7 +3,7 @@   *   * SMP support for the SuperH processors.   * - * Copyright (C) 2002 - 2008 Paul Mundt + * Copyright (C) 2002 - 2010 Paul Mundt   * Copyright (C) 2006 - 2007 Akio Idehara   *   * This file is subject to the terms and conditions of the GNU General Public @@ -31,7 +31,20 @@  int __cpu_number_map[NR_CPUS];		/* Map physical to logical */  int __cpu_logical_map[NR_CPUS];		/* Map logical to physical */ -static inline void __init smp_store_cpu_info(unsigned int cpu) +struct plat_smp_ops *mp_ops = NULL; + +/* State of each CPU */ +DEFINE_PER_CPU(int, cpu_state) = { 0 }; + +void __cpuinit register_smp_ops(struct plat_smp_ops *ops) +{ +	if (mp_ops) +		printk(KERN_WARNING "Overriding previously set SMP ops\n"); + +	mp_ops = ops; +} + +static inline void __cpuinit smp_store_cpu_info(unsigned int cpu)  {  	struct sh_cpuinfo *c = cpu_data + cpu; @@ -46,14 +59,14 @@ void __init smp_prepare_cpus(unsigned int max_cpus)  	init_new_context(current, &init_mm);  	current_thread_info()->cpu = cpu; -	plat_prepare_cpus(max_cpus); +	mp_ops->prepare_cpus(max_cpus);  #ifndef CONFIG_HOTPLUG_CPU  	init_cpu_present(&cpu_possible_map);  #endif  } -void __devinit smp_prepare_boot_cpu(void) +void __init smp_prepare_boot_cpu(void)  {  	unsigned int cpu = smp_processor_id(); @@ -62,36 +75,137 @@ void __devinit smp_prepare_boot_cpu(void)  	set_cpu_online(cpu, true);  	set_cpu_possible(cpu, true); + +	per_cpu(cpu_state, cpu) = CPU_ONLINE; +} + +#ifdef CONFIG_HOTPLUG_CPU +void native_cpu_die(unsigned int cpu) +{ +	unsigned int i; + +	for (i = 0; i < 10; i++) { +		smp_rmb(); +		if (per_cpu(cpu_state, cpu) == CPU_DEAD) { +			if (system_state == SYSTEM_RUNNING) +				pr_info("CPU %u is now offline\n", cpu); + +			return; +		} + +		msleep(100); +	} + +	pr_err("CPU %u didn't die...\n", cpu); +} + +int native_cpu_disable(unsigned int cpu) +{ +	return cpu == 0 ? -EPERM : 0; +} + +void play_dead_common(void) +{ +	idle_task_exit(); +	irq_ctx_exit(raw_smp_processor_id()); +	mb(); + +	__get_cpu_var(cpu_state) = CPU_DEAD; +	local_irq_disable(); +} + +void native_play_dead(void) +{ +	play_dead_common(); +} + +int __cpu_disable(void) +{ +	unsigned int cpu = smp_processor_id(); +	struct task_struct *p; +	int ret; + +	ret = mp_ops->cpu_disable(cpu); +	if (ret) +		return ret; + +	/* +	 * Take this CPU offline.  Once we clear this, we can't return, +	 * and we must not schedule until we're ready to give up the cpu. +	 */ +	set_cpu_online(cpu, false); + +	/* +	 * OK - migrate IRQs away from this CPU +	 */ +	migrate_irqs(); + +	/* +	 * Stop the local timer for this CPU. +	 */ +	local_timer_stop(cpu); + +	/* +	 * Flush user cache and TLB mappings, and then remove this CPU +	 * from the vm mask set of all processes. +	 */ +	flush_cache_all(); +	local_flush_tlb_all(); + +	read_lock(&tasklist_lock); +	for_each_process(p) +		if (p->mm) +			cpumask_clear_cpu(cpu, mm_cpumask(p->mm)); +	read_unlock(&tasklist_lock); + +	return 0; +} +#else /* ... !CONFIG_HOTPLUG_CPU */ +int native_cpu_disable(unsigned int cpu) +{ +	return -ENOSYS; +} + +void native_cpu_die(unsigned int cpu) +{ +	/* We said "no" in __cpu_disable */ +	BUG(); +} + +void native_play_dead(void) +{ +	BUG();  } +#endif  asmlinkage void __cpuinit start_secondary(void)  { -	unsigned int cpu; +	unsigned int cpu = smp_processor_id();  	struct mm_struct *mm = &init_mm; +	enable_mmu();  	atomic_inc(&mm->mm_count);  	atomic_inc(&mm->mm_users);  	current->active_mm = mm; -	BUG_ON(current->mm);  	enter_lazy_tlb(mm, current); +	local_flush_tlb_all();  	per_cpu_trap_init();  	preempt_disable(); -	notify_cpu_starting(smp_processor_id()); +	notify_cpu_starting(cpu);  	local_irq_enable(); -	cpu = smp_processor_id(); -  	/* Enable local timers */  	local_timer_setup(cpu);  	calibrate_delay();  	smp_store_cpu_info(cpu); -	cpu_set(cpu, cpu_online_map); +	set_cpu_online(cpu, true); +	per_cpu(cpu_state, cpu) = CPU_ONLINE;  	cpu_idle();  } @@ -110,12 +224,19 @@ int __cpuinit __cpu_up(unsigned int cpu)  	struct task_struct *tsk;  	unsigned long timeout; -	tsk = fork_idle(cpu); -	if (IS_ERR(tsk)) { -		printk(KERN_ERR "Failed forking idle task for cpu %d\n", cpu); -		return PTR_ERR(tsk); +	tsk = cpu_data[cpu].idle; +	if (!tsk) { +		tsk = fork_idle(cpu); +		if (IS_ERR(tsk)) { +			pr_err("Failed forking idle task for cpu %d\n", cpu); +			return PTR_ERR(tsk); +		} + +		cpu_data[cpu].idle = tsk;  	} +	per_cpu(cpu_state, cpu) = CPU_UP_PREPARE; +  	/* Fill in data in head.S for secondary cpus */  	stack_start.sp = tsk->thread.sp;  	stack_start.thread_info = tsk->stack; @@ -126,7 +247,7 @@ int __cpuinit __cpu_up(unsigned int cpu)  			   (unsigned long)&stack_start + sizeof(stack_start));  	wmb(); -	plat_start_cpu(cpu, (unsigned long)_stext); +	mp_ops->start_cpu(cpu, (unsigned long)_stext);  	timeout = jiffies + HZ;  	while (time_before(jiffies, timeout)) { @@ -134,6 +255,7 @@ int __cpuinit __cpu_up(unsigned int cpu)  			break;  		udelay(10); +		barrier();  	}  	if (cpu_online(cpu)) @@ -158,16 +280,7 @@ void __init smp_cpus_done(unsigned int max_cpus)  void smp_send_reschedule(int cpu)  { -	plat_send_ipi(cpu, SMP_MSG_RESCHEDULE); -} - -static void stop_this_cpu(void *unused) -{ -	cpu_clear(smp_processor_id(), cpu_online_map); -	local_irq_disable(); - -	for (;;) -		cpu_relax(); +	mp_ops->send_ipi(cpu, SMP_MSG_RESCHEDULE);  }  void smp_send_stop(void) @@ -180,12 +293,12 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask)  	int cpu;  	for_each_cpu(cpu, mask) -		plat_send_ipi(cpu, SMP_MSG_FUNCTION); +		mp_ops->send_ipi(cpu, SMP_MSG_FUNCTION);  }  void arch_send_call_function_single_ipi(int cpu)  { -	plat_send_ipi(cpu, SMP_MSG_FUNCTION_SINGLE); +	mp_ops->send_ipi(cpu, SMP_MSG_FUNCTION_SINGLE);  }  void smp_timer_broadcast(const struct cpumask *mask) @@ -193,7 +306,7 @@ void smp_timer_broadcast(const struct cpumask *mask)  	int cpu;  	for_each_cpu(cpu, mask) -		plat_send_ipi(cpu, SMP_MSG_TIMER); +		mp_ops->send_ipi(cpu, SMP_MSG_TIMER);  }  static void ipi_timer(void) @@ -257,7 +370,6 @@ static void flush_tlb_mm_ipi(void *mm)   * behalf of debugees, kswapd stealing pages from another process etc).   * Kanoj 07/00.   */ -  void flush_tlb_mm(struct mm_struct *mm)  {  	preempt_disable(); diff --git a/arch/sh/kernel/sys_sh.c b/arch/sh/kernel/sys_sh.c index 71399cde03b..81f58371613 100644 --- a/arch/sh/kernel/sys_sh.c +++ b/arch/sh/kernel/sys_sh.c @@ -53,110 +53,6 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,  	return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff);  } -/* - * sys_ipc() is the de-multiplexer for the SysV IPC calls.. - * - * This is really horribly ugly. - */ -asmlinkage int sys_ipc(uint call, int first, int second, -		       int third, void __user *ptr, long fifth) -{ -	int version, ret; - -	version = call >> 16; /* hack for backward compatibility */ -	call &= 0xffff; - -	if (call <= SEMTIMEDOP) -		switch (call) { -		case SEMOP: -			return sys_semtimedop(first, -					      (struct sembuf __user *)ptr, -					      second, NULL); -		case SEMTIMEDOP: -			return sys_semtimedop(first, -				(struct sembuf __user *)ptr, second, -			        (const struct timespec __user *)fifth); -		case SEMGET: -			return sys_semget (first, second, third); -		case SEMCTL: { -			union semun fourth; -			if (!ptr) -				return -EINVAL; -			if (get_user(fourth.__pad, (void __user * __user *) ptr)) -				return -EFAULT; -			return sys_semctl (first, second, third, fourth); -			} -		default: -			return -EINVAL; -		} - -	if (call <= MSGCTL) -		switch (call) { -		case MSGSND: -			return sys_msgsnd (first, (struct msgbuf __user *) ptr, -					  second, third); -		case MSGRCV: -			switch (version) { -			case 0: -			{ -				struct ipc_kludge tmp; - -				if (!ptr) -					return -EINVAL; - -				if (copy_from_user(&tmp, -					(struct ipc_kludge __user *) ptr, -						   sizeof (tmp))) -					return -EFAULT; - -				return sys_msgrcv (first, tmp.msgp, second, -						   tmp.msgtyp, third); -			} -			default: -				return sys_msgrcv (first, -						   (struct msgbuf __user *) ptr, -						   second, fifth, third); -			} -		case MSGGET: -			return sys_msgget ((key_t) first, second); -		case MSGCTL: -			return sys_msgctl (first, second, -					   (struct msqid_ds __user *) ptr); -		default: -			return -EINVAL; -		} -	if (call <= SHMCTL) -		switch (call) { -		case SHMAT: -			switch (version) { -			default: { -				ulong raddr; -				ret = do_shmat (first, (char __user *) ptr, -						 second, &raddr); -				if (ret) -					return ret; -				return put_user (raddr, (ulong __user *) third); -			} -			case 1:	/* iBCS2 emulator entry point */ -				if (!segment_eq(get_fs(), get_ds())) -					return -EINVAL; -				return do_shmat (first, (char __user *) ptr, -						  second, (ulong *) third); -			} -		case SHMDT: -			return sys_shmdt ((char __user *)ptr); -		case SHMGET: -			return sys_shmget (first, second, third); -		case SHMCTL: -			return sys_shmctl (first, second, -					   (struct shmid_ds __user *) ptr); -		default: -			return -EINVAL; -		} - -	return -EINVAL; -} -  /* sys_cacheflush -- flush (part of) the processor cache.  */  asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op)  { @@ -197,14 +93,3 @@ asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op)  	up_read(¤t->mm->mmap_sem);  	return 0;  } - -asmlinkage int sys_uname(struct old_utsname __user *name) -{ -	int err; -	if (!name) -		return -EFAULT; -	down_read(&uts_sem); -	err = copy_to_user(name, utsname(), sizeof(*name)); -	up_read(&uts_sem); -	return err?-EFAULT:0; -} diff --git a/arch/sh/kernel/time.c b/arch/sh/kernel/time.c index 953fa161331..8a0072de2bc 100644 --- a/arch/sh/kernel/time.c +++ b/arch/sh/kernel/time.c @@ -39,12 +39,12 @@ static int null_rtc_set_time(const time_t secs)  void (*rtc_sh_get_time)(struct timespec *) = null_rtc_get_time;  int (*rtc_sh_set_time)(const time_t) = null_rtc_set_time; -#ifdef CONFIG_GENERIC_CMOS_UPDATE  void read_persistent_clock(struct timespec *ts)  {  	rtc_sh_get_time(ts);  } +#ifdef CONFIG_GENERIC_CMOS_UPDATE  int update_persistent_clock(struct timespec now)  {  	return rtc_sh_set_time(now.tv_sec); @@ -113,9 +113,5 @@ void __init time_init(void)  	hwblk_init();  	clk_init(); -	rtc_sh_get_time(&xtime); -	set_normalized_timespec(&wall_to_monotonic, -				-xtime.tv_sec, -xtime.tv_nsec); -  	late_time_init = sh_late_time_init;  } diff --git a/arch/sh/kernel/topology.c b/arch/sh/kernel/topology.c index 9b0b633b6c9..948fdb65693 100644 --- a/arch/sh/kernel/topology.c +++ b/arch/sh/kernel/topology.c @@ -52,7 +52,11 @@ static int __init topology_init(void)  #endif  	for_each_present_cpu(i) { -		ret = register_cpu(&per_cpu(cpu_devices, i), i); +		struct cpu *c = &per_cpu(cpu_devices, i); + +		c->hotpluggable = 1; + +		ret = register_cpu(c, i);  		if (unlikely(ret))  			printk(KERN_WARNING "%s: register_cpu %d failed (%d)\n",  			       __func__, i, ret); diff --git a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c index 7b036339dc9..0830c2a9f71 100644 --- a/arch/sh/kernel/traps.c +++ b/arch/sh/kernel/traps.c @@ -58,7 +58,7 @@ BUILD_TRAP_HANDLER(debug)  	TRAP_HANDLER_DECL;  	/* Rewind */ -	regs->pc -= instruction_size(ctrl_inw(regs->pc - 4)); +	regs->pc -= instruction_size(__raw_readw(regs->pc - 4));  	if (notify_die(DIE_TRAP, "debug trap", regs, 0, vec & 0xff,  		       SIGTRAP) == NOTIFY_STOP) @@ -75,7 +75,7 @@ BUILD_TRAP_HANDLER(bug)  	TRAP_HANDLER_DECL;  	/* Rewind */ -	regs->pc -= instruction_size(ctrl_inw(regs->pc - 4)); +	regs->pc -= instruction_size(__raw_readw(regs->pc - 4));  	if (notify_die(DIE_TRAP, "bug trap", regs, 0, TRAPA_BUG_OPCODE & 0xff,  		       SIGTRAP) == NOTIFY_STOP) diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c index 86639beac3a..c3d86fa71dd 100644 --- a/arch/sh/kernel/traps_32.c +++ b/arch/sh/kernel/traps_32.c @@ -24,11 +24,10 @@  #include <linux/kdebug.h>  #include <linux/kexec.h>  #include <linux/limits.h> -#include <linux/proc_fs.h> -#include <linux/seq_file.h>  #include <linux/sysfs.h> +#include <linux/uaccess.h>  #include <asm/system.h> -#include <asm/uaccess.h> +#include <asm/alignment.h>  #include <asm/fpu.h>  #include <asm/kprobes.h> @@ -47,73 +46,6 @@  #define TRAP_ILLEGAL_SLOT_INST	13  #endif -static unsigned long se_user; -static unsigned long se_sys; -static unsigned long se_half; -static unsigned long se_word; -static unsigned long se_dword; -static unsigned long se_multi; -/* bitfield: 1: warn 2: fixup 4: signal -> combinations 2|4 && 1|2|4 are not -   valid! */ -static int se_usermode = 3; -/* 0: no warning 1: print a warning message, disabled by default */ -static int se_kernmode_warn; - -#ifdef CONFIG_PROC_FS -static const char *se_usermode_action[] = { -	"ignored", -	"warn", -	"fixup", -	"fixup+warn", -	"signal", -	"signal+warn" -}; - -static int alignment_proc_show(struct seq_file *m, void *v) -{ -	seq_printf(m, "User:\t\t%lu\n", se_user); -	seq_printf(m, "System:\t\t%lu\n", se_sys); -	seq_printf(m, "Half:\t\t%lu\n", se_half); -	seq_printf(m, "Word:\t\t%lu\n", se_word); -	seq_printf(m, "DWord:\t\t%lu\n", se_dword); -	seq_printf(m, "Multi:\t\t%lu\n", se_multi); -	seq_printf(m, "User faults:\t%i (%s)\n", se_usermode, -			se_usermode_action[se_usermode]); -	seq_printf(m, "Kernel faults:\t%i (fixup%s)\n", se_kernmode_warn, -			se_kernmode_warn ? "+warn" : ""); -	return 0; -} - -static int alignment_proc_open(struct inode *inode, struct file *file) -{ -	return single_open(file, alignment_proc_show, NULL); -} - -static ssize_t alignment_proc_write(struct file *file, -		const char __user *buffer, size_t count, loff_t *pos) -{ -	int *data = PDE(file->f_path.dentry->d_inode)->data; -	char mode; - -	if (count > 0) { -		if (get_user(mode, buffer)) -			return -EFAULT; -		if (mode >= '0' && mode <= '5') -			*data = mode - '0'; -	} -	return count; -} - -static const struct file_operations alignment_proc_fops = { -	.owner		= THIS_MODULE, -	.open		= alignment_proc_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -	.write		= alignment_proc_write, -}; -#endif -  static void dump_mem(const char *str, unsigned long bottom, unsigned long top)  {  	unsigned long p; @@ -265,10 +197,10 @@ static int handle_unaligned_ins(insn_size_t instruction, struct pt_regs *regs,  	count = 1<<(instruction&3);  	switch (count) { -	case 1: se_half  += 1; break; -	case 2: se_word  += 1; break; -	case 4: se_dword += 1; break; -	case 8: se_multi += 1; break; /* ??? */ +	case 1: inc_unaligned_byte_access(); break; +	case 2: inc_unaligned_word_access(); break; +	case 4: inc_unaligned_dword_access(); break; +	case 8: inc_unaligned_multi_access(); break;  	}  	ret = -EFAULT; @@ -452,18 +384,8 @@ int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,  	rm = regs->regs[index];  	/* shout about fixups */ -	if (!expected) { -		if (user_mode(regs) && (se_usermode & 1) && printk_ratelimit()) -			pr_notice("Fixing up unaligned userspace access " -				  "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", -				  current->comm, task_pid_nr(current), -				  (void *)regs->pc, instruction); -		else if (se_kernmode_warn && printk_ratelimit()) -			pr_notice("Fixing up unaligned kernel access " -				  "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", -				  current->comm, task_pid_nr(current), -				  (void *)regs->pc, instruction); -	} +	if (!expected) +		unaligned_fixups_notify(current, instruction, regs);  	ret = -EFAULT;  	switch (instruction&0xF000) { @@ -616,10 +538,10 @@ asmlinkage void do_address_error(struct pt_regs *regs,  	if (user_mode(regs)) {  		int si_code = BUS_ADRERR; +		unsigned int user_action;  		local_irq_enable(); - -		se_user += 1; +		inc_unaligned_user_access();  		set_fs(USER_DS);  		if (copy_from_user(&instruction, (insn_size_t *)(regs->pc & ~1), @@ -630,16 +552,12 @@ asmlinkage void do_address_error(struct pt_regs *regs,  		set_fs(oldfs);  		/* shout about userspace fixups */ -		if (se_usermode & 1) -			printk(KERN_NOTICE "Unaligned userspace access " -			       "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", -			       current->comm, current->pid, (void *)regs->pc, -			       instruction); +		unaligned_fixups_notify(current, instruction, regs); -		if (se_usermode & 2) +		user_action = unaligned_user_action(); +		if (user_action & UM_FIXUP)  			goto fixup; - -		if (se_usermode & 4) +		if (user_action & UM_SIGNAL)  			goto uspace_segv;  		else {  			/* ignore */ @@ -659,7 +577,7 @@ fixup:  					      &user_mem_access, 0);  		set_fs(oldfs); -		if (tmp==0) +		if (tmp == 0)  			return; /* sorted */  uspace_segv:  		printk(KERN_NOTICE "Sending SIGBUS to \"%s\" due to unaligned " @@ -672,7 +590,7 @@ uspace_segv:  		info.si_addr = (void __user *)address;  		force_sig_info(SIGBUS, &info, current);  	} else { -		se_sys += 1; +		inc_unaligned_kernel_access();  		if (regs->pc & 1)  			die("unaligned program counter", regs, error_code); @@ -687,11 +605,7 @@ uspace_segv:  			die("insn faulting in do_address_error", regs, 0);  		} -		if (se_kernmode_warn) -			printk(KERN_NOTICE "Unaligned kernel access " -			       "on behalf of \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", -			       current->comm, current->pid, (void *)regs->pc, -			       instruction); +		unaligned_fixups_notify(current, instruction, regs);  		handle_unaligned_access(instruction, regs,  					&user_mem_access, 0); @@ -876,35 +790,10 @@ asmlinkage void do_exception_error(unsigned long r4, unsigned long r5,  	die_if_kernel("exception", regs, ex);  } -#if defined(CONFIG_SH_STANDARD_BIOS) -void *gdb_vbr_vector; - -static inline void __init gdb_vbr_init(void) -{ -	register unsigned long vbr; - -	/* -	 * Read the old value of the VBR register to initialise -	 * the vector through which debug and BIOS traps are -	 * delegated by the Linux trap handler. -	 */ -	asm volatile("stc vbr, %0" : "=r" (vbr)); - -	gdb_vbr_vector = (void *)(vbr + 0x100); -	printk("Setting GDB trap vector to 0x%08lx\n", -	       (unsigned long)gdb_vbr_vector); -} -#endif -  void __cpuinit per_cpu_trap_init(void)  {  	extern void *vbr_base; -#ifdef CONFIG_SH_STANDARD_BIOS -	if (raw_smp_processor_id() == 0) -		gdb_vbr_init(); -#endif -  	/* NOTE: The VBR value should be at P1  	   (or P2, virtural "fixed" address space).  	   It's definitely should not in physical address.  */ @@ -956,11 +845,8 @@ void __init trap_init(void)  #endif  #ifdef TRAP_UBC -	set_exception_table_vec(TRAP_UBC, break_point_trap); +	set_exception_table_vec(TRAP_UBC, breakpoint_trap_handler);  #endif - -	/* Setup VBR for boot cpu */ -	per_cpu_trap_init();  }  void show_stack(struct task_struct *tsk, unsigned long *sp) @@ -985,34 +871,3 @@ void dump_stack(void)  	show_stack(NULL, NULL);  }  EXPORT_SYMBOL(dump_stack); - -#ifdef CONFIG_PROC_FS -/* - * This needs to be done after sysctl_init, otherwise sys/ will be - * overwritten.  Actually, this shouldn't be in sys/ at all since - * it isn't a sysctl, and it doesn't contain sysctl information. - * We now locate it in /proc/cpu/alignment instead. - */ -static int __init alignment_init(void) -{ -	struct proc_dir_entry *dir, *res; - -	dir = proc_mkdir("cpu", NULL); -	if (!dir) -		return -ENOMEM; - -	res = proc_create_data("alignment", S_IWUSR | S_IRUGO, dir, -			       &alignment_proc_fops, &se_usermode); -	if (!res) -		return -ENOMEM; - -        res = proc_create_data("kernel_alignment", S_IWUSR | S_IRUGO, dir, -			       &alignment_proc_fops, &se_kernmode_warn); -        if (!res) -                return -ENOMEM; - -	return 0; -} - -fs_initcall(alignment_init); -#endif diff --git a/arch/sh/kernel/traps_64.c b/arch/sh/kernel/traps_64.c index d86f5315a0c..e67e140bf1f 100644 --- a/arch/sh/kernel/traps_64.c +++ b/arch/sh/kernel/traps_64.c @@ -611,19 +611,19 @@ static int misaligned_fpu_load(struct pt_regs *regs,  		switch (width_shift) {  		case 2: -			current->thread.fpu.hard.fp_regs[destreg] = buflo; +			current->thread.xstate->hardfpu.fp_regs[destreg] = buflo;  			break;  		case 3:  			if (do_paired_load) { -				current->thread.fpu.hard.fp_regs[destreg] = buflo; -				current->thread.fpu.hard.fp_regs[destreg+1] = bufhi; +				current->thread.xstate->hardfpu.fp_regs[destreg] = buflo; +				current->thread.xstate->hardfpu.fp_regs[destreg+1] = bufhi;  			} else {  #if defined(CONFIG_CPU_LITTLE_ENDIAN) -				current->thread.fpu.hard.fp_regs[destreg] = bufhi; -				current->thread.fpu.hard.fp_regs[destreg+1] = buflo; +				current->thread.xstate->hardfpu.fp_regs[destreg] = bufhi; +				current->thread.xstate->hardfpu.fp_regs[destreg+1] = buflo;  #else -				current->thread.fpu.hard.fp_regs[destreg] = buflo; -				current->thread.fpu.hard.fp_regs[destreg+1] = bufhi; +				current->thread.xstate->hardfpu.fp_regs[destreg] = buflo; +				current->thread.xstate->hardfpu.fp_regs[destreg+1] = bufhi;  #endif  			}  			break; @@ -681,19 +681,19 @@ static int misaligned_fpu_store(struct pt_regs *regs,  		switch (width_shift) {  		case 2: -			buflo = current->thread.fpu.hard.fp_regs[srcreg]; +			buflo = current->thread.xstate->hardfpu.fp_regs[srcreg];  			break;  		case 3:  			if (do_paired_load) { -				buflo = current->thread.fpu.hard.fp_regs[srcreg]; -				bufhi = current->thread.fpu.hard.fp_regs[srcreg+1]; +				buflo = current->thread.xstate->hardfpu.fp_regs[srcreg]; +				bufhi = current->thread.xstate->hardfpu.fp_regs[srcreg+1];  			} else {  #if defined(CONFIG_CPU_LITTLE_ENDIAN) -				bufhi = current->thread.fpu.hard.fp_regs[srcreg]; -				buflo = current->thread.fpu.hard.fp_regs[srcreg+1]; +				bufhi = current->thread.xstate->hardfpu.fp_regs[srcreg]; +				buflo = current->thread.xstate->hardfpu.fp_regs[srcreg+1];  #else -				buflo = current->thread.fpu.hard.fp_regs[srcreg]; -				bufhi = current->thread.fpu.hard.fp_regs[srcreg+1]; +				buflo = current->thread.xstate->hardfpu.fp_regs[srcreg]; +				bufhi = current->thread.xstate->hardfpu.fp_regs[srcreg+1];  #endif  			}  			break; @@ -944,3 +944,8 @@ asmlinkage void do_debug_interrupt(unsigned long code, struct pt_regs *regs)  	/* Clear all DEBUGINT causes */  	poke_real_address_q(DM_EXP_CAUSE_PHY, 0x0);  } + +void __cpuinit per_cpu_trap_init(void) +{ +	/* Nothing to do for now, VBR initialization later. */ +} diff --git a/arch/sh/kernel/vmlinux.lds.S b/arch/sh/kernel/vmlinux.lds.S index a1e4ec24f1f..7f8a709c3ad 100644 --- a/arch/sh/kernel/vmlinux.lds.S +++ b/arch/sh/kernel/vmlinux.lds.S @@ -3,7 +3,7 @@   * Written by Niibe Yutaka and Paul Mundt   */  #ifdef CONFIG_SUPERH64 -#define LOAD_OFFSET	CONFIG_PAGE_OFFSET +#define LOAD_OFFSET	PAGE_OFFSET  OUTPUT_ARCH(sh:sh5)  #else  #define LOAD_OFFSET	0 @@ -14,17 +14,16 @@ OUTPUT_ARCH(sh)  #include <asm/cache.h>  #include <asm/vmlinux.lds.h> +#ifdef CONFIG_PMB + #define MEMORY_OFFSET	0 +#else + #define MEMORY_OFFSET	__MEMORY_START +#endif +  ENTRY(_start)  SECTIONS  { -#ifdef CONFIG_PMB_FIXED -	. = CONFIG_PAGE_OFFSET + (CONFIG_MEMORY_START & 0x1fffffff) + -	    CONFIG_ZERO_PAGE_OFFSET; -#elif defined(CONFIG_32BIT) -	. = CONFIG_PAGE_OFFSET + CONFIG_ZERO_PAGE_OFFSET; -#else -	. = CONFIG_PAGE_OFFSET + CONFIG_MEMORY_START + CONFIG_ZERO_PAGE_OFFSET; -#endif +	. = PAGE_OFFSET + MEMORY_OFFSET + CONFIG_ZERO_PAGE_OFFSET;  	_text = .;		/* Text and read-only data */ @@ -35,12 +34,7 @@ SECTIONS  	.text : AT(ADDR(.text) - LOAD_OFFSET) {  		HEAD_TEXT  		TEXT_TEXT - -#ifdef CONFIG_SUPERH64 -		*(.text64) -		*(.text..SHmedia32) -#endif - +		EXTRA_TEXT  		SCHED_TEXT  		LOCK_TEXT  		KPROBES_TEXT @@ -51,24 +45,12 @@ SECTIONS  	} = 0x0009  	EXCEPTION_TABLE(16) -  	NOTES -	RO_DATA(PAGE_SIZE) - -	/* -	 * Code which must be executed uncached and the associated data -	 */ -	. = ALIGN(PAGE_SIZE); -	.uncached : AT(ADDR(.uncached) - LOAD_OFFSET) { -		__uncached_start = .; -		*(.uncached.text) -		*(.uncached.data) -		__uncached_end = .; -	} +	_sdata = .; +	RO_DATA(PAGE_SIZE)  	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) - -	_edata = .;			/* End of data section */ +	_edata = .;  	DWARF_EH_FRAME diff --git a/arch/sh/kernel/vsyscall/vsyscall.c b/arch/sh/kernel/vsyscall/vsyscall.c index 3f7e415be86..242117cbad6 100644 --- a/arch/sh/kernel/vsyscall/vsyscall.c +++ b/arch/sh/kernel/vsyscall/vsyscall.c @@ -11,7 +11,6 @@   * for more details.   */  #include <linux/mm.h> -#include <linux/slab.h>  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/gfp.h> diff --git a/arch/sh/lib/libgcc.h b/arch/sh/lib/libgcc.h index 3f19d1c5d94..05909d58e2f 100644 --- a/arch/sh/lib/libgcc.h +++ b/arch/sh/lib/libgcc.h @@ -17,8 +17,7 @@ struct DWstruct {  #error I feel sick.  #endif -typedef union -{ +typedef union {  	struct DWstruct s;  	long long ll;  } DWunion; diff --git a/arch/sh/lib/strlen.S b/arch/sh/lib/strlen.S index f8ab296047b..1bcc13f0596 100644 --- a/arch/sh/lib/strlen.S +++ b/arch/sh/lib/strlen.S @@ -35,7 +35,7 @@ ENTRY(strlen)  	mov.b	@r4+,r1  	tst	r1,r1  	bt	8f -	add	#1,r2	 +	add	#1,r2  1:  	mov	#0,r3 diff --git a/arch/sh/math-emu/math.c b/arch/sh/math-emu/math.c index d6c15cae091..1fcdb122097 100644 --- a/arch/sh/math-emu/math.c +++ b/arch/sh/math-emu/math.c @@ -471,10 +471,10 @@ static int fpu_emulate(u16 code, struct sh_fpu_soft_struct *fregs, struct pt_reg   *	denormal_to_double - Given denormalized float number,   *	                     store double float   * - *	@fpu: Pointer to sh_fpu_hard structure + *	@fpu: Pointer to sh_fpu_soft structure   *	@n: Index to FP register   */ -static void denormal_to_double(struct sh_fpu_hard_struct *fpu, int n) +static void denormal_to_double(struct sh_fpu_soft_struct *fpu, int n)  {  	unsigned long du, dl;  	unsigned long x = fpu->fpul; @@ -552,11 +552,11 @@ static int ieee_fpe_handler(struct pt_regs *regs)  	if ((finsn & 0xf1ff) == 0xf0ad) { /* fcnvsd */  		struct task_struct *tsk = current; -		if ((tsk->thread.fpu.hard.fpscr & (1 << 17))) { +		if ((tsk->thread.xstate->softfpu.fpscr & (1 << 17))) {  			/* FPU error */ -			denormal_to_double (&tsk->thread.fpu.hard, +			denormal_to_double (&tsk->thread.xstate->softfpu,  					    (finsn >> 8) & 0xf); -			tsk->thread.fpu.hard.fpscr &= +			tsk->thread.xstate->softfpu.fpscr &=  				~(FPSCR_CAUSE_MASK | FPSCR_FLAG_MASK);  			task_thread_info(tsk)->status |= TS_USEDFPU;  		} else { @@ -617,7 +617,7 @@ static void fpu_init(struct sh_fpu_soft_struct *fpu)  int do_fpu_inst(unsigned short inst, struct pt_regs *regs)  {  	struct task_struct *tsk = current; -	struct sh_fpu_soft_struct *fpu = &(tsk->thread.fpu.soft); +	struct sh_fpu_soft_struct *fpu = &(tsk->thread.xstate->softfpu);  	if (!(task_thread_info(tsk)->status & TS_USEDFPU)) {  		/* initialize once. */ diff --git a/arch/sh/mm/Kconfig b/arch/sh/mm/Kconfig index 986a71b88ca..1445ca6257d 100644 --- a/arch/sh/mm/Kconfig +++ b/arch/sh/mm/Kconfig @@ -75,52 +75,25 @@ config MEMORY_SIZE  config 29BIT  	def_bool !32BIT  	depends on SUPERH32 +	select UNCACHED_MAPPING  config 32BIT  	bool  	default y if CPU_SH5 -config PMB_ENABLE -	bool "Support 32-bit physical addressing through PMB" -	depends on MMU && EXPERIMENTAL && CPU_SH4A && !CPU_SH4AL_DSP -	help -	  If you say Y here, physical addressing will be extended to -	  32-bits through the SH-4A PMB. If this is not set, legacy -	  29-bit physical addressing will be used. - -choice -	prompt "PMB handling type" -	depends on PMB_ENABLE -	default PMB_FIXED -  config PMB -	bool "PMB" +	bool "Support 32-bit physical addressing through PMB"  	depends on MMU && EXPERIMENTAL && CPU_SH4A && !CPU_SH4AL_DSP +	select 32BIT +	select UNCACHED_MAPPING  	help  	  If you say Y here, physical addressing will be extended to  	  32-bits through the SH-4A PMB. If this is not set, legacy  	  29-bit physical addressing will be used. -config PMB_FIXED -	bool "fixed PMB" -	depends on MMU && EXPERIMENTAL && CPU_SH4A && !CPU_SH4AL_DSP -	select 32BIT -	help -	  If this option is enabled, fixed PMB mappings are inherited -	  from the boot loader, and the kernel does not attempt dynamic -	  management. This is the closest to legacy 29-bit physical mode, -	  and allows systems to support up to 512MiB of system memory. - -endchoice -  config X2TLB -	bool "Enable extended TLB mode" -	depends on (CPU_SHX2 || CPU_SHX3) && MMU && EXPERIMENTAL -	help -	  Selecting this option will enable the extended mode of the SH-X2 -	  TLB. For legacy SH-X behaviour and interoperability, say N. For -	  all of the fun new features and a willingless to submit bug reports, -	  say Y. +	def_bool y +	depends on (CPU_SHX2 || CPU_SHX3) && MMU  config VSYSCALL  	bool "Support vsyscall page" @@ -188,14 +161,19 @@ config ARCH_MEMORY_PROBE  	def_bool y  	depends on MEMORY_HOTPLUG +config IOREMAP_FIXED +       def_bool y +       depends on X2TLB || SUPERH64 + +config UNCACHED_MAPPING +	bool +  choice  	prompt "Kernel page size" -	default PAGE_SIZE_8KB if X2TLB  	default PAGE_SIZE_4KB  config PAGE_SIZE_4KB  	bool "4kB" -	depends on !MMU || !X2TLB  	help  	  This is the default page size used by all SuperH CPUs. diff --git a/arch/sh/mm/Makefile b/arch/sh/mm/Makefile index 8a70535fa7c..53f7c684afb 100644 --- a/arch/sh/mm/Makefile +++ b/arch/sh/mm/Makefile @@ -2,7 +2,7 @@  # Makefile for the Linux SuperH-specific parts of the memory manager.  # -obj-y			:= cache.o init.o consistent.o mmap.o +obj-y			:= alignment.o cache.o init.o consistent.o mmap.o  cacheops-$(CONFIG_CPU_SH2)		:= cache-sh2.o  cacheops-$(CONFIG_CPU_SH2A)		:= cache-sh2a.o @@ -10,31 +10,36 @@ cacheops-$(CONFIG_CPU_SH3)		:= cache-sh3.o  cacheops-$(CONFIG_CPU_SH4)		:= cache-sh4.o flush-sh4.o  cacheops-$(CONFIG_CPU_SH5)		:= cache-sh5.o flush-sh4.o  cacheops-$(CONFIG_SH7705_CACHE_32KB)	+= cache-sh7705.o +cacheops-$(CONFIG_CPU_SHX3)		+= cache-shx3.o  obj-y			+= $(cacheops-y)  mmu-y			:= nommu.o extable_32.o  mmu-$(CONFIG_MMU)	:= extable_$(BITS).o fault_$(BITS).o \ -			   ioremap_$(BITS).o kmap.o tlbflush_$(BITS).o +			   ioremap.o kmap.o pgtable.o tlbflush_$(BITS).o  obj-y			+= $(mmu-y) -obj-$(CONFIG_DEBUG_FS)	+= asids-debugfs.o -ifdef CONFIG_DEBUG_FS -obj-$(CONFIG_CPU_SH4)	+= cache-debugfs.o +debugfs-y			:= asids-debugfs.o +ifndef CONFIG_CACHE_OFF +debugfs-$(CONFIG_CPU_SH4)	+= cache-debugfs.o  endif  ifdef CONFIG_MMU +debugfs-$(CONFIG_CPU_SH4)	+= tlb-debugfs.o  tlb-$(CONFIG_CPU_SH3)		:= tlb-sh3.o -tlb-$(CONFIG_CPU_SH4)		:= tlb-sh4.o +tlb-$(CONFIG_CPU_SH4)		:= tlb-sh4.o tlb-urb.o  tlb-$(CONFIG_CPU_SH5)		:= tlb-sh5.o -tlb-$(CONFIG_CPU_HAS_PTEAEX)	:= tlb-pteaex.o +tlb-$(CONFIG_CPU_HAS_PTEAEX)	:= tlb-pteaex.o tlb-urb.o  obj-y				+= $(tlb-y)  endif +obj-$(CONFIG_DEBUG_FS)		+= $(debugfs-y)  obj-$(CONFIG_HUGETLB_PAGE)	+= hugetlbpage.o -obj-$(CONFIG_PMB_ENABLE)	+= pmb.o +obj-$(CONFIG_PMB)		+= pmb.o  obj-$(CONFIG_NUMA)		+= numa.o +obj-$(CONFIG_IOREMAP_FIXED)	+= ioremap_fixed.o +obj-$(CONFIG_UNCACHED_MAPPING)	+= uncached.o  # Special flags for fault_64.o.  This puts restrictions on the number of  # caller-save registers that the compiler can target when building this file. diff --git a/arch/sh/mm/alignment.c b/arch/sh/mm/alignment.c new file mode 100644 index 00000000000..b2595b8548e --- /dev/null +++ b/arch/sh/mm/alignment.c @@ -0,0 +1,189 @@ +/* + * Alignment access counters and corresponding user-space interfaces. + * + * Copyright (C) 2009 ST Microelectronics + * Copyright (C) 2009 - 2010 Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/seq_file.h> +#include <linux/proc_fs.h> +#include <linux/uaccess.h> +#include <asm/alignment.h> +#include <asm/processor.h> + +static unsigned long se_user; +static unsigned long se_sys; +static unsigned long se_half; +static unsigned long se_word; +static unsigned long se_dword; +static unsigned long se_multi; +/* bitfield: 1: warn 2: fixup 4: signal -> combinations 2|4 && 1|2|4 are not +   valid! */ +static int se_usermode = UM_WARN | UM_FIXUP; +/* 0: no warning 1: print a warning message, disabled by default */ +static int se_kernmode_warn; + +core_param(alignment, se_usermode, int, 0600); + +void inc_unaligned_byte_access(void) +{ +	se_half++; +} + +void inc_unaligned_word_access(void) +{ +	se_word++; +} + +void inc_unaligned_dword_access(void) +{ +	se_dword++; +} + +void inc_unaligned_multi_access(void) +{ +	se_multi++; +} + +void inc_unaligned_user_access(void) +{ +	se_user++; +} + +void inc_unaligned_kernel_access(void) +{ +	se_sys++; +} + +/* + * This defaults to the global policy which can be set from the command + * line, while processes can overload their preferences via prctl(). + */ +unsigned int unaligned_user_action(void) +{ +	unsigned int action = se_usermode; + +	if (current->thread.flags & SH_THREAD_UAC_SIGBUS) { +		action &= ~UM_FIXUP; +		action |= UM_SIGNAL; +	} + +	if (current->thread.flags & SH_THREAD_UAC_NOPRINT) +		action &= ~UM_WARN; + +	return action; +} + +int get_unalign_ctl(struct task_struct *tsk, unsigned long addr) +{ +	return put_user(tsk->thread.flags & SH_THREAD_UAC_MASK, +			(unsigned int __user *)addr); +} + +int set_unalign_ctl(struct task_struct *tsk, unsigned int val) +{ +	tsk->thread.flags = (tsk->thread.flags & ~SH_THREAD_UAC_MASK) | +			    (val & SH_THREAD_UAC_MASK); +	return 0; +} + +void unaligned_fixups_notify(struct task_struct *tsk, insn_size_t insn, +			     struct pt_regs *regs) +{ +	if (user_mode(regs) && (se_usermode & UM_WARN) && printk_ratelimit()) +		pr_notice("Fixing up unaligned userspace access " +			  "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", +			  tsk->comm, task_pid_nr(tsk), +			  (void *)instruction_pointer(regs), insn); +	else if (se_kernmode_warn && printk_ratelimit()) +		pr_notice("Fixing up unaligned kernel access " +			  "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n", +			  tsk->comm, task_pid_nr(tsk), +			  (void *)instruction_pointer(regs), insn); +} + +static const char *se_usermode_action[] = { +	"ignored", +	"warn", +	"fixup", +	"fixup+warn", +	"signal", +	"signal+warn" +}; + +static int alignment_proc_show(struct seq_file *m, void *v) +{ +	seq_printf(m, "User:\t\t%lu\n", se_user); +	seq_printf(m, "System:\t\t%lu\n", se_sys); +	seq_printf(m, "Half:\t\t%lu\n", se_half); +	seq_printf(m, "Word:\t\t%lu\n", se_word); +	seq_printf(m, "DWord:\t\t%lu\n", se_dword); +	seq_printf(m, "Multi:\t\t%lu\n", se_multi); +	seq_printf(m, "User faults:\t%i (%s)\n", se_usermode, +			se_usermode_action[se_usermode]); +	seq_printf(m, "Kernel faults:\t%i (fixup%s)\n", se_kernmode_warn, +			se_kernmode_warn ? "+warn" : ""); +	return 0; +} + +static int alignment_proc_open(struct inode *inode, struct file *file) +{ +	return single_open(file, alignment_proc_show, NULL); +} + +static ssize_t alignment_proc_write(struct file *file, +		const char __user *buffer, size_t count, loff_t *pos) +{ +	int *data = PDE(file->f_path.dentry->d_inode)->data; +	char mode; + +	if (count > 0) { +		if (get_user(mode, buffer)) +			return -EFAULT; +		if (mode >= '0' && mode <= '5') +			*data = mode - '0'; +	} +	return count; +} + +static const struct file_operations alignment_proc_fops = { +	.owner		= THIS_MODULE, +	.open		= alignment_proc_open, +	.read		= seq_read, +	.llseek		= seq_lseek, +	.release	= single_release, +	.write		= alignment_proc_write, +}; + +/* + * This needs to be done after sysctl_init, otherwise sys/ will be + * overwritten.  Actually, this shouldn't be in sys/ at all since + * it isn't a sysctl, and it doesn't contain sysctl information. + * We now locate it in /proc/cpu/alignment instead. + */ +static int __init alignment_init(void) +{ +	struct proc_dir_entry *dir, *res; + +	dir = proc_mkdir("cpu", NULL); +	if (!dir) +		return -ENOMEM; + +	res = proc_create_data("alignment", S_IWUSR | S_IRUGO, dir, +			       &alignment_proc_fops, &se_usermode); +	if (!res) +		return -ENOMEM; + +        res = proc_create_data("kernel_alignment", S_IWUSR | S_IRUGO, dir, +			       &alignment_proc_fops, &se_kernmode_warn); +        if (!res) +                return -ENOMEM; + +	return 0; +} +fs_initcall(alignment_init); diff --git a/arch/sh/mm/cache-debugfs.c b/arch/sh/mm/cache-debugfs.c index 5ba067b2659..690ed010d00 100644 --- a/arch/sh/mm/cache-debugfs.c +++ b/arch/sh/mm/cache-debugfs.c @@ -22,8 +22,7 @@ enum cache_type {  	CACHE_TYPE_UNIFIED,  }; -static int __uses_jump_to_uncached cache_seq_show(struct seq_file *file, -						  void *iter) +static int cache_seq_show(struct seq_file *file, void *iter)  {  	unsigned int cache_type = (unsigned int)file->private;  	struct cache_info *cache; @@ -37,7 +36,7 @@ static int __uses_jump_to_uncached cache_seq_show(struct seq_file *file,  	 */  	jump_to_uncached(); -	ccr = ctrl_inl(CCR); +	ccr = __raw_readl(CCR);  	if ((ccr & CCR_CACHE_ENABLE) == 0) {  		back_to_cached(); @@ -90,7 +89,7 @@ static int __uses_jump_to_uncached cache_seq_show(struct seq_file *file,  		for (addr = addrstart, line = 0;  		     addr < addrstart + waysize;  		     addr += cache->linesz, line++) { -			unsigned long data = ctrl_inl(addr); +			unsigned long data = __raw_readl(addr);  			/* Check the V bit, ignore invalid cachelines */  			if ((data & 1) == 0) diff --git a/arch/sh/mm/cache-sh2.c b/arch/sh/mm/cache-sh2.c index 699a71f4632..defcf719f2e 100644 --- a/arch/sh/mm/cache-sh2.c +++ b/arch/sh/mm/cache-sh2.c @@ -28,10 +28,10 @@ static void sh2__flush_wback_region(void *start, int size)  		unsigned long addr = CACHE_OC_ADDRESS_ARRAY | (v & 0x00000ff0);  		int way;  		for (way = 0; way < 4; way++) { -			unsigned long data =  ctrl_inl(addr | (way << 12)); +			unsigned long data =  __raw_readl(addr | (way << 12));  			if ((data & CACHE_PHYSADDR_MASK) == (v & CACHE_PHYSADDR_MASK)) {  				data &= ~SH_CACHE_UPDATED; -				ctrl_outl(data, addr | (way << 12)); +				__raw_writel(data, addr | (way << 12));  			}  		}  	} @@ -47,7 +47,7 @@ static void sh2__flush_purge_region(void *start, int size)  		& ~(L1_CACHE_BYTES-1);  	for (v = begin; v < end; v+=L1_CACHE_BYTES) -		ctrl_outl((v & CACHE_PHYSADDR_MASK), +		__raw_writel((v & CACHE_PHYSADDR_MASK),  			  CACHE_OC_ADDRESS_ARRAY | (v & 0x00000ff0) | 0x00000008);  } @@ -63,9 +63,9 @@ static void sh2__flush_invalidate_region(void *start, int size)  	local_irq_save(flags);  	jump_to_uncached(); -	ccr = ctrl_inl(CCR); +	ccr = __raw_readl(CCR);  	ccr |= CCR_CACHE_INVALIDATE; -	ctrl_outl(ccr, CCR); +	__raw_writel(ccr, CCR);  	back_to_cached();  	local_irq_restore(flags); @@ -78,7 +78,7 @@ static void sh2__flush_invalidate_region(void *start, int size)  		& ~(L1_CACHE_BYTES-1);  	for (v = begin; v < end; v+=L1_CACHE_BYTES) -		ctrl_outl((v & CACHE_PHYSADDR_MASK), +		__raw_writel((v & CACHE_PHYSADDR_MASK),  			  CACHE_OC_ADDRESS_ARRAY | (v & 0x00000ff0) | 0x00000008);  #endif  } diff --git a/arch/sh/mm/cache-sh2a.c b/arch/sh/mm/cache-sh2a.c index 975899d8356..1f51225426a 100644 --- a/arch/sh/mm/cache-sh2a.c +++ b/arch/sh/mm/cache-sh2a.c @@ -32,10 +32,10 @@ static void sh2a__flush_wback_region(void *start, int size)  		unsigned long addr = CACHE_OC_ADDRESS_ARRAY | (v & 0x000007f0);  		int way;  		for (way = 0; way < 4; way++) { -			unsigned long data =  ctrl_inl(addr | (way << 11)); +			unsigned long data =  __raw_readl(addr | (way << 11));  			if ((data & CACHE_PHYSADDR_MASK) == (v & CACHE_PHYSADDR_MASK)) {  				data &= ~SH_CACHE_UPDATED; -				ctrl_outl(data, addr | (way << 11)); +				__raw_writel(data, addr | (way << 11));  			}  		}  	} @@ -58,7 +58,7 @@ static void sh2a__flush_purge_region(void *start, int size)  	jump_to_uncached();  	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		ctrl_outl((v & CACHE_PHYSADDR_MASK), +		__raw_writel((v & CACHE_PHYSADDR_MASK),  			  CACHE_OC_ADDRESS_ARRAY | (v & 0x000007f0) | 0x00000008);  	}  	back_to_cached(); @@ -78,17 +78,17 @@ static void sh2a__flush_invalidate_region(void *start, int size)  	jump_to_uncached();  #ifdef CONFIG_CACHE_WRITEBACK -	ctrl_outl(ctrl_inl(CCR) | CCR_OCACHE_INVALIDATE, CCR); +	__raw_writel(__raw_readl(CCR) | CCR_OCACHE_INVALIDATE, CCR);  	/* I-cache invalidate */  	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		ctrl_outl((v & CACHE_PHYSADDR_MASK), +		__raw_writel((v & CACHE_PHYSADDR_MASK),  			  CACHE_IC_ADDRESS_ARRAY | (v & 0x000007f0) | 0x00000008);  	}  #else  	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		ctrl_outl((v & CACHE_PHYSADDR_MASK), +		__raw_writel((v & CACHE_PHYSADDR_MASK),  			  CACHE_IC_ADDRESS_ARRAY | (v & 0x000007f0) | 0x00000008); -		ctrl_outl((v & CACHE_PHYSADDR_MASK), +		__raw_writel((v & CACHE_PHYSADDR_MASK),  			  CACHE_OC_ADDRESS_ARRAY | (v & 0x000007f0) | 0x00000008);  	}  #endif @@ -115,14 +115,14 @@ static void sh2a_flush_icache_range(void *args)  		int way;  		/* O-Cache writeback */  		for (way = 0; way < 4; way++) { -			unsigned long data =  ctrl_inl(CACHE_OC_ADDRESS_ARRAY | addr | (way << 11)); +			unsigned long data =  __raw_readl(CACHE_OC_ADDRESS_ARRAY | addr | (way << 11));  			if ((data & CACHE_PHYSADDR_MASK) == (v & CACHE_PHYSADDR_MASK)) {  				data &= ~SH_CACHE_UPDATED; -				ctrl_outl(data, CACHE_OC_ADDRESS_ARRAY | addr | (way << 11)); +				__raw_writel(data, CACHE_OC_ADDRESS_ARRAY | addr | (way << 11));  			}  		}  		/* I-Cache invalidate */ -		ctrl_outl(addr, +		__raw_writel(addr,  			  CACHE_IC_ADDRESS_ARRAY | addr | 0x00000008);  	} diff --git a/arch/sh/mm/cache-sh3.c b/arch/sh/mm/cache-sh3.c index faef80c9813..e37523f6519 100644 --- a/arch/sh/mm/cache-sh3.c +++ b/arch/sh/mm/cache-sh3.c @@ -50,12 +50,12 @@ static void sh3__flush_wback_region(void *start, int size)  			p = __pa(v);  			addr = addrstart | (v & current_cpu_data.dcache.entry_mask);  			local_irq_save(flags); -			data = ctrl_inl(addr); +			data = __raw_readl(addr);  			if ((data & CACHE_PHYSADDR_MASK) ==  			    (p & CACHE_PHYSADDR_MASK)) {  				data &= ~SH_CACHE_UPDATED; -				ctrl_outl(data, addr); +				__raw_writel(data, addr);  				local_irq_restore(flags);  				break;  			} @@ -86,7 +86,7 @@ static void sh3__flush_purge_region(void *start, int size)  		data = (v & 0xfffffc00); /* _Virtual_ address, ~U, ~V */  		addr = CACHE_OC_ADDRESS_ARRAY |  			(v & current_cpu_data.dcache.entry_mask) | SH_CACHE_ASSOC; -		ctrl_outl(data, addr); +		__raw_writel(data, addr);  	}  } diff --git a/arch/sh/mm/cache-sh4.c b/arch/sh/mm/cache-sh4.c index 560ddb6bc8a..2cfae81914a 100644 --- a/arch/sh/mm/cache-sh4.c +++ b/arch/sh/mm/cache-sh4.c @@ -36,7 +36,7 @@ static void __flush_cache_one(unsigned long addr, unsigned long phys,   * Called from kernel/module.c:sys_init_module and routine for a.out format,   * signal handler code and kprobes code   */ -static void __uses_jump_to_uncached sh4_flush_icache_range(void *args) +static void sh4_flush_icache_range(void *args)  {  	struct flusher_data *data = args;  	unsigned long start, end; @@ -109,6 +109,7 @@ static inline void flush_cache_one(unsigned long start, unsigned long phys)  static void sh4_flush_dcache_page(void *arg)  {  	struct page *page = arg; +	unsigned long addr = (unsigned long)page_address(page);  #ifndef CONFIG_SMP  	struct address_space *mapping = page_mapping(page); @@ -116,22 +117,14 @@ static void sh4_flush_dcache_page(void *arg)  		set_bit(PG_dcache_dirty, &page->flags);  	else  #endif -	{ -		unsigned long phys = page_to_phys(page); -		unsigned long addr = CACHE_OC_ADDRESS_ARRAY; -		int i, n; - -		/* Loop all the D-cache */ -		n = boot_cpu_data.dcache.n_aliases; -		for (i = 0; i < n; i++, addr += PAGE_SIZE) -			flush_cache_one(addr, phys); -	} +		flush_cache_one(CACHE_OC_ADDRESS_ARRAY | +				(addr & shm_align_mask), page_to_phys(page));  	wmb();  }  /* TODO: Selective icache invalidation through IC address array.. */ -static void __uses_jump_to_uncached flush_icache_all(void) +static void flush_icache_all(void)  {  	unsigned long flags, ccr; @@ -139,9 +132,9 @@ static void __uses_jump_to_uncached flush_icache_all(void)  	jump_to_uncached();  	/* Flush I-cache */ -	ccr = ctrl_inl(CCR); +	ccr = __raw_readl(CCR);  	ccr |= CCR_CACHE_ICI; -	ctrl_outl(ccr, CCR); +	__raw_writel(ccr, CCR);  	/*  	 * back_to_cached() will take care of the barrier for us, don't add @@ -384,9 +377,9 @@ extern void __weak sh4__flush_region_init(void);  void __init sh4_cache_init(void)  {  	printk("PVR=%08x CVR=%08x PRR=%08x\n", -		ctrl_inl(CCN_PVR), -		ctrl_inl(CCN_CVR), -		ctrl_inl(CCN_PRR)); +		__raw_readl(CCN_PVR), +		__raw_readl(CCN_CVR), +		__raw_readl(CCN_PRR));  	local_flush_icache_range	= sh4_flush_icache_range;  	local_flush_dcache_page		= sh4_flush_dcache_page; diff --git a/arch/sh/mm/cache-sh7705.c b/arch/sh/mm/cache-sh7705.c index f527fb70fce..f498da1cce7 100644 --- a/arch/sh/mm/cache-sh7705.c +++ b/arch/sh/mm/cache-sh7705.c @@ -48,10 +48,10 @@ static inline void cache_wback_all(void)  			unsigned long data;  			int v = SH_CACHE_UPDATED | SH_CACHE_VALID; -			data = ctrl_inl(addr); +			data = __raw_readl(addr);  			if ((data & v) == v) -				ctrl_outl(data & ~v, addr); +				__raw_writel(data & ~v, addr);  		} @@ -78,7 +78,7 @@ static void sh7705_flush_icache_range(void *args)  /*   * Writeback&Invalidate the D-cache of the page   */ -static void __uses_jump_to_uncached __flush_dcache_page(unsigned long phys) +static void __flush_dcache_page(unsigned long phys)  {  	unsigned long ways, waysize, addrstart;  	unsigned long flags; @@ -115,10 +115,10 @@ static void __uses_jump_to_uncached __flush_dcache_page(unsigned long phys)  		     addr += current_cpu_data.dcache.linesz) {  			unsigned long data; -			data = ctrl_inl(addr) & (0x1ffffC00 | SH_CACHE_VALID); +			data = __raw_readl(addr) & (0x1ffffC00 | SH_CACHE_VALID);  		        if (data == phys) {  				data &= ~(SH_CACHE_VALID | SH_CACHE_UPDATED); -				ctrl_outl(data, addr); +				__raw_writel(data, addr);  			}  		} @@ -144,7 +144,7 @@ static void sh7705_flush_dcache_page(void *arg)  		__flush_dcache_page(__pa(page_address(page)));  } -static void __uses_jump_to_uncached sh7705_flush_cache_all(void *args) +static void sh7705_flush_cache_all(void *args)  {  	unsigned long flags; diff --git a/arch/sh/mm/cache-shx3.c b/arch/sh/mm/cache-shx3.c new file mode 100644 index 00000000000..c0adbee97b5 --- /dev/null +++ b/arch/sh/mm/cache-shx3.c @@ -0,0 +1,44 @@ +/* + * arch/sh/mm/cache-shx3.c - SH-X3 optimized cache ops + * + * Copyright (C) 2010  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/io.h> +#include <asm/cache.h> + +#define CCR_CACHE_SNM	0x40000		/* Hardware-assisted synonym avoidance */ +#define CCR_CACHE_IBE	0x1000000	/* ICBI broadcast */ + +void __init shx3_cache_init(void) +{ +	unsigned int ccr; + +	ccr = __raw_readl(CCR); + +	/* +	 * If we've got cache aliases, resolve them in hardware. +	 */ +	if (boot_cpu_data.dcache.n_aliases || boot_cpu_data.icache.n_aliases) { +		ccr |= CCR_CACHE_SNM; + +		boot_cpu_data.icache.n_aliases = 0; +		boot_cpu_data.dcache.n_aliases = 0; + +		pr_info("Enabling hardware synonym avoidance\n"); +	} + +#ifdef CONFIG_SMP +	/* +	 * Broadcast I-cache block invalidations by default. +	 */ +	ccr |= CCR_CACHE_IBE; +#endif + +	writel_uncached(ccr, CCR); +} diff --git a/arch/sh/mm/cache.c b/arch/sh/mm/cache.c index b8607fa7ae1..ba401d137bb 100644 --- a/arch/sh/mm/cache.c +++ b/arch/sh/mm/cache.c @@ -2,7 +2,7 @@   * arch/sh/mm/cache.c   *   * Copyright (C) 1999, 2000, 2002  Niibe Yutaka - * Copyright (C) 2002 - 2009  Paul Mundt + * Copyright (C) 2002 - 2010  Paul Mundt   *   * Released under the terms of the GNU GPL v2.0.   */ @@ -41,8 +41,17 @@ static inline void cacheop_on_each_cpu(void (*func) (void *info), void *info,                                     int wait)  {  	preempt_disable(); -	smp_call_function(func, info, wait); + +	/* +	 * It's possible that this gets called early on when IRQs are +	 * still disabled due to ioremapping by the boot CPU, so don't +	 * even attempt IPIs unless there are other CPUs online. +	 */ +	if (num_online_cpus() > 1) +		smp_call_function(func, info, wait); +  	func(info); +  	preempt_enable();  } @@ -325,6 +334,13 @@ void __init cpu_cache_init(void)  		extern void __weak sh4_cache_init(void);  		sh4_cache_init(); + +		if ((boot_cpu_data.type == CPU_SH7786) || +		    (boot_cpu_data.type == CPU_SHX3)) { +			extern void __weak shx3_cache_init(void); + +			shx3_cache_init(); +		}  	}  	if (boot_cpu_data.family == CPU_FAMILY_SH5) { diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c index 902967e3f84..c86a0854025 100644 --- a/arch/sh/mm/consistent.c +++ b/arch/sh/mm/consistent.c @@ -16,6 +16,7 @@  #include <linux/dma-debug.h>  #include <linux/io.h>  #include <linux/module.h> +#include <linux/gfp.h>  #include <asm/cacheflush.h>  #include <asm/addrspace.h> diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c index 47530104e0a..d4c34d757f0 100644 --- a/arch/sh/mm/fault_32.c +++ b/arch/sh/mm/fault_32.c @@ -53,6 +53,9 @@ static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address)  	if (!pud_present(*pud_k))  		return NULL; +	if (!pud_present(*pud)) +	    set_pud(pud, *pud_k); +  	pmd = pmd_offset(pud, address);  	pmd_k = pmd_offset(pud_k, address);  	if (!pmd_present(*pmd_k)) @@ -197,7 +200,6 @@ good_area:  	 * make sure we exit gracefully rather than endlessly redo  	 * the fault.  	 */ -survive:  	fault = handle_mm_fault(mm, vma, address, writeaccess ? FAULT_FLAG_WRITE : 0);  	if (unlikely(fault & VM_FAULT_ERROR)) {  		if (fault & VM_FAULT_OOM) @@ -287,15 +289,10 @@ no_context:   */  out_of_memory:  	up_read(&mm->mmap_sem); -	if (is_global_init(current)) { -		yield(); -		down_read(&mm->mmap_sem); -		goto survive; -	} -	printk("VM: killing process %s\n", tsk->comm); -	if (user_mode(regs)) -		do_group_exit(SIGKILL); -	goto no_context; +	if (!user_mode(regs)) +		goto no_context; +	pagefault_out_of_memory(); +	return;  do_sigbus:  	up_read(&mm->mmap_sem); @@ -371,7 +368,7 @@ handle_tlbmiss(struct pt_regs *regs, unsigned long writeaccess,  		local_flush_tlb_one(get_asid(), address & PAGE_MASK);  #endif -	update_mmu_cache(NULL, address, entry); +	update_mmu_cache(NULL, address, pte);  	return 0;  } diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c index 9304117039c..9163db3e8d1 100644 --- a/arch/sh/mm/hugetlbpage.c +++ b/arch/sh/mm/hugetlbpage.c @@ -13,7 +13,6 @@  #include <linux/mm.h>  #include <linux/hugetlb.h>  #include <linux/pagemap.h> -#include <linux/slab.h>  #include <linux/sysctl.h>  #include <asm/mman.h> diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index 432acd07e76..46f84de6246 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c @@ -2,7 +2,7 @@   * linux/arch/sh/mm/init.c   *   *  Copyright (C) 1999  Niibe Yutaka - *  Copyright (C) 2002 - 2007  Paul Mundt + *  Copyright (C) 2002 - 2010  Paul Mundt   *   *  Based on linux/arch/i386/mm/init.c:   *   Copyright (C) 1995  Linus Torvalds @@ -10,36 +10,39 @@  #include <linux/mm.h>  #include <linux/swap.h>  #include <linux/init.h> +#include <linux/gfp.h>  #include <linux/bootmem.h>  #include <linux/proc_fs.h>  #include <linux/pagemap.h>  #include <linux/percpu.h>  #include <linux/io.h> +#include <linux/lmb.h>  #include <linux/dma-mapping.h>  #include <asm/mmu_context.h> +#include <asm/mmzone.h> +#include <asm/kexec.h>  #include <asm/tlb.h>  #include <asm/cacheflush.h>  #include <asm/sections.h> +#include <asm/setup.h>  #include <asm/cache.h> +#include <asm/sizes.h>  DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);  pgd_t swapper_pg_dir[PTRS_PER_PGD]; -#ifdef CONFIG_SUPERH32 -/* - * Handle trivial transitions between cached and uncached - * segments, making use of the 1:1 mapping relationship in - * 512MB lowmem. - * - * This is the offset of the uncached section from its cached alias. - * Default value only valid in 29 bit mode, in 32bit mode will be - * overridden in pmb_init. - */ -unsigned long cached_to_uncached = P2SEG - P1SEG; -#endif +void __init generic_mem_init(void) +{ +	lmb_add(__MEMORY_START, __MEMORY_SIZE); +} + +void __init __weak plat_mem_setup(void) +{ +	/* Nothing to see here, move along. */ +}  #ifdef CONFIG_MMU -static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) +static pte_t *__get_pte_phys(unsigned long addr)  {  	pgd_t *pgd;  	pud_t *pud; @@ -49,22 +52,30 @@ static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot)  	pgd = pgd_offset_k(addr);  	if (pgd_none(*pgd)) {  		pgd_ERROR(*pgd); -		return; +		return NULL;  	}  	pud = pud_alloc(NULL, pgd, addr);  	if (unlikely(!pud)) {  		pud_ERROR(*pud); -		return; +		return NULL;  	}  	pmd = pmd_alloc(NULL, pud, addr);  	if (unlikely(!pmd)) {  		pmd_ERROR(*pmd); -		return; +		return NULL;  	}  	pte = pte_offset_kernel(pmd, addr); +	return pte; +} + +static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) +{ +	pte_t *pte; + +	pte = __get_pte_phys(addr);  	if (!pte_none(*pte)) {  		pte_ERROR(*pte);  		return; @@ -72,23 +83,24 @@ static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot)  	set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, prot));  	local_flush_tlb_one(get_asid(), addr); + +	if (pgprot_val(prot) & _PAGE_WIRED) +		tlb_wire_entry(NULL, addr, *pte); +} + +static void clear_pte_phys(unsigned long addr, pgprot_t prot) +{ +	pte_t *pte; + +	pte = __get_pte_phys(addr); + +	if (pgprot_val(prot) & _PAGE_WIRED) +		tlb_unwire_entry(); + +	set_pte(pte, pfn_pte(0, __pgprot(0))); +	local_flush_tlb_one(get_asid(), addr);  } -/* - * As a performance optimization, other platforms preserve the fixmap mapping - * across a context switch, we don't presently do this, but this could be done - * in a similar fashion as to the wired TLB interface that sh64 uses (by way - * of the memory mapped UTLB configuration) -- this unfortunately forces us to - * give up a TLB entry for each mapping we want to preserve. While this may be - * viable for a small number of fixmaps, it's not particularly useful for - * everything and needs to be carefully evaluated. (ie, we may want this for - * the vsyscall page). - * - * XXX: Perhaps add a _PAGE_WIRED flag or something similar that we can pass - * in at __set_fixmap() time to determine the appropriate behavior to follow. - * - *					 -- PFM. - */  void __set_fixmap(enum fixed_addresses idx, unsigned long phys, pgprot_t prot)  {  	unsigned long address = __fix_to_virt(idx); @@ -101,6 +113,18 @@ void __set_fixmap(enum fixed_addresses idx, unsigned long phys, pgprot_t prot)  	set_pte_phys(address, phys, prot);  } +void __clear_fixmap(enum fixed_addresses idx, pgprot_t prot) +{ +	unsigned long address = __fix_to_virt(idx); + +	if (idx >= __end_of_fixed_addresses) { +		BUG(); +		return; +	} + +	clear_pte_phys(address, prot); +} +  void __init page_table_range_init(unsigned long start, unsigned long end,  					 pgd_t *pgd_base)  { @@ -120,7 +144,13 @@ void __init page_table_range_init(unsigned long start, unsigned long end,  	for ( ; (i < PTRS_PER_PGD) && (vaddr != end); pgd++, i++) {  		pud = (pud_t *)pgd;  		for ( ; (j < PTRS_PER_PUD) && (vaddr != end); pud++, j++) { +#ifdef __PAGETABLE_PMD_FOLDED  			pmd = (pmd_t *)pud; +#else +			pmd = (pmd_t *)alloc_bootmem_low_pages(PAGE_SIZE); +			pud_populate(&init_mm, pud, pmd); +			pmd += k; +#endif  			for (; (k < PTRS_PER_PMD) && (vaddr != end); pmd++, k++) {  				if (pmd_none(*pmd)) {  					pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); @@ -136,15 +166,166 @@ void __init page_table_range_init(unsigned long start, unsigned long end,  }  #endif	/* CONFIG_MMU */ -/* - * paging_init() sets up the page tables - */ +void __init allocate_pgdat(unsigned int nid) +{ +	unsigned long start_pfn, end_pfn; +#ifdef CONFIG_NEED_MULTIPLE_NODES +	unsigned long phys; +#endif + +	get_pfn_range_for_nid(nid, &start_pfn, &end_pfn); + +#ifdef CONFIG_NEED_MULTIPLE_NODES +	phys = __lmb_alloc_base(sizeof(struct pglist_data), +				SMP_CACHE_BYTES, end_pfn << PAGE_SHIFT); +	/* Retry with all of system memory */ +	if (!phys) +		phys = __lmb_alloc_base(sizeof(struct pglist_data), +					SMP_CACHE_BYTES, lmb_end_of_DRAM()); +	if (!phys) +		panic("Can't allocate pgdat for node %d\n", nid); + +	NODE_DATA(nid) = __va(phys); +	memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); + +	NODE_DATA(nid)->bdata = &bootmem_node_data[nid]; +#endif + +	NODE_DATA(nid)->node_start_pfn = start_pfn; +	NODE_DATA(nid)->node_spanned_pages = end_pfn - start_pfn; +} + +static void __init bootmem_init_one_node(unsigned int nid) +{ +	unsigned long total_pages, paddr; +	unsigned long end_pfn; +	struct pglist_data *p; +	int i; + +	p = NODE_DATA(nid); + +	/* Nothing to do.. */ +	if (!p->node_spanned_pages) +		return; + +	end_pfn = p->node_start_pfn + p->node_spanned_pages; + +	total_pages = bootmem_bootmap_pages(p->node_spanned_pages); + +	paddr = lmb_alloc(total_pages << PAGE_SHIFT, PAGE_SIZE); +	if (!paddr) +		panic("Can't allocate bootmap for nid[%d]\n", nid); + +	init_bootmem_node(p, paddr >> PAGE_SHIFT, p->node_start_pfn, end_pfn); + +	free_bootmem_with_active_regions(nid, end_pfn); + +	/* +	 * XXX Handle initial reservations for the system memory node +	 * only for the moment, we'll refactor this later for handling +	 * reservations in other nodes. +	 */ +	if (nid == 0) { +		/* Reserve the sections we're already using. */ +		for (i = 0; i < lmb.reserved.cnt; i++) +			reserve_bootmem(lmb.reserved.region[i].base, +					lmb_size_bytes(&lmb.reserved, i), +					BOOTMEM_DEFAULT); +	} + +	sparse_memory_present_with_active_regions(nid); +} + +static void __init do_init_bootmem(void) +{ +	int i; + +	/* Add active regions with valid PFNs. */ +	for (i = 0; i < lmb.memory.cnt; i++) { +		unsigned long start_pfn, end_pfn; +		start_pfn = lmb.memory.region[i].base >> PAGE_SHIFT; +		end_pfn = start_pfn + lmb_size_pages(&lmb.memory, i); +		__add_active_range(0, start_pfn, end_pfn); +	} + +	/* All of system RAM sits in node 0 for the non-NUMA case */ +	allocate_pgdat(0); +	node_set_online(0); + +	plat_mem_setup(); + +	for_each_online_node(i) +		bootmem_init_one_node(i); + +	sparse_init(); +} + +static void __init early_reserve_mem(void) +{ +	unsigned long start_pfn; + +	/* +	 * Partially used pages are not usable - thus +	 * we are rounding upwards: +	 */ +	start_pfn = PFN_UP(__pa(_end)); + +	/* +	 * Reserve the kernel text and Reserve the bootmem bitmap. We do +	 * this in two steps (first step was init_bootmem()), because +	 * this catches the (definitely buggy) case of us accidentally +	 * initializing the bootmem allocator with an invalid RAM area. +	 */ +	lmb_reserve(__MEMORY_START + CONFIG_ZERO_PAGE_OFFSET, +		    (PFN_PHYS(start_pfn) + PAGE_SIZE - 1) - +		    (__MEMORY_START + CONFIG_ZERO_PAGE_OFFSET)); + +	/* +	 * Reserve physical pages below CONFIG_ZERO_PAGE_OFFSET. +	 */ +	if (CONFIG_ZERO_PAGE_OFFSET != 0) +		lmb_reserve(__MEMORY_START, CONFIG_ZERO_PAGE_OFFSET); + +	/* +	 * Handle additional early reservations +	 */ +	check_for_initrd(); +	reserve_crashkernel(); +} +  void __init paging_init(void)  {  	unsigned long max_zone_pfns[MAX_NR_ZONES];  	unsigned long vaddr, end;  	int nid; +	lmb_init(); + +	sh_mv.mv_mem_init(); + +	early_reserve_mem(); + +	lmb_enforce_memory_limit(memory_limit); +	lmb_analyze(); + +	lmb_dump_all(); + +	/* +	 * Determine low and high memory ranges: +	 */ +	max_low_pfn = max_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT; +	min_low_pfn = __MEMORY_START >> PAGE_SHIFT; + +	nodes_clear(node_online_map); + +	memory_start = (unsigned long)__va(__MEMORY_START); +	memory_end = memory_start + (memory_limit ?: lmb_phys_mem_size()); + +	uncached_init(); +	pmb_init(); +	do_init_bootmem(); +	ioremap_fixed_init(); +  	/* We don't need to map the kernel through the TLB, as  	 * it is permanatly mapped using P1. So clear the  	 * entire pgd. */ @@ -182,9 +363,6 @@ void __init paging_init(void)  	}  	free_area_init_nodes(max_zone_pfns); - -	/* Set up the uncached fixmap */ -	set_fixmap_nocache(FIX_UNCACHED, __pa(&__uncached_start));  }  /* @@ -195,6 +373,8 @@ static void __init iommu_init(void)  	no_iommu_init();  } +unsigned int mem_init_done = 0; +  void __init mem_init(void)  {  	int codesize, datasize, initsize; @@ -231,6 +411,8 @@ void __init mem_init(void)  	memset(empty_zero_page, 0, PAGE_SIZE);  	__flush_wback_region(empty_zero_page, PAGE_SIZE); +	vsyscall_init(); +  	codesize =  (unsigned long) &_etext - (unsigned long) &_text;  	datasize =  (unsigned long) &_edata - (unsigned long) &_etext;  	initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin; @@ -243,8 +425,48 @@ void __init mem_init(void)  		datasize >> 10,  		initsize >> 10); -	/* Initialize the vDSO */ -	vsyscall_init(); +	printk(KERN_INFO "virtual kernel memory layout:\n" +		"    fixmap  : 0x%08lx - 0x%08lx   (%4ld kB)\n" +#ifdef CONFIG_HIGHMEM +		"    pkmap   : 0x%08lx - 0x%08lx   (%4ld kB)\n" +#endif +		"    vmalloc : 0x%08lx - 0x%08lx   (%4ld MB)\n" +		"    lowmem  : 0x%08lx - 0x%08lx   (%4ld MB) (cached)\n" +#ifdef CONFIG_UNCACHED_MAPPING +		"            : 0x%08lx - 0x%08lx   (%4ld MB) (uncached)\n" +#endif +		"      .init : 0x%08lx - 0x%08lx   (%4ld kB)\n" +		"      .data : 0x%08lx - 0x%08lx   (%4ld kB)\n" +		"      .text : 0x%08lx - 0x%08lx   (%4ld kB)\n", +		FIXADDR_START, FIXADDR_TOP, +		(FIXADDR_TOP - FIXADDR_START) >> 10, + +#ifdef CONFIG_HIGHMEM +		PKMAP_BASE, PKMAP_BASE+LAST_PKMAP*PAGE_SIZE, +		(LAST_PKMAP*PAGE_SIZE) >> 10, +#endif + +		(unsigned long)VMALLOC_START, VMALLOC_END, +		(VMALLOC_END - VMALLOC_START) >> 20, + +		(unsigned long)memory_start, (unsigned long)high_memory, +		((unsigned long)high_memory - (unsigned long)memory_start) >> 20, + +#ifdef CONFIG_UNCACHED_MAPPING +		uncached_start, uncached_end, uncached_size >> 20, +#endif + +		(unsigned long)&__init_begin, (unsigned long)&__init_end, +		((unsigned long)&__init_end - +		 (unsigned long)&__init_begin) >> 10, + +		(unsigned long)&_etext, (unsigned long)&_edata, +		((unsigned long)&_edata - (unsigned long)&_etext) >> 10, + +		(unsigned long)&_text, (unsigned long)&_etext, +		((unsigned long)&_etext - (unsigned long)&_text) >> 10); + +	mem_init_done = 1;  }  void free_initmem(void) @@ -277,35 +499,6 @@ void free_initrd_mem(unsigned long start, unsigned long end)  }  #endif -#if THREAD_SHIFT < PAGE_SHIFT -static struct kmem_cache *thread_info_cache; - -struct thread_info *alloc_thread_info(struct task_struct *tsk) -{ -	struct thread_info *ti; - -	ti = kmem_cache_alloc(thread_info_cache, GFP_KERNEL); -	if (unlikely(ti == NULL)) -		return NULL; -#ifdef CONFIG_DEBUG_STACK_USAGE -	memset(ti, 0, THREAD_SIZE); -#endif -	return ti; -} - -void free_thread_info(struct thread_info *ti) -{ -	kmem_cache_free(thread_info_cache, ti); -} - -void thread_info_cache_init(void) -{ -	thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE, -					      THREAD_SIZE, 0, NULL); -	BUG_ON(thread_info_cache == NULL); -} -#endif /* THREAD_SHIFT < PAGE_SHIFT */ -  #ifdef CONFIG_MEMORY_HOTPLUG  int arch_add_memory(int nid, u64 start, u64 size)  { @@ -336,10 +529,3 @@ EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);  #endif  #endif /* CONFIG_MEMORY_HOTPLUG */ - -#ifdef CONFIG_PMB -int __in_29bit_mode(void) -{ -	return !(ctrl_inl(PMB_PASCR) & PASCR_SE); -} -#endif /* CONFIG_PMB */ diff --git a/arch/sh/mm/ioremap.c b/arch/sh/mm/ioremap.c new file mode 100644 index 00000000000..0c99ec2e7ed --- /dev/null +++ b/arch/sh/mm/ioremap.c @@ -0,0 +1,137 @@ +/* + * arch/sh/mm/ioremap.c + * + * (C) Copyright 1995 1996 Linus Torvalds + * (C) Copyright 2005 - 2010  Paul Mundt + * + * Re-map IO memory to kernel address space so that we can access it. + * This is needed for high PCI addresses that aren't mapped in the + * 640k-1MB IO memory area on PC's + * + * This file is subject to the terms and conditions of the GNU General + * Public License. See the file "COPYING" in the main directory of this + * archive for more details. + */ +#include <linux/vmalloc.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/mm.h> +#include <linux/pci.h> +#include <linux/io.h> +#include <asm/page.h> +#include <asm/pgalloc.h> +#include <asm/addrspace.h> +#include <asm/cacheflush.h> +#include <asm/tlbflush.h> +#include <asm/mmu.h> + +/* + * Remap an arbitrary physical address space into the kernel virtual + * address space. Needed when the kernel wants to access high addresses + * directly. + * + * NOTE! We need to allow non-page-aligned mappings too: we will obviously + * have to convert them into an offset in a page-aligned mapping, but the + * caller shouldn't need to know that small detail. + */ +void __iomem * __init_refok +__ioremap_caller(phys_addr_t phys_addr, unsigned long size, +		 pgprot_t pgprot, void *caller) +{ +	struct vm_struct *area; +	unsigned long offset, last_addr, addr, orig_addr; +	void __iomem *mapped; + +	/* Don't allow wraparound or zero size */ +	last_addr = phys_addr + size - 1; +	if (!size || last_addr < phys_addr) +		return NULL; + +	/* +	 * If we can't yet use the regular approach, go the fixmap route. +	 */ +	if (!mem_init_done) +		return ioremap_fixed(phys_addr, size, pgprot); + +	/* +	 * First try to remap through the PMB. +	 * PMB entries are all pre-faulted. +	 */ +	mapped = pmb_remap_caller(phys_addr, size, pgprot, caller); +	if (mapped && !IS_ERR(mapped)) +		return mapped; + +	/* +	 * Mappings have to be page-aligned +	 */ +	offset = phys_addr & ~PAGE_MASK; +	phys_addr &= PAGE_MASK; +	size = PAGE_ALIGN(last_addr+1) - phys_addr; + +	/* +	 * Ok, go for it.. +	 */ +	area = get_vm_area_caller(size, VM_IOREMAP, caller); +	if (!area) +		return NULL; +	area->phys_addr = phys_addr; +	orig_addr = addr = (unsigned long)area->addr; + +	if (ioremap_page_range(addr, addr + size, phys_addr, pgprot)) { +		vunmap((void *)orig_addr); +		return NULL; +	} + +	return (void __iomem *)(offset + (char *)orig_addr); +} +EXPORT_SYMBOL(__ioremap_caller); + +/* + * Simple checks for non-translatable mappings. + */ +static inline int iomapping_nontranslatable(unsigned long offset) +{ +#ifdef CONFIG_29BIT +	/* +	 * In 29-bit mode this includes the fixed P1/P2 areas, as well as +	 * parts of P3. +	 */ +	if (PXSEG(offset) < P3SEG || offset >= P3_ADDR_MAX) +		return 1; +#endif + +	return 0; +} + +void __iounmap(void __iomem *addr) +{ +	unsigned long vaddr = (unsigned long __force)addr; +	struct vm_struct *p; + +	/* +	 * Nothing to do if there is no translatable mapping. +	 */ +	if (iomapping_nontranslatable(vaddr)) +		return; + +	/* +	 * There's no VMA if it's from an early fixed mapping. +	 */ +	if (iounmap_fixed(addr) == 0) +		return; + +	/* +	 * If the PMB handled it, there's nothing else to do. +	 */ +	if (pmb_unmap(addr) == 0) +		return; + +	p = remove_vm_area((void *)(vaddr & PAGE_MASK)); +	if (!p) { +		printk(KERN_ERR "%s: bad address %p\n", __func__, addr); +		return; +	} + +	kfree(p); +} +EXPORT_SYMBOL(__iounmap); diff --git a/arch/sh/mm/ioremap_32.c b/arch/sh/mm/ioremap_32.c deleted file mode 100644 index 2141befb4f9..00000000000 --- a/arch/sh/mm/ioremap_32.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * arch/sh/mm/ioremap.c - * - * Re-map IO memory to kernel address space so that we can access it. - * This is needed for high PCI addresses that aren't mapped in the - * 640k-1MB IO memory area on PC's - * - * (C) Copyright 1995 1996 Linus Torvalds - * (C) Copyright 2005, 2006 Paul Mundt - * - * This file is subject to the terms and conditions of the GNU General - * Public License. See the file "COPYING" in the main directory of this - * archive for more details. - */ -#include <linux/vmalloc.h> -#include <linux/module.h> -#include <linux/mm.h> -#include <linux/pci.h> -#include <linux/io.h> -#include <asm/page.h> -#include <asm/pgalloc.h> -#include <asm/addrspace.h> -#include <asm/cacheflush.h> -#include <asm/tlbflush.h> -#include <asm/mmu.h> - -/* - * Remap an arbitrary physical address space into the kernel virtual - * address space. Needed when the kernel wants to access high addresses - * directly. - * - * NOTE! We need to allow non-page-aligned mappings too: we will obviously - * have to convert them into an offset in a page-aligned mapping, but the - * caller shouldn't need to know that small detail. - */ -void __iomem *__ioremap_caller(unsigned long phys_addr, unsigned long size, -			       unsigned long flags, void *caller) -{ -	struct vm_struct *area; -	unsigned long offset, last_addr, addr, orig_addr; -	pgprot_t pgprot; - -	/* Don't allow wraparound or zero size */ -	last_addr = phys_addr + size - 1; -	if (!size || last_addr < phys_addr) -		return NULL; - -	/* -	 * If we're in the fixed PCI memory range, mapping through page -	 * tables is not only pointless, but also fundamentally broken. -	 * Just return the physical address instead. -	 * -	 * For boards that map a small PCI memory aperture somewhere in -	 * P1/P2 space, ioremap() will already do the right thing, -	 * and we'll never get this far. -	 */ -	if (is_pci_memory_fixed_range(phys_addr, size)) -		return (void __iomem *)phys_addr; - -	/* -	 * Mappings have to be page-aligned -	 */ -	offset = phys_addr & ~PAGE_MASK; -	phys_addr &= PAGE_MASK; -	size = PAGE_ALIGN(last_addr+1) - phys_addr; - -	/* -	 * Ok, go for it.. -	 */ -	area = get_vm_area_caller(size, VM_IOREMAP, caller); -	if (!area) -		return NULL; -	area->phys_addr = phys_addr; -	orig_addr = addr = (unsigned long)area->addr; - -#ifdef CONFIG_PMB -	/* -	 * First try to remap through the PMB once a valid VMA has been -	 * established. Smaller allocations (or the rest of the size -	 * remaining after a PMB mapping due to the size not being -	 * perfectly aligned on a PMB size boundary) are then mapped -	 * through the UTLB using conventional page tables. -	 * -	 * PMB entries are all pre-faulted. -	 */ -	if (unlikely(phys_addr >= P1SEG)) { -		unsigned long mapped = pmb_remap(addr, phys_addr, size, flags); - -		if (likely(mapped)) { -			addr		+= mapped; -			phys_addr	+= mapped; -			size		-= mapped; -		} -	} -#endif - -	pgprot = __pgprot(pgprot_val(PAGE_KERNEL_NOCACHE) | flags); -	if (likely(size)) -		if (ioremap_page_range(addr, addr + size, phys_addr, pgprot)) { -			vunmap((void *)orig_addr); -			return NULL; -		} - -	return (void __iomem *)(offset + (char *)orig_addr); -} -EXPORT_SYMBOL(__ioremap_caller); - -void __iounmap(void __iomem *addr) -{ -	unsigned long vaddr = (unsigned long __force)addr; -	unsigned long seg = PXSEG(vaddr); -	struct vm_struct *p; - -	if (seg < P3SEG || vaddr >= P3_ADDR_MAX) -		return; -	if (is_pci_memory_fixed_range(vaddr, 0)) -		return; - -#ifdef CONFIG_PMB -	/* -	 * Purge any PMB entries that may have been established for this -	 * mapping, then proceed with conventional VMA teardown. -	 * -	 * XXX: Note that due to the way that remove_vm_area() does -	 * matching of the resultant VMA, we aren't able to fast-forward -	 * the address past the PMB space until the end of the VMA where -	 * the page tables reside. As such, unmap_vm_area() will be -	 * forced to linearly scan over the area until it finds the page -	 * tables where PTEs that need to be unmapped actually reside, -	 * which is far from optimal. Perhaps we need to use a separate -	 * VMA for the PMB mappings? -	 *					-- PFM. -	 */ -	pmb_unmap(vaddr); -#endif - -	p = remove_vm_area((void *)(vaddr & PAGE_MASK)); -	if (!p) { -		printk(KERN_ERR "%s: bad address %p\n", __func__, addr); -		return; -	} - -	kfree(p); -} -EXPORT_SYMBOL(__iounmap); diff --git a/arch/sh/mm/ioremap_64.c b/arch/sh/mm/ioremap_64.c deleted file mode 100644 index ef434657d42..00000000000 --- a/arch/sh/mm/ioremap_64.c +++ /dev/null @@ -1,326 +0,0 @@ -/* - * arch/sh/mm/ioremap_64.c - * - * Copyright (C) 2000, 2001  Paolo Alberelli - * Copyright (C) 2003 - 2007  Paul Mundt - * - * Mostly derived from arch/sh/mm/ioremap.c which, in turn is mostly - * derived from arch/i386/mm/ioremap.c . - * - *   (C) Copyright 1995 1996 Linus Torvalds - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#include <linux/vmalloc.h> -#include <linux/ioport.h> -#include <linux/module.h> -#include <linux/mm.h> -#include <linux/io.h> -#include <linux/bootmem.h> -#include <linux/proc_fs.h> -#include <linux/slab.h> -#include <asm/page.h> -#include <asm/pgalloc.h> -#include <asm/addrspace.h> -#include <asm/cacheflush.h> -#include <asm/tlbflush.h> -#include <asm/mmu.h> - -static struct resource shmedia_iomap = { -	.name	= "shmedia_iomap", -	.start	= IOBASE_VADDR + PAGE_SIZE, -	.end	= IOBASE_END - 1, -}; - -static void shmedia_mapioaddr(unsigned long pa, unsigned long va, -			      unsigned long flags); -static void shmedia_unmapioaddr(unsigned long vaddr); -static void __iomem *shmedia_ioremap(struct resource *res, u32 pa, -				     int sz, unsigned long flags); - -/* - * We have the same problem as the SPARC, so lets have the same comment: - * Our mini-allocator... - * Boy this is gross! We need it because we must map I/O for - * timers and interrupt controller before the kmalloc is available. - */ - -#define XNMLN  15 -#define XNRES  10 - -struct xresource { -	struct resource xres;   /* Must be first */ -	int xflag;              /* 1 == used */ -	char xname[XNMLN+1]; -}; - -static struct xresource xresv[XNRES]; - -static struct xresource *xres_alloc(void) -{ -	struct xresource *xrp; -	int n; - -	xrp = xresv; -	for (n = 0; n < XNRES; n++) { -		if (xrp->xflag == 0) { -			xrp->xflag = 1; -			return xrp; -		} -		xrp++; -	} -	return NULL; -} - -static void xres_free(struct xresource *xrp) -{ -	xrp->xflag = 0; -} - -static struct resource *shmedia_find_resource(struct resource *root, -					      unsigned long vaddr) -{ -	struct resource *res; - -	for (res = root->child; res; res = res->sibling) -		if (res->start <= vaddr && res->end >= vaddr) -			return res; - -	return NULL; -} - -static void __iomem *shmedia_alloc_io(unsigned long phys, unsigned long size, -				      const char *name, unsigned long flags) -{ -	struct xresource *xres; -	struct resource *res; -	char *tack; -	int tlen; - -	if (name == NULL) -		name = "???"; - -	xres = xres_alloc(); -	if (xres != 0) { -		tack = xres->xname; -		res = &xres->xres; -	} else { -		printk_once(KERN_NOTICE "%s: done with statics, " -			       "switching to kmalloc\n", __func__); -		tlen = strlen(name); -		tack = kmalloc(sizeof(struct resource) + tlen + 1, GFP_KERNEL); -		if (!tack) -			return NULL; -		memset(tack, 0, sizeof(struct resource)); -		res = (struct resource *) tack; -		tack += sizeof(struct resource); -	} - -	strncpy(tack, name, XNMLN); -	tack[XNMLN] = 0; -	res->name = tack; - -	return shmedia_ioremap(res, phys, size, flags); -} - -static void __iomem *shmedia_ioremap(struct resource *res, u32 pa, int sz, -				     unsigned long flags) -{ -	unsigned long offset = ((unsigned long) pa) & (~PAGE_MASK); -	unsigned long round_sz = (offset + sz + PAGE_SIZE-1) & PAGE_MASK; -	unsigned long va; -	unsigned int psz; - -	if (allocate_resource(&shmedia_iomap, res, round_sz, -			      shmedia_iomap.start, shmedia_iomap.end, -			      PAGE_SIZE, NULL, NULL) != 0) { -		panic("alloc_io_res(%s): cannot occupy\n", -		      (res->name != NULL) ? res->name : "???"); -	} - -	va = res->start; -	pa &= PAGE_MASK; - -	psz = (res->end - res->start + (PAGE_SIZE - 1)) / PAGE_SIZE; - -	for (psz = res->end - res->start + 1; psz != 0; psz -= PAGE_SIZE) { -		shmedia_mapioaddr(pa, va, flags); -		va += PAGE_SIZE; -		pa += PAGE_SIZE; -	} - -	return (void __iomem *)(unsigned long)(res->start + offset); -} - -static void shmedia_free_io(struct resource *res) -{ -	unsigned long len = res->end - res->start + 1; - -	BUG_ON((len & (PAGE_SIZE - 1)) != 0); - -	while (len) { -		len -= PAGE_SIZE; -		shmedia_unmapioaddr(res->start + len); -	} - -	release_resource(res); -} - -static __init_refok void *sh64_get_page(void) -{ -	void *page; - -	if (slab_is_available()) -		page = (void *)get_zeroed_page(GFP_KERNEL); -	else -		page = alloc_bootmem_pages(PAGE_SIZE); - -	if (!page || ((unsigned long)page & ~PAGE_MASK)) -		panic("sh64_get_page: Out of memory already?\n"); - -	return page; -} - -static void shmedia_mapioaddr(unsigned long pa, unsigned long va, -			      unsigned long flags) -{ -	pgd_t *pgdp; -	pud_t *pudp; -	pmd_t *pmdp; -	pte_t *ptep, pte; -	pgprot_t prot; - -	pr_debug("shmedia_mapiopage pa %08lx va %08lx\n",  pa, va); - -	if (!flags) -		flags = 1; /* 1 = CB0-1 device */ - -	pgdp = pgd_offset_k(va); -	if (pgd_none(*pgdp) || !pgd_present(*pgdp)) { -		pudp = (pud_t *)sh64_get_page(); -		set_pgd(pgdp, __pgd((unsigned long)pudp | _KERNPG_TABLE)); -	} - -	pudp = pud_offset(pgdp, va); -	if (pud_none(*pudp) || !pud_present(*pudp)) { -		pmdp = (pmd_t *)sh64_get_page(); -		set_pud(pudp, __pud((unsigned long)pmdp | _KERNPG_TABLE)); -	} - -	pmdp = pmd_offset(pudp, va); -	if (pmd_none(*pmdp) || !pmd_present(*pmdp)) { -		ptep = (pte_t *)sh64_get_page(); -		set_pmd(pmdp, __pmd((unsigned long)ptep + _PAGE_TABLE)); -	} - -	prot = __pgprot(_PAGE_PRESENT | _PAGE_READ     | _PAGE_WRITE  | -			_PAGE_DIRTY   | _PAGE_ACCESSED | _PAGE_SHARED | flags); - -	pte = pfn_pte(pa >> PAGE_SHIFT, prot); -	ptep = pte_offset_kernel(pmdp, va); - -	if (!pte_none(*ptep) && -	    pte_val(*ptep) != pte_val(pte)) -		pte_ERROR(*ptep); - -	set_pte(ptep, pte); - -	flush_tlb_kernel_range(va, PAGE_SIZE); -} - -static void shmedia_unmapioaddr(unsigned long vaddr) -{ -	pgd_t *pgdp; -	pud_t *pudp; -	pmd_t *pmdp; -	pte_t *ptep; - -	pgdp = pgd_offset_k(vaddr); -	if (pgd_none(*pgdp) || pgd_bad(*pgdp)) -		return; - -	pudp = pud_offset(pgdp, vaddr); -	if (pud_none(*pudp) || pud_bad(*pudp)) -		return; - -	pmdp = pmd_offset(pudp, vaddr); -	if (pmd_none(*pmdp) || pmd_bad(*pmdp)) -		return; - -	ptep = pte_offset_kernel(pmdp, vaddr); - -	if (pte_none(*ptep) || !pte_present(*ptep)) -		return; - -	clear_page((void *)ptep); -	pte_clear(&init_mm, vaddr, ptep); -} - -void __iomem *__ioremap_caller(unsigned long offset, unsigned long size, -			       unsigned long flags, void *caller) -{ -	char name[14]; - -	sprintf(name, "phys_%08x", (u32)offset); -	return shmedia_alloc_io(offset, size, name, flags); -} -EXPORT_SYMBOL(__ioremap_caller); - -void __iounmap(void __iomem *virtual) -{ -	unsigned long vaddr = (unsigned long)virtual & PAGE_MASK; -	struct resource *res; -	unsigned int psz; - -	res = shmedia_find_resource(&shmedia_iomap, vaddr); -	if (!res) { -		printk(KERN_ERR "%s: Failed to free 0x%08lx\n", -		       __func__, vaddr); -		return; -	} - -	psz = (res->end - res->start + (PAGE_SIZE - 1)) / PAGE_SIZE; - -	shmedia_free_io(res); - -	if ((char *)res >= (char *)xresv && -	    (char *)res <  (char *)&xresv[XNRES]) { -		xres_free((struct xresource *)res); -	} else { -		kfree(res); -	} -} -EXPORT_SYMBOL(__iounmap); - -static int -ioremap_proc_info(char *buf, char **start, off_t fpos, int length, int *eof, -		  void *data) -{ -	char *p = buf, *e = buf + length; -	struct resource *r; -	const char *nm; - -	for (r = ((struct resource *)data)->child; r != NULL; r = r->sibling) { -		if (p + 32 >= e)        /* Better than nothing */ -			break; -		nm = r->name; -		if (nm == NULL) -			nm = "???"; - -		p += sprintf(p, "%08lx-%08lx: %s\n", -			     (unsigned long)r->start, -			     (unsigned long)r->end, nm); -	} - -	return p-buf; -} - -static int __init register_proc_onchip(void) -{ -	create_proc_read_entry("io_map", 0, 0, ioremap_proc_info, -			       &shmedia_iomap); -	return 0; -} -late_initcall(register_proc_onchip); diff --git a/arch/sh/mm/ioremap_fixed.c b/arch/sh/mm/ioremap_fixed.c new file mode 100644 index 00000000000..efbe84af998 --- /dev/null +++ b/arch/sh/mm/ioremap_fixed.c @@ -0,0 +1,134 @@ +/* + * Re-map IO memory to kernel address space so that we can access it. + * + * These functions should only be used when it is necessary to map a + * physical address space into the kernel address space before ioremap() + * can be used, e.g. early in boot before paging_init(). + * + * Copyright (C) 2009  Matt Fleming + */ + +#include <linux/vmalloc.h> +#include <linux/ioport.h> +#include <linux/module.h> +#include <linux/mm.h> +#include <linux/io.h> +#include <linux/bootmem.h> +#include <linux/proc_fs.h> +#include <asm/fixmap.h> +#include <asm/page.h> +#include <asm/pgalloc.h> +#include <asm/addrspace.h> +#include <asm/cacheflush.h> +#include <asm/tlbflush.h> +#include <asm/mmu.h> +#include <asm/mmu_context.h> + +struct ioremap_map { +	void __iomem *addr; +	unsigned long size; +	unsigned long fixmap_addr; +}; + +static struct ioremap_map ioremap_maps[FIX_N_IOREMAPS]; + +void __init ioremap_fixed_init(void) +{ +	struct ioremap_map *map; +	int i; + +	for (i = 0; i < FIX_N_IOREMAPS; i++) { +		map = &ioremap_maps[i]; +		map->fixmap_addr = __fix_to_virt(FIX_IOREMAP_BEGIN + i); +	} +} + +void __init __iomem * +ioremap_fixed(phys_addr_t phys_addr, unsigned long size, pgprot_t prot) +{ +	enum fixed_addresses idx0, idx; +	struct ioremap_map *map; +	unsigned int nrpages; +	unsigned long offset; +	int i, slot; + +	/* +	 * Mappings have to be page-aligned +	 */ +	offset = phys_addr & ~PAGE_MASK; +	phys_addr &= PAGE_MASK; +	size = PAGE_ALIGN(phys_addr + size) - phys_addr; + +	slot = -1; +	for (i = 0; i < FIX_N_IOREMAPS; i++) { +		map = &ioremap_maps[i]; +		if (!map->addr) { +			map->size = size; +			slot = i; +			break; +		} +	} + +	if (slot < 0) +		return NULL; + +	/* +	 * Mappings have to fit in the FIX_IOREMAP area. +	 */ +	nrpages = size >> PAGE_SHIFT; +	if (nrpages > FIX_N_IOREMAPS) +		return NULL; + +	/* +	 * Ok, go for it.. +	 */ +	idx0 = FIX_IOREMAP_BEGIN + slot; +	idx = idx0; +	while (nrpages > 0) { +		pgprot_val(prot) |= _PAGE_WIRED; +		__set_fixmap(idx, phys_addr, prot); +		phys_addr += PAGE_SIZE; +		idx++; +		--nrpages; +	} + +	map->addr = (void __iomem *)(offset + map->fixmap_addr); +	return map->addr; +} + +int iounmap_fixed(void __iomem *addr) +{ +	enum fixed_addresses idx; +	struct ioremap_map *map; +	unsigned int nrpages; +	int i, slot; + +	slot = -1; +	for (i = 0; i < FIX_N_IOREMAPS; i++) { +		map = &ioremap_maps[i]; +		if (map->addr == addr) { +			slot = i; +			break; +		} +	} + +	/* +	 * If we don't match, it's not for us. +	 */ +	if (slot < 0) +		return -EINVAL; + +	nrpages = map->size >> PAGE_SHIFT; + +	idx = FIX_IOREMAP_BEGIN + slot + nrpages - 1; +	while (nrpages > 0) { +		__clear_fixmap(idx, __pgprot(_PAGE_WIRED)); +		--idx; +		--nrpages; +	} + +	map->size = 0; +	map->addr = NULL; + +	return 0; +} diff --git a/arch/sh/mm/nommu.c b/arch/sh/mm/nommu.c index ac16c05917e..7694f50c903 100644 --- a/arch/sh/mm/nommu.c +++ b/arch/sh/mm/nommu.c @@ -94,3 +94,7 @@ void __init page_table_range_init(unsigned long start, unsigned long end,  void __set_fixmap(enum fixed_addresses idx, unsigned long phys, pgprot_t prot)  {  } + +void pgtable_cache_init(void) +{ +} diff --git a/arch/sh/mm/numa.c b/arch/sh/mm/numa.c index 422e9272187..a2e645f64a3 100644 --- a/arch/sh/mm/numa.c +++ b/arch/sh/mm/numa.c @@ -24,44 +24,6 @@ EXPORT_SYMBOL_GPL(node_data);   * latency. Each node's pgdat is node-local at the beginning of the node,   * immediately followed by the node mem map.   */ -void __init setup_memory(void) -{ -	unsigned long free_pfn = PFN_UP(__pa(_end)); -	u64 base = min_low_pfn << PAGE_SHIFT; -	u64 size = (max_low_pfn << PAGE_SHIFT) - base; - -	lmb_add(base, size); - -	/* Reserve the LMB regions used by the kernel, initrd, etc.. */ -	lmb_reserve(__MEMORY_START + CONFIG_ZERO_PAGE_OFFSET, -		    (PFN_PHYS(free_pfn) + PAGE_SIZE - 1) - -		    (__MEMORY_START + CONFIG_ZERO_PAGE_OFFSET)); - -	/* -	 * Reserve physical pages below CONFIG_ZERO_PAGE_OFFSET. -	 */ -	if (CONFIG_ZERO_PAGE_OFFSET != 0) -		lmb_reserve(__MEMORY_START, CONFIG_ZERO_PAGE_OFFSET); - -	lmb_analyze(); -	lmb_dump_all(); - -	/* -	 * Node 0 sets up its pgdat at the first available pfn, -	 * and bumps it up before setting up the bootmem allocator. -	 */ -	NODE_DATA(0) = pfn_to_kaddr(free_pfn); -	memset(NODE_DATA(0), 0, sizeof(struct pglist_data)); -	free_pfn += PFN_UP(sizeof(struct pglist_data)); -	NODE_DATA(0)->bdata = &bootmem_node_data[0]; - -	/* Set up node 0 */ -	setup_bootmem_allocator(free_pfn); - -	/* Give the platforms a chance to hook up their nodes */ -	plat_mem_setup(); -} -  void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end)  {  	unsigned long bootmap_pages; @@ -74,6 +36,9 @@ void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end)  	start_pfn = start >> PAGE_SHIFT;  	end_pfn = end >> PAGE_SHIFT; +	pmb_bolt_mapping((unsigned long)__va(start), start, end - start, +			 PAGE_KERNEL); +  	lmb_add(start, end - start);  	__add_active_range(nid, start_pfn, end_pfn); diff --git a/arch/sh/mm/pgtable.c b/arch/sh/mm/pgtable.c new file mode 100644 index 00000000000..26e03a1f7ca --- /dev/null +++ b/arch/sh/mm/pgtable.c @@ -0,0 +1,57 @@ +#include <linux/mm.h> +#include <linux/slab.h> + +#define PGALLOC_GFP GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO + +static struct kmem_cache *pgd_cachep; +#if PAGETABLE_LEVELS > 2 +static struct kmem_cache *pmd_cachep; +#endif + +void pgd_ctor(void *x) +{ +	pgd_t *pgd = x; + +	memcpy(pgd + USER_PTRS_PER_PGD, +	       swapper_pg_dir + USER_PTRS_PER_PGD, +	       (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); +} + +void pgtable_cache_init(void) +{ +	pgd_cachep = kmem_cache_create("pgd_cache", +				       PTRS_PER_PGD * (1<<PTE_MAGNITUDE), +				       PAGE_SIZE, SLAB_PANIC, pgd_ctor); +#if PAGETABLE_LEVELS > 2 +	pmd_cachep = kmem_cache_create("pmd_cache", +				       PTRS_PER_PMD * (1<<PTE_MAGNITUDE), +				       PAGE_SIZE, SLAB_PANIC, NULL); +#endif +} + +pgd_t *pgd_alloc(struct mm_struct *mm) +{ +	return kmem_cache_alloc(pgd_cachep, PGALLOC_GFP); +} + +void pgd_free(struct mm_struct *mm, pgd_t *pgd) +{ +	kmem_cache_free(pgd_cachep, pgd); +} + +#if PAGETABLE_LEVELS > 2 +void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) +{ +	set_pud(pud, __pud((unsigned long)pmd)); +} + +pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) +{ +	return kmem_cache_alloc(pmd_cachep, PGALLOC_GFP); +} + +void pmd_free(struct mm_struct *mm, pmd_t *pmd) +{ +	kmem_cache_free(pmd_cachep, pmd); +} +#endif /* PAGETABLE_LEVELS > 2 */ diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c index 280f6a16603..18623ba751b 100644 --- a/arch/sh/mm/pmb.c +++ b/arch/sh/mm/pmb.c @@ -3,11 +3,8 @@   *   * Privileged Space Mapping Buffer (PMB) Support.   * - * Copyright (C) 2005, 2006, 2007 Paul Mundt - * - * P1/P2 Section mapping definitions from map32.h, which was: - * - *	Copyright 2003 (c) Lineo Solutions,Inc. + * Copyright (C) 2005 - 2010  Paul Mundt + * Copyright (C) 2010  Matt Fleming   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -18,53 +15,221 @@  #include <linux/sysdev.h>  #include <linux/cpu.h>  #include <linux/module.h> -#include <linux/slab.h>  #include <linux/bitops.h>  #include <linux/debugfs.h>  #include <linux/fs.h>  #include <linux/seq_file.h>  #include <linux/err.h> +#include <linux/io.h> +#include <linux/spinlock.h> +#include <linux/vmalloc.h> +#include <asm/cacheflush.h> +#include <asm/sizes.h>  #include <asm/system.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h> +#include <asm/page.h>  #include <asm/mmu.h> -#include <asm/io.h>  #include <asm/mmu_context.h> -#define NR_PMB_ENTRIES	16 +struct pmb_entry; + +struct pmb_entry { +	unsigned long vpn; +	unsigned long ppn; +	unsigned long flags; +	unsigned long size; + +	spinlock_t lock; -static void __pmb_unmap(struct pmb_entry *); +	/* +	 * 0 .. NR_PMB_ENTRIES for specific entry selection, or +	 * PMB_NO_ENTRY to search for a free one +	 */ +	int entry; +	/* Adjacent entry link for contiguous multi-entry mappings */ +	struct pmb_entry *link; +}; + +static struct { +	unsigned long size; +	int flag; +} pmb_sizes[] = { +	{ .size	= SZ_512M, .flag = PMB_SZ_512M, }, +	{ .size = SZ_128M, .flag = PMB_SZ_128M, }, +	{ .size = SZ_64M,  .flag = PMB_SZ_64M,  }, +	{ .size = SZ_16M,  .flag = PMB_SZ_16M,  }, +}; + +static void pmb_unmap_entry(struct pmb_entry *, int depth); + +static DEFINE_RWLOCK(pmb_rwlock);  static struct pmb_entry pmb_entry_list[NR_PMB_ENTRIES]; -static unsigned long pmb_map; +static DECLARE_BITMAP(pmb_map, NR_PMB_ENTRIES); + +static unsigned int pmb_iomapping_enabled; -static inline unsigned long mk_pmb_entry(unsigned int entry) +static __always_inline unsigned long mk_pmb_entry(unsigned int entry)  {  	return (entry & PMB_E_MASK) << PMB_E_SHIFT;  } -static inline unsigned long mk_pmb_addr(unsigned int entry) +static __always_inline unsigned long mk_pmb_addr(unsigned int entry)  {  	return mk_pmb_entry(entry) | PMB_ADDR;  } -static inline unsigned long mk_pmb_data(unsigned int entry) +static __always_inline unsigned long mk_pmb_data(unsigned int entry)  {  	return mk_pmb_entry(entry) | PMB_DATA;  } -static int pmb_alloc_entry(void) +static __always_inline unsigned int pmb_ppn_in_range(unsigned long ppn) +{ +	return ppn >= __pa(memory_start) && ppn < __pa(memory_end); +} + +/* + * Ensure that the PMB entries match our cache configuration. + * + * When we are in 32-bit address extended mode, CCR.CB becomes + * invalid, so care must be taken to manually adjust cacheable + * translations. + */ +static __always_inline unsigned long pmb_cache_flags(void) +{ +	unsigned long flags = 0; + +#if defined(CONFIG_CACHE_OFF) +	flags |= PMB_WT | PMB_UB; +#elif defined(CONFIG_CACHE_WRITETHROUGH) +	flags |= PMB_C | PMB_WT | PMB_UB; +#elif defined(CONFIG_CACHE_WRITEBACK) +	flags |= PMB_C; +#endif + +	return flags; +} + +/* + * Convert typical pgprot value to the PMB equivalent + */ +static inline unsigned long pgprot_to_pmb_flags(pgprot_t prot) +{ +	unsigned long pmb_flags = 0; +	u64 flags = pgprot_val(prot); + +	if (flags & _PAGE_CACHABLE) +		pmb_flags |= PMB_C; +	if (flags & _PAGE_WT) +		pmb_flags |= PMB_WT | PMB_UB; + +	return pmb_flags; +} + +static inline bool pmb_can_merge(struct pmb_entry *a, struct pmb_entry *b) +{ +	return (b->vpn == (a->vpn + a->size)) && +	       (b->ppn == (a->ppn + a->size)) && +	       (b->flags == a->flags); +} + +static bool pmb_mapping_exists(unsigned long vaddr, phys_addr_t phys, +			       unsigned long size) +{ +	int i; + +	read_lock(&pmb_rwlock); + +	for (i = 0; i < ARRAY_SIZE(pmb_entry_list); i++) { +		struct pmb_entry *pmbe, *iter; +		unsigned long span; + +		if (!test_bit(i, pmb_map)) +			continue; + +		pmbe = &pmb_entry_list[i]; + +		/* +		 * See if VPN and PPN are bounded by an existing mapping. +		 */ +		if ((vaddr < pmbe->vpn) || (vaddr >= (pmbe->vpn + pmbe->size))) +			continue; +		if ((phys < pmbe->ppn) || (phys >= (pmbe->ppn + pmbe->size))) +			continue; + +		/* +		 * Now see if we're in range of a simple mapping. +		 */ +		if (size <= pmbe->size) { +			read_unlock(&pmb_rwlock); +			return true; +		} + +		span = pmbe->size; + +		/* +		 * Finally for sizes that involve compound mappings, walk +		 * the chain. +		 */ +		for (iter = pmbe->link; iter; iter = iter->link) +			span += iter->size; + +		/* +		 * Nothing else to do if the range requirements are met. +		 */ +		if (size <= span) { +			read_unlock(&pmb_rwlock); +			return true; +		} +	} + +	read_unlock(&pmb_rwlock); +	return false; +} + +static bool pmb_size_valid(unsigned long size) +{ +	int i; + +	for (i = 0; i < ARRAY_SIZE(pmb_sizes); i++) +		if (pmb_sizes[i].size == size) +			return true; + +	return false; +} + +static inline bool pmb_addr_valid(unsigned long addr, unsigned long size)  { -	unsigned int pos; +	return (addr >= P1SEG && (addr + size - 1) < P3SEG); +} -repeat: -	pos = find_first_zero_bit(&pmb_map, NR_PMB_ENTRIES); +static inline bool pmb_prot_valid(pgprot_t prot) +{ +	return (pgprot_val(prot) & _PAGE_USER) == 0; +} + +static int pmb_size_to_flags(unsigned long size) +{ +	int i; -	if (unlikely(pos > NR_PMB_ENTRIES)) -		return -ENOSPC; +	for (i = 0; i < ARRAY_SIZE(pmb_sizes); i++) +		if (pmb_sizes[i].size == size) +			return pmb_sizes[i].flag; -	if (test_and_set_bit(pos, &pmb_map)) -		goto repeat; +	return 0; +} + +static int pmb_alloc_entry(void) +{ +	int pos; + +	pos = find_first_zero_bit(pmb_map, NR_PMB_ENTRIES); +	if (pos >= 0 && pos < NR_PMB_ENTRIES) +		__set_bit(pos, pmb_map); +	else +		pos = -ENOSPC;  	return pos;  } @@ -73,21 +238,34 @@ static struct pmb_entry *pmb_alloc(unsigned long vpn, unsigned long ppn,  				   unsigned long flags, int entry)  {  	struct pmb_entry *pmbe; +	unsigned long irqflags; +	void *ret = NULL;  	int pos; +	write_lock_irqsave(&pmb_rwlock, irqflags); +  	if (entry == PMB_NO_ENTRY) {  		pos = pmb_alloc_entry(); -		if (pos < 0) -			return ERR_PTR(pos); +		if (unlikely(pos < 0)) { +			ret = ERR_PTR(pos); +			goto out; +		}  	} else { -		if (test_bit(entry, &pmb_map)) -			return ERR_PTR(-ENOSPC); +		if (__test_and_set_bit(entry, pmb_map)) { +			ret = ERR_PTR(-ENOSPC); +			goto out; +		} +  		pos = entry;  	} +	write_unlock_irqrestore(&pmb_rwlock, irqflags); +  	pmbe = &pmb_entry_list[pos]; -	if (!pmbe) -		return ERR_PTR(-ENOMEM); + +	memset(pmbe, 0, sizeof(struct pmb_entry)); + +	spin_lock_init(&pmbe->lock);  	pmbe->vpn	= vpn;  	pmbe->ppn	= ppn; @@ -95,169 +273,221 @@ static struct pmb_entry *pmb_alloc(unsigned long vpn, unsigned long ppn,  	pmbe->entry	= pos;  	return pmbe; + +out: +	write_unlock_irqrestore(&pmb_rwlock, irqflags); +	return ret;  }  static void pmb_free(struct pmb_entry *pmbe)  { -	int pos = pmbe->entry; +	__clear_bit(pmbe->entry, pmb_map); -	pmbe->vpn	= 0; -	pmbe->ppn	= 0; -	pmbe->flags	= 0; -	pmbe->entry	= 0; - -	clear_bit(pos, &pmb_map); +	pmbe->entry	= PMB_NO_ENTRY; +	pmbe->link	= NULL;  }  /* - * Must be in P2 for __set_pmb_entry() + * Must be run uncached.   */ -static void __set_pmb_entry(unsigned long vpn, unsigned long ppn, -			    unsigned long flags, int pos) +static void __set_pmb_entry(struct pmb_entry *pmbe)  { -	ctrl_outl(vpn | PMB_V, mk_pmb_addr(pos)); - -#ifdef CONFIG_CACHE_WRITETHROUGH -	/* -	 * When we are in 32-bit address extended mode, CCR.CB becomes -	 * invalid, so care must be taken to manually adjust cacheable -	 * translations. -	 */ -	if (likely(flags & PMB_C)) -		flags |= PMB_WT; -#endif +	unsigned long addr, data; -	ctrl_outl(ppn | flags | PMB_V, mk_pmb_data(pos)); -} +	addr = mk_pmb_addr(pmbe->entry); +	data = mk_pmb_data(pmbe->entry); -static void __uses_jump_to_uncached set_pmb_entry(struct pmb_entry *pmbe) -{  	jump_to_uncached(); -	__set_pmb_entry(pmbe->vpn, pmbe->ppn, pmbe->flags, pmbe->entry); + +	/* Set V-bit */ +	__raw_writel(pmbe->vpn | PMB_V, addr); +	__raw_writel(pmbe->ppn | pmbe->flags | PMB_V, data); +  	back_to_cached();  } -static void __uses_jump_to_uncached clear_pmb_entry(struct pmb_entry *pmbe) +static void __clear_pmb_entry(struct pmb_entry *pmbe)  { -	unsigned int entry = pmbe->entry; -	unsigned long addr; +	unsigned long addr, data; +	unsigned long addr_val, data_val; -	if (unlikely(entry >= NR_PMB_ENTRIES)) -		return; +	addr = mk_pmb_addr(pmbe->entry); +	data = mk_pmb_data(pmbe->entry); -	jump_to_uncached(); +	addr_val = __raw_readl(addr); +	data_val = __raw_readl(data);  	/* Clear V-bit */ -	addr = mk_pmb_addr(entry); -	ctrl_outl(ctrl_inl(addr) & ~PMB_V, addr); - -	addr = mk_pmb_data(entry); -	ctrl_outl(ctrl_inl(addr) & ~PMB_V, addr); - -	back_to_cached(); +	writel_uncached(addr_val & ~PMB_V, addr); +	writel_uncached(data_val & ~PMB_V, data);  } +#ifdef CONFIG_PM +static void set_pmb_entry(struct pmb_entry *pmbe) +{ +	unsigned long flags; -static struct { -	unsigned long size; -	int flag; -} pmb_sizes[] = { -	{ .size	= 0x20000000, .flag = PMB_SZ_512M, }, -	{ .size = 0x08000000, .flag = PMB_SZ_128M, }, -	{ .size = 0x04000000, .flag = PMB_SZ_64M,  }, -	{ .size = 0x01000000, .flag = PMB_SZ_16M,  }, -}; +	spin_lock_irqsave(&pmbe->lock, flags); +	__set_pmb_entry(pmbe); +	spin_unlock_irqrestore(&pmbe->lock, flags); +} +#endif /* CONFIG_PM */ -long pmb_remap(unsigned long vaddr, unsigned long phys, -	       unsigned long size, unsigned long flags) +int pmb_bolt_mapping(unsigned long vaddr, phys_addr_t phys, +		     unsigned long size, pgprot_t prot)  {  	struct pmb_entry *pmbp, *pmbe; -	unsigned long wanted; -	int pmb_flags, i; -	long err; +	unsigned long orig_addr, orig_size; +	unsigned long flags, pmb_flags; +	int i, mapped; -	/* Convert typical pgprot value to the PMB equivalent */ -	if (flags & _PAGE_CACHABLE) { -		if (flags & _PAGE_WT) -			pmb_flags = PMB_WT; -		else -			pmb_flags = PMB_C; -	} else -		pmb_flags = PMB_WT | PMB_UB; +	if (size < SZ_16M) +		return -EINVAL; +	if (!pmb_addr_valid(vaddr, size)) +		return -EFAULT; +	if (pmb_mapping_exists(vaddr, phys, size)) +		return 0; +	orig_addr = vaddr; +	orig_size = size; + +	flush_tlb_kernel_range(vaddr, vaddr + size); + +	pmb_flags = pgprot_to_pmb_flags(prot);  	pmbp = NULL; -	wanted = size; -again: -	for (i = 0; i < ARRAY_SIZE(pmb_sizes); i++) { -		if (size < pmb_sizes[i].size) -			continue; +	do { +		for (i = mapped = 0; i < ARRAY_SIZE(pmb_sizes); i++) { +			if (size < pmb_sizes[i].size) +				continue; -		pmbe = pmb_alloc(vaddr, phys, pmb_flags | pmb_sizes[i].flag, -				 PMB_NO_ENTRY); -		if (IS_ERR(pmbe)) { -			err = PTR_ERR(pmbe); -			goto out; +			pmbe = pmb_alloc(vaddr, phys, pmb_flags | +					 pmb_sizes[i].flag, PMB_NO_ENTRY); +			if (IS_ERR(pmbe)) { +				pmb_unmap_entry(pmbp, mapped); +				return PTR_ERR(pmbe); +			} + +			spin_lock_irqsave(&pmbe->lock, flags); + +			pmbe->size = pmb_sizes[i].size; + +			__set_pmb_entry(pmbe); + +			phys	+= pmbe->size; +			vaddr	+= pmbe->size; +			size	-= pmbe->size; + +			/* +			 * Link adjacent entries that span multiple PMB +			 * entries for easier tear-down. +			 */ +			if (likely(pmbp)) { +				spin_lock(&pmbp->lock); +				pmbp->link = pmbe; +				spin_unlock(&pmbp->lock); +			} + +			pmbp = pmbe; + +			/* +			 * Instead of trying smaller sizes on every +			 * iteration (even if we succeed in allocating +			 * space), try using pmb_sizes[i].size again. +			 */ +			i--; +			mapped++; + +			spin_unlock_irqrestore(&pmbe->lock, flags);  		} +	} while (size >= SZ_16M); -		set_pmb_entry(pmbe); +	flush_cache_vmap(orig_addr, orig_addr + orig_size); -		phys	+= pmb_sizes[i].size; -		vaddr	+= pmb_sizes[i].size; -		size	-= pmb_sizes[i].size; +	return 0; +} -		/* -		 * Link adjacent entries that span multiple PMB entries -		 * for easier tear-down. -		 */ -		if (likely(pmbp)) -			pmbp->link = pmbe; +void __iomem *pmb_remap_caller(phys_addr_t phys, unsigned long size, +			       pgprot_t prot, void *caller) +{ +	unsigned long vaddr; +	phys_addr_t offset, last_addr; +	phys_addr_t align_mask; +	unsigned long aligned; +	struct vm_struct *area; +	int i, ret; -		pmbp = pmbe; +	if (!pmb_iomapping_enabled) +		return NULL; -		/* -		 * Instead of trying smaller sizes on every iteration -		 * (even if we succeed in allocating space), try using -		 * pmb_sizes[i].size again. -		 */ -		i--; -	} +	/* +	 * Small mappings need to go through the TLB. +	 */ +	if (size < SZ_16M) +		return ERR_PTR(-EINVAL); +	if (!pmb_prot_valid(prot)) +		return ERR_PTR(-EINVAL); -	if (size >= 0x1000000) -		goto again; +	for (i = 0; i < ARRAY_SIZE(pmb_sizes); i++) +		if (size >= pmb_sizes[i].size) +			break; -	return wanted - size; +	last_addr = phys + size; +	align_mask = ~(pmb_sizes[i].size - 1); +	offset = phys & ~align_mask; +	phys &= align_mask; +	aligned = ALIGN(last_addr, pmb_sizes[i].size) - phys; -out: -	if (pmbp) -		__pmb_unmap(pmbp); +	/* +	 * XXX: This should really start from uncached_end, but this +	 * causes the MMU to reset, so for now we restrict it to the +	 * 0xb000...0xc000 range. +	 */ +	area = __get_vm_area_caller(aligned, VM_IOREMAP, 0xb0000000, +				    P3SEG, caller); +	if (!area) +		return NULL; + +	area->phys_addr = phys; +	vaddr = (unsigned long)area->addr; -	return err; +	ret = pmb_bolt_mapping(vaddr, phys, size, prot); +	if (unlikely(ret != 0)) +		return ERR_PTR(ret); + +	return (void __iomem *)(offset + (char *)vaddr);  } -void pmb_unmap(unsigned long addr) +int pmb_unmap(void __iomem *addr)  {  	struct pmb_entry *pmbe = NULL; -	int i; +	unsigned long vaddr = (unsigned long __force)addr; +	int i, found = 0; + +	read_lock(&pmb_rwlock);  	for (i = 0; i < ARRAY_SIZE(pmb_entry_list); i++) { -		if (test_bit(i, &pmb_map)) { +		if (test_bit(i, pmb_map)) {  			pmbe = &pmb_entry_list[i]; -			if (pmbe->vpn == addr) +			if (pmbe->vpn == vaddr) { +				found = 1;  				break; +			}  		}  	} -	if (unlikely(!pmbe)) -		return; +	read_unlock(&pmb_rwlock); -	__pmb_unmap(pmbe); +	if (found) { +		pmb_unmap_entry(pmbe, NR_PMB_ENTRIES); +		return 0; +	} + +	return -EINVAL;  } -static void __pmb_unmap(struct pmb_entry *pmbe) +static void __pmb_unmap_entry(struct pmb_entry *pmbe, int depth)  { -	BUG_ON(!test_bit(pmbe->entry, &pmb_map)); -  	do {  		struct pmb_entry *pmblink = pmbe; @@ -268,102 +498,321 @@ static void __pmb_unmap(struct pmb_entry *pmbe)  		 * this entry in pmb_alloc() (even if we haven't filled  		 * it yet).  		 * -		 * Therefore, calling clear_pmb_entry() is safe as no +		 * Therefore, calling __clear_pmb_entry() is safe as no  		 * other mapping can be using that slot.  		 */ -		clear_pmb_entry(pmbe); +		__clear_pmb_entry(pmbe); + +		flush_cache_vunmap(pmbe->vpn, pmbe->vpn + pmbe->size);  		pmbe = pmblink->link;  		pmb_free(pmblink); -	} while (pmbe); +	} while (pmbe && --depth);  } -#ifdef CONFIG_PMB -int __uses_jump_to_uncached pmb_init(void) +static void pmb_unmap_entry(struct pmb_entry *pmbe, int depth)  { -	unsigned int i; -	long size, ret; +	unsigned long flags; -	jump_to_uncached(); +	if (unlikely(!pmbe)) +		return; + +	write_lock_irqsave(&pmb_rwlock, flags); +	__pmb_unmap_entry(pmbe, depth); +	write_unlock_irqrestore(&pmb_rwlock, flags); +} + +static void __init pmb_notify(void) +{ +	int i; + +	pr_info("PMB: boot mappings:\n"); + +	read_lock(&pmb_rwlock); + +	for (i = 0; i < ARRAY_SIZE(pmb_entry_list); i++) { +		struct pmb_entry *pmbe; + +		if (!test_bit(i, pmb_map)) +			continue; + +		pmbe = &pmb_entry_list[i]; + +		pr_info("       0x%08lx -> 0x%08lx [ %4ldMB %2scached ]\n", +			pmbe->vpn >> PAGE_SHIFT, pmbe->ppn >> PAGE_SHIFT, +			pmbe->size >> 20, (pmbe->flags & PMB_C) ? "" : "un"); +	} + +	read_unlock(&pmb_rwlock); +} + +/* + * Sync our software copy of the PMB mappings with those in hardware. The + * mappings in the hardware PMB were either set up by the bootloader or + * very early on by the kernel. + */ +static void __init pmb_synchronize(void) +{ +	struct pmb_entry *pmbp = NULL; +	int i, j;  	/* -	 * Insert PMB entries for the P1 and P2 areas so that, after -	 * we've switched the MMU to 32-bit mode, the semantics of P1 -	 * and P2 are the same as in 29-bit mode, e.g. +	 * Run through the initial boot mappings, log the established +	 * ones, and blow away anything that falls outside of the valid +	 * PPN range. Specifically, we only care about existing mappings +	 * that impact the cached/uncached sections. +	 * +	 * Note that touching these can be a bit of a minefield; the boot +	 * loader can establish multi-page mappings with the same caching +	 * attributes, so we need to ensure that we aren't modifying a +	 * mapping that we're presently executing from, or may execute +	 * from in the case of straddling page boundaries.  	 * -	 *	P1 - provides a cached window onto physical memory -	 *	P2 - provides an uncached window onto physical memory +	 * In the future we will have to tidy up after the boot loader by +	 * jumping between the cached and uncached mappings and tearing +	 * down alternating mappings while executing from the other.  	 */ -	size = __MEMORY_START + __MEMORY_SIZE; +	for (i = 0; i < NR_PMB_ENTRIES; i++) { +		unsigned long addr, data; +		unsigned long addr_val, data_val; +		unsigned long ppn, vpn, flags; +		unsigned long irqflags; +		unsigned int size; +		struct pmb_entry *pmbe; -	ret = pmb_remap(P1SEG, 0x00000000, size, PMB_C); -	BUG_ON(ret != size); +		addr = mk_pmb_addr(i); +		data = mk_pmb_data(i); -	ret = pmb_remap(P2SEG, 0x00000000, size, PMB_WT | PMB_UB); -	BUG_ON(ret != size); +		addr_val = __raw_readl(addr); +		data_val = __raw_readl(data); -	ctrl_outl(0, PMB_IRMCR); +		/* +		 * Skip over any bogus entries +		 */ +		if (!(data_val & PMB_V) || !(addr_val & PMB_V)) +			continue; -	/* PMB.SE and UB[7] */ -	ctrl_outl(PASCR_SE | (1 << 7), PMB_PASCR); +		ppn = data_val & PMB_PFN_MASK; +		vpn = addr_val & PMB_PFN_MASK; -	/* Flush out the TLB */ -	i =  ctrl_inl(MMUCR); -	i |= MMUCR_TI; -	ctrl_outl(i, MMUCR); +		/* +		 * Only preserve in-range mappings. +		 */ +		if (!pmb_ppn_in_range(ppn)) { +			/* +			 * Invalidate anything out of bounds. +			 */ +			writel_uncached(addr_val & ~PMB_V, addr); +			writel_uncached(data_val & ~PMB_V, data); +			continue; +		} -	back_to_cached(); +		/* +		 * Update the caching attributes if necessary +		 */ +		if (data_val & PMB_C) { +			data_val &= ~PMB_CACHE_MASK; +			data_val |= pmb_cache_flags(); -	return 0; +			writel_uncached(data_val, data); +		} + +		size = data_val & PMB_SZ_MASK; +		flags = size | (data_val & PMB_CACHE_MASK); + +		pmbe = pmb_alloc(vpn, ppn, flags, i); +		if (IS_ERR(pmbe)) { +			WARN_ON_ONCE(1); +			continue; +		} + +		spin_lock_irqsave(&pmbe->lock, irqflags); + +		for (j = 0; j < ARRAY_SIZE(pmb_sizes); j++) +			if (pmb_sizes[j].flag == size) +				pmbe->size = pmb_sizes[j].size; + +		if (pmbp) { +			spin_lock(&pmbp->lock); + +			/* +			 * Compare the previous entry against the current one to +			 * see if the entries span a contiguous mapping. If so, +			 * setup the entry links accordingly. Compound mappings +			 * are later coalesced. +			 */ +			if (pmb_can_merge(pmbp, pmbe)) +				pmbp->link = pmbe; + +			spin_unlock(&pmbp->lock); +		} + +		pmbp = pmbe; + +		spin_unlock_irqrestore(&pmbe->lock, irqflags); +	}  } -#else -int __uses_jump_to_uncached pmb_init(void) + +static void __init pmb_merge(struct pmb_entry *head)  { +	unsigned long span, newsize; +	struct pmb_entry *tail; +	int i = 1, depth = 0; + +	span = newsize = head->size; + +	tail = head->link; +	while (tail) { +		span += tail->size; + +		if (pmb_size_valid(span)) { +			newsize = span; +			depth = i; +		} + +		/* This is the end of the line.. */ +		if (!tail->link) +			break; + +		tail = tail->link; +		i++; +	} + +	/* +	 * The merged page size must be valid. +	 */ +	if (!depth || !pmb_size_valid(newsize)) +		return; + +	head->flags &= ~PMB_SZ_MASK; +	head->flags |= pmb_size_to_flags(newsize); + +	head->size = newsize; + +	__pmb_unmap_entry(head->link, depth); +	__set_pmb_entry(head); +} + +static void __init pmb_coalesce(void) +{ +	unsigned long flags;  	int i; -	unsigned long addr, data; -	jump_to_uncached(); +	write_lock_irqsave(&pmb_rwlock, flags); -	for (i = 0; i < PMB_ENTRY_MAX; i++) { +	for (i = 0; i < ARRAY_SIZE(pmb_entry_list); i++) {  		struct pmb_entry *pmbe; -		unsigned long vpn, ppn, flags; -		addr = PMB_DATA + (i << PMB_E_SHIFT); -		data = ctrl_inl(addr); -		if (!(data & PMB_V)) +		if (!test_bit(i, pmb_map))  			continue; -		if (data & PMB_C) { -#if defined(CONFIG_CACHE_WRITETHROUGH) -			data |= PMB_WT; -#elif defined(CONFIG_CACHE_WRITEBACK) -			data &= ~PMB_WT; -#else -			data &= ~(PMB_C | PMB_WT); -#endif -		} -		ctrl_outl(data, addr); +		pmbe = &pmb_entry_list[i]; -		ppn = data & PMB_PFN_MASK; +		/* +		 * We're only interested in compound mappings +		 */ +		if (!pmbe->link) +			continue; -		flags = data & (PMB_C | PMB_WT | PMB_UB); -		flags |= data & PMB_SZ_MASK; +		/* +		 * Nothing to do if it already uses the largest possible +		 * page size. +		 */ +		if (pmbe->size == SZ_512M) +			continue; -		addr = PMB_ADDR + (i << PMB_E_SHIFT); -		data = ctrl_inl(addr); +		pmb_merge(pmbe); +	} -		vpn = data & PMB_PFN_MASK; +	write_unlock_irqrestore(&pmb_rwlock, flags); +} -		pmbe = pmb_alloc(vpn, ppn, flags, i); -		WARN_ON(IS_ERR(pmbe)); +#ifdef CONFIG_UNCACHED_MAPPING +static void __init pmb_resize(void) +{ +	int i; + +	/* +	 * If the uncached mapping was constructed by the kernel, it will +	 * already be a reasonable size. +	 */ +	if (uncached_size == SZ_16M) +		return; + +	read_lock(&pmb_rwlock); + +	for (i = 0; i < ARRAY_SIZE(pmb_entry_list); i++) { +		struct pmb_entry *pmbe; +		unsigned long flags; + +		if (!test_bit(i, pmb_map)) +			continue; + +		pmbe = &pmb_entry_list[i]; + +		if (pmbe->vpn != uncached_start) +			continue; + +		/* +		 * Found it, now resize it. +		 */ +		spin_lock_irqsave(&pmbe->lock, flags); + +		pmbe->size = SZ_16M; +		pmbe->flags &= ~PMB_SZ_MASK; +		pmbe->flags |= pmb_size_to_flags(pmbe->size); + +		uncached_resize(pmbe->size); + +		__set_pmb_entry(pmbe); + +		spin_unlock_irqrestore(&pmbe->lock, flags);  	} -	back_to_cached(); +	read_lock(&pmb_rwlock); +} +#endif + +static int __init early_pmb(char *p) +{ +	if (!p) +		return 0; + +	if (strstr(p, "iomap")) +		pmb_iomapping_enabled = 1;  	return 0;  } -#endif /* CONFIG_PMB */ +early_param("pmb", early_pmb); + +void __init pmb_init(void) +{ +	/* Synchronize software state */ +	pmb_synchronize(); + +	/* Attempt to combine compound mappings */ +	pmb_coalesce(); + +#ifdef CONFIG_UNCACHED_MAPPING +	/* Resize initial mappings, if necessary */ +	pmb_resize(); +#endif + +	/* Log them */ +	pmb_notify(); + +	writel_uncached(0, PMB_IRMCR); + +	/* Flush out the TLB */ +	local_flush_tlb_all(); +	ctrl_barrier(); +} + +bool __in_29bit_mode(void) +{ +        return (__raw_readl(PMB_PASCR) & PASCR_SE) == 0; +}  static int pmb_seq_show(struct seq_file *file, void *iter)  { @@ -378,8 +827,8 @@ static int pmb_seq_show(struct seq_file *file, void *iter)  		unsigned int size;  		char *sz_str = NULL; -		addr = ctrl_inl(mk_pmb_addr(i)); -		data = ctrl_inl(mk_pmb_data(i)); +		addr = __raw_readl(mk_pmb_addr(i)); +		data = __raw_readl(mk_pmb_data(i));  		size = data & PMB_SZ_MASK;  		sz_str = (size == PMB_SZ_16M)  ? " 16MB": @@ -425,7 +874,7 @@ static int __init pmb_debugfs_init(void)  	return 0;  } -postcore_initcall(pmb_debugfs_init); +subsys_initcall(pmb_debugfs_init);  #ifdef CONFIG_PM  static int pmb_sysdev_suspend(struct sys_device *dev, pm_message_t state) @@ -437,14 +886,21 @@ static int pmb_sysdev_suspend(struct sys_device *dev, pm_message_t state)  	if (state.event == PM_EVENT_ON &&  	    prev_state.event == PM_EVENT_FREEZE) {  		struct pmb_entry *pmbe; + +		read_lock(&pmb_rwlock); +  		for (i = 0; i < ARRAY_SIZE(pmb_entry_list); i++) { -			if (test_bit(i, &pmb_map)) { +			if (test_bit(i, pmb_map)) {  				pmbe = &pmb_entry_list[i];  				set_pmb_entry(pmbe);  			}  		} + +		read_unlock(&pmb_rwlock);  	} +  	prev_state = state; +  	return 0;  } @@ -462,6 +918,5 @@ static int __init pmb_sysdev_init(void)  {  	return sysdev_driver_register(&cpu_sysdev_class, &pmb_sysdev_driver);  } -  subsys_initcall(pmb_sysdev_init);  #endif diff --git a/arch/sh/mm/tlb-debugfs.c b/arch/sh/mm/tlb-debugfs.c new file mode 100644 index 00000000000..229bf75f28d --- /dev/null +++ b/arch/sh/mm/tlb-debugfs.c @@ -0,0 +1,179 @@ +/* + * arch/sh/mm/tlb-debugfs.c + * + * debugfs ops for SH-4 ITLB/UTLBs. + * + * Copyright (C) 2010  Matt Fleming + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/module.h> +#include <linux/debugfs.h> +#include <linux/seq_file.h> +#include <asm/processor.h> +#include <asm/mmu_context.h> +#include <asm/tlbflush.h> + +enum tlb_type { +	TLB_TYPE_ITLB, +	TLB_TYPE_UTLB, +}; + +static struct { +	int bits; +	const char *size; +} tlb_sizes[] = { +	{ 0x0, "  1KB" }, +	{ 0x1, "  4KB" }, +	{ 0x2, "  8KB" }, +	{ 0x4, " 64KB" }, +	{ 0x5, "256KB" }, +	{ 0x7, "  1MB" }, +	{ 0x8, "  4MB" }, +	{ 0xc, " 64MB" }, +}; + +static int tlb_seq_show(struct seq_file *file, void *iter) +{ +	unsigned int tlb_type = (unsigned int)file->private; +	unsigned long addr1, addr2, data1, data2; +	unsigned long flags; +	unsigned long mmucr; +	unsigned int nentries, entry; +	unsigned int urb; + +	mmucr = __raw_readl(MMUCR); +	if ((mmucr & 0x1) == 0) { +		seq_printf(file, "address translation disabled\n"); +		return 0; +	} + +	if (tlb_type == TLB_TYPE_ITLB) { +		addr1 = MMU_ITLB_ADDRESS_ARRAY; +		addr2 = MMU_ITLB_ADDRESS_ARRAY2; +		data1 = MMU_ITLB_DATA_ARRAY; +		data2 = MMU_ITLB_DATA_ARRAY2; +		nentries = 4; +	} else { +		addr1 = MMU_UTLB_ADDRESS_ARRAY; +		addr2 = MMU_UTLB_ADDRESS_ARRAY2; +		data1 = MMU_UTLB_DATA_ARRAY; +		data2 = MMU_UTLB_DATA_ARRAY2; +		nentries = 64; +	} + +	local_irq_save(flags); +	jump_to_uncached(); + +	urb = (mmucr & MMUCR_URB) >> MMUCR_URB_SHIFT; + +	/* Make the "entry >= urb" test fail. */ +	if (urb == 0) +		urb = MMUCR_URB_NENTRIES + 1; + +	if (tlb_type == TLB_TYPE_ITLB) { +		addr1 = MMU_ITLB_ADDRESS_ARRAY; +		addr2 = MMU_ITLB_ADDRESS_ARRAY2; +		data1 = MMU_ITLB_DATA_ARRAY; +		data2 = MMU_ITLB_DATA_ARRAY2; +		nentries = 4; +	} else { +		addr1 = MMU_UTLB_ADDRESS_ARRAY; +		addr2 = MMU_UTLB_ADDRESS_ARRAY2; +		data1 = MMU_UTLB_DATA_ARRAY; +		data2 = MMU_UTLB_DATA_ARRAY2; +		nentries = 64; +	} + +	seq_printf(file, "entry:     vpn        ppn     asid  size valid wired\n"); + +	for (entry = 0; entry < nentries; entry++) { +		unsigned long vpn, ppn, asid, size; +		unsigned long valid; +		unsigned long val; +		const char *sz = "    ?"; +		int i; + +		val = __raw_readl(addr1 | (entry << MMU_TLB_ENTRY_SHIFT)); +		ctrl_barrier(); +		vpn = val & 0xfffffc00; +		valid = val & 0x100; + +		val = __raw_readl(addr2 | (entry << MMU_TLB_ENTRY_SHIFT)); +		ctrl_barrier(); +		asid = val & MMU_CONTEXT_ASID_MASK; + +		val = __raw_readl(data1 | (entry << MMU_TLB_ENTRY_SHIFT)); +		ctrl_barrier(); +		ppn = (val & 0x0ffffc00) << 4; + +		val = __raw_readl(data2 | (entry << MMU_TLB_ENTRY_SHIFT)); +		ctrl_barrier(); +		size = (val & 0xf0) >> 4; + +		for (i = 0; i < ARRAY_SIZE(tlb_sizes); i++) { +			if (tlb_sizes[i].bits == size) +				break; +		} + +		if (i != ARRAY_SIZE(tlb_sizes)) +			sz = tlb_sizes[i].size; + +		seq_printf(file, "%2d:    0x%08lx 0x%08lx %5lu %s   %s     %s\n", +			   entry, vpn, ppn, asid, +			   sz, valid ? "V" : "-", +			   (urb <= entry) ? "W" : "-"); +	} + +	back_to_cached(); +	local_irq_restore(flags); + +	return 0; +} + +static int tlb_debugfs_open(struct inode *inode, struct file *file) +{ +	return single_open(file, tlb_seq_show, inode->i_private); +} + +static const struct file_operations tlb_debugfs_fops = { +	.owner		= THIS_MODULE, +	.open		= tlb_debugfs_open, +	.read		= seq_read, +	.llseek		= seq_lseek, +	.release	= single_release, +}; + +static int __init tlb_debugfs_init(void) +{ +	struct dentry *itlb, *utlb; + +	itlb = debugfs_create_file("itlb", S_IRUSR, sh_debugfs_root, +				   (unsigned int *)TLB_TYPE_ITLB, +				   &tlb_debugfs_fops); +	if (unlikely(!itlb)) +		return -ENOMEM; +	if (IS_ERR(itlb)) +		return PTR_ERR(itlb); + +	utlb = debugfs_create_file("utlb", S_IRUSR, sh_debugfs_root, +				   (unsigned int *)TLB_TYPE_UTLB, +				   &tlb_debugfs_fops); +	if (unlikely(!utlb)) { +		debugfs_remove(itlb); +		return -ENOMEM; +	} + +	if (IS_ERR(utlb)) { +		debugfs_remove(itlb); +		return PTR_ERR(utlb); +	} + +	return 0; +} +module_init(tlb_debugfs_init); + +MODULE_LICENSE("GPL v2"); diff --git a/arch/sh/mm/tlb-pteaex.c b/arch/sh/mm/tlb-pteaex.c index 409b7c2b4b9..b71db6af806 100644 --- a/arch/sh/mm/tlb-pteaex.c +++ b/arch/sh/mm/tlb-pteaex.c @@ -68,11 +68,40 @@ void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t pte)   * in extended mode, the legacy 8-bit ASID field in address array 1 has   * undefined behaviour.   */ -void __uses_jump_to_uncached local_flush_tlb_one(unsigned long asid, -						 unsigned long page) +void local_flush_tlb_one(unsigned long asid, unsigned long page)  {  	jump_to_uncached();  	__raw_writel(page, MMU_UTLB_ADDRESS_ARRAY | MMU_PAGE_ASSOC_BIT);  	__raw_writel(asid, MMU_UTLB_ADDRESS_ARRAY2 | MMU_PAGE_ASSOC_BIT); +	__raw_writel(page, MMU_ITLB_ADDRESS_ARRAY | MMU_PAGE_ASSOC_BIT); +	__raw_writel(asid, MMU_ITLB_ADDRESS_ARRAY2 | MMU_PAGE_ASSOC_BIT);  	back_to_cached();  } + +void local_flush_tlb_all(void) +{ +	unsigned long flags, status; +	int i; + +	/* +	 * Flush all the TLB. +	 */ +	local_irq_save(flags); +	jump_to_uncached(); + +	status = __raw_readl(MMUCR); +	status = ((status & MMUCR_URB) >> MMUCR_URB_SHIFT); + +	if (status == 0) +		status = MMUCR_URB_NENTRIES; + +	for (i = 0; i < status; i++) +		__raw_writel(0x0, MMU_UTLB_ADDRESS_ARRAY | (i << 8)); + +	for (i = 0; i < 4; i++) +		__raw_writel(0x0, MMU_ITLB_ADDRESS_ARRAY | (i << 8)); + +	back_to_cached(); +	ctrl_barrier(); +	local_irq_restore(flags); +} diff --git a/arch/sh/mm/tlb-sh3.c b/arch/sh/mm/tlb-sh3.c index ace8e6d2f59..7a940dbfc2e 100644 --- a/arch/sh/mm/tlb-sh3.c +++ b/arch/sh/mm/tlb-sh3.c @@ -41,14 +41,14 @@ void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t pte)  	/* Set PTEH register */  	vpn = (address & MMU_VPN_MASK) | get_asid(); -	ctrl_outl(vpn, MMU_PTEH); +	__raw_writel(vpn, MMU_PTEH);  	pteval = pte_val(pte);  	/* Set PTEL register */  	pteval &= _PAGE_FLAGS_HARDWARE_MASK; /* drop software flags */  	/* conveniently, we want all the software flags to be 0 anyway */ -	ctrl_outl(pteval, MMU_PTEL); +	__raw_writel(pteval, MMU_PTEL);  	/* Load the TLB */  	asm volatile("ldtlb": /* no output */ : /* no input */ : "memory"); @@ -75,5 +75,24 @@ void local_flush_tlb_one(unsigned long asid, unsigned long page)  	}  	for (i = 0; i < ways; i++) -		ctrl_outl(data, addr + (i << 8)); +		__raw_writel(data, addr + (i << 8)); +} + +void local_flush_tlb_all(void) +{ +	unsigned long flags, status; + +	/* +	 * Flush all the TLB. +	 * +	 * Write to the MMU control register's bit: +	 *	TF-bit for SH-3, TI-bit for SH-4. +	 *      It's same position, bit #2. +	 */ +	local_irq_save(flags); +	status = __raw_readl(MMUCR); +	status |= 0x04; +	__raw_writel(status, MMUCR); +	ctrl_barrier(); +	local_irq_restore(flags);  } diff --git a/arch/sh/mm/tlb-sh4.c b/arch/sh/mm/tlb-sh4.c index 8cf550e2570..cfdf7930d29 100644 --- a/arch/sh/mm/tlb-sh4.c +++ b/arch/sh/mm/tlb-sh4.c @@ -29,7 +29,7 @@ void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t pte)  	/* Set PTEH register */  	vpn = (address & MMU_VPN_MASK) | get_asid(); -	ctrl_outl(vpn, MMU_PTEH); +	__raw_writel(vpn, MMU_PTEH);  	pteval = pte.pte_low; @@ -41,13 +41,13 @@ void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t pte)  	 * the protection bits (with the exception of the compat-mode SZ  	 * and PR bits, which are cleared) being written out in PTEL.  	 */ -	ctrl_outl(pte.pte_high, MMU_PTEA); +	__raw_writel(pte.pte_high, MMU_PTEA);  #else  	if (cpu_data->flags & CPU_HAS_PTEA) {  		/* The last 3 bits and the first one of pteval contains  		 * the PTEA timing control and space attribute bits  		 */ -		ctrl_outl(copy_ptea_attributes(pteval), MMU_PTEA); +		__raw_writel(copy_ptea_attributes(pteval), MMU_PTEA);  	}  #endif @@ -57,15 +57,14 @@ void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t pte)  	pteval |= _PAGE_WT;  #endif  	/* conveniently, we want all the software flags to be 0 anyway */ -	ctrl_outl(pteval, MMU_PTEL); +	__raw_writel(pteval, MMU_PTEL);  	/* Load the TLB */  	asm volatile("ldtlb": /* no output */ : /* no input */ : "memory");  	local_irq_restore(flags);  } -void __uses_jump_to_uncached local_flush_tlb_one(unsigned long asid, -						 unsigned long page) +void local_flush_tlb_one(unsigned long asid, unsigned long page)  {  	unsigned long addr, data; @@ -78,6 +77,34 @@ void __uses_jump_to_uncached local_flush_tlb_one(unsigned long asid,  	addr = MMU_UTLB_ADDRESS_ARRAY | MMU_PAGE_ASSOC_BIT;  	data = page | asid; /* VALID bit is off */  	jump_to_uncached(); -	ctrl_outl(data, addr); +	__raw_writel(data, addr);  	back_to_cached();  } + +void local_flush_tlb_all(void) +{ +	unsigned long flags, status; +	int i; + +	/* +	 * Flush all the TLB. +	 */ +	local_irq_save(flags); +	jump_to_uncached(); + +	status = __raw_readl(MMUCR); +	status = ((status & MMUCR_URB) >> MMUCR_URB_SHIFT); + +	if (status == 0) +		status = MMUCR_URB_NENTRIES; + +	for (i = 0; i < status; i++) +		__raw_writel(0x0, MMU_UTLB_ADDRESS_ARRAY | (i << 8)); + +	for (i = 0; i < 4; i++) +		__raw_writel(0x0, MMU_ITLB_ADDRESS_ARRAY | (i << 8)); + +	back_to_cached(); +	ctrl_barrier(); +	local_irq_restore(flags); +} diff --git a/arch/sh/mm/tlb-sh5.c b/arch/sh/mm/tlb-sh5.c index fdb64e41ec5..f27dbe1c159 100644 --- a/arch/sh/mm/tlb-sh5.c +++ b/arch/sh/mm/tlb-sh5.c @@ -143,3 +143,42 @@ void sh64_setup_tlb_slot(unsigned long long config_addr, unsigned long eaddr,   */  void sh64_teardown_tlb_slot(unsigned long long config_addr)  	__attribute__ ((alias("__flush_tlb_slot"))); + +static int dtlb_entry; +static unsigned long long dtlb_entries[64]; + +void tlb_wire_entry(struct vm_area_struct *vma, unsigned long addr, pte_t pte) +{ +	unsigned long long entry; +	unsigned long paddr, flags; + +	BUG_ON(dtlb_entry == ARRAY_SIZE(dtlb_entries)); + +	local_irq_save(flags); + +	entry = sh64_get_wired_dtlb_entry(); +	dtlb_entries[dtlb_entry++] = entry; + +	paddr = pte_val(pte) & _PAGE_FLAGS_HARDWARE_MASK; +	paddr &= ~PAGE_MASK; + +	sh64_setup_tlb_slot(entry, addr, get_asid(), paddr); + +	local_irq_restore(flags); +} + +void tlb_unwire_entry(void) +{ +	unsigned long long entry; +	unsigned long flags; + +	BUG_ON(!dtlb_entry); + +	local_irq_save(flags); +	entry = dtlb_entries[dtlb_entry--]; + +	sh64_teardown_tlb_slot(entry); +	sh64_put_wired_dtlb_entry(entry); + +	local_irq_restore(flags); +} diff --git a/arch/sh/mm/tlb-urb.c b/arch/sh/mm/tlb-urb.c new file mode 100644 index 00000000000..c92ce20db39 --- /dev/null +++ b/arch/sh/mm/tlb-urb.c @@ -0,0 +1,93 @@ +/* + * arch/sh/mm/tlb-urb.c + * + * TLB entry wiring helpers for URB-equipped parts. + * + * Copyright (C) 2010  Matt Fleming + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/mm.h> +#include <linux/io.h> +#include <asm/tlb.h> +#include <asm/mmu_context.h> + +/* + * Load the entry for 'addr' into the TLB and wire the entry. + */ +void tlb_wire_entry(struct vm_area_struct *vma, unsigned long addr, pte_t pte) +{ +	unsigned long status, flags; +	int urb; + +	local_irq_save(flags); + +	status = __raw_readl(MMUCR); +	urb = (status & MMUCR_URB) >> MMUCR_URB_SHIFT; +	status &= ~MMUCR_URC; + +	/* +	 * Make sure we're not trying to wire the last TLB entry slot. +	 */ +	BUG_ON(!--urb); + +	urb = urb % MMUCR_URB_NENTRIES; + +	/* +	 * Insert this entry into the highest non-wired TLB slot (via +	 * the URC field). +	 */ +	status |= (urb << MMUCR_URC_SHIFT); +	__raw_writel(status, MMUCR); +	ctrl_barrier(); + +	/* Load the entry into the TLB */ +	__update_tlb(vma, addr, pte); + +	/* ... and wire it up. */ +	status = __raw_readl(MMUCR); + +	status &= ~MMUCR_URB; +	status |= (urb << MMUCR_URB_SHIFT); + +	__raw_writel(status, MMUCR); +	ctrl_barrier(); + +	local_irq_restore(flags); +} + +/* + * Unwire the last wired TLB entry. + * + * It should also be noted that it is not possible to wire and unwire + * TLB entries in an arbitrary order. If you wire TLB entry N, followed + * by entry N+1, you must unwire entry N+1 first, then entry N. In this + * respect, it works like a stack or LIFO queue. + */ +void tlb_unwire_entry(void) +{ +	unsigned long status, flags; +	int urb; + +	local_irq_save(flags); + +	status = __raw_readl(MMUCR); +	urb = (status & MMUCR_URB) >> MMUCR_URB_SHIFT; +	status &= ~MMUCR_URB; + +	/* +	 * Make sure we're not trying to unwire a TLB entry when none +	 * have been wired. +	 */ +	BUG_ON(urb++ == MMUCR_URB_NENTRIES); + +	urb = urb % MMUCR_URB_NENTRIES; + +	status |= (urb << MMUCR_URB_SHIFT); +	__raw_writel(status, MMUCR); +	ctrl_barrier(); + +	local_irq_restore(flags); +} diff --git a/arch/sh/mm/tlbflush_32.c b/arch/sh/mm/tlbflush_32.c index 6f45c1f8a7f..3fbe03ce8fe 100644 --- a/arch/sh/mm/tlbflush_32.c +++ b/arch/sh/mm/tlbflush_32.c @@ -119,22 +119,3 @@ void local_flush_tlb_mm(struct mm_struct *mm)  		local_irq_restore(flags);  	}  } - -void local_flush_tlb_all(void) -{ -	unsigned long flags, status; - -	/* -	 * Flush all the TLB. -	 * -	 * Write to the MMU control register's bit: -	 *	TF-bit for SH-3, TI-bit for SH-4. -	 *      It's same position, bit #2. -	 */ -	local_irq_save(flags); -	status = ctrl_inl(MMUCR); -	status |= 0x04; -	ctrl_outl(status, MMUCR); -	ctrl_barrier(); -	local_irq_restore(flags); -} diff --git a/arch/sh/mm/tlbflush_64.c b/arch/sh/mm/tlbflush_64.c index de0b0e88182..03db41cc126 100644 --- a/arch/sh/mm/tlbflush_64.c +++ b/arch/sh/mm/tlbflush_64.c @@ -36,7 +36,7 @@ extern void die(const char *,struct pt_regs *,long);  static inline void print_prots(pgprot_t prot)  { -	printk("prot is 0x%08lx\n",pgprot_val(prot)); +	printk("prot is 0x%016llx\n",pgprot_val(prot));  	printk("%s %s %s %s %s\n",PPROT(_PAGE_SHARED),PPROT(_PAGE_READ),  	       PPROT(_PAGE_EXECUTE),PPROT(_PAGE_WRITE),PPROT(_PAGE_USER)); @@ -189,7 +189,6 @@ good_area:  	 * make sure we exit gracefully rather than endlessly redo  	 * the fault.  	 */ -survive:  	fault = handle_mm_fault(mm, vma, address, writeaccess ? FAULT_FLAG_WRITE : 0);  	if (unlikely(fault & VM_FAULT_ERROR)) {  		if (fault & VM_FAULT_OOM) @@ -294,22 +293,11 @@ no_context:   * us unable to handle the page fault gracefully.   */  out_of_memory: -	if (is_global_init(current)) { -		panic("INIT out of memory\n"); -		yield(); -		goto survive; -	} -	printk("fault:Out of memory\n");  	up_read(&mm->mmap_sem); -	if (is_global_init(current)) { -		yield(); -		down_read(&mm->mmap_sem); -		goto survive; -	} -	printk("VM: killing process %s\n", tsk->comm); -	if (user_mode(regs)) -		do_group_exit(SIGKILL); -	goto no_context; +	if (!user_mode(regs)) +		goto no_context; +	pagefault_out_of_memory(); +	return;  do_sigbus:  	printk("fault:Do sigbus\n"); diff --git a/arch/sh/mm/uncached.c b/arch/sh/mm/uncached.c new file mode 100644 index 00000000000..8a4eca551fc --- /dev/null +++ b/arch/sh/mm/uncached.c @@ -0,0 +1,43 @@ +#include <linux/init.h> +#include <linux/module.h> +#include <asm/sizes.h> +#include <asm/page.h> +#include <asm/addrspace.h> + +/* + * This is the offset of the uncached section from its cached alias. + * + * Legacy platforms handle trivial transitions between cached and + * uncached segments by making use of the 1:1 mapping relationship in + * 512MB lowmem, others via a special uncached mapping. + * + * Default value only valid in 29 bit mode, in 32bit mode this will be + * updated by the early PMB initialization code. + */ +unsigned long cached_to_uncached = SZ_512M; +unsigned long uncached_size = SZ_512M; +unsigned long uncached_start, uncached_end; +EXPORT_SYMBOL(uncached_start); +EXPORT_SYMBOL(uncached_end); + +int virt_addr_uncached(unsigned long kaddr) +{ +	return (kaddr >= uncached_start) && (kaddr < uncached_end); +} +EXPORT_SYMBOL(virt_addr_uncached); + +void __init uncached_init(void) +{ +#ifdef CONFIG_29BIT +	uncached_start = P2SEG; +#else +	uncached_start = memory_end; +#endif +	uncached_end = uncached_start + uncached_size; +} + +void __init uncached_resize(unsigned long size) +{ +	uncached_size = size; +	uncached_end = uncached_start + uncached_size; +} diff --git a/arch/sh/tools/mach-types b/arch/sh/tools/mach-types index 6639b25d8d5..b25aa554ee5 100644 --- a/arch/sh/tools/mach-types +++ b/arch/sh/tools/mach-types @@ -32,6 +32,7 @@ DREAMCAST		SH_DREAMCAST  SNAPGEAR		SH_SECUREEDGE5410  EDOSK7705		SH_EDOSK7705  EDOSK7760		SH_EDOSK7760 +SDK7786			SH_SDK7786  SH4202_MICRODEV		SH_SH4202_MICRODEV  SH03			SH_SH03  LANDISK			SH_LANDISK  |