diff options
Diffstat (limited to 'arch/arm/mach-u300')
36 files changed, 357 insertions, 7548 deletions
diff --git a/arch/arm/mach-u300/Kconfig b/arch/arm/mach-u300/Kconfig index 801b21e7f67..bc51a71394a 100644 --- a/arch/arm/mach-u300/Kconfig +++ b/arch/arm/mach-u300/Kconfig @@ -1,87 +1,35 @@ -if ARCH_U300 - -menu "ST-Ericsson AB U300/U330/U335/U365 Platform" +menuconfig ARCH_U300 +	bool "ST-Ericsson U300 Series" if ARCH_MULTI_V5 +	depends on MMU +	select ARCH_REQUIRE_GPIOLIB +	select ARM_AMBA +	select ARM_VIC +	select CLKSRC_MMIO +	select CPU_ARM926T +	select HAVE_TCM +	select PINCTRL +	select PINCTRL_COH901 +	select PINCTRL_U300 +	select MFD_SYSCON +	help +	  Support for ST-Ericsson U300 series mobile platforms. -comment "ST-Ericsson Mobile Platform Products" +if ARCH_U300  config MACH_U300 +	depends on ARCH_U300  	bool "U300" - -comment "ST-Ericsson U300/U330/U335/U365 Feature Selections" - -choice -	prompt "U300/U330/U335/U365 system type" -	default MACH_U300_BS2X -	---help--- -	You need to select the target system, i.e. the -	U300/U330/U335/U365 board that you want to compile your kernel -	for. - -config MACH_U300_BS2X -	bool "S26/S26/B25/B26 Test Products" -	depends on MACH_U300 -	help -		Select this if you're developing on the -		S26/S25 test products. (Also works on -		B26/B25 big boards.) - -config MACH_U300_BS330 -	bool "S330/B330 Test Products" -	depends on MACH_U300 -	help -		Select this if you're developing on the -		S330/B330 test products. - -config MACH_U300_BS335 -	bool "S335/B335 Test Products" -	depends on MACH_U300 -	help -		Select this if you're developing on the -		S335/B335 test products. - -config MACH_U300_BS365 -	bool "S365/B365 Test Products" -	depends on MACH_U300 -	help -		Select this if you're developing on the -		S365/B365 test products. - -endchoice - -choice -	prompt "Memory configuration" -	default MACH_U300_SINGLE_RAM -	---help--- -	You have to config the kernel according to the physical memory -	configuration. - -config MACH_U300_SINGLE_RAM -	bool "Single RAM" -	help -		Select this if you want support for Single RAM phones. - -config MACH_U300_DUAL_RAM -	bool "Dual RAM" -	help -		Select this if you want support for Dual RAM phones. -		This is two RAM memorys on different EMIFs. -endchoice +	default y  config U300_DEBUG +	depends on ARCH_U300  	bool "Debug support for U300"  	depends on PM  	help  		Debug support for U300 in sysfs, procfs etc. -config MACH_U300_SEMI_IS_SHARED -	bool "The SEMI is used by both the access and application side" -	depends on MACH_U300 -	help -		This makes it possible to use the SEMI (Shared External -		Memory Interface) from both from access and application -		side. -  config MACH_U300_SPIDUMMY +	depends on ARCH_U300  	bool "SSP/SPI dummy chip"  	select SPI  	select SPI_MASTER @@ -93,25 +41,4 @@ config MACH_U300_SPIDUMMY  		you don't need it. Selecting this will activate the  		SPI framework and ARM PL022 support. -comment "All the settings below must match the bootloader's settings" - -config MACH_U300_ACCESS_MEM_SIZE -       int "Access CPU memory allocation" -       range 7 25 -       depends on MACH_U300_SINGLE_RAM -       default 13 -       help -		How much memory in MiB that the Access side CPU has allocated - -config MACH_U300_2MB_ALIGNMENT_FIX -       bool "2MiB alignment fix" -       depends on MACH_U300_SINGLE_RAM -       default y -       help -		If yes and the Access side CPU has allocated an odd size in -		MiB, this fix gives you one MiB extra that would otherwise be -		lost due to Linux 2 MiB alignment policy. - -endmenu -  endif diff --git a/arch/arm/mach-u300/Makefile b/arch/arm/mach-u300/Makefile index fab46fe9a71..3ec74ac95bc 100644 --- a/arch/arm/mach-u300/Makefile +++ b/arch/arm/mach-u300/Makefile @@ -2,14 +2,10 @@  # Makefile for the linux kernel, U300 machine.  # -obj-y		:= core.o clock.o timer.o gpio.o padmux.o +obj-y		:= core.o  obj-m		:=  obj-n		:=  obj-		:= -obj-$(CONFIG_ARCH_U300)	          += u300.o -obj-$(CONFIG_MMC)                 += mmc.o -obj-$(CONFIG_SPI_PL022)           += spi.o  obj-$(CONFIG_MACH_U300_SPIDUMMY)  += dummyspichip.o -obj-$(CONFIG_I2C_STU300)          += i2c.o  obj-$(CONFIG_REGULATOR_AB3100)    += regulator.o diff --git a/arch/arm/mach-u300/Makefile.boot b/arch/arm/mach-u300/Makefile.boot index 6fbfc6ea2d3..87811de0bd9 100644 --- a/arch/arm/mach-u300/Makefile.boot +++ b/arch/arm/mach-u300/Makefile.boot @@ -1,15 +1,4 @@ -# Note: the following conditions must always be true: -#   ZRELADDR == virt_to_phys(TEXTADDR) -#   PARAMS_PHYS must be within 4MB of ZRELADDR -#   INITRD_PHYS must be in RAM - -ifdef CONFIG_MACH_U300_SINGLE_RAM -     zreladdr-y	:= 0x28E08000 -  params_phys-y	:= 0x28E00100 -else -     zreladdr-y	:= 0x48008000 -  params_phys-y	:= 0x48000100 -endif - +   zreladdr-y	+= 0x48008000 +params_phys-y	:= 0x48000100  # This isn't used. -#initrd_phys-y	:= 0x29800000 +#initrd_phys-y	:= 0x48800000 diff --git a/arch/arm/mach-u300/clock.c b/arch/arm/mach-u300/clock.c deleted file mode 100644 index 7458fc6df5c..00000000000 --- a/arch/arm/mach-u300/clock.c +++ /dev/null @@ -1,1504 +0,0 @@ -/* - * - * arch/arm/mach-u300/clock.c - * - * - * Copyright (C) 2007-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Define clocks in the app platform. - * Author: Linus Walleij <linus.walleij@stericsson.com> - * Author: Jonas Aaberg <jonas.aberg@stericsson.com> - * - */ -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/list.h> -#include <linux/errno.h> -#include <linux/err.h> -#include <linux/string.h> -#include <linux/clk.h> -#include <linux/mutex.h> -#include <linux/spinlock.h> -#include <linux/debugfs.h> -#include <linux/device.h> -#include <linux/init.h> -#include <linux/timer.h> -#include <linux/io.h> -#include <linux/seq_file.h> - -#include <asm/clkdev.h> -#include <mach/hardware.h> -#include <mach/syscon.h> - -#include "clock.h" - -/* - * TODO: - * - move all handling of the CCR register into this file and create - *   a spinlock for the CCR register - * - switch to the clkdevice lookup mechanism that maps clocks to - *   device ID:s instead when it becomes available in kernel 2.6.29. - * - implement rate get/set for all clocks that need it. - */ - -/* - * Syscon clock I/O registers lock so clock requests don't collide - * NOTE: this is a local lock only used to lock access to clock and - * reset registers in syscon. - */ -static DEFINE_SPINLOCK(syscon_clkreg_lock); -static DEFINE_SPINLOCK(syscon_resetreg_lock); - -/* - * The clocking hierarchy currently looks like this. - * NOTE: the idea is NOT to show how the clocks are routed on the chip! - * The ideas is to show dependencies, so a clock higher up in the - * hierarchy has to be on in order for another clock to be on. Now, - * both CPU and DMA can actually be on top of the hierarchy, and that - * is not modeled currently. Instead we have the backbone AMBA bus on - * top. This bus cannot be programmed in any way but conceptually it - * needs to be active for the bridges and devices to transport data. - * - * Please be aware that a few clocks are hw controlled, which mean that - * the hw itself can turn on/off or change the rate of the clock when - * needed! - * - *  AMBA bus - *  | - *  +- CPU - *  +- FSMC NANDIF NAND Flash interface - *  +- SEMI Shared Memory interface - *  +- ISP Image Signal Processor (U335 only) - *  +- CDS (U335 only) - *  +- DMA Direct Memory Access Controller - *  +- AAIF APP/ACC Inteface (Mobile Scalable Link, MSL) - *  +- APEX - *  +- VIDEO_ENC AVE2/3 Video Encoder - *  +- XGAM Graphics Accelerator Controller - *  +- AHB - *  | - *  +- ahb:0 AHB Bridge - *  |  | - *  |  +- ahb:1 INTCON Interrupt controller - *  |  +- ahb:3 MSPRO  Memory Stick Pro controller - *  |  +- ahb:4 EMIF   External Memory interface - *  | - *  +- fast:0 FAST bridge - *  |  | - *  |  +- fast:1 MMCSD MMC/SD card reader controller - *  |  +- fast:2 I2S0  PCM I2S channel 0 controller - *  |  +- fast:3 I2S1  PCM I2S channel 1 controller - *  |  +- fast:4 I2C0  I2C channel 0 controller - *  |  +- fast:5 I2C1  I2C channel 1 controller - *  |  +- fast:6 SPI   SPI controller - *  |  +- fast:7 UART1 Secondary UART (U335 only) - *  | - *  +- slow:0 SLOW bridge - *     | - *     +- slow:1 SYSCON (not possible to control) - *     +- slow:2 WDOG Watchdog - *     +- slow:3 UART0 primary UART - *     +- slow:4 TIMER_APP Application timer - used in Linux - *     +- slow:5 KEYPAD controller - *     +- slow:6 GPIO controller - *     +- slow:7 RTC controller - *     +- slow:8 BT Bus Tracer (not used currently) - *     +- slow:9 EH Event Handler (not used currently) - *     +- slow:a TIMER_ACC Access style timer (not used currently) - *     +- slow:b PPM (U335 only, what is that?) - */ - -/* - * Reset control functions. We remember if a block has been - * taken out of reset and don't remove the reset assertion again - * and vice versa. Currently we only remove resets so the - * enablement function is defined out. - */ -static void syscon_block_reset_enable(struct clk *clk) -{ -	u16 val; -	unsigned long iflags; - -	/* Not all blocks support resetting */ -	if (!clk->res_reg || !clk->res_mask) -		return; -	spin_lock_irqsave(&syscon_resetreg_lock, iflags); -	val = readw(clk->res_reg); -	val |= clk->res_mask; -	writew(val, clk->res_reg); -	spin_unlock_irqrestore(&syscon_resetreg_lock, iflags); -	clk->reset = true; -} - -static void syscon_block_reset_disable(struct clk *clk) -{ -	u16 val; -	unsigned long iflags; - -	/* Not all blocks support resetting */ -	if (!clk->res_reg || !clk->res_mask) -		return; -	spin_lock_irqsave(&syscon_resetreg_lock, iflags); -	val = readw(clk->res_reg); -	val &= ~clk->res_mask; -	writew(val, clk->res_reg); -	spin_unlock_irqrestore(&syscon_resetreg_lock, iflags); -	clk->reset = false; -} - -int __clk_get(struct clk *clk) -{ -	u16 val; - -	/* The MMC and MSPRO clocks need some special set-up */ -	if (!strcmp(clk->name, "MCLK")) { -		/* Set default MMC clock divisor to 18.9 MHz */ -		writew(0x0054U, U300_SYSCON_VBASE + U300_SYSCON_MMF0R); -		val = readw(U300_SYSCON_VBASE + U300_SYSCON_MMCR); -		/* Disable the MMC feedback clock */ -		val &= ~U300_SYSCON_MMCR_MMC_FB_CLK_SEL_ENABLE; -		/* Disable MSPRO frequency */ -		val &= ~U300_SYSCON_MMCR_MSPRO_FREQSEL_ENABLE; -		writew(val, U300_SYSCON_VBASE + U300_SYSCON_MMCR); -	} -	if (!strcmp(clk->name, "MSPRO")) { -		val = readw(U300_SYSCON_VBASE + U300_SYSCON_MMCR); -		/* Disable the MMC feedback clock */ -		val &= ~U300_SYSCON_MMCR_MMC_FB_CLK_SEL_ENABLE; -		/* Enable MSPRO frequency */ -		val |= U300_SYSCON_MMCR_MSPRO_FREQSEL_ENABLE; -		writew(val, U300_SYSCON_VBASE + U300_SYSCON_MMCR); -	} -	return 1; -} -EXPORT_SYMBOL(__clk_get); - -void __clk_put(struct clk *clk) -{ -} -EXPORT_SYMBOL(__clk_put); - -static void syscon_clk_disable(struct clk *clk) -{ -	unsigned long iflags; - -	/* Don't touch the hardware controlled clocks */ -	if (clk->hw_ctrld) -		return; - -	spin_lock_irqsave(&syscon_clkreg_lock, iflags); -	writew(clk->clk_val, U300_SYSCON_VBASE + U300_SYSCON_SBCDR); -	spin_unlock_irqrestore(&syscon_clkreg_lock, iflags); -} - -static void syscon_clk_enable(struct clk *clk) -{ -	unsigned long iflags; - -	/* Don't touch the hardware controlled clocks */ -	if (clk->hw_ctrld) -		return; - -	spin_lock_irqsave(&syscon_clkreg_lock, iflags); -	writew(clk->clk_val, U300_SYSCON_VBASE + U300_SYSCON_SBCER); -	spin_unlock_irqrestore(&syscon_clkreg_lock, iflags); -} - -static u16 syscon_clk_get_rate(void) -{ -	u16 val; -	unsigned long iflags; - -	spin_lock_irqsave(&syscon_clkreg_lock, iflags); -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val &= U300_SYSCON_CCR_CLKING_PERFORMANCE_MASK; -	spin_unlock_irqrestore(&syscon_clkreg_lock, iflags); -	return val; -} - -#ifdef CONFIG_MACH_U300_USE_I2S_AS_MASTER -static void enable_i2s0_vcxo(void) -{ -	u16 val; -	unsigned long iflags; - -	spin_lock_irqsave(&syscon_clkreg_lock, iflags); -	/* Set I2S0 to use the VCXO 26 MHz clock */ -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val |= U300_SYSCON_CCR_TURN_VCXO_ON; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val |= U300_SYSCON_CCR_I2S0_USE_VCXO; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CEFR); -	val |= U300_SYSCON_CEFR_I2S0_CLK_EN; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CEFR); -	spin_unlock_irqrestore(&syscon_clkreg_lock, iflags); -} - -static void enable_i2s1_vcxo(void) -{ -	u16 val; -	unsigned long iflags; - -	spin_lock_irqsave(&syscon_clkreg_lock, iflags); -	/* Set I2S1 to use the VCXO 26 MHz clock */ -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val |= U300_SYSCON_CCR_TURN_VCXO_ON; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val |= U300_SYSCON_CCR_I2S1_USE_VCXO; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CEFR); -	val |= U300_SYSCON_CEFR_I2S1_CLK_EN; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CEFR); -	spin_unlock_irqrestore(&syscon_clkreg_lock, iflags); -} - -static void disable_i2s0_vcxo(void) -{ -	u16 val; -	unsigned long iflags; - -	spin_lock_irqsave(&syscon_clkreg_lock, iflags); -	/* Disable I2S0 use of the VCXO 26 MHz clock */ -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val &= ~U300_SYSCON_CCR_I2S0_USE_VCXO; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	/* Deactivate VCXO if noone else is using VCXO */ -	if (!(val & U300_SYSCON_CCR_I2S1_USE_VCXO)) -		val &= ~U300_SYSCON_CCR_TURN_VCXO_ON; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CEFR); -	val &= ~U300_SYSCON_CEFR_I2S0_CLK_EN; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CEFR); -	spin_unlock_irqrestore(&syscon_clkreg_lock, iflags); -} - -static void disable_i2s1_vcxo(void) -{ -	u16 val; -	unsigned long iflags; - -	spin_lock_irqsave(&syscon_clkreg_lock, iflags); -	/* Disable I2S1 use of the VCXO 26 MHz clock */ -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val &= ~U300_SYSCON_CCR_I2S1_USE_VCXO; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	/* Deactivate VCXO if noone else is using VCXO */ -	if (!(val & U300_SYSCON_CCR_I2S0_USE_VCXO)) -		val &= ~U300_SYSCON_CCR_TURN_VCXO_ON; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CEFR); -	val &= ~U300_SYSCON_CEFR_I2S0_CLK_EN; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CEFR); -	spin_unlock_irqrestore(&syscon_clkreg_lock, iflags); -} -#endif /* CONFIG_MACH_U300_USE_I2S_AS_MASTER */ - - -static void syscon_clk_rate_set_mclk(unsigned long rate) -{ -	u16 val; -	u32 reg; -	unsigned long iflags; - -	switch (rate) { -	case 18900000: -		val = 0x0054; -		break; -	case 20800000: -		val = 0x0044; -		break; -	case 23100000: -		val = 0x0043; -		break; -	case 26000000: -		val = 0x0033; -		break; -	case 29700000: -		val = 0x0032; -		break; -	case 34700000: -		val = 0x0022; -		break; -	case 41600000: -		val = 0x0021; -		break; -	case 52000000: -		val = 0x0011; -		break; -	case 104000000: -		val = 0x0000; -		break; -	default: -		printk(KERN_ERR "Trying to set MCLK to unknown speed! %ld\n", -		       rate); -		return; -	} - -	spin_lock_irqsave(&syscon_clkreg_lock, iflags); -	reg = readw(U300_SYSCON_VBASE + U300_SYSCON_MMF0R) & -		~U300_SYSCON_MMF0R_MASK; -	writew(reg | val, U300_SYSCON_VBASE + U300_SYSCON_MMF0R); -	spin_unlock_irqrestore(&syscon_clkreg_lock, iflags); -} - -void syscon_clk_rate_set_cpuclk(unsigned long rate) -{ -	u16 val; -	unsigned long iflags; - -	switch (rate) { -	case 13000000: -		val = U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER; -		break; -	case 52000000: -		val = U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE; -		break; -	case 104000000: -		val = U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH; -		break; -	case 208000000: -		val = U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST; -		break; -	default: -		return; -	} -	spin_lock_irqsave(&syscon_clkreg_lock, iflags); -	val |= readw(U300_SYSCON_VBASE + U300_SYSCON_CCR) & -		~U300_SYSCON_CCR_CLKING_PERFORMANCE_MASK ; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	spin_unlock_irqrestore(&syscon_clkreg_lock, iflags); -} -EXPORT_SYMBOL(syscon_clk_rate_set_cpuclk); - -void clk_disable(struct clk *clk) -{ -	unsigned long iflags; - -	spin_lock_irqsave(&clk->lock, iflags); -	if (clk->usecount > 0 && !(--clk->usecount)) { -		/* some blocks lack clocking registers and cannot be disabled */ -		if (clk->disable) -			clk->disable(clk); -		if (likely((u32)clk->parent)) -			clk_disable(clk->parent); -	} -#ifdef CONFIG_MACH_U300_USE_I2S_AS_MASTER -	if (unlikely(!strcmp(clk->name, "I2S0"))) -		disable_i2s0_vcxo(); -	if (unlikely(!strcmp(clk->name, "I2S1"))) -		disable_i2s1_vcxo(); -#endif -	spin_unlock_irqrestore(&clk->lock, iflags); -} -EXPORT_SYMBOL(clk_disable); - -int clk_enable(struct clk *clk) -{ -	int ret = 0; -	unsigned long iflags; - -	spin_lock_irqsave(&clk->lock, iflags); -	if (clk->usecount++ == 0) { -		if (likely((u32)clk->parent)) -			ret = clk_enable(clk->parent); - -		if (unlikely(ret != 0)) -			clk->usecount--; -		else { -			/* remove reset line (we never enable reset again) */ -			syscon_block_reset_disable(clk); -			/* clocks without enable function are always on */ -			if (clk->enable) -				clk->enable(clk); -#ifdef CONFIG_MACH_U300_USE_I2S_AS_MASTER -			if (unlikely(!strcmp(clk->name, "I2S0"))) -				enable_i2s0_vcxo(); -			if (unlikely(!strcmp(clk->name, "I2S1"))) -				enable_i2s1_vcxo(); -#endif -		} -	} -	spin_unlock_irqrestore(&clk->lock, iflags); -	return ret; - -} -EXPORT_SYMBOL(clk_enable); - -/* Returns the clock rate in Hz */ -static unsigned long clk_get_rate_cpuclk(struct clk *clk) -{ -	u16 val; - -	val = syscon_clk_get_rate(); - -	switch (val) { -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW: -		return 13000000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE: -		return 52000000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH: -		return 104000000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST: -		return 208000000; -	default: -		break; -	} -	return clk->rate; -} - -static unsigned long clk_get_rate_ahb_clk(struct clk *clk) -{ -	u16 val; - -	val = syscon_clk_get_rate(); - -	switch (val) { -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW: -		return 6500000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE: -		return 26000000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST: -		return 52000000; -	default: -		break; -	} -	return clk->rate; - -} - -static unsigned long clk_get_rate_emif_clk(struct clk *clk) -{ -	u16 val; - -	val = syscon_clk_get_rate(); - -	switch (val) { -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW: -		return 13000000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE: -		return 52000000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST: -		return 104000000; -	default: -		break; -	} -	return clk->rate; - -} - -static unsigned long clk_get_rate_xgamclk(struct clk *clk) -{ -	u16 val; - -	val = syscon_clk_get_rate(); - -	switch (val) { -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW: -		return 6500000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE: -		return 26000000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST: -		return 52000000; -	default: -		break; -	} - -	return clk->rate; -} - -static unsigned long clk_get_rate_mclk(struct clk *clk) -{ -	u16 val; - -	val = syscon_clk_get_rate(); - -	switch (val) { -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER: -		/* -		 * Here, the 208 MHz PLL gets shut down and the always -		 * on 13 MHz PLL used for RTC etc kicks into use -		 * instead. -		 */ -		return 13000000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST: -	{ -		/* -		 * This clock is under program control. The register is -		 * divided in two nybbles, bit 7-4 gives cycles-1 to count -		 * high, bit 3-0 gives cycles-1 to count low. Distribute -		 * these with no more than 1 cycle difference between -		 * low and high and add low and high to get the actual -		 * divisor. The base PLL is 208 MHz. Writing 0x00 will -		 * divide by 1 and 1 so the highest frequency possible -		 * is 104 MHz. -		 * -		 * e.g. 0x54 => -		 * f = 208 / ((5+1) + (4+1)) = 208 / 11 = 18.9 MHz -		 */ -		u16 val = readw(U300_SYSCON_VBASE + U300_SYSCON_MMF0R) & -			U300_SYSCON_MMF0R_MASK; -		switch (val) { -		case 0x0054: -			return 18900000; -		case 0x0044: -			return 20800000; -		case 0x0043: -			return 23100000; -		case 0x0033: -			return 26000000; -		case 0x0032: -			return 29700000; -		case 0x0022: -			return 34700000; -		case 0x0021: -			return 41600000; -		case 0x0011: -			return 52000000; -		case 0x0000: -			return 104000000; -		default: -			break; -		} -	} -	default: -		break; -	} - -	return clk->rate; -} - -static unsigned long clk_get_rate_i2s_i2c_spi(struct clk *clk) -{ -	u16 val; - -	val = syscon_clk_get_rate(); - -	switch (val) { -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW: -		return 13000000; -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH: -	case U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST: -		return 26000000; -	default: -		break; -	} - -	return clk->rate; -} - -unsigned long clk_get_rate(struct clk *clk) -{ -	if (clk->get_rate) -		return clk->get_rate(clk); -	else -		return clk->rate; -} -EXPORT_SYMBOL(clk_get_rate); - -static unsigned long clk_round_rate_mclk(struct clk *clk, unsigned long rate) -{ -	if (rate <= 18900000) -		return 18900000; -	if (rate <= 20800000) -		return 20800000; -	if (rate <= 23100000) -		return 23100000; -	if (rate <= 26000000) -		return 26000000; -	if (rate <= 29700000) -		return 29700000; -	if (rate <= 34700000) -		return 34700000; -	if (rate <= 41600000) -		return 41600000; -	if (rate <= 52000000) -		return 52000000; -	return -EINVAL; -} - -static unsigned long clk_round_rate_cpuclk(struct clk *clk, unsigned long rate) -{ -	if (rate <= 13000000) -		return 13000000; -	if (rate <= 52000000) -		return 52000000; -	if (rate <= 104000000) -		return 104000000; -	if (rate <= 208000000) -		return 208000000; -	return -EINVAL; -} - -/* - * This adjusts a requested rate to the closest exact rate - * a certain clock can provide. For a fixed clock it's - * mostly clk->rate. - */ -long clk_round_rate(struct clk *clk, unsigned long rate) -{ -	/* TODO: get apropriate switches for EMIFCLK, AHBCLK and MCLK */ -	/* Else default to fixed value */ - -	if (clk->round_rate) { -		return (long) clk->round_rate(clk, rate); -	} else { -		printk(KERN_ERR "clock: Failed to round rate of %s\n", -		       clk->name); -	} -	return (long) clk->rate; -} -EXPORT_SYMBOL(clk_round_rate); - -static int clk_set_rate_mclk(struct clk *clk, unsigned long rate) -{ -	syscon_clk_rate_set_mclk(clk_round_rate(clk, rate)); -	return 0; -} - -static int clk_set_rate_cpuclk(struct clk *clk, unsigned long rate) -{ -	syscon_clk_rate_set_cpuclk(clk_round_rate(clk, rate)); -	return 0; -} - -int clk_set_rate(struct clk *clk, unsigned long rate) -{ -	/* TODO: set for EMIFCLK and AHBCLK */ -	/* Else assume the clock is fixed and fail */ -	if (clk->set_rate) { -		return clk->set_rate(clk, rate); -	} else { -		printk(KERN_ERR "clock: Failed to set %s to %ld hz\n", -		       clk->name, rate); -		return -EINVAL; -	} -} -EXPORT_SYMBOL(clk_set_rate); - -/* - * Clock definitions. The clock parents are set to respective - * bridge and the clock framework makes sure that the clocks have - * parents activated and are brought out of reset when in use. - * - * Clocks that have hw_ctrld = true are hw controlled, and the hw - * can by itself turn these clocks on and off. - * So in other words, we don't really have to care about them. - */ - -static struct clk amba_clk = { -	.name	    = "AMBA", -	.rate	    = 52000000, /* this varies! */ -	.hw_ctrld   = true, -	.reset	    = false, -	.lock       = __SPIN_LOCK_UNLOCKED(amba_clk.lock), -}; - -/* - * These blocks are connected directly to the AMBA bus - * with no bridge. - */ - -static struct clk cpu_clk = { -	.name	    = "CPU", -	.parent	    = &amba_clk, -	.rate	    = 208000000, /* this varies! */ -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_CPU_RESET_EN, -	.set_rate   = clk_set_rate_cpuclk, -	.get_rate   = clk_get_rate_cpuclk, -	.round_rate = clk_round_rate_cpuclk, -	.lock       = __SPIN_LOCK_UNLOCKED(cpu_clk.lock), -}; - -static struct clk nandif_clk = { -	.name       = "FSMC", -	.parent	    = &amba_clk, -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_NANDIF_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_NANDIF_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(nandif_clk.lock), -}; - -static struct clk semi_clk = { -	.name       = "SEMI", -	.parent	    = &amba_clk, -	.rate       = 0, /* FIXME */ -	/* It is not possible to reset SEMI */ -	.hw_ctrld   = false, -	.reset	    = false, -	.clk_val    = U300_SYSCON_SBCER_SEMI_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(semi_clk.lock), -}; - -#ifdef CONFIG_MACH_U300_BS335 -static struct clk isp_clk = { -	.name	    = "ISP", -	.parent	    = &amba_clk, -	.rate	    = 0, /* FIXME */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_ISP_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_ISP_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(isp_clk.lock), -}; - -static struct clk cds_clk = { -	.name	    = "CDS", -	.parent	    = &amba_clk, -	.rate	    = 0, /* FIXME */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_CDS_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_CDS_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(cds_clk.lock), -}; -#endif - -static struct clk dma_clk = { -	.name       = "DMA", -	.parent	    = &amba_clk, -	.rate       = 52000000, /* this varies! */ -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_DMAC_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_DMAC_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(dma_clk.lock), -}; - -static struct clk aaif_clk = { -	.name       = "AAIF", -	.parent	    = &amba_clk, -	.rate       = 52000000, /* this varies! */ -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_AAIF_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_AAIF_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(aaif_clk.lock), -}; - -static struct clk apex_clk = { -	.name       = "APEX", -	.parent	    = &amba_clk, -	.rate       = 0, /* FIXME */ -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_APEX_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_APEX_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(apex_clk.lock), -}; - -static struct clk video_enc_clk = { -	.name       = "VIDEO_ENC", -	.parent	    = &amba_clk, -	.rate       = 208000000, /* this varies! */ -	.hw_ctrld   = false, -	.reset	    = false, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	/* This has XGAM in the name but refers to the video encoder */ -	.res_mask   = U300_SYSCON_RRR_XGAM_VC_SYNC_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_VIDEO_ENC_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(video_enc_clk.lock), -}; - -static struct clk xgam_clk = { -	.name       = "XGAMCLK", -	.parent	    = &amba_clk, -	.rate       = 52000000, /* this varies! */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_XGAM_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_XGAM_CLK_EN, -	.get_rate   = clk_get_rate_xgamclk, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(xgam_clk.lock), -}; - -/* This clock is used to activate the video encoder */ -static struct clk ahb_clk = { -	.name	    = "AHB", -	.parent	    = &amba_clk, -	.rate	    = 52000000, /* this varies! */ -	.hw_ctrld   = false, /* This one is set to false due to HW bug */ -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_AHB_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_AHB_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.get_rate   = clk_get_rate_ahb_clk, -	.lock       = __SPIN_LOCK_UNLOCKED(ahb_clk.lock), -}; - - -/* - * Clocks on the AHB bridge - */ - -static struct clk ahb_subsys_clk = { -	.name	    = "AHB_SUBSYS", -	.parent	    = &amba_clk, -	.rate	    = 52000000, /* this varies! */ -	.hw_ctrld   = true, -	.reset	    = false, -	.clk_val    = U300_SYSCON_SBCER_AHB_SUBSYS_BRIDGE_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.get_rate   = clk_get_rate_ahb_clk, -	.lock       = __SPIN_LOCK_UNLOCKED(ahb_subsys_clk.lock), -}; - -static struct clk intcon_clk = { -	.name	    = "INTCON", -	.parent	    = &ahb_subsys_clk, -	.rate	    = 52000000, /* this varies! */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_INTCON_RESET_EN, -	/* INTCON can be reset but not clock-gated */ -	.lock       = __SPIN_LOCK_UNLOCKED(intcon_clk.lock), - -}; - -static struct clk mspro_clk = { -	.name       = "MSPRO", -	.parent	    = &ahb_subsys_clk, -	.rate       = 0, /* FIXME */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_MSPRO_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_MSPRO_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(mspro_clk.lock), -}; - -static struct clk emif_clk = { -	.name	    = "EMIF", -	.parent	    = &ahb_subsys_clk, -	.rate	    = 104000000, /* this varies! */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RRR, -	.res_mask   = U300_SYSCON_RRR_EMIF_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_EMIF_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.get_rate   = clk_get_rate_emif_clk, -	.lock       = __SPIN_LOCK_UNLOCKED(emif_clk.lock), -}; - - -/* - * Clocks on the FAST bridge - */ -static struct clk fast_clk = { -	.name	    = "FAST_BRIDGE", -	.parent	    = &amba_clk, -	.rate	    = 13000000, /* this varies! */ -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RFR, -	.res_mask   = U300_SYSCON_RFR_FAST_BRIDGE_RESET_ENABLE, -	.clk_val    = U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(fast_clk.lock), -}; - -/* - * The MMCI apb_pclk is hardwired to the same terminal as the - * external MCI clock. Thus this will be referenced twice. - */ -static struct clk mmcsd_clk = { -	.name       = "MCLK", -	.parent	    = &fast_clk, -	.rate       = 18900000, /* this varies! */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RFR, -	.res_mask   = U300_SYSCON_RFR_MMC_RESET_ENABLE, -	.clk_val    = U300_SYSCON_SBCER_MMC_CLK_EN, -	.get_rate   = clk_get_rate_mclk, -	.set_rate   = clk_set_rate_mclk, -	.round_rate = clk_round_rate_mclk, -	.disable    = syscon_clk_disable, -	.enable     = syscon_clk_enable, -	.lock       = __SPIN_LOCK_UNLOCKED(mmcsd_clk.lock), -}; - -static struct clk i2s0_clk = { -	.name       = "i2s0", -	.parent	    = &fast_clk, -	.rate       = 26000000, /* this varies! */ -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RFR, -	.res_mask   = U300_SYSCON_RFR_PCM_I2S0_RESET_ENABLE, -	.clk_val    = U300_SYSCON_SBCER_I2S0_CORE_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.get_rate   = clk_get_rate_i2s_i2c_spi, -	.lock       = __SPIN_LOCK_UNLOCKED(i2s0_clk.lock), -}; - -static struct clk i2s1_clk = { -	.name       = "i2s1", -	.parent	    = &fast_clk, -	.rate       = 26000000, /* this varies! */ -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RFR, -	.res_mask   = U300_SYSCON_RFR_PCM_I2S1_RESET_ENABLE, -	.clk_val    = U300_SYSCON_SBCER_I2S1_CORE_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.get_rate   = clk_get_rate_i2s_i2c_spi, -	.lock       = __SPIN_LOCK_UNLOCKED(i2s1_clk.lock), -}; - -static struct clk i2c0_clk = { -	.name       = "I2C0", -	.parent	    = &fast_clk, -	.rate       = 26000000, /* this varies! */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RFR, -	.res_mask   = U300_SYSCON_RFR_I2C0_RESET_ENABLE, -	.clk_val    = U300_SYSCON_SBCER_I2C0_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.get_rate   = clk_get_rate_i2s_i2c_spi, -	.lock       = __SPIN_LOCK_UNLOCKED(i2c0_clk.lock), -}; - -static struct clk i2c1_clk = { -	.name       = "I2C1", -	.parent	    = &fast_clk, -	.rate       = 26000000, /* this varies! */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RFR, -	.res_mask   = U300_SYSCON_RFR_I2C1_RESET_ENABLE, -	.clk_val    = U300_SYSCON_SBCER_I2C1_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.get_rate   = clk_get_rate_i2s_i2c_spi, -	.lock       = __SPIN_LOCK_UNLOCKED(i2c1_clk.lock), -}; - -/* - * The SPI apb_pclk is hardwired to the same terminal as the - * external SPI clock. Thus this will be referenced twice. - */ -static struct clk spi_clk = { -	.name       = "SPI", -	.parent	    = &fast_clk, -	.rate       = 26000000, /* this varies! */ -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RFR, -	.res_mask   = U300_SYSCON_RFR_SPI_RESET_ENABLE, -	.clk_val    = U300_SYSCON_SBCER_SPI_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.get_rate   = clk_get_rate_i2s_i2c_spi, -	.lock       = __SPIN_LOCK_UNLOCKED(spi_clk.lock), -}; - -#ifdef CONFIG_MACH_U300_BS335 -static struct clk uart1_pclk = { -	.name	    = "UART1_PCLK", -	.parent	    = &fast_clk, -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RFR, -	.res_mask   = U300_SYSCON_RFR_UART1_RESET_ENABLE, -	.clk_val    = U300_SYSCON_SBCER_UART1_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(uart1_pclk.lock), -}; - -/* This one is hardwired to PLL13 */ -static struct clk uart1_clk = { -	.name	    = "UART1_CLK", -	.rate	    = 13000000, -	.hw_ctrld   = true, -	.lock       = __SPIN_LOCK_UNLOCKED(uart1_clk.lock), -}; -#endif - - -/* - * Clocks on the SLOW bridge - */ -static struct clk slow_clk = { -	.name	    = "SLOW_BRIDGE", -	.parent	    = &amba_clk, -	.rate	    = 13000000, -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_SLOW_BRIDGE_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(slow_clk.lock), -}; - -/* TODO: implement SYSCON clock? */ - -static struct clk wdog_clk = { -	.name	    = "WDOG", -	.parent	    = &slow_clk, -	.hw_ctrld   = false, -	.rate	    = 32768, -	.reset	    = false, -	/* This is always on, cannot be enabled/disabled or reset */ -	.lock       = __SPIN_LOCK_UNLOCKED(wdog_clk.lock), -}; - -static struct clk uart0_pclk = { -	.name	    = "UART0_PCLK", -	.parent	    = &slow_clk, -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_UART_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_UART_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(uart0_pclk.lock), -}; - -/* This one is hardwired to PLL13 */ -static struct clk uart0_clk = { -	.name	    = "UART0_CLK", -	.parent	    = &slow_clk, -	.rate	    = 13000000, -	.hw_ctrld   = true, -	.lock       = __SPIN_LOCK_UNLOCKED(uart0_clk.lock), -}; - -static struct clk keypad_clk = { -	.name       = "KEYPAD", -	.parent	    = &slow_clk, -	.rate       = 32768, -	.hw_ctrld   = false, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_KEYPAD_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_KEYPAD_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(keypad_clk.lock), -}; - -static struct clk gpio_clk = { -	.name       = "GPIO", -	.parent	    = &slow_clk, -	.rate       = 13000000, -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_GPIO_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_GPIO_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(gpio_clk.lock), -}; - -static struct clk rtc_clk = { -	.name	    = "RTC", -	.parent	    = &slow_clk, -	.rate	    = 32768, -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_RTC_RESET_EN, -	/* This clock is always on, cannot be enabled/disabled */ -	.lock       = __SPIN_LOCK_UNLOCKED(rtc_clk.lock), -}; - -static struct clk bustr_clk = { -	.name       = "BUSTR", -	.parent	    = &slow_clk, -	.rate       = 13000000, -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_BTR_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_BTR_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(bustr_clk.lock), -}; - -static struct clk evhist_clk = { -	.name       = "EVHIST", -	.parent	    = &slow_clk, -	.rate       = 13000000, -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_EH_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_EH_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(evhist_clk.lock), -}; - -static struct clk timer_clk = { -	.name       = "TIMER", -	.parent	    = &slow_clk, -	.rate       = 13000000, -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_ACC_TMR_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_ACC_TMR_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(timer_clk.lock), -}; - -/* - * There is a binary divider in the hardware that divides - * the 13MHz PLL by 13 down to 1 MHz. - */ -static struct clk app_timer_clk = { -	.name       = "TIMER_APP", -	.parent	    = &slow_clk, -	.rate       = 1000000, -	.hw_ctrld   = true, -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_APP_TMR_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_APP_TMR_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(app_timer_clk.lock), -}; - -#ifdef CONFIG_MACH_U300_BS335 -static struct clk ppm_clk = { -	.name	    = "PPM", -	.parent	    = &slow_clk, -	.rate	    = 0, /* FIXME */ -	.hw_ctrld   = true, /* TODO: Look up if it is hw ctrld or not */ -	.reset	    = true, -	.res_reg    = U300_SYSCON_VBASE + U300_SYSCON_RSR, -	.res_mask   = U300_SYSCON_RSR_PPM_RESET_EN, -	.clk_val    = U300_SYSCON_SBCER_PPM_CLK_EN, -	.enable     = syscon_clk_enable, -	.disable    = syscon_clk_disable, -	.lock       = __SPIN_LOCK_UNLOCKED(ppm_clk.lock), -}; -#endif - -#define DEF_LOOKUP(devid, clkref)		\ -	{					\ -	.dev_id = devid,			\ -	.clk = clkref,				\ -	} - -#define DEF_LOOKUP_CON(devid, conid, clkref)	\ -	{					\ -	.dev_id = devid,			\ -	.con_id = conid,			\ -	.clk = clkref,				\ -	} - -/* - * Here we only define clocks that are meaningful to - * look up through clockdevice. - */ -static struct clk_lookup lookups[] = { -	/* Connected directly to the AMBA bus */ -	DEF_LOOKUP("amba",      &amba_clk), -	DEF_LOOKUP("cpu",       &cpu_clk), -	DEF_LOOKUP("fsmc-nand", &nandif_clk), -	DEF_LOOKUP("semi",      &semi_clk), -#ifdef CONFIG_MACH_U300_BS335 -	DEF_LOOKUP("isp",       &isp_clk), -	DEF_LOOKUP("cds",       &cds_clk), -#endif -	DEF_LOOKUP("dma",       &dma_clk), -	DEF_LOOKUP("msl",       &aaif_clk), -	DEF_LOOKUP("apex",      &apex_clk), -	DEF_LOOKUP("video_enc", &video_enc_clk), -	DEF_LOOKUP("xgam",      &xgam_clk), -	DEF_LOOKUP("ahb",       &ahb_clk), -	/* AHB bridge clocks */ -	DEF_LOOKUP("ahb_subsys", &ahb_subsys_clk), -	DEF_LOOKUP("intcon",    &intcon_clk), -	DEF_LOOKUP_CON("intcon", "apb_pclk", &intcon_clk), -	DEF_LOOKUP("mspro",     &mspro_clk), -	DEF_LOOKUP("pl172",     &emif_clk), -	DEF_LOOKUP_CON("pl172", "apb_pclk", &emif_clk), -	/* FAST bridge clocks */ -	DEF_LOOKUP("fast",      &fast_clk), -	DEF_LOOKUP("mmci",      &mmcsd_clk), -	DEF_LOOKUP_CON("mmci", "apb_pclk", &mmcsd_clk), -	/* -	 * The .0 and .1 identifiers on these comes from the platform device -	 * .id field and are assigned when the platform devices are registered. -	 */ -	DEF_LOOKUP("i2s.0",     &i2s0_clk), -	DEF_LOOKUP("i2s.1",     &i2s1_clk), -	DEF_LOOKUP("stu300.0",  &i2c0_clk), -	DEF_LOOKUP("stu300.1",  &i2c1_clk), -	DEF_LOOKUP("pl022",     &spi_clk), -	DEF_LOOKUP_CON("pl022", "apb_pclk", &spi_clk), -#ifdef CONFIG_MACH_U300_BS335 -	DEF_LOOKUP("uart1",     &uart1_clk), -	DEF_LOOKUP_CON("uart1", "apb_pclk", &uart1_pclk), -#endif -	/* SLOW bridge clocks */ -	DEF_LOOKUP("slow",      &slow_clk), -	DEF_LOOKUP("coh901327_wdog",      &wdog_clk), -	DEF_LOOKUP("uart0",     &uart0_clk), -	DEF_LOOKUP_CON("uart0", "apb_pclk", &uart0_pclk), -	DEF_LOOKUP("apptimer",  &app_timer_clk), -	DEF_LOOKUP("coh901461-keypad",    &keypad_clk), -	DEF_LOOKUP("u300-gpio", &gpio_clk), -	DEF_LOOKUP("rtc-coh901331",      &rtc_clk), -	DEF_LOOKUP("bustr",     &bustr_clk), -	DEF_LOOKUP("evhist",    &evhist_clk), -	DEF_LOOKUP("timer",     &timer_clk), -#ifdef CONFIG_MACH_U300_BS335 -	DEF_LOOKUP("ppm",       &ppm_clk), -#endif -}; - -static void __init clk_register(void) -{ -	/* Register the lookups */ -	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); -} - -#if (defined(CONFIG_DEBUG_FS) && defined(CONFIG_U300_DEBUG)) -/* - * The following makes it possible to view the status (especially - * reference count and reset status) for the clocks in the platform - * by looking into the special file <debugfs>/u300_clocks - */ - -/* A list of all clocks in the platform */ -static struct clk *clks[] = { -	/* Top node clock for the AMBA bus */ -	&amba_clk, -	/* Connected directly to the AMBA bus */ -	&cpu_clk, -	&nandif_clk, -	&semi_clk, -#ifdef CONFIG_MACH_U300_BS335 -	&isp_clk, -	&cds_clk, -#endif -	&dma_clk, -	&aaif_clk, -	&apex_clk, -	&video_enc_clk, -	&xgam_clk, -	&ahb_clk, - -	/* AHB bridge clocks */ -	&ahb_subsys_clk, -	&intcon_clk, -	&mspro_clk, -	&emif_clk, -	/* FAST bridge clocks */ -	&fast_clk, -	&mmcsd_clk, -	&i2s0_clk, -	&i2s1_clk, -	&i2c0_clk, -	&i2c1_clk, -	&spi_clk, -#ifdef CONFIG_MACH_U300_BS335 -	&uart1_clk, -	&uart1_pclk, -#endif -	/* SLOW bridge clocks */ -	&slow_clk, -	&wdog_clk, -	&uart0_clk, -	&uart0_pclk, -	&app_timer_clk, -	&keypad_clk, -	&gpio_clk, -	&rtc_clk, -	&bustr_clk, -	&evhist_clk, -	&timer_clk, -#ifdef CONFIG_MACH_U300_BS335 -	&ppm_clk, -#endif -}; - -static int u300_clocks_show(struct seq_file *s, void *data) -{ -	struct clk *clk; -	int i; - -	seq_printf(s, "CLOCK           DEVICE          RESET STATE\t" \ -		   "ACTIVE\tUSERS\tHW CTRL FREQ\n"); -	seq_printf(s, "---------------------------------------------" \ -		   "-----------------------------------------\n"); -	for (i = 0; i < ARRAY_SIZE(clks); i++) { -		clk = clks[i]; -		if (clk != ERR_PTR(-ENOENT)) { -			/* Format clock and device name nicely */ -			char cdp[33]; -			int chars; - -			chars = snprintf(&cdp[0], 17, "%s", clk->name); -			while (chars < 16) { -				cdp[chars] = ' '; -				chars++; -			} -			chars = snprintf(&cdp[16], 17, "%s", clk->dev ? -					 dev_name(clk->dev) : "N/A"); -			while (chars < 16) { -				cdp[chars+16] = ' '; -				chars++; -			} -			cdp[32] = '\0'; -			if (clk->get_rate || clk->rate != 0) -				seq_printf(s, -					   "%s%s\t%s\t%d\t%s\t%lu Hz\n", -					   &cdp[0], -					   clk->reset ? -					   "ASSERTED" : "RELEASED", -					   clk->usecount ? "ON" : "OFF", -					   clk->usecount, -					   clk->hw_ctrld  ? "YES" : "NO ", -					   clk_get_rate(clk)); -			else -				seq_printf(s, -					   "%s%s\t%s\t%d\t%s\t" \ -					   "(unknown rate)\n", -					   &cdp[0], -					   clk->reset ? -					   "ASSERTED" : "RELEASED", -					   clk->usecount ? "ON" : "OFF", -					   clk->usecount, -					   clk->hw_ctrld  ? "YES" : "NO "); -		} -	} -	return 0; -} - -static int u300_clocks_open(struct inode *inode, struct file *file) -{ -	return single_open(file, u300_clocks_show, NULL); -} - -static const struct file_operations u300_clocks_operations = { -	.open		= u300_clocks_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -}; - -static int __init init_clk_read_debugfs(void) -{ -	/* Expose a simple debugfs interface to view all clocks */ -	(void) debugfs_create_file("u300_clocks", S_IFREG | S_IRUGO, -				   NULL, NULL, -				   &u300_clocks_operations); -	return 0; -} -/* - * This needs to come in after the core_initcall() for the - * overall clocks, because debugfs is not available until - * the subsystems come up. - */ -module_init(init_clk_read_debugfs); -#endif - -int __init u300_clock_init(void) -{ -	u16 val; - -	/* -	 * FIXME: shall all this powermanagement stuff really live here??? -	 */ - -	/* Set system to run at PLL208, max performance, a known state. */ -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val &= ~U300_SYSCON_CCR_CLKING_PERFORMANCE_MASK; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	/* Wait for the PLL208 to lock if not locked in yet */ -	while (!(readw(U300_SYSCON_VBASE + U300_SYSCON_CSR) & -		 U300_SYSCON_CSR_PLL208_LOCK_IND)); - -	/* Power management enable */ -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMCR); -	val |= U300_SYSCON_PMCR_PWR_MGNT_ENABLE; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMCR); - -	clk_register(); - -	/* -	 * Some of these may be on when we boot the system so make sure they -	 * are turned OFF. -	 */ -	syscon_block_reset_enable(&timer_clk); -	timer_clk.disable(&timer_clk); - -	/* -	 * These shall be turned on by default when we boot the system -	 * so make sure they are ON. (Adding CPU here is a bit too much.) -	 * These clocks will be claimed by drivers later. -	 */ -	syscon_block_reset_disable(&semi_clk); -	syscon_block_reset_disable(&emif_clk); -	clk_enable(&semi_clk); -	clk_enable(&emif_clk); - -	return 0; -} diff --git a/arch/arm/mach-u300/clock.h b/arch/arm/mach-u300/clock.h deleted file mode 100644 index c34f3ea3017..00000000000 --- a/arch/arm/mach-u300/clock.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * arch/arm/mach-u300/include/mach/clock.h - * - * Copyright (C) 2004 - 2005 Nokia corporation - * Written by Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com> - * Based on clocks.h by Tony Lindgren, Gordon McNutt and RidgeRun, Inc - * Copyright (C) 2007-2009 ST-Ericsson AB - * Adopted to ST-Ericsson U300 platforms by - * Jonas Aaberg <jonas.aberg@stericsson.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - */ - -#ifndef __MACH_CLOCK_H -#define __MACH_CLOCK_H - -#include <linux/clk.h> - -struct clk { -	struct list_head node; -	struct module *owner; -	struct device *dev; -	const char *name; -	struct clk *parent; - -	spinlock_t lock; -	unsigned long rate; -	bool reset; -	__u16 clk_val; -	__s8 usecount; -	__u32 res_reg; -	__u16 res_mask; - -	bool hw_ctrld; - -	void (*recalc) (struct clk *); -	int (*set_rate) (struct clk *, unsigned long); -	unsigned long (*get_rate) (struct clk *); -	unsigned long (*round_rate) (struct clk *, unsigned long); -	void (*init) (struct clk *); -	void (*enable) (struct clk *); -	void (*disable) (struct clk *); -}; - -int u300_clock_init(void); - -#endif diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c index aa53ee22438..35670b15f28 100644 --- a/arch/arm/mach-u300/core.c +++ b/arch/arm/mach-u300/core.c @@ -3,1540 +3,222 @@   * arch/arm/mach-u300/core.c   *   * - * Copyright (C) 2007-2010 ST-Ericsson AB + * Copyright (C) 2007-2012 ST-Ericsson SA   * License terms: GNU General Public License (GPL) version 2   * Core platform support, IRQ handling and device definitions.   * Author: Linus Walleij <linus.walleij@stericsson.com>   */  #include <linux/kernel.h> -#include <linux/init.h> -#include <linux/spinlock.h> -#include <linux/interrupt.h> -#include <linux/bitops.h> -#include <linux/device.h> -#include <linux/mm.h> -#include <linux/termios.h> -#include <linux/amba/bus.h> -#include <linux/platform_device.h> -#include <linux/gpio.h> +#include <linux/pinctrl/machine.h> +#include <linux/pinctrl/pinconf-generic.h> +#include <linux/platform_data/clk-u300.h> +#include <linux/irqchip.h> +#include <linux/of_address.h> +#include <linux/of_platform.h> +#include <linux/clocksource.h>  #include <linux/clk.h> -#include <linux/err.h> -#include <linux/mtd/nand.h> -#include <linux/mtd/fsmc.h> -#include <asm/types.h> -#include <asm/setup.h> -#include <asm/memory.h> -#include <asm/hardware/vic.h>  #include <asm/mach/map.h> -#include <asm/mach/irq.h> - -#include <mach/coh901318.h> -#include <mach/hardware.h> -#include <mach/syscon.h> -#include <mach/dma_channels.h> - -#include "clock.h" -#include "mmc.h" -#include "spi.h" -#include "i2c.h" +#include <asm/mach/arch.h>  /* - * Static I/O mappings that are needed for booting the U300 platforms. The - * only things we need are the areas where we find the timer, syscon and - * intcon, since the remaining device drivers will map their own memory - * physical to virtual as the need arise. + * These are the large blocks of memory allocated for I/O. + * the defines are used for setting up the I/O memory mapping.   */ -static struct map_desc u300_io_desc[] __initdata = { -	{ -		.virtual	= U300_SLOW_PER_VIRT_BASE, -		.pfn		= __phys_to_pfn(U300_SLOW_PER_PHYS_BASE), -		.length		= SZ_64K, -		.type		= MT_DEVICE, -	}, -	{ -		.virtual	= U300_AHB_PER_VIRT_BASE, -		.pfn		= __phys_to_pfn(U300_AHB_PER_PHYS_BASE), -		.length		= SZ_32K, -		.type		= MT_DEVICE, -	}, -	{ -		.virtual	= U300_FAST_PER_VIRT_BASE, -		.pfn		= __phys_to_pfn(U300_FAST_PER_PHYS_BASE), -		.length		= SZ_32K, -		.type		= MT_DEVICE, -	}, -	{ -		.virtual	= 0xffff2000, /* TCM memory */ -		.pfn		= __phys_to_pfn(0xffff2000), -		.length		= SZ_16K, -		.type		= MT_DEVICE, -	}, -	/* -	 * This overlaps with the IRQ vectors etc at 0xffff0000, so these -	 * may have to be moved to 0x00000000 in order to use the ROM. -	 */ -	/* -	{ -		.virtual	= U300_BOOTROM_VIRT_BASE, -		.pfn		= __phys_to_pfn(U300_BOOTROM_PHYS_BASE), -		.length		= SZ_64K, -		.type		= MT_ROM, -	}, -	*/ -}; - -void __init u300_map_io(void) -{ -	iotable_init(u300_io_desc, ARRAY_SIZE(u300_io_desc)); -} +/* NAND Flash CS0 */ +#define U300_NAND_CS0_PHYS_BASE		0x80000000 +/* NFIF */ +#define U300_NAND_IF_PHYS_BASE		0x9f800000 +/* ALE, CLE offset for FSMC NAND */ +#define PLAT_NAND_CLE			(1 << 16) +#define PLAT_NAND_ALE			(1 << 17) +/* AHB Peripherals */ +#define U300_AHB_PER_PHYS_BASE		0xa0000000 +#define U300_AHB_PER_VIRT_BASE		0xff010000 +/* FAST Peripherals */ +#define U300_FAST_PER_PHYS_BASE		0xc0000000 +#define U300_FAST_PER_VIRT_BASE		0xff020000 +/* SLOW Peripherals */ +#define U300_SLOW_PER_PHYS_BASE		0xc0010000 +#define U300_SLOW_PER_VIRT_BASE		0xff000000 +/* Boot ROM */ +#define U300_BOOTROM_PHYS_BASE		0xffff0000 +#define U300_BOOTROM_VIRT_BASE		0xffff0000 +/* SEMI config base */ +#define U300_SEMI_CONFIG_BASE		0x2FFE0000  /* - * Declaration of devices found on the U300 board and - * their respective memory locations. + * AHB peripherals   */ -static struct amba_device uart0_device = { -	.dev = { -		.init_name = "uart0", /* Slow device at 0x3000 offset */ -		.platform_data = NULL, -	}, -	.res = { -		.start = U300_UART0_BASE, -		.end   = U300_UART0_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -	.irq = { IRQ_U300_UART0, NO_IRQ }, -}; - -/* The U335 have an additional UART1 on the APP CPU */ -#ifdef CONFIG_MACH_U300_BS335 -static struct amba_device uart1_device = { -	.dev = { -		.init_name = "uart1", /* Fast device at 0x7000 offset */ -		.platform_data = NULL, -	}, -	.res = { -		.start = U300_UART1_BASE, -		.end   = U300_UART1_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -	.irq = { IRQ_U300_UART1, NO_IRQ }, -}; -#endif - -static struct amba_device pl172_device = { -	.dev = { -		.init_name = "pl172", /* AHB device at 0x4000 offset */ -		.platform_data = NULL, -	}, -	.res = { -		.start = U300_EMIF_CFG_BASE, -		.end   = U300_EMIF_CFG_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -}; +/* AHB Peripherals Bridge Controller */ +#define U300_AHB_BRIDGE_BASE		(U300_AHB_PER_PHYS_BASE+0x0000) +/* Vectored Interrupt Controller 0, servicing 32 interrupts */ +#define U300_INTCON0_BASE		(U300_AHB_PER_PHYS_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		IOMEM(U300_AHB_PER_VIRT_BASE+0x2000) +/* Memory Stick Pro (MSPRO) controller */ +#define U300_MSPRO_BASE			(U300_AHB_PER_PHYS_BASE+0x3000) +/* EMIF Configuration Area */ +#define U300_EMIF_CFG_BASE		(U300_AHB_PER_PHYS_BASE+0x4000)  /* - * Everything within this next ifdef deals with external devices connected to - * the APP SPI bus. + * FAST peripherals   */ -static struct amba_device pl022_device = { -	.dev = { -		.coherent_dma_mask = ~0, -		.init_name = "pl022", /* Fast device at 0x6000 offset */ -	}, -	.res = { -		.start = U300_SPI_BASE, -		.end   = U300_SPI_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -	.irq = {IRQ_U300_SPI, NO_IRQ }, -	/* -	 * This device has a DMA channel but the Linux driver does not use -	 * it currently. -	 */ -}; -static struct amba_device mmcsd_device = { -	.dev = { -		.init_name = "mmci", /* Fast device at 0x1000 offset */ -		.platform_data = NULL, /* Added later */ -	}, -	.res = { -		.start = U300_MMCSD_BASE, -		.end   = U300_MMCSD_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -	.irq = {IRQ_U300_MMCSD_MCIINTR0, IRQ_U300_MMCSD_MCIINTR1 }, -	/* -	 * This device has a DMA channel but the Linux driver does not use -	 * it currently. -	 */ -}; +/* FAST bridge control */ +#define U300_FAST_BRIDGE_BASE		(U300_FAST_PER_PHYS_BASE+0x0000) +/* MMC/SD controller */ +#define U300_MMCSD_BASE			(U300_FAST_PER_PHYS_BASE+0x1000) +/* PCM I2S0 controller */ +#define U300_PCM_I2S0_BASE		(U300_FAST_PER_PHYS_BASE+0x2000) +/* PCM I2S1 controller */ +#define U300_PCM_I2S1_BASE		(U300_FAST_PER_PHYS_BASE+0x3000) +/* I2C0 controller */ +#define U300_I2C0_BASE			(U300_FAST_PER_PHYS_BASE+0x4000) +/* I2C1 controller */ +#define U300_I2C1_BASE			(U300_FAST_PER_PHYS_BASE+0x5000) +/* SPI controller */ +#define U300_SPI_BASE			(U300_FAST_PER_PHYS_BASE+0x6000) +/* Fast UART1 on U335 only */ +#define U300_UART1_BASE			(U300_FAST_PER_PHYS_BASE+0x7000)  /* - * The order of device declaration may be important, since some devices - * have dependencies on other devices being initialized first. - */ -static struct amba_device *amba_devs[] __initdata = { -	&uart0_device, -#ifdef CONFIG_MACH_U300_BS335 -	&uart1_device, -#endif -	&pl022_device, -	&pl172_device, -	&mmcsd_device, -}; - -/* Here follows a list of all hw resources that the platform devices - * allocate. Note, clock dependencies are not included + * SLOW peripherals   */ -static struct resource gpio_resources[] = { -	{ -		.start = U300_GPIO_BASE, -		.end   = (U300_GPIO_BASE + SZ_4K - 1), -		.flags = IORESOURCE_MEM, -	}, -	{ -		.name  = "gpio0", -		.start = IRQ_U300_GPIO_PORT0, -		.end   = IRQ_U300_GPIO_PORT0, -		.flags = IORESOURCE_IRQ, -	}, -	{ -		.name  = "gpio1", -		.start = IRQ_U300_GPIO_PORT1, -		.end   = IRQ_U300_GPIO_PORT1, -		.flags = IORESOURCE_IRQ, -	}, -	{ -		.name  = "gpio2", -		.start = IRQ_U300_GPIO_PORT2, -		.end   = IRQ_U300_GPIO_PORT2, -		.flags = IORESOURCE_IRQ, -	}, -#ifdef U300_COH901571_3 -	{ -		.name  = "gpio3", -		.start = IRQ_U300_GPIO_PORT3, -		.end   = IRQ_U300_GPIO_PORT3, -		.flags = IORESOURCE_IRQ, -	}, -	{ -		.name  = "gpio4", -		.start = IRQ_U300_GPIO_PORT4, -		.end   = IRQ_U300_GPIO_PORT4, -		.flags = IORESOURCE_IRQ, -	}, -#ifdef CONFIG_MACH_U300_BS335 -	{ -		.name  = "gpio5", -		.start = IRQ_U300_GPIO_PORT5, -		.end   = IRQ_U300_GPIO_PORT5, -		.flags = IORESOURCE_IRQ, -	}, -	{ -		.name  = "gpio6", -		.start = IRQ_U300_GPIO_PORT6, -		.end   = IRQ_U300_GPIO_PORT6, -		.flags = IORESOURCE_IRQ, -	}, -#endif /* CONFIG_MACH_U300_BS335 */ -#endif /* U300_COH901571_3 */ -}; - -static struct resource keypad_resources[] = { -	{ -		.start = U300_KEYPAD_BASE, -		.end   = U300_KEYPAD_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -	{ -		.name  = "coh901461-press", -		.start = IRQ_U300_KEYPAD_KEYBF, -		.end   = IRQ_U300_KEYPAD_KEYBF, -		.flags = IORESOURCE_IRQ, -	}, -	{ -		.name  = "coh901461-release", -		.start = IRQ_U300_KEYPAD_KEYBR, -		.end   = IRQ_U300_KEYPAD_KEYBR, -		.flags = IORESOURCE_IRQ, -	}, -}; - -static struct resource rtc_resources[] = { -	{ -		.start = U300_RTC_BASE, -		.end   = U300_RTC_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -	{ -		.start = IRQ_U300_RTC, -		.end   = IRQ_U300_RTC, -		.flags = IORESOURCE_IRQ, -	}, -}; +/* SLOW bridge control */ +#define U300_SLOW_BRIDGE_BASE		(U300_SLOW_PER_PHYS_BASE) +/* SYSCON */ +#define U300_SYSCON_BASE		(U300_SLOW_PER_PHYS_BASE+0x1000) +#define U300_SYSCON_VBASE		IOMEM(U300_SLOW_PER_VIRT_BASE+0x1000) +/* Watchdog */ +#define U300_WDOG_BASE			(U300_SLOW_PER_PHYS_BASE+0x2000) +/* UART0 */ +#define U300_UART0_BASE			(U300_SLOW_PER_PHYS_BASE+0x3000) +/* APP side special timer */ +#define U300_TIMER_APP_BASE		(U300_SLOW_PER_PHYS_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) +/* GPIO */ +#define U300_GPIO_BASE			(U300_SLOW_PER_PHYS_BASE+0x6000) +/* RTC */ +#define U300_RTC_BASE			(U300_SLOW_PER_PHYS_BASE+0x7000) +/* Bus tracer */ +#define U300_BUSTR_BASE			(U300_SLOW_PER_PHYS_BASE+0x8000) +/* Event handler (hardware queue) */ +#define U300_EVHIST_BASE		(U300_SLOW_PER_PHYS_BASE+0x9000) +/* Genric Timer */ +#define U300_TIMER_BASE			(U300_SLOW_PER_PHYS_BASE+0xa000) +/* PPM */ +#define U300_PPM_BASE			(U300_SLOW_PER_PHYS_BASE+0xb000)  /* - * Fsmc does have IRQs: #43 and #44 (NFIF and NFIF2) - * but these are not yet used by the driver. + * REST peripherals   */ -static struct resource fsmc_resources[] = { -	{ -		.name  = "nand_data", -		.start = U300_NAND_CS0_PHYS_BASE, -		.end   = U300_NAND_CS0_PHYS_BASE + SZ_16K - 1, -		.flags = IORESOURCE_MEM, -	}, -	{ -		.name  = "fsmc_regs", -		.start = U300_NAND_IF_PHYS_BASE, -		.end   = U300_NAND_IF_PHYS_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -}; - -static struct resource i2c0_resources[] = { -	{ -		.start = U300_I2C0_BASE, -		.end   = U300_I2C0_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -	{ -		.start = IRQ_U300_I2C0, -		.end   = IRQ_U300_I2C0, -		.flags = IORESOURCE_IRQ, -	}, -}; - -static struct resource i2c1_resources[] = { -	{ -		.start = U300_I2C1_BASE, -		.end   = U300_I2C1_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -	{ -		.start = IRQ_U300_I2C1, -		.end   = IRQ_U300_I2C1, -		.flags = IORESOURCE_IRQ, -	}, - -}; - -static struct resource wdog_resources[] = { -	{ -		.start = U300_WDOG_BASE, -		.end   = U300_WDOG_BASE + SZ_4K - 1, -		.flags = IORESOURCE_MEM, -	}, -	{ -		.start = IRQ_U300_WDOG, -		.end   = IRQ_U300_WDOG, -		.flags = IORESOURCE_IRQ, -	} -}; - -/* TODO: These should be protected by suitable #ifdef's */ -static struct resource ave_resources[] = { -	{ -		.name  = "AVE3e I/O Area", -		.start = U300_VIDEOENC_BASE, -		.end   = U300_VIDEOENC_BASE + SZ_512K - 1, -		.flags = IORESOURCE_MEM, -	}, -	{ -		.name  = "AVE3e IRQ0", -		.start = IRQ_U300_VIDEO_ENC_0, -		.end   = IRQ_U300_VIDEO_ENC_0, -		.flags = IORESOURCE_IRQ, -	}, -	{ -		.name  = "AVE3e IRQ1", -		.start = IRQ_U300_VIDEO_ENC_1, -		.end   = IRQ_U300_VIDEO_ENC_1, -		.flags = IORESOURCE_IRQ, -	}, -	{ -		.name  = "AVE3e Physmem Area", -		.start = 0, /* 0 will be remapped to reserved memory */ -		.end   = SZ_1M - 1, -		.flags = IORESOURCE_MEM, -	}, -	/* -	 * The AVE3e requires two regions of 256MB that it considers -	 * "invisible". The hardware will not be able to access these -	 * addresses, so they should never point to system RAM. -	 */ -	{ -		.name  = "AVE3e Reserved 0", -		.start = 0xd0000000, -		.end   = 0xd0000000 + SZ_256M - 1, -		.flags = IORESOURCE_MEM, -	}, -	{ -		.name  = "AVE3e Reserved 1", -		.start = 0xe0000000, -		.end   = 0xe0000000 + SZ_256M - 1, -		.flags = IORESOURCE_MEM, -	}, -}; -static struct resource dma_resource[] = { -	{ -		.start = U300_DMAC_BASE, -		.end = U300_DMAC_BASE + PAGE_SIZE - 1, -		.flags =  IORESOURCE_MEM, -	}, -	{ -		.start = IRQ_U300_DMA, -		.end = IRQ_U300_DMA, -		.flags =  IORESOURCE_IRQ, -	} -}; +/* ISP (image signal processor) */ +#define U300_ISP_BASE			(0xA0008000) +/* DMA Controller base */ +#define U300_DMAC_BASE			(0xC0020000) +/* MSL Base */ +#define U300_MSL_BASE			(0xc0022000) +/* APEX Base */ +#define U300_APEX_BASE			(0xc0030000) +/* Video Encoder Base */ +#define U300_VIDEOENC_BASE		(0xc0080000) +/* XGAM Base */ +#define U300_XGAM_BASE			(0xd0000000) -#ifdef CONFIG_MACH_U300_BS335 -/* points out all dma slave channels. - * Syntax is [A1, B1, A2, B2, .... ,-1,-1] - * Select all channels from A to B, end of list is marked with -1,-1 +/* + * SYSCON addresses applicable to the core machine.   */ -static int dma_slave_channels[] = { -	U300_DMA_MSL_TX_0, U300_DMA_SPI_RX, -	U300_DMA_UART1_TX, U300_DMA_UART1_RX, -1, -1}; - -/* points out all dma memcpy channels. */ -static int dma_memcpy_channels[] = { -	U300_DMA_GENERAL_PURPOSE_0, U300_DMA_GENERAL_PURPOSE_8, -1, -1}; - -#else /* CONFIG_MACH_U300_BS335 */ -static int dma_slave_channels[] = {U300_DMA_MSL_TX_0, U300_DMA_SPI_RX, -1, -1}; -static int dma_memcpy_channels[] = { -	U300_DMA_GENERAL_PURPOSE_0, U300_DMA_GENERAL_PURPOSE_10, -1, -1}; - -#endif +/* Chip ID register 16bit (R/-) */ +#define U300_SYSCON_CIDR					(0x400) +/* SMCR */ +#define U300_SYSCON_SMCR					(0x4d0) +#define U300_SYSCON_SMCR_FIELD_MASK				(0x000e) +#define U300_SYSCON_SMCR_SEMI_SREFACK_IND			(0x0008) +#define U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE			(0x0004) +#define U300_SYSCON_SMCR_SEMI_EXT_BOOT_MODE_ENABLE		(0x0002) +/* CPU_SW_DBGEN Software Debug Enable 16bit (R/W) */ +#define U300_SYSCON_CSDR					(0x4f0) +#define U300_SYSCON_CSDR_SW_DEBUG_ENABLE			(0x0001) +/* PRINT_CONTROL Print Control 16bit (R/-) */ +#define U300_SYSCON_PCR						(0x4f8) +#define U300_SYSCON_PCR_SERV_IND				(0x0001) +/* BOOT_CONTROL 16bit (R/-) */ +#define U300_SYSCON_BCR						(0x4fc) +#define U300_SYSCON_BCR_ACC_CPU_SUBSYS_VINITHI_IND		(0x0400) +#define U300_SYSCON_BCR_APP_CPU_SUBSYS_VINITHI_IND		(0x0200) +#define U300_SYSCON_BCR_EXTRA_BOOT_OPTION_MASK			(0x01FC) +#define U300_SYSCON_BCR_APP_BOOT_SERV_MASK			(0x0003) + +static void __iomem *syscon_base; -/** register dma for memory access - * - * active  1 means dma intends to access memory - *         0 means dma wont access memory +/* + * Static I/O mappings that are needed for booting the U300 platforms. The + * only things we need are the areas where we find the timer, syscon and + * intcon, since the remaining device drivers will map their own memory + * physical to virtual as the need arise.   */ -static void coh901318_access_memory_state(struct device *dev, bool active) -{ -} - -#define flags_memcpy_config (COH901318_CX_CFG_CH_DISABLE | \ -			COH901318_CX_CFG_RM_MEMORY_TO_MEMORY | \ -			COH901318_CX_CFG_LCR_DISABLE | \ -			COH901318_CX_CFG_TC_IRQ_ENABLE | \ -			COH901318_CX_CFG_BE_IRQ_ENABLE) -#define flags_memcpy_lli_chained (COH901318_CX_CTRL_TC_ENABLE | \ -			COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \ -			COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \ -			COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \ -			COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \ -			COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \ -			COH901318_CX_CTRL_MASTER_MODE_M1RW | \ -			COH901318_CX_CTRL_TCP_DISABLE | \ -			COH901318_CX_CTRL_TC_IRQ_DISABLE | \ -			COH901318_CX_CTRL_HSP_DISABLE | \ -			COH901318_CX_CTRL_HSS_DISABLE | \ -			COH901318_CX_CTRL_DDMA_LEGACY | \ -			COH901318_CX_CTRL_PRDD_SOURCE) -#define flags_memcpy_lli (COH901318_CX_CTRL_TC_ENABLE | \ -			COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \ -			COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \ -			COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \ -			COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \ -			COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \ -			COH901318_CX_CTRL_MASTER_MODE_M1RW | \ -			COH901318_CX_CTRL_TCP_DISABLE | \ -			COH901318_CX_CTRL_TC_IRQ_DISABLE | \ -			COH901318_CX_CTRL_HSP_DISABLE | \ -			COH901318_CX_CTRL_HSS_DISABLE | \ -			COH901318_CX_CTRL_DDMA_LEGACY | \ -			COH901318_CX_CTRL_PRDD_SOURCE) -#define flags_memcpy_lli_last (COH901318_CX_CTRL_TC_ENABLE | \ -			COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \ -			COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \ -			COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \ -			COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \ -			COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \ -			COH901318_CX_CTRL_MASTER_MODE_M1RW | \ -			COH901318_CX_CTRL_TCP_DISABLE | \ -			COH901318_CX_CTRL_TC_IRQ_ENABLE | \ -			COH901318_CX_CTRL_HSP_DISABLE | \ -			COH901318_CX_CTRL_HSS_DISABLE | \ -			COH901318_CX_CTRL_DDMA_LEGACY | \ -			COH901318_CX_CTRL_PRDD_SOURCE) - -const struct coh_dma_channel chan_config[U300_DMA_CHANNELS] = { -	{ -		.number = U300_DMA_MSL_TX_0, -		.name = "MSL TX 0", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 0 * 0x40 + 0x20, -	}, -	{ -		.number = U300_DMA_MSL_TX_1, -		.name = "MSL TX 1", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 1 * 0x40 + 0x20, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -	}, -	{ -		.number = U300_DMA_MSL_TX_2, -		.name = "MSL TX 2", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 2 * 0x40 + 0x20, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.desc_nbr_max = 10, -	}, -	{ -		.number = U300_DMA_MSL_TX_3, -		.name = "MSL TX 3", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 3 * 0x40 + 0x20, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -	}, -	{ -		.number = U300_DMA_MSL_TX_4, -		.name = "MSL TX 4", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 4 * 0x40 + 0x20, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -	}, -	{ -		.number = U300_DMA_MSL_TX_5, -		.name = "MSL TX 5", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 5 * 0x40 + 0x20, -	}, -	{ -		.number = U300_DMA_MSL_TX_6, -		.name = "MSL TX 6", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 6 * 0x40 + 0x20, -	}, -	{ -		.number = U300_DMA_MSL_RX_0, -		.name = "MSL RX 0", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 0 * 0x40 + 0x220, -	}, -	{ -		.number = U300_DMA_MSL_RX_1, -		.name = "MSL RX 1", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 1 * 0x40 + 0x220, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli = 0, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -	}, -	{ -		.number = U300_DMA_MSL_RX_2, -		.name = "MSL RX 2", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 2 * 0x40 + 0x220, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -	}, -	{ -		.number = U300_DMA_MSL_RX_3, -		.name = "MSL RX 3", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 3 * 0x40 + 0x220, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -	}, -	{ -		.number = U300_DMA_MSL_RX_4, -		.name = "MSL RX 4", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 4 * 0x40 + 0x220, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -	}, -	{ -		.number = U300_DMA_MSL_RX_5, -		.name = "MSL RX 5", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 5 * 0x40 + 0x220, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | -				COH901318_CX_CTRL_PRDD_DEST, -	}, -	{ -		.number = U300_DMA_MSL_RX_6, -		.name = "MSL RX 6", -		.priority_high = 0, -		.dev_addr = U300_MSL_BASE + 6 * 0x40 + 0x220, -	}, -	{ -		.number = U300_DMA_MMCSD_RX_TX, -		.name = "MMCSD RX TX", -		.priority_high = 0, -		.dev_addr =  U300_MMCSD_BASE + 0x080, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_32_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY, - -	}, -	{ -		.number = U300_DMA_MSPRO_TX, -		.name = "MSPRO TX", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_MSPRO_RX, -		.name = "MSPRO RX", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_UART0_TX, -		.name = "UART0 TX", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_UART0_RX, -		.name = "UART0 RX", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_APEX_TX, -		.name = "APEX TX", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_APEX_RX, -		.name = "APEX RX", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_PCM_I2S0_TX, -		.name = "PCM I2S0 TX", -		.priority_high = 1, -		.dev_addr = U300_PCM_I2S0_BASE + 0x14, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -	}, -	{ -		.number = U300_DMA_PCM_I2S0_RX, -		.name = "PCM I2S0 RX", -		.priority_high = 1, -		.dev_addr = U300_PCM_I2S0_BASE + 0x10, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_DEST, -	}, -	{ -		.number = U300_DMA_PCM_I2S1_TX, -		.name = "PCM I2S1 TX", -		.priority_high = 1, -		.dev_addr =  U300_PCM_I2S1_BASE + 0x14, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_SOURCE, -	}, -	{ -		.number = U300_DMA_PCM_I2S1_RX, -		.name = "PCM I2S1 RX", -		.priority_high = 1, -		.dev_addr = U300_PCM_I2S1_BASE + 0x10, -		.param.config = COH901318_CX_CFG_CH_DISABLE | -				COH901318_CX_CFG_LCR_DISABLE | -				COH901318_CX_CFG_TC_IRQ_ENABLE | -				COH901318_CX_CFG_BE_IRQ_ENABLE, -		.param.ctrl_lli_chained = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_DISABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_DISABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_DEST, -		.param.ctrl_lli_last = 0 | -				COH901318_CX_CTRL_TC_ENABLE | -				COH901318_CX_CTRL_BURST_COUNT_16_BYTES | -				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | -				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | -				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | -				COH901318_CX_CTRL_MASTER_MODE_M1RW | -				COH901318_CX_CTRL_TCP_ENABLE | -				COH901318_CX_CTRL_TC_IRQ_ENABLE | -				COH901318_CX_CTRL_HSP_ENABLE | -				COH901318_CX_CTRL_HSS_DISABLE | -				COH901318_CX_CTRL_DDMA_LEGACY | -				COH901318_CX_CTRL_PRDD_DEST, -	}, -	{ -		.number = U300_DMA_XGAM_CDI, -		.name = "XGAM CDI", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_XGAM_PDI, -		.name = "XGAM PDI", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_SPI_TX, -		.name = "SPI TX", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_SPI_RX, -		.name = "SPI RX", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_0, -		.name = "GENERAL 00", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_1, -		.name = "GENERAL 01", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_2, -		.name = "GENERAL 02", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_3, -		.name = "GENERAL 03", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_4, -		.name = "GENERAL 04", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_5, -		.name = "GENERAL 05", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_6, -		.name = "GENERAL 06", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_7, -		.name = "GENERAL 07", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_8, -		.name = "GENERAL 08", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -#ifdef CONFIG_MACH_U300_BS335 -	{ -		.number = U300_DMA_UART1_TX, -		.name = "UART1 TX", -		.priority_high = 0, -	}, -	{ -		.number = U300_DMA_UART1_RX, -		.name = "UART1 RX", -		.priority_high = 0, -	} -#else -	{ -		.number = U300_DMA_GENERAL_PURPOSE_9, -		.name = "GENERAL 09", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	}, -	{ -		.number = U300_DMA_GENERAL_PURPOSE_10, -		.name = "GENERAL 10", -		.priority_high = 0, - -		.param.config = flags_memcpy_config, -		.param.ctrl_lli_chained = flags_memcpy_lli_chained, -		.param.ctrl_lli = flags_memcpy_lli, -		.param.ctrl_lli_last = flags_memcpy_lli_last, -	} -#endif -}; - - -static struct coh901318_platform coh901318_platform = { -	.chans_slave = dma_slave_channels, -	.chans_memcpy = dma_memcpy_channels, -	.access_memory_state = coh901318_access_memory_state, -	.chan_conf = chan_config, -	.max_channels = U300_DMA_CHANNELS, -}; - -static struct platform_device wdog_device = { -	.name = "coh901327_wdog", -	.id = -1, -	.num_resources = ARRAY_SIZE(wdog_resources), -	.resource = wdog_resources, -}; - -static struct platform_device i2c0_device = { -	.name = "stu300", -	.id = 0, -	.num_resources = ARRAY_SIZE(i2c0_resources), -	.resource = i2c0_resources, -}; - -static struct platform_device i2c1_device = { -	.name = "stu300", -	.id = 1, -	.num_resources = ARRAY_SIZE(i2c1_resources), -	.resource = i2c1_resources, -}; - -static struct platform_device gpio_device = { -	.name = "u300-gpio", -	.id = -1, -	.num_resources = ARRAY_SIZE(gpio_resources), -	.resource = gpio_resources, -}; - -static struct platform_device keypad_device = { -	.name = "keypad", -	.id = -1, -	.num_resources = ARRAY_SIZE(keypad_resources), -	.resource = keypad_resources, -}; - -static struct platform_device rtc_device = { -	.name = "rtc-coh901331", -	.id = -1, -	.num_resources = ARRAY_SIZE(rtc_resources), -	.resource = rtc_resources, -}; - -static struct mtd_partition u300_partitions[] = { +static struct map_desc u300_io_desc[] __initdata = {  	{ -		.name = "bootrecords", -		.offset = 0, -		.size = SZ_128K, +		.virtual	= U300_SLOW_PER_VIRT_BASE, +		.pfn		= __phys_to_pfn(U300_SLOW_PER_PHYS_BASE), +		.length		= SZ_64K, +		.type		= MT_DEVICE,  	},  	{ -		.name = "free", -		.offset = SZ_128K, -		.size = 8064 * SZ_1K, +		.virtual	= U300_AHB_PER_VIRT_BASE, +		.pfn		= __phys_to_pfn(U300_AHB_PER_PHYS_BASE), +		.length		= SZ_32K, +		.type		= MT_DEVICE,  	},  	{ -		.name = "platform", -		.offset = 8192 * SZ_1K, -		.size = 253952 * SZ_1K, +		.virtual	= U300_FAST_PER_VIRT_BASE, +		.pfn		= __phys_to_pfn(U300_FAST_PER_PHYS_BASE), +		.length		= SZ_32K, +		.type		= MT_DEVICE,  	},  }; -static struct fsmc_nand_platform_data nand_platform_data = { -	.partitions = u300_partitions, -	.nr_partitions = ARRAY_SIZE(u300_partitions), -	.options = NAND_SKIP_BBTSCAN, -	.width = FSMC_NAND_BW8, -}; +static void __init u300_map_io(void) +{ +	iotable_init(u300_io_desc, ARRAY_SIZE(u300_io_desc)); +} -static struct platform_device nand_device = { -	.name = "fsmc-nand", -	.id = -1, -	.resource = fsmc_resources, -	.num_resources = ARRAY_SIZE(fsmc_resources), -	.dev = { -		.platform_data = &nand_platform_data, -	}, +static unsigned long pin_pullup_conf[] = { +	PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 1),  }; -static struct platform_device ave_device = { -	.name = "video_enc", -	.id = -1, -	.num_resources = ARRAY_SIZE(ave_resources), -	.resource = ave_resources, +static unsigned long pin_highz_conf[] = { +	PIN_CONF_PACKED(PIN_CONFIG_BIAS_HIGH_IMPEDANCE, 0),  }; -static struct platform_device dma_device = { -	.name		= "coh901318", -	.id		= -1, -	.resource	= dma_resource, -	.num_resources  = ARRAY_SIZE(dma_resource), -	.dev = { -		.platform_data = &coh901318_platform, -		.coherent_dma_mask = ~0, -	}, +/* Pin control settings */ +static struct pinctrl_map __initdata u300_pinmux_map[] = { +	/* anonymous maps for chip power and EMIFs */ +	PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "power"), +	PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif0"), +	PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif1"), +	/* per-device maps for MMC/SD, SPI and UART */ +	PIN_MAP_MUX_GROUP_DEFAULT("mmci",  "pinctrl-u300", NULL, "mmc0"), +	PIN_MAP_MUX_GROUP_DEFAULT("pl022", "pinctrl-u300", NULL, "spi0"), +	PIN_MAP_MUX_GROUP_DEFAULT("uart0", "pinctrl-u300", NULL, "uart0"), +	/* This pin is used for clock return rather than GPIO */ +	PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO APP GPIO 11", +				    pin_pullup_conf), +	/* This pin is used for card detect */ +	PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO MS INS", +				    pin_highz_conf),  }; -/* - * Notice that AMBA devices are initialized before platform devices. - * - */ -static struct platform_device *platform_devs[] __initdata = { -	&dma_device, -	&i2c0_device, -	&i2c1_device, -	&keypad_device, -	&rtc_device, -	&gpio_device, -	&nand_device, -	&wdog_device, -	&ave_device -}; - - -/* - * Interrupts: the U300 platforms have two pl190 ARM PrimeCells connected - * together so some interrupts are connected to the first one and some - * to the second one. - */ -void __init u300_init_irq(void) -{ -	u32 mask[2] = {0, 0}; -	struct clk *clk; -	int i; - -	/* initialize clocking early, we want to clock the INTCON */ -	u300_clock_init(); - -	/* Clock the interrupt controller */ -	clk = clk_get_sys("intcon", NULL); -	BUG_ON(IS_ERR(clk)); -	clk_enable(clk); - -	for (i = 0; i < NR_IRQS; i++) -		set_bit(i, (unsigned long *) &mask[0]); -	vic_init((void __iomem *) U300_INTCON0_VBASE, 0, mask[0], mask[0]); -	vic_init((void __iomem *) U300_INTCON1_VBASE, 32, mask[1], mask[1]); -} - - -/* - * U300 platforms peripheral handling - */  struct db_chip {  	u16 chipid;  	const char *name; @@ -1593,7 +275,7 @@ static void __init u300_init_check_chip(void)  	const char unknown[] = "UNKNOWN";  	/* Read out and print chip ID */ -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CIDR); +	val = readw(syscon_base + U300_SYSCON_CIDR);  	/* This is in funky bigendian order... */  	val = (val & 0xFFU) << 8 | (val >> 8);  	chip = db_chips; @@ -1608,115 +290,126 @@ static void __init u300_init_check_chip(void)  	printk(KERN_INFO "Initializing U300 system on %s baseband chip " \  	       "(chip ID 0x%04x)\n", chipname, val); -#ifdef CONFIG_MACH_U300_BS330 -	if ((val & 0xFF00U) != 0xd800) { -		printk(KERN_ERR "Platform configured for BS330 " \ -		       "with DB3200 but %s detected, expect problems!", -		       chipname); -	} -#endif -#ifdef CONFIG_MACH_U300_BS335  	if ((val & 0xFF00U) != 0xf000 && (val & 0xFF00U) != 0xf100) { -		printk(KERN_ERR "Platform configured for BS365 " \ +		printk(KERN_ERR "Platform configured for BS335 " \  		       " with DB3350 but %s detected, expect problems!",  		       chipname);  	} -#endif -#ifdef CONFIG_MACH_U300_BS365 -	if ((val & 0xFF00U) != 0xe800) { -		printk(KERN_ERR "Platform configured for BS365 " \ -		       "with DB3210 but %s detected, expect problems!", -		       chipname); -	} -#endif +} +/* Forward declare this function from the watchdog */ +void coh901327_watchdog_reset(void); +static void u300_restart(enum reboot_mode mode, const char *cmd) +{ +	switch (mode) { +	case REBOOT_SOFT: +	case REBOOT_HARD: +#ifdef CONFIG_COH901327_WATCHDOG +		coh901327_watchdog_reset(); +#endif +		break; +	default: +		/* Do nothing */ +		break; +	} +	/* Wait for system do die/reset. */ +	while (1);  } -/* - * Some devices and their resources require reserved physical memory from - * the end of the available RAM. This function traverses the list of devices - * and assigns actual addresses to these. - */ -static void __init u300_assign_physmem(void) +/* These are mostly to get the right device names for the clock lookups */ +static struct of_dev_auxdata u300_auxdata_lookup[] __initdata = { +	OF_DEV_AUXDATA("stericsson,pinctrl-u300", U300_SYSCON_BASE, +		"pinctrl-u300", NULL), +	OF_DEV_AUXDATA("stericsson,gpio-coh901", U300_GPIO_BASE, +		"u300-gpio", NULL), +	OF_DEV_AUXDATA("stericsson,coh901327", U300_WDOG_BASE, +		"coh901327_wdog", NULL), +	OF_DEV_AUXDATA("stericsson,coh901331", U300_RTC_BASE, +		"rtc-coh901331", NULL), +	OF_DEV_AUXDATA("stericsson,coh901318", U300_DMAC_BASE, +		"coh901318", NULL), +	OF_DEV_AUXDATA("stericsson,fsmc-nand", U300_NAND_IF_PHYS_BASE, +		"fsmc-nand", NULL), +	OF_DEV_AUXDATA("arm,primecell", U300_UART0_BASE, +		"uart0", NULL), +	OF_DEV_AUXDATA("arm,primecell", U300_UART1_BASE, +		"uart1", NULL), +	OF_DEV_AUXDATA("arm,primecell", U300_SPI_BASE, +		"pl022", NULL), +	OF_DEV_AUXDATA("st,ddci2c", U300_I2C0_BASE, +		"stu300.0", NULL), +	OF_DEV_AUXDATA("st,ddci2c", U300_I2C1_BASE, +		"stu300.1", NULL), +	OF_DEV_AUXDATA("arm,primecell", U300_MMCSD_BASE, +		"mmci", NULL), +	{ /* sentinel */ }, +}; + +static void __init u300_init_irq_dt(void)  { -	unsigned long curr_start = __pa(high_memory); -	int i, j; +	struct device_node *syscon; +	struct clk *clk; -	for (i = 0; i < ARRAY_SIZE(platform_devs); i++) { -		for (j = 0; j < platform_devs[i]->num_resources; j++) { -			struct resource *const res = -			  &platform_devs[i]->resource[j]; +	syscon = of_find_node_by_path("/syscon@c0011000"); +	if (!syscon) { +		pr_crit("could not find syscon node\n"); +		return; +	} +	syscon_base = of_iomap(syscon, 0); +	if (!syscon_base) { +		pr_crit("could not remap syscon\n"); +		return; +	} +	/* initialize clocking early, we want to clock the INTCON */ +	u300_clk_init(syscon_base); -			if (IORESOURCE_MEM == res->flags && -				     0 == res->start) { -				res->start  = curr_start; -				res->end   += curr_start; -				curr_start += (res->end - res->start + 1); +	/* Bootstrap EMIF and SEMI clocks */ +	clk = clk_get_sys("pl172", NULL); +	BUG_ON(IS_ERR(clk)); +	clk_prepare_enable(clk); +	clk = clk_get_sys("semi", NULL); +	BUG_ON(IS_ERR(clk)); +	clk_prepare_enable(clk); -				printk(KERN_INFO "core.c: Mapping RAM " \ -				       "%#x-%#x to device %s:%s\n", -					res->start, res->end, -				       platform_devs[i]->name, res->name); -			} -		} -	} +	/* Clock the interrupt controller */ +	clk = clk_get_sys("intcon", NULL); +	BUG_ON(IS_ERR(clk)); +	clk_prepare_enable(clk); + +	irqchip_init();  } -void __init u300_init_devices(void) +static void __init u300_init_machine_dt(void)  { -	int i;  	u16 val;  	/* Check what platform we run and print some status information */  	u300_init_check_chip(); -	/* Set system to run at PLL208, max performance, a known state. */ -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CCR); -	val &= ~U300_SYSCON_CCR_CLKING_PERFORMANCE_MASK; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR); -	/* Wait for the PLL208 to lock if not locked in yet */ -	while (!(readw(U300_SYSCON_VBASE + U300_SYSCON_CSR) & -		 U300_SYSCON_CSR_PLL208_LOCK_IND)); -	/* Initialize SPI device with some board specifics */ -	u300_spi_init(&pl022_device); - -	/* Register the AMBA devices in the AMBA bus abstraction layer */ -	for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { -		struct amba_device *d = amba_devs[i]; -		amba_device_register(d, &iomem_resource); -	} - -	u300_assign_physmem(); - -	/* Register subdevices on the I2C buses */ -	u300_i2c_register_board_devices(); +	/* Initialize pinmuxing */ +	pinctrl_register_mappings(u300_pinmux_map, +				  ARRAY_SIZE(u300_pinmux_map)); -	/* Register subdevices on the SPI bus */ -	u300_spi_register_board_devices(); +	of_platform_populate(NULL, of_default_bus_match_table, +			u300_auxdata_lookup, NULL); -	/* Register the platform devices */ -	platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); - -#ifndef CONFIG_MACH_U300_SEMI_IS_SHARED -	/* -	 * Enable SEMI self refresh. Self-refresh of the SDRAM is entered when -	 * both subsystems are requesting this mode. -	 * If we not share the Acc SDRAM, this is never the case. Therefore -	 * enable it here from the App side. -	 */ -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_SMCR) | +	/* Enable SEMI self refresh */ +	val = readw(syscon_base + U300_SYSCON_SMCR) |  		U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_SMCR); -#endif /* CONFIG_MACH_U300_SEMI_IS_SHARED */ +	writew(val, syscon_base + U300_SYSCON_SMCR);  } -static int core_module_init(void) -{ -	/* -	 * This needs to be initialized later: it needs the input framework -	 * to be initialized first. -	 */ -	return mmc_init(&mmcsd_device); -} -module_init(core_module_init); +static const char * u300_board_compat[] = { +	"stericsson,u300", +	NULL, +}; + +DT_MACHINE_START(U300_DT, "U300 S335/B335 (Device Tree)") +	.map_io		= u300_map_io, +	.init_irq	= u300_init_irq_dt, +	.init_time	= clocksource_of_init, +	.init_machine	= u300_init_machine_dt, +	.restart	= u300_restart, +	.dt_compat      = u300_board_compat, +MACHINE_END diff --git a/arch/arm/mach-u300/dummyspichip.c b/arch/arm/mach-u300/dummyspichip.c index 03f79361259..ec0283cf9a3 100644 --- a/arch/arm/mach-u300/dummyspichip.c +++ b/arch/arm/mach-u300/dummyspichip.c @@ -222,7 +222,7 @@ static ssize_t dummy_looptest(struct device *dev,  static DEVICE_ATTR(looptest, S_IRUGO, dummy_looptest, NULL); -static int __devinit pl022_dummy_probe(struct spi_device *spi) +static int pl022_dummy_probe(struct spi_device *spi)  {  	struct dummy *p_dummy;  	int status; @@ -251,7 +251,7 @@ out_dev_create_looptest_failed:  	return status;  } -static int __devexit pl022_dummy_remove(struct spi_device *spi) +static int pl022_dummy_remove(struct spi_device *spi)  {  	struct dummy *p_dummy = dev_get_drvdata(&spi->dev); @@ -263,28 +263,22 @@ static int __devexit pl022_dummy_remove(struct spi_device *spi)  	return 0;  } +static const struct of_device_id pl022_dummy_dt_match[] = { +	{ .compatible = "arm,pl022-dummy" }, +	{}, +}; +  static struct spi_driver pl022_dummy_driver = {  	.driver = {  		.name	= "spi-dummy",  		.owner	= THIS_MODULE, +		.of_match_table = pl022_dummy_dt_match,  	},  	.probe	= pl022_dummy_probe, -	.remove	= __devexit_p(pl022_dummy_remove), +	.remove	= pl022_dummy_remove,  }; -static int __init pl022_init_dummy(void) -{ -	return spi_register_driver(&pl022_dummy_driver); -} - -static void __exit pl022_exit_dummy(void) -{ -	spi_unregister_driver(&pl022_dummy_driver); -} - -module_init(pl022_init_dummy); -module_exit(pl022_exit_dummy); - +module_spi_driver(pl022_dummy_driver);  MODULE_AUTHOR("Linus Walleij <linus.walleij@stericsson.com>");  MODULE_DESCRIPTION("PL022 SSP/SPI DUMMY Linux driver");  MODULE_LICENSE("GPL"); diff --git a/arch/arm/mach-u300/gpio.c b/arch/arm/mach-u300/gpio.c deleted file mode 100644 index d92790140fe..00000000000 --- a/arch/arm/mach-u300/gpio.c +++ /dev/null @@ -1,700 +0,0 @@ -/* - * - * arch/arm/mach-u300/gpio.c - * - * - * Copyright (C) 2007-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * U300 GPIO module. - * This can driver either of the two basic GPIO cores - * available in the U300 platforms: - * COH 901 335   - Used in DB3150 (U300 1.0) and DB3200 (U330 1.0) - * COH 901 571/3 - Used in DB3210 (U365 2.0) and DB3350 (U335 1.0) - * Notice that you also have inline macros in <asm-arch/gpio.h> - * Author: Linus Walleij <linus.walleij@stericsson.com> - * Author: Jonas Aaberg <jonas.aberg@stericsson.com> - * - */ -#include <linux/module.h> -#include <linux/interrupt.h> -#include <linux/delay.h> -#include <linux/errno.h> -#include <linux/io.h> -#include <linux/clk.h> -#include <linux/err.h> -#include <linux/platform_device.h> -#include <linux/gpio.h> - -/* Reference to GPIO block clock */ -static struct clk *clk; - -/* Memory resource */ -static struct resource *memres; -static void __iomem *virtbase; -static struct device *gpiodev; - -struct u300_gpio_port { -	const char *name; -	int irq; -	int number; -}; - - -static struct u300_gpio_port gpio_ports[] = { -	{ -		.name = "gpio0", -		.number = 0, -	}, -	{ -		.name = "gpio1", -		.number = 1, -	}, -	{ -		.name = "gpio2", -		.number = 2, -	}, -#ifdef U300_COH901571_3 -	{ -		.name = "gpio3", -		.number = 3, -	}, -	{ -		.name = "gpio4", -		.number = 4, -	}, -#ifdef CONFIG_MACH_U300_BS335 -	{ -		.name = "gpio5", -		.number = 5, -	}, -	{ -		.name = "gpio6", -		.number = 6, -	}, -#endif -#endif - -}; - - -#ifdef U300_COH901571_3 - -/* Default input value */ -#define DEFAULT_OUTPUT_LOW   0 -#define DEFAULT_OUTPUT_HIGH  1 - -/* GPIO Pull-Up status */ -#define DISABLE_PULL_UP  0 -#define ENABLE_PULL_UP  1 - -#define GPIO_NOT_USED 0 -#define GPIO_IN       1 -#define GPIO_OUT      2 - -struct u300_gpio_configuration_data { -	unsigned char pin_usage; -	unsigned char default_output_value; -	unsigned char pull_up; -}; - -/* Initial configuration */ -const struct u300_gpio_configuration_data -u300_gpio_config[U300_GPIO_NUM_PORTS][U300_GPIO_PINS_PER_PORT] = { -#ifdef CONFIG_MACH_U300_BS335 -	/* Port 0, pins 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_HIGH,  DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP} -	}, -	/* Port 1, pins 0-7 */ -	{ -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_HIGH,  DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP} -	}, -	/* Port 2, pins 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP} -	}, -	/* Port 3, pins 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP} -	}, -	/* Port 4, pins 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP} -	}, -	/* Port 5, pins 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP} -	}, -	/* Port 6, pind 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP} -	} -#endif - -#ifdef CONFIG_MACH_U300_BS365 -	/* Port 0, pins 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP} -	}, -	/* Port 1, pins 0-7 */ -	{ -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_HIGH,  DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP} -	}, -	/* Port 2, pins 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,   DISABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP} -	}, -	/* Port 3, pins 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP} -	}, -	/* Port 4, pins 0-7 */ -	{ -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_IN,  DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		/* These 4 pins doesn't exist on DB3210 */ -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP}, -		{GPIO_OUT, DEFAULT_OUTPUT_LOW,    ENABLE_PULL_UP} -	} -#endif -}; -#endif - - -/* No users == we can power down GPIO */ -static int gpio_users; - -struct gpio_struct { -	int (*callback)(void *); -	void *data; -	int users; -}; - -static struct gpio_struct gpio_pin[U300_GPIO_MAX]; - -/* - * Let drivers register callback in order to get notified when there is - * an interrupt on the gpio pin - */ -int gpio_register_callback(unsigned gpio, int (*func)(void *arg), void *data) -{ -	if (gpio_pin[gpio].callback) -		dev_warn(gpiodev, "%s: WARNING: callback already " -			 "registered for gpio pin#%d\n", __func__, gpio); -	gpio_pin[gpio].callback = func; -	gpio_pin[gpio].data = data; - -	return 0; -} -EXPORT_SYMBOL(gpio_register_callback); - -int gpio_unregister_callback(unsigned gpio) -{ -	if (!gpio_pin[gpio].callback) -		dev_warn(gpiodev, "%s: WARNING: callback already " -			 "unregistered for gpio pin#%d\n", __func__, gpio); -	gpio_pin[gpio].callback = NULL; -	gpio_pin[gpio].data = NULL; - -	return 0; -} -EXPORT_SYMBOL(gpio_unregister_callback); - -/* Non-zero means valid */ -int gpio_is_valid(int number) -{ -	if (number >= 0 && -	    number < (U300_GPIO_NUM_PORTS * U300_GPIO_PINS_PER_PORT)) -		return 1; -	return 0; -} -EXPORT_SYMBOL(gpio_is_valid); - -int gpio_request(unsigned gpio, const char *label) -{ -	if (gpio_pin[gpio].users) -		return -EINVAL; -	else -		gpio_pin[gpio].users++; - -	gpio_users++; - -	return 0; -} -EXPORT_SYMBOL(gpio_request); - -void gpio_free(unsigned gpio) -{ -	gpio_users--; -	gpio_pin[gpio].users--; -	if (unlikely(gpio_pin[gpio].users < 0)) { -		dev_warn(gpiodev, "warning: gpio#%d release mismatch\n", -			 gpio); -		gpio_pin[gpio].users = 0; -	} - -	return; -} -EXPORT_SYMBOL(gpio_free); - -/* This returns zero or nonzero */ -int gpio_get_value(unsigned gpio) -{ -	return readl(virtbase + U300_GPIO_PXPDIR + -	  PIN_TO_PORT(gpio) * U300_GPIO_PORTX_SPACING) & (1 << (gpio & 0x07)); -} -EXPORT_SYMBOL(gpio_get_value); - -/* - * We hope that the compiler will optimize away the unused branch - * in case "value" is a constant - */ -void gpio_set_value(unsigned gpio, int value) -{ -	u32 val; -	unsigned long flags; - -	local_irq_save(flags); -	if (value) { -		/* set */ -		val = readl(virtbase + U300_GPIO_PXPDOR + -		  PIN_TO_PORT(gpio) * U300_GPIO_PORTX_SPACING) -		  & (1 << (gpio & 0x07)); -		writel(val | (1 << (gpio & 0x07)), virtbase + -		  U300_GPIO_PXPDOR + -		  PIN_TO_PORT(gpio) * U300_GPIO_PORTX_SPACING); -	} else { -		/* clear */ -		val = readl(virtbase + U300_GPIO_PXPDOR + -		  PIN_TO_PORT(gpio) * U300_GPIO_PORTX_SPACING) -		  & (1 << (gpio & 0x07)); -		writel(val & ~(1 << (gpio & 0x07)), virtbase + -		  U300_GPIO_PXPDOR + -		  PIN_TO_PORT(gpio) * U300_GPIO_PORTX_SPACING); -	} -	local_irq_restore(flags); -} -EXPORT_SYMBOL(gpio_set_value); - -int gpio_direction_input(unsigned gpio) -{ -	unsigned long flags; -	u32 val; - -	if (gpio > U300_GPIO_MAX) -		return -EINVAL; - -	local_irq_save(flags); -	val = readl(virtbase + U300_GPIO_PXPCR + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	/* Mask out this pin*/ -	val &= ~(U300_GPIO_PXPCR_PIN_MODE_MASK << ((gpio & 0x07) << 1)); -	/* This is not needed since it sets the bits to zero.*/ -	/* val |= (U300_GPIO_PXPCR_PIN_MODE_INPUT << (gpio*2)); */ -	writel(val, virtbase + U300_GPIO_PXPCR + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	local_irq_restore(flags); -	return 0; -} -EXPORT_SYMBOL(gpio_direction_input); - -int gpio_direction_output(unsigned gpio, int value) -{ -	unsigned long flags; -	u32 val; - -	if (gpio > U300_GPIO_MAX) -		return -EINVAL; - -	local_irq_save(flags); -	val = readl(virtbase + U300_GPIO_PXPCR + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	/* Mask out this pin */ -	val &= ~(U300_GPIO_PXPCR_PIN_MODE_MASK << ((gpio & 0x07) << 1)); -	/* -	 * FIXME: configure for push/pull, open drain or open source per pin -	 * in setup. The current driver will only support push/pull. -	 */ -	val |= (U300_GPIO_PXPCR_PIN_MODE_OUTPUT_PUSH_PULL -			<< ((gpio & 0x07) << 1)); -	writel(val, virtbase + U300_GPIO_PXPCR + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	gpio_set_value(gpio, value); -	local_irq_restore(flags); -	return 0; -} -EXPORT_SYMBOL(gpio_direction_output); - -/* - * Enable an IRQ, edge is rising edge (!= 0) or falling edge (==0). - */ -void enable_irq_on_gpio_pin(unsigned gpio, int edge) -{ -	u32 val; -	unsigned long flags; -	local_irq_save(flags); - -	val = readl(virtbase + U300_GPIO_PXIEN + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	val |= (1 << (gpio & 0x07)); -	writel(val, virtbase + U300_GPIO_PXIEN + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	val = readl(virtbase + U300_GPIO_PXICR + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	if (edge) -		val |= (1 << (gpio & 0x07)); -	else -		val &= ~(1 << (gpio & 0x07)); -	writel(val, virtbase + U300_GPIO_PXICR + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	local_irq_restore(flags); -} -EXPORT_SYMBOL(enable_irq_on_gpio_pin); - -void disable_irq_on_gpio_pin(unsigned gpio) -{ -	u32 val; -	unsigned long flags; - -	local_irq_save(flags); -	val = readl(virtbase + U300_GPIO_PXIEN + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	val &= ~(1 << (gpio & 0x07)); -	writel(val, virtbase + U300_GPIO_PXIEN + PIN_TO_PORT(gpio) * -				U300_GPIO_PORTX_SPACING); -	local_irq_restore(flags); -} -EXPORT_SYMBOL(disable_irq_on_gpio_pin); - -/* Enable (value == 0) or disable (value == 1) internal pullup */ -void gpio_pullup(unsigned gpio, int value) -{ -	u32 val; -	unsigned long flags; - -	local_irq_save(flags); -	if (value) { -		val = readl(virtbase + U300_GPIO_PXPER + PIN_TO_PORT(gpio) * -					U300_GPIO_PORTX_SPACING); -		writel(val | (1 << (gpio & 0x07)), virtbase + U300_GPIO_PXPER + -				PIN_TO_PORT(gpio) * U300_GPIO_PORTX_SPACING); -	} else { -		val = readl(virtbase + U300_GPIO_PXPER + PIN_TO_PORT(gpio) * -					U300_GPIO_PORTX_SPACING); -		writel(val & ~(1 << (gpio & 0x07)), virtbase + U300_GPIO_PXPER + -				PIN_TO_PORT(gpio) * U300_GPIO_PORTX_SPACING); -	} -	local_irq_restore(flags); -} -EXPORT_SYMBOL(gpio_pullup); - -static irqreturn_t gpio_irq_handler(int irq, void *dev_id) -{ -	struct u300_gpio_port *port = dev_id; -	u32 val; -	int pin; - -	/* Read event register */ -	val = readl(virtbase + U300_GPIO_PXIEV + port->number * -				U300_GPIO_PORTX_SPACING); -	/* Mask with enable register */ -	val &= readl(virtbase + U300_GPIO_PXIEV + port->number * -				U300_GPIO_PORTX_SPACING); -	/* Mask relevant bits */ -	val &= U300_GPIO_PXIEV_ALL_IRQ_EVENT_MASK; -	/* ACK IRQ (clear event) */ -	writel(val, virtbase + U300_GPIO_PXIEV + port->number * -				U300_GPIO_PORTX_SPACING); -	/* Print message */ -	while (val != 0) { -		unsigned gpio; - -		pin = __ffs(val); -		/* mask off this pin */ -		val &= ~(1 << pin); -		gpio = (port->number << 3) + pin; - -		if (gpio_pin[gpio].callback) -			(void)gpio_pin[gpio].callback(gpio_pin[gpio].data); -		else -			dev_dbg(gpiodev, "stray GPIO IRQ on line %d\n", -			       gpio); -	} -	return IRQ_HANDLED; -} - -static void gpio_set_initial_values(void) -{ -#ifdef U300_COH901571_3 -	int i, j; -	unsigned long flags; -	u32 val; - -	/* Write default values to all pins */ -	for (i = 0; i < U300_GPIO_NUM_PORTS; i++) { -		val = 0; -		for (j = 0; j < 8; j++) -			val |= (u32) (u300_gpio_config[i][j].default_output_value != DEFAULT_OUTPUT_LOW) << j; -		local_irq_save(flags); -		writel(val, virtbase + U300_GPIO_PXPDOR + i * U300_GPIO_PORTX_SPACING); -		local_irq_restore(flags); -	} - -	/* -	 * Put all pins that are set to either 'GPIO_OUT' or 'GPIO_NOT_USED' -	 * to output and 'GPIO_IN' to input for each port. And initialize -	 * default value on outputs. -	 */ -	for (i = 0; i < U300_GPIO_NUM_PORTS; i++) { -		for (j = 0; j < U300_GPIO_PINS_PER_PORT; j++) { -			local_irq_save(flags); -			val = readl(virtbase + U300_GPIO_PXPCR + -					 i * U300_GPIO_PORTX_SPACING); -			/* Mask out this pin */ -			val &= ~(U300_GPIO_PXPCR_PIN_MODE_MASK << (j << 1)); - -			if (u300_gpio_config[i][j].pin_usage != GPIO_IN) -				val |= (U300_GPIO_PXPCR_PIN_MODE_OUTPUT_PUSH_PULL << (j << 1)); -			writel(val, virtbase + U300_GPIO_PXPCR + -					 i * U300_GPIO_PORTX_SPACING); -			local_irq_restore(flags); -		} -	} - -	/* Enable or disable the internal pull-ups in the GPIO ASIC block */ -	for (i = 0; i < U300_GPIO_MAX; i++) { -		val = 0; -		for (j = 0; j < 8; j++) -			val |= (u32)((u300_gpio_config[i][j].pull_up == DISABLE_PULL_UP) << j); -		local_irq_save(flags); -		writel(val, virtbase + U300_GPIO_PXPER + i * U300_GPIO_PORTX_SPACING); -		local_irq_restore(flags); -	} -#endif -} - -static int __init gpio_probe(struct platform_device *pdev) -{ -	u32 val; -	int err = 0; -	int i; -	int num_irqs; - -	gpiodev = &pdev->dev; -	memset(gpio_pin, 0, sizeof(gpio_pin)); - -	/* Get GPIO clock */ -	clk = clk_get(&pdev->dev, NULL); -	if (IS_ERR(clk)) { -		err = PTR_ERR(clk); -		dev_err(gpiodev, "could not get GPIO clock\n"); -		goto err_no_clk; -	} -	err = clk_enable(clk); -	if (err) { -		dev_err(gpiodev, "could not enable GPIO clock\n"); -		goto err_no_clk_enable; -	} - -	memres = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	if (!memres) -		goto err_no_resource; - -	if (request_mem_region(memres->start, memres->end - memres->start, "GPIO Controller") -	    == NULL) { -		err = -ENODEV; -		goto err_no_ioregion; -	} - -	virtbase = ioremap(memres->start, resource_size(memres)); -	if (!virtbase) { -		err = -ENOMEM; -		goto err_no_ioremap; -	} -	dev_info(gpiodev, "remapped 0x%08x to %p\n", -		 memres->start, virtbase); - -#ifdef U300_COH901335 -	dev_info(gpiodev, "initializing GPIO Controller COH 901 335\n"); -	/* Turn on the GPIO block */ -	writel(U300_GPIO_CR_BLOCK_CLOCK_ENABLE, virtbase + U300_GPIO_CR); -#endif - -#ifdef U300_COH901571_3 -	dev_info(gpiodev, "initializing GPIO Controller COH 901 571/3\n"); -	val = readl(virtbase + U300_GPIO_CR); -	dev_info(gpiodev, "COH901571/3 block version: %d, " \ -	       "number of cores: %d\n", -	       ((val & 0x0000FE00) >> 9), -	       ((val & 0x000001FC) >> 2)); -	writel(U300_GPIO_CR_BLOCK_CLKRQ_ENABLE, virtbase + U300_GPIO_CR); -#endif - -	gpio_set_initial_values(); - -	for (num_irqs = 0 ; num_irqs < U300_GPIO_NUM_PORTS; num_irqs++) { - -		gpio_ports[num_irqs].irq = -			platform_get_irq_byname(pdev, -						gpio_ports[num_irqs].name); - -		err = request_irq(gpio_ports[num_irqs].irq, -				  gpio_irq_handler, IRQF_DISABLED, -				  gpio_ports[num_irqs].name, -				  &gpio_ports[num_irqs]); -		if (err) { -			dev_err(gpiodev, "cannot allocate IRQ for %s!\n", -				gpio_ports[num_irqs].name); -			goto err_no_irq; -		} -		/* Turns off PortX_irq_force */ -		writel(0x0, virtbase + U300_GPIO_PXIFR + -				 num_irqs * U300_GPIO_PORTX_SPACING); -	} - -	return 0; - - err_no_irq: -	for (i = 0; i < num_irqs; i++) -		free_irq(gpio_ports[i].irq, &gpio_ports[i]); -	iounmap(virtbase); - err_no_ioremap: -	release_mem_region(memres->start, memres->end - memres->start); - err_no_ioregion: - err_no_resource: -	clk_disable(clk); - err_no_clk_enable: -	clk_put(clk); - err_no_clk: -	dev_info(gpiodev, "module ERROR:%d\n", err); -	return err; -} - -static int __exit gpio_remove(struct platform_device *pdev) -{ -	int i; - -	/* Turn off the GPIO block */ -	writel(0x00000000U, virtbase + U300_GPIO_CR); -	for (i = 0 ; i < U300_GPIO_NUM_PORTS; i++) -		free_irq(gpio_ports[i].irq, &gpio_ports[i]); -	iounmap(virtbase); -	release_mem_region(memres->start, memres->end - memres->start); -	clk_disable(clk); -	clk_put(clk); -	return 0; -} - -static struct platform_driver gpio_driver = { -	.driver		= { -		.name	= "u300-gpio", -	}, -	.remove		= __exit_p(gpio_remove), -}; - - -static int __init u300_gpio_init(void) -{ -	return platform_driver_probe(&gpio_driver, gpio_probe); -} - -static void __exit u300_gpio_exit(void) -{ -	platform_driver_unregister(&gpio_driver); -} - -arch_initcall(u300_gpio_init); -module_exit(u300_gpio_exit); - -MODULE_AUTHOR("Linus Walleij <linus.walleij@stericsson.com>"); - -#ifdef U300_COH901571_3 -MODULE_DESCRIPTION("ST-Ericsson AB COH 901 571/3 GPIO driver"); -#endif - -#ifdef U300_COH901335 -MODULE_DESCRIPTION("ST-Ericsson AB COH 901 335 GPIO driver"); -#endif - -MODULE_LICENSE("GPL"); diff --git a/arch/arm/mach-u300/i2c.c b/arch/arm/mach-u300/i2c.c deleted file mode 100644 index f0394baa11f..00000000000 --- a/arch/arm/mach-u300/i2c.c +++ /dev/null @@ -1,347 +0,0 @@ -/* - * arch/arm/mach-u300/i2c.c - * - * Copyright (C) 2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * - * Register board i2c devices - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#include <linux/kernel.h> -#include <linux/i2c.h> -#include <linux/mfd/abx500.h> -#include <linux/regulator/machine.h> -#include <linux/amba/bus.h> -#include <mach/irqs.h> - -/* - * Initial settings of ab3100 registers. - * Common for below LDO regulator settings are that - * bit 7-5 controls voltage. Bit 4 turns regulator ON(1) or OFF(0). - * Bit 3-2 controls sleep enable and bit 1-0 controls sleep mode. - */ - -/* LDO_A 0x16: 2.75V, ON, SLEEP_A, SLEEP OFF GND */ -#define LDO_A_SETTING		0x16 -/* LDO_C 0x10: 2.65V, ON, SLEEP_A or B, SLEEP full power */ -#define LDO_C_SETTING		0x10 -/* LDO_D 0x10: 2.65V, ON, sleep mode not used */ -#define LDO_D_SETTING		0x10 -/* LDO_E 0x10: 1.8V, ON, SLEEP_A or B, SLEEP full power */ -#define LDO_E_SETTING		0x10 -/* LDO_E SLEEP 0x00: 1.8V, not used, SLEEP_A or B, not used */ -#define LDO_E_SLEEP_SETTING	0x00 -/* LDO_F 0xD0: 2.5V, ON, SLEEP_A or B, SLEEP full power */ -#define LDO_F_SETTING		0xD0 -/* LDO_G 0x00: 2.85V, OFF, SLEEP_A or B, SLEEP full power */ -#define LDO_G_SETTING		0x00 -/* LDO_H 0x18: 2.75V, ON, SLEEP_B, SLEEP full power */ -#define LDO_H_SETTING		0x18 -/* LDO_K 0x00: 2.75V, OFF, SLEEP_A or B, SLEEP full power */ -#define LDO_K_SETTING		0x00 -/* LDO_EXT 0x00: Voltage not set, OFF, not used, not used */ -#define LDO_EXT_SETTING		0x00 -/* BUCK 0x7D: 1.2V, ON, SLEEP_A and B, SLEEP low power */ -#define BUCK_SETTING	0x7D -/* BUCK SLEEP 0xAC: 1.05V, Not used, SLEEP_A and B, Not used */ -#define BUCK_SLEEP_SETTING	0xAC - -#ifdef CONFIG_AB3100_CORE -static struct regulator_consumer_supply supply_ldo_c[] = { -	{ -		.dev_name = "ab3100-codec", -		.supply = "vaudio", /* Powers the codec */ -	}, -}; - -/* - * This one needs to be a supply so we can turn it off - * in order to shut down the system. - */ -static struct regulator_consumer_supply supply_ldo_d[] = { -	{ -		.dev = NULL, -		.supply = "vana15", /* Powers the SoC (CPU etc) */ -	}, -}; - -static struct regulator_consumer_supply supply_ldo_g[] = { -	{ -		.dev_name = "mmci", -		.supply = "vmmc", /* Powers MMC/SD card */ -	}, -}; - -static struct regulator_consumer_supply supply_ldo_h[] = { -	{ -		.dev_name = "xgam_pdi", -		.supply = "vdisp", /* Powers camera, display etc */ -	}, -}; - -static struct regulator_consumer_supply supply_ldo_k[] = { -	{ -		.dev_name = "irda", -		.supply = "vir", /* Power IrDA */ -	}, -}; - -/* - * This is a placeholder for whoever wish to use the - * external power. - */ -static struct regulator_consumer_supply supply_ldo_ext[] = { -	{ -		.dev = NULL, -		.supply = "vext", /* External power */ -	}, -}; - -/* Preset (hardware defined) voltages for these regulators */ -#define LDO_A_VOLTAGE 2750000 -#define LDO_C_VOLTAGE 2650000 -#define LDO_D_VOLTAGE 2650000 - -static struct ab3100_platform_data ab3100_plf_data = { -	.reg_constraints = { -		/* LDO A routing and constraints */ -		{ -			.constraints = { -				.name = "vrad", -				.min_uV = LDO_A_VOLTAGE, -				.max_uV = LDO_A_VOLTAGE, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -				.always_on = 1, -				.boot_on = 1, -			}, -		}, -		/* LDO C routing and constraints */ -		{ -			.constraints = { -				.min_uV = LDO_C_VOLTAGE, -				.max_uV = LDO_C_VOLTAGE, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -			}, -			.num_consumer_supplies = ARRAY_SIZE(supply_ldo_c), -			.consumer_supplies = supply_ldo_c, -		}, -		/* LDO D routing and constraints */ -		{ -			.constraints = { -				.min_uV = LDO_D_VOLTAGE, -				.max_uV = LDO_D_VOLTAGE, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -				.valid_ops_mask = REGULATOR_CHANGE_STATUS, -				/* -				 * Actually this is boot_on but we need -				 * to reference count it externally to -				 * be able to shut down the system. -				 */ -			}, -			.num_consumer_supplies = ARRAY_SIZE(supply_ldo_d), -			.consumer_supplies = supply_ldo_d, -		}, -		/* LDO E routing and constraints */ -		{ -			.constraints = { -				.name = "vio", -				.min_uV = 1800000, -				.max_uV = 1800000, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -				.valid_ops_mask = -				REGULATOR_CHANGE_VOLTAGE | -				REGULATOR_CHANGE_STATUS, -				.always_on = 1, -				.boot_on = 1, -			}, -		}, -		/* LDO F routing and constraints */ -		{ -			.constraints = { -				.name = "vana25", -				.min_uV = 2500000, -				.max_uV = 2500000, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -				.valid_ops_mask = -				REGULATOR_CHANGE_VOLTAGE | -				REGULATOR_CHANGE_STATUS, -				.always_on = 1, -				.boot_on = 1, -			}, -		}, -		/* LDO G routing and constraints */ -		{ -			.constraints = { -				.min_uV = 1500000, -				.max_uV = 2850000, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -				.valid_ops_mask = -				REGULATOR_CHANGE_VOLTAGE | -				REGULATOR_CHANGE_STATUS, -			}, -			.num_consumer_supplies = ARRAY_SIZE(supply_ldo_g), -			.consumer_supplies = supply_ldo_g, -		}, -		/* LDO H routing and constraints */ -		{ -			.constraints = { -				.min_uV = 1200000, -				.max_uV = 2750000, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -				.valid_ops_mask = -				REGULATOR_CHANGE_VOLTAGE | -				REGULATOR_CHANGE_STATUS, -			}, -			.num_consumer_supplies = ARRAY_SIZE(supply_ldo_h), -			.consumer_supplies = supply_ldo_h, -		}, -		/* LDO K routing and constraints */ -		{ -			.constraints = { -				.min_uV = 1800000, -				.max_uV = 2750000, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -				.valid_ops_mask = -				REGULATOR_CHANGE_VOLTAGE | -				REGULATOR_CHANGE_STATUS, -			}, -			.num_consumer_supplies = ARRAY_SIZE(supply_ldo_k), -			.consumer_supplies = supply_ldo_k, -		}, -		/* External regulator interface. No fixed voltage specified. -		 * If we knew the voltage of the external regulator and it -		 * was connected on the board, we could add the (fixed) -		 * voltage for it here. -		 */ -		{ -			.constraints = { -				.min_uV = 0, -				.max_uV = 0, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -				.valid_ops_mask = -				REGULATOR_CHANGE_STATUS, -			}, -			.num_consumer_supplies = ARRAY_SIZE(supply_ldo_ext), -			.consumer_supplies = supply_ldo_ext, -		}, -		/* Buck converter routing and constraints */ -		{ -			.constraints = { -				.name = "vcore", -				.min_uV = 1200000, -				.max_uV = 1800000, -				.valid_modes_mask = REGULATOR_MODE_NORMAL, -				.valid_ops_mask = -				REGULATOR_CHANGE_VOLTAGE | -				REGULATOR_CHANGE_STATUS, -				.always_on = 1, -				.boot_on = 1, -			}, -		}, -	}, -	.reg_initvals = { -		LDO_A_SETTING, -		LDO_C_SETTING, -		LDO_E_SETTING, -		LDO_E_SLEEP_SETTING, -		LDO_F_SETTING, -		LDO_G_SETTING, -		LDO_H_SETTING, -		LDO_K_SETTING, -		LDO_EXT_SETTING, -		BUCK_SETTING, -		BUCK_SLEEP_SETTING, -		LDO_D_SETTING, -	}, -}; -#endif - -#ifdef CONFIG_AB3550_CORE -static struct abx500_init_settings ab3550_init_settings[] = { -	{ -		.bank = 0, -		.reg = AB3550_IMR1, -		.setting = 0xff -	}, -	{ -		.bank = 0, -		.reg = AB3550_IMR2, -		.setting = 0xff -	}, -	{ -		.bank = 0, -		.reg = AB3550_IMR3, -		.setting = 0xff -	}, -	{ -		.bank = 0, -		.reg = AB3550_IMR4, -		.setting = 0xff -	}, -	{ -		.bank = 0, -		.reg = AB3550_IMR5, -		/* The two most significant bits are not used */ -		.setting = 0x3f -	}, -}; - -static struct ab3550_platform_data ab3550_plf_data = { -	.irq = { -		.base = IRQ_AB3550_BASE, -		.count = (IRQ_AB3550_END - IRQ_AB3550_BASE + 1), -	}, -	.dev_data = { -	}, -	.init_settings = ab3550_init_settings, -	.init_settings_sz = ARRAY_SIZE(ab3550_init_settings), -}; -#endif - -static struct i2c_board_info __initdata bus0_i2c_board_info[] = { -#if defined(CONFIG_AB3550_CORE) -	{ -		.type = "ab3550", -		.addr = 0x4A, -		.irq = IRQ_U300_IRQ0_EXT, -		.platform_data = &ab3550_plf_data, -	}, -#elif defined(CONFIG_AB3100_CORE) -	{ -		.type = "ab3100", -		.addr = 0x48, -		.irq = IRQ_U300_IRQ0_EXT, -		.platform_data = &ab3100_plf_data, -	}, -#else -	{ }, -#endif -}; - -static struct i2c_board_info __initdata bus1_i2c_board_info[] = { -#ifdef CONFIG_MACH_U300_BS335 -	{ -		.type = "fwcam", -		.addr = 0x10, -	}, -	{ -		.type = "fwcam", -		.addr = 0x5d, -	}, -#else -	{ }, -#endif -}; - -void __init u300_i2c_register_board_devices(void) -{ -	i2c_register_board_info(0, bus0_i2c_board_info, -				ARRAY_SIZE(bus0_i2c_board_info)); -	/* -	 * This makes the core shut down all unused regulators -	 * after all the initcalls have completed. -	 */ -	regulator_has_full_constraints(); -	i2c_register_board_info(1, bus1_i2c_board_info, -				ARRAY_SIZE(bus1_i2c_board_info)); -} diff --git a/arch/arm/mach-u300/i2c.h b/arch/arm/mach-u300/i2c.h deleted file mode 100644 index 485c02e5c06..00000000000 --- a/arch/arm/mach-u300/i2c.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * arch/arm/mach-u300/i2c.h - * - * Copyright (C) 2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * - * Register board i2c devices - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ - -#ifndef MACH_U300_I2C_H -#define MACH_U300_I2C_H - -#ifdef CONFIG_I2C_STU300 -void __init u300_i2c_register_board_devices(void); -#else -/* Compile out this stuff if no I2C adapter is available */ -static inline void __init u300_i2c_register_board_devices(void) -{ -} -#endif - -#endif diff --git a/arch/arm/mach-u300/include/mach/clkdev.h b/arch/arm/mach-u300/include/mach/clkdev.h deleted file mode 100644 index 92e3cc872c6..00000000000 --- a/arch/arm/mach-u300/include/mach/clkdev.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __MACH_CLKDEV_H -#define __MACH_CLKDEV_H - -int __clk_get(struct clk *clk); -void __clk_put(struct clk *clk); - -#endif diff --git a/arch/arm/mach-u300/include/mach/coh901318.h b/arch/arm/mach-u300/include/mach/coh901318.h deleted file mode 100644 index 193da2df732..00000000000 --- a/arch/arm/mach-u300/include/mach/coh901318.h +++ /dev/null @@ -1,260 +0,0 @@ -/* - * - * include/linux/coh901318.h - * - * - * Copyright (C) 2007-2009 ST-Ericsson - * License terms: GNU General Public License (GPL) version 2 - * DMA driver for COH 901 318 - * Author: Per Friden <per.friden@stericsson.com> - */ - -#ifndef COH901318_H -#define COH901318_H - -#include <linux/device.h> -#include <linux/dmaengine.h> - -#define MAX_DMA_PACKET_SIZE_SHIFT 11 -#define MAX_DMA_PACKET_SIZE (1 << MAX_DMA_PACKET_SIZE_SHIFT) - -/** - * struct coh901318_lli - linked list item for DMAC - * @control: control settings for DMAC - * @src_addr: transfer source address - * @dst_addr: transfer destination address - * @link_addr:  physical address to next lli - * @virt_link_addr: virtual addres of next lli (only used by pool_free) - * @phy_this: physical address of current lli (only used by pool_free) - */ -struct coh901318_lli { -	u32 control; -	dma_addr_t src_addr; -	dma_addr_t dst_addr; -	dma_addr_t link_addr; - -	void *virt_link_addr; -	dma_addr_t phy_this; -}; -/** - * struct coh901318_params - parameters for DMAC configuration - * @config: DMA config register - * @ctrl_lli_last: DMA control register for the last lli in the list - * @ctrl_lli: DMA control register for an lli - * @ctrl_lli_chained: DMA control register for a chained lli - */ -struct coh901318_params { -	u32 config; -	u32 ctrl_lli_last; -	u32 ctrl_lli; -	u32 ctrl_lli_chained; -}; -/** - * struct coh_dma_channel - dma channel base - * @name: ascii name of dma channel - * @number: channel id number - * @desc_nbr_max: number of preallocated descriptors - * @priority_high: prio of channel, 0 low otherwise high. - * @param: configuration parameters - * @dev_addr: physical address of periphal connected to channel - */ -struct coh_dma_channel { -	const char name[32]; -	const int number; -	const int desc_nbr_max; -	const int priority_high; -	const struct coh901318_params param; -	const dma_addr_t dev_addr; -}; - -/** - * dma_access_memory_state_t - register dma for memory access - * - * @dev: The dma device - * @active:  1 means dma intends to access memory - *           0 means dma wont access memory - */ -typedef void (*dma_access_memory_state_t)(struct device *dev, -					  bool active); - -/** - * struct powersave - DMA power save structure - * @lock: lock protecting data in this struct - * @started_channels: bit mask indicating active dma channels - */ -struct powersave { -	spinlock_t lock; -	u64 started_channels; -}; -/** - * struct coh901318_platform - platform arch structure - * @chans_slave: specifying dma slave channels - * @chans_memcpy: specifying dma memcpy channels - * @access_memory_state: requesting DMA memeory access (on / off) - * @chan_conf: dma channel configurations - * @max_channels: max number of dma chanenls - */ -struct coh901318_platform { -	const int *chans_slave; -	const int *chans_memcpy; -	const dma_access_memory_state_t access_memory_state; -	const struct coh_dma_channel *chan_conf; -	const int max_channels; -}; - -/** - * coh901318_filter_id() - DMA channel filter function - * @chan: dma channel handle - * @chan_id: id of dma channel to be filter out - * - * In dma_request_channel() it specifies what channel id to be requested - */ -bool coh901318_filter_id(struct dma_chan *chan, void *chan_id); - -/* - * DMA Controller - this access the static mappings of the coh901318 dma. - * - */ - -#define COH901318_MOD32_MASK					(0x1F) -#define COH901318_WORD_MASK					(0xFFFFFFFF) -/* INT_STATUS - Interrupt Status Registers 32bit (R/-) */ -#define COH901318_INT_STATUS1					(0x0000) -#define COH901318_INT_STATUS2					(0x0004) -/* TC_INT_STATUS - Terminal Count Interrupt Status Registers 32bit (R/-) */ -#define COH901318_TC_INT_STATUS1				(0x0008) -#define COH901318_TC_INT_STATUS2				(0x000C) -/* TC_INT_CLEAR - Terminal Count Interrupt Clear Registers 32bit (-/W) */ -#define COH901318_TC_INT_CLEAR1					(0x0010) -#define COH901318_TC_INT_CLEAR2					(0x0014) -/* RAW_TC_INT_STATUS - Raw Term Count Interrupt Status Registers 32bit (R/-) */ -#define COH901318_RAW_TC_INT_STATUS1				(0x0018) -#define COH901318_RAW_TC_INT_STATUS2				(0x001C) -/* BE_INT_STATUS - Bus Error Interrupt Status Registers 32bit (R/-) */ -#define COH901318_BE_INT_STATUS1				(0x0020) -#define COH901318_BE_INT_STATUS2				(0x0024) -/* BE_INT_CLEAR - Bus Error Interrupt Clear Registers 32bit (-/W) */ -#define COH901318_BE_INT_CLEAR1					(0x0028) -#define COH901318_BE_INT_CLEAR2					(0x002C) -/* RAW_BE_INT_STATUS - Raw Term Count Interrupt Status Registers 32bit (R/-) */ -#define COH901318_RAW_BE_INT_STATUS1				(0x0030) -#define COH901318_RAW_BE_INT_STATUS2				(0x0034) - -/* - * CX_CFG - Channel Configuration Registers 32bit (R/W) - */ -#define COH901318_CX_CFG					(0x0100) -#define COH901318_CX_CFG_SPACING				(0x04) -/* Channel enable activates tha dma job */ -#define COH901318_CX_CFG_CH_ENABLE				(0x00000001) -#define COH901318_CX_CFG_CH_DISABLE				(0x00000000) -/* Request Mode */ -#define COH901318_CX_CFG_RM_MASK				(0x00000006) -#define COH901318_CX_CFG_RM_MEMORY_TO_MEMORY			(0x0 << 1) -#define COH901318_CX_CFG_RM_PRIMARY_TO_MEMORY			(0x1 << 1) -#define COH901318_CX_CFG_RM_MEMORY_TO_PRIMARY			(0x1 << 1) -#define COH901318_CX_CFG_RM_PRIMARY_TO_SECONDARY		(0x3 << 1) -#define COH901318_CX_CFG_RM_SECONDARY_TO_PRIMARY		(0x3 << 1) -/* Linked channel request field. RM must == 11 */ -#define COH901318_CX_CFG_LCRF_SHIFT				3 -#define COH901318_CX_CFG_LCRF_MASK				(0x000001F8) -#define COH901318_CX_CFG_LCR_DISABLE				(0x00000000) -/* Terminal Counter Interrupt Request Mask */ -#define COH901318_CX_CFG_TC_IRQ_ENABLE				(0x00000200) -#define COH901318_CX_CFG_TC_IRQ_DISABLE				(0x00000000) -/* Bus Error interrupt Mask */ -#define COH901318_CX_CFG_BE_IRQ_ENABLE				(0x00000400) -#define COH901318_CX_CFG_BE_IRQ_DISABLE				(0x00000000) - -/* - * CX_STAT - Channel Status Registers 32bit (R/-) - */ -#define COH901318_CX_STAT					(0x0200) -#define COH901318_CX_STAT_SPACING				(0x04) -#define COH901318_CX_STAT_RBE_IRQ_IND				(0x00000008) -#define COH901318_CX_STAT_RTC_IRQ_IND				(0x00000004) -#define COH901318_CX_STAT_ACTIVE				(0x00000002) -#define COH901318_CX_STAT_ENABLED				(0x00000001) - -/* - * CX_CTRL - Channel Control Registers 32bit (R/W) - */ -#define COH901318_CX_CTRL					(0x0400) -#define COH901318_CX_CTRL_SPACING				(0x10) -/* Transfer Count Enable */ -#define COH901318_CX_CTRL_TC_ENABLE				(0x00001000) -#define COH901318_CX_CTRL_TC_DISABLE				(0x00000000) -/* Transfer Count Value 0 - 4095 */ -#define COH901318_CX_CTRL_TC_VALUE_MASK				(0x00000FFF) -/* Burst count */ -#define COH901318_CX_CTRL_BURST_COUNT_MASK			(0x0000E000) -#define COH901318_CX_CTRL_BURST_COUNT_64_BYTES			(0x7 << 13) -#define COH901318_CX_CTRL_BURST_COUNT_48_BYTES			(0x6 << 13) -#define COH901318_CX_CTRL_BURST_COUNT_32_BYTES			(0x5 << 13) -#define COH901318_CX_CTRL_BURST_COUNT_16_BYTES			(0x4 << 13) -#define COH901318_CX_CTRL_BURST_COUNT_8_BYTES			(0x3 << 13) -#define COH901318_CX_CTRL_BURST_COUNT_4_BYTES			(0x2 << 13) -#define COH901318_CX_CTRL_BURST_COUNT_2_BYTES			(0x1 << 13) -#define COH901318_CX_CTRL_BURST_COUNT_1_BYTE			(0x0 << 13) -/* Source bus size  */ -#define COH901318_CX_CTRL_SRC_BUS_SIZE_MASK			(0x00030000) -#define COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS			(0x2 << 16) -#define COH901318_CX_CTRL_SRC_BUS_SIZE_16_BITS			(0x1 << 16) -#define COH901318_CX_CTRL_SRC_BUS_SIZE_8_BITS			(0x0 << 16) -/* Source address increment */ -#define COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE			(0x00040000) -#define COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE			(0x00000000) -/* Destination Bus Size */ -#define COH901318_CX_CTRL_DST_BUS_SIZE_MASK			(0x00180000) -#define COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS			(0x2 << 19) -#define COH901318_CX_CTRL_DST_BUS_SIZE_16_BITS			(0x1 << 19) -#define COH901318_CX_CTRL_DST_BUS_SIZE_8_BITS			(0x0 << 19) -/* Destination address increment */ -#define COH901318_CX_CTRL_DST_ADDR_INC_ENABLE			(0x00200000) -#define COH901318_CX_CTRL_DST_ADDR_INC_DISABLE			(0x00000000) -/* Master Mode (Master2 is only connected to MSL) */ -#define COH901318_CX_CTRL_MASTER_MODE_MASK			(0x00C00000) -#define COH901318_CX_CTRL_MASTER_MODE_M2R_M1W			(0x3 << 22) -#define COH901318_CX_CTRL_MASTER_MODE_M1R_M2W			(0x2 << 22) -#define COH901318_CX_CTRL_MASTER_MODE_M2RW			(0x1 << 22) -#define COH901318_CX_CTRL_MASTER_MODE_M1RW			(0x0 << 22) -/* Terminal Count flag to PER enable */ -#define COH901318_CX_CTRL_TCP_ENABLE				(0x01000000) -#define COH901318_CX_CTRL_TCP_DISABLE				(0x00000000) -/* Terminal Count flags to CPU enable */ -#define COH901318_CX_CTRL_TC_IRQ_ENABLE				(0x02000000) -#define COH901318_CX_CTRL_TC_IRQ_DISABLE			(0x00000000) -/* Hand shake to peripheral */ -#define COH901318_CX_CTRL_HSP_ENABLE				(0x04000000) -#define COH901318_CX_CTRL_HSP_DISABLE				(0x00000000) -#define COH901318_CX_CTRL_HSS_ENABLE				(0x08000000) -#define COH901318_CX_CTRL_HSS_DISABLE				(0x00000000) -/* DMA mode */ -#define COH901318_CX_CTRL_DDMA_MASK				(0x30000000) -#define COH901318_CX_CTRL_DDMA_LEGACY				(0x0 << 28) -#define COH901318_CX_CTRL_DDMA_DEMAND_DMA1			(0x1 << 28) -#define COH901318_CX_CTRL_DDMA_DEMAND_DMA2			(0x2 << 28) -/* Primary Request Data Destination */ -#define COH901318_CX_CTRL_PRDD_MASK				(0x40000000) -#define COH901318_CX_CTRL_PRDD_DEST				(0x1 << 30) -#define COH901318_CX_CTRL_PRDD_SOURCE				(0x0 << 30) - -/* - * CX_SRC_ADDR - Channel Source Address Registers 32bit (R/W) - */ -#define COH901318_CX_SRC_ADDR					(0x0404) -#define COH901318_CX_SRC_ADDR_SPACING				(0x10) - -/* - * CX_DST_ADDR - Channel Destination Address Registers 32bit R/W - */ -#define COH901318_CX_DST_ADDR					(0x0408) -#define COH901318_CX_DST_ADDR_SPACING				(0x10) - -/* - * CX_LNK_ADDR - Channel Link Address Registers 32bit (R/W) - */ -#define COH901318_CX_LNK_ADDR					(0x040C) -#define COH901318_CX_LNK_ADDR_SPACING				(0x10) -#define COH901318_CX_LNK_LINK_IMMEDIATE				(0x00000001) -#endif /* COH901318_H */ diff --git a/arch/arm/mach-u300/include/mach/debug-macro.S b/arch/arm/mach-u300/include/mach/debug-macro.S deleted file mode 100644 index df715707bea..00000000000 --- a/arch/arm/mach-u300/include/mach/debug-macro.S +++ /dev/null @@ -1,21 +0,0 @@ -/* - * - * arch-arm/mach-u300/include/mach/debug-macro.S - * - * - * Copyright (C) 2006-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Debugging macro include header. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#include <mach/hardware.h> - -	.macro	addruart, rp, rv -	/* If we move the address using MMU, use this. */ -	ldr	\rp,	  = U300_SLOW_PER_PHYS_BASE @ MMU off, physical address -	ldr	\rv,	  = U300_SLOW_PER_VIRT_BASE @ MMU on, virtual address -	orr	\rp, \rp, #0x00003000 -	orr	\rv, \rv, #0x00003000 -	.endm - -#include <asm/hardware/debug-pl01x.S> diff --git a/arch/arm/mach-u300/include/mach/dma_channels.h b/arch/arm/mach-u300/include/mach/dma_channels.h deleted file mode 100644 index b239149ba0d..00000000000 --- a/arch/arm/mach-u300/include/mach/dma_channels.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/dma_channels.h - * - * - * Copyright (C) 2007-2009 ST-Ericsson - * License terms: GNU General Public License (GPL) version 2 - * Map file for the U300 dma driver. - * Author: Per Friden <per.friden@stericsson.com> - */ - -#ifndef DMA_CHANNELS_H -#define DMA_CHANNELS_H - -#define U300_DMA_MSL_TX_0             0 -#define U300_DMA_MSL_TX_1             1 -#define U300_DMA_MSL_TX_2             2 -#define U300_DMA_MSL_TX_3             3 -#define U300_DMA_MSL_TX_4             4 -#define U300_DMA_MSL_TX_5             5 -#define U300_DMA_MSL_TX_6             6 -#define U300_DMA_MSL_RX_0             7 -#define U300_DMA_MSL_RX_1             8 -#define U300_DMA_MSL_RX_2             9 -#define U300_DMA_MSL_RX_3             10 -#define U300_DMA_MSL_RX_4             11 -#define U300_DMA_MSL_RX_5             12 -#define U300_DMA_MSL_RX_6             13 -#define U300_DMA_MMCSD_RX_TX          14 -#define U300_DMA_MSPRO_TX             15 -#define U300_DMA_MSPRO_RX             16 -#define U300_DMA_UART0_TX             17 -#define U300_DMA_UART0_RX             18 -#define U300_DMA_APEX_TX              19 -#define U300_DMA_APEX_RX              20 -#define U300_DMA_PCM_I2S0_TX          21 -#define U300_DMA_PCM_I2S0_RX          22 -#define U300_DMA_PCM_I2S1_TX          23 -#define U300_DMA_PCM_I2S1_RX          24 -#define U300_DMA_XGAM_CDI             25 -#define U300_DMA_XGAM_PDI             26 -#define U300_DMA_SPI_TX               27 -#define U300_DMA_SPI_RX               28 -#define U300_DMA_GENERAL_PURPOSE_0    29 -#define U300_DMA_GENERAL_PURPOSE_1    30 -#define U300_DMA_GENERAL_PURPOSE_2    31 -#define U300_DMA_GENERAL_PURPOSE_3    32 -#define U300_DMA_GENERAL_PURPOSE_4    33 -#define U300_DMA_GENERAL_PURPOSE_5    34 -#define U300_DMA_GENERAL_PURPOSE_6    35 -#define U300_DMA_GENERAL_PURPOSE_7    36 -#define U300_DMA_GENERAL_PURPOSE_8    37 -#ifdef CONFIG_MACH_U300_BS335 -#define U300_DMA_UART1_TX             38 -#define U300_DMA_UART1_RX             39 -#else -#define U300_DMA_GENERAL_PURPOSE_9    38 -#define U300_DMA_GENERAL_PURPOSE_10   39 -#endif - -#ifdef CONFIG_MACH_U300_BS335 -#define U300_DMA_DEVICE_CHANNELS      32 -#else -#define U300_DMA_DEVICE_CHANNELS      30 -#endif -#define U300_DMA_CHANNELS             40 - - -#endif /* DMA_CHANNELS_H */ diff --git a/arch/arm/mach-u300/include/mach/entry-macro.S b/arch/arm/mach-u300/include/mach/entry-macro.S deleted file mode 100644 index 20731ae39d3..00000000000 --- a/arch/arm/mach-u300/include/mach/entry-macro.S +++ /dev/null @@ -1,40 +0,0 @@ -/* - * - * arch-arm/mach-u300/include/mach/entry-macro.S - * - * - * Copyright (C) 2006-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Low-level IRQ helper macros for ST-Ericsson U300 - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#include <mach/hardware.h> -#include <asm/hardware/vic.h> - -	.macro	disable_fiq -	.endm - -	.macro  get_irqnr_preamble, base, tmp -	.endm - -	.macro  arch_ret_to_user, tmp1, tmp2 -	.endm - -	.macro	get_irqnr_and_base, irqnr, irqstat, base, tmp -	ldr	\base, = U300_AHB_PER_VIRT_BASE-U300_AHB_PER_PHYS_BASE+U300_INTCON0_BASE -	ldr	\irqstat, [\base, #VIC_IRQ_STATUS] @ get masked status -	mov	\irqnr, #0 -	teq	\irqstat, #0 -	bne	1002f -1001:	ldr	\base, = U300_AHB_PER_VIRT_BASE-U300_AHB_PER_PHYS_BASE+U300_INTCON1_BASE -	ldr	\irqstat, [\base, #VIC_IRQ_STATUS] @ get masked status -	mov	\irqnr, #32 -	teq	\irqstat, #0 -	beq	1003f -1002:	tst	\irqstat, #1 -	bne	1003f -	add	\irqnr, \irqnr, #1 -	movs	\irqstat, \irqstat, lsr #1 -	bne	1002b -1003:		/* EQ will be set if no irqs pending */ -	.endm diff --git a/arch/arm/mach-u300/include/mach/gpio.h b/arch/arm/mach-u300/include/mach/gpio.h deleted file mode 100644 index d5a71abcbae..00000000000 --- a/arch/arm/mach-u300/include/mach/gpio.h +++ /dev/null @@ -1,294 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/gpio.h - * - * - * Copyright (C) 2007-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * GPIO block resgister definitions and inline macros for - * U300 GPIO COH 901 335 or COH 901 571/3 - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ - -#ifndef __MACH_U300_GPIO_H -#define __MACH_U300_GPIO_H - -#include <linux/kernel.h> -#include <linux/io.h> -#include <mach/hardware.h> -#include <asm/irq.h> - -/* Switch type depending on platform/chip variant */ -#if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) -#define U300_COH901335 -#endif -#if defined(CONFIG_MACH_U300_BS365) || defined(CONFIG_MACH_U300_BS335) -#define U300_COH901571_3 -#endif - -/* Get base address for regs here */ -#include "u300-regs.h" -/* IRQ numbers */ -#include "irqs.h" - -/* - * This is the GPIO block definitions. GPIO (General Purpose I/O) can be - * used for anything, and often is. The event/enable etc figures are for - * the lowermost pin (pin 0 on each port), shift this left to match your - * pin if you're gonna use these values. - */ -#ifdef U300_COH901335 -#define U300_GPIO_PORTX_SPACING				(0x1C) -/* Port X Pin Data Register 32bit, this is both input and output (R/W) */ -#define U300_GPIO_PXPDIR				(0x00) -#define U300_GPIO_PXPDOR				(0x00) -/* Port X Pin Config Register 32bit (R/W) */ -#define U300_GPIO_PXPCR					(0x04) -#define U300_GPIO_PXPCR_ALL_PINS_MODE_MASK		(0x0000FFFFUL) -#define U300_GPIO_PXPCR_PIN_MODE_MASK			(0x00000003UL) -#define U300_GPIO_PXPCR_PIN_MODE_SHIFT			(0x00000002UL) -#define U300_GPIO_PXPCR_PIN_MODE_INPUT			(0x00000000UL) -#define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_PUSH_PULL	(0x00000001UL) -#define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_OPEN_DRAIN	(0x00000002UL) -#define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_OPEN_SOURCE	(0x00000003UL) -/* Port X Interrupt Event Register 32bit (R/W) */ -#define U300_GPIO_PXIEV					(0x08) -#define U300_GPIO_PXIEV_ALL_IRQ_EVENT_MASK		(0x000000FFUL) -#define U300_GPIO_PXIEV_IRQ_EVENT			(0x00000001UL) -/* Port X Interrupt Enable Register 32bit (R/W) */ -#define U300_GPIO_PXIEN					(0x0C) -#define U300_GPIO_PXIEN_ALL_IRQ_ENABLE_MASK		(0x000000FFUL) -#define U300_GPIO_PXIEN_IRQ_ENABLE			(0x00000001UL) -/* Port X Interrupt Force Register 32bit (R/W) */ -#define U300_GPIO_PXIFR					(0x10) -#define U300_GPIO_PXIFR_ALL_IRQ_FORCE_MASK		(0x000000FFUL) -#define U300_GPIO_PXIFR_IRQ_FORCE			(0x00000001UL) -/* Port X Interrupt Config Register 32bit (R/W) */ -#define U300_GPIO_PXICR					(0x14) -#define U300_GPIO_PXICR_ALL_IRQ_CONFIG_MASK		(0x000000FFUL) -#define U300_GPIO_PXICR_IRQ_CONFIG_MASK			(0x00000001UL) -#define U300_GPIO_PXICR_IRQ_CONFIG_FALLING_EDGE		(0x00000000UL) -#define U300_GPIO_PXICR_IRQ_CONFIG_RISING_EDGE		(0x00000001UL) -/* Port X Pull-up Enable Register 32bit (R/W) */ -#define U300_GPIO_PXPER					(0x18) -#define U300_GPIO_PXPER_ALL_PULL_UP_DISABLE_MASK	(0x000000FFUL) -#define U300_GPIO_PXPER_PULL_UP_DISABLE			(0x00000001UL) -/* Control Register 32bit (R/W) */ -#define U300_GPIO_CR					(0x54) -#define U300_GPIO_CR_BLOCK_CLOCK_ENABLE			(0x00000001UL) -/* three ports of 8 bits each = GPIO pins 0..23 */ -#define U300_GPIO_NUM_PORTS 3 -#define U300_GPIO_PINS_PER_PORT 8 -#define U300_GPIO_MAX	(U300_GPIO_PINS_PER_PORT * U300_GPIO_NUM_PORTS - 1) -#endif - -#ifdef U300_COH901571_3 -/* - * Control Register 32bit (R/W) - * bit 15-9 (mask 0x0000FE00) contains the number of cores. 8*cores - * gives the number of GPIO pins. - * bit 8-2  (mask 0x000001FC) contains the core version ID. - */ -#define U300_GPIO_CR					(0x00) -#define U300_GPIO_CR_SYNC_SEL_ENABLE			(0x00000002UL) -#define U300_GPIO_CR_BLOCK_CLKRQ_ENABLE			(0x00000001UL) -#define U300_GPIO_PORTX_SPACING				(0x30) -/* Port X Pin Data INPUT Register 32bit (R/W) */ -#define U300_GPIO_PXPDIR				(0x04) -/* Port X Pin Data OUTPUT Register 32bit (R/W) */ -#define U300_GPIO_PXPDOR				(0x08) -/* Port X Pin Config Register 32bit (R/W) */ -#define U300_GPIO_PXPCR					(0x0C) -#define U300_GPIO_PXPCR_ALL_PINS_MODE_MASK		(0x0000FFFFUL) -#define U300_GPIO_PXPCR_PIN_MODE_MASK			(0x00000003UL) -#define U300_GPIO_PXPCR_PIN_MODE_SHIFT			(0x00000002UL) -#define U300_GPIO_PXPCR_PIN_MODE_INPUT			(0x00000000UL) -#define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_PUSH_PULL	(0x00000001UL) -#define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_OPEN_DRAIN	(0x00000002UL) -#define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_OPEN_SOURCE	(0x00000003UL) -/* Port X Pull-up Enable Register 32bit (R/W) */ -#define U300_GPIO_PXPER					(0x10) -#define U300_GPIO_PXPER_ALL_PULL_UP_DISABLE_MASK	(0x000000FFUL) -#define U300_GPIO_PXPER_PULL_UP_DISABLE			(0x00000001UL) -/* Port X Interrupt Event Register 32bit (R/W) */ -#define U300_GPIO_PXIEV					(0x14) -#define U300_GPIO_PXIEV_ALL_IRQ_EVENT_MASK		(0x000000FFUL) -#define U300_GPIO_PXIEV_IRQ_EVENT			(0x00000001UL) -/* Port X Interrupt Enable Register 32bit (R/W) */ -#define U300_GPIO_PXIEN					(0x18) -#define U300_GPIO_PXIEN_ALL_IRQ_ENABLE_MASK		(0x000000FFUL) -#define U300_GPIO_PXIEN_IRQ_ENABLE			(0x00000001UL) -/* Port X Interrupt Force Register 32bit (R/W) */ -#define U300_GPIO_PXIFR					(0x1C) -#define U300_GPIO_PXIFR_ALL_IRQ_FORCE_MASK		(0x000000FFUL) -#define U300_GPIO_PXIFR_IRQ_FORCE			(0x00000001UL) -/* Port X Interrupt Config Register 32bit (R/W) */ -#define U300_GPIO_PXICR					(0x20) -#define U300_GPIO_PXICR_ALL_IRQ_CONFIG_MASK		(0x000000FFUL) -#define U300_GPIO_PXICR_IRQ_CONFIG_MASK			(0x00000001UL) -#define U300_GPIO_PXICR_IRQ_CONFIG_FALLING_EDGE		(0x00000000UL) -#define U300_GPIO_PXICR_IRQ_CONFIG_RISING_EDGE		(0x00000001UL) -#ifdef CONFIG_MACH_U300_BS335 -/* seven ports of 8 bits each = GPIO pins 0..55 */ -#define U300_GPIO_NUM_PORTS 7 -#else -/* five ports of 8 bits each = GPIO pins 0..39 */ -#define U300_GPIO_NUM_PORTS 5 -#endif -#define U300_GPIO_PINS_PER_PORT 8 -#define U300_GPIO_MAX (U300_GPIO_PINS_PER_PORT * U300_GPIO_NUM_PORTS - 1) -#endif - -/* - * Individual pin assignments for the B26/S26. Notice that the - * actual usage of these pins depends on the PAD MUX settings, that - * is why the same number can potentially appear several times. - * In the reference design each pin is only used for one purpose. - * These were determined by inspecting the B26/S26 schematic: - * 2/1911-ROA 128 1603 - */ -#ifdef CONFIG_MACH_U300_BS2X -#define U300_GPIO_PIN_UART_RX		0 -#define U300_GPIO_PIN_UART_TX		1 -#define U300_GPIO_PIN_GPIO02		2  /* Unrouted */ -#define U300_GPIO_PIN_GPIO03		3  /* Unrouted */ -#define U300_GPIO_PIN_CAM_SLEEP		4 -#define U300_GPIO_PIN_CAM_REG_EN	5 -#define U300_GPIO_PIN_GPIO06		6  /* Unrouted */ -#define U300_GPIO_PIN_GPIO07		7  /* Unrouted */ - -#define U300_GPIO_PIN_GPIO08		8  /* Service point SP2321 */ -#define U300_GPIO_PIN_GPIO09		9  /* Service point SP2322 */ -#define U300_GPIO_PIN_PHFSENSE		10 /* Headphone jack sensing */ -#define U300_GPIO_PIN_MMC_CLKRET	11 /* Clock return from MMC/SD card */ -#define U300_GPIO_PIN_MMC_CD		12 /* MMC Card insertion detection */ -#define U300_GPIO_PIN_FLIPSENSE		13 /* Mechanical flip sensing */ -#define U300_GPIO_PIN_GPIO14		14 /* DSP JTAG Port RTCK */ -#define U300_GPIO_PIN_GPIO15		15 /* Unrouted */ - -#define U300_GPIO_PIN_GPIO16		16 /* Unrouted */ -#define U300_GPIO_PIN_GPIO17		17 /* Unrouted */ -#define U300_GPIO_PIN_GPIO18		18 /* Unrouted */ -#define U300_GPIO_PIN_GPIO19		19 /* Unrouted */ -#define U300_GPIO_PIN_GPIO20		20 /* Unrouted */ -#define U300_GPIO_PIN_GPIO21		21 /* Unrouted */ -#define U300_GPIO_PIN_GPIO22		22 /* Unrouted */ -#define U300_GPIO_PIN_GPIO23		23 /* Unrouted */ -#endif - -/* - * Individual pin assignments for the B330/S330 and B365/S365. - * Notice that the actual usage of these pins depends on the - * PAD MUX settings, that is why the same number can potentially - * appear several times. In the reference design each pin is only - * used for one purpose. These were determined by inspecting the - * S365 schematic. - */ -#if defined(CONFIG_MACH_U300_BS330) || defined(CONFIG_MACH_U300_BS365) || \ -    defined(CONFIG_MACH_U300_BS335) -#define U300_GPIO_PIN_UART_RX		0 -#define U300_GPIO_PIN_UART_TX		1 -#define U300_GPIO_PIN_UART_CTS		2 -#define U300_GPIO_PIN_UART_RTS		3 -#define U300_GPIO_PIN_CAM_MAIN_STANDBY	4 /* Camera MAIN standby */ -#define U300_GPIO_PIN_GPIO05		5 /* Unrouted */ -#define U300_GPIO_PIN_MS_CD		6 /* Memory Stick Card insertion */ -#define U300_GPIO_PIN_GPIO07		7 /* Test point TP2430 */ - -#define U300_GPIO_PIN_GPIO08		8 /* Test point TP2437 */ -#define U300_GPIO_PIN_GPIO09		9 /* Test point TP2431 */ -#define U300_GPIO_PIN_GPIO10		10 /* Test point TP2432 */ -#define U300_GPIO_PIN_MMC_CLKRET	11 /* Clock return from MMC/SD card */ -#define U300_GPIO_PIN_MMC_CD		12 /* MMC Card insertion detection */ -#define U300_GPIO_PIN_CAM_SUB_STANDBY	13 /* Camera SUB standby */ -#define U300_GPIO_PIN_GPIO14		14 /* Test point TP2436 */ -#define U300_GPIO_PIN_GPIO15		15 /* Unrouted */ - -#define U300_GPIO_PIN_GPIO16		16 /* Test point TP2438 */ -#define U300_GPIO_PIN_PHFSENSE		17 /* Headphone jack sensing */ -#define U300_GPIO_PIN_GPIO18		18 /* Test point TP2439 */ -#define U300_GPIO_PIN_GPIO19		19 /* Routed somewhere */ -#define U300_GPIO_PIN_GPIO20		20 /* Unrouted */ -#define U300_GPIO_PIN_GPIO21		21 /* Unrouted */ -#define U300_GPIO_PIN_GPIO22		22 /* Unrouted */ -#define U300_GPIO_PIN_GPIO23		23 /* Unrouted */ - -#define U300_GPIO_PIN_GPIO24		24 /* Unrouted */ -#define U300_GPIO_PIN_GPIO25		25 /* Unrouted */ -#define U300_GPIO_PIN_GPIO26		26 /* Unrouted */ -#define U300_GPIO_PIN_GPIO27		27 /* Unrouted */ -#define U300_GPIO_PIN_GPIO28		28 /* Unrouted */ -#define U300_GPIO_PIN_GPIO29		29 /* Unrouted */ -#define U300_GPIO_PIN_GPIO30		30 /* Unrouted */ -#define U300_GPIO_PIN_GPIO31		31 /* Unrouted */ - -#define U300_GPIO_PIN_GPIO32		32 /* Unrouted */ -#define U300_GPIO_PIN_GPIO33		33 /* Unrouted */ -#define U300_GPIO_PIN_GPIO34		34 /* Unrouted */ -#define U300_GPIO_PIN_GPIO35		35 /* Unrouted */ -#define U300_GPIO_PIN_GPIO36		36 /* Unrouted */ -#define U300_GPIO_PIN_GPIO37		37 /* Unrouted */ -#define U300_GPIO_PIN_GPIO38		38 /* Unrouted */ -#define U300_GPIO_PIN_GPIO39		39 /* Unrouted */ - -#ifdef CONFIG_MACH_U300_BS335 - -#define U300_GPIO_PIN_GPIO40		40 /* Unrouted */ -#define U300_GPIO_PIN_GPIO41		41 /* Unrouted */ -#define U300_GPIO_PIN_GPIO42		42 /* Unrouted */ -#define U300_GPIO_PIN_GPIO43		43 /* Unrouted */ -#define U300_GPIO_PIN_GPIO44		44 /* Unrouted */ -#define U300_GPIO_PIN_GPIO45		45 /* Unrouted */ -#define U300_GPIO_PIN_GPIO46		46 /* Unrouted */ -#define U300_GPIO_PIN_GPIO47		47 /* Unrouted */ - -#define U300_GPIO_PIN_GPIO48		48 /* Unrouted */ -#define U300_GPIO_PIN_GPIO49		49 /* Unrouted */ -#define U300_GPIO_PIN_GPIO50		50 /* Unrouted */ -#define U300_GPIO_PIN_GPIO51		51 /* Unrouted */ -#define U300_GPIO_PIN_GPIO52		52 /* Unrouted */ -#define U300_GPIO_PIN_GPIO53		53 /* Unrouted */ -#define U300_GPIO_PIN_GPIO54		54 /* Unrouted */ -#define U300_GPIO_PIN_GPIO55		55 /* Unrouted */ -#endif - -#endif - -/* translates a pin number to a port number */ -#define PIN_TO_PORT(val) (val >> 3) - -/* These can be found in arch/arm/mach-u300/gpio.c */ -extern int gpio_is_valid(int number); -extern int gpio_request(unsigned gpio, const char *label); -extern void gpio_free(unsigned gpio); -extern int gpio_direction_input(unsigned gpio); -extern int gpio_direction_output(unsigned gpio, int value); -extern int gpio_register_callback(unsigned gpio, -				  int (*func)(void *arg), -				  void *); -extern int gpio_unregister_callback(unsigned gpio); -extern void enable_irq_on_gpio_pin(unsigned gpio, int edge); -extern void disable_irq_on_gpio_pin(unsigned gpio); -extern void gpio_pullup(unsigned gpio, int value); -extern int gpio_get_value(unsigned gpio); -extern void gpio_set_value(unsigned gpio, int value); - -#define gpio_get_value_cansleep gpio_get_value -#define gpio_set_value_cansleep gpio_set_value - -/* wrappers to sleep-enable the previous two functions */ -static inline unsigned gpio_to_irq(unsigned gpio) -{ -	return PIN_TO_PORT(gpio) + IRQ_U300_GPIO_PORT0; -} - -static inline unsigned irq_to_gpio(unsigned irq) -{ -	/* -	 * FIXME: This is no 1-1 mapping at all, it points to the -	 * whole block of 8 pins. -	 */ -	return (irq - IRQ_U300_GPIO_PORT0) << 3; -} - -#endif diff --git a/arch/arm/mach-u300/include/mach/hardware.h b/arch/arm/mach-u300/include/mach/hardware.h deleted file mode 100644 index b99d4ce0ac2..00000000000 --- a/arch/arm/mach-u300/include/mach/hardware.h +++ /dev/null @@ -1,5 +0,0 @@ -/* - * arch/arm/mach-u300/include/mach/hardware.h - */ -#include <asm/sizes.h> -#include <mach/u300-regs.h> diff --git a/arch/arm/mach-u300/include/mach/io.h b/arch/arm/mach-u300/include/mach/io.h deleted file mode 100644 index 5d6b4c13b3a..00000000000 --- a/arch/arm/mach-u300/include/mach/io.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/io.h - * - * - * Copyright (C) 2006-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Dummy IO map for being able to use writew()/readw(), - * writel()/readw() and similar accessor functions. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#ifndef __MACH_IO_H -#define __MACH_IO_H - -#define IO_SPACE_LIMIT 0xffffffff - -#define __io(a)		__typesafe_io(a) -#define __mem_pci(a)	(a) - -#endif diff --git a/arch/arm/mach-u300/include/mach/irqs.h b/arch/arm/mach-u300/include/mach/irqs.h deleted file mode 100644 index 09b1b28fa8f..00000000000 --- a/arch/arm/mach-u300/include/mach/irqs.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/irqs.h - * - * - * Copyright (C) 2006-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * IRQ channel definitions for the U300 platforms. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ - -#ifndef __MACH_IRQS_H -#define __MACH_IRQS_H - -#define IRQ_U300_INTCON0_START		0 -#define IRQ_U300_INTCON1_START		32 -/* These are on INTCON0 - 30 lines */ -#define IRQ_U300_IRQ0_EXT		0 -#define IRQ_U300_IRQ1_EXT		1 -#define IRQ_U300_DMA			2 -#define IRQ_U300_VIDEO_ENC_0		3 -#define IRQ_U300_VIDEO_ENC_1		4 -#define IRQ_U300_AAIF_RX		5 -#define IRQ_U300_AAIF_TX		6 -#define IRQ_U300_AAIF_VGPIO		7 -#define IRQ_U300_AAIF_WAKEUP		8 -#define IRQ_U300_PCM_I2S0_FRAME		9 -#define IRQ_U300_PCM_I2S0_FIFO		10 -#define IRQ_U300_PCM_I2S1_FRAME		11 -#define IRQ_U300_PCM_I2S1_FIFO		12 -#define IRQ_U300_XGAM_GAMCON		13 -#define IRQ_U300_XGAM_CDI		14 -#define IRQ_U300_XGAM_CDICON		15 -#if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) -/* MMIACC not used on the DB3210 or DB3350 chips */ -#define IRQ_U300_XGAM_MMIACC		16 -#endif -#define IRQ_U300_XGAM_PDI		17 -#define IRQ_U300_XGAM_PDICON		18 -#define IRQ_U300_XGAM_GAMEACC		19 -#define IRQ_U300_XGAM_MCIDCT		20 -#define IRQ_U300_APEX			21 -#define IRQ_U300_UART0			22 -#define IRQ_U300_SPI			23 -#define IRQ_U300_TIMER_APP_OS		24 -#define IRQ_U300_TIMER_APP_DD		25 -#define IRQ_U300_TIMER_APP_GP1		26 -#define IRQ_U300_TIMER_APP_GP2		27 -#define IRQ_U300_TIMER_OS		28 -#define IRQ_U300_TIMER_MS		29 -#define IRQ_U300_KEYPAD_KEYBF		30 -#define IRQ_U300_KEYPAD_KEYBR		31 -/* These are on INTCON1 - 32 lines */ -#define IRQ_U300_GPIO_PORT0		32 -#define IRQ_U300_GPIO_PORT1		33 -#define IRQ_U300_GPIO_PORT2		34 - -#if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) || \ -    defined(CONFIG_MACH_U300_BS335) -/* These are for DB3150, DB3200 and DB3350 */ -#define IRQ_U300_WDOG			35 -#define IRQ_U300_EVHIST			36 -#define IRQ_U300_MSPRO			37 -#define IRQ_U300_MMCSD_MCIINTR0		38 -#define IRQ_U300_MMCSD_MCIINTR1		39 -#define IRQ_U300_I2C0			40 -#define IRQ_U300_I2C1			41 -#define IRQ_U300_RTC			42 -#define IRQ_U300_NFIF			43 -#define IRQ_U300_NFIF2			44 -#endif - -/* DB3150 and DB3200 have only 45 IRQs */ -#if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) -#define U300_NR_IRQS			45 -#endif - -/* The DB3350-specific interrupt lines */ -#ifdef CONFIG_MACH_U300_BS335 -#define IRQ_U300_ISP_F0			45 -#define IRQ_U300_ISP_F1			46 -#define IRQ_U300_ISP_F2			47 -#define IRQ_U300_ISP_F3			48 -#define IRQ_U300_ISP_F4			49 -#define IRQ_U300_GPIO_PORT3		50 -#define IRQ_U300_SYSCON_PLL_LOCK	51 -#define IRQ_U300_UART1			52 -#define IRQ_U300_GPIO_PORT4		53 -#define IRQ_U300_GPIO_PORT5		54 -#define IRQ_U300_GPIO_PORT6		55 -#define U300_NR_IRQS			56 -#endif - -/* The DB3210-specific interrupt lines */ -#ifdef CONFIG_MACH_U300_BS365 -#define IRQ_U300_GPIO_PORT3		35 -#define IRQ_U300_GPIO_PORT4		36 -#define IRQ_U300_WDOG			37 -#define IRQ_U300_EVHIST			38 -#define IRQ_U300_MSPRO			39 -#define IRQ_U300_MMCSD_MCIINTR0		40 -#define IRQ_U300_MMCSD_MCIINTR1		41 -#define IRQ_U300_I2C0			42 -#define IRQ_U300_I2C1			43 -#define IRQ_U300_RTC			44 -#define IRQ_U300_NFIF			45 -#define IRQ_U300_NFIF2			46 -#define IRQ_U300_SYSCON_PLL_LOCK	47 -#define U300_NR_IRQS			48 -#endif - -#ifdef CONFIG_AB3550_CORE -#define IRQ_AB3550_BASE			(U300_NR_IRQS) -#define IRQ_AB3550_END			(IRQ_AB3550_BASE + 37) - -#define NR_IRQS				(IRQ_AB3550_END + 1) -#else -#define NR_IRQS U300_NR_IRQS -#endif - -#endif diff --git a/arch/arm/mach-u300/include/mach/memory.h b/arch/arm/mach-u300/include/mach/memory.h deleted file mode 100644 index bf134bcc129..00000000000 --- a/arch/arm/mach-u300/include/mach/memory.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/memory.h - * - * - * Copyright (C) 2007-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Memory virtual/physical mapping constants. - * Author: Linus Walleij <linus.walleij@stericsson.com> - * Author: Jonas Aaberg <jonas.aberg@stericsson.com> - */ - -#ifndef __MACH_MEMORY_H -#define __MACH_MEMORY_H - -#ifdef CONFIG_MACH_U300_DUAL_RAM - -#define PHYS_OFFSET		UL(0x48000000) -#define BOOT_PARAMS_OFFSET	(PHYS_OFFSET + 0x100) - -#else - -#ifdef CONFIG_MACH_U300_2MB_ALIGNMENT_FIX -#define PHYS_OFFSET (0x28000000 + \ -	     (CONFIG_MACH_U300_ACCESS_MEM_SIZE - \ -	     (CONFIG_MACH_U300_ACCESS_MEM_SIZE & 1))*1024*1024) -#else -#define PHYS_OFFSET (0x28000000 + \ -	     (CONFIG_MACH_U300_ACCESS_MEM_SIZE +	\ -	     (CONFIG_MACH_U300_ACCESS_MEM_SIZE & 1))*1024*1024) -#endif -#define BOOT_PARAMS_OFFSET (0x28000000 + \ -	    (CONFIG_MACH_U300_ACCESS_MEM_SIZE +		\ -	    (CONFIG_MACH_U300_ACCESS_MEM_SIZE & 1))*1024*1024 + 0x100) -#endif - -/* - * We enable a real big DMA buffer if need be. - */ -#define CONSISTENT_DMA_SIZE SZ_4M - -#endif diff --git a/arch/arm/mach-u300/include/mach/platform.h b/arch/arm/mach-u300/include/mach/platform.h deleted file mode 100644 index 77d9210a82e..00000000000 --- a/arch/arm/mach-u300/include/mach/platform.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/platform.h - * - * - * Copyright (C) 2006-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Basic platform init and mapping functions. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ - -#ifndef __ASSEMBLY__ - -void u300_map_io(void); -void u300_init_irq(void); -void u300_init_devices(void); -extern struct sys_timer u300_timer; - -#endif diff --git a/arch/arm/mach-u300/include/mach/syscon.h b/arch/arm/mach-u300/include/mach/syscon.h deleted file mode 100644 index 7444f5c7da9..00000000000 --- a/arch/arm/mach-u300/include/mach/syscon.h +++ /dev/null @@ -1,750 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/syscon.h - * - * - * Copyright (C) 2008 ST-Ericsson AB - * - * Author: Rickard Andersson <rickard.andersson@stericsson.com> - */ - -#ifndef __MACH_SYSCON_H -#define __MACH_SYSCON_H - -/* - * All register defines for SYSCON registers that concerns individual - * block clocks and reset lines are registered here. This is because - * we don't want any other file to try to fool around with this stuff. - */ - -/* APP side SYSCON registers */ -/* TODO: this is incomplete. Add all from asic_syscon_map.h eventually. */ -/* CLK Control Register 16bit (R/W) */ -#define U300_SYSCON_CCR						(0x0000) -#define U300_SYSCON_CCR_I2S1_USE_VCXO				(0x0040) -#define U300_SYSCON_CCR_I2S0_USE_VCXO				(0x0020) -#define U300_SYSCON_CCR_TURN_VCXO_ON				(0x0008) -#define U300_SYSCON_CCR_CLKING_PERFORMANCE_MASK			(0x0007) -#define U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER		(0x04) -#define U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW			(0x03) -#define U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE		(0x02) -#define U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH			(0x01) -#define U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST			(0x00) -/* CLK Status Register 16bit (R/W) */ -#define U300_SYSCON_CSR						(0x0004) -#define U300_SYSCON_CSR_PLL208_LOCK_IND				(0x0002) -#define U300_SYSCON_CSR_PLL13_LOCK_IND				(0x0001) -/* Reset lines for SLOW devices 16bit (R/W) */ -#define U300_SYSCON_RSR						(0x0014) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_RSR_PPM_RESET_EN				(0x0200) -#endif -#define U300_SYSCON_RSR_ACC_TMR_RESET_EN			(0x0100) -#define U300_SYSCON_RSR_APP_TMR_RESET_EN			(0x0080) -#define U300_SYSCON_RSR_RTC_RESET_EN				(0x0040) -#define U300_SYSCON_RSR_KEYPAD_RESET_EN				(0x0020) -#define U300_SYSCON_RSR_GPIO_RESET_EN				(0x0010) -#define U300_SYSCON_RSR_EH_RESET_EN				(0x0008) -#define U300_SYSCON_RSR_BTR_RESET_EN				(0x0004) -#define U300_SYSCON_RSR_UART_RESET_EN				(0x0002) -#define U300_SYSCON_RSR_SLOW_BRIDGE_RESET_EN			(0x0001) -/* Reset lines for FAST devices 16bit (R/W) */ -#define U300_SYSCON_RFR						(0x0018) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_RFR_UART1_RESET_ENABLE			(0x0080) -#endif -#define U300_SYSCON_RFR_SPI_RESET_ENABLE			(0x0040) -#define U300_SYSCON_RFR_MMC_RESET_ENABLE			(0x0020) -#define U300_SYSCON_RFR_PCM_I2S1_RESET_ENABLE			(0x0010) -#define U300_SYSCON_RFR_PCM_I2S0_RESET_ENABLE			(0x0008) -#define U300_SYSCON_RFR_I2C1_RESET_ENABLE			(0x0004) -#define U300_SYSCON_RFR_I2C0_RESET_ENABLE			(0x0002) -#define U300_SYSCON_RFR_FAST_BRIDGE_RESET_ENABLE		(0x0001) -/* Reset lines for the rest of the peripherals 16bit (R/W) */ -#define U300_SYSCON_RRR						(0x001c) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_RRR_CDS_RESET_EN				(0x4000) -#define U300_SYSCON_RRR_ISP_RESET_EN				(0x2000) -#endif -#define U300_SYSCON_RRR_INTCON_RESET_EN				(0x1000) -#define U300_SYSCON_RRR_MSPRO_RESET_EN				(0x0800) -#define U300_SYSCON_RRR_XGAM_RESET_EN				(0x0100) -#define U300_SYSCON_RRR_XGAM_VC_SYNC_RESET_EN			(0x0080) -#define U300_SYSCON_RRR_NANDIF_RESET_EN				(0x0040) -#define U300_SYSCON_RRR_EMIF_RESET_EN				(0x0020) -#define U300_SYSCON_RRR_DMAC_RESET_EN				(0x0010) -#define U300_SYSCON_RRR_CPU_RESET_EN				(0x0008) -#define U300_SYSCON_RRR_APEX_RESET_EN				(0x0004) -#define U300_SYSCON_RRR_AHB_RESET_EN				(0x0002) -#define U300_SYSCON_RRR_AAIF_RESET_EN				(0x0001) -/* Clock enable for SLOW peripherals 16bit (R/W) */ -#define U300_SYSCON_CESR					(0x0020) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_CESR_PPM_CLK_EN				(0x0200) -#endif -#define U300_SYSCON_CESR_ACC_TMR_CLK_EN				(0x0100) -#define U300_SYSCON_CESR_APP_TMR_CLK_EN				(0x0080) -#define U300_SYSCON_CESR_KEYPAD_CLK_EN				(0x0040) -#define U300_SYSCON_CESR_GPIO_CLK_EN				(0x0010) -#define U300_SYSCON_CESR_EH_CLK_EN				(0x0008) -#define U300_SYSCON_CESR_BTR_CLK_EN				(0x0004) -#define U300_SYSCON_CESR_UART_CLK_EN				(0x0002) -#define U300_SYSCON_CESR_SLOW_BRIDGE_CLK_EN			(0x0001) -/* Clock enable for FAST peripherals 16bit (R/W) */ -#define U300_SYSCON_CEFR					(0x0024) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_CEFR_UART1_CLK_EN				(0x0200) -#endif -#define U300_SYSCON_CEFR_I2S1_CORE_CLK_EN			(0x0100) -#define U300_SYSCON_CEFR_I2S0_CORE_CLK_EN			(0x0080) -#define U300_SYSCON_CEFR_SPI_CLK_EN				(0x0040) -#define U300_SYSCON_CEFR_MMC_CLK_EN				(0x0020) -#define U300_SYSCON_CEFR_I2S1_CLK_EN    			(0x0010) -#define U300_SYSCON_CEFR_I2S0_CLK_EN     			(0x0008) -#define U300_SYSCON_CEFR_I2C1_CLK_EN     			(0x0004) -#define U300_SYSCON_CEFR_I2C0_CLK_EN     			(0x0002) -#define U300_SYSCON_CEFR_FAST_BRIDGE_CLK_EN			(0x0001) -/* Clock enable for the rest of the peripherals 16bit (R/W) */ -#define U300_SYSCON_CERR					(0x0028) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_CERR_CDS_CLK_EN				(0x2000) -#define U300_SYSCON_CERR_ISP_CLK_EN				(0x1000) -#endif -#define U300_SYSCON_CERR_MSPRO_CLK_EN				(0x0800) -#define U300_SYSCON_CERR_AHB_SUBSYS_BRIDGE_CLK_EN		(0x0400) -#define U300_SYSCON_CERR_SEMI_CLK_EN				(0x0200) -#define U300_SYSCON_CERR_XGAM_CLK_EN				(0x0100) -#define U300_SYSCON_CERR_VIDEO_ENC_CLK_EN			(0x0080) -#define U300_SYSCON_CERR_NANDIF_CLK_EN				(0x0040) -#define U300_SYSCON_CERR_EMIF_CLK_EN				(0x0020) -#define U300_SYSCON_CERR_DMAC_CLK_EN				(0x0010) -#define U300_SYSCON_CERR_CPU_CLK_EN				(0x0008) -#define U300_SYSCON_CERR_APEX_CLK_EN				(0x0004) -#define U300_SYSCON_CERR_AHB_CLK_EN				(0x0002) -#define U300_SYSCON_CERR_AAIF_CLK_EN				(0x0001) -/* Single block clock enable 16bit (-/W) */ -#define U300_SYSCON_SBCER					(0x002c) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_SBCER_PPM_CLK_EN				(0x0009) -#endif -#define U300_SYSCON_SBCER_ACC_TMR_CLK_EN			(0x0008) -#define U300_SYSCON_SBCER_APP_TMR_CLK_EN			(0x0007) -#define U300_SYSCON_SBCER_KEYPAD_CLK_EN				(0x0006) -#define U300_SYSCON_SBCER_GPIO_CLK_EN				(0x0004) -#define U300_SYSCON_SBCER_EH_CLK_EN				(0x0003) -#define U300_SYSCON_SBCER_BTR_CLK_EN				(0x0002) -#define U300_SYSCON_SBCER_UART_CLK_EN				(0x0001) -#define U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN			(0x0000) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_SBCER_UART1_CLK_EN				(0x0019) -#endif -#define U300_SYSCON_SBCER_I2S1_CORE_CLK_EN			(0x0018) -#define U300_SYSCON_SBCER_I2S0_CORE_CLK_EN			(0x0017) -#define U300_SYSCON_SBCER_SPI_CLK_EN				(0x0016) -#define U300_SYSCON_SBCER_MMC_CLK_EN				(0x0015) -#define U300_SYSCON_SBCER_I2S1_CLK_EN				(0x0014) -#define U300_SYSCON_SBCER_I2S0_CLK_EN				(0x0013) -#define U300_SYSCON_SBCER_I2C1_CLK_EN				(0x0012) -#define U300_SYSCON_SBCER_I2C0_CLK_EN				(0x0011) -#define U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN			(0x0010) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_SBCER_CDS_CLK_EN				(0x002D) -#define U300_SYSCON_SBCER_ISP_CLK_EN				(0x002C) -#endif -#define U300_SYSCON_SBCER_MSPRO_CLK_EN				(0x002B) -#define U300_SYSCON_SBCER_AHB_SUBSYS_BRIDGE_CLK_EN		(0x002A) -#define U300_SYSCON_SBCER_SEMI_CLK_EN				(0x0029) -#define U300_SYSCON_SBCER_XGAM_CLK_EN				(0x0028) -#define U300_SYSCON_SBCER_VIDEO_ENC_CLK_EN			(0x0027) -#define U300_SYSCON_SBCER_NANDIF_CLK_EN				(0x0026) -#define U300_SYSCON_SBCER_EMIF_CLK_EN				(0x0025) -#define U300_SYSCON_SBCER_DMAC_CLK_EN				(0x0024) -#define U300_SYSCON_SBCER_CPU_CLK_EN				(0x0023) -#define U300_SYSCON_SBCER_APEX_CLK_EN				(0x0022) -#define U300_SYSCON_SBCER_AHB_CLK_EN				(0x0021) -#define U300_SYSCON_SBCER_AAIF_CLK_EN				(0x0020) -/* Single block clock disable 16bit (-/W) */ -#define U300_SYSCON_SBCDR					(0x0030) -/* Same values as above for SBCER */ -/* Clock force SLOW peripherals 16bit (R/W) */ -#define U300_SYSCON_CFSR					(0x003c) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_CFSR_PPM_CLK_FORCE_EN			(0x0200) -#endif -#define U300_SYSCON_CFSR_ACC_TMR_CLK_FORCE_EN			(0x0100) -#define U300_SYSCON_CFSR_APP_TMR_CLK_FORCE_EN			(0x0080) -#define U300_SYSCON_CFSR_KEYPAD_CLK_FORCE_EN			(0x0020) -#define U300_SYSCON_CFSR_GPIO_CLK_FORCE_EN			(0x0010) -#define U300_SYSCON_CFSR_EH_CLK_FORCE_EN			(0x0008) -#define U300_SYSCON_CFSR_BTR_CLK_FORCE_EN			(0x0004) -#define U300_SYSCON_CFSR_UART_CLK_FORCE_EN			(0x0002) -#define U300_SYSCON_CFSR_SLOW_BRIDGE_CLK_FORCE_EN		(0x0001) -/* Clock force FAST peripherals 16bit (R/W) */ -#define U300_SYSCON_CFFR					(0x40) -/* Values not defined. Define if you want to use them. */ -/* Clock force the rest of the peripherals 16bit (R/W) */ -#define U300_SYSCON_CFRR					(0x44) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_CFRR_CDS_CLK_FORCE_EN			(0x2000) -#define U300_SYSCON_CFRR_ISP_CLK_FORCE_EN			(0x1000) -#endif -#define U300_SYSCON_CFRR_MSPRO_CLK_FORCE_EN			(0x0800) -#define U300_SYSCON_CFRR_AHB_SUBSYS_BRIDGE_CLK_FORCE_EN		(0x0400) -#define U300_SYSCON_CFRR_SEMI_CLK_FORCE_EN			(0x0200) -#define U300_SYSCON_CFRR_XGAM_CLK_FORCE_EN			(0x0100) -#define U300_SYSCON_CFRR_VIDEO_ENC_CLK_FORCE_EN			(0x0080) -#define U300_SYSCON_CFRR_NANDIF_CLK_FORCE_EN			(0x0040) -#define U300_SYSCON_CFRR_EMIF_CLK_FORCE_EN			(0x0020) -#define U300_SYSCON_CFRR_DMAC_CLK_FORCE_EN			(0x0010) -#define U300_SYSCON_CFRR_CPU_CLK_FORCE_EN			(0x0008) -#define U300_SYSCON_CFRR_APEX_CLK_FORCE_EN			(0x0004) -#define U300_SYSCON_CFRR_AHB_CLK_FORCE_EN			(0x0002) -#define U300_SYSCON_CFRR_AAIF_CLK_FORCE_EN			(0x0001) -/* PLL208 Frequency Control 16bit (R/W) */ -#define U300_SYSCON_PFCR					(0x48) -#define U300_SYSCON_PFCR_DPLL_MULT_NUM				(0x000F) -/* Power Management Control 16bit (R/W) */ -#define U300_SYSCON_PMCR					(0x50) -#define U300_SYSCON_PMCR_DCON_ENABLE				(0x0002) -#define U300_SYSCON_PMCR_PWR_MGNT_ENABLE			(0x0001) -/* - * All other clocking registers moved to clock.c! - */ -/* Reset Out 16bit (R/W) */ -#define U300_SYSCON_RCR						(0x6c) -#define U300_SYSCON_RCR_RESOUT0_RST_N_DISABLE			(0x0001) -/* EMIF Slew Rate Control 16bit (R/W) */ -#define U300_SYSCON_SRCLR					(0x70) -#define U300_SYSCON_SRCLR_MASK					(0x03FF) -#define U300_SYSCON_SRCLR_VALUE					(0x03FF) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_5_B			(0x0200) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_5_A			(0x0100) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_4_B			(0x0080) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_4_A			(0x0040) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_3_B			(0x0020) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_3_A			(0x0010) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_2_B			(0x0008) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_2_A			(0x0004) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_1_B			(0x0002) -#define U300_SYSCON_SRCLR_EMIF_1_SLRC_1_A			(0x0001) -/* EMIF Clock Control Register 16bit (R/W) */ -#define U300_SYSCON_ECCR					(0x0078) -#define U300_SYSCON_ECCR_MASK					(0x000F) -#define U300_SYSCON_ECCR_EMIF_1_STATIC_CLK_EN_N_DISABLE		(0x0008) -#define U300_SYSCON_ECCR_EMIF_1_RET_OUT_CLK_EN_N_DISABLE	(0x0004) -#define U300_SYSCON_ECCR_EMIF_MEMCLK_RET_EN_N_DISABLE		(0x0002) -#define U300_SYSCON_ECCR_EMIF_SDRCLK_RET_EN_N_DISABLE		(0x0001) -/* PAD MUX Control register 1 (LOW) 16bit (R/W) */ -#define U300_SYSCON_PMC1LR					(0x007C) -#define U300_SYSCON_PMC1LR_MASK					(0xFFFF) -#define U300_SYSCON_PMC1LR_CDI_MASK				(0xC000) -#define U300_SYSCON_PMC1LR_CDI_CDI				(0x0000) -#define U300_SYSCON_PMC1LR_CDI_EMIF				(0x4000) -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SYSCON_PMC1LR_CDI_CDI2				(0x8000) -#define U300_SYSCON_PMC1LR_CDI_WCDMA_APP_GPIO			(0xC000) -#elif CONFIG_MACH_U300_BS365 -#define U300_SYSCON_PMC1LR_CDI_GPIO				(0x8000) -#define U300_SYSCON_PMC1LR_CDI_WCDMA				(0xC000) -#endif -#define U300_SYSCON_PMC1LR_PDI_MASK				(0x3000) -#define U300_SYSCON_PMC1LR_PDI_PDI				(0x0000) -#define U300_SYSCON_PMC1LR_PDI_EGG				(0x1000) -#define U300_SYSCON_PMC1LR_PDI_WCDMA				(0x3000) -#define U300_SYSCON_PMC1LR_MMCSD_MASK				(0x0C00) -#define U300_SYSCON_PMC1LR_MMCSD_MMCSD				(0x0000) -#define U300_SYSCON_PMC1LR_MMCSD_MSPRO				(0x0400) -#define U300_SYSCON_PMC1LR_MMCSD_DSP				(0x0800) -#define U300_SYSCON_PMC1LR_MMCSD_WCDMA				(0x0C00) -#define U300_SYSCON_PMC1LR_ETM_MASK				(0x0300) -#define U300_SYSCON_PMC1LR_ETM_ACC				(0x0000) -#define U300_SYSCON_PMC1LR_ETM_APP				(0x0100) -#define U300_SYSCON_PMC1LR_EMIF_1_CS2_MASK			(0x00C0) -#define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC			(0x0000) -#define U300_SYSCON_PMC1LR_EMIF_1_CS2_NFIF			(0x0040) -#define U300_SYSCON_PMC1LR_EMIF_1_CS2_SDRAM			(0x0080) -#define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC_2GB		(0x00C0) -#define U300_SYSCON_PMC1LR_EMIF_1_CS1_MASK			(0x0030) -#define U300_SYSCON_PMC1LR_EMIF_1_CS1_STATIC			(0x0000) -#define U300_SYSCON_PMC1LR_EMIF_1_CS1_NFIF			(0x0010) -#define U300_SYSCON_PMC1LR_EMIF_1_CS1_SDRAM			(0x0020) -#define U300_SYSCON_PMC1LR_EMIF_1_CS1_SEMI			(0x0030) -#define U300_SYSCON_PMC1LR_EMIF_1_CS0_MASK			(0x000C) -#define U300_SYSCON_PMC1LR_EMIF_1_CS0_STATIC			(0x0000) -#define U300_SYSCON_PMC1LR_EMIF_1_CS0_NFIF			(0x0004) -#define U300_SYSCON_PMC1LR_EMIF_1_CS0_SDRAM			(0x0008) -#define U300_SYSCON_PMC1LR_EMIF_1_CS0_SEMI			(0x000C) -#define U300_SYSCON_PMC1LR_EMIF_1_MASK				(0x0003) -#define U300_SYSCON_PMC1LR_EMIF_1_STATIC			(0x0000) -#define U300_SYSCON_PMC1LR_EMIF_1_SDRAM0			(0x0001) -#define U300_SYSCON_PMC1LR_EMIF_1_SDRAM1			(0x0002) -#define U300_SYSCON_PMC1LR_EMIF_1				(0x0003) -/* PAD MUX Control register 2 (HIGH) 16bit (R/W) */ -#define U300_SYSCON_PMC1HR					(0x007E) -#define U300_SYSCON_PMC1HR_MASK					(0xFFFF) -#define U300_SYSCON_PMC1HR_MISC_2_MASK				(0xC000) -#define U300_SYSCON_PMC1HR_MISC_2_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC1HR_MISC_2_MSPRO				(0x4000) -#define U300_SYSCON_PMC1HR_MISC_2_DSP				(0x8000) -#define U300_SYSCON_PMC1HR_MISC_2_AAIF				(0xC000) -#define U300_SYSCON_PMC1HR_APP_GPIO_2_MASK			(0x3000) -#define U300_SYSCON_PMC1HR_APP_GPIO_2_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC1HR_APP_GPIO_2_NFIF			(0x1000) -#define U300_SYSCON_PMC1HR_APP_GPIO_2_DSP			(0x2000) -#define U300_SYSCON_PMC1HR_APP_GPIO_2_AAIF			(0x3000) -#define U300_SYSCON_PMC1HR_APP_GPIO_1_MASK			(0x0C00) -#define U300_SYSCON_PMC1HR_APP_GPIO_1_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC1HR_APP_GPIO_1_MMC			(0x0400) -#define U300_SYSCON_PMC1HR_APP_GPIO_1_DSP			(0x0800) -#define U300_SYSCON_PMC1HR_APP_GPIO_1_AAIF			(0x0C00) -#define U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK			(0x0300) -#define U300_SYSCON_PMC1HR_APP_SPI_CS_2_APP_GPIO		(0x0000) -#define U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI			(0x0100) -#define U300_SYSCON_PMC1HR_APP_SPI_CS_2_AAIF			(0x0300) -#define U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK			(0x00C0) -#define U300_SYSCON_PMC1HR_APP_SPI_CS_1_APP_GPIO		(0x0000) -#define U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI			(0x0040) -#define U300_SYSCON_PMC1HR_APP_SPI_CS_1_AAIF			(0x00C0) -#define U300_SYSCON_PMC1HR_APP_SPI_2_MASK			(0x0030) -#define U300_SYSCON_PMC1HR_APP_SPI_2_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC1HR_APP_SPI_2_SPI			(0x0010) -#define U300_SYSCON_PMC1HR_APP_SPI_2_DSP			(0x0020) -#define U300_SYSCON_PMC1HR_APP_SPI_2_AAIF			(0x0030) -#define U300_SYSCON_PMC1HR_APP_UART0_2_MASK			(0x000C) -#define U300_SYSCON_PMC1HR_APP_UART0_2_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC1HR_APP_UART0_2_UART0			(0x0004) -#define U300_SYSCON_PMC1HR_APP_UART0_2_NFIF_CS			(0x0008) -#define U300_SYSCON_PMC1HR_APP_UART0_2_AAIF			(0x000C) -#define U300_SYSCON_PMC1HR_APP_UART0_1_MASK			(0x0003) -#define U300_SYSCON_PMC1HR_APP_UART0_1_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC1HR_APP_UART0_1_UART0			(0x0001) -#define U300_SYSCON_PMC1HR_APP_UART0_1_AAIF			(0x0003) -/* Step one for killing the applications system 16bit (-/W) */ -#define U300_SYSCON_KA1R					(0x0080) -#define U300_SYSCON_KA1R_MASK					(0xFFFF) -#define U300_SYSCON_KA1R_VALUE					(0xFFFF) -/* Step two for killing the application system 16bit (-/W) */ -#define U300_SYSCON_KA2R					(0x0084) -#define U300_SYSCON_KA2R_MASK					(0xFFFF) -#define U300_SYSCON_KA2R_VALUE					(0xFFFF) -/* MMC/MSPRO frequency divider register 0 16bit (R/W) */ -#define U300_SYSCON_MMF0R					(0x90) -#define U300_SYSCON_MMF0R_MASK					(0x00FF) -#define U300_SYSCON_MMF0R_FREQ_0_HIGH_MASK			(0x00F0) -#define U300_SYSCON_MMF0R_FREQ_0_LOW_MASK			(0x000F) -/* MMC/MSPRO frequency divider register 1 16bit (R/W) */ -#define U300_SYSCON_MMF1R					(0x94) -#define U300_SYSCON_MMF1R_MASK					(0x00FF) -#define U300_SYSCON_MMF1R_FREQ_1_HIGH_MASK			(0x00F0) -#define U300_SYSCON_MMF1R_FREQ_1_LOW_MASK			(0x000F) -/* AAIF control register 16 bit (R/W) */ -#define U300_SYSCON_AAIFCR					(0x98) -#define U300_SYSCON_AAIFCR_MASK					(0x0003) -#define U300_SYSCON_AAIFCR_AASW_CTRL_MASK			(0x0003) -#define U300_SYSCON_AAIFCR_AASW_CTRL_FUNCTIONAL			(0x0000) -#define U300_SYSCON_AAIFCR_AASW_CTRL_MONITORING			(0x0001) -#define U300_SYSCON_AAIFCR_AASW_CTRL_ACC_TO_EXT			(0x0002) -#define U300_SYSCON_AAIFCR_AASW_CTRL_APP_TO_EXT			(0x0003) -/* Clock control for the MMC and MSPRO blocks 16bit (R/W) */ -#define U300_SYSCON_MMCR					(0x9C) -#define U300_SYSCON_MMCR_MASK					(0x0003) -#define U300_SYSCON_MMCR_MMC_FB_CLK_SEL_ENABLE			(0x0002) -#define U300_SYSCON_MMCR_MSPRO_FREQSEL_ENABLE			(0x0001) -/* Pull up/down control (R/W) */ -#define U300_SYSCON_PUCR					(0x104) -#define U300_SYSCON_PUCR_EMIF_1_WAIT_N_PU_ENABLE		(0x0200) -#define U300_SYSCON_PUCR_EMIF_1_NFIF_READY_PU_ENABLE		(0x0100) -#define U300_SYSCON_PUCR_EMIF_1_16BIT_PU_ENABLE			(0x0080) -#define U300_SYSCON_PUCR_EMIF_1_8BIT_PU_ENABLE			(0x0040) -#define U300_SYSCON_PUCR_KEY_IN_PU_EN_MASK			(0x003F) -/* Padmux 2 control */ -#define U300_SYSCON_PMC2R					(0x100) -#define U300_SYSCON_PMC2R_APP_MISC_0_MASK			(0x00C0) -#define U300_SYSCON_PMC2R_APP_MISC_0_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC2R_APP_MISC_0_EMIF_SDRAM			(0x0040) -#define U300_SYSCON_PMC2R_APP_MISC_0_MMC			(0x0080) -#define U300_SYSCON_PMC2R_APP_MISC_0_CDI2			(0x00C0) -#define U300_SYSCON_PMC2R_APP_MISC_1_MASK			(0x0300) -#define U300_SYSCON_PMC2R_APP_MISC_1_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC2R_APP_MISC_1_EMIF_SDRAM			(0x0100) -#define U300_SYSCON_PMC2R_APP_MISC_1_MMC			(0x0200) -#define U300_SYSCON_PMC2R_APP_MISC_1_CDI2			(0x0300) -#define U300_SYSCON_PMC2R_APP_MISC_2_MASK			(0x0C00) -#define U300_SYSCON_PMC2R_APP_MISC_2_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC2R_APP_MISC_2_EMIF_SDRAM			(0x0400) -#define U300_SYSCON_PMC2R_APP_MISC_2_MMC			(0x0800) -#define U300_SYSCON_PMC2R_APP_MISC_2_CDI2			(0x0C00) -#define U300_SYSCON_PMC2R_APP_MISC_3_MASK			(0x3000) -#define U300_SYSCON_PMC2R_APP_MISC_3_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC2R_APP_MISC_3_EMIF_SDRAM			(0x1000) -#define U300_SYSCON_PMC2R_APP_MISC_3_MMC			(0x2000) -#define U300_SYSCON_PMC2R_APP_MISC_3_CDI2			(0x3000) -#define U300_SYSCON_PMC2R_APP_MISC_4_MASK			(0xC000) -#define U300_SYSCON_PMC2R_APP_MISC_4_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC2R_APP_MISC_4_EMIF_SDRAM			(0x4000) -#define U300_SYSCON_PMC2R_APP_MISC_4_MMC			(0x8000) -#define U300_SYSCON_PMC2R_APP_MISC_4_ACC_GPIO			(0xC000) -/* TODO: More SYSCON registers missing */ -#define U300_SYSCON_PMC3R					(0x10c) -#define U300_SYSCON_PMC3R_APP_MISC_11_MASK			(0xc000) -#define U300_SYSCON_PMC3R_APP_MISC_11_SPI			(0x4000) -#define U300_SYSCON_PMC3R_APP_MISC_10_MASK			(0x3000) -#define U300_SYSCON_PMC3R_APP_MISC_10_SPI			(0x1000) -/* TODO: Missing other configs */ -#define U300_SYSCON_PMC4R					(0x168) -#define U300_SYSCON_PMC4R_APP_MISC_12_MASK			(0x0003) -#define U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO			(0x0000) -#define U300_SYSCON_PMC4R_APP_MISC_13_MASK			(0x000C) -#define U300_SYSCON_PMC4R_APP_MISC_13_CDI			(0x0000) -#define U300_SYSCON_PMC4R_APP_MISC_13_SMIA			(0x0004) -#define U300_SYSCON_PMC4R_APP_MISC_13_SMIA2			(0x0008) -#define U300_SYSCON_PMC4R_APP_MISC_13_APP_GPIO			(0x000C) -#define U300_SYSCON_PMC4R_APP_MISC_14_MASK			(0x0030) -#define U300_SYSCON_PMC4R_APP_MISC_14_CDI			(0x0000) -#define U300_SYSCON_PMC4R_APP_MISC_14_SMIA			(0x0010) -#define U300_SYSCON_PMC4R_APP_MISC_14_CDI2			(0x0020) -#define U300_SYSCON_PMC4R_APP_MISC_14_APP_GPIO			(0x0030) -#define U300_SYSCON_PMC4R_APP_MISC_16_MASK			(0x0300) -#define U300_SYSCON_PMC4R_APP_MISC_16_APP_GPIO_13		(0x0000) -#define U300_SYSCON_PMC4R_APP_MISC_16_APP_UART1_CTS		(0x0100) -#define U300_SYSCON_PMC4R_APP_MISC_16_EMIF_1_STATIC_CS5_N	(0x0200) -/* SYS_0_CLK_CONTROL first clock control 16bit (R/W) */ -#define U300_SYSCON_S0CCR					(0x120) -#define U300_SYSCON_S0CCR_FIELD_MASK				(0x43FF) -#define U300_SYSCON_S0CCR_CLOCK_REQ				(0x4000) -#define U300_SYSCON_S0CCR_CLOCK_REQ_MONITOR			(0x2000) -#define U300_SYSCON_S0CCR_CLOCK_INV				(0x0200) -#define U300_SYSCON_S0CCR_CLOCK_FREQ_MASK			(0x01E0) -#define U300_SYSCON_S0CCR_CLOCK_SELECT_MASK			(0x001E) -#define U300_SYSCON_S0CCR_CLOCK_ENABLE				(0x0001) -#define U300_SYSCON_S0CCR_SEL_MCLK				(0x8<<1) -#define U300_SYSCON_S0CCR_SEL_ACC_FSM_CLK			(0xA<<1) -#define U300_SYSCON_S0CCR_SEL_PLL60_48_CLK			(0xC<<1) -#define U300_SYSCON_S0CCR_SEL_PLL60_60_CLK			(0xD<<1) -#define U300_SYSCON_S0CCR_SEL_ACC_PLL208_CLK			(0xE<<1) -#define U300_SYSCON_S0CCR_SEL_APP_PLL13_CLK			(0x0<<1) -#define U300_SYSCON_S0CCR_SEL_APP_FSM_CLK			(0x2<<1) -#define U300_SYSCON_S0CCR_SEL_RTC_CLK				(0x4<<1) -#define U300_SYSCON_S0CCR_SEL_APP_PLL208_CLK			(0x6<<1) -/* SYS_1_CLK_CONTROL second clock control 16 bit (R/W) */ -#define U300_SYSCON_S1CCR					(0x124) -#define U300_SYSCON_S1CCR_FIELD_MASK				(0x43FF) -#define U300_SYSCON_S1CCR_CLOCK_REQ				(0x4000) -#define U300_SYSCON_S1CCR_CLOCK_REQ_MONITOR			(0x2000) -#define U300_SYSCON_S1CCR_CLOCK_INV				(0x0200) -#define U300_SYSCON_S1CCR_CLOCK_FREQ_MASK			(0x01E0) -#define U300_SYSCON_S1CCR_CLOCK_SELECT_MASK			(0x001E) -#define U300_SYSCON_S1CCR_CLOCK_ENABLE				(0x0001) -#define U300_SYSCON_S1CCR_SEL_MCLK				(0x8<<1) -#define U300_SYSCON_S1CCR_SEL_ACC_FSM_CLK			(0xA<<1) -#define U300_SYSCON_S1CCR_SEL_PLL60_48_CLK			(0xC<<1) -#define U300_SYSCON_S1CCR_SEL_PLL60_60_CLK			(0xD<<1) -#define U300_SYSCON_S1CCR_SEL_ACC_PLL208_CLK			(0xE<<1) -#define U300_SYSCON_S1CCR_SEL_ACC_PLL13_CLK			(0x0<<1) -#define U300_SYSCON_S1CCR_SEL_APP_FSM_CLK			(0x2<<1) -#define U300_SYSCON_S1CCR_SEL_RTC_CLK				(0x4<<1) -#define U300_SYSCON_S1CCR_SEL_APP_PLL208_CLK			(0x6<<1) -/* SYS_2_CLK_CONTROL third clock contol 16 bit (R/W) */ -#define U300_SYSCON_S2CCR					(0x128) -#define U300_SYSCON_S2CCR_FIELD_MASK				(0xC3FF) -#define U300_SYSCON_S2CCR_CLK_STEAL				(0x8000) -#define U300_SYSCON_S2CCR_CLOCK_REQ				(0x4000) -#define U300_SYSCON_S2CCR_CLOCK_REQ_MONITOR			(0x2000) -#define U300_SYSCON_S2CCR_CLOCK_INV				(0x0200) -#define U300_SYSCON_S2CCR_CLOCK_FREQ_MASK			(0x01E0) -#define U300_SYSCON_S2CCR_CLOCK_SELECT_MASK			(0x001E) -#define U300_SYSCON_S2CCR_CLOCK_ENABLE				(0x0001) -#define U300_SYSCON_S2CCR_SEL_MCLK				(0x8<<1) -#define U300_SYSCON_S2CCR_SEL_ACC_FSM_CLK			(0xA<<1) -#define U300_SYSCON_S2CCR_SEL_PLL60_48_CLK			(0xC<<1) -#define U300_SYSCON_S2CCR_SEL_PLL60_60_CLK			(0xD<<1) -#define U300_SYSCON_S2CCR_SEL_ACC_PLL208_CLK			(0xE<<1) -#define U300_SYSCON_S2CCR_SEL_ACC_PLL13_CLK			(0x0<<1) -#define U300_SYSCON_S2CCR_SEL_APP_FSM_CLK			(0x2<<1) -#define U300_SYSCON_S2CCR_SEL_RTC_CLK				(0x4<<1) -#define U300_SYSCON_S2CCR_SEL_APP_PLL208_CLK			(0x6<<1) -/* SYS_MISC_CONTROL, miscellaneous 16bit (R/W) */ -#define U300_SYSCON_MCR						(0x12c) -#define U300_SYSCON_MCR_FIELD_MASK				(0x00FF) -#define U300_SYSCON_MCR_PMGEN_CR_4_MASK				(0x00C0) -#define U300_SYSCON_MCR_PMGEN_CR_4_GPIO				(0x0000) -#define U300_SYSCON_MCR_PMGEN_CR_4_SPI				(0x0040) -#define U300_SYSCON_MCR_PMGEN_CR_4_AAIF				(0x00C0) -#define U300_SYSCON_MCR_PMGEN_CR_2_MASK				(0x0030) -#define U300_SYSCON_MCR_PMGEN_CR_2_GPIO				(0x0000) -#define U300_SYSCON_MCR_PMGEN_CR_2_EMIF_1_STATIC		(0x0010) -#define U300_SYSCON_MCR_PMGEN_CR_2_DSP				(0x0020) -#define U300_SYSCON_MCR_PMGEN_CR_2_AAIF				(0x0030) -#define U300_SYSCON_MCR_PMGEN_CR_0_MASK				(0x000C) -#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_1_SDRAM_M1		(0x0000) -#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_1_SDRAM_M2		(0x0004) -#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_1_SDRAM_M3		(0x0008) -#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_0_SDRAM			(0x000C) -#define U300_SYSCON_MCR_PM1G_MODE_ENABLE			(0x0002) -#define U300_SYSCON_MCR_PMTG5_MODE_ENABLE			(0x0001) -/* SC_PLL_IRQ_CONTROL 16bit (R/W) */ -#define U300_SYSCON_PICR					(0x0130) -#define U300_SYSCON_PICR_MASK					(0x00FF) -#define U300_SYSCON_PICR_FORCE_PLL208_LOCK_LOW_ENABLE		(0x0080) -#define U300_SYSCON_PICR_FORCE_PLL208_LOCK_HIGH_ENABLE		(0x0040) -#define U300_SYSCON_PICR_FORCE_PLL13_LOCK_LOW_ENABLE		(0x0020) -#define U300_SYSCON_PICR_FORCE_PLL13_LOCK_HIGH_ENABLE		(0x0010) -#define U300_SYSCON_PICR_IRQMASK_PLL13_UNLOCK_ENABLE		(0x0008) -#define U300_SYSCON_PICR_IRQMASK_PLL13_LOCK_ENABLE		(0x0004) -#define U300_SYSCON_PICR_IRQMASK_PLL208_UNLOCK_ENABLE		(0x0002) -#define U300_SYSCON_PICR_IRQMASK_PLL208_LOCK_ENABLE		(0x0001) -/* SC_PLL_IRQ_STATUS 16 bit (R/-) */ -#define U300_SYSCON_PISR					(0x0134) -#define U300_SYSCON_PISR_MASK					(0x000F) -#define U300_SYSCON_PISR_PLL13_UNLOCK_IND			(0x0008) -#define U300_SYSCON_PISR_PLL13_LOCK_IND				(0x0004) -#define U300_SYSCON_PISR_PLL208_UNLOCK_IND			(0x0002) -#define U300_SYSCON_PISR_PLL208_LOCK_IND			(0x0001) -/* SC_PLL_IRQ_CLEAR 16 bit (-/W) */ -#define U300_SYSCON_PICLR					(0x0138) -#define U300_SYSCON_PICLR_MASK					(0x000F) -#define U300_SYSCON_PICLR_RWMASK				(0x0000) -#define U300_SYSCON_PICLR_PLL13_UNLOCK_SC			(0x0008) -#define U300_SYSCON_PICLR_PLL13_LOCK_SC				(0x0004) -#define U300_SYSCON_PICLR_PLL208_UNLOCK_SC			(0x0002) -#define U300_SYSCON_PICLR_PLL208_LOCK_SC			(0x0001) -/* CAMIF_CONTROL 16 bit (-/W) */ -#define U300_SYSCON_CICR					(0x013C) -#define U300_SYSCON_CICR_MASK					(0x0FFF) -#define U300_SYSCON_CICR_APP_SUBLVDS_TESTMODE_MASK		(0x0F00) -#define U300_SYSCON_CICR_APP_SUBLVDS_TESTMODE_PORT1		(0x0C00) -#define U300_SYSCON_CICR_APP_SUBLVDS_TESTMODE_PORT0		(0x0300) -#define U300_SYSCON_CICR_APP_SUBLVDS_RESCON_MASK		(0x00F0) -#define U300_SYSCON_CICR_APP_SUBLVDS_RESCON_PORT1		(0x00C0) -#define U300_SYSCON_CICR_APP_SUBLVDS_RESCON_PORT0		(0x0030) -#define U300_SYSCON_CICR_APP_SUBLVDS_PWR_DWN_N_MASK		(0x000F) -#define U300_SYSCON_CICR_APP_SUBLVDS_PWR_DWN_N_PORT1		(0x000C) -#define U300_SYSCON_CICR_APP_SUBLVDS_PWR_DWN_N_PORT0		(0x0003) -/* Clock activity observability register 0 */ -#define U300_SYSCON_C0OAR					(0x140) -#define U300_SYSCON_C0OAR_MASK					(0xFFFF) -#define U300_SYSCON_C0OAR_VALUE					(0xFFFF) -#define U300_SYSCON_C0OAR_BT_H_CLK				(0x8000) -#define U300_SYSCON_C0OAR_ASPB_P_CLK				(0x4000) -#define U300_SYSCON_C0OAR_APP_SEMI_H_CLK			(0x2000) -#define U300_SYSCON_C0OAR_APP_SEMI_CLK				(0x1000) -#define U300_SYSCON_C0OAR_APP_MMC_MSPRO_CLK			(0x0800) -#define U300_SYSCON_C0OAR_APP_I2S1_CLK				(0x0400) -#define U300_SYSCON_C0OAR_APP_I2S0_CLK				(0x0200) -#define U300_SYSCON_C0OAR_APP_CPU_CLK				(0x0100) -#define U300_SYSCON_C0OAR_APP_52_CLK				(0x0080) -#define U300_SYSCON_C0OAR_APP_208_CLK				(0x0040) -#define U300_SYSCON_C0OAR_APP_104_CLK				(0x0020) -#define U300_SYSCON_C0OAR_APEX_CLK				(0x0010) -#define U300_SYSCON_C0OAR_AHPB_M_H_CLK				(0x0008) -#define U300_SYSCON_C0OAR_AHB_CLK				(0x0004) -#define U300_SYSCON_C0OAR_AFPB_P_CLK				(0x0002) -#define U300_SYSCON_C0OAR_AAIF_CLK				(0x0001) -/* Clock activity observability register 1 */ -#define U300_SYSCON_C1OAR					(0x144) -#define U300_SYSCON_C1OAR_MASK					(0x3FFE) -#define U300_SYSCON_C1OAR_VALUE					(0x3FFE) -#define U300_SYSCON_C1OAR_NFIF_F_CLK				(0x2000) -#define U300_SYSCON_C1OAR_MSPRO_CLK				(0x1000) -#define U300_SYSCON_C1OAR_MMC_P_CLK				(0x0800) -#define U300_SYSCON_C1OAR_MMC_CLK				(0x0400) -#define U300_SYSCON_C1OAR_KP_P_CLK				(0x0200) -#define U300_SYSCON_C1OAR_I2C1_P_CLK				(0x0100) -#define U300_SYSCON_C1OAR_I2C0_P_CLK				(0x0080) -#define U300_SYSCON_C1OAR_GPIO_CLK				(0x0040) -#define U300_SYSCON_C1OAR_EMIF_MPMC_CLK				(0x0020) -#define U300_SYSCON_C1OAR_EMIF_H_CLK				(0x0010) -#define U300_SYSCON_C1OAR_EVHIST_CLK				(0x0008) -#define U300_SYSCON_C1OAR_PPM_CLK				(0x0004) -#define U300_SYSCON_C1OAR_DMA_CLK				(0x0002) -/* Clock activity observability register 2 */ -#define U300_SYSCON_C2OAR					(0x148) -#define U300_SYSCON_C2OAR_MASK					(0x0FFF) -#define U300_SYSCON_C2OAR_VALUE					(0x0FFF) -#define U300_SYSCON_C2OAR_XGAM_CDI_CLK				(0x0800) -#define U300_SYSCON_C2OAR_XGAM_CLK				(0x0400) -#define U300_SYSCON_C2OAR_VC_H_CLK				(0x0200) -#define U300_SYSCON_C2OAR_VC_CLK				(0x0100) -#define U300_SYSCON_C2OAR_UA_P_CLK				(0x0080) -#define U300_SYSCON_C2OAR_TMR1_CLK				(0x0040) -#define U300_SYSCON_C2OAR_TMR0_CLK				(0x0020) -#define U300_SYSCON_C2OAR_SPI_P_CLK				(0x0010) -#define U300_SYSCON_C2OAR_PCM_I2S1_CORE_CLK			(0x0008) -#define U300_SYSCON_C2OAR_PCM_I2S1_CLK				(0x0004) -#define U300_SYSCON_C2OAR_PCM_I2S0_CORE_CLK			(0x0002) -#define U300_SYSCON_C2OAR_PCM_I2S0_CLK				(0x0001) - -/* Chip ID register 16bit (R/-) */ -#define U300_SYSCON_CIDR					(0x400) -/* Video IRQ clear 16bit (R/W) */ -#define U300_SYSCON_VICR					(0x404) -#define U300_SYSCON_VICR_VIDEO1_IRQ_CLEAR_ENABLE		(0x0002) -#define U300_SYSCON_VICR_VIDEO0_IRQ_CLEAR_ENABLE		(0x0001) -/* SMCR */ -#define U300_SYSCON_SMCR					(0x4d0) -#define U300_SYSCON_SMCR_FIELD_MASK				(0x000e) -#define U300_SYSCON_SMCR_SEMI_SREFACK_IND			(0x0008) -#define U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE			(0x0004) -#define U300_SYSCON_SMCR_SEMI_EXT_BOOT_MODE_ENABLE		(0x0002) -/* CPU_SW_DBGEN Software Debug Enable 16bit (R/W) */ -#define U300_SYSCON_CSDR					(0x4f0) -#define U300_SYSCON_CSDR_SW_DEBUG_ENABLE			(0x0001) -/* PRINT_CONTROL Print Control 16bit (R/-) */ -#define U300_SYSCON_PCR						(0x4f8) -#define U300_SYSCON_PCR_SERV_IND				(0x0001) -/* BOOT_CONTROL 16bit (R/-) */ -#define U300_SYSCON_BCR						(0x4fc) -#define U300_SYSCON_BCR_ACC_CPU_SUBSYS_VINITHI_IND		(0x0400) -#define U300_SYSCON_BCR_APP_CPU_SUBSYS_VINITHI_IND		(0x0200) -#define U300_SYSCON_BCR_EXTRA_BOOT_OPTION_MASK			(0x01FC) -#define U300_SYSCON_BCR_APP_BOOT_SERV_MASK			(0x0003) - - -/* CPU clock defines */ -/** - * CPU high frequency in MHz - */ -#define SYSCON_CPU_CLOCK_HIGH    208 -/** - * CPU medium frequency in MHz - */ -#define SYSCON_CPU_CLOCK_MEDIUM   52 -/** - * CPU low frequency in MHz - */ -#define SYSCON_CPU_CLOCK_LOW      13 - -/* EMIF clock defines */ -/** - * EMIF high frequency in MHz - */ -#define SYSCON_EMIF_CLOCK_HIGH   104 -/** - * EMIF medium frequency in MHz - */ -#define SYSCON_EMIF_CLOCK_MEDIUM  52 -/** - * EMIF low frequency in MHz - */ -#define SYSCON_EMIF_CLOCK_LOW     13 - -/* AHB clock defines */ -/** - * AHB high frequency in MHz - */ -#define SYSCON_AHB_CLOCK_HIGH     52 -/** - * AHB medium frequency in MHz - */ -#define SYSCON_AHB_CLOCK_MEDIUM   26 -/** - * AHB low frequency in MHz - */ -#define SYSCON_AHB_CLOCK_LOW       7  /* i.e 13/2=6.5MHz */ - -enum syscon_busmaster { -  SYSCON_BM_DMAC, -  SYSCON_BM_XGAM, -  SYSCON_BM_VIDEO_ENC -}; - -/* Selectr a resistor or a set of resistors */ -enum syscon_pull_up_down { -  SYSCON_PU_KEY_IN_EN, -  SYSCON_PU_EMIF_1_8_BIT_EN, -  SYSCON_PU_EMIF_1_16_BIT_EN, -  SYSCON_PU_EMIF_1_NFIF_READY_EN, -  SYSCON_PU_EMIF_1_NFIF_WAIT_N_EN, -}; - -/* - * Note that this array must match the order of the array "clk_reg" - * in syscon.c - */ -enum syscon_clk { -  SYSCON_CLKCONTROL_SLOW_BRIDGE, -  SYSCON_CLKCONTROL_UART, -  SYSCON_CLKCONTROL_BTR, -  SYSCON_CLKCONTROL_EH, -  SYSCON_CLKCONTROL_GPIO, -  SYSCON_CLKCONTROL_KEYPAD, -  SYSCON_CLKCONTROL_APP_TIMER, -  SYSCON_CLKCONTROL_ACC_TIMER, -  SYSCON_CLKCONTROL_FAST_BRIDGE, -  SYSCON_CLKCONTROL_I2C0, -  SYSCON_CLKCONTROL_I2C1, -  SYSCON_CLKCONTROL_I2S0, -  SYSCON_CLKCONTROL_I2S1, -  SYSCON_CLKCONTROL_MMC, -  SYSCON_CLKCONTROL_SPI, -  SYSCON_CLKCONTROL_I2S0_CORE, -  SYSCON_CLKCONTROL_I2S1_CORE, -  SYSCON_CLKCONTROL_UART1, -  SYSCON_CLKCONTROL_AAIF, -  SYSCON_CLKCONTROL_AHB, -  SYSCON_CLKCONTROL_APEX, -  SYSCON_CLKCONTROL_CPU, -  SYSCON_CLKCONTROL_DMA, -  SYSCON_CLKCONTROL_EMIF, -  SYSCON_CLKCONTROL_NAND_IF, -  SYSCON_CLKCONTROL_VIDEO_ENC, -  SYSCON_CLKCONTROL_XGAM, -  SYSCON_CLKCONTROL_SEMI, -  SYSCON_CLKCONTROL_AHB_SUBSYS, -  SYSCON_CLKCONTROL_MSPRO -}; - -enum syscon_sysclk_mode { -  SYSCON_SYSCLK_DISABLED, -  SYSCON_SYSCLK_M_CLK, -  SYSCON_SYSCLK_ACC_FSM, -  SYSCON_SYSCLK_PLL60_48, -  SYSCON_SYSCLK_PLL60_60, -  SYSCON_SYSCLK_ACC_PLL208, -  SYSCON_SYSCLK_APP_PLL13, -  SYSCON_SYSCLK_APP_FSM, -  SYSCON_SYSCLK_RTC, -  SYSCON_SYSCLK_APP_PLL208 -}; - -enum syscon_sysclk_req { -  SYSCON_SYSCLKREQ_DISABLED, -  SYSCON_SYSCLKREQ_ACTIVE_LOW, -  SYSCON_SYSCLKREQ_MONITOR -}; - -enum syscon_clk_mode { -  SYSCON_CLKMODE_OFF, -  SYSCON_CLKMODE_DEFAULT, -  SYSCON_CLKMODE_LOW, -  SYSCON_CLKMODE_MEDIUM, -  SYSCON_CLKMODE_HIGH, -  SYSCON_CLKMODE_PERMANENT, -  SYSCON_CLKMODE_ON, -}; - -enum syscon_call_mode { -  SYSCON_CLKCALL_NOWAIT, -  SYSCON_CLKCALL_WAIT, -}; - -int syscon_dc_on(bool keep_power_on); -int syscon_set_busmaster_active_state(enum syscon_busmaster busmaster, -				      bool active); -bool syscon_get_busmaster_active_state(void); -int syscon_set_sleep_mask(enum syscon_clk, -			  bool sleep_ctrl); -int syscon_config_sysclk(u32 sysclk, -			 enum syscon_sysclk_mode sysclkmode, -			 bool inverse, -			 u32 divisor, -			 enum syscon_sysclk_req sysclkreq); -bool syscon_can_turn_off_semi_clock(void); - -/* This function is restricted to core.c */ -int syscon_request_normal_power(bool req); - -/* This function is restricted to be used by platform_speed.c */ -int syscon_speed_request(enum syscon_call_mode wait_mode, -			 enum syscon_clk_mode req_clk_mode); -#endif /* __MACH_SYSCON_H */ diff --git a/arch/arm/mach-u300/include/mach/system.h b/arch/arm/mach-u300/include/mach/system.h deleted file mode 100644 index 8daf13634ce..00000000000 --- a/arch/arm/mach-u300/include/mach/system.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/system.h - * - * - * Copyright (C) 2007-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * System shutdown and reset functions. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#include <mach/hardware.h> -#include <asm/io.h> -#include <asm/hardware/vic.h> -#include <asm/irq.h> - -/* Forward declare this function from the watchdog */ -void coh901327_watchdog_reset(void); - -static inline void arch_idle(void) -{ -	cpu_do_idle(); -} - -static void arch_reset(char mode, const char *cmd) -{ -	switch (mode) { -	case 's': -	case 'h': -		printk(KERN_CRIT "RESET: shutting down/rebooting system\n"); -		/* Disable interrupts */ -		local_irq_disable(); -#ifdef CONFIG_COH901327_WATCHDOG -		coh901327_watchdog_reset(); -#endif -		break; -	default: -		/* Do nothing */ -		break; -	} -	/* Wait for system do die/reset. */ -	while (1); -} diff --git a/arch/arm/mach-u300/include/mach/timex.h b/arch/arm/mach-u300/include/mach/timex.h deleted file mode 100644 index f233b72633f..00000000000 --- a/arch/arm/mach-u300/include/mach/timex.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/timex.h - * - * - * Copyright (C) 2006-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Platform tick rate definition. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#ifndef __MACH_TIMEX_H -#define __MACH_TIMEX_H - -/* This is for the APP OS GP1 (General Purpose 1) timer */ -#define CLOCK_TICK_RATE		1000000 - -#endif diff --git a/arch/arm/mach-u300/include/mach/u300-regs.h b/arch/arm/mach-u300/include/mach/u300-regs.h deleted file mode 100644 index 8b85df4c8d8..00000000000 --- a/arch/arm/mach-u300/include/mach/u300-regs.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/u300-regs.h - * - * - * Copyright (C) 2006-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Basic register address definitions in physical memory and - * some block definitions for core devices like the timer. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ - -#ifndef __MACH_U300_REGS_H -#define __MACH_U300_REGS_H - -/* - * These are the large blocks of memory allocated for I/O. - * the defines are used for setting up the I/O memory mapping. - */ - -/* NAND Flash CS0 */ -#define U300_NAND_CS0_PHYS_BASE		0x80000000 - -/* NFIF */ -#define U300_NAND_IF_PHYS_BASE		0x9f800000 - -/* AHB Peripherals */ -#define U300_AHB_PER_PHYS_BASE		0xa0000000 -#define U300_AHB_PER_VIRT_BASE		0xff010000 - -/* FAST Peripherals */ -#define U300_FAST_PER_PHYS_BASE		0xc0000000 -#define U300_FAST_PER_VIRT_BASE		0xff020000 - -/* SLOW Peripherals */ -#define U300_SLOW_PER_PHYS_BASE		0xc0010000 -#define U300_SLOW_PER_VIRT_BASE		0xff000000 - -/* Boot ROM */ -#define U300_BOOTROM_PHYS_BASE		0xffff0000 -#define U300_BOOTROM_VIRT_BASE		0xffff0000 - -/* SEMI config base */ -#ifdef CONFIG_MACH_U300_BS335 -#define U300_SEMI_CONFIG_BASE		0x2FFE0000 -#else -#define U300_SEMI_CONFIG_BASE		0x30000000 -#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 - */ - -/* AHB Peripherals Bridge Controller */ -#define U300_AHB_BRIDGE_BASE		(U300_AHB_PER_PHYS_BASE+0x0000) - -/* 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) - -/* 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) - -/* Memory Stick Pro (MSPRO) controller */ -#define U300_MSPRO_BASE			(U300_AHB_PER_PHYS_BASE+0x3000) - -/* EMIF Configuration Area */ -#define U300_EMIF_CFG_BASE		(U300_AHB_PER_PHYS_BASE+0x4000) - - -/* - * FAST peripherals - */ - -/* FAST bridge control */ -#define U300_FAST_BRIDGE_BASE		(U300_FAST_PER_PHYS_BASE+0x0000) - -/* MMC/SD controller */ -#define U300_MMCSD_BASE			(U300_FAST_PER_PHYS_BASE+0x1000) - -/* PCM I2S0 controller */ -#define U300_PCM_I2S0_BASE		(U300_FAST_PER_PHYS_BASE+0x2000) - -/* PCM I2S1 controller */ -#define U300_PCM_I2S1_BASE		(U300_FAST_PER_PHYS_BASE+0x3000) - -/* I2C0 controller */ -#define U300_I2C0_BASE			(U300_FAST_PER_PHYS_BASE+0x4000) - -/* I2C1 controller */ -#define U300_I2C1_BASE			(U300_FAST_PER_PHYS_BASE+0x5000) - -/* SPI controller */ -#define U300_SPI_BASE			(U300_FAST_PER_PHYS_BASE+0x6000) - -#ifdef CONFIG_MACH_U300_BS335 -/* Fast UART1 on U335 only */ -#define U300_UART1_BASE			(U300_SLOW_PER_PHYS_BASE+0x7000) -#endif - -/* - * SLOW peripherals - */ - -/* SLOW bridge control */ -#define U300_SLOW_BRIDGE_BASE		(U300_SLOW_PER_PHYS_BASE) - -/* SYSCON */ -#define U300_SYSCON_BASE		(U300_SLOW_PER_PHYS_BASE+0x1000) -#define U300_SYSCON_VBASE		(U300_SLOW_PER_VIRT_BASE+0x1000) - -/* Watchdog */ -#define U300_WDOG_BASE			(U300_SLOW_PER_PHYS_BASE+0x2000) - -/* UART0 */ -#define U300_UART0_BASE			(U300_SLOW_PER_PHYS_BASE+0x3000) - -/* 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) - -/* Keypad */ -#define U300_KEYPAD_BASE		(U300_SLOW_PER_PHYS_BASE+0x5000) - -/* GPIO */ -#define U300_GPIO_BASE			(U300_SLOW_PER_PHYS_BASE+0x6000) - -/* RTC */ -#define U300_RTC_BASE			(U300_SLOW_PER_PHYS_BASE+0x7000) - -/* Bus tracer */ -#define U300_BUSTR_BASE			(U300_SLOW_PER_PHYS_BASE+0x8000) - -/* Event handler (hardware queue) */ -#define U300_EVHIST_BASE		(U300_SLOW_PER_PHYS_BASE+0x9000) - -/* Genric Timer */ -#define U300_TIMER_BASE			(U300_SLOW_PER_PHYS_BASE+0xa000) - -/* PPM */ -#define U300_PPM_BASE			(U300_SLOW_PER_PHYS_BASE+0xb000) - - -/* - * REST peripherals - */ - -/* ISP (image signal processor) is only available in U335 */ -#ifdef CONFIG_MACH_U300_BS335 -#define U300_ISP_BASE			(0xA0008000) -#endif - -/* DMA Controller base */ -#define U300_DMAC_BASE			(0xC0020000) - -/* MSL Base */ -#define U300_MSL_BASE			(0xc0022000) - -/* APEX Base */ -#define U300_APEX_BASE			(0xc0030000) - -/* Video Encoder Base */ -#ifdef CONFIG_MACH_U300_BS335 -#define U300_VIDEOENC_BASE		(0xc0080000) -#else -#define U300_VIDEOENC_BASE		(0xc0040000) -#endif - -/* XGAM Base */ -#define U300_XGAM_BASE			(0xd0000000) - -/* - * Virtual accessor macros for static devices - */ - - -#endif diff --git a/arch/arm/mach-u300/include/mach/uncompress.h b/arch/arm/mach-u300/include/mach/uncompress.h deleted file mode 100644 index 29acb718acf..00000000000 --- a/arch/arm/mach-u300/include/mach/uncompress.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * arch/arm/mach-u300/include/mach/uncompress.h - * - * Copyright (C) 2003 ARM Limited - * - * 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 - */ -#define AMBA_UART_DR	(*(volatile unsigned char *)0xc0013000) -#define AMBA_UART_LCRH	(*(volatile unsigned char *)0xc001302C) -#define AMBA_UART_CR	(*(volatile unsigned char *)0xc0013030) -#define AMBA_UART_FR	(*(volatile unsigned char *)0xc0013018) - -/* - * This does not append a newline - */ -static inline void putc(int c) -{ -	while (AMBA_UART_FR & (1 << 5)) -		barrier(); - -	AMBA_UART_DR = c; -} - -static inline void flush(void) -{ -	while (AMBA_UART_FR & (1 << 3)) -		barrier(); -} - -/* - * nothing to do - */ -#define arch_decomp_setup() -#define arch_decomp_wdog() diff --git a/arch/arm/mach-u300/include/mach/vmalloc.h b/arch/arm/mach-u300/include/mach/vmalloc.h deleted file mode 100644 index ec423b92b81..00000000000 --- a/arch/arm/mach-u300/include/mach/vmalloc.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * - * arch/arm/mach-u300/include/mach/vmalloc.h - * - * - * Copyright (C) 2006-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Virtual memory allocations - * End must be above the I/O registers and on an even 2MiB boundary. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#define VMALLOC_END	0xfe800000UL diff --git a/arch/arm/mach-u300/mmc.c b/arch/arm/mach-u300/mmc.c deleted file mode 100644 index de1ac9ad221..00000000000 --- a/arch/arm/mach-u300/mmc.c +++ /dev/null @@ -1,182 +0,0 @@ -/* - * - * arch/arm/mach-u300/mmc.c - * - * - * Copyright (C) 2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * - * Author: Linus Walleij <linus.walleij@stericsson.com> - * Author: Johan Lundin <johan.lundin@stericsson.com> - * Author: Jonas Aaberg <jonas.aberg@stericsson.com> - */ -#include <linux/device.h> -#include <linux/amba/bus.h> -#include <linux/mmc/host.h> -#include <linux/input.h> -#include <linux/workqueue.h> -#include <linux/delay.h> -#include <linux/regulator/consumer.h> -#include <linux/regulator/machine.h> -#include <linux/gpio.h> -#include <linux/amba/mmci.h> -#include <linux/slab.h> - -#include "mmc.h" -#include "padmux.h" - -struct mmci_card_event { -	struct input_dev *mmc_input; -	int mmc_inserted; -	struct work_struct workq; -	struct mmci_platform_data mmc0_plat_data; -}; - -static unsigned int mmc_status(struct device *dev) -{ -	struct mmci_card_event *mmci_card = container_of( -		dev->platform_data, -		struct mmci_card_event, mmc0_plat_data); - -	return mmci_card->mmc_inserted; -} - -static int mmci_callback(void *data) -{ -	struct mmci_card_event *mmci_card = data; - -	disable_irq_on_gpio_pin(U300_GPIO_PIN_MMC_CD); -	schedule_work(&mmci_card->workq); - -	return 0; -} - - -static ssize_t gpio_show(struct device *dev, struct device_attribute *attr, -		  char *buf) -{ -	struct mmci_card_event *mmci_card = container_of( -		dev->platform_data, -		struct mmci_card_event, mmc0_plat_data); - - -	return sprintf(buf, "%d\n", !mmci_card->mmc_inserted); -} - -static DEVICE_ATTR(mmc_inserted, S_IRUGO, gpio_show, NULL); - -static void _mmci_callback(struct work_struct *ws) -{ - -	struct mmci_card_event *mmci_card = container_of( -		ws, -		struct mmci_card_event, workq); - -	mdelay(20); - -	mmci_card->mmc_inserted = !gpio_get_value(U300_GPIO_PIN_MMC_CD); - -	input_report_switch(mmci_card->mmc_input, KEY_INSERT, -			    mmci_card->mmc_inserted); -	input_sync(mmci_card->mmc_input); - -	pr_debug("MMC/SD card was %s\n", -		 mmci_card->mmc_inserted ? "inserted" : "removed"); - -	enable_irq_on_gpio_pin(U300_GPIO_PIN_MMC_CD, mmci_card->mmc_inserted); -} - -int __devinit mmc_init(struct amba_device *adev) -{ -	struct mmci_card_event *mmci_card; -	struct device *mmcsd_device = &adev->dev; -	struct pmx *pmx; -	int ret = 0; - -	mmci_card = kzalloc(sizeof(struct mmci_card_event), GFP_KERNEL); -	if (!mmci_card) -		return -ENOMEM; - -	/* -	 * Do not set ocr_mask or voltage translation function, -	 * we have a regulator we can control instead. -	 */ -	/* Nominally 2.85V on our platform */ -	mmci_card->mmc0_plat_data.f_max = 24000000; -	mmci_card->mmc0_plat_data.status = mmc_status; -	mmci_card->mmc0_plat_data.gpio_wp = -1; -	mmci_card->mmc0_plat_data.gpio_cd = -1; -	mmci_card->mmc0_plat_data.capabilities = MMC_CAP_MMC_HIGHSPEED | -		MMC_CAP_SD_HIGHSPEED | MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA; - -	mmcsd_device->platform_data = (void *) &mmci_card->mmc0_plat_data; - -	INIT_WORK(&mmci_card->workq, _mmci_callback); - -	ret = gpio_request(U300_GPIO_PIN_MMC_CD, "MMC card detection"); -	if (ret) { -		printk(KERN_CRIT "Could not allocate MMC card detection " \ -		       "GPIO pin\n"); -		goto out; -	} - -	ret = gpio_direction_input(U300_GPIO_PIN_MMC_CD); -	if (ret) { -		printk(KERN_CRIT "Invalid GPIO pin requested\n"); -		goto out; -	} - -	ret = sysfs_create_file(&mmcsd_device->kobj, -			       &dev_attr_mmc_inserted.attr); -	if (ret) -		goto out; - -	mmci_card->mmc_input = input_allocate_device(); -	if (!mmci_card->mmc_input) { -		printk(KERN_CRIT "Could not allocate MMC input device\n"); -		return -ENOMEM; -	} - -	mmci_card->mmc_input->name = "MMC insert notification"; -	mmci_card->mmc_input->id.bustype = BUS_HOST; -	mmci_card->mmc_input->id.vendor = 0; -	mmci_card->mmc_input->id.product = 0; -	mmci_card->mmc_input->id.version = 0x0100; -	mmci_card->mmc_input->dev.parent = mmcsd_device; -	input_set_capability(mmci_card->mmc_input, EV_SW, KEY_INSERT); - -	/* -	 * Since this must always be compiled into the kernel, this input -	 * is never unregistered or free:ed. -	 */ -	ret = input_register_device(mmci_card->mmc_input); -	if (ret) { -		input_free_device(mmci_card->mmc_input); -		goto out; -	} - -	input_set_drvdata(mmci_card->mmc_input, mmci_card); - -	/* -	 * Setup padmuxing for MMC. Since this must always be -	 * compiled into the kernel, pmx is never released. -	 */ -	pmx = pmx_get(mmcsd_device, U300_APP_PMX_MMC_SETTING); - -	if (IS_ERR(pmx)) -		pr_warning("Could not get padmux handle\n"); -	else { -		ret = pmx_activate(mmcsd_device, pmx); -		if (IS_ERR_VALUE(ret)) -			pr_warning("Could not activate padmuxing\n"); -	} - -	ret = gpio_register_callback(U300_GPIO_PIN_MMC_CD, mmci_callback, -				     mmci_card); - -	schedule_work(&mmci_card->workq); - -	printk(KERN_INFO "Registered MMC insert/remove notification\n"); -out: -	return ret; -} diff --git a/arch/arm/mach-u300/mmc.h b/arch/arm/mach-u300/mmc.h deleted file mode 100644 index 92b85125abb..00000000000 --- a/arch/arm/mach-u300/mmc.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * arch/arm/mach-u300/mmc.h - * - * - * Copyright (C) 2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * - * Author: Jonas Aaberg <jonas.aberg@stericsson.com> - */ -#ifndef MMC_H -#define MMC_H - -#include <linux/amba/bus.h> - -int __devinit mmc_init(struct amba_device *adev); - -#endif diff --git a/arch/arm/mach-u300/padmux.c b/arch/arm/mach-u300/padmux.c deleted file mode 100644 index 4c93c6cefd3..00000000000 --- a/arch/arm/mach-u300/padmux.c +++ /dev/null @@ -1,367 +0,0 @@ -/* - * - * arch/arm/mach-u300/padmux.c - * - * - * Copyright (C) 2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * U300 PADMUX functions - * Author: Martin Persson <martin.persson@stericsson.com> - */ - -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/device.h> -#include <linux/err.h> -#include <linux/errno.h> -#include <linux/io.h> -#include <linux/mutex.h> -#include <linux/string.h> -#include <linux/bug.h> -#include <linux/debugfs.h> -#include <linux/seq_file.h> -#include <mach/u300-regs.h> -#include <mach/syscon.h> -#include "padmux.h" - -static DEFINE_MUTEX(pmx_mutex); - -const u32 pmx_registers[] = { -	(U300_SYSCON_VBASE + U300_SYSCON_PMC1LR), -	(U300_SYSCON_VBASE + U300_SYSCON_PMC1HR), -	(U300_SYSCON_VBASE + U300_SYSCON_PMC2R), -	(U300_SYSCON_VBASE + U300_SYSCON_PMC3R), -	(U300_SYSCON_VBASE + U300_SYSCON_PMC4R) -}; - -/* High level functionality */ - -/* Lazy dog: - * onmask = { - *   {"PMC1LR" mask, "PMC1LR" value}, - *   {"PMC1HR" mask, "PMC1HR" value}, - *   {"PMC2R"  mask, "PMC2R"  value}, - *   {"PMC3R"  mask, "PMC3R"  value}, - *   {"PMC4R"  mask, "PMC4R"  value} - * } - */ -static struct pmx mmc_setting = { -	.setting = U300_APP_PMX_MMC_SETTING, -	.default_on = false, -	.activated = false, -	.name = "MMC", -	.onmask = { -		   {U300_SYSCON_PMC1LR_MMCSD_MASK, -		    U300_SYSCON_PMC1LR_MMCSD_MMCSD}, -		   {0, 0}, -		   {0, 0}, -		   {0, 0}, -		   {U300_SYSCON_PMC4R_APP_MISC_12_MASK, -		    U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO} -		   }, -}; - -static struct pmx spi_setting = { -	.setting = U300_APP_PMX_SPI_SETTING, -	.default_on = false, -	.activated = false, -	.name = "SPI", -	.onmask = {{0, 0}, -		   {U300_SYSCON_PMC1HR_APP_SPI_2_MASK | -		    U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK | -		    U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK, -		    U300_SYSCON_PMC1HR_APP_SPI_2_SPI | -		    U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI | -		    U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI}, -		   {0, 0}, -		   {0, 0}, -		   {0, 0} -		   }, -}; - -/* Available padmux settings */ -static struct pmx *pmx_settings[] = { -	&mmc_setting, -	&spi_setting, -}; - -static void update_registers(struct pmx *pmx, bool activate) -{ -	u16 regval, val, mask; -	int i; - -	for (i = 0; i < ARRAY_SIZE(pmx_registers); i++) { -		if (activate) -			val = pmx->onmask[i].val; -		else -			val = 0; - -		mask = pmx->onmask[i].mask; -		if (mask != 0) { -			regval = readw(pmx_registers[i]); -			regval &= ~mask; -			regval |= val; -			writew(regval, pmx_registers[i]); -		} -	} -} - -struct pmx *pmx_get(struct device *dev, enum pmx_settings setting) -{ -	int i; -	struct pmx *pmx = ERR_PTR(-ENOENT); - -	if (dev == NULL) -		return ERR_PTR(-EINVAL); - -	mutex_lock(&pmx_mutex); -	for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) { - -		if (setting == pmx_settings[i]->setting) { - -			if (pmx_settings[i]->dev != NULL) { -				WARN(1, "padmux: required setting " -				     "in use by another consumer\n"); -			} else { -				pmx = pmx_settings[i]; -				pmx->dev = dev; -				dev_dbg(dev, "padmux: setting nr %d is now " -					"bound to %s and ready to use\n", -					setting, dev_name(dev)); -				break; -			} -		} -	} -	mutex_unlock(&pmx_mutex); - -	return pmx; -} -EXPORT_SYMBOL(pmx_get); - -int pmx_put(struct device *dev, struct pmx *pmx) -{ -	int i; -	int ret = -ENOENT; - -	if (pmx == NULL || dev == NULL) -		return -EINVAL; - -	mutex_lock(&pmx_mutex); -	for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) { - -		if (pmx->setting == pmx_settings[i]->setting) { - -			if (dev != pmx->dev) { -				WARN(1, "padmux: cannot release handle as " -					"it is bound to another consumer\n"); -				ret = -EINVAL; -				break; -			} else { -				pmx_settings[i]->dev = NULL; -				ret = 0; -				break; -			} -		} -	} -	mutex_unlock(&pmx_mutex); - -	return ret; -} -EXPORT_SYMBOL(pmx_put); - -int pmx_activate(struct device *dev, struct pmx *pmx) -{ -	int i, j, ret; -	ret = 0; - -	if (pmx == NULL || dev == NULL) -		return -EINVAL; - -	mutex_lock(&pmx_mutex); - -	/* Make sure the required bits are not used */ -	for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) { - -		if (pmx_settings[i]->dev == NULL || pmx_settings[i] == pmx) -			continue; - -		for (j = 0; j < ARRAY_SIZE(pmx_registers); j++) { - -			if (pmx_settings[i]->onmask[j].mask & pmx-> -				onmask[j].mask) { -				/* More than one entry on the same bits */ -				WARN(1, "padmux: cannot activate " -					"setting. Bit conflict with " -					"an active setting\n"); - -				ret = -EUSERS; -				goto exit; -			} -		} -	} -	update_registers(pmx, true); -	pmx->activated = true; -	dev_dbg(dev, "padmux: setting nr %d is activated\n", -		pmx->setting); - -exit: -	mutex_unlock(&pmx_mutex); -	return ret; -} -EXPORT_SYMBOL(pmx_activate); - -int pmx_deactivate(struct device *dev, struct pmx *pmx) -{ -	int i; -	int ret = -ENOENT; - -	if (pmx == NULL || dev == NULL) -		return -EINVAL; - -	mutex_lock(&pmx_mutex); -	for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) { - -		if (pmx_settings[i]->dev == NULL) -			continue; - -		if (pmx->setting == pmx_settings[i]->setting) { - -			if (dev != pmx->dev) { -				WARN(1, "padmux: cannot deactivate " -				     "pmx setting as it was activated " -				     "by another consumer\n"); - -				ret = -EBUSY; -				continue; -			} else { -				update_registers(pmx, false); -				pmx_settings[i]->dev = NULL; -				pmx->activated = false; -				ret = 0; -				dev_dbg(dev, "padmux: setting nr %d is deactivated", -					pmx->setting); -				break; -			} -		} -	} -	mutex_unlock(&pmx_mutex); - -	return ret; -} -EXPORT_SYMBOL(pmx_deactivate); - -/* - * For internal use only. If it is to be exported, - * it should be reentrant. Notice that pmx_activate - * (i.e. runtime settings) always override default settings. - */ -static int pmx_set_default(void) -{ -	/* Used to identify several entries on the same bits */ -	u16 modbits[ARRAY_SIZE(pmx_registers)]; - -	int i, j; - -	memset(modbits, 0, ARRAY_SIZE(pmx_registers) * sizeof(u16)); - -	for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) { - -		if (!pmx_settings[i]->default_on) -			continue; - -		for (j = 0; j < ARRAY_SIZE(pmx_registers); j++) { - -			/* Make sure there is only one entry on the same bits */ -			if (modbits[j] & pmx_settings[i]->onmask[j].mask) { -				BUG(); -				return -EUSERS; -			} -			modbits[j] |= pmx_settings[i]->onmask[j].mask; -		} -		update_registers(pmx_settings[i], true); -	} -	return 0; -} - -#if (defined(CONFIG_DEBUG_FS) && defined(CONFIG_U300_DEBUG)) -static int pmx_show(struct seq_file *s, void *data) -{ -	int i; -	seq_printf(s, "-------------------------------------------------\n"); -	seq_printf(s, "SETTING     BOUND TO DEVICE               STATE\n"); -	seq_printf(s, "-------------------------------------------------\n"); -	mutex_lock(&pmx_mutex); -	for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) { -		/* Format pmx and device name nicely */ -		char cdp[33]; -		int chars; - -		chars = snprintf(&cdp[0], 17, "%s", pmx_settings[i]->name); -		while (chars < 16) { -			cdp[chars] = ' '; -			chars++; -		} -		chars = snprintf(&cdp[16], 17, "%s", pmx_settings[i]->dev ? -				dev_name(pmx_settings[i]->dev) : "N/A"); -		while (chars < 16) { -			cdp[chars+16] = ' '; -			chars++; -		} -		cdp[32] = '\0'; - -		seq_printf(s, -			"%s\t%s\n", -			&cdp[0], -			pmx_settings[i]->activated ? -			"ACTIVATED" : "DEACTIVATED" -			); - -	} -	mutex_unlock(&pmx_mutex); -	return 0; -} - -static int pmx_open(struct inode *inode, struct file *file) -{ -	return single_open(file, pmx_show, NULL); -} - -static const struct file_operations pmx_operations = { -	.owner		= THIS_MODULE, -	.open		= pmx_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -}; - -static int __init init_pmx_read_debugfs(void) -{ -	/* Expose a simple debugfs interface to view pmx settings */ -	(void) debugfs_create_file("padmux", S_IFREG | S_IRUGO, -				   NULL, NULL, -				   &pmx_operations); -	return 0; -} - -/* - * This needs to come in after the core_initcall(), - * because debugfs is not available until - * the subsystems come up. - */ -module_init(init_pmx_read_debugfs); -#endif - -static int __init pmx_init(void) -{ -	int ret; - -	ret = pmx_set_default(); - -	if (IS_ERR_VALUE(ret)) -		pr_crit("padmux: default settings could not be set\n"); - -	return 0; -} - -/* Should be initialized before consumers */ -core_initcall(pmx_init); diff --git a/arch/arm/mach-u300/padmux.h b/arch/arm/mach-u300/padmux.h deleted file mode 100644 index 6e8b8606409..00000000000 --- a/arch/arm/mach-u300/padmux.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * - * arch/arm/mach-u300/padmux.h - * - * - * Copyright (C) 2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * U300 PADMUX API - * Author: Martin Persson <martin.persson@stericsson.com> - */ - -#ifndef __MACH_U300_PADMUX_H -#define __MACH_U300_PADMUX_H - -enum pmx_settings { -	U300_APP_PMX_MMC_SETTING, -	U300_APP_PMX_SPI_SETTING -}; - -struct pmx_onmask { -	u16 mask;		/* Mask bits */ -	u16 val;		/* Value when active */ -}; - -struct pmx { -	struct device *dev; -	enum pmx_settings setting; -	char *name; -	bool activated; -	bool default_on; -	struct pmx_onmask onmask[]; -}; - -struct pmx *pmx_get(struct device *dev, enum pmx_settings setting); -int pmx_put(struct device *dev, struct pmx *pmx); -int pmx_activate(struct device *dev, struct pmx *pmx); -int pmx_deactivate(struct device *dev, struct pmx *pmx); - -#endif diff --git a/arch/arm/mach-u300/regulator.c b/arch/arm/mach-u300/regulator.c index 9c53f01c62e..0493a845b6b 100644 --- a/arch/arm/mach-u300/regulator.c +++ b/arch/arm/mach-u300/regulator.c @@ -10,11 +10,18 @@  #include <linux/device.h>  #include <linux/signal.h>  #include <linux/err.h> +#include <linux/of.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/regulator/machine.h>  #include <linux/regulator/consumer.h> -/* Those are just for writing in syscon */ -#include <linux/io.h> -#include <mach/hardware.h> -#include <mach/syscon.h> +#include <linux/mfd/syscon.h> +#include <linux/regmap.h> + +/* Power Management Control 16bit (R/W) */ +#define U300_SYSCON_PMCR					(0x50) +#define U300_SYSCON_PMCR_DCON_ENABLE				(0x0002) +#define U300_SYSCON_PMCR_PWR_MGNT_ENABLE			(0x0001)  /*   * Regulators that power the board and chip and which are @@ -47,13 +54,28 @@ void u300_pm_poweroff(void)  /*   * Hog the regulators needed to power up the board.   */ -static int __init u300_init_boardpower(void) +static int __init __u300_init_boardpower(struct platform_device *pdev)  { +	struct device_node *np = pdev->dev.of_node; +	struct device_node *syscon_np; +	struct regmap *regmap;  	int err; -	u32 val;  	pr_info("U300: setting up board power\n"); -	main_power_15 = regulator_get(NULL, "vana15"); + +	syscon_np = of_parse_phandle(np, "syscon", 0); +	if (!syscon_np) { +		pr_crit("U300: no syscon node\n"); +		return -ENODEV; +	} +	regmap = syscon_node_to_regmap(syscon_np); +	if (IS_ERR(regmap)) { +		pr_crit("U300: could not locate syscon regmap\n"); +		return PTR_ERR(regmap); +	} + +	main_power_15 = regulator_get(&pdev->dev, "vana15"); +  	if (IS_ERR(main_power_15)) {  		pr_err("could not get vana15");  		return PTR_ERR(main_power_15); @@ -72,9 +94,8 @@ static int __init u300_init_boardpower(void)  	 * the rest of the U300 power management is implemented.  	 */  	pr_info("U300: disable system controller pull-up\n"); -	val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMCR); -	val &= ~U300_SYSCON_PMCR_DCON_ENABLE; -	writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMCR); +	regmap_update_bits(regmap, U300_SYSCON_PMCR, +			   U300_SYSCON_PMCR_DCON_ENABLE, 0);  	/* Register globally exported PM poweroff hook */  	pm_power_off = u300_pm_poweroff; @@ -82,7 +103,31 @@ static int __init u300_init_boardpower(void)  	return 0;  } +static int __init s365_board_probe(struct platform_device *pdev) +{ +	return __u300_init_boardpower(pdev); +} + +static const struct of_device_id s365_board_match[] = { +	{ .compatible = "stericsson,s365" }, +	{}, +}; + +static struct platform_driver s365_board_driver = { +	.driver		= { +		.name   = "s365-board", +		.owner  = THIS_MODULE, +		.of_match_table = s365_board_match, +	}, +}; +  /*   * So at module init time we hog the regulator!   */ -module_init(u300_init_boardpower); +static int __init u300_init_boardpower(void) +{ +	return platform_driver_probe(&s365_board_driver, +				     s365_board_probe); +} + +device_initcall(u300_init_boardpower); diff --git a/arch/arm/mach-u300/spi.c b/arch/arm/mach-u300/spi.c deleted file mode 100644 index 00869def542..00000000000 --- a/arch/arm/mach-u300/spi.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * arch/arm/mach-u300/spi.c - * - * Copyright (C) 2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#include <linux/device.h> -#include <linux/amba/bus.h> -#include <linux/spi/spi.h> -#include <linux/amba/pl022.h> -#include <linux/err.h> -#include "padmux.h" - -/* - * The following is for the actual devices on the SSP/SPI bus - */ -#ifdef CONFIG_MACH_U300_SPIDUMMY -static void select_dummy_chip(u32 chipselect) -{ -	pr_debug("CORE: %s called with CS=0x%x (%s)\n", -		 __func__, -		 chipselect, -		 chipselect ? "unselect chip" : "select chip"); -	/* -	 * Here you would write the chip select value to the GPIO pins if -	 * this was a real chip (but this is a loopback dummy). -	 */ -} - -struct pl022_config_chip dummy_chip_info = { -	/* -	 * available POLLING_TRANSFER and INTERRUPT_TRANSFER, -	 * DMA_TRANSFER does not work -	 */ -	.com_mode = INTERRUPT_TRANSFER, -	.iface = SSP_INTERFACE_MOTOROLA_SPI, -	/* We can only act as master but SSP_SLAVE is possible in theory */ -	.hierarchy = SSP_MASTER, -	/* 0 = drive TX even as slave, 1 = do not drive TX as slave */ -	.slave_tx_disable = 0, -	.rx_lev_trig = SSP_RX_1_OR_MORE_ELEM, -	.tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC, -	.ctrl_len = SSP_BITS_12, -	.wait_state = SSP_MWIRE_WAIT_ZERO, -	.duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX, -	/* -	 * This is where you insert a call to a function to enable CS -	 * (usually GPIO) for a certain chip. -	 */ -	.cs_control = select_dummy_chip, -}; -#endif - -static struct spi_board_info u300_spi_devices[] = { -#ifdef CONFIG_MACH_U300_SPIDUMMY -	{ -		/* A dummy chip used for loopback tests */ -		.modalias       = "spi-dummy", -		/* Really dummy, pass in additional chip config here */ -		.platform_data  = NULL, -		/* This defines how the controller shall handle the device */ -		.controller_data = &dummy_chip_info, -		/* .irq - no external IRQ routed from this device */ -		.max_speed_hz   = 1000000, -		.bus_num        = 0, /* Only one bus on this chip */ -		.chip_select    = 0, -		/* Means SPI_CS_HIGH, change if e.g low CS */ -		.mode           = SPI_MODE_1 | SPI_LOOP, -	}, -#endif -}; - -static struct pl022_ssp_controller ssp_platform_data = { -	/* If you have several SPI buses this varies, we have only bus 0 */ -	.bus_id = 0, -	/* Set this to 1 when we think we got DMA working */ -	.enable_dma = 0, -	/* -	 * On the APP CPU GPIO 4, 5 and 6 are connected as generic -	 * chip selects for SPI. (Same on U330, U335 and U365.) -	 * TODO: make sure the GPIO driver can select these properly -	 * and do padmuxing accordingly too. -	 */ -	.num_chipselect = 3, -}; - - -void __init u300_spi_init(struct amba_device *adev) -{ -	struct pmx *pmx; - -	adev->dev.platform_data = &ssp_platform_data; -	/* -	 * Setup padmuxing for SPI. Since this must always be -	 * compiled into the kernel, pmx is never released. -	 */ -	pmx = pmx_get(&adev->dev, U300_APP_PMX_SPI_SETTING); - -	if (IS_ERR(pmx)) -		dev_warn(&adev->dev, "Could not get padmux handle\n"); -	else { -		int ret; - -		ret = pmx_activate(&adev->dev, pmx); -		if (IS_ERR_VALUE(ret)) -			dev_warn(&adev->dev, "Could not activate padmuxing\n"); -	} - -} -void __init u300_spi_register_board_devices(void) -{ -	/* Register any SPI devices */ -	spi_register_board_info(u300_spi_devices, ARRAY_SIZE(u300_spi_devices)); -} diff --git a/arch/arm/mach-u300/spi.h b/arch/arm/mach-u300/spi.h deleted file mode 100644 index bd3d867e240..00000000000 --- a/arch/arm/mach-u300/spi.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * arch/arm/mach-u300/spi.h - * - * Copyright (C) 2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#ifndef SPI_H -#define SPI_H -#include <linux/amba/bus.h> - -#ifdef CONFIG_SPI_PL022 -void __init u300_spi_init(struct amba_device *adev); -void __init u300_spi_register_board_devices(void); -#else -/* Compile out SPI support if PL022 is not selected */ -static inline void __init u300_spi_init(struct amba_device *adev) -{ -} -static inline void __init u300_spi_register_board_devices(void) -{ -} -#endif - -#endif diff --git a/arch/arm/mach-u300/timer.c b/arch/arm/mach-u300/timer.c deleted file mode 100644 index 3fc4472719b..00000000000 --- a/arch/arm/mach-u300/timer.c +++ /dev/null @@ -1,443 +0,0 @@ -/* - * - * arch/arm/mach-u300/timer.c - * - * - * Copyright (C) 2007-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Timer COH 901 328, runs the OS timer interrupt. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#include <linux/interrupt.h> -#include <linux/time.h> -#include <linux/timex.h> -#include <linux/clockchips.h> -#include <linux/clocksource.h> -#include <linux/types.h> -#include <linux/io.h> -#include <linux/clk.h> -#include <linux/err.h> - -#include <mach/hardware.h> - -/* Generic stuff */ -#include <asm/mach/map.h> -#include <asm/mach/time.h> -#include <asm/mach/irq.h> - -/* Be able to sleep for atleast 4 seconds (usually more) */ -#define APPTIMER_MIN_RANGE 4 - -/* - * APP side special timer registers - * This timer contains four timers which can fire an interrupt each. - * OS (operating system) timer @ 32768 Hz - * DD (device driver) timer @ 1 kHz - * GP1 (general purpose 1) timer @ 1MHz - * GP2 (general purpose 2) timer @ 1MHz - */ - -/* Reset OS Timer 32bit (-/W) */ -#define U300_TIMER_APP_ROST					(0x0000) -#define U300_TIMER_APP_ROST_TIMER_RESET				(0x00000000) -/* Enable OS Timer 32bit (-/W) */ -#define U300_TIMER_APP_EOST					(0x0004) -#define U300_TIMER_APP_EOST_TIMER_ENABLE			(0x00000000) -/* Disable OS Timer 32bit (-/W) */ -#define U300_TIMER_APP_DOST					(0x0008) -#define U300_TIMER_APP_DOST_TIMER_DISABLE			(0x00000000) -/* OS Timer Mode Register 32bit (-/W) */ -#define U300_TIMER_APP_SOSTM					(0x000c) -#define U300_TIMER_APP_SOSTM_MODE_CONTINUOUS			(0x00000000) -#define U300_TIMER_APP_SOSTM_MODE_ONE_SHOT			(0x00000001) -/* OS Timer Status Register 32bit (R/-) */ -#define U300_TIMER_APP_OSTS					(0x0010) -#define U300_TIMER_APP_OSTS_TIMER_STATE_MASK			(0x0000000F) -#define U300_TIMER_APP_OSTS_TIMER_STATE_IDLE			(0x00000001) -#define U300_TIMER_APP_OSTS_TIMER_STATE_ACTIVE			(0x00000002) -#define U300_TIMER_APP_OSTS_ENABLE_IND				(0x00000010) -#define U300_TIMER_APP_OSTS_MODE_MASK				(0x00000020) -#define U300_TIMER_APP_OSTS_MODE_CONTINUOUS			(0x00000000) -#define U300_TIMER_APP_OSTS_MODE_ONE_SHOT			(0x00000020) -#define U300_TIMER_APP_OSTS_IRQ_ENABLED_IND			(0x00000040) -#define U300_TIMER_APP_OSTS_IRQ_PENDING_IND			(0x00000080) -/* OS Timer Current Count Register 32bit (R/-) */ -#define U300_TIMER_APP_OSTCC					(0x0014) -/* OS Timer Terminal Count Register 32bit (R/W) */ -#define U300_TIMER_APP_OSTTC					(0x0018) -/* OS Timer Interrupt Enable Register 32bit (-/W) */ -#define U300_TIMER_APP_OSTIE					(0x001c) -#define U300_TIMER_APP_OSTIE_IRQ_DISABLE			(0x00000000) -#define U300_TIMER_APP_OSTIE_IRQ_ENABLE				(0x00000001) -/* OS Timer Interrupt Acknowledge Register 32bit (-/W) */ -#define U300_TIMER_APP_OSTIA					(0x0020) -#define U300_TIMER_APP_OSTIA_IRQ_ACK				(0x00000080) - -/* Reset DD Timer 32bit (-/W) */ -#define U300_TIMER_APP_RDDT					(0x0040) -#define U300_TIMER_APP_RDDT_TIMER_RESET				(0x00000000) -/* Enable DD Timer 32bit (-/W) */ -#define U300_TIMER_APP_EDDT					(0x0044) -#define U300_TIMER_APP_EDDT_TIMER_ENABLE			(0x00000000) -/* Disable DD Timer 32bit (-/W) */ -#define U300_TIMER_APP_DDDT					(0x0048) -#define U300_TIMER_APP_DDDT_TIMER_DISABLE			(0x00000000) -/* DD Timer Mode Register 32bit (-/W) */ -#define U300_TIMER_APP_SDDTM					(0x004c) -#define U300_TIMER_APP_SDDTM_MODE_CONTINUOUS			(0x00000000) -#define U300_TIMER_APP_SDDTM_MODE_ONE_SHOT			(0x00000001) -/* DD Timer Status Register 32bit (R/-) */ -#define U300_TIMER_APP_DDTS					(0x0050) -#define U300_TIMER_APP_DDTS_TIMER_STATE_MASK			(0x0000000F) -#define U300_TIMER_APP_DDTS_TIMER_STATE_IDLE			(0x00000001) -#define U300_TIMER_APP_DDTS_TIMER_STATE_ACTIVE			(0x00000002) -#define U300_TIMER_APP_DDTS_ENABLE_IND				(0x00000010) -#define U300_TIMER_APP_DDTS_MODE_MASK				(0x00000020) -#define U300_TIMER_APP_DDTS_MODE_CONTINUOUS			(0x00000000) -#define U300_TIMER_APP_DDTS_MODE_ONE_SHOT			(0x00000020) -#define U300_TIMER_APP_DDTS_IRQ_ENABLED_IND			(0x00000040) -#define U300_TIMER_APP_DDTS_IRQ_PENDING_IND			(0x00000080) -/* DD Timer Current Count Register 32bit (R/-) */ -#define U300_TIMER_APP_DDTCC					(0x0054) -/* DD Timer Terminal Count Register 32bit (R/W) */ -#define U300_TIMER_APP_DDTTC					(0x0058) -/* DD Timer Interrupt Enable Register 32bit (-/W) */ -#define U300_TIMER_APP_DDTIE					(0x005c) -#define U300_TIMER_APP_DDTIE_IRQ_DISABLE			(0x00000000) -#define U300_TIMER_APP_DDTIE_IRQ_ENABLE				(0x00000001) -/* DD Timer Interrupt Acknowledge Register 32bit (-/W) */ -#define U300_TIMER_APP_DDTIA					(0x0060) -#define U300_TIMER_APP_DDTIA_IRQ_ACK				(0x00000080) - -/* Reset GP1 Timer 32bit (-/W) */ -#define U300_TIMER_APP_RGPT1					(0x0080) -#define U300_TIMER_APP_RGPT1_TIMER_RESET			(0x00000000) -/* Enable GP1 Timer 32bit (-/W) */ -#define U300_TIMER_APP_EGPT1					(0x0084) -#define U300_TIMER_APP_EGPT1_TIMER_ENABLE			(0x00000000) -/* Disable GP1 Timer 32bit (-/W) */ -#define U300_TIMER_APP_DGPT1					(0x0088) -#define U300_TIMER_APP_DGPT1_TIMER_DISABLE			(0x00000000) -/* GP1 Timer Mode Register 32bit (-/W) */ -#define U300_TIMER_APP_SGPT1M					(0x008c) -#define U300_TIMER_APP_SGPT1M_MODE_CONTINUOUS			(0x00000000) -#define U300_TIMER_APP_SGPT1M_MODE_ONE_SHOT			(0x00000001) -/* GP1 Timer Status Register 32bit (R/-) */ -#define U300_TIMER_APP_GPT1S					(0x0090) -#define U300_TIMER_APP_GPT1S_TIMER_STATE_MASK			(0x0000000F) -#define U300_TIMER_APP_GPT1S_TIMER_STATE_IDLE			(0x00000001) -#define U300_TIMER_APP_GPT1S_TIMER_STATE_ACTIVE			(0x00000002) -#define U300_TIMER_APP_GPT1S_ENABLE_IND				(0x00000010) -#define U300_TIMER_APP_GPT1S_MODE_MASK				(0x00000020) -#define U300_TIMER_APP_GPT1S_MODE_CONTINUOUS			(0x00000000) -#define U300_TIMER_APP_GPT1S_MODE_ONE_SHOT			(0x00000020) -#define U300_TIMER_APP_GPT1S_IRQ_ENABLED_IND			(0x00000040) -#define U300_TIMER_APP_GPT1S_IRQ_PENDING_IND			(0x00000080) -/* GP1 Timer Current Count Register 32bit (R/-) */ -#define U300_TIMER_APP_GPT1CC					(0x0094) -/* GP1 Timer Terminal Count Register 32bit (R/W) */ -#define U300_TIMER_APP_GPT1TC					(0x0098) -/* GP1 Timer Interrupt Enable Register 32bit (-/W) */ -#define U300_TIMER_APP_GPT1IE					(0x009c) -#define U300_TIMER_APP_GPT1IE_IRQ_DISABLE			(0x00000000) -#define U300_TIMER_APP_GPT1IE_IRQ_ENABLE			(0x00000001) -/* GP1 Timer Interrupt Acknowledge Register 32bit (-/W) */ -#define U300_TIMER_APP_GPT1IA					(0x00a0) -#define U300_TIMER_APP_GPT1IA_IRQ_ACK				(0x00000080) - -/* Reset GP2 Timer 32bit (-/W) */ -#define U300_TIMER_APP_RGPT2					(0x00c0) -#define U300_TIMER_APP_RGPT2_TIMER_RESET			(0x00000000) -/* Enable GP2 Timer 32bit (-/W) */ -#define U300_TIMER_APP_EGPT2					(0x00c4) -#define U300_TIMER_APP_EGPT2_TIMER_ENABLE			(0x00000000) -/* Disable GP2 Timer 32bit (-/W) */ -#define U300_TIMER_APP_DGPT2					(0x00c8) -#define U300_TIMER_APP_DGPT2_TIMER_DISABLE			(0x00000000) -/* GP2 Timer Mode Register 32bit (-/W) */ -#define U300_TIMER_APP_SGPT2M					(0x00cc) -#define U300_TIMER_APP_SGPT2M_MODE_CONTINUOUS			(0x00000000) -#define U300_TIMER_APP_SGPT2M_MODE_ONE_SHOT			(0x00000001) -/* GP2 Timer Status Register 32bit (R/-) */ -#define U300_TIMER_APP_GPT2S					(0x00d0) -#define U300_TIMER_APP_GPT2S_TIMER_STATE_MASK			(0x0000000F) -#define U300_TIMER_APP_GPT2S_TIMER_STATE_IDLE			(0x00000001) -#define U300_TIMER_APP_GPT2S_TIMER_STATE_ACTIVE			(0x00000002) -#define U300_TIMER_APP_GPT2S_ENABLE_IND				(0x00000010) -#define U300_TIMER_APP_GPT2S_MODE_MASK				(0x00000020) -#define U300_TIMER_APP_GPT2S_MODE_CONTINUOUS			(0x00000000) -#define U300_TIMER_APP_GPT2S_MODE_ONE_SHOT			(0x00000020) -#define U300_TIMER_APP_GPT2S_IRQ_ENABLED_IND			(0x00000040) -#define U300_TIMER_APP_GPT2S_IRQ_PENDING_IND			(0x00000080) -/* GP2 Timer Current Count Register 32bit (R/-) */ -#define U300_TIMER_APP_GPT2CC					(0x00d4) -/* GP2 Timer Terminal Count Register 32bit (R/W) */ -#define U300_TIMER_APP_GPT2TC					(0x00d8) -/* GP2 Timer Interrupt Enable Register 32bit (-/W) */ -#define U300_TIMER_APP_GPT2IE					(0x00dc) -#define U300_TIMER_APP_GPT2IE_IRQ_DISABLE			(0x00000000) -#define U300_TIMER_APP_GPT2IE_IRQ_ENABLE			(0x00000001) -/* GP2 Timer Interrupt Acknowledge Register 32bit (-/W) */ -#define U300_TIMER_APP_GPT2IA					(0x00e0) -#define U300_TIMER_APP_GPT2IA_IRQ_ACK				(0x00000080) - -/* Clock request control register - all four timers */ -#define U300_TIMER_APP_CRC					(0x100) -#define U300_TIMER_APP_CRC_CLOCK_REQUEST_ENABLE			(0x00000001) - -#define TICKS_PER_JIFFY ((CLOCK_TICK_RATE + (HZ/2)) / HZ) -#define US_PER_TICK ((1000000 + (HZ/2)) / HZ) - -/* - * The u300_set_mode() function is always called first, if we - * have oneshot timer active, the oneshot scheduling function - * u300_set_next_event() is called immediately after. - */ -static void u300_set_mode(enum clock_event_mode mode, -			  struct clock_event_device *evt) -{ -	switch (mode) { -	case CLOCK_EVT_MODE_PERIODIC: -		/* Disable interrupts on GPT1 */ -		writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE); -		/* Disable GP1 while we're reprogramming it. */ -		writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_DGPT1); -		/* -		 * Set the periodic mode to a certain number of ticks per -		 * jiffy. -		 */ -		writel(TICKS_PER_JIFFY, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1TC); -		/* -		 * Set continuous mode, so the timer keeps triggering -		 * interrupts. -		 */ -		writel(U300_TIMER_APP_SGPT1M_MODE_CONTINUOUS, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_SGPT1M); -		/* Enable timer interrupts */ -		writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE); -		/* Then enable the OS timer again */ -		writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_EGPT1); -		break; -	case CLOCK_EVT_MODE_ONESHOT: -		/* Just break; here? */ -		/* -		 * The actual event will be programmed by the next event hook, -		 * so we just set a dummy value somewhere at the end of the -		 * universe here. -		 */ -		/* Disable interrupts on GPT1 */ -		writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE); -		/* Disable GP1 while we're reprogramming it. */ -		writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_DGPT1); -		/* -		 * Expire far in the future, u300_set_next_event() will be -		 * called soon... -		 */ -		writel(0xFFFFFFFF, U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1TC); -		/* We run one shot per tick here! */ -		writel(U300_TIMER_APP_SGPT1M_MODE_ONE_SHOT, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_SGPT1M); -		/* Enable interrupts for this timer */ -		writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE); -		/* Enable timer */ -		writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_EGPT1); -		break; -	case CLOCK_EVT_MODE_UNUSED: -	case CLOCK_EVT_MODE_SHUTDOWN: -		/* Disable interrupts on GP1 */ -		writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE); -		/* Disable GP1 */ -		writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE, -		       U300_TIMER_APP_VBASE + U300_TIMER_APP_DGPT1); -		break; -	case CLOCK_EVT_MODE_RESUME: -		/* Ignore this call */ -		break; -	} -} - -/* - * The app timer in one shot mode obviously has to be reprogrammed - * in EXACTLY this sequence to work properly. Do NOT try to e.g. replace - * the interrupt disable + timer disable commands with a reset command, - * it will fail miserably. Apparently (and I found this the hard way) - * the timer is very sensitive to the instruction order, though you don't - * get that impression from the data sheet. - */ -static int u300_set_next_event(unsigned long cycles, -			       struct clock_event_device *evt) - -{ -	/* Disable interrupts on GPT1 */ -	writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE, -	       U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE); -	/* Disable GP1 while we're reprogramming it. */ -	writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE, -	       U300_TIMER_APP_VBASE + U300_TIMER_APP_DGPT1); -	/* Reset the General Purpose timer 1. */ -	writel(U300_TIMER_APP_RGPT1_TIMER_RESET, -	       U300_TIMER_APP_VBASE + U300_TIMER_APP_RGPT1); -	/* IRQ in n * cycles */ -	writel(cycles, U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1TC); -	/* -	 * We run one shot per tick here! (This is necessary to reconfigure, -	 * the timer will tilt if you don't!) -	 */ -	writel(U300_TIMER_APP_SGPT1M_MODE_ONE_SHOT, -	       U300_TIMER_APP_VBASE + U300_TIMER_APP_SGPT1M); -	/* Enable timer interrupts */ -	writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE, -	       U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE); -	/* Then enable the OS timer again */ -	writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE, -	       U300_TIMER_APP_VBASE + U300_TIMER_APP_EGPT1); -	return 0; -} - - -/* Use general purpose timer 1 as clock event */ -static struct clock_event_device clockevent_u300_1mhz = { -	.name           = "GPT1", -	.rating         = 300, /* Reasonably fast and accurate clock event */ -	.features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, -	.set_next_event = u300_set_next_event, -	.set_mode       = u300_set_mode, -}; - -/* Clock event timer interrupt handler */ -static irqreturn_t u300_timer_interrupt(int irq, void *dev_id) -{ -	struct clock_event_device *evt = &clockevent_u300_1mhz; -	/* ACK/Clear timer IRQ for the APP GPT1 Timer */ -	writel(U300_TIMER_APP_GPT1IA_IRQ_ACK, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IA); -	evt->event_handler(evt); -	return IRQ_HANDLED; -} - -static struct irqaction u300_timer_irq = { -	.name           = "U300 Timer Tick", -	.flags          = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, -	.handler        = u300_timer_interrupt, -}; - -/* Use general purpose timer 2 as clock source */ -static cycle_t u300_get_cycles(struct clocksource *cs) -{ -	return (cycles_t) readl(U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT2CC); -} - -static struct clocksource clocksource_u300_1mhz = { -	.name           = "GPT2", -	.rating         = 300, /* Reasonably fast and accurate clock source */ -	.read           = u300_get_cycles, -	.mask           = CLOCKSOURCE_MASK(32), /* 32 bits */ -	.flags          = CLOCK_SOURCE_IS_CONTINUOUS, -}; - -/* - * Override the global weak sched_clock symbol with this - * local implementation which uses the clocksource to get some - * better resolution when scheduling the kernel. We accept that - * this wraps around for now, since it is just a relative time - * stamp. (Inspired by OMAP implementation.) - */ -unsigned long long notrace sched_clock(void) -{ -	return clocksource_cyc2ns(clocksource_u300_1mhz.read( -				  &clocksource_u300_1mhz), -				  clocksource_u300_1mhz.mult, -				  clocksource_u300_1mhz.shift); -} - - -/* - * This sets up the system timers, clock source and clock event. - */ -static void __init u300_timer_init(void) -{ -	struct clk *clk; -	unsigned long rate; - -	/* Clock the interrupt controller */ -	clk = clk_get_sys("apptimer", NULL); -	BUG_ON(IS_ERR(clk)); -	clk_enable(clk); -	rate = clk_get_rate(clk); - -	/* -	 * Disable the "OS" and "DD" timers - these are designed for Symbian! -	 * Example usage in cnh1601578 cpu subsystem pd_timer_app.c -	 */ -	writel(U300_TIMER_APP_CRC_CLOCK_REQUEST_ENABLE, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_CRC); -	writel(U300_TIMER_APP_ROST_TIMER_RESET, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_ROST); -	writel(U300_TIMER_APP_DOST_TIMER_DISABLE, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_DOST); -	writel(U300_TIMER_APP_RDDT_TIMER_RESET, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_RDDT); -	writel(U300_TIMER_APP_DDDT_TIMER_DISABLE, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_DDDT); - -	/* Reset the General Purpose timer 1. */ -	writel(U300_TIMER_APP_RGPT1_TIMER_RESET, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_RGPT1); - -	/* Set up the IRQ handler */ -	setup_irq(IRQ_U300_TIMER_APP_GP1, &u300_timer_irq); - -	/* Reset the General Purpose timer 2 */ -	writel(U300_TIMER_APP_RGPT2_TIMER_RESET, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_RGPT2); -	/* Set this timer to run around forever */ -	writel(0xFFFFFFFFU, U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT2TC); -	/* Set continuous mode so it wraps around */ -	writel(U300_TIMER_APP_SGPT2M_MODE_CONTINUOUS, -	       U300_TIMER_APP_VBASE + U300_TIMER_APP_SGPT2M); -	/* Disable timer interrupts */ -	writel(U300_TIMER_APP_GPT2IE_IRQ_DISABLE, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT2IE); -	/* Then enable the GP2 timer to use as a free running us counter */ -	writel(U300_TIMER_APP_EGPT2_TIMER_ENABLE, -		U300_TIMER_APP_VBASE + U300_TIMER_APP_EGPT2); - -	clocksource_calc_mult_shift(&clocksource_u300_1mhz, -				    rate, APPTIMER_MIN_RANGE); -	if (clocksource_register(&clocksource_u300_1mhz)) -		printk(KERN_ERR "timer: failed to initialize clock " -		       "source %s\n", clocksource_u300_1mhz.name); - -	clockevents_calc_mult_shift(&clockevent_u300_1mhz, -				    rate, APPTIMER_MIN_RANGE); -	/* 32bit counter, so 32bits delta is max */ -	clockevent_u300_1mhz.max_delta_ns = -		clockevent_delta2ns(0xffffffff, &clockevent_u300_1mhz); -	/* This timer is slow enough to set for 1 cycle == 1 MHz */ -	clockevent_u300_1mhz.min_delta_ns = -		clockevent_delta2ns(1, &clockevent_u300_1mhz); -	clockevent_u300_1mhz.cpumask = cpumask_of(0); -	clockevents_register_device(&clockevent_u300_1mhz); -	/* -	 * TODO: init and register the rest of the timers too, they can be -	 * used by hrtimers! -	 */ -} - -/* - * Very simple system timer that only register the clock event and - * clock source. - */ -struct sys_timer u300_timer = { -	.init		= u300_timer_init, -}; diff --git a/arch/arm/mach-u300/u300.c b/arch/arm/mach-u300/u300.c deleted file mode 100644 index 07c35a84642..00000000000 --- a/arch/arm/mach-u300/u300.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * - * arch/arm/mach-u300/u300.c - * - * - * Copyright (C) 2006-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * Platform machine definition. - * Author: Linus Walleij <linus.walleij@stericsson.com> - */ -#include <linux/kernel.h> -#include <linux/init.h> -#include <linux/mm.h> -#include <linux/sched.h> -#include <linux/interrupt.h> -#include <linux/ioport.h> -#include <linux/memblock.h> -#include <linux/platform_device.h> -#include <linux/io.h> -#include <mach/hardware.h> -#include <mach/platform.h> -#include <mach/memory.h> -#include <asm/mach-types.h> -#include <asm/mach/arch.h> - -static void __init u300_reserve(void) -{ -	/* -	 * U300 - This platform family can share physical memory -	 * between two ARM cpus, one running Linux and the other -	 * running another OS. -	 */ -#ifdef CONFIG_MACH_U300_SINGLE_RAM -#if ((CONFIG_MACH_U300_ACCESS_MEM_SIZE & 1) == 1) && \ -	CONFIG_MACH_U300_2MB_ALIGNMENT_FIX -        memblock_reserve(PHYS_OFFSET, 0x00100000); -#endif -#endif -} - -static void __init u300_init_machine(void) -{ -	u300_init_devices(); -} - -#ifdef CONFIG_MACH_U300_BS2X -#define MACH_U300_STRING "Ericsson AB U300 S25/S26/B25/B26 Prototype Board" -#endif - -#ifdef CONFIG_MACH_U300_BS330 -#define MACH_U300_STRING "Ericsson AB U330 S330/B330 Prototype Board" -#endif - -#ifdef CONFIG_MACH_U300_BS335 -#define MACH_U300_STRING "Ericsson AB U335 S335/B335 Prototype Board" -#endif - -#ifdef CONFIG_MACH_U300_BS365 -#define MACH_U300_STRING "Ericsson AB U365 S365/B365 Prototype Board" -#endif - -MACHINE_START(U300, MACH_U300_STRING) -	/* Maintainer: Linus Walleij <linus.walleij@stericsson.com> */ -	.boot_params	= BOOT_PARAMS_OFFSET, -	.map_io		= u300_map_io, -	.reserve	= u300_reserve, -	.init_irq	= u300_init_irq, -	.timer		= &u300_timer, -	.init_machine	= u300_init_machine, -MACHINE_END  | 
