diff options
Diffstat (limited to 'arch/arm')
107 files changed, 566 insertions, 325 deletions
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index f9da41921c5..940b2017810 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -597,6 +597,8 @@ __common_mmu_cache_on:  		sub	pc, lr, r0, lsr #32	@ properly flush pipeline  #endif +#define PROC_ENTRY_SIZE (4*5) +  /*   * Here follow the relocatable cache support functions for the   * various processors.  This is a generic hook for locating an @@ -624,7 +626,7 @@ call_cache_fn:	adr	r12, proc_types   ARM(		addeq	pc, r12, r3		) @ call cache function   THUMB(		addeq	r12, r3			)   THUMB(		moveq	pc, r12			) @ call cache function -		add	r12, r12, #4*5 +		add	r12, r12, #PROC_ENTRY_SIZE  		b	1b  /* @@ -691,9 +693,9 @@ proc_types:  		.word	0x41069260		@ ARM926EJ-S (v5TEJ)  		.word	0xff0ffff0 -		b	__arm926ejs_mmu_cache_on -		b	__armv4_mmu_cache_off -		b	__armv5tej_mmu_cache_flush +		W(b)	__arm926ejs_mmu_cache_on +		W(b)	__armv4_mmu_cache_off +		W(b)	__armv5tej_mmu_cache_flush  		.word	0x00007000		@ ARM7 IDs  		.word	0x0000f000 @@ -794,6 +796,16 @@ proc_types:  		.size	proc_types, . - proc_types +		/* +		 * If you get a "non-constant expression in ".if" statement" +		 * error from the assembler on this line, check that you have +		 * not accidentally written a "b" instruction where you should +		 * have written W(b). +		 */ +		.if (. - proc_types) % PROC_ENTRY_SIZE != 0 +		.error "The size of one or more proc_types entries is wrong." +		.endif +  /*   * Turn off the Cache and MMU.  ARMv3 does not support   * reading the control register, but ARMv4 does. diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c index e5681636626..841df7d21c2 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c @@ -255,7 +255,7 @@ static inline dma_addr_t map_single(struct device *dev, void *ptr, size_t size,  		if (buf == 0) {  			dev_err(dev, "%s: unable to map unsafe buffer %p!\n",  			       __func__, ptr); -			return 0; +			return ~0;  		}  		dev_dbg(dev, diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig index 889922ad229..67b5abb6f85 100644 --- a/arch/arm/configs/davinci_all_defconfig +++ b/arch/arm/configs/davinci_all_defconfig @@ -157,7 +157,7 @@ CONFIG_LEDS_GPIO=m  CONFIG_LEDS_TRIGGERS=y  CONFIG_LEDS_TRIGGER_TIMER=m  CONFIG_LEDS_TRIGGER_HEARTBEAT=m -CONFIG_RTC_CLASS=m +CONFIG_RTC_CLASS=y  CONFIG_EXT2_FS=y  CONFIG_EXT3_FS=y  CONFIG_XFS_FS=m diff --git a/arch/arm/configs/netx_defconfig b/arch/arm/configs/netx_defconfig index 316af5479d9..9c0ad799398 100644 --- a/arch/arm/configs/netx_defconfig +++ b/arch/arm/configs/netx_defconfig @@ -60,7 +60,7 @@ CONFIG_FB_ARMCLCD=y  # CONFIG_VGA_CONSOLE is not set  CONFIG_FRAMEBUFFER_CONSOLE=y  CONFIG_LOGO=y -CONFIG_RTC_CLASS=m +CONFIG_RTC_CLASS=y  CONFIG_INOTIFY=y  CONFIG_TMPFS=y  CONFIG_JFFS2_FS=y diff --git a/arch/arm/configs/viper_defconfig b/arch/arm/configs/viper_defconfig index 8b0c717378f..1d01ddd3312 100644 --- a/arch/arm/configs/viper_defconfig +++ b/arch/arm/configs/viper_defconfig @@ -142,7 +142,7 @@ CONFIG_USB_GADGETFS=m  CONFIG_USB_FILE_STORAGE=m  CONFIG_USB_G_SERIAL=m  CONFIG_USB_G_PRINTER=m -CONFIG_RTC_CLASS=m +CONFIG_RTC_CLASS=y  CONFIG_RTC_DRV_DS1307=m  CONFIG_RTC_DRV_SA1100=m  CONFIG_EXT2_FS=m diff --git a/arch/arm/configs/xcep_defconfig b/arch/arm/configs/xcep_defconfig index 5b550414364..721832ffe2d 100644 --- a/arch/arm/configs/xcep_defconfig +++ b/arch/arm/configs/xcep_defconfig @@ -73,7 +73,7 @@ CONFIG_SENSORS_MAX6650=m  # CONFIG_VGA_CONSOLE is not set  # CONFIG_HID_SUPPORT is not set  # CONFIG_USB_SUPPORT is not set -CONFIG_RTC_CLASS=m +CONFIG_RTC_CLASS=y  CONFIG_RTC_DRV_SA1100=m  CONFIG_DMADEVICES=y  # CONFIG_DNOTIFY is not set diff --git a/arch/arm/configs/zeus_defconfig b/arch/arm/configs/zeus_defconfig index 960f65514d8..59577ad3f4e 100644 --- a/arch/arm/configs/zeus_defconfig +++ b/arch/arm/configs/zeus_defconfig @@ -158,7 +158,7 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=m  CONFIG_LEDS_TRIGGER_BACKLIGHT=m  CONFIG_LEDS_TRIGGER_GPIO=m  CONFIG_LEDS_TRIGGER_DEFAULT_ON=m -CONFIG_RTC_CLASS=m +CONFIG_RTC_CLASS=y  CONFIG_RTC_DRV_ISL1208=m  CONFIG_RTC_DRV_PXA=m  CONFIG_EXT2_FS=y diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index bc2d2d75f70..65c3f2474f5 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h @@ -13,6 +13,9 @@   *  Do not include any C declarations in this file - it is included by   *  assembler source.   */ +#ifndef __ASM_ASSEMBLER_H__ +#define __ASM_ASSEMBLER_H__ +  #ifndef __ASSEMBLY__  #error "Only include this from assembly code"  #endif @@ -290,3 +293,4 @@  	.macro	ldrusr, reg, ptr, inc, cond=al, rept=1, abort=9001f  	usracc	ldr, \reg, \ptr, \inc, \cond, \rept, \abort  	.endm +#endif /* __ASM_ASSEMBLER_H__ */ diff --git a/arch/arm/include/asm/entry-macro-multi.S b/arch/arm/include/asm/entry-macro-multi.S index ec0bbf79c71..2da8547de6d 100644 --- a/arch/arm/include/asm/entry-macro-multi.S +++ b/arch/arm/include/asm/entry-macro-multi.S @@ -1,3 +1,5 @@ +#include <asm/assembler.h> +  /*   * Interrupt handling.  Preserves r7, r8, r9   */ diff --git a/arch/arm/kernel/devtree.c b/arch/arm/kernel/devtree.c index a701e4226a6..0cdd7b456cb 100644 --- a/arch/arm/kernel/devtree.c +++ b/arch/arm/kernel/devtree.c @@ -76,6 +76,9 @@ struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys)  	unsigned long dt_root;  	const char *model; +	if (!dt_phys) +		return NULL; +  	devtree = phys_to_virt(dt_phys);  	/* check device tree validity */ diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index e8d88567680..90c62cd51ca 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -435,6 +435,10 @@ __irq_usr:  	usr_entry  	kuser_cmpxchg_check +#ifdef CONFIG_IRQSOFF_TRACER +	bl	trace_hardirqs_off +#endif +  	get_thread_info tsk  #ifdef CONFIG_PREEMPT  	ldr	r8, [tsk, #TI_PREEMPT]		@ get preempt count @@ -453,7 +457,7 @@ __irq_usr:  #endif  	mov	why, #0 -	b	ret_to_user +	b	ret_to_user_from_irq   UNWIND(.fnend		)  ENDPROC(__irq_usr) diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 1e7b04a40a3..b2a27b6b004 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -64,6 +64,7 @@ work_resched:  ENTRY(ret_to_user)  ret_slow_syscall:  	disable_irq				@ disable interrupts +ENTRY(ret_to_user_from_irq)  	ldr	r1, [tsk, #TI_FLAGS]  	tst	r1, #_TIF_WORK_MASK  	bne	work_pending @@ -75,6 +76,7 @@ no_work_pending:  	arch_ret_to_user r1, lr  	restore_user_regs fast = 0, offset = 0 +ENDPROC(ret_to_user_from_irq)  ENDPROC(ret_to_user)  /* diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c index fee7c36349e..016d6a0830a 100644 --- a/arch/arm/kernel/module.c +++ b/arch/arm/kernel/module.c @@ -193,8 +193,17 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,  				offset -= 0x02000000;  			offset += sym->st_value - loc; -			/* only Thumb addresses allowed (no interworking) */ -			if (!(offset & 1) || +			/* +			 * For function symbols, only Thumb addresses are +			 * allowed (no interworking). +			 * +			 * For non-function symbols, the destination +			 * has no specific ARM/Thumb disposition, so +			 * the branch is resolved under the assumption +			 * that interworking is not required. +			 */ +			if ((ELF32_ST_TYPE(sym->st_info) == STT_FUNC && +				!(offset & 1)) ||  			    offset <= (s32)0xff000000 ||  			    offset >= (s32)0x01000000) {  				pr_err("%s: section %u reloc %u sym '%s': relocation %u out of range (%#lx -> %#x)\n", diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index d53c0abc4dd..2b5b1421596 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c @@ -583,7 +583,7 @@ static int armpmu_event_init(struct perf_event *event)  static void armpmu_enable(struct pmu *pmu)  {  	/* Enable all of the perf events on hardware. */ -	int idx; +	int idx, enabled = 0;  	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);  	if (!armpmu) @@ -596,9 +596,11 @@ static void armpmu_enable(struct pmu *pmu)  			continue;  		armpmu->enable(&event->hw, idx); +		enabled = 1;  	} -	armpmu->start(); +	if (enabled) +		armpmu->start();  }  static void armpmu_disable(struct pmu *pmu) diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index ed11fb08b05..acbb447ac6b 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -73,6 +73,7 @@ __setup("fpe=", fpe_setup);  #endif  extern void paging_init(struct machine_desc *desc); +extern void sanity_check_meminfo(void);  extern void reboot_setup(char *str);  unsigned int processor_id; @@ -900,6 +901,7 @@ void __init setup_arch(char **cmdline_p)  	parse_early_param(); +	sanity_check_meminfo();  	arm_memblock_init(&meminfo, mdesc);  	paging_init(mdesc); diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 344e52b16c8..e7f92a4321f 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -318,9 +318,13 @@ asmlinkage void __cpuinit secondary_start_kernel(void)  	smp_store_cpu_info(cpu);  	/* -	 * OK, now it's safe to let the boot CPU continue +	 * OK, now it's safe to let the boot CPU continue.  Wait for +	 * the CPU migration code to notice that the CPU is online +	 * before we continue.  	 */  	set_cpu_online(cpu, true); +	while (!cpu_active(cpu)) +		cpu_relax();  	/*  	 * OK, it's off to the idle thread for us diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index 60636f499cb..2c277d40cee 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c @@ -115,7 +115,7 @@ static void __cpuinit twd_calibrate_rate(void)  		twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5);  		printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000, -			(twd_timer_rate / 1000000) % 100); +			(twd_timer_rate / 10000) % 100);  	}  } diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index d52eec268b4..6807cb1e76d 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c @@ -139,7 +139,7 @@ static void dump_instr(const char *lvl, struct pt_regs *regs)  	fs = get_fs();  	set_fs(KERNEL_DS); -	for (i = -4; i < 1; i++) { +	for (i = -4; i < 1 + !!thumb; i++) {  		unsigned int val, bad;  		if (thumb) @@ -563,7 +563,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)  		if (!pmd_present(*pmd))  			goto bad_access;  		pte = pte_offset_map_lock(mm, pmd, addr, &ptl); -		if (!pte_present(*pte) || !pte_dirty(*pte)) { +		if (!pte_present(*pte) || !pte_write(*pte) || !pte_dirty(*pte)) {  			pte_unmap_unlock(pte, ptl);  			goto bad_access;  		} diff --git a/arch/arm/mach-at91/at91cap9.c b/arch/arm/mach-at91/at91cap9.c index 17fae4a42ab..f1013d08bb5 100644 --- a/arch/arm/mach-at91/at91cap9.c +++ b/arch/arm/mach-at91/at91cap9.c @@ -223,15 +223,15 @@ static struct clk *periph_clocks[] __initdata = {  };  static struct clk_lookup periph_clocks_lookups[] = { -	CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc.0", &utmi_clk), -	CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc.0", &udphs_clk), +	CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk), +	CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk),  	CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk),  	CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1", &mmc1_clk),  	CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk),  	CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),  	CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk), -	CLKDEV_CON_DEV_ID("ssc", "ssc.0", &ssc0_clk), -	CLKDEV_CON_DEV_ID("ssc", "ssc.1", &ssc1_clk), +	CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), +	CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),  };  static struct clk_lookup usart_clocks_lookups[] = { diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c index cd850ed6f33..dba0d8d8a4b 100644 --- a/arch/arm/mach-at91/at91cap9_devices.c +++ b/arch/arm/mach-at91/at91cap9_devices.c @@ -1220,7 +1220,7 @@ void __init at91_set_serial_console(unsigned portnr)  {  	if (portnr < ATMEL_MAX_UART) {  		atmel_default_console_device = at91_uarts[portnr]; -		at91cap9_set_console_clock(portnr); +		at91cap9_set_console_clock(at91_uarts[portnr]->id);  	}  } diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c index b228ce9e21a..83a1a3fee55 100644 --- a/arch/arm/mach-at91/at91rm9200.c +++ b/arch/arm/mach-at91/at91rm9200.c @@ -199,9 +199,9 @@ static struct clk_lookup periph_clocks_lookups[] = {  	CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tc3_clk),  	CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk),  	CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk), -	CLKDEV_CON_DEV_ID("ssc", "ssc.0", &ssc0_clk), -	CLKDEV_CON_DEV_ID("ssc", "ssc.1", &ssc1_clk), -	CLKDEV_CON_DEV_ID("ssc", "ssc.2", &ssc2_clk), +	CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), +	CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), +	CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),  };  static struct clk_lookup usart_clocks_lookups[] = { diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index a0ba475be04..7227755ffec 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c @@ -1135,7 +1135,7 @@ void __init at91_set_serial_console(unsigned portnr)  {  	if (portnr < ATMEL_MAX_UART) {  		atmel_default_console_device = at91_uarts[portnr]; -		at91rm9200_set_console_clock(portnr); +		at91rm9200_set_console_clock(at91_uarts[portnr]->id);  	}  } diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 1fdeb9058a7..39f81f47b4b 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c @@ -1173,7 +1173,7 @@ void __init at91_set_serial_console(unsigned portnr)  {  	if (portnr < ATMEL_MAX_UART) {  		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9260_set_console_clock(portnr); +		at91sam9260_set_console_clock(at91_uarts[portnr]->id);  	}  } diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 14dd666850b..0f917928eeb 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c @@ -1013,7 +1013,7 @@ void __init at91_set_serial_console(unsigned portnr)  {  	if (portnr < ATMEL_MAX_UART) {  		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9261_set_console_clock(portnr); +		at91sam9261_set_console_clock(at91_uarts[portnr]->id);  	}  } diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index ffe081b77ed..a050f41fc86 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c @@ -1395,7 +1395,7 @@ void __init at91_set_serial_console(unsigned portnr)  {  	if (portnr < ATMEL_MAX_UART) {  		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9263_set_console_clock(portnr); +		at91sam9263_set_console_clock(at91_uarts[portnr]->id);  	}  } diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index 2bb6ff9af1c..11e214121b2 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c @@ -217,11 +217,11 @@ static struct clk *periph_clocks[] __initdata = {  static struct clk_lookup periph_clocks_lookups[] = {  	/* One additional fake clock for ohci */  	CLKDEV_CON_ID("ohci_clk", &uhphs_clk), -	CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci.0", &uhphs_clk), -	CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc.0", &utmi_clk), -	CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc.0", &udphs_clk), -	CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), -	CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1", &mmc1_clk), +	CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci", &uhphs_clk), +	CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk), +	CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk), +	CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.0", &mmc0_clk), +	CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.1", &mmc1_clk),  	CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk),  	CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),  	CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb0_clk), diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 05674865bc2..600bffb01ed 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c @@ -1550,7 +1550,7 @@ void __init at91_set_serial_console(unsigned portnr)  {  	if (portnr < ATMEL_MAX_UART) {  		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9g45_set_console_clock(portnr); +		at91sam9g45_set_console_clock(at91_uarts[portnr]->id);  	}  } diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c index 1a40f16b66c..29dff18ed13 100644 --- a/arch/arm/mach-at91/at91sam9rl.c +++ b/arch/arm/mach-at91/at91sam9rl.c @@ -191,8 +191,8 @@ static struct clk *periph_clocks[] __initdata = {  };  static struct clk_lookup periph_clocks_lookups[] = { -	CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc.0", &utmi_clk), -	CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc.0", &udphs_clk), +	CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk), +	CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk),  	CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk),  	CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk),  	CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk), diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index c296045f2b6..aacb19dc922 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c @@ -1168,7 +1168,7 @@ void __init at91_set_serial_console(unsigned portnr)  {  	if (portnr < ATMEL_MAX_UART) {  		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9rl_set_console_clock(portnr); +		at91sam9rl_set_console_clock(at91_uarts[portnr]->id);  	}  } diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c index 1904fdf8761..cdb65d48325 100644 --- a/arch/arm/mach-at91/board-cap9adk.c +++ b/arch/arm/mach-at91/board-cap9adk.c @@ -215,7 +215,7 @@ static void __init cap9adk_add_device_nand(void)  	csa = at91_sys_read(AT91_MATRIX_EBICSA);  	at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V); -	cap9adk_nand_data.bus_width_16 = !board_have_nand_8bit(); +	cap9adk_nand_data.bus_width_16 = board_have_nand_16bit();  	/* setup bus-width (8 or 16) */  	if (cap9adk_nand_data.bus_width_16)  		cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_16; diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/board-sam9260ek.c index d600dc12322..5c240743c5b 100644 --- a/arch/arm/mach-at91/board-sam9260ek.c +++ b/arch/arm/mach-at91/board-sam9260ek.c @@ -214,7 +214,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {  static void __init ek_add_device_nand(void)  { -	ek_nand_data.bus_width_16 = !board_have_nand_8bit(); +	ek_nand_data.bus_width_16 = board_have_nand_16bit();  	/* setup bus-width (8 or 16) */  	if (ek_nand_data.bus_width_16)  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16; diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c index f897f84d43d..b60c22b6e24 100644 --- a/arch/arm/mach-at91/board-sam9261ek.c +++ b/arch/arm/mach-at91/board-sam9261ek.c @@ -220,7 +220,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {  static void __init ek_add_device_nand(void)  { -	ek_nand_data.bus_width_16 = !board_have_nand_8bit(); +	ek_nand_data.bus_width_16 = board_have_nand_16bit();  	/* setup bus-width (8 or 16) */  	if (ek_nand_data.bus_width_16)  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16; diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c index 605b26f40a4..9bbdc92ea19 100644 --- a/arch/arm/mach-at91/board-sam9263ek.c +++ b/arch/arm/mach-at91/board-sam9263ek.c @@ -221,7 +221,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {  static void __init ek_add_device_nand(void)  { -	ek_nand_data.bus_width_16 = !board_have_nand_8bit(); +	ek_nand_data.bus_width_16 = board_have_nand_16bit();  	/* setup bus-width (8 or 16) */  	if (ek_nand_data.bus_width_16)  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16; diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index 7624cf0d006..1325a50101a 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c @@ -198,7 +198,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {  static void __init ek_add_device_nand(void)  { -	ek_nand_data.bus_width_16 = !board_have_nand_8bit(); +	ek_nand_data.bus_width_16 = board_have_nand_16bit();  	/* setup bus-width (8 or 16) */  	if (ek_nand_data.bus_width_16)  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16; diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index 063c95d0e8f..33eaa135f24 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c @@ -178,7 +178,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {  static void __init ek_add_device_nand(void)  { -	ek_nand_data.bus_width_16 = !board_have_nand_8bit(); +	ek_nand_data.bus_width_16 = board_have_nand_16bit();  	/* setup bus-width (8 or 16) */  	if (ek_nand_data.bus_width_16)  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16; diff --git a/arch/arm/mach-at91/include/mach/system_rev.h b/arch/arm/mach-at91/include/mach/system_rev.h index b855ee75f72..8f4866045b4 100644 --- a/arch/arm/mach-at91/include/mach/system_rev.h +++ b/arch/arm/mach-at91/include/mach/system_rev.h @@ -13,13 +13,13 @@   * the 16-31 bit are reserved for at91 generic information   *   * bit 31: - *	0 => nand 16 bit - *	1 => nand 8 bit + *	0 => nand 8 bit + *	1 => nand 16 bit   */ -#define BOARD_HAVE_NAND_8BIT	(1 << 31) -static int inline board_have_nand_8bit(void) +#define BOARD_HAVE_NAND_16BIT	(1 << 31) +static inline int board_have_nand_16bit(void)  { -	return system_rev & BOARD_HAVE_NAND_8BIT; +	return system_rev & BOARD_HAVE_NAND_16BIT;  }  #endif /* __ARCH_SYSTEM_REV_H__ */ diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c index 4e66881c7ae..fc4e98ea754 100644 --- a/arch/arm/mach-davinci/devices-da8xx.c +++ b/arch/arm/mach-davinci/devices-da8xx.c @@ -494,7 +494,7 @@ static struct platform_device da850_mcasp_device = {  	.resource	= da850_mcasp_resources,  }; -struct platform_device davinci_pcm_device = { +static struct platform_device davinci_pcm_device = {  	.name	= "davinci-pcm-audio",  	.id	= -1,  }; diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c index 8f4f736aa26..806a2f02b98 100644 --- a/arch/arm/mach-davinci/devices.c +++ b/arch/arm/mach-davinci/devices.c @@ -298,7 +298,7 @@ static void davinci_init_wdt(void)  /*-------------------------------------------------------------------------*/ -struct platform_device davinci_pcm_device = { +static struct platform_device davinci_pcm_device = {  	.name		= "davinci-pcm-audio",  	.id		= -1,  }; diff --git a/arch/arm/mach-davinci/gpio.c b/arch/arm/mach-davinci/gpio.c index a0b838894ac..e7221398e5a 100644 --- a/arch/arm/mach-davinci/gpio.c +++ b/arch/arm/mach-davinci/gpio.c @@ -252,9 +252,11 @@ static struct irq_chip gpio_irqchip = {  static void  gpio_irq_handler(unsigned irq, struct irq_desc *desc)  { -	struct davinci_gpio_regs __iomem *g = irq2regs(irq); +	struct davinci_gpio_regs __iomem *g;  	u32 mask = 0xffff; +	g = (__force struct davinci_gpio_regs __iomem *) irq_desc_get_handler_data(desc); +  	/* we only care about one bank */  	if (irq & 1)  		mask <<= 16; @@ -422,8 +424,7 @@ static int __init davinci_gpio_irq_setup(void)  		/* set up all irqs in this bank */  		irq_set_chained_handler(bank_irq, gpio_irq_handler); -		irq_set_chip_data(bank_irq, (__force void *)g); -		irq_set_handler_data(bank_irq, (void *)irq); +		irq_set_handler_data(bank_irq, (__force void *)g);  		for (i = 0; i < 16 && gpio < ngpio; i++, irq++, gpio++) {  			irq_set_chip(irq, &gpio_irqchip); diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index 82079545adc..6659a0d137a 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c @@ -251,9 +251,9 @@ static void ep93xx_uart_set_mctrl(struct amba_device *dev,  	unsigned int mcr;  	mcr = 0; -	if (!(mctrl & TIOCM_RTS)) +	if (mctrl & TIOCM_RTS)  		mcr |= 2; -	if (!(mctrl & TIOCM_DTR)) +	if (mctrl & TIOCM_DTR)  		mcr |= 1;  	__raw_writel(mcr, base + EP93XX_UART_MCR_OFFSET); @@ -402,11 +402,15 @@ static struct resource ep93xx_eth_resource[] = {  	}  }; +static u64 ep93xx_eth_dma_mask = DMA_BIT_MASK(32); +  static struct platform_device ep93xx_eth_device = {  	.name		= "ep93xx-eth",  	.id		= -1,  	.dev		= { -		.platform_data	= &ep93xx_eth_data, +		.platform_data		= &ep93xx_eth_data, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +		.dma_mask		= &ep93xx_eth_dma_mask,  	},  	.num_resources	= ARRAY_SIZE(ep93xx_eth_resource),  	.resource	= ep93xx_eth_resource, diff --git a/arch/arm/mach-exynos4/Kconfig b/arch/arm/mach-exynos4/Kconfig index b92c1e55714..1435fc31c4b 100644 --- a/arch/arm/mach-exynos4/Kconfig +++ b/arch/arm/mach-exynos4/Kconfig @@ -91,6 +91,11 @@ config EXYNOS4_SETUP_FIMC  	help  	  Common setup code for the camera interfaces. +config EXYNOS4_SETUP_USB_PHY +	bool +	help +	  Common setup code for USB PHY controller +  # machine support  menu "EXYNOS4 Machines" @@ -176,6 +181,7 @@ config MACH_NURI  	select EXYNOS4_SETUP_I2C3  	select EXYNOS4_SETUP_I2C5  	select EXYNOS4_SETUP_SDHCI +	select EXYNOS4_SETUP_USB_PHY  	select SAMSUNG_DEV_PWM  	help  	  Machine support for Samsung Mobile NURI Board. diff --git a/arch/arm/mach-exynos4/Makefile b/arch/arm/mach-exynos4/Makefile index a9bb94fabaa..60fe5ecf359 100644 --- a/arch/arm/mach-exynos4/Makefile +++ b/arch/arm/mach-exynos4/Makefile @@ -56,4 +56,4 @@ obj-$(CONFIG_EXYNOS4_SETUP_KEYPAD)	+= setup-keypad.o  obj-$(CONFIG_EXYNOS4_SETUP_SDHCI)	+= setup-sdhci.o  obj-$(CONFIG_EXYNOS4_SETUP_SDHCI_GPIO)	+= setup-sdhci-gpio.o -obj-$(CONFIG_USB_SUPPORT)		+= usb-phy.o +obj-$(CONFIG_EXYNOS4_SETUP_USB_PHY)	+= setup-usb-phy.o diff --git a/arch/arm/mach-exynos4/cpu.c b/arch/arm/mach-exynos4/cpu.c index 08813a6f66b..bfd621460ab 100644 --- a/arch/arm/mach-exynos4/cpu.c +++ b/arch/arm/mach-exynos4/cpu.c @@ -23,6 +23,7 @@  #include <plat/sdhci.h>  #include <plat/devs.h>  #include <plat/fimc-core.h> +#include <plat/iic-core.h>  #include <mach/regs-irq.h> @@ -98,7 +99,7 @@ static struct map_desc exynos4_iodesc[] __initdata = {  		.length		= SZ_4K,  		.type		= MT_DEVICE,  	}, { -		.virtual	= (unsigned long)S5P_VA_USB_HSPHY, +		.virtual	= (unsigned long)S3C_VA_USB_HSPHY,  		.pfn		= __phys_to_pfn(EXYNOS4_PA_HSPHY),  		.length		= SZ_4K,  		.type		= MT_DEVICE, @@ -132,6 +133,11 @@ void __init exynos4_map_io(void)  	s3c_fimc_setname(1, "exynos4-fimc");  	s3c_fimc_setname(2, "exynos4-fimc");  	s3c_fimc_setname(3, "exynos4-fimc"); + +	/* The I2C bus controllers are directly compatible with s3c2440 */ +	s3c_i2c0_setname("s3c2440-i2c"); +	s3c_i2c1_setname("s3c2440-i2c"); +	s3c_i2c2_setname("s3c2440-i2c");  }  void __init exynos4_init_clocks(int xtal) diff --git a/arch/arm/mach-exynos4/dev-audio.c b/arch/arm/mach-exynos4/dev-audio.c index 1eed5f9f7bd..983069a5323 100644 --- a/arch/arm/mach-exynos4/dev-audio.c +++ b/arch/arm/mach-exynos4/dev-audio.c @@ -330,7 +330,7 @@ struct platform_device exynos4_device_ac97 = {  static int exynos4_spdif_cfg_gpio(struct platform_device *pdev)  { -	s3c_gpio_cfgpin_range(EXYNOS4_GPC1(0), 2, S3C_GPIO_SFN(3)); +	s3c_gpio_cfgpin_range(EXYNOS4_GPC1(0), 2, S3C_GPIO_SFN(4));  	return 0;  } diff --git a/arch/arm/mach-exynos4/headsmp.S b/arch/arm/mach-exynos4/headsmp.S index 6c6cfc50c46..3cdeb364754 100644 --- a/arch/arm/mach-exynos4/headsmp.S +++ b/arch/arm/mach-exynos4/headsmp.S @@ -13,7 +13,7 @@  #include <linux/linkage.h>  #include <linux/init.h> -	__INIT +	__CPUINIT  /*   * exynos4 specific entry point for secondary CPUs.  This provides diff --git a/arch/arm/mach-exynos4/include/mach/regs-usb-phy.h b/arch/arm/mach-exynos4/include/mach/regs-usb-phy.h index 703118d5173..c337cf3a71b 100644 --- a/arch/arm/mach-exynos4/include/mach/regs-usb-phy.h +++ b/arch/arm/mach-exynos4/include/mach/regs-usb-phy.h @@ -11,7 +11,7 @@  #ifndef __PLAT_S5P_REGS_USB_PHY_H  #define __PLAT_S5P_REGS_USB_PHY_H -#define EXYNOS4_HSOTG_PHYREG(x)		((x) + S5P_VA_USB_HSPHY) +#define EXYNOS4_HSOTG_PHYREG(x)		((x) + S3C_VA_USB_HSPHY)  #define EXYNOS4_PHYPWR			EXYNOS4_HSOTG_PHYREG(0x00)  #define PHY1_HSIC_NORMAL_MASK		(0xf << 9) diff --git a/arch/arm/mach-exynos4/init.c b/arch/arm/mach-exynos4/init.c index cf91f50e43a..a8a83e3881a 100644 --- a/arch/arm/mach-exynos4/init.c +++ b/arch/arm/mach-exynos4/init.c @@ -35,6 +35,7 @@ void __init exynos4_common_init_uarts(struct s3c2410_uartcfg *cfg, int no)  			tcfg->clocks = exynos4_serial_clocks;  			tcfg->clocks_size = ARRAY_SIZE(exynos4_serial_clocks);  		} +		tcfg->flags |= NO_NEED_CHECK_CLKSRC;  	}  	s3c24xx_init_uartdevs("s5pv210-uart", s5p_uart_resources, cfg, no); diff --git a/arch/arm/mach-exynos4/mach-smdkv310.c b/arch/arm/mach-exynos4/mach-smdkv310.c index 152676471b6..edd814110da 100644 --- a/arch/arm/mach-exynos4/mach-smdkv310.c +++ b/arch/arm/mach-exynos4/mach-smdkv310.c @@ -78,9 +78,7 @@ static struct s3c2410_uartcfg smdkv310_uartcfgs[] __initdata = {  };  static struct s3c_sdhci_platdata smdkv310_hsmmc0_pdata __initdata = { -	.cd_type		= S3C_SDHCI_CD_GPIO, -	.ext_cd_gpio		= EXYNOS4_GPK0(2), -	.ext_cd_gpio_invert	= 1, +	.cd_type		= S3C_SDHCI_CD_INTERNAL,  	.clk_type		= S3C_SDHCI_CLK_DIV_EXTERNAL,  #ifdef CONFIG_EXYNOS4_SDHCI_CH0_8BIT  	.max_width		= 8, @@ -96,9 +94,7 @@ static struct s3c_sdhci_platdata smdkv310_hsmmc1_pdata __initdata = {  };  static struct s3c_sdhci_platdata smdkv310_hsmmc2_pdata __initdata = { -	.cd_type		= S3C_SDHCI_CD_GPIO, -	.ext_cd_gpio		= EXYNOS4_GPK2(2), -	.ext_cd_gpio_invert	= 1, +	.cd_type		= S3C_SDHCI_CD_INTERNAL,  	.clk_type		= S3C_SDHCI_CLK_DIV_EXTERNAL,  #ifdef CONFIG_EXYNOS4_SDHCI_CH2_8BIT  	.max_width		= 8, diff --git a/arch/arm/mach-exynos4/usb-phy.c b/arch/arm/mach-exynos4/setup-usb-phy.c index 0883c1b824b..0883c1b824b 100644 --- a/arch/arm/mach-exynos4/usb-phy.c +++ b/arch/arm/mach-exynos4/setup-usb-phy.c diff --git a/arch/arm/mach-exynos4/time.c b/arch/arm/mach-exynos4/time.c index 86b9fa0d363..ebb8f38d540 100644 --- a/arch/arm/mach-exynos4/time.c +++ b/arch/arm/mach-exynos4/time.c @@ -206,6 +206,7 @@ static cycle_t exynos4_pwm4_read(struct clocksource *cs)  	return (cycle_t) ~__raw_readl(S3C_TIMERREG(0x40));  } +#ifdef CONFIG_PM  static void exynos4_pwm4_resume(struct clocksource *cs)  {  	unsigned long pclk; @@ -218,6 +219,7 @@ static void exynos4_pwm4_resume(struct clocksource *cs)  	exynos4_pwm_init(4, ~0);  	exynos4_pwm_start(4, 1);  } +#endif  struct clocksource pwm_clocksource = {  	.name		= "pwm_timer4", diff --git a/arch/arm/mach-footbridge/dc21285-timer.c b/arch/arm/mach-footbridge/dc21285-timer.c index 5f1f9867fc7..121ad1d4fa3 100644 --- a/arch/arm/mach-footbridge/dc21285-timer.c +++ b/arch/arm/mach-footbridge/dc21285-timer.c @@ -103,6 +103,7 @@ static void __init footbridge_timer_init(void)  	clockevents_calc_mult_shift(ce, mem_fclk_21285, 5);  	ce->max_delta_ns = clockevent_delta2ns(0xffffff, ce);  	ce->min_delta_ns = clockevent_delta2ns(0x000004, ce); +	ce->cpumask = cpumask_of(smp_processor_id());  	clockevents_register_device(ce);  } diff --git a/arch/arm/mach-footbridge/include/mach/debug-macro.S b/arch/arm/mach-footbridge/include/mach/debug-macro.S index 30b971d6581..1be2eeb7a0a 100644 --- a/arch/arm/mach-footbridge/include/mach/debug-macro.S +++ b/arch/arm/mach-footbridge/include/mach/debug-macro.S @@ -26,6 +26,7 @@  #include <asm/hardware/debug-8250.S>  #else +#include <mach/hardware.h>  	/* For EBSA285 debugging */  		.equ	dc21285_high, ARMCSR_BASE & 0xff000000  		.equ	dc21285_low,  ARMCSR_BASE & 0x00ffffff @@ -36,8 +37,8 @@  		.else  		mov	\rp, #0  		.endif -		orr	\rv, \rp, #0x42000000 -		orr	\rp, \rp, #dc21285_high +		orr	\rv, \rp, #dc21285_high +		orr	\rp, \rp, #0x42000000  		.endm  		.macro	senduart,rd,rx diff --git a/arch/arm/mach-h720x/Kconfig b/arch/arm/mach-h720x/Kconfig index 9b6982efbd2..abf356c0234 100644 --- a/arch/arm/mach-h720x/Kconfig +++ b/arch/arm/mach-h720x/Kconfig @@ -6,12 +6,14 @@ config ARCH_H7201  	bool "gms30c7201"  	depends on ARCH_H720X  	select CPU_H7201 +	select ZONE_DMA  	help  	  Say Y here if you are using the Hynix GMS30C7201 Reference Board  config ARCH_H7202  	bool "hms30c7202"  	select CPU_H7202 +	select ZONE_DMA  	depends on ARCH_H720X  	help  	  Say Y here if you are using the Hynix HMS30C7202 Reference Board diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c index 38b95e949d1..63621f152c9 100644 --- a/arch/arm/mach-msm/timer.c +++ b/arch/arm/mach-msm/timer.c @@ -23,6 +23,8 @@  #include <linux/io.h>  #include <asm/mach/time.h> +#include <asm/hardware/gic.h> +  #include <mach/msm_iomap.h>  #include <mach/cpu.h> @@ -55,10 +57,12 @@ enum timer_location {  #if defined(CONFIG_ARCH_QSD8X50)  #define DGT_HZ (19200000 / 4) /* 19.2 MHz / 4 by default */  #define MSM_DGT_SHIFT (0) -#elif defined(CONFIG_ARCH_MSM7X30) || defined(CONFIG_ARCH_MSM8X60) || \ -				      defined(CONFIG_ARCH_MSM8960) +#elif defined(CONFIG_ARCH_MSM7X30)  #define DGT_HZ (24576000 / 4) /* 24.576 MHz (LPXO) / 4 by default */  #define MSM_DGT_SHIFT (0) +#elif defined(CONFIG_ARCH_MSM8X60) || defined(CONFIG_ARCH_MSM8960) +#define DGT_HZ (27000000 / 4) /* 27 MHz (PXO) / 4 by default */ +#define MSM_DGT_SHIFT (0)  #else  #define DGT_HZ 19200000 /* 19.2 MHz or 600 KHz after shift */  #define MSM_DGT_SHIFT (5) @@ -100,7 +104,11 @@ static cycle_t msm_read_timer_count(struct clocksource *cs)  {  	struct msm_clock *clk = container_of(cs, struct msm_clock, clocksource); -	return readl(clk->global_counter); +	/* +	 * Shift timer count down by a constant due to unreliable lower bits +	 * on some targets. +	 */ +	return readl(clk->global_counter) >> clk->shift;  }  static struct msm_clock *clockevent_to_clock(struct clock_event_device *evt) diff --git a/arch/arm/mach-mxs/ocotp.c b/arch/arm/mach-mxs/ocotp.c index 65157a35dbb..54add60f94c 100644 --- a/arch/arm/mach-mxs/ocotp.c +++ b/arch/arm/mach-mxs/ocotp.c @@ -16,6 +16,8 @@  #include <linux/err.h>  #include <linux/mutex.h> +#include <asm/processor.h>	/* for cpu_relax() */ +  #include <mach/mxs.h>  #define OCOTP_WORD_OFFSET		0x20 diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile index af98117043d..5b114d1558c 100644 --- a/arch/arm/mach-omap1/Makefile +++ b/arch/arm/mach-omap1/Makefile @@ -4,14 +4,14 @@  # Common support  obj-y := io.o id.o sram.o time.o irq.o mux.o flash.o serial.o devices.o dma.o -obj-y += clock.o clock_data.o opp_data.o reset.o +obj-y += clock.o clock_data.o opp_data.o reset.o pm_bus.o  obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o  obj-$(CONFIG_OMAP_32K_TIMER)	+= timer32k.o  # Power Management -obj-$(CONFIG_PM) += pm.o sleep.o pm_bus.o +obj-$(CONFIG_PM) += pm.o sleep.o  # DSP  obj-$(CONFIG_OMAP_MBOX_FWK)	+= mailbox_mach.o diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index de88c9297b6..f49ce85d244 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c @@ -215,7 +215,7 @@ static struct omap_kp_platform_data ams_delta_kp_data __initdata = {  	.delay		= 9,  }; -static struct platform_device ams_delta_kp_device __initdata = { +static struct platform_device ams_delta_kp_device = {  	.name		= "omap-keypad",  	.id		= -1,  	.dev		= { @@ -225,12 +225,12 @@ static struct platform_device ams_delta_kp_device __initdata = {  	.resource	= ams_delta_kp_resources,  }; -static struct platform_device ams_delta_lcd_device __initdata = { +static struct platform_device ams_delta_lcd_device = {  	.name	= "lcd_ams_delta",  	.id	= -1,  }; -static struct platform_device ams_delta_led_device __initdata = { +static struct platform_device ams_delta_led_device = {  	.name	= "ams-delta-led",  	.id	= -1  }; @@ -267,7 +267,7 @@ static struct soc_camera_link ams_delta_iclink = {  	.power		= ams_delta_camera_power,  }; -static struct platform_device ams_delta_camera_device __initdata = { +static struct platform_device ams_delta_camera_device = {  	.name   = "soc-camera-pdrv",  	.id     = 0,  	.dev    = { diff --git a/arch/arm/mach-omap1/gpio15xx.c b/arch/arm/mach-omap1/gpio15xx.c index 04c4b04cf54..364137c2042 100644 --- a/arch/arm/mach-omap1/gpio15xx.c +++ b/arch/arm/mach-omap1/gpio15xx.c @@ -41,7 +41,7 @@ static struct __initdata omap_gpio_platform_data omap15xx_mpu_gpio_config = {  	.bank_stride		= 1,  }; -static struct __initdata platform_device omap15xx_mpu_gpio = { +static struct platform_device omap15xx_mpu_gpio = {  	.name           = "omap_gpio",  	.id             = 0,  	.dev            = { @@ -70,7 +70,7 @@ static struct __initdata omap_gpio_platform_data omap15xx_gpio_config = {  	.bank_width		= 16,  }; -static struct __initdata platform_device omap15xx_gpio = { +static struct platform_device omap15xx_gpio = {  	.name           = "omap_gpio",  	.id             = 1,  	.dev            = { diff --git a/arch/arm/mach-omap1/gpio16xx.c b/arch/arm/mach-omap1/gpio16xx.c index 5dd0d4c82b2..293a246e282 100644 --- a/arch/arm/mach-omap1/gpio16xx.c +++ b/arch/arm/mach-omap1/gpio16xx.c @@ -44,7 +44,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_mpu_gpio_config = {  	.bank_stride		= 1,  }; -static struct __initdata platform_device omap16xx_mpu_gpio = { +static struct platform_device omap16xx_mpu_gpio = {  	.name           = "omap_gpio",  	.id             = 0,  	.dev            = { @@ -73,7 +73,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_gpio1_config = {  	.bank_width		= 16,  }; -static struct __initdata platform_device omap16xx_gpio1 = { +static struct platform_device omap16xx_gpio1 = {  	.name           = "omap_gpio",  	.id             = 1,  	.dev            = { @@ -102,7 +102,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_gpio2_config = {  	.bank_width		= 16,  }; -static struct __initdata platform_device omap16xx_gpio2 = { +static struct platform_device omap16xx_gpio2 = {  	.name           = "omap_gpio",  	.id             = 2,  	.dev            = { @@ -131,7 +131,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_gpio3_config = {  	.bank_width		= 16,  }; -static struct __initdata platform_device omap16xx_gpio3 = { +static struct platform_device omap16xx_gpio3 = {  	.name           = "omap_gpio",  	.id             = 3,  	.dev            = { @@ -160,7 +160,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_gpio4_config = {  	.bank_width		= 16,  }; -static struct __initdata platform_device omap16xx_gpio4 = { +static struct platform_device omap16xx_gpio4 = {  	.name           = "omap_gpio",  	.id             = 4,  	.dev            = { diff --git a/arch/arm/mach-omap1/gpio7xx.c b/arch/arm/mach-omap1/gpio7xx.c index 1204c8b871a..c6ad248d63a 100644 --- a/arch/arm/mach-omap1/gpio7xx.c +++ b/arch/arm/mach-omap1/gpio7xx.c @@ -46,7 +46,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_mpu_gpio_config = {  	.bank_stride		= 2,  }; -static struct __initdata platform_device omap7xx_mpu_gpio = { +static struct platform_device omap7xx_mpu_gpio = {  	.name           = "omap_gpio",  	.id             = 0,  	.dev            = { @@ -75,7 +75,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio1_config = {  	.bank_width		= 32,  }; -static struct __initdata platform_device omap7xx_gpio1 = { +static struct platform_device omap7xx_gpio1 = {  	.name           = "omap_gpio",  	.id             = 1,  	.dev            = { @@ -104,7 +104,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio2_config = {  	.bank_width		= 32,  }; -static struct __initdata platform_device omap7xx_gpio2 = { +static struct platform_device omap7xx_gpio2 = {  	.name           = "omap_gpio",  	.id             = 2,  	.dev            = { @@ -133,7 +133,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio3_config = {  	.bank_width		= 32,  }; -static struct __initdata platform_device omap7xx_gpio3 = { +static struct platform_device omap7xx_gpio3 = {  	.name           = "omap_gpio",  	.id             = 3,  	.dev            = { @@ -162,7 +162,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio4_config = {  	.bank_width		= 32,  }; -static struct __initdata platform_device omap7xx_gpio4 = { +static struct platform_device omap7xx_gpio4 = {  	.name           = "omap_gpio",  	.id             = 4,  	.dev            = { @@ -191,7 +191,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio5_config = {  	.bank_width		= 32,  }; -static struct __initdata platform_device omap7xx_gpio5 = { +static struct platform_device omap7xx_gpio5 = {  	.name           = "omap_gpio",  	.id             = 5,  	.dev            = { @@ -220,7 +220,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio6_config = {  	.bank_width		= 32,  }; -static struct __initdata platform_device omap7xx_gpio6 = { +static struct platform_device omap7xx_gpio6 = {  	.name           = "omap_gpio",  	.id             = 6,  	.dev            = { diff --git a/arch/arm/mach-omap1/pm_bus.c b/arch/arm/mach-omap1/pm_bus.c index fe31d933f0e..334fb8871bc 100644 --- a/arch/arm/mach-omap1/pm_bus.c +++ b/arch/arm/mach-omap1/pm_bus.c @@ -56,9 +56,13 @@ static struct dev_power_domain default_power_domain = {  		USE_PLATFORM_PM_SLEEP_OPS  	},  }; +#define OMAP1_PWR_DOMAIN (&default_power_domain) +#else +#define OMAP1_PWR_DOMAIN NULL +#endif /* CONFIG_PM_RUNTIME */  static struct pm_clk_notifier_block platform_bus_notifier = { -	.pwr_domain = &default_power_domain, +	.pwr_domain = OMAP1_PWR_DOMAIN,  	.con_ids = { "ick", "fck", NULL, },  }; @@ -72,4 +76,4 @@ static int __init omap1_pm_runtime_init(void)  	return 0;  }  core_initcall(omap1_pm_runtime_init); -#endif /* CONFIG_PM_RUNTIME */ + diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index 2a0bb4818ca..23f71d40883 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c @@ -84,7 +84,8 @@ static struct mtd_partition omap3pandora_nand_partitions[] = {  static struct omap_nand_platform_data pandora_nand_data = {  	.cs		= 0, -	.devsize	= 1,	/* '0' for 8-bit, '1' for 16-bit device */ +	.devsize	= NAND_BUSWIDTH_16, +	.xfer_type	= NAND_OMAP_PREFETCH_DMA,  	.parts		= omap3pandora_nand_partitions,  	.nr_parts	= ARRAY_SIZE(omap3pandora_nand_partitions),  }; diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index 990366726c5..88bd6f7705f 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c @@ -558,7 +558,7 @@ static struct radio_si4713_platform_data rx51_si4713_data __initdata_or_module =  	.subdev_board_info = &rx51_si4713_board_info,  }; -static struct platform_device rx51_si4713_dev __initdata_or_module = { +static struct platform_device rx51_si4713_dev = {  	.name	= "radio-si4713",  	.id	= -1,  	.dev	= { diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c index a5a83b358dd..e01da45c053 100644 --- a/arch/arm/mach-omap2/pm-debug.c +++ b/arch/arm/mach-omap2/pm-debug.c @@ -189,7 +189,7 @@ static struct dentry *pm_dbg_dir;  static int pm_dbg_init_done; -static int __init pm_dbg_init(void); +static int pm_dbg_init(void);  enum {  	DEBUG_FILE_COUNTERS = 0, @@ -595,7 +595,7 @@ static int option_set(void *data, u64 val)  DEFINE_SIMPLE_ATTRIBUTE(pm_dbg_option_fops, option_get, option_set, "%llu\n"); -static int __init pm_dbg_init(void) +static int pm_dbg_init(void)  {  	int i;  	struct dentry *d; diff --git a/arch/arm/mach-pxa/spitz_pm.c b/arch/arm/mach-pxa/spitz_pm.c index 7fe74067d85..094279aefe9 100644 --- a/arch/arm/mach-pxa/spitz_pm.c +++ b/arch/arm/mach-pxa/spitz_pm.c @@ -14,6 +14,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/delay.h> +#include <linux/gpio.h>  #include <linux/interrupt.h>  #include <linux/platform_device.h>  #include <linux/apm-emulation.h> diff --git a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile index 0d468e96e83..81695353d8f 100644 --- a/arch/arm/mach-s3c2410/Makefile +++ b/arch/arm/mach-s3c2410/Makefile @@ -10,7 +10,6 @@ obj-n				:=  obj-				:=  obj-$(CONFIG_CPU_S3C2410)	+= s3c2410.o -obj-$(CONFIG_CPU_S3C2410)	+= irq.o  obj-$(CONFIG_CPU_S3C2410_DMA)	+= dma.o  obj-$(CONFIG_CPU_S3C2410_DMA)	+= dma.o  obj-$(CONFIG_S3C2410_PM)	+= pm.o sleep.o diff --git a/arch/arm/mach-s3c2410/irq.c b/arch/arm/mach-s3c2410/irq.c deleted file mode 100644 index 2854129f8cc..00000000000 --- a/arch/arm/mach-s3c2410/irq.c +++ /dev/null @@ -1,34 +0,0 @@ -/* linux/arch/arm/mach-s3c2410/irq.c - * - * Copyright (c) 2006 Simtec Electronics - *	Ben Dooks <ben@simtec.co.uk> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - * -*/ - -#include <linux/init.h> -#include <linux/module.h> -#include <linux/interrupt.h> -#include <linux/ioport.h> -#include <linux/syscore_ops.h> - -#include <plat/cpu.h> -#include <plat/pm.h> - -struct syscore_ops s3c24xx_irq_syscore_ops = { -	.suspend	= s3c24xx_irq_suspend, -	.resume		= s3c24xx_irq_resume, -}; diff --git a/arch/arm/mach-s3c2440/mach-mini2440.c b/arch/arm/mach-s3c2440/mach-mini2440.c index dd3120df09f..fc2dc0b3d4f 100644 --- a/arch/arm/mach-s3c2440/mach-mini2440.c +++ b/arch/arm/mach-s3c2440/mach-mini2440.c @@ -552,7 +552,7 @@ struct mini2440_features_t {  	struct platform_device *optional[8];  }; -static void mini2440_parse_features( +static void __init mini2440_parse_features(  		struct mini2440_features_t * features,  		const char * features_str )  { diff --git a/arch/arm/mach-s3c64xx/dev-spi.c b/arch/arm/mach-s3c64xx/dev-spi.c index 82db072cb83..5e6b42089eb 100644 --- a/arch/arm/mach-s3c64xx/dev-spi.c +++ b/arch/arm/mach-s3c64xx/dev-spi.c @@ -88,6 +88,7 @@ static struct s3c64xx_spi_info s3c64xx_spi0_pdata = {  	.cfg_gpio = s3c64xx_spi_cfg_gpio,  	.fifo_lvl_mask = 0x7f,  	.rx_lvl_offset = 13, +	.tx_st_done = 21,  };  static u64 spi_dmamask = DMA_BIT_MASK(32); @@ -132,6 +133,7 @@ static struct s3c64xx_spi_info s3c64xx_spi1_pdata = {  	.cfg_gpio = s3c64xx_spi_cfg_gpio,  	.fifo_lvl_mask = 0x7f,  	.rx_lvl_offset = 13, +	.tx_st_done = 21,  };  struct platform_device s3c64xx_device_spi1 = { diff --git a/arch/arm/mach-s5p64x0/dev-spi.c b/arch/arm/mach-s5p64x0/dev-spi.c index e78ee18c76e..ac825e82632 100644 --- a/arch/arm/mach-s5p64x0/dev-spi.c +++ b/arch/arm/mach-s5p64x0/dev-spi.c @@ -112,12 +112,14 @@ static struct s3c64xx_spi_info s5p6440_spi0_pdata = {  	.cfg_gpio	= s5p6440_spi_cfg_gpio,  	.fifo_lvl_mask	= 0x1ff,  	.rx_lvl_offset	= 15, +	.tx_st_done	= 25,  };  static struct s3c64xx_spi_info s5p6450_spi0_pdata = {  	.cfg_gpio	= s5p6450_spi_cfg_gpio,  	.fifo_lvl_mask	= 0x1ff,  	.rx_lvl_offset	= 15, +	.tx_st_done	= 25,  };  static u64 spi_dmamask = DMA_BIT_MASK(32); @@ -160,12 +162,14 @@ static struct s3c64xx_spi_info s5p6440_spi1_pdata = {  	.cfg_gpio	= s5p6440_spi_cfg_gpio,  	.fifo_lvl_mask	= 0x7f,  	.rx_lvl_offset	= 15, +	.tx_st_done	= 25,  };  static struct s3c64xx_spi_info s5p6450_spi1_pdata = {  	.cfg_gpio	= s5p6450_spi_cfg_gpio,  	.fifo_lvl_mask	= 0x7f,  	.rx_lvl_offset	= 15, +	.tx_st_done	= 25,  };  struct platform_device s5p64x0_device_spi1 = { diff --git a/arch/arm/mach-s5pc100/dev-spi.c b/arch/arm/mach-s5pc100/dev-spi.c index 57b19794d9b..e5d6c4dceb5 100644 --- a/arch/arm/mach-s5pc100/dev-spi.c +++ b/arch/arm/mach-s5pc100/dev-spi.c @@ -15,6 +15,7 @@  #include <mach/dma.h>  #include <mach/map.h>  #include <mach/spi-clocks.h> +#include <mach/irqs.h>  #include <plat/s3c64xx-spi.h>  #include <plat/gpio-cfg.h> @@ -90,6 +91,7 @@ static struct s3c64xx_spi_info s5pc100_spi0_pdata = {  	.fifo_lvl_mask = 0x7f,  	.rx_lvl_offset = 13,  	.high_speed = 1, +	.tx_st_done = 21,  };  static u64 spi_dmamask = DMA_BIT_MASK(32); @@ -134,6 +136,7 @@ static struct s3c64xx_spi_info s5pc100_spi1_pdata = {  	.fifo_lvl_mask = 0x7f,  	.rx_lvl_offset = 13,  	.high_speed = 1, +	.tx_st_done = 21,  };  struct platform_device s5pc100_device_spi1 = { @@ -176,6 +179,7 @@ static struct s3c64xx_spi_info s5pc100_spi2_pdata = {  	.fifo_lvl_mask = 0x7f,  	.rx_lvl_offset = 13,  	.high_speed = 1, +	.tx_st_done = 21,  };  struct platform_device s5pc100_device_spi2 = { diff --git a/arch/arm/mach-s5pv210/cpufreq.c b/arch/arm/mach-s5pv210/cpufreq.c index 22046e2f53c..153af8b359e 100644 --- a/arch/arm/mach-s5pv210/cpufreq.c +++ b/arch/arm/mach-s5pv210/cpufreq.c @@ -101,12 +101,14 @@ static void s5pv210_set_refresh(enum s5pv210_dmc_port ch, unsigned long freq)  	unsigned long tmp, tmp1;  	void __iomem *reg = NULL; -	if (ch == DMC0) +	if (ch == DMC0) {  		reg = (S5P_VA_DMC0 + 0x30); -	else if (ch == DMC1) +	} else if (ch == DMC1) {  		reg = (S5P_VA_DMC1 + 0x30); -	else +	} else {  		printk(KERN_ERR "Cannot find DMC port\n"); +		return; +	}  	/* Find current DRAM frequency */  	tmp = s5pv210_dram_conf[ch].freq; diff --git a/arch/arm/mach-s5pv210/dev-spi.c b/arch/arm/mach-s5pv210/dev-spi.c index e3249a47e3b..eaf9a7bff7a 100644 --- a/arch/arm/mach-s5pv210/dev-spi.c +++ b/arch/arm/mach-s5pv210/dev-spi.c @@ -85,6 +85,7 @@ static struct s3c64xx_spi_info s5pv210_spi0_pdata = {  	.fifo_lvl_mask = 0x1ff,  	.rx_lvl_offset = 15,  	.high_speed = 1, +	.tx_st_done = 25,  };  static u64 spi_dmamask = DMA_BIT_MASK(32); @@ -129,6 +130,7 @@ static struct s3c64xx_spi_info s5pv210_spi1_pdata = {  	.fifo_lvl_mask = 0x7f,  	.rx_lvl_offset = 15,  	.high_speed = 1, +	.tx_st_done = 25,  };  struct platform_device s5pv210_device_spi1 = { diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index c95258c274c..ce5c2513c6c 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c @@ -381,11 +381,9 @@ void ag5evm_sdhi1_set_pwr(struct platform_device *pdev, int state)  	gpio_set_value(GPIO_PORT114, state);  } -static struct sh_mobile_sdhi_info sh_sdhi1_platdata = { -	.dma_slave_tx	= SHDMA_SLAVE_SDHI1_TX, -	.dma_slave_rx	= SHDMA_SLAVE_SDHI1_RX, +static struct sh_mobile_sdhi_info sh_sdhi1_info = {  	.tmio_flags	= TMIO_MMC_WRPROTECT_DISABLE, -	.tmio_caps	= MMC_CAP_NONREMOVABLE, +	.tmio_caps	= MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ,  	.tmio_ocr_mask	= MMC_VDD_32_33 | MMC_VDD_33_34,  	.set_pwr	= ag5evm_sdhi1_set_pwr,  }; @@ -415,7 +413,7 @@ static struct platform_device sdhi1_device = {  	.name		= "sh_mobile_sdhi",  	.id		= 1,  	.dev		= { -		.platform_data	= &sh_sdhi1_platdata, +		.platform_data	= &sh_sdhi1_info,  	},  	.num_resources	= ARRAY_SIZE(sdhi1_resources),  	.resource	= sdhi1_resources, diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index 04bc123938f..bb4e084920b 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c @@ -913,7 +913,7 @@ static struct i2c_board_info imx074_info = {  	I2C_BOARD_INFO("imx074", 0x1a),  }; -struct soc_camera_link imx074_link = { +static struct soc_camera_link imx074_link = {  	.bus_id		= 0,  	.board_info	= &imx074_info,  	.i2c_adapter_id	= 0, diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index 776f20560e7..3802f2afabe 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c @@ -126,7 +126,7 @@   * ------+--------------------+--------------------+-------   * IRQ0  | ICR1A.IRQ0SA=0010  | SDHI2 card detect  | Low   * IRQ6  | ICR1A.IRQ6SA=0011  | Ether(LAN9220)     | High - * IRQ7  | ICR1A.IRQ7SA=0010  | LCD Tuch Panel     | Low + * IRQ7  | ICR1A.IRQ7SA=0010  | LCD Touch Panel    | Low   * IRQ8  | ICR2A.IRQ8SA=0010  | MMC/SD card detect | Low   * IRQ9  | ICR2A.IRQ9SA=0010  | KEY(TCA6408)       | Low   * IRQ21 | ICR4A.IRQ21SA=0011 | Sensor(ADXL345)    | High @@ -165,10 +165,10 @@   * USB1 can become Host by r8a66597, and become Function by renesas_usbhs.   * But don't select both drivers in same time.   * These uses same IRQ number for request_irq(), and aren't supporting - * IRQF_SHARD / IORESOURCE_IRQ_SHAREABLE. + * IRQF_SHARED / IORESOURCE_IRQ_SHAREABLE.   *   * Actually these are old/new version of USB driver. - * This mean its register will be broken if it supports SHARD IRQ, + * This mean its register will be broken if it supports shared IRQ,   */  /* @@ -562,7 +562,121 @@ out:  		clk_put(hdmi_ick);  } -/* USB1 (Host) */ +/* USBHS0 is connected to CN22 which takes a USB Mini-B plug + * + * The sh7372 SoC has IRQ7 set aside for USBHS0 hotplug, + * but on this particular board IRQ7 is already used by + * the touch screen. This leaves us with software polling. + */ +#define USBHS0_POLL_INTERVAL (HZ * 5) + +struct usbhs_private { +	unsigned int usbphyaddr; +	unsigned int usbcrcaddr; +	struct renesas_usbhs_platform_info info; +	struct delayed_work work; +	struct platform_device *pdev; +}; + +#define usbhs_get_priv(pdev)				\ +	container_of(renesas_usbhs_get_info(pdev),	\ +		     struct usbhs_private, info) + +#define usbhs_is_connected(priv)			\ +	(!((1 << 7) & __raw_readw(priv->usbcrcaddr))) + +static int usbhs_get_vbus(struct platform_device *pdev) +{ +	return usbhs_is_connected(usbhs_get_priv(pdev)); +} + +static void usbhs_phy_reset(struct platform_device *pdev) +{ +	struct usbhs_private *priv = usbhs_get_priv(pdev); + +	/* init phy */ +	__raw_writew(0x8a0a, priv->usbcrcaddr); +} + +static int usbhs0_get_id(struct platform_device *pdev) +{ +	return USBHS_GADGET; +} + +static void usbhs0_work_function(struct work_struct *work) +{ +	struct usbhs_private *priv = container_of(work, struct usbhs_private, +						  work.work); + +	renesas_usbhs_call_notify_hotplug(priv->pdev); +	schedule_delayed_work(&priv->work, USBHS0_POLL_INTERVAL); +} + +static int usbhs0_hardware_init(struct platform_device *pdev) +{ +	struct usbhs_private *priv = usbhs_get_priv(pdev); + +	priv->pdev = pdev; +	INIT_DELAYED_WORK(&priv->work, usbhs0_work_function); +	schedule_delayed_work(&priv->work, USBHS0_POLL_INTERVAL); +	return 0; +} + +static void usbhs0_hardware_exit(struct platform_device *pdev) +{ +	struct usbhs_private *priv = usbhs_get_priv(pdev); + +	cancel_delayed_work_sync(&priv->work); +} + +static struct usbhs_private usbhs0_private = { +	.usbcrcaddr	= 0xe605810c,		/* USBCR2 */ +	.info = { +		.platform_callback = { +			.hardware_init	= usbhs0_hardware_init, +			.hardware_exit	= usbhs0_hardware_exit, +			.phy_reset	= usbhs_phy_reset, +			.get_id		= usbhs0_get_id, +			.get_vbus	= usbhs_get_vbus, +		}, +		.driver_param = { +			.buswait_bwait	= 4, +		}, +	}, +}; + +static struct resource usbhs0_resources[] = { +	[0] = { +		.name	= "USBHS0", +		.start	= 0xe6890000, +		.end	= 0xe68900e6 - 1, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= evt2irq(0x1ca0) /* USB0_USB0I0 */, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device usbhs0_device = { +	.name	= "renesas_usbhs", +	.id	= 0, +	.dev = { +		.platform_data		= &usbhs0_private.info, +	}, +	.num_resources	= ARRAY_SIZE(usbhs0_resources), +	.resource	= usbhs0_resources, +}; + +/* USBHS1 is connected to CN31 which takes a USB Mini-AB plug + * + * Use J30 to select between Host and Function. This setting + * can however not be detected by software. Hotplug of USBHS1 + * is provided via IRQ8. + */ +#define IRQ8 evt2irq(0x0300) + +/* USBHS1 USB Host support via r8a66597_hcd */  static void usb1_host_port_power(int port, int power)  {  	if (!power) /* only power-on is supported for now */ @@ -579,9 +693,9 @@ static struct r8a66597_platdata usb1_host_data = {  static struct resource usb1_host_resources[] = {  	[0] = { -		.name	= "USBHS", -		.start	= 0xE68B0000, -		.end	= 0xE68B00E6 - 1, +		.name	= "USBHS1", +		.start	= 0xe68b0000, +		.end	= 0xe68b00e6 - 1,  		.flags	= IORESOURCE_MEM,  	},  	[1] = { @@ -602,37 +716,14 @@ static struct platform_device usb1_host_device = {  	.resource	= usb1_host_resources,  }; -/* USB1 (Function) */ +/* USBHS1 USB Function support via renesas_usbhs */ +  #define USB_PHY_MODE		(1 << 4)  #define USB_PHY_INT_EN		((1 << 3) | (1 << 2))  #define USB_PHY_ON		(1 << 1)  #define USB_PHY_OFF		(1 << 0)  #define USB_PHY_INT_CLR		(USB_PHY_ON | USB_PHY_OFF) -struct usbhs_private { -	unsigned int irq; -	unsigned int usbphyaddr; -	unsigned int usbcrcaddr; -	struct renesas_usbhs_platform_info info; -}; - -#define usbhs_get_priv(pdev)				\ -	container_of(renesas_usbhs_get_info(pdev),	\ -		     struct usbhs_private, info) - -#define usbhs_is_connected(priv)			\ -	(!((1 << 7) & __raw_readw(priv->usbcrcaddr))) - -static int usbhs1_get_id(struct platform_device *pdev) -{ -	return USBHS_GADGET; -} - -static int usbhs1_get_vbus(struct platform_device *pdev) -{ -	return usbhs_is_connected(usbhs_get_priv(pdev)); -} -  static irqreturn_t usbhs1_interrupt(int irq, void *data)  {  	struct platform_device *pdev = data; @@ -654,12 +745,10 @@ static int usbhs1_hardware_init(struct platform_device *pdev)  	struct usbhs_private *priv = usbhs_get_priv(pdev);  	int ret; -	irq_set_irq_type(priv->irq, IRQ_TYPE_LEVEL_HIGH); -  	/* clear interrupt status */  	__raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->usbphyaddr); -	ret = request_irq(priv->irq, usbhs1_interrupt, 0, +	ret = request_irq(IRQ8, usbhs1_interrupt, IRQF_TRIGGER_HIGH,  			  dev_name(&pdev->dev), pdev);  	if (ret) {  		dev_err(&pdev->dev, "request_irq err\n"); @@ -679,15 +768,12 @@ static void usbhs1_hardware_exit(struct platform_device *pdev)  	/* clear interrupt status */  	__raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->usbphyaddr); -	free_irq(priv->irq, pdev); +	free_irq(IRQ8, pdev);  } -static void usbhs1_phy_reset(struct platform_device *pdev) +static int usbhs1_get_id(struct platform_device *pdev)  { -	struct usbhs_private *priv = usbhs_get_priv(pdev); - -	/* init phy */ -	__raw_writew(0x8a0a, priv->usbcrcaddr); +	return USBHS_GADGET;  }  static u32 usbhs1_pipe_cfg[] = { @@ -710,16 +796,15 @@ static u32 usbhs1_pipe_cfg[] = {  };  static struct usbhs_private usbhs1_private = { -	.irq		= evt2irq(0x0300),	/* IRQ8 */ -	.usbphyaddr	= 0xE60581E2,		/* USBPHY1INTAP */ -	.usbcrcaddr	= 0xE6058130,		/* USBCR4 */ +	.usbphyaddr	= 0xe60581e2,		/* USBPHY1INTAP */ +	.usbcrcaddr	= 0xe6058130,		/* USBCR4 */  	.info = {  		.platform_callback = {  			.hardware_init	= usbhs1_hardware_init,  			.hardware_exit	= usbhs1_hardware_exit, -			.phy_reset	= usbhs1_phy_reset,  			.get_id		= usbhs1_get_id, -			.get_vbus	= usbhs1_get_vbus, +			.phy_reset	= usbhs_phy_reset, +			.get_vbus	= usbhs_get_vbus,  		},  		.driver_param = {  			.buswait_bwait	= 4, @@ -731,9 +816,9 @@ static struct usbhs_private usbhs1_private = {  static struct resource usbhs1_resources[] = {  	[0] = { -		.name	= "USBHS", -		.start	= 0xE68B0000, -		.end	= 0xE68B00E6 - 1, +		.name	= "USBHS1", +		.start	= 0xe68b0000, +		.end	= 0xe68b00e6 - 1,  		.flags	= IORESOURCE_MEM,  	},  	[1] = { @@ -752,7 +837,6 @@ static struct platform_device usbhs1_device = {  	.resource	= usbhs1_resources,  }; -  /* LED */  static struct gpio_led mackerel_leds[] = {  	{ @@ -1205,6 +1289,7 @@ static struct platform_device *mackerel_devices[] __initdata = {  	&lcdc_device,  	&usb1_host_device,  	&usbhs1_device, +	&usbhs0_device,  	&leds_device,  	&fsi_device,  	&fsi_ak4643_device, @@ -1301,6 +1386,7 @@ static void __init mackerel_map_io(void)  #define GPIO_PORT9CR	0xE6051009  #define GPIO_PORT10CR	0xE605100A +#define GPIO_PORT167CR	0xE60520A7  #define GPIO_PORT168CR	0xE60520A8  #define SRCR4		0xe61580bc  #define USCCR1		0xE6058144 @@ -1354,17 +1440,17 @@ static void __init mackerel_init(void)  	gpio_request(GPIO_PORT151, NULL); /* LCDDON */  	gpio_direction_output(GPIO_PORT151, 1); -	/* USB enable */ -	gpio_request(GPIO_FN_VBUS0_1,    NULL); -	gpio_request(GPIO_FN_IDIN_1_18,  NULL); -	gpio_request(GPIO_FN_PWEN_1_115, NULL); -	gpio_request(GPIO_FN_OVCN_1_114, NULL); -	gpio_request(GPIO_FN_EXTLP_1,    NULL); -	gpio_request(GPIO_FN_OVCN2_1,    NULL); -	gpio_pull_down(GPIO_PORT168CR); +	/* USBHS0 */ +	gpio_request(GPIO_FN_VBUS0_0, NULL); +	gpio_pull_down(GPIO_PORT168CR); /* VBUS0_0 pull down */ + +	/* USBHS1 */ +	gpio_request(GPIO_FN_VBUS0_1, NULL); +	gpio_pull_down(GPIO_PORT167CR); /* VBUS0_1 pull down */ +	gpio_request(GPIO_FN_IDIN_1_113, NULL); -	/* setup USB phy */ -	__raw_writew(0x8a0a, 0xE6058130);	/* USBCR4 */ +	/* USB phy tweak to make the r8a66597_hcd host driver work */ +	__raw_writew(0x8a0a, 0xe6058130);       /* USBCR4 */  	/* enable FSI2 port A (ak4643) */  	gpio_request(GPIO_FN_FSIAIBT,	NULL); diff --git a/arch/arm/mach-shmobile/intc-sh73a0.c b/arch/arm/mach-shmobile/intc-sh73a0.c index 5d0e1503ece..a911a60e771 100644 --- a/arch/arm/mach-shmobile/intc-sh73a0.c +++ b/arch/arm/mach-shmobile/intc-sh73a0.c @@ -250,6 +250,11 @@ static irqreturn_t sh73a0_intcs_demux(int irq, void *dev_id)  	return IRQ_HANDLED;  } +static int sh73a0_set_wake(struct irq_data *data, unsigned int on) +{ +	return 0; /* always allow wakeup */ +} +  void __init sh73a0_init_irq(void)  {  	void __iomem *gic_dist_base = __io(0xf0001000); @@ -257,6 +262,7 @@ void __init sh73a0_init_irq(void)  	void __iomem *intevtsa = ioremap_nocache(0xffd20100, PAGE_SIZE);  	gic_init(0, 29, gic_dist_base, gic_cpu_base); +	gic_arch_extn.irq_set_wake = sh73a0_set_wake;  	register_intc_controller(&intcs_desc); diff --git a/arch/arm/mach-shmobile/setup-sh7367.c b/arch/arm/mach-shmobile/setup-sh7367.c index 2c10190dbb5..e546017f15d 100644 --- a/arch/arm/mach-shmobile/setup-sh7367.c +++ b/arch/arm/mach-shmobile/setup-sh7367.c @@ -38,7 +38,7 @@ static struct plat_sci_port scif0_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.scscr		= SCSCR_RE | SCSCR_TE,  	.scbrr_algo_id	= SCBRR_ALGO_4, -	.type		= PORT_SCIF, +	.type		= PORT_SCIFA,  	.irqs		= { evt2irq(0xc00), evt2irq(0xc00),  			    evt2irq(0xc00), evt2irq(0xc00) },  }; @@ -57,7 +57,7 @@ static struct plat_sci_port scif1_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.scscr		= SCSCR_RE | SCSCR_TE,  	.scbrr_algo_id	= SCBRR_ALGO_4, -	.type		= PORT_SCIF, +	.type		= PORT_SCIFA,  	.irqs		= { evt2irq(0xc20), evt2irq(0xc20),  			    evt2irq(0xc20), evt2irq(0xc20) },  }; @@ -76,7 +76,7 @@ static struct plat_sci_port scif2_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.scscr		= SCSCR_RE | SCSCR_TE,  	.scbrr_algo_id	= SCBRR_ALGO_4, -	.type		= PORT_SCIF, +	.type		= PORT_SCIFA,  	.irqs		= { evt2irq(0xc40), evt2irq(0xc40),  			    evt2irq(0xc40), evt2irq(0xc40) },  }; @@ -95,7 +95,7 @@ static struct plat_sci_port scif3_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.scscr		= SCSCR_RE | SCSCR_TE,  	.scbrr_algo_id	= SCBRR_ALGO_4, -	.type		= PORT_SCIF, +	.type		= PORT_SCIFA,  	.irqs		= { evt2irq(0xc60), evt2irq(0xc60),  			    evt2irq(0xc60), evt2irq(0xc60) },  }; @@ -114,7 +114,7 @@ static struct plat_sci_port scif4_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.scscr		= SCSCR_RE | SCSCR_TE,  	.scbrr_algo_id	= SCBRR_ALGO_4, -	.type		= PORT_SCIF, +	.type		= PORT_SCIFA,  	.irqs		= { evt2irq(0xd20), evt2irq(0xd20),  			    evt2irq(0xd20), evt2irq(0xd20) },  }; @@ -133,7 +133,7 @@ static struct plat_sci_port scif5_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.scscr		= SCSCR_RE | SCSCR_TE,  	.scbrr_algo_id	= SCBRR_ALGO_4, -	.type		= PORT_SCIF, +	.type		= PORT_SCIFA,  	.irqs		= { evt2irq(0xd40), evt2irq(0xd40),  			    evt2irq(0xd40), evt2irq(0xd40) },  }; @@ -152,7 +152,7 @@ static struct plat_sci_port scif6_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF,  	.scscr		= SCSCR_RE | SCSCR_TE,  	.scbrr_algo_id	= SCBRR_ALGO_4, -	.type		= PORT_SCIF, +	.type		= PORT_SCIFB,  	.irqs		= { evt2irq(0xd60), evt2irq(0xd60),  			    evt2irq(0xd60), evt2irq(0xd60) },  }; diff --git a/arch/arm/mach-u300/clock.h b/arch/arm/mach-u300/clock.h index c34f3ea3017..4f50ca8f901 100644 --- a/arch/arm/mach-u300/clock.h +++ b/arch/arm/mach-u300/clock.h @@ -31,7 +31,7 @@ struct clk {  	bool reset;  	__u16 clk_val;  	__s8 usecount; -	__u32 res_reg; +	void __iomem * res_reg;  	__u16 res_mask;  	bool hw_ctrld; diff --git a/arch/arm/mach-u300/include/mach/u300-regs.h b/arch/arm/mach-u300/include/mach/u300-regs.h index 8b85df4c8d8..035fdc9dbdb 100644 --- a/arch/arm/mach-u300/include/mach/u300-regs.h +++ b/arch/arm/mach-u300/include/mach/u300-regs.h @@ -18,6 +18,12 @@   * the defines are used for setting up the I/O memory mapping.   */ +#ifdef __ASSEMBLER__ +#define IOMEM(a) (a) +#else +#define IOMEM(a) (void __iomem *) a +#endif +  /* NAND Flash CS0 */  #define U300_NAND_CS0_PHYS_BASE		0x80000000 @@ -48,13 +54,6 @@  #endif  /* - * All the following peripherals are specified at their PHYSICAL address, - * so if you need to access them (in the kernel), you MUST use the macros - * defined in <asm/io.h> to map to the IO_ADDRESS_AHB() IO_ADDRESS_FAST() - * etc. - */ - -/*   * AHB peripherals   */ @@ -63,11 +62,11 @@  /* Vectored Interrupt Controller 0, servicing 32 interrupts */  #define U300_INTCON0_BASE		(U300_AHB_PER_PHYS_BASE+0x1000) -#define U300_INTCON0_VBASE		(U300_AHB_PER_VIRT_BASE+0x1000) +#define U300_INTCON0_VBASE		IOMEM(U300_AHB_PER_VIRT_BASE+0x1000)  /* Vectored Interrupt Controller 1, servicing 32 interrupts */  #define U300_INTCON1_BASE		(U300_AHB_PER_PHYS_BASE+0x2000) -#define U300_INTCON1_VBASE		(U300_AHB_PER_VIRT_BASE+0x2000) +#define U300_INTCON1_VBASE		IOMEM(U300_AHB_PER_VIRT_BASE+0x2000)  /* Memory Stick Pro (MSPRO) controller */  #define U300_MSPRO_BASE			(U300_AHB_PER_PHYS_BASE+0x3000) @@ -115,7 +114,7 @@  /* SYSCON */  #define U300_SYSCON_BASE		(U300_SLOW_PER_PHYS_BASE+0x1000) -#define U300_SYSCON_VBASE		(U300_SLOW_PER_VIRT_BASE+0x1000) +#define U300_SYSCON_VBASE		IOMEM(U300_SLOW_PER_VIRT_BASE+0x1000)  /* Watchdog */  #define U300_WDOG_BASE			(U300_SLOW_PER_PHYS_BASE+0x2000) @@ -125,7 +124,7 @@  /* APP side special timer */  #define U300_TIMER_APP_BASE		(U300_SLOW_PER_PHYS_BASE+0x4000) -#define U300_TIMER_APP_VBASE		(U300_SLOW_PER_VIRT_BASE+0x4000) +#define U300_TIMER_APP_VBASE		IOMEM(U300_SLOW_PER_VIRT_BASE+0x4000)  /* Keypad */  #define U300_KEYPAD_BASE		(U300_SLOW_PER_PHYS_BASE+0x5000) @@ -181,5 +180,4 @@   * Virtual accessor macros for static devices   */ -  #endif diff --git a/arch/arm/mach-u300/timer.c b/arch/arm/mach-u300/timer.c index 891cf44591e..18d7fa0603c 100644 --- a/arch/arm/mach-u300/timer.c +++ b/arch/arm/mach-u300/timer.c @@ -411,8 +411,7 @@ static void __init u300_timer_init(void)  	/* Use general purpose timer 2 as clock source */  	if (clocksource_mmio_init(U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT2CC,  			"GPT2", rate, 300, 32, clocksource_mmio_readl_up)) -		printk(KERN_ERR "timer: failed to initialize clock " -		       "source %s\n", clocksource_u300_1mhz.name); +		pr_err("timer: failed to initialize U300 clock source\n");  	clockevents_calc_mult_shift(&clockevent_u300_1mhz,  				    rate, APPTIMER_MIN_RANGE); diff --git a/arch/arm/mach-ux500/board-mop500-pins.c b/arch/arm/mach-ux500/board-mop500-pins.c index fd4cf1ca5ef..70cdbd60596 100644 --- a/arch/arm/mach-ux500/board-mop500-pins.c +++ b/arch/arm/mach-ux500/board-mop500-pins.c @@ -110,10 +110,18 @@ static pin_cfg_t mop500_pins_common[] = {  	GPIO168_KP_O0,  	/* UART */ -	GPIO0_U0_CTSn	| PIN_INPUT_PULLUP, -	GPIO1_U0_RTSn	| PIN_OUTPUT_HIGH, -	GPIO2_U0_RXD	| PIN_INPUT_PULLUP, -	GPIO3_U0_TXD	| PIN_OUTPUT_HIGH, +	/* uart-0 pins gpio configuration should be +	 * kept intact to prevent glitch in tx line +	 * when tty dev is opened. Later these pins +	 * are configured to uart mop500_pins_uart0 +	 * +	 * It will be replaced with uart configuration +	 * once the issue is solved. +	 */ +	GPIO0_GPIO	| PIN_INPUT_PULLUP, +	GPIO1_GPIO	| PIN_OUTPUT_HIGH, +	GPIO2_GPIO	| PIN_INPUT_PULLUP, +	GPIO3_GPIO	| PIN_OUTPUT_HIGH,  	GPIO29_U2_RXD	| PIN_INPUT_PULLUP,  	GPIO30_U2_TXD	| PIN_OUTPUT_HIGH, diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index bb26f40493e..2a08c07dec6 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c @@ -27,18 +27,21 @@  #include <linux/leds-lp5521.h>  #include <linux/input.h>  #include <linux/gpio_keys.h> +#include <linux/delay.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <plat/i2c.h>  #include <plat/ste_dma40.h> +#include <plat/pincfg.h>  #include <mach/hardware.h>  #include <mach/setup.h>  #include <mach/devices.h>  #include <mach/irqs.h> +#include "pins-db8500.h"  #include "ste-dma40-db8500.h"  #include "devices-db8500.h"  #include "board-mop500.h" @@ -393,12 +396,63 @@ static struct stedma40_chan_cfg uart2_dma_cfg_tx = {  };  #endif + +static pin_cfg_t mop500_pins_uart0[] = { +	GPIO0_U0_CTSn   | PIN_INPUT_PULLUP, +	GPIO1_U0_RTSn   | PIN_OUTPUT_HIGH, +	GPIO2_U0_RXD    | PIN_INPUT_PULLUP, +	GPIO3_U0_TXD    | PIN_OUTPUT_HIGH, +}; + +#define PRCC_K_SOFTRST_SET      0x18 +#define PRCC_K_SOFTRST_CLEAR    0x1C +static void ux500_uart0_reset(void) +{ +	void __iomem *prcc_rst_set, *prcc_rst_clr; + +	prcc_rst_set = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE + +			PRCC_K_SOFTRST_SET); +	prcc_rst_clr = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE + +			PRCC_K_SOFTRST_CLEAR); + +	/* Activate soft reset PRCC_K_SOFTRST_CLEAR */ +	writel((readl(prcc_rst_clr) | 0x1), prcc_rst_clr); +	udelay(1); + +	/* Release soft reset PRCC_K_SOFTRST_SET */ +	writel((readl(prcc_rst_set) | 0x1), prcc_rst_set); +	udelay(1); +} + +static void ux500_uart0_init(void) +{ +	int ret; + +	ret = nmk_config_pins(mop500_pins_uart0, +			ARRAY_SIZE(mop500_pins_uart0)); +	if (ret < 0) +		pr_err("pl011: uart pins_enable failed\n"); +} + +static void ux500_uart0_exit(void) +{ +	int ret; + +	ret = nmk_config_pins_sleep(mop500_pins_uart0, +			ARRAY_SIZE(mop500_pins_uart0)); +	if (ret < 0) +		pr_err("pl011: uart pins_disable failed\n"); +} +  static struct amba_pl011_data uart0_plat = {  #ifdef CONFIG_STE_DMA40  	.dma_filter = stedma40_filter,  	.dma_rx_param = &uart0_dma_cfg_rx,  	.dma_tx_param = &uart0_dma_cfg_tx,  #endif +	.init = ux500_uart0_init, +	.exit = ux500_uart0_exit, +	.reset = ux500_uart0_reset,  };  static struct amba_pl011_data uart1_plat = { diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index c3c417656bd..4598b06c8c5 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c @@ -159,6 +159,9 @@ static void __init db8500_add_gpios(void)  		/* No custom data yet */  	}; +	if (cpu_is_u8500v2()) +		pdata.supports_sleepmode = true; +  	dbx500_add_gpios(ARRAY_AND_SIZE(db8500_gpio_base),  			 IRQ_DB8500_GPIO0, &pdata);  } diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index 285edcd2da2..9e6b93b1a04 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c @@ -46,12 +46,6 @@ static struct map_desc v2m_io_desc[] __initdata = {  	},  }; -static void __init v2m_init_early(void) -{ -	ct_desc->init_early(); -	versatile_sched_clock_init(MMIO_P2V(V2M_SYS_24MHZ), 24000000); -} -  static void __init v2m_timer_init(void)  {  	u32 scctrl; @@ -365,6 +359,13 @@ static struct clk_lookup v2m_lookups[] = {  	},  }; +static void __init v2m_init_early(void) +{ +	ct_desc->init_early(); +	clkdev_add_table(v2m_lookups, ARRAY_SIZE(v2m_lookups)); +	versatile_sched_clock_init(MMIO_P2V(V2M_SYS_24MHZ), 24000000); +} +  static void v2m_power_off(void)  {  	if (v2m_cfg_write(SYS_CFG_SHUTDOWN | SYS_CFG_SITE_MB, 0)) @@ -418,8 +419,6 @@ static void __init v2m_init(void)  {  	int i; -	clkdev_add_table(v2m_lookups, ARRAY_SIZE(v2m_lookups)); -  	platform_device_register(&v2m_pcie_i2c_device);  	platform_device_register(&v2m_ddc_i2c_device);  	platform_device_register(&v2m_flash_device); diff --git a/arch/arm/mach-vt8500/irq.c b/arch/arm/mach-vt8500/irq.c index 245140c0df1..642de0408f2 100644 --- a/arch/arm/mach-vt8500/irq.c +++ b/arch/arm/mach-vt8500/irq.c @@ -39,9 +39,10 @@  static void __iomem *ic_regbase;  static void __iomem *sic_regbase; -static void vt8500_irq_mask(unsigned int irq) +static void vt8500_irq_mask(struct irq_data *d)  {  	void __iomem *base = ic_regbase; +	unsigned irq = d->irq;  	u8 edge;  	if (irq >= 64) { @@ -64,9 +65,10 @@ static void vt8500_irq_mask(unsigned int irq)  	}  } -static void vt8500_irq_unmask(unsigned int irq) +static void vt8500_irq_unmask(struct irq_data *d)  {  	void __iomem *base = ic_regbase; +	unsigned irq = d->irq;  	u8 dctr;  	if (irq >= 64) { @@ -78,10 +80,11 @@ static void vt8500_irq_unmask(unsigned int irq)  	writeb(dctr, base + VT8500_IC_DCTR + irq);  } -static int vt8500_irq_set_type(unsigned int irq, unsigned int flow_type) +static int vt8500_irq_set_type(struct irq_data *d, unsigned int flow_type)  {  	void __iomem *base = ic_regbase; -	unsigned int orig_irq = irq; +	unsigned irq = d->irq; +	unsigned orig_irq = irq;  	u8 dctr;  	if (irq >= 64) { @@ -114,11 +117,11 @@ static int vt8500_irq_set_type(unsigned int irq, unsigned int flow_type)  }  static struct irq_chip vt8500_irq_chip = { -	.name      = "vt8500", -	.ack       = vt8500_irq_mask, -	.mask      = vt8500_irq_mask, -	.unmask    = vt8500_irq_unmask, -	.set_type  = vt8500_irq_set_type, +	.name = "vt8500", +	.irq_ack = vt8500_irq_mask, +	.irq_mask = vt8500_irq_mask, +	.irq_unmask = vt8500_irq_unmask, +	.irq_set_type = vt8500_irq_set_type,  };  void __init vt8500_init_irq(void) diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index ef59099a546..44c086710d2 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c @@ -120,17 +120,22 @@ static void l2x0_cache_sync(void)  	spin_unlock_irqrestore(&l2x0_lock, flags);  } -static void l2x0_flush_all(void) +static void __l2x0_flush_all(void)  { -	unsigned long flags; - -	/* clean all ways */ -	spin_lock_irqsave(&l2x0_lock, flags);  	debug_writel(0x03);  	writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_CLEAN_INV_WAY);  	cache_wait_way(l2x0_base + L2X0_CLEAN_INV_WAY, l2x0_way_mask);  	cache_sync();  	debug_writel(0x00); +} + +static void l2x0_flush_all(void) +{ +	unsigned long flags; + +	/* clean all ways */ +	spin_lock_irqsave(&l2x0_lock, flags); +	__l2x0_flush_all();  	spin_unlock_irqrestore(&l2x0_lock, flags);  } @@ -266,7 +271,9 @@ static void l2x0_disable(void)  	unsigned long flags;  	spin_lock_irqsave(&l2x0_lock, flags); -	writel(0, l2x0_base + L2X0_CTRL); +	__l2x0_flush_all(); +	writel_relaxed(0, l2x0_base + L2X0_CTRL); +	dsb();  	spin_unlock_irqrestore(&l2x0_lock, flags);  } diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c index 8bfae964b13..b0ee9ba3cfa 100644 --- a/arch/arm/mm/context.c +++ b/arch/arm/mm/context.c @@ -24,7 +24,9 @@ DEFINE_PER_CPU(struct mm_struct *, current_mm);  /*   * We fork()ed a process, and we need a new context for the child - * to run in. + * to run in.  We reserve version 0 for initial tasks so we will + * always allocate an ASID. The ASID 0 is reserved for the TTBR + * register changing sequence.   */  void __init_new_context(struct task_struct *tsk, struct mm_struct *mm)  { @@ -34,11 +36,8 @@ void __init_new_context(struct task_struct *tsk, struct mm_struct *mm)  static void flush_context(void)  { -	u32 ttb; -	/* Copy TTBR1 into TTBR0 */ -	asm volatile("mrc	p15, 0, %0, c2, c0, 1\n" -		     "mcr	p15, 0, %0, c2, c0, 0" -		     : "=r" (ttb)); +	/* set the reserved ASID before flushing the TLB */ +	asm("mcr	p15, 0, %0, c13, c0, 1\n" : : "r" (0));  	isb();  	local_flush_tlb_all();  	if (icache_is_vivt_asid_tagged()) { @@ -94,7 +93,7 @@ static void reset_context(void *info)  		return;  	smp_rmb(); -	asid = cpu_last_asid + cpu; +	asid = cpu_last_asid + cpu + 1;  	flush_context();  	set_mm_context(mm, asid); @@ -144,13 +143,13 @@ void __new_context(struct mm_struct *mm)  	 * to start a new version and flush the TLB.  	 */  	if (unlikely((asid & ~ASID_MASK) == 0)) { -		asid = cpu_last_asid + smp_processor_id(); +		asid = cpu_last_asid + smp_processor_id() + 1;  		flush_context();  #ifdef CONFIG_SMP  		smp_wmb();  		smp_call_function(reset_context, NULL, 1);  #endif -		cpu_last_asid += NR_CPUS - 1; +		cpu_last_asid += NR_CPUS;  	}  	set_mm_context(mm, asid); diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 2c2cce9cd8c..c19571c40a2 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -331,6 +331,12 @@ void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc)  #endif  #ifdef CONFIG_BLK_DEV_INITRD  	if (phys_initrd_size && +	    !memblock_is_region_memory(phys_initrd_start, phys_initrd_size)) { +		pr_err("INITRD: 0x%08lx+0x%08lx is not a memory region - disabling initrd\n", +		       phys_initrd_start, phys_initrd_size); +		phys_initrd_start = phys_initrd_size = 0; +	} +	if (phys_initrd_size &&  	    memblock_is_region_reserved(phys_initrd_start, phys_initrd_size)) {  		pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region - disabling initrd\n",  		       phys_initrd_start, phys_initrd_size); @@ -635,7 +641,8 @@ void __init mem_init(void)  			"    modules : 0x%08lx - 0x%08lx   (%4ld MB)\n"  			"      .init : 0x%p" " - 0x%p" "   (%4d kB)\n"  			"      .text : 0x%p" " - 0x%p" "   (%4d kB)\n" -			"      .data : 0x%p" " - 0x%p" "   (%4d kB)\n", +			"      .data : 0x%p" " - 0x%p" "   (%4d kB)\n" +			"       .bss : 0x%p" " - 0x%p" "   (%4d kB)\n",  			MLK(UL(CONFIG_VECTORS_BASE), UL(CONFIG_VECTORS_BASE) +  				(PAGE_SIZE)), @@ -657,7 +664,8 @@ void __init mem_init(void)  			MLK_ROUNDUP(__init_begin, __init_end),  			MLK_ROUNDUP(_text, _etext), -			MLK_ROUNDUP(_sdata, _edata)); +			MLK_ROUNDUP(_sdata, _edata), +			MLK_ROUNDUP(__bss_start, __bss_stop));  #undef MLK  #undef MLM diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 9d9e736c2b4..594d677b92c 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -759,7 +759,7 @@ early_param("vmalloc", early_vmalloc);  static phys_addr_t lowmem_limit __initdata = 0; -static void __init sanity_check_meminfo(void) +void __init sanity_check_meminfo(void)  {  	int i, j, highmem = 0; @@ -1032,8 +1032,9 @@ void __init paging_init(struct machine_desc *mdesc)  {  	void *zero_page; +	memblock_set_current_limit(lowmem_limit); +  	build_mem_type_table(); -	sanity_check_meminfo();  	prepare_page_table();  	map_lowmem();  	devicemaps_init(mdesc); diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c index 687d02319a4..941a98c9e8a 100644 --- a/arch/arm/mm/nommu.c +++ b/arch/arm/mm/nommu.c @@ -27,6 +27,10 @@ void __init arm_mm_memblock_reserve(void)  	memblock_reserve(CONFIG_VECTORS_BASE, PAGE_SIZE);  } +void __init sanity_check_meminfo(void) +{ +} +  /*   * paging_init() sets up the page tables, initialises the zone memory   * maps, and sets up the zero page, bad page and bad page tables. diff --git a/arch/arm/mm/proc-arm7tdmi.S b/arch/arm/mm/proc-arm7tdmi.S index e4c165ca669..537ffcb0646 100644 --- a/arch/arm/mm/proc-arm7tdmi.S +++ b/arch/arm/mm/proc-arm7tdmi.S @@ -146,7 +146,7 @@ __arm7tdmi_proc_info:  		.long	0  		.long	0  		.long	v4_cache_fns -		.size	__arm7tdmi_proc_info, . - __arm7dmi_proc_info +		.size	__arm7tdmi_proc_info, . - __arm7tdmi_proc_info  		.type	__triscenda7_proc_info, #object  __triscenda7_proc_info: diff --git a/arch/arm/mm/proc-arm9tdmi.S b/arch/arm/mm/proc-arm9tdmi.S index 7b7ebd4d096..546b54da100 100644 --- a/arch/arm/mm/proc-arm9tdmi.S +++ b/arch/arm/mm/proc-arm9tdmi.S @@ -116,7 +116,7 @@ __arm9tdmi_proc_info:  		.long	0  		.long	0  		.long	v4_cache_fns -		.size	__arm9tdmi_proc_info, . - __arm9dmi_proc_info +		.size	__arm9tdmi_proc_info, . - __arm9tdmi_proc_info  		.type	__p2001_proc_info, #object  __p2001_proc_info: diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index b3b566ec83d..089c0b5e454 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S @@ -108,16 +108,18 @@ ENTRY(cpu_v7_switch_mm)  #ifdef CONFIG_ARM_ERRATA_430973  	mcr	p15, 0, r2, c7, c5, 6		@ flush BTAC/BTB  #endif -	mrc	p15, 0, r2, c2, c0, 1		@ load TTB 1 -	mcr	p15, 0, r2, c2, c0, 0		@ into TTB 0 +#ifdef CONFIG_ARM_ERRATA_754322 +	dsb +#endif +	mcr	p15, 0, r2, c13, c0, 1		@ set reserved context ID +	isb +1:	mcr	p15, 0, r0, c2, c0, 0		@ set TTB 0  	isb  #ifdef CONFIG_ARM_ERRATA_754322  	dsb  #endif  	mcr	p15, 0, r1, c13, c0, 1		@ set context ID  	isb -	mcr	p15, 0, r0, c2, c0, 0		@ set TTB 0 -	isb  #endif  	mov	pc, lr  ENDPROC(cpu_v7_switch_mm) @@ -208,19 +210,21 @@ cpu_v7_name:  /* Suspend/resume support: derived from arch/arm/mach-s5pv210/sleep.S */  .globl	cpu_v7_suspend_size -.equ	cpu_v7_suspend_size, 4 * 8 +.equ	cpu_v7_suspend_size, 4 * 9  #ifdef CONFIG_PM_SLEEP  ENTRY(cpu_v7_do_suspend)  	stmfd	sp!, {r4 - r11, lr}  	mrc	p15, 0, r4, c13, c0, 0	@ FCSE/PID  	mrc	p15, 0, r5, c13, c0, 1	@ Context ID +	mrc	p15, 0, r6, c13, c0, 3	@ User r/o thread ID +	stmia	r0!, {r4 - r6}  	mrc	p15, 0, r6, c3, c0, 0	@ Domain ID  	mrc	p15, 0, r7, c2, c0, 0	@ TTB 0  	mrc	p15, 0, r8, c2, c0, 1	@ TTB 1  	mrc	p15, 0, r9, c1, c0, 0	@ Control register  	mrc	p15, 0, r10, c1, c0, 1	@ Auxiliary control register  	mrc	p15, 0, r11, c1, c0, 2	@ Co-processor access control -	stmia	r0, {r4 - r11} +	stmia	r0, {r6 - r11}  	ldmfd	sp!, {r4 - r11, pc}  ENDPROC(cpu_v7_do_suspend) @@ -228,9 +232,11 @@ ENTRY(cpu_v7_do_resume)  	mov	ip, #0  	mcr	p15, 0, ip, c8, c7, 0	@ invalidate TLBs  	mcr	p15, 0, ip, c7, c5, 0	@ invalidate I cache -	ldmia	r0, {r4 - r11} +	ldmia	r0!, {r4 - r6}  	mcr	p15, 0, r4, c13, c0, 0	@ FCSE/PID  	mcr	p15, 0, r5, c13, c0, 1	@ Context ID +	mcr	p15, 0, r6, c13, c0, 3	@ User r/o thread ID +	ldmia	r0, {r6 - r11}  	mcr	p15, 0, r6, c3, c0, 0	@ Domain ID  	mcr	p15, 0, r7, c2, c0, 0	@ TTB 0  	mcr	p15, 0, r8, c2, c0, 1	@ TTB 1 @@ -416,9 +422,9 @@ ENTRY(v7_processor_functions)  	.word	cpu_v7_dcache_clean_area  	.word	cpu_v7_switch_mm  	.word	cpu_v7_set_pte_ext -	.word	0 -	.word	0 -	.word	0 +	.word	cpu_v7_suspend_size +	.word	cpu_v7_do_suspend +	.word	cpu_v7_do_resume  	.size	v7_processor_functions, . - v7_processor_functions  	.section ".rodata" diff --git a/arch/arm/plat-iop/cp6.c b/arch/arm/plat-iop/cp6.c index 9612a87e2a8..bab73e2c79d 100644 --- a/arch/arm/plat-iop/cp6.c +++ b/arch/arm/plat-iop/cp6.c @@ -18,6 +18,7 @@   */  #include <linux/init.h>  #include <asm/traps.h> +#include <asm/ptrace.h>  static int cp6_trap(struct pt_regs *regs, unsigned int instr)  { diff --git a/arch/arm/plat-mxc/devices/platform-imx-dma.c b/arch/arm/plat-mxc/devices/platform-imx-dma.c index 3538b85ede9..b130f60ca6b 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-dma.c +++ b/arch/arm/plat-mxc/devices/platform-imx-dma.c @@ -139,7 +139,7 @@ static struct sdma_script_start_addrs addr_imx35_to2 = {  #endif  #ifdef CONFIG_SOC_IMX51 -static struct sdma_script_start_addrs addr_imx51_to1 = { +static struct sdma_script_start_addrs addr_imx51 = {  	.ap_2_ap_addr = 642,  	.uart_2_mcu_addr = 817,  	.mcu_2_app_addr = 747, @@ -196,7 +196,9 @@ static int __init imxXX_add_imx_dma(void)  #if defined(CONFIG_SOC_IMX51)  	if (cpu_is_mx51()) { -		imx51_imx_sdma_data.pdata.script_addrs = &addr_imx51_to1; +		int to_version = mx51_revision() >> 4; +		imx51_imx_sdma_data.pdata.to_version = to_version; +		imx51_imx_sdma_data.pdata.script_addrs = &addr_imx51;  		ret = imx_add_imx_sdma(&imx51_imx_sdma_data);  	} else  #endif diff --git a/arch/arm/plat-nomadik/include/plat/gpio.h b/arch/arm/plat-nomadik/include/plat/gpio.h index ea19a5b2f22..d5d7e651269 100644 --- a/arch/arm/plat-nomadik/include/plat/gpio.h +++ b/arch/arm/plat-nomadik/include/plat/gpio.h @@ -90,6 +90,7 @@ struct nmk_gpio_platform_data {  	int num_gpio;  	u32 (*get_secondary_status)(unsigned int bank);  	void (*set_ioforce)(bool enable); +	bool supports_sleepmode;  };  #endif /* __ASM_PLAT_GPIO_H */ diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index a37b8eb65b7..49fc0df0c21 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c @@ -84,6 +84,7 @@  #include <linux/io.h>  #include <linux/clk.h>  #include <linux/clkdev.h> +#include <linux/pm_runtime.h>  #include <plat/omap_device.h>  #include <plat/omap_hwmod.h> @@ -539,20 +540,34 @@ int omap_early_device_register(struct omap_device *od)  static int _od_runtime_suspend(struct device *dev)  {  	struct platform_device *pdev = to_platform_device(dev); +	int ret; + +	ret = pm_generic_runtime_suspend(dev); + +	if (!ret) +		omap_device_idle(pdev); + +	return ret; +} -	return omap_device_idle(pdev); +static int _od_runtime_idle(struct device *dev) +{ +	return pm_generic_runtime_idle(dev);  }  static int _od_runtime_resume(struct device *dev)  {  	struct platform_device *pdev = to_platform_device(dev); -	return omap_device_enable(pdev); +	omap_device_enable(pdev); + +	return pm_generic_runtime_resume(dev);  }  static struct dev_power_domain omap_device_power_domain = {  	.ops = {  		.runtime_suspend = _od_runtime_suspend, +		.runtime_idle = _od_runtime_idle,  		.runtime_resume = _od_runtime_resume,  		USE_PLATFORM_PM_SLEEP_OPS  	} diff --git a/arch/arm/plat-s3c24xx/dma.c b/arch/arm/plat-s3c24xx/dma.c index c10d10c56e2..a79a8ccd25f 100644 --- a/arch/arm/plat-s3c24xx/dma.c +++ b/arch/arm/plat-s3c24xx/dma.c @@ -1027,17 +1027,13 @@ int s3c2410_dma_config(unsigned int channel,  	struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel);  	unsigned int dcon; -	pr_debug("%s: chan=%d, xfer_unit=%d, dcon=%08x\n", -		 __func__, channel, xferunit, dcon); +	pr_debug("%s: chan=%d, xfer_unit=%d\n", __func__, channel, xferunit);  	if (chan == NULL)  		return -EINVAL; -	pr_debug("%s: Initial dcon is %08x\n", __func__, dcon); -  	dcon = chan->dcon & dma_sel.dcon_mask; - -	pr_debug("%s: New dcon is %08x\n", __func__, dcon); +	pr_debug("%s: dcon is %08x\n", __func__, dcon);  	switch (chan->req_ch) {  	case DMACH_I2S_IN: @@ -1199,7 +1195,7 @@ EXPORT_SYMBOL(s3c2410_dma_getposition);  #ifdef CONFIG_PM -static void s3c2410_dma_suspend_chan(s3c2410_dma_chan *cp) +static void s3c2410_dma_suspend_chan(struct s3c2410_dma_chan *cp)  {  	printk(KERN_DEBUG "suspending dma channel %d\n", cp->number); @@ -1235,7 +1231,7 @@ static void s3c2410_dma_resume_chan(struct s3c2410_dma_chan *cp)  	/* restore channel's hardware configuration */  	if (!cp->in_use) -		return 0; +		return;  	printk(KERN_INFO "dma%d: restoring configuration\n", cp->number); @@ -1246,8 +1242,6 @@ static void s3c2410_dma_resume_chan(struct s3c2410_dma_chan *cp)  	if (cp->map != NULL)  		dma_sel.select(cp, cp->map); - -	return 0;  }  static void s3c2410_dma_resume(void) diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c index 9aee7e1668b..fc8c5f89954 100644 --- a/arch/arm/plat-s3c24xx/irq.c +++ b/arch/arm/plat-s3c24xx/irq.c @@ -23,6 +23,7 @@  #include <linux/interrupt.h>  #include <linux/ioport.h>  #include <linux/sysdev.h> +#include <linux/syscore_ops.h>  #include <asm/irq.h>  #include <asm/mach/irq.h> @@ -668,3 +669,8 @@ void __init s3c24xx_init_irq(void)  	irqdbf("s3c2410: registered interrupt handlers\n");  } + +struct syscore_ops s3c24xx_irq_syscore_ops = { +	.suspend	= s3c24xx_irq_suspend, +	.resume		= s3c24xx_irq_resume, +}; diff --git a/arch/arm/plat-s5p/dev-onenand.c b/arch/arm/plat-s5p/dev-onenand.c index 6db926202ca..20336c8f247 100644 --- a/arch/arm/plat-s5p/dev-onenand.c +++ b/arch/arm/plat-s5p/dev-onenand.c @@ -15,8 +15,6 @@  #include <linux/kernel.h>  #include <linux/platform_device.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/onenand.h>  #include <mach/irqs.h>  #include <mach/map.h> @@ -45,13 +43,3 @@ struct platform_device s5p_device_onenand = {  	.num_resources	= ARRAY_SIZE(s5p_onenand_resources),  	.resource	= s5p_onenand_resources,  }; - -void s5p_onenand_set_platdata(struct onenand_platform_data *pdata) -{ -	struct onenand_platform_data *pd; - -	pd = kmemdup(pdata, sizeof(struct onenand_platform_data), GFP_KERNEL); -	if (!pd) -		printk(KERN_ERR "%s: no memory for platform data\n", __func__); -	s5p_device_onenand.dev.platform_data = pd; -} diff --git a/arch/arm/plat-s5p/include/plat/map-s5p.h b/arch/arm/plat-s5p/include/plat/map-s5p.h index a6c3d327ce7..d973d39666a 100644 --- a/arch/arm/plat-s5p/include/plat/map-s5p.h +++ b/arch/arm/plat-s5p/include/plat/map-s5p.h @@ -39,7 +39,7 @@  #define S5P_VA_TWD		S5P_VA_COREPERI(0x600)  #define S5P_VA_GIC_DIST		S5P_VA_COREPERI(0x1000) -#define S5P_VA_USB_HSPHY	S3C_ADDR(0x02900000) +#define S3C_VA_USB_HSPHY	S3C_ADDR(0x02900000)  #define VA_VIC(x)		(S3C_VA_IRQ + ((x) * 0x10000))  #define VA_VIC0			VA_VIC(0) diff --git a/arch/arm/plat-s5p/s5p-time.c b/arch/arm/plat-s5p/s5p-time.c index 899a8cc011f..612934c48b0 100644 --- a/arch/arm/plat-s5p/s5p-time.c +++ b/arch/arm/plat-s5p/s5p-time.c @@ -370,11 +370,11 @@ static void __init s5p_clocksource_init(void)  	clock_rate = clk_get_rate(tin_source); -	init_sched_clock(&cd, s5p_update_sched_clock, 32, clock_rate); -  	s5p_time_setup(timer_source.source_id, TCNT_MAX);  	s5p_time_start(timer_source.source_id, PERIODIC); +	init_sched_clock(&cd, s5p_update_sched_clock, 32, clock_rate); +  	if (clocksource_register_hz(&time_clocksource, clock_rate))  		panic("%s: can't register clocksource\n", time_clocksource.name);  } diff --git a/arch/arm/plat-samsung/dev-onenand.c b/arch/arm/plat-samsung/dev-onenand.c index 45ec73287d8..f54ae71f0cd 100644 --- a/arch/arm/plat-samsung/dev-onenand.c +++ b/arch/arm/plat-samsung/dev-onenand.c @@ -13,8 +13,6 @@  #include <linux/kernel.h>  #include <linux/platform_device.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/onenand.h>  #include <mach/irqs.h>  #include <mach/map.h> @@ -43,13 +41,3 @@ struct platform_device s3c_device_onenand = {  	.num_resources	= ARRAY_SIZE(s3c_onenand_resources),  	.resource	= s3c_onenand_resources,  }; - -void s3c_onenand_set_platdata(struct onenand_platform_data *pdata) -{ -	struct onenand_platform_data *pd; - -	pd = kmemdup(pdata, sizeof(struct onenand_platform_data), GFP_KERNEL); -	if (!pd) -		printk(KERN_ERR "%s: no memory for platform data\n", __func__); -	s3c_device_onenand.dev.platform_data = pd; -} diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h index b61b8ee7cc5..e3b31c26ac3 100644 --- a/arch/arm/plat-samsung/include/plat/devs.h +++ b/arch/arm/plat-samsung/include/plat/devs.h @@ -12,6 +12,10 @@   * it under the terms of the GNU General Public License version 2 as   * published by the Free Software Foundation.  */ + +#ifndef __PLAT_DEVS_H +#define __PLAT_DEVS_H __FILE__ +  #include <linux/platform_device.h>  struct s3c24xx_uart_resources { @@ -75,10 +79,8 @@ extern struct platform_device s5pc100_device_spi1;  extern struct platform_device s5pc100_device_spi2;  extern struct platform_device s5pv210_device_spi0;  extern struct platform_device s5pv210_device_spi1; -extern struct platform_device s5p6440_device_spi0; -extern struct platform_device s5p6440_device_spi1; -extern struct platform_device s5p6450_device_spi0; -extern struct platform_device s5p6450_device_spi1; +extern struct platform_device s5p64x0_device_spi0; +extern struct platform_device s5p64x0_device_spi1;  extern struct platform_device s3c_device_hwmon; @@ -161,3 +163,5 @@ extern struct platform_device s3c_device_ac97;   */  extern void *s3c_set_platdata(void *pd, size_t pdsize,  			      struct platform_device *pdev); + +#endif /* __PLAT_DEVS_H */ diff --git a/arch/arm/plat-samsung/include/plat/regs-serial.h b/arch/arm/plat-samsung/include/plat/regs-serial.h index c151c5f94a8..116edfe120b 100644 --- a/arch/arm/plat-samsung/include/plat/regs-serial.h +++ b/arch/arm/plat-samsung/include/plat/regs-serial.h @@ -224,6 +224,8 @@  #define S5PV210_UFSTAT_RXMASK	(255<<0)  #define S5PV210_UFSTAT_RXSHIFT	(0) +#define NO_NEED_CHECK_CLKSRC	1 +  #ifndef __ASSEMBLY__  /* struct s3c24xx_uart_clksrc diff --git a/arch/arm/plat-samsung/include/plat/s3c64xx-spi.h b/arch/arm/plat-samsung/include/plat/s3c64xx-spi.h index 0ffe34a2155..4c16fa3621b 100644 --- a/arch/arm/plat-samsung/include/plat/s3c64xx-spi.h +++ b/arch/arm/plat-samsung/include/plat/s3c64xx-spi.h @@ -39,6 +39,7 @@ struct s3c64xx_spi_csinfo {   * @fifo_lvl_mask: All tx fifo_lvl fields start at offset-6   * @rx_lvl_offset: Depends on tx fifo_lvl field and bus number   * @high_speed: If the controller supports HIGH_SPEED_EN bit + * @tx_st_done: Depends on tx fifo_lvl field   */  struct s3c64xx_spi_info {  	int src_clk_nr; @@ -53,6 +54,7 @@ struct s3c64xx_spi_info {  	int fifo_lvl_mask;  	int rx_lvl_offset;  	int high_speed; +	int tx_st_done;  };  /**  |