Linux Audio

Check our new training course

Loading...
v4.17
  1/*
  2 *
  3 * arch/arm/mach-u300/core.c
  4 *
  5 *
  6 * Copyright (C) 2007-2012 ST-Ericsson SA
  7 * License terms: GNU General Public License (GPL) version 2
  8 * Core platform support, IRQ handling and device definitions.
  9 * Author: Linus Walleij <linus.walleij@stericsson.com>
 10 */
 11#include <linux/kernel.h>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 12#include <linux/pinctrl/machine.h>
 
 13#include <linux/pinctrl/pinconf-generic.h>
 14#include <linux/platform_data/clk-u300.h>
 15#include <linux/irqchip.h>
 16#include <linux/of_address.h>
 17#include <linux/of_platform.h>
 18#include <linux/clocksource.h>
 19#include <linux/clk.h>
 20
 
 
 
 
 21#include <asm/mach/map.h>
 22#include <asm/mach/arch.h>
 
 
 
 
 
 
 
 
 
 
 
 23
 24/*
 25 * These are the large blocks of memory allocated for I/O.
 26 * the defines are used for setting up the I/O memory mapping.
 
 
 27 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 28
 29/* NAND Flash CS0 */
 30#define U300_NAND_CS0_PHYS_BASE		0x80000000
 31/* NFIF */
 32#define U300_NAND_IF_PHYS_BASE		0x9f800000
 33/* ALE, CLE offset for FSMC NAND */
 34#define PLAT_NAND_CLE			(1 << 16)
 35#define PLAT_NAND_ALE			(1 << 17)
 36/* AHB Peripherals */
 37#define U300_AHB_PER_PHYS_BASE		0xa0000000
 38#define U300_AHB_PER_VIRT_BASE		0xff010000
 39/* FAST Peripherals */
 40#define U300_FAST_PER_PHYS_BASE		0xc0000000
 41#define U300_FAST_PER_VIRT_BASE		0xff020000
 42/* SLOW Peripherals */
 43#define U300_SLOW_PER_PHYS_BASE		0xc0010000
 44#define U300_SLOW_PER_VIRT_BASE		0xff000000
 45/* Boot ROM */
 46#define U300_BOOTROM_PHYS_BASE		0xffff0000
 47#define U300_BOOTROM_VIRT_BASE		0xffff0000
 48/* SEMI config base */
 49#define U300_SEMI_CONFIG_BASE		0x2FFE0000
 50
 51/*
 52 * AHB peripherals
 
 53 */
 54
 55/* AHB Peripherals Bridge Controller */
 56#define U300_AHB_BRIDGE_BASE		(U300_AHB_PER_PHYS_BASE+0x0000)
 57/* Vectored Interrupt Controller 0, servicing 32 interrupts */
 58#define U300_INTCON0_BASE		(U300_AHB_PER_PHYS_BASE+0x1000)
 59#define U300_INTCON0_VBASE		IOMEM(U300_AHB_PER_VIRT_BASE+0x1000)
 60/* Vectored Interrupt Controller 1, servicing 32 interrupts */
 61#define U300_INTCON1_BASE		(U300_AHB_PER_PHYS_BASE+0x2000)
 62#define U300_INTCON1_VBASE		IOMEM(U300_AHB_PER_VIRT_BASE+0x2000)
 63/* Memory Stick Pro (MSPRO) controller */
 64#define U300_MSPRO_BASE			(U300_AHB_PER_PHYS_BASE+0x3000)
 65/* EMIF Configuration Area */
 66#define U300_EMIF_CFG_BASE		(U300_AHB_PER_PHYS_BASE+0x4000)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 67
 68/*
 69 * FAST peripherals
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 70 */
 71
 72/* FAST bridge control */
 73#define U300_FAST_BRIDGE_BASE		(U300_FAST_PER_PHYS_BASE+0x0000)
 74/* MMC/SD controller */
 75#define U300_MMCSD_BASE			(U300_FAST_PER_PHYS_BASE+0x1000)
 76/* PCM I2S0 controller */
 77#define U300_PCM_I2S0_BASE		(U300_FAST_PER_PHYS_BASE+0x2000)
 78/* PCM I2S1 controller */
 79#define U300_PCM_I2S1_BASE		(U300_FAST_PER_PHYS_BASE+0x3000)
 80/* I2C0 controller */
 81#define U300_I2C0_BASE			(U300_FAST_PER_PHYS_BASE+0x4000)
 82/* I2C1 controller */
 83#define U300_I2C1_BASE			(U300_FAST_PER_PHYS_BASE+0x5000)
 84/* SPI controller */
 85#define U300_SPI_BASE			(U300_FAST_PER_PHYS_BASE+0x6000)
 86/* Fast UART1 on U335 only */
 87#define U300_UART1_BASE			(U300_FAST_PER_PHYS_BASE+0x7000)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 88
 89/*
 90 * SLOW peripherals
 
 91 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 92
 93/* SLOW bridge control */
 94#define U300_SLOW_BRIDGE_BASE		(U300_SLOW_PER_PHYS_BASE)
 95/* SYSCON */
 96#define U300_SYSCON_BASE		(U300_SLOW_PER_PHYS_BASE+0x1000)
 97#define U300_SYSCON_VBASE		IOMEM(U300_SLOW_PER_VIRT_BASE+0x1000)
 98/* Watchdog */
 99#define U300_WDOG_BASE			(U300_SLOW_PER_PHYS_BASE+0x2000)
100/* UART0 */
101#define U300_UART0_BASE			(U300_SLOW_PER_PHYS_BASE+0x3000)
102/* APP side special timer */
103#define U300_TIMER_APP_BASE		(U300_SLOW_PER_PHYS_BASE+0x4000)
104#define U300_TIMER_APP_VBASE		IOMEM(U300_SLOW_PER_VIRT_BASE+0x4000)
105/* Keypad */
106#define U300_KEYPAD_BASE		(U300_SLOW_PER_PHYS_BASE+0x5000)
107/* GPIO */
108#define U300_GPIO_BASE			(U300_SLOW_PER_PHYS_BASE+0x6000)
109/* RTC */
110#define U300_RTC_BASE			(U300_SLOW_PER_PHYS_BASE+0x7000)
111/* Bus tracer */
112#define U300_BUSTR_BASE			(U300_SLOW_PER_PHYS_BASE+0x8000)
113/* Event handler (hardware queue) */
114#define U300_EVHIST_BASE		(U300_SLOW_PER_PHYS_BASE+0x9000)
115/* Genric Timer */
116#define U300_TIMER_BASE			(U300_SLOW_PER_PHYS_BASE+0xa000)
117/* PPM */
118#define U300_PPM_BASE			(U300_SLOW_PER_PHYS_BASE+0xb000)
119
120/*
121 * REST peripherals
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122 */
 
 
 
 
 
 
 
 
 
 
 
 
 
123
124/* ISP (image signal processor) */
125#define U300_ISP_BASE			(0xA0008000)
126/* DMA Controller base */
127#define U300_DMAC_BASE			(0xC0020000)
128/* MSL Base */
129#define U300_MSL_BASE			(0xc0022000)
130/* APEX Base */
131#define U300_APEX_BASE			(0xc0030000)
132/* Video Encoder Base */
133#define U300_VIDEOENC_BASE		(0xc0080000)
134/* XGAM Base */
135#define U300_XGAM_BASE			(0xd0000000)
136
137/*
138 * SYSCON addresses applicable to the core machine.
 
 
139 */
 
 
 
140
141/* Chip ID register 16bit (R/-) */
142#define U300_SYSCON_CIDR					(0x400)
143/* SMCR */
144#define U300_SYSCON_SMCR					(0x4d0)
145#define U300_SYSCON_SMCR_FIELD_MASK				(0x000e)
146#define U300_SYSCON_SMCR_SEMI_SREFACK_IND			(0x0008)
147#define U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE			(0x0004)
148#define U300_SYSCON_SMCR_SEMI_EXT_BOOT_MODE_ENABLE		(0x0002)
149/* CPU_SW_DBGEN Software Debug Enable 16bit (R/W) */
150#define U300_SYSCON_CSDR					(0x4f0)
151#define U300_SYSCON_CSDR_SW_DEBUG_ENABLE			(0x0001)
152/* PRINT_CONTROL Print Control 16bit (R/-) */
153#define U300_SYSCON_PCR						(0x4f8)
154#define U300_SYSCON_PCR_SERV_IND				(0x0001)
155/* BOOT_CONTROL 16bit (R/-) */
156#define U300_SYSCON_BCR						(0x4fc)
157#define U300_SYSCON_BCR_ACC_CPU_SUBSYS_VINITHI_IND		(0x0400)
158#define U300_SYSCON_BCR_APP_CPU_SUBSYS_VINITHI_IND		(0x0200)
159#define U300_SYSCON_BCR_EXTRA_BOOT_OPTION_MASK			(0x01FC)
160#define U300_SYSCON_BCR_APP_BOOT_SERV_MASK			(0x0003)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
162static void __iomem *syscon_base;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
164/*
165 * Static I/O mappings that are needed for booting the U300 platforms. The
166 * only things we need are the areas where we find the timer, syscon and
167 * intcon, since the remaining device drivers will map their own memory
168 * physical to virtual as the need arise.
169 */
170static struct map_desc u300_io_desc[] __initdata = {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171	{
172		.virtual	= U300_SLOW_PER_VIRT_BASE,
173		.pfn		= __phys_to_pfn(U300_SLOW_PER_PHYS_BASE),
174		.length		= SZ_64K,
175		.type		= MT_DEVICE,
176	},
177	{
178		.virtual	= U300_AHB_PER_VIRT_BASE,
179		.pfn		= __phys_to_pfn(U300_AHB_PER_PHYS_BASE),
180		.length		= SZ_32K,
181		.type		= MT_DEVICE,
182	},
183	{
184		.virtual	= U300_FAST_PER_VIRT_BASE,
185		.pfn		= __phys_to_pfn(U300_FAST_PER_PHYS_BASE),
186		.length		= SZ_32K,
187		.type		= MT_DEVICE,
188	},
189};
190
191static void __init u300_map_io(void)
192{
193	iotable_init(u300_io_desc, ARRAY_SIZE(u300_io_desc));
194}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
196static unsigned long pin_pullup_conf[] = {
197	PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 1),
198};
199
200static unsigned long pin_highz_conf[] = {
201	PIN_CONF_PACKED(PIN_CONFIG_BIAS_HIGH_IMPEDANCE, 0),
202};
203
204/* Pin control settings */
205static struct pinctrl_map __initdata u300_pinmux_map[] = {
206	/* anonymous maps for chip power and EMIFs */
207	PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "power"),
208	PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif0"),
209	PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif1"),
210	/* per-device maps for MMC/SD, SPI and UART */
211	PIN_MAP_MUX_GROUP_DEFAULT("mmci",  "pinctrl-u300", NULL, "mmc0"),
212	PIN_MAP_MUX_GROUP_DEFAULT("pl022", "pinctrl-u300", NULL, "spi0"),
213	PIN_MAP_MUX_GROUP_DEFAULT("uart0", "pinctrl-u300", NULL, "uart0"),
214	/* This pin is used for clock return rather than GPIO */
215	PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO APP GPIO 11",
216				    pin_pullup_conf),
217	/* This pin is used for card detect */
218	PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO MS INS",
219				    pin_highz_conf),
220};
221
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222struct db_chip {
223	u16 chipid;
224	const char *name;
225};
226
227/*
228 * This is a list of the Digital Baseband chips used in the U300 platform.
229 */
230static struct db_chip db_chips[] __initdata = {
231	{
232		.chipid = 0xb800,
233		.name = "DB3000",
234	},
235	{
236		.chipid = 0xc000,
237		.name = "DB3100",
238	},
239	{
240		.chipid = 0xc800,
241		.name = "DB3150",
242	},
243	{
244		.chipid = 0xd800,
245		.name = "DB3200",
246	},
247	{
248		.chipid = 0xe000,
249		.name = "DB3250",
250	},
251	{
252		.chipid = 0xe800,
253		.name = "DB3210",
254	},
255	{
256		.chipid = 0xf000,
257		.name = "DB3350 P1x",
258	},
259	{
260		.chipid = 0xf100,
261		.name = "DB3350 P2x",
262	},
263	{
264		.chipid = 0x0000, /* List terminator */
265		.name = NULL,
266	}
267};
268
269static void __init u300_init_check_chip(void)
270{
271
272	u16 val;
273	struct db_chip *chip;
274	const char *chipname;
275	const char unknown[] = "UNKNOWN";
276
277	/* Read out and print chip ID */
278	val = readw(syscon_base + U300_SYSCON_CIDR);
279	/* This is in funky bigendian order... */
280	val = (val & 0xFFU) << 8 | (val >> 8);
281	chip = db_chips;
282	chipname = unknown;
283
284	for ( ; chip->chipid; chip++) {
285		if (chip->chipid == (val & 0xFF00U)) {
286			chipname = chip->name;
287			break;
288		}
289	}
290	printk(KERN_INFO "Initializing U300 system on %s baseband chip " \
291	       "(chip ID 0x%04x)\n", chipname, val);
292
 
 
 
 
 
 
 
 
293	if ((val & 0xFF00U) != 0xf000 && (val & 0xFF00U) != 0xf100) {
294		printk(KERN_ERR "Platform configured for BS335 " \
295		       " with DB3350 but %s detected, expect problems!",
296		       chipname);
297	}
298}
299
300/* Forward declare this function from the watchdog */
301void coh901327_watchdog_reset(void);
302
303static void u300_restart(enum reboot_mode mode, const char *cmd)
304{
305	switch (mode) {
306	case REBOOT_SOFT:
307	case REBOOT_HARD:
308#ifdef CONFIG_COH901327_WATCHDOG
309		coh901327_watchdog_reset();
310#endif
311		break;
312	default:
313		/* Do nothing */
314		break;
 
315	}
316	/* Wait for system do die/reset. */
317	while (1);
318}
319
320/* These are mostly to get the right device names for the clock lookups */
321static struct of_dev_auxdata u300_auxdata_lookup[] __initdata = {
322	OF_DEV_AUXDATA("stericsson,pinctrl-u300", U300_SYSCON_BASE,
323		"pinctrl-u300", NULL),
324	OF_DEV_AUXDATA("stericsson,gpio-coh901", U300_GPIO_BASE,
325		"u300-gpio", NULL),
326	OF_DEV_AUXDATA("stericsson,coh901327", U300_WDOG_BASE,
327		"coh901327_wdog", NULL),
328	OF_DEV_AUXDATA("stericsson,coh901331", U300_RTC_BASE,
329		"rtc-coh901331", NULL),
330	OF_DEV_AUXDATA("stericsson,coh901318", U300_DMAC_BASE,
331		"coh901318", NULL),
332	OF_DEV_AUXDATA("stericsson,fsmc-nand", U300_NAND_IF_PHYS_BASE,
333		"fsmc-nand", NULL),
334	OF_DEV_AUXDATA("arm,primecell", U300_UART0_BASE,
335		"uart0", NULL),
336	OF_DEV_AUXDATA("arm,primecell", U300_UART1_BASE,
337		"uart1", NULL),
338	OF_DEV_AUXDATA("arm,primecell", U300_SPI_BASE,
339		"pl022", NULL),
340	OF_DEV_AUXDATA("st,ddci2c", U300_I2C0_BASE,
341		"stu300.0", NULL),
342	OF_DEV_AUXDATA("st,ddci2c", U300_I2C1_BASE,
343		"stu300.1", NULL),
344	OF_DEV_AUXDATA("arm,primecell", U300_MMCSD_BASE,
345		"mmci", NULL),
346	{ /* sentinel */ },
347};
348
349static void __init u300_init_irq_dt(void)
 
 
 
 
 
 
 
350{
351	struct device_node *syscon;
352	struct clk *clk;
353
354	syscon = of_find_node_by_path("/syscon@c0011000");
355	if (!syscon) {
356		pr_crit("could not find syscon node\n");
357		return;
358	}
359	syscon_base = of_iomap(syscon, 0);
360	if (!syscon_base) {
361		pr_crit("could not remap syscon\n");
362		return;
 
 
 
 
 
 
 
 
363	}
364	/* initialize clocking early, we want to clock the INTCON */
365	u300_clk_init(syscon_base);
366
367	/* Bootstrap EMIF and SEMI clocks */
368	clk = clk_get_sys("pl172", NULL);
369	BUG_ON(IS_ERR(clk));
370	clk_prepare_enable(clk);
371	clk = clk_get_sys("semi", NULL);
372	BUG_ON(IS_ERR(clk));
373	clk_prepare_enable(clk);
374
375	/* Clock the interrupt controller */
376	clk = clk_get_sys("intcon", NULL);
377	BUG_ON(IS_ERR(clk));
378	clk_prepare_enable(clk);
379
380	irqchip_init();
381}
382
383static void __init u300_init_machine_dt(void)
384{
 
385	u16 val;
386
387	/* Check what platform we run and print some status information */
388	u300_init_check_chip();
389
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
390	/* Initialize pinmuxing */
391	pinctrl_register_mappings(u300_pinmux_map,
392				  ARRAY_SIZE(u300_pinmux_map));
393
394	of_platform_default_populate(NULL, u300_auxdata_lookup, NULL);
 
 
 
 
 
 
 
395
396	/* Enable SEMI self refresh */
397	val = readw(syscon_base + U300_SYSCON_SMCR) |
398		U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE;
399	writew(val, syscon_base + U300_SYSCON_SMCR);
400}
401
402static const char * u300_board_compat[] = {
403	"stericsson,u300",
404	NULL,
405};
406
407DT_MACHINE_START(U300_DT, "U300 S335/B335 (Device Tree)")
408	.map_io		= u300_map_io,
409	.init_irq	= u300_init_irq_dt,
410	.init_time	= timer_probe,
411	.init_machine	= u300_init_machine_dt,
412	.restart	= u300_restart,
413	.dt_compat      = u300_board_compat,
414MACHINE_END
 
 
 
 
 
 
 
 
v3.5.6
   1/*
   2 *
   3 * arch/arm/mach-u300/core.c
   4 *
   5 *
   6 * Copyright (C) 2007-2010 ST-Ericsson SA
   7 * License terms: GNU General Public License (GPL) version 2
   8 * Core platform support, IRQ handling and device definitions.
   9 * Author: Linus Walleij <linus.walleij@stericsson.com>
  10 */
  11#include <linux/kernel.h>
  12#include <linux/init.h>
  13#include <linux/spinlock.h>
  14#include <linux/interrupt.h>
  15#include <linux/bitops.h>
  16#include <linux/device.h>
  17#include <linux/mm.h>
  18#include <linux/termios.h>
  19#include <linux/dmaengine.h>
  20#include <linux/amba/bus.h>
  21#include <linux/amba/mmci.h>
  22#include <linux/amba/serial.h>
  23#include <linux/platform_device.h>
  24#include <linux/gpio.h>
  25#include <linux/clk.h>
  26#include <linux/err.h>
  27#include <linux/mtd/nand.h>
  28#include <linux/mtd/fsmc.h>
  29#include <linux/pinctrl/machine.h>
  30#include <linux/pinctrl/consumer.h>
  31#include <linux/pinctrl/pinconf-generic.h>
  32#include <linux/dma-mapping.h>
 
 
 
 
 
  33
  34#include <asm/types.h>
  35#include <asm/setup.h>
  36#include <asm/memory.h>
  37#include <asm/hardware/vic.h>
  38#include <asm/mach/map.h>
  39#include <asm/mach/irq.h>
  40
  41#include <mach/coh901318.h>
  42#include <mach/hardware.h>
  43#include <mach/syscon.h>
  44#include <mach/dma_channels.h>
  45#include <mach/gpio-u300.h>
  46
  47#include "clock.h"
  48#include "spi.h"
  49#include "i2c.h"
  50#include "u300-gpio.h"
  51
  52/*
  53 * Static I/O mappings that are needed for booting the U300 platforms. The
  54 * only things we need are the areas where we find the timer, syscon and
  55 * intcon, since the remaining device drivers will map their own memory
  56 * physical to virtual as the need arise.
  57 */
  58static struct map_desc u300_io_desc[] __initdata = {
  59	{
  60		.virtual	= U300_SLOW_PER_VIRT_BASE,
  61		.pfn		= __phys_to_pfn(U300_SLOW_PER_PHYS_BASE),
  62		.length		= SZ_64K,
  63		.type		= MT_DEVICE,
  64	},
  65	{
  66		.virtual	= U300_AHB_PER_VIRT_BASE,
  67		.pfn		= __phys_to_pfn(U300_AHB_PER_PHYS_BASE),
  68		.length		= SZ_32K,
  69		.type		= MT_DEVICE,
  70	},
  71	{
  72		.virtual	= U300_FAST_PER_VIRT_BASE,
  73		.pfn		= __phys_to_pfn(U300_FAST_PER_PHYS_BASE),
  74		.length		= SZ_32K,
  75		.type		= MT_DEVICE,
  76	},
  77};
  78
  79void __init u300_map_io(void)
  80{
  81	iotable_init(u300_io_desc, ARRAY_SIZE(u300_io_desc));
  82	/* We enable a real big DMA buffer if need be. */
  83	init_consistent_dma_size(SZ_4M);
  84}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  85
  86/*
  87 * Declaration of devices found on the U300 board and
  88 * their respective memory locations.
  89 */
  90
  91static struct amba_pl011_data uart0_plat_data = {
  92#ifdef CONFIG_COH901318
  93	.dma_filter = coh901318_filter_id,
  94	.dma_rx_param = (void *) U300_DMA_UART0_RX,
  95	.dma_tx_param = (void *) U300_DMA_UART0_TX,
  96#endif
  97};
  98
  99/* Slow device at 0x3000 offset */
 100static AMBA_APB_DEVICE(uart0, "uart0", 0, U300_UART0_BASE,
 101	{ IRQ_U300_UART0 }, &uart0_plat_data);
 102
 103/* The U335 have an additional UART1 on the APP CPU */
 104#ifdef CONFIG_MACH_U300_BS335
 105static struct amba_pl011_data uart1_plat_data = {
 106#ifdef CONFIG_COH901318
 107	.dma_filter = coh901318_filter_id,
 108	.dma_rx_param = (void *) U300_DMA_UART1_RX,
 109	.dma_tx_param = (void *) U300_DMA_UART1_TX,
 110#endif
 111};
 112
 113/* Fast device at 0x7000 offset */
 114static AMBA_APB_DEVICE(uart1, "uart1", 0, U300_UART1_BASE,
 115	{ IRQ_U300_UART1 }, &uart1_plat_data);
 116#endif
 117
 118/* AHB device at 0x4000 offset */
 119static AMBA_APB_DEVICE(pl172, "pl172", 0, U300_EMIF_CFG_BASE, { }, NULL);
 120
 121/* Fast device at 0x6000 offset */
 122static AMBA_APB_DEVICE(pl022, "pl022", 0, U300_SPI_BASE,
 123	{ IRQ_U300_SPI }, NULL);
 124
 125/* Fast device at 0x1000 offset */
 126#define U300_MMCSD_IRQS	{ IRQ_U300_MMCSD_MCIINTR0, IRQ_U300_MMCSD_MCIINTR1 }
 127
 128static struct mmci_platform_data mmcsd_platform_data = {
 129	/*
 130	 * Do not set ocr_mask or voltage translation function,
 131	 * we have a regulator we can control instead.
 132	 */
 133	.f_max = 24000000,
 134	.gpio_wp = -1,
 135	.gpio_cd = U300_GPIO_PIN_MMC_CD,
 136	.cd_invert = true,
 137	.capabilities = MMC_CAP_MMC_HIGHSPEED |
 138	MMC_CAP_SD_HIGHSPEED | MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
 139#ifdef CONFIG_COH901318
 140	.dma_filter = coh901318_filter_id,
 141	.dma_rx_param = (void *) U300_DMA_MMCSD_RX_TX,
 142	/* Don't specify a TX channel, this RX channel is bidirectional */
 143#endif
 144};
 145
 146static AMBA_APB_DEVICE(mmcsd, "mmci", 0, U300_MMCSD_BASE,
 147	U300_MMCSD_IRQS, &mmcsd_platform_data);
 148
 149/*
 150 * The order of device declaration may be important, since some devices
 151 * have dependencies on other devices being initialized first.
 152 */
 153static struct amba_device *amba_devs[] __initdata = {
 154	&uart0_device,
 155#ifdef CONFIG_MACH_U300_BS335
 156	&uart1_device,
 157#endif
 158	&pl022_device,
 159	&pl172_device,
 160	&mmcsd_device,
 161};
 162
 163/* Here follows a list of all hw resources that the platform devices
 164 * allocate. Note, clock dependencies are not included
 165 */
 166
 167static struct resource gpio_resources[] = {
 168	{
 169		.start = U300_GPIO_BASE,
 170		.end   = (U300_GPIO_BASE + SZ_4K - 1),
 171		.flags = IORESOURCE_MEM,
 172	},
 173	{
 174		.name  = "gpio0",
 175		.start = IRQ_U300_GPIO_PORT0,
 176		.end   = IRQ_U300_GPIO_PORT0,
 177		.flags = IORESOURCE_IRQ,
 178	},
 179	{
 180		.name  = "gpio1",
 181		.start = IRQ_U300_GPIO_PORT1,
 182		.end   = IRQ_U300_GPIO_PORT1,
 183		.flags = IORESOURCE_IRQ,
 184	},
 185	{
 186		.name  = "gpio2",
 187		.start = IRQ_U300_GPIO_PORT2,
 188		.end   = IRQ_U300_GPIO_PORT2,
 189		.flags = IORESOURCE_IRQ,
 190	},
 191#if defined(CONFIG_MACH_U300_BS365) || defined(CONFIG_MACH_U300_BS335)
 192	{
 193		.name  = "gpio3",
 194		.start = IRQ_U300_GPIO_PORT3,
 195		.end   = IRQ_U300_GPIO_PORT3,
 196		.flags = IORESOURCE_IRQ,
 197	},
 198	{
 199		.name  = "gpio4",
 200		.start = IRQ_U300_GPIO_PORT4,
 201		.end   = IRQ_U300_GPIO_PORT4,
 202		.flags = IORESOURCE_IRQ,
 203	},
 204#endif
 205#ifdef CONFIG_MACH_U300_BS335
 206	{
 207		.name  = "gpio5",
 208		.start = IRQ_U300_GPIO_PORT5,
 209		.end   = IRQ_U300_GPIO_PORT5,
 210		.flags = IORESOURCE_IRQ,
 211	},
 212	{
 213		.name  = "gpio6",
 214		.start = IRQ_U300_GPIO_PORT6,
 215		.end   = IRQ_U300_GPIO_PORT6,
 216		.flags = IORESOURCE_IRQ,
 217	},
 218#endif /* CONFIG_MACH_U300_BS335 */
 219};
 220
 221static struct resource keypad_resources[] = {
 222	{
 223		.start = U300_KEYPAD_BASE,
 224		.end   = U300_KEYPAD_BASE + SZ_4K - 1,
 225		.flags = IORESOURCE_MEM,
 226	},
 227	{
 228		.name  = "coh901461-press",
 229		.start = IRQ_U300_KEYPAD_KEYBF,
 230		.end   = IRQ_U300_KEYPAD_KEYBF,
 231		.flags = IORESOURCE_IRQ,
 232	},
 233	{
 234		.name  = "coh901461-release",
 235		.start = IRQ_U300_KEYPAD_KEYBR,
 236		.end   = IRQ_U300_KEYPAD_KEYBR,
 237		.flags = IORESOURCE_IRQ,
 238	},
 239};
 240
 241static struct resource rtc_resources[] = {
 242	{
 243		.start = U300_RTC_BASE,
 244		.end   = U300_RTC_BASE + SZ_4K - 1,
 245		.flags = IORESOURCE_MEM,
 246	},
 247	{
 248		.start = IRQ_U300_RTC,
 249		.end   = IRQ_U300_RTC,
 250		.flags = IORESOURCE_IRQ,
 251	},
 252};
 253
 254/*
 255 * Fsmc does have IRQs: #43 and #44 (NFIF and NFIF2)
 256 * but these are not yet used by the driver.
 257 */
 258static struct resource fsmc_resources[] = {
 259	{
 260		.name  = "nand_data",
 261		.start = U300_NAND_CS0_PHYS_BASE,
 262		.end   = U300_NAND_CS0_PHYS_BASE + SZ_16K - 1,
 263		.flags = IORESOURCE_MEM,
 264	},
 265	{
 266		.name  = "fsmc_regs",
 267		.start = U300_NAND_IF_PHYS_BASE,
 268		.end   = U300_NAND_IF_PHYS_BASE + SZ_4K - 1,
 269		.flags = IORESOURCE_MEM,
 270	},
 271};
 272
 273static struct resource i2c0_resources[] = {
 274	{
 275		.start = U300_I2C0_BASE,
 276		.end   = U300_I2C0_BASE + SZ_4K - 1,
 277		.flags = IORESOURCE_MEM,
 278	},
 279	{
 280		.start = IRQ_U300_I2C0,
 281		.end   = IRQ_U300_I2C0,
 282		.flags = IORESOURCE_IRQ,
 283	},
 284};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 285
 286static struct resource i2c1_resources[] = {
 287	{
 288		.start = U300_I2C1_BASE,
 289		.end   = U300_I2C1_BASE + SZ_4K - 1,
 290		.flags = IORESOURCE_MEM,
 291	},
 292	{
 293		.start = IRQ_U300_I2C1,
 294		.end   = IRQ_U300_I2C1,
 295		.flags = IORESOURCE_IRQ,
 296	},
 297
 298};
 299
 300static struct resource wdog_resources[] = {
 301	{
 302		.start = U300_WDOG_BASE,
 303		.end   = U300_WDOG_BASE + SZ_4K - 1,
 304		.flags = IORESOURCE_MEM,
 305	},
 306	{
 307		.start = IRQ_U300_WDOG,
 308		.end   = IRQ_U300_WDOG,
 309		.flags = IORESOURCE_IRQ,
 310	}
 311};
 312
 313static struct resource dma_resource[] = {
 314	{
 315		.start = U300_DMAC_BASE,
 316		.end = U300_DMAC_BASE + PAGE_SIZE - 1,
 317		.flags =  IORESOURCE_MEM,
 318	},
 319	{
 320		.start = IRQ_U300_DMA,
 321		.end = IRQ_U300_DMA,
 322		.flags =  IORESOURCE_IRQ,
 323	}
 324};
 325
 326#ifdef CONFIG_MACH_U300_BS335
 327/* points out all dma slave channels.
 328 * Syntax is [A1, B1, A2, B2, .... ,-1,-1]
 329 * Select all channels from A to B, end of list is marked with -1,-1
 330 */
 331static int dma_slave_channels[] = {
 332	U300_DMA_MSL_TX_0, U300_DMA_SPI_RX,
 333	U300_DMA_UART1_TX, U300_DMA_UART1_RX, -1, -1};
 334
 335/* points out all dma memcpy channels. */
 336static int dma_memcpy_channels[] = {
 337	U300_DMA_GENERAL_PURPOSE_0, U300_DMA_GENERAL_PURPOSE_8, -1, -1};
 338
 339#else /* CONFIG_MACH_U300_BS335 */
 340
 341static int dma_slave_channels[] = {U300_DMA_MSL_TX_0, U300_DMA_SPI_RX, -1, -1};
 342static int dma_memcpy_channels[] = {
 343	U300_DMA_GENERAL_PURPOSE_0, U300_DMA_GENERAL_PURPOSE_10, -1, -1};
 344
 345#endif
 
 
 
 
 
 
 
 
 
 
 
 346
 347/** register dma for memory access
 348 *
 349 * active  1 means dma intends to access memory
 350 *         0 means dma wont access memory
 351 */
 352static void coh901318_access_memory_state(struct device *dev, bool active)
 353{
 354}
 355
 356#define flags_memcpy_config (COH901318_CX_CFG_CH_DISABLE | \
 357			COH901318_CX_CFG_RM_MEMORY_TO_MEMORY | \
 358			COH901318_CX_CFG_LCR_DISABLE | \
 359			COH901318_CX_CFG_TC_IRQ_ENABLE | \
 360			COH901318_CX_CFG_BE_IRQ_ENABLE)
 361#define flags_memcpy_lli_chained (COH901318_CX_CTRL_TC_ENABLE | \
 362			COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \
 363			COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \
 364			COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \
 365			COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \
 366			COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \
 367			COH901318_CX_CTRL_MASTER_MODE_M1RW | \
 368			COH901318_CX_CTRL_TCP_DISABLE | \
 369			COH901318_CX_CTRL_TC_IRQ_DISABLE | \
 370			COH901318_CX_CTRL_HSP_DISABLE | \
 371			COH901318_CX_CTRL_HSS_DISABLE | \
 372			COH901318_CX_CTRL_DDMA_LEGACY | \
 373			COH901318_CX_CTRL_PRDD_SOURCE)
 374#define flags_memcpy_lli (COH901318_CX_CTRL_TC_ENABLE | \
 375			COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \
 376			COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \
 377			COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \
 378			COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \
 379			COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \
 380			COH901318_CX_CTRL_MASTER_MODE_M1RW | \
 381			COH901318_CX_CTRL_TCP_DISABLE | \
 382			COH901318_CX_CTRL_TC_IRQ_DISABLE | \
 383			COH901318_CX_CTRL_HSP_DISABLE | \
 384			COH901318_CX_CTRL_HSS_DISABLE | \
 385			COH901318_CX_CTRL_DDMA_LEGACY | \
 386			COH901318_CX_CTRL_PRDD_SOURCE)
 387#define flags_memcpy_lli_last (COH901318_CX_CTRL_TC_ENABLE | \
 388			COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \
 389			COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \
 390			COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \
 391			COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \
 392			COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \
 393			COH901318_CX_CTRL_MASTER_MODE_M1RW | \
 394			COH901318_CX_CTRL_TCP_DISABLE | \
 395			COH901318_CX_CTRL_TC_IRQ_ENABLE | \
 396			COH901318_CX_CTRL_HSP_DISABLE | \
 397			COH901318_CX_CTRL_HSS_DISABLE | \
 398			COH901318_CX_CTRL_DDMA_LEGACY | \
 399			COH901318_CX_CTRL_PRDD_SOURCE)
 400
 401const struct coh_dma_channel chan_config[U300_DMA_CHANNELS] = {
 402	{
 403		.number = U300_DMA_MSL_TX_0,
 404		.name = "MSL TX 0",
 405		.priority_high = 0,
 406		.dev_addr = U300_MSL_BASE + 0 * 0x40 + 0x20,
 407	},
 408	{
 409		.number = U300_DMA_MSL_TX_1,
 410		.name = "MSL TX 1",
 411		.priority_high = 0,
 412		.dev_addr = U300_MSL_BASE + 1 * 0x40 + 0x20,
 413		.param.config = COH901318_CX_CFG_CH_DISABLE |
 414				COH901318_CX_CFG_LCR_DISABLE |
 415				COH901318_CX_CFG_TC_IRQ_ENABLE |
 416				COH901318_CX_CFG_BE_IRQ_ENABLE,
 417		.param.ctrl_lli_chained = 0 |
 418				COH901318_CX_CTRL_TC_ENABLE |
 419				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 420				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 421				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 422				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 423				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 424				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 425				COH901318_CX_CTRL_TCP_DISABLE |
 426				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 427				COH901318_CX_CTRL_HSP_ENABLE |
 428				COH901318_CX_CTRL_HSS_DISABLE |
 429				COH901318_CX_CTRL_DDMA_LEGACY |
 430				COH901318_CX_CTRL_PRDD_SOURCE,
 431		.param.ctrl_lli = 0 |
 432				COH901318_CX_CTRL_TC_ENABLE |
 433				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 434				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 435				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 436				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 437				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 438				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 439				COH901318_CX_CTRL_TCP_ENABLE |
 440				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 441				COH901318_CX_CTRL_HSP_ENABLE |
 442				COH901318_CX_CTRL_HSS_DISABLE |
 443				COH901318_CX_CTRL_DDMA_LEGACY |
 444				COH901318_CX_CTRL_PRDD_SOURCE,
 445		.param.ctrl_lli_last = 0 |
 446				COH901318_CX_CTRL_TC_ENABLE |
 447				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 448				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 449				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 450				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 451				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 452				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 453				COH901318_CX_CTRL_TCP_ENABLE |
 454				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 455				COH901318_CX_CTRL_HSP_ENABLE |
 456				COH901318_CX_CTRL_HSS_DISABLE |
 457				COH901318_CX_CTRL_DDMA_LEGACY |
 458				COH901318_CX_CTRL_PRDD_SOURCE,
 459	},
 460	{
 461		.number = U300_DMA_MSL_TX_2,
 462		.name = "MSL TX 2",
 463		.priority_high = 0,
 464		.dev_addr = U300_MSL_BASE + 2 * 0x40 + 0x20,
 465		.param.config = COH901318_CX_CFG_CH_DISABLE |
 466				COH901318_CX_CFG_LCR_DISABLE |
 467				COH901318_CX_CFG_TC_IRQ_ENABLE |
 468				COH901318_CX_CFG_BE_IRQ_ENABLE,
 469		.param.ctrl_lli_chained = 0 |
 470				COH901318_CX_CTRL_TC_ENABLE |
 471				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 472				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 473				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 474				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 475				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 476				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 477				COH901318_CX_CTRL_TCP_DISABLE |
 478				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 479				COH901318_CX_CTRL_HSP_ENABLE |
 480				COH901318_CX_CTRL_HSS_DISABLE |
 481				COH901318_CX_CTRL_DDMA_LEGACY |
 482				COH901318_CX_CTRL_PRDD_SOURCE,
 483		.param.ctrl_lli = 0 |
 484				COH901318_CX_CTRL_TC_ENABLE |
 485				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 486				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 487				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 488				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 489				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 490				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 491				COH901318_CX_CTRL_TCP_ENABLE |
 492				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 493				COH901318_CX_CTRL_HSP_ENABLE |
 494				COH901318_CX_CTRL_HSS_DISABLE |
 495				COH901318_CX_CTRL_DDMA_LEGACY |
 496				COH901318_CX_CTRL_PRDD_SOURCE,
 497		.param.ctrl_lli_last = 0 |
 498				COH901318_CX_CTRL_TC_ENABLE |
 499				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 500				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 501				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 502				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 503				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 504				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 505				COH901318_CX_CTRL_TCP_ENABLE |
 506				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 507				COH901318_CX_CTRL_HSP_ENABLE |
 508				COH901318_CX_CTRL_HSS_DISABLE |
 509				COH901318_CX_CTRL_DDMA_LEGACY |
 510				COH901318_CX_CTRL_PRDD_SOURCE,
 511		.desc_nbr_max = 10,
 512	},
 513	{
 514		.number = U300_DMA_MSL_TX_3,
 515		.name = "MSL TX 3",
 516		.priority_high = 0,
 517		.dev_addr = U300_MSL_BASE + 3 * 0x40 + 0x20,
 518		.param.config = COH901318_CX_CFG_CH_DISABLE |
 519				COH901318_CX_CFG_LCR_DISABLE |
 520				COH901318_CX_CFG_TC_IRQ_ENABLE |
 521				COH901318_CX_CFG_BE_IRQ_ENABLE,
 522		.param.ctrl_lli_chained = 0 |
 523				COH901318_CX_CTRL_TC_ENABLE |
 524				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 525				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 526				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 527				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 528				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 529				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 530				COH901318_CX_CTRL_TCP_DISABLE |
 531				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 532				COH901318_CX_CTRL_HSP_ENABLE |
 533				COH901318_CX_CTRL_HSS_DISABLE |
 534				COH901318_CX_CTRL_DDMA_LEGACY |
 535				COH901318_CX_CTRL_PRDD_SOURCE,
 536		.param.ctrl_lli = 0 |
 537				COH901318_CX_CTRL_TC_ENABLE |
 538				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 539				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 540				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 541				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 542				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 543				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 544				COH901318_CX_CTRL_TCP_ENABLE |
 545				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 546				COH901318_CX_CTRL_HSP_ENABLE |
 547				COH901318_CX_CTRL_HSS_DISABLE |
 548				COH901318_CX_CTRL_DDMA_LEGACY |
 549				COH901318_CX_CTRL_PRDD_SOURCE,
 550		.param.ctrl_lli_last = 0 |
 551				COH901318_CX_CTRL_TC_ENABLE |
 552				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 553				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 554				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 555				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 556				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 557				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 558				COH901318_CX_CTRL_TCP_ENABLE |
 559				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 560				COH901318_CX_CTRL_HSP_ENABLE |
 561				COH901318_CX_CTRL_HSS_DISABLE |
 562				COH901318_CX_CTRL_DDMA_LEGACY |
 563				COH901318_CX_CTRL_PRDD_SOURCE,
 564	},
 565	{
 566		.number = U300_DMA_MSL_TX_4,
 567		.name = "MSL TX 4",
 568		.priority_high = 0,
 569		.dev_addr = U300_MSL_BASE + 4 * 0x40 + 0x20,
 570		.param.config = COH901318_CX_CFG_CH_DISABLE |
 571				COH901318_CX_CFG_LCR_DISABLE |
 572				COH901318_CX_CFG_TC_IRQ_ENABLE |
 573				COH901318_CX_CFG_BE_IRQ_ENABLE,
 574		.param.ctrl_lli_chained = 0 |
 575				COH901318_CX_CTRL_TC_ENABLE |
 576				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 577				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 578				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 579				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 580				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 581				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 582				COH901318_CX_CTRL_TCP_DISABLE |
 583				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 584				COH901318_CX_CTRL_HSP_ENABLE |
 585				COH901318_CX_CTRL_HSS_DISABLE |
 586				COH901318_CX_CTRL_DDMA_LEGACY |
 587				COH901318_CX_CTRL_PRDD_SOURCE,
 588		.param.ctrl_lli = 0 |
 589				COH901318_CX_CTRL_TC_ENABLE |
 590				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 591				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 592				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 593				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 594				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 595				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 596				COH901318_CX_CTRL_TCP_ENABLE |
 597				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 598				COH901318_CX_CTRL_HSP_ENABLE |
 599				COH901318_CX_CTRL_HSS_DISABLE |
 600				COH901318_CX_CTRL_DDMA_LEGACY |
 601				COH901318_CX_CTRL_PRDD_SOURCE,
 602		.param.ctrl_lli_last = 0 |
 603				COH901318_CX_CTRL_TC_ENABLE |
 604				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 605				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 606				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
 607				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 608				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
 609				COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
 610				COH901318_CX_CTRL_TCP_ENABLE |
 611				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 612				COH901318_CX_CTRL_HSP_ENABLE |
 613				COH901318_CX_CTRL_HSS_DISABLE |
 614				COH901318_CX_CTRL_DDMA_LEGACY |
 615				COH901318_CX_CTRL_PRDD_SOURCE,
 616	},
 617	{
 618		.number = U300_DMA_MSL_TX_5,
 619		.name = "MSL TX 5",
 620		.priority_high = 0,
 621		.dev_addr = U300_MSL_BASE + 5 * 0x40 + 0x20,
 622	},
 623	{
 624		.number = U300_DMA_MSL_TX_6,
 625		.name = "MSL TX 6",
 626		.priority_high = 0,
 627		.dev_addr = U300_MSL_BASE + 6 * 0x40 + 0x20,
 628	},
 629	{
 630		.number = U300_DMA_MSL_RX_0,
 631		.name = "MSL RX 0",
 632		.priority_high = 0,
 633		.dev_addr = U300_MSL_BASE + 0 * 0x40 + 0x220,
 634	},
 635	{
 636		.number = U300_DMA_MSL_RX_1,
 637		.name = "MSL RX 1",
 638		.priority_high = 0,
 639		.dev_addr = U300_MSL_BASE + 1 * 0x40 + 0x220,
 640		.param.config = COH901318_CX_CFG_CH_DISABLE |
 641				COH901318_CX_CFG_LCR_DISABLE |
 642				COH901318_CX_CFG_TC_IRQ_ENABLE |
 643				COH901318_CX_CFG_BE_IRQ_ENABLE,
 644		.param.ctrl_lli_chained = 0 |
 645				COH901318_CX_CTRL_TC_ENABLE |
 646				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 647				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 648				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 649				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 650				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 651				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 652				COH901318_CX_CTRL_TCP_DISABLE |
 653				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 654				COH901318_CX_CTRL_HSP_ENABLE |
 655				COH901318_CX_CTRL_HSS_DISABLE |
 656				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 657				COH901318_CX_CTRL_PRDD_DEST,
 658		.param.ctrl_lli = 0,
 659		.param.ctrl_lli_last = 0 |
 660				COH901318_CX_CTRL_TC_ENABLE |
 661				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 662				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 663				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 664				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 665				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 666				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 667				COH901318_CX_CTRL_TCP_DISABLE |
 668				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 669				COH901318_CX_CTRL_HSP_ENABLE |
 670				COH901318_CX_CTRL_HSS_DISABLE |
 671				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 672				COH901318_CX_CTRL_PRDD_DEST,
 673	},
 674	{
 675		.number = U300_DMA_MSL_RX_2,
 676		.name = "MSL RX 2",
 677		.priority_high = 0,
 678		.dev_addr = U300_MSL_BASE + 2 * 0x40 + 0x220,
 679		.param.config = COH901318_CX_CFG_CH_DISABLE |
 680				COH901318_CX_CFG_LCR_DISABLE |
 681				COH901318_CX_CFG_TC_IRQ_ENABLE |
 682				COH901318_CX_CFG_BE_IRQ_ENABLE,
 683		.param.ctrl_lli_chained = 0 |
 684				COH901318_CX_CTRL_TC_ENABLE |
 685				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 686				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 687				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 688				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 689				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 690				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 691				COH901318_CX_CTRL_TCP_DISABLE |
 692				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 693				COH901318_CX_CTRL_HSP_ENABLE |
 694				COH901318_CX_CTRL_HSS_DISABLE |
 695				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 696				COH901318_CX_CTRL_PRDD_DEST,
 697		.param.ctrl_lli = 0 |
 698				COH901318_CX_CTRL_TC_ENABLE |
 699				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 700				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 701				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 702				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 703				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 704				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 705				COH901318_CX_CTRL_TCP_DISABLE |
 706				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 707				COH901318_CX_CTRL_HSP_ENABLE |
 708				COH901318_CX_CTRL_HSS_DISABLE |
 709				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 710				COH901318_CX_CTRL_PRDD_DEST,
 711		.param.ctrl_lli_last = 0 |
 712				COH901318_CX_CTRL_TC_ENABLE |
 713				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 714				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 715				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 716				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 717				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 718				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 719				COH901318_CX_CTRL_TCP_DISABLE |
 720				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 721				COH901318_CX_CTRL_HSP_ENABLE |
 722				COH901318_CX_CTRL_HSS_DISABLE |
 723				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 724				COH901318_CX_CTRL_PRDD_DEST,
 725	},
 726	{
 727		.number = U300_DMA_MSL_RX_3,
 728		.name = "MSL RX 3",
 729		.priority_high = 0,
 730		.dev_addr = U300_MSL_BASE + 3 * 0x40 + 0x220,
 731		.param.config = COH901318_CX_CFG_CH_DISABLE |
 732				COH901318_CX_CFG_LCR_DISABLE |
 733				COH901318_CX_CFG_TC_IRQ_ENABLE |
 734				COH901318_CX_CFG_BE_IRQ_ENABLE,
 735		.param.ctrl_lli_chained = 0 |
 736				COH901318_CX_CTRL_TC_ENABLE |
 737				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 738				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 739				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 740				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 741				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 742				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 743				COH901318_CX_CTRL_TCP_DISABLE |
 744				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 745				COH901318_CX_CTRL_HSP_ENABLE |
 746				COH901318_CX_CTRL_HSS_DISABLE |
 747				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 748				COH901318_CX_CTRL_PRDD_DEST,
 749		.param.ctrl_lli = 0 |
 750				COH901318_CX_CTRL_TC_ENABLE |
 751				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 752				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 753				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 754				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 755				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 756				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 757				COH901318_CX_CTRL_TCP_DISABLE |
 758				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 759				COH901318_CX_CTRL_HSP_ENABLE |
 760				COH901318_CX_CTRL_HSS_DISABLE |
 761				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 762				COH901318_CX_CTRL_PRDD_DEST,
 763		.param.ctrl_lli_last = 0 |
 764				COH901318_CX_CTRL_TC_ENABLE |
 765				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 766				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 767				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 768				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 769				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 770				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 771				COH901318_CX_CTRL_TCP_DISABLE |
 772				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 773				COH901318_CX_CTRL_HSP_ENABLE |
 774				COH901318_CX_CTRL_HSS_DISABLE |
 775				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 776				COH901318_CX_CTRL_PRDD_DEST,
 777	},
 778	{
 779		.number = U300_DMA_MSL_RX_4,
 780		.name = "MSL RX 4",
 781		.priority_high = 0,
 782		.dev_addr = U300_MSL_BASE + 4 * 0x40 + 0x220,
 783		.param.config = COH901318_CX_CFG_CH_DISABLE |
 784				COH901318_CX_CFG_LCR_DISABLE |
 785				COH901318_CX_CFG_TC_IRQ_ENABLE |
 786				COH901318_CX_CFG_BE_IRQ_ENABLE,
 787		.param.ctrl_lli_chained = 0 |
 788				COH901318_CX_CTRL_TC_ENABLE |
 789				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 790				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 791				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 792				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 793				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 794				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 795				COH901318_CX_CTRL_TCP_DISABLE |
 796				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 797				COH901318_CX_CTRL_HSP_ENABLE |
 798				COH901318_CX_CTRL_HSS_DISABLE |
 799				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 800				COH901318_CX_CTRL_PRDD_DEST,
 801		.param.ctrl_lli = 0 |
 802				COH901318_CX_CTRL_TC_ENABLE |
 803				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 804				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 805				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 806				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 807				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 808				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 809				COH901318_CX_CTRL_TCP_DISABLE |
 810				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 811				COH901318_CX_CTRL_HSP_ENABLE |
 812				COH901318_CX_CTRL_HSS_DISABLE |
 813				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 814				COH901318_CX_CTRL_PRDD_DEST,
 815		.param.ctrl_lli_last = 0 |
 816				COH901318_CX_CTRL_TC_ENABLE |
 817				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 818				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 819				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 820				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 821				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 822				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 823				COH901318_CX_CTRL_TCP_DISABLE |
 824				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 825				COH901318_CX_CTRL_HSP_ENABLE |
 826				COH901318_CX_CTRL_HSS_DISABLE |
 827				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 828				COH901318_CX_CTRL_PRDD_DEST,
 829	},
 830	{
 831		.number = U300_DMA_MSL_RX_5,
 832		.name = "MSL RX 5",
 833		.priority_high = 0,
 834		.dev_addr = U300_MSL_BASE + 5 * 0x40 + 0x220,
 835		.param.config = COH901318_CX_CFG_CH_DISABLE |
 836				COH901318_CX_CFG_LCR_DISABLE |
 837				COH901318_CX_CFG_TC_IRQ_ENABLE |
 838				COH901318_CX_CFG_BE_IRQ_ENABLE,
 839		.param.ctrl_lli_chained = 0 |
 840				COH901318_CX_CTRL_TC_ENABLE |
 841				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 842				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 843				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 844				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 845				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 846				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 847				COH901318_CX_CTRL_TCP_DISABLE |
 848				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 849				COH901318_CX_CTRL_HSP_ENABLE |
 850				COH901318_CX_CTRL_HSS_DISABLE |
 851				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 852				COH901318_CX_CTRL_PRDD_DEST,
 853		.param.ctrl_lli = 0 |
 854				COH901318_CX_CTRL_TC_ENABLE |
 855				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 856				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 857				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 858				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 859				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 860				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 861				COH901318_CX_CTRL_TCP_DISABLE |
 862				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 863				COH901318_CX_CTRL_HSP_ENABLE |
 864				COH901318_CX_CTRL_HSS_DISABLE |
 865				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 866				COH901318_CX_CTRL_PRDD_DEST,
 867		.param.ctrl_lli_last = 0 |
 868				COH901318_CX_CTRL_TC_ENABLE |
 869				COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
 870				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
 871				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
 872				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
 873				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
 874				COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
 875				COH901318_CX_CTRL_TCP_DISABLE |
 876				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 877				COH901318_CX_CTRL_HSP_ENABLE |
 878				COH901318_CX_CTRL_HSS_DISABLE |
 879				COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
 880				COH901318_CX_CTRL_PRDD_DEST,
 881	},
 882	{
 883		.number = U300_DMA_MSL_RX_6,
 884		.name = "MSL RX 6",
 885		.priority_high = 0,
 886		.dev_addr = U300_MSL_BASE + 6 * 0x40 + 0x220,
 887	},
 888	/*
 889	 * Don't set up device address, burst count or size of src
 890	 * or dst bus for this peripheral - handled by PrimeCell
 891	 * DMA extension.
 892	 */
 893	{
 894		.number = U300_DMA_MMCSD_RX_TX,
 895		.name = "MMCSD RX TX",
 896		.priority_high = 0,
 897		.param.config = COH901318_CX_CFG_CH_DISABLE |
 898				COH901318_CX_CFG_LCR_DISABLE |
 899				COH901318_CX_CFG_TC_IRQ_ENABLE |
 900				COH901318_CX_CFG_BE_IRQ_ENABLE,
 901		.param.ctrl_lli_chained = 0 |
 902				COH901318_CX_CTRL_TC_ENABLE |
 903				COH901318_CX_CTRL_MASTER_MODE_M1RW |
 904				COH901318_CX_CTRL_TCP_ENABLE |
 905				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 906				COH901318_CX_CTRL_HSP_ENABLE |
 907				COH901318_CX_CTRL_HSS_DISABLE |
 908				COH901318_CX_CTRL_DDMA_LEGACY,
 909		.param.ctrl_lli = 0 |
 910				COH901318_CX_CTRL_TC_ENABLE |
 911				COH901318_CX_CTRL_MASTER_MODE_M1RW |
 912				COH901318_CX_CTRL_TCP_ENABLE |
 913				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 914				COH901318_CX_CTRL_HSP_ENABLE |
 915				COH901318_CX_CTRL_HSS_DISABLE |
 916				COH901318_CX_CTRL_DDMA_LEGACY,
 917		.param.ctrl_lli_last = 0 |
 918				COH901318_CX_CTRL_TC_ENABLE |
 919				COH901318_CX_CTRL_MASTER_MODE_M1RW |
 920				COH901318_CX_CTRL_TCP_DISABLE |
 921				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 922				COH901318_CX_CTRL_HSP_ENABLE |
 923				COH901318_CX_CTRL_HSS_DISABLE |
 924				COH901318_CX_CTRL_DDMA_LEGACY,
 925
 926	},
 927	{
 928		.number = U300_DMA_MSPRO_TX,
 929		.name = "MSPRO TX",
 930		.priority_high = 0,
 931	},
 932	{
 933		.number = U300_DMA_MSPRO_RX,
 934		.name = "MSPRO RX",
 935		.priority_high = 0,
 936	},
 937	/*
 938	 * Don't set up device address, burst count or size of src
 939	 * or dst bus for this peripheral - handled by PrimeCell
 940	 * DMA extension.
 941	 */
 942	{
 943		.number = U300_DMA_UART0_TX,
 944		.name = "UART0 TX",
 945		.priority_high = 0,
 946		.param.config = COH901318_CX_CFG_CH_DISABLE |
 947				COH901318_CX_CFG_LCR_DISABLE |
 948				COH901318_CX_CFG_TC_IRQ_ENABLE |
 949				COH901318_CX_CFG_BE_IRQ_ENABLE,
 950		.param.ctrl_lli_chained = 0 |
 951				COH901318_CX_CTRL_TC_ENABLE |
 952				COH901318_CX_CTRL_MASTER_MODE_M1RW |
 953				COH901318_CX_CTRL_TCP_ENABLE |
 954				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 955				COH901318_CX_CTRL_HSP_ENABLE |
 956				COH901318_CX_CTRL_HSS_DISABLE |
 957				COH901318_CX_CTRL_DDMA_LEGACY,
 958		.param.ctrl_lli = 0 |
 959				COH901318_CX_CTRL_TC_ENABLE |
 960				COH901318_CX_CTRL_MASTER_MODE_M1RW |
 961				COH901318_CX_CTRL_TCP_ENABLE |
 962				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 963				COH901318_CX_CTRL_HSP_ENABLE |
 964				COH901318_CX_CTRL_HSS_DISABLE |
 965				COH901318_CX_CTRL_DDMA_LEGACY,
 966		.param.ctrl_lli_last = 0 |
 967				COH901318_CX_CTRL_TC_ENABLE |
 968				COH901318_CX_CTRL_MASTER_MODE_M1RW |
 969				COH901318_CX_CTRL_TCP_ENABLE |
 970				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 971				COH901318_CX_CTRL_HSP_ENABLE |
 972				COH901318_CX_CTRL_HSS_DISABLE |
 973				COH901318_CX_CTRL_DDMA_LEGACY,
 974	},
 975	{
 976		.number = U300_DMA_UART0_RX,
 977		.name = "UART0 RX",
 978		.priority_high = 0,
 979		.param.config = COH901318_CX_CFG_CH_DISABLE |
 980				COH901318_CX_CFG_LCR_DISABLE |
 981				COH901318_CX_CFG_TC_IRQ_ENABLE |
 982				COH901318_CX_CFG_BE_IRQ_ENABLE,
 983		.param.ctrl_lli_chained = 0 |
 984				COH901318_CX_CTRL_TC_ENABLE |
 985				COH901318_CX_CTRL_MASTER_MODE_M1RW |
 986				COH901318_CX_CTRL_TCP_ENABLE |
 987				COH901318_CX_CTRL_TC_IRQ_DISABLE |
 988				COH901318_CX_CTRL_HSP_ENABLE |
 989				COH901318_CX_CTRL_HSS_DISABLE |
 990				COH901318_CX_CTRL_DDMA_LEGACY,
 991		.param.ctrl_lli = 0 |
 992				COH901318_CX_CTRL_TC_ENABLE |
 993				COH901318_CX_CTRL_MASTER_MODE_M1RW |
 994				COH901318_CX_CTRL_TCP_ENABLE |
 995				COH901318_CX_CTRL_TC_IRQ_ENABLE |
 996				COH901318_CX_CTRL_HSP_ENABLE |
 997				COH901318_CX_CTRL_HSS_DISABLE |
 998				COH901318_CX_CTRL_DDMA_LEGACY,
 999		.param.ctrl_lli_last = 0 |
1000				COH901318_CX_CTRL_TC_ENABLE |
1001				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1002				COH901318_CX_CTRL_TCP_ENABLE |
1003				COH901318_CX_CTRL_TC_IRQ_ENABLE |
1004				COH901318_CX_CTRL_HSP_ENABLE |
1005				COH901318_CX_CTRL_HSS_DISABLE |
1006				COH901318_CX_CTRL_DDMA_LEGACY,
1007	},
1008	{
1009		.number = U300_DMA_APEX_TX,
1010		.name = "APEX TX",
1011		.priority_high = 0,
1012	},
1013	{
1014		.number = U300_DMA_APEX_RX,
1015		.name = "APEX RX",
1016		.priority_high = 0,
1017	},
1018	{
1019		.number = U300_DMA_PCM_I2S0_TX,
1020		.name = "PCM I2S0 TX",
1021		.priority_high = 1,
1022		.dev_addr = U300_PCM_I2S0_BASE + 0x14,
1023		.param.config = COH901318_CX_CFG_CH_DISABLE |
1024				COH901318_CX_CFG_LCR_DISABLE |
1025				COH901318_CX_CFG_TC_IRQ_ENABLE |
1026				COH901318_CX_CFG_BE_IRQ_ENABLE,
1027		.param.ctrl_lli_chained = 0 |
1028				COH901318_CX_CTRL_TC_ENABLE |
1029				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1030				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1031				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1032				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1033				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1034				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1035				COH901318_CX_CTRL_TCP_DISABLE |
1036				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1037				COH901318_CX_CTRL_HSP_ENABLE |
1038				COH901318_CX_CTRL_HSS_DISABLE |
1039				COH901318_CX_CTRL_DDMA_LEGACY |
1040				COH901318_CX_CTRL_PRDD_SOURCE,
1041		.param.ctrl_lli = 0 |
1042				COH901318_CX_CTRL_TC_ENABLE |
1043				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1044				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1045				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1046				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1047				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1048				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1049				COH901318_CX_CTRL_TCP_ENABLE |
1050				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1051				COH901318_CX_CTRL_HSP_ENABLE |
1052				COH901318_CX_CTRL_HSS_DISABLE |
1053				COH901318_CX_CTRL_DDMA_LEGACY |
1054				COH901318_CX_CTRL_PRDD_SOURCE,
1055		.param.ctrl_lli_last = 0 |
1056				COH901318_CX_CTRL_TC_ENABLE |
1057				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1058				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1059				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1060				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1061				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1062				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1063				COH901318_CX_CTRL_TCP_ENABLE |
1064				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1065				COH901318_CX_CTRL_HSP_ENABLE |
1066				COH901318_CX_CTRL_HSS_DISABLE |
1067				COH901318_CX_CTRL_DDMA_LEGACY |
1068				COH901318_CX_CTRL_PRDD_SOURCE,
1069	},
1070	{
1071		.number = U300_DMA_PCM_I2S0_RX,
1072		.name = "PCM I2S0 RX",
1073		.priority_high = 1,
1074		.dev_addr = U300_PCM_I2S0_BASE + 0x10,
1075		.param.config = COH901318_CX_CFG_CH_DISABLE |
1076				COH901318_CX_CFG_LCR_DISABLE |
1077				COH901318_CX_CFG_TC_IRQ_ENABLE |
1078				COH901318_CX_CFG_BE_IRQ_ENABLE,
1079		.param.ctrl_lli_chained = 0 |
1080				COH901318_CX_CTRL_TC_ENABLE |
1081				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1082				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1083				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1084				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1085				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1086				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1087				COH901318_CX_CTRL_TCP_DISABLE |
1088				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1089				COH901318_CX_CTRL_HSP_ENABLE |
1090				COH901318_CX_CTRL_HSS_DISABLE |
1091				COH901318_CX_CTRL_DDMA_LEGACY |
1092				COH901318_CX_CTRL_PRDD_DEST,
1093		.param.ctrl_lli = 0 |
1094				COH901318_CX_CTRL_TC_ENABLE |
1095				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1096				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1097				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1098				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1099				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1100				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1101				COH901318_CX_CTRL_TCP_ENABLE |
1102				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1103				COH901318_CX_CTRL_HSP_ENABLE |
1104				COH901318_CX_CTRL_HSS_DISABLE |
1105				COH901318_CX_CTRL_DDMA_LEGACY |
1106				COH901318_CX_CTRL_PRDD_DEST,
1107		.param.ctrl_lli_last = 0 |
1108				COH901318_CX_CTRL_TC_ENABLE |
1109				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1110				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1111				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1112				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1113				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1114				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1115				COH901318_CX_CTRL_TCP_ENABLE |
1116				COH901318_CX_CTRL_TC_IRQ_ENABLE |
1117				COH901318_CX_CTRL_HSP_ENABLE |
1118				COH901318_CX_CTRL_HSS_DISABLE |
1119				COH901318_CX_CTRL_DDMA_LEGACY |
1120				COH901318_CX_CTRL_PRDD_DEST,
1121	},
1122	{
1123		.number = U300_DMA_PCM_I2S1_TX,
1124		.name = "PCM I2S1 TX",
1125		.priority_high = 1,
1126		.dev_addr =  U300_PCM_I2S1_BASE + 0x14,
1127		.param.config = COH901318_CX_CFG_CH_DISABLE |
1128				COH901318_CX_CFG_LCR_DISABLE |
1129				COH901318_CX_CFG_TC_IRQ_ENABLE |
1130				COH901318_CX_CFG_BE_IRQ_ENABLE,
1131		.param.ctrl_lli_chained = 0 |
1132				COH901318_CX_CTRL_TC_ENABLE |
1133				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1134				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1135				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1136				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1137				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1138				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1139				COH901318_CX_CTRL_TCP_DISABLE |
1140				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1141				COH901318_CX_CTRL_HSP_ENABLE |
1142				COH901318_CX_CTRL_HSS_DISABLE |
1143				COH901318_CX_CTRL_DDMA_LEGACY |
1144				COH901318_CX_CTRL_PRDD_SOURCE,
1145		.param.ctrl_lli = 0 |
1146				COH901318_CX_CTRL_TC_ENABLE |
1147				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1148				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1149				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1150				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1151				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1152				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1153				COH901318_CX_CTRL_TCP_ENABLE |
1154				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1155				COH901318_CX_CTRL_HSP_ENABLE |
1156				COH901318_CX_CTRL_HSS_DISABLE |
1157				COH901318_CX_CTRL_DDMA_LEGACY |
1158				COH901318_CX_CTRL_PRDD_SOURCE,
1159		.param.ctrl_lli_last = 0 |
1160				COH901318_CX_CTRL_TC_ENABLE |
1161				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1162				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1163				COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1164				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1165				COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1166				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1167				COH901318_CX_CTRL_TCP_ENABLE |
1168				COH901318_CX_CTRL_TC_IRQ_ENABLE |
1169				COH901318_CX_CTRL_HSP_ENABLE |
1170				COH901318_CX_CTRL_HSS_DISABLE |
1171				COH901318_CX_CTRL_DDMA_LEGACY |
1172				COH901318_CX_CTRL_PRDD_SOURCE,
1173	},
1174	{
1175		.number = U300_DMA_PCM_I2S1_RX,
1176		.name = "PCM I2S1 RX",
1177		.priority_high = 1,
1178		.dev_addr = U300_PCM_I2S1_BASE + 0x10,
1179		.param.config = COH901318_CX_CFG_CH_DISABLE |
1180				COH901318_CX_CFG_LCR_DISABLE |
1181				COH901318_CX_CFG_TC_IRQ_ENABLE |
1182				COH901318_CX_CFG_BE_IRQ_ENABLE,
1183		.param.ctrl_lli_chained = 0 |
1184				COH901318_CX_CTRL_TC_ENABLE |
1185				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1186				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1187				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1188				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1189				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1190				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1191				COH901318_CX_CTRL_TCP_DISABLE |
1192				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1193				COH901318_CX_CTRL_HSP_ENABLE |
1194				COH901318_CX_CTRL_HSS_DISABLE |
1195				COH901318_CX_CTRL_DDMA_LEGACY |
1196				COH901318_CX_CTRL_PRDD_DEST,
1197		.param.ctrl_lli = 0 |
1198				COH901318_CX_CTRL_TC_ENABLE |
1199				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1200				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1201				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1202				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1203				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1204				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1205				COH901318_CX_CTRL_TCP_ENABLE |
1206				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1207				COH901318_CX_CTRL_HSP_ENABLE |
1208				COH901318_CX_CTRL_HSS_DISABLE |
1209				COH901318_CX_CTRL_DDMA_LEGACY |
1210				COH901318_CX_CTRL_PRDD_DEST,
1211		.param.ctrl_lli_last = 0 |
1212				COH901318_CX_CTRL_TC_ENABLE |
1213				COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1214				COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1215				COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1216				COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1217				COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1218				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1219				COH901318_CX_CTRL_TCP_ENABLE |
1220				COH901318_CX_CTRL_TC_IRQ_ENABLE |
1221				COH901318_CX_CTRL_HSP_ENABLE |
1222				COH901318_CX_CTRL_HSS_DISABLE |
1223				COH901318_CX_CTRL_DDMA_LEGACY |
1224				COH901318_CX_CTRL_PRDD_DEST,
1225	},
1226	{
1227		.number = U300_DMA_XGAM_CDI,
1228		.name = "XGAM CDI",
1229		.priority_high = 0,
1230	},
1231	{
1232		.number = U300_DMA_XGAM_PDI,
1233		.name = "XGAM PDI",
1234		.priority_high = 0,
1235	},
1236	/*
1237	 * Don't set up device address, burst count or size of src
1238	 * or dst bus for this peripheral - handled by PrimeCell
1239	 * DMA extension.
1240	 */
1241	{
1242		.number = U300_DMA_SPI_TX,
1243		.name = "SPI TX",
1244		.priority_high = 0,
1245		.param.config = COH901318_CX_CFG_CH_DISABLE |
1246				COH901318_CX_CFG_LCR_DISABLE |
1247				COH901318_CX_CFG_TC_IRQ_ENABLE |
1248				COH901318_CX_CFG_BE_IRQ_ENABLE,
1249		.param.ctrl_lli_chained = 0 |
1250				COH901318_CX_CTRL_TC_ENABLE |
1251				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1252				COH901318_CX_CTRL_TCP_DISABLE |
1253				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1254				COH901318_CX_CTRL_HSP_ENABLE |
1255				COH901318_CX_CTRL_HSS_DISABLE |
1256				COH901318_CX_CTRL_DDMA_LEGACY,
1257		.param.ctrl_lli = 0 |
1258				COH901318_CX_CTRL_TC_ENABLE |
1259				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1260				COH901318_CX_CTRL_TCP_DISABLE |
1261				COH901318_CX_CTRL_TC_IRQ_ENABLE |
1262				COH901318_CX_CTRL_HSP_ENABLE |
1263				COH901318_CX_CTRL_HSS_DISABLE |
1264				COH901318_CX_CTRL_DDMA_LEGACY,
1265		.param.ctrl_lli_last = 0 |
1266				COH901318_CX_CTRL_TC_ENABLE |
1267				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1268				COH901318_CX_CTRL_TCP_DISABLE |
1269				COH901318_CX_CTRL_TC_IRQ_ENABLE |
1270				COH901318_CX_CTRL_HSP_ENABLE |
1271				COH901318_CX_CTRL_HSS_DISABLE |
1272				COH901318_CX_CTRL_DDMA_LEGACY,
1273	},
1274	{
1275		.number = U300_DMA_SPI_RX,
1276		.name = "SPI RX",
1277		.priority_high = 0,
1278		.param.config = COH901318_CX_CFG_CH_DISABLE |
1279				COH901318_CX_CFG_LCR_DISABLE |
1280				COH901318_CX_CFG_TC_IRQ_ENABLE |
1281				COH901318_CX_CFG_BE_IRQ_ENABLE,
1282		.param.ctrl_lli_chained = 0 |
1283				COH901318_CX_CTRL_TC_ENABLE |
1284				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1285				COH901318_CX_CTRL_TCP_DISABLE |
1286				COH901318_CX_CTRL_TC_IRQ_DISABLE |
1287				COH901318_CX_CTRL_HSP_ENABLE |
1288				COH901318_CX_CTRL_HSS_DISABLE |
1289				COH901318_CX_CTRL_DDMA_LEGACY,
1290		.param.ctrl_lli = 0 |
1291				COH901318_CX_CTRL_TC_ENABLE |
1292				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1293				COH901318_CX_CTRL_TCP_DISABLE |
1294				COH901318_CX_CTRL_TC_IRQ_ENABLE |
1295				COH901318_CX_CTRL_HSP_ENABLE |
1296				COH901318_CX_CTRL_HSS_DISABLE |
1297				COH901318_CX_CTRL_DDMA_LEGACY,
1298		.param.ctrl_lli_last = 0 |
1299				COH901318_CX_CTRL_TC_ENABLE |
1300				COH901318_CX_CTRL_MASTER_MODE_M1RW |
1301				COH901318_CX_CTRL_TCP_DISABLE |
1302				COH901318_CX_CTRL_TC_IRQ_ENABLE |
1303				COH901318_CX_CTRL_HSP_ENABLE |
1304				COH901318_CX_CTRL_HSS_DISABLE |
1305				COH901318_CX_CTRL_DDMA_LEGACY,
1306
1307	},
1308	{
1309		.number = U300_DMA_GENERAL_PURPOSE_0,
1310		.name = "GENERAL 00",
1311		.priority_high = 0,
1312
1313		.param.config = flags_memcpy_config,
1314		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1315		.param.ctrl_lli = flags_memcpy_lli,
1316		.param.ctrl_lli_last = flags_memcpy_lli_last,
1317	},
1318	{
1319		.number = U300_DMA_GENERAL_PURPOSE_1,
1320		.name = "GENERAL 01",
1321		.priority_high = 0,
1322
1323		.param.config = flags_memcpy_config,
1324		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1325		.param.ctrl_lli = flags_memcpy_lli,
1326		.param.ctrl_lli_last = flags_memcpy_lli_last,
1327	},
1328	{
1329		.number = U300_DMA_GENERAL_PURPOSE_2,
1330		.name = "GENERAL 02",
1331		.priority_high = 0,
1332
1333		.param.config = flags_memcpy_config,
1334		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1335		.param.ctrl_lli = flags_memcpy_lli,
1336		.param.ctrl_lli_last = flags_memcpy_lli_last,
1337	},
1338	{
1339		.number = U300_DMA_GENERAL_PURPOSE_3,
1340		.name = "GENERAL 03",
1341		.priority_high = 0,
1342
1343		.param.config = flags_memcpy_config,
1344		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1345		.param.ctrl_lli = flags_memcpy_lli,
1346		.param.ctrl_lli_last = flags_memcpy_lli_last,
1347	},
1348	{
1349		.number = U300_DMA_GENERAL_PURPOSE_4,
1350		.name = "GENERAL 04",
1351		.priority_high = 0,
1352
1353		.param.config = flags_memcpy_config,
1354		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1355		.param.ctrl_lli = flags_memcpy_lli,
1356		.param.ctrl_lli_last = flags_memcpy_lli_last,
1357	},
1358	{
1359		.number = U300_DMA_GENERAL_PURPOSE_5,
1360		.name = "GENERAL 05",
1361		.priority_high = 0,
1362
1363		.param.config = flags_memcpy_config,
1364		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1365		.param.ctrl_lli = flags_memcpy_lli,
1366		.param.ctrl_lli_last = flags_memcpy_lli_last,
1367	},
1368	{
1369		.number = U300_DMA_GENERAL_PURPOSE_6,
1370		.name = "GENERAL 06",
1371		.priority_high = 0,
1372
1373		.param.config = flags_memcpy_config,
1374		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1375		.param.ctrl_lli = flags_memcpy_lli,
1376		.param.ctrl_lli_last = flags_memcpy_lli_last,
1377	},
1378	{
1379		.number = U300_DMA_GENERAL_PURPOSE_7,
1380		.name = "GENERAL 07",
1381		.priority_high = 0,
1382
1383		.param.config = flags_memcpy_config,
1384		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1385		.param.ctrl_lli = flags_memcpy_lli,
1386		.param.ctrl_lli_last = flags_memcpy_lli_last,
1387	},
1388	{
1389		.number = U300_DMA_GENERAL_PURPOSE_8,
1390		.name = "GENERAL 08",
1391		.priority_high = 0,
1392
1393		.param.config = flags_memcpy_config,
1394		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1395		.param.ctrl_lli = flags_memcpy_lli,
1396		.param.ctrl_lli_last = flags_memcpy_lli_last,
1397	},
1398#ifdef CONFIG_MACH_U300_BS335
1399	{
1400		.number = U300_DMA_UART1_TX,
1401		.name = "UART1 TX",
1402		.priority_high = 0,
1403	},
1404	{
1405		.number = U300_DMA_UART1_RX,
1406		.name = "UART1 RX",
1407		.priority_high = 0,
1408	}
1409#else
1410	{
1411		.number = U300_DMA_GENERAL_PURPOSE_9,
1412		.name = "GENERAL 09",
1413		.priority_high = 0,
1414
1415		.param.config = flags_memcpy_config,
1416		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1417		.param.ctrl_lli = flags_memcpy_lli,
1418		.param.ctrl_lli_last = flags_memcpy_lli_last,
1419	},
1420	{
1421		.number = U300_DMA_GENERAL_PURPOSE_10,
1422		.name = "GENERAL 10",
1423		.priority_high = 0,
1424
1425		.param.config = flags_memcpy_config,
1426		.param.ctrl_lli_chained = flags_memcpy_lli_chained,
1427		.param.ctrl_lli = flags_memcpy_lli,
1428		.param.ctrl_lli_last = flags_memcpy_lli_last,
1429	}
1430#endif
1431};
1432
1433
1434static struct coh901318_platform coh901318_platform = {
1435	.chans_slave = dma_slave_channels,
1436	.chans_memcpy = dma_memcpy_channels,
1437	.access_memory_state = coh901318_access_memory_state,
1438	.chan_conf = chan_config,
1439	.max_channels = U300_DMA_CHANNELS,
1440};
1441
1442static struct resource pinctrl_resources[] = {
1443	{
1444		.start = U300_SYSCON_BASE,
1445		.end   = U300_SYSCON_BASE + SZ_4K - 1,
1446		.flags = IORESOURCE_MEM,
1447	},
1448};
1449
1450static struct platform_device wdog_device = {
1451	.name = "coh901327_wdog",
1452	.id = -1,
1453	.num_resources = ARRAY_SIZE(wdog_resources),
1454	.resource = wdog_resources,
1455};
1456
1457static struct platform_device i2c0_device = {
1458	.name = "stu300",
1459	.id = 0,
1460	.num_resources = ARRAY_SIZE(i2c0_resources),
1461	.resource = i2c0_resources,
1462};
1463
1464static struct platform_device i2c1_device = {
1465	.name = "stu300",
1466	.id = 1,
1467	.num_resources = ARRAY_SIZE(i2c1_resources),
1468	.resource = i2c1_resources,
1469};
1470
1471static struct platform_device pinctrl_device = {
1472	.name = "pinctrl-u300",
1473	.id = -1,
1474	.num_resources = ARRAY_SIZE(pinctrl_resources),
1475	.resource = pinctrl_resources,
1476};
1477
1478/*
1479 * The different variants have a few different versions of the
1480 * GPIO block, with different number of ports.
 
 
1481 */
1482static struct u300_gpio_platform u300_gpio_plat = {
1483#if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330)
1484	.variant = U300_GPIO_COH901335,
1485	.ports = 3,
1486#endif
1487#ifdef CONFIG_MACH_U300_BS335
1488	.variant = U300_GPIO_COH901571_3_BS335,
1489	.ports = 7,
1490#endif
1491#ifdef CONFIG_MACH_U300_BS365
1492	.variant = U300_GPIO_COH901571_3_BS365,
1493	.ports = 5,
1494#endif
1495	.gpio_base = 0,
1496	.gpio_irq_base = IRQ_U300_GPIO_BASE,
1497	.pinctrl_device = &pinctrl_device,
1498};
1499
1500static struct platform_device gpio_device = {
1501	.name = "u300-gpio",
1502	.id = -1,
1503	.num_resources = ARRAY_SIZE(gpio_resources),
1504	.resource = gpio_resources,
1505	.dev = {
1506		.platform_data = &u300_gpio_plat,
1507	},
1508};
1509
1510static struct platform_device keypad_device = {
1511	.name = "keypad",
1512	.id = -1,
1513	.num_resources = ARRAY_SIZE(keypad_resources),
1514	.resource = keypad_resources,
1515};
1516
1517static struct platform_device rtc_device = {
1518	.name = "rtc-coh901331",
1519	.id = -1,
1520	.num_resources = ARRAY_SIZE(rtc_resources),
1521	.resource = rtc_resources,
1522};
1523
1524static struct mtd_partition u300_partitions[] = {
1525	{
1526		.name = "bootrecords",
1527		.offset = 0,
1528		.size = SZ_128K,
 
1529	},
1530	{
1531		.name = "free",
1532		.offset = SZ_128K,
1533		.size = 8064 * SZ_1K,
 
1534	},
1535	{
1536		.name = "platform",
1537		.offset = 8192 * SZ_1K,
1538		.size = 253952 * SZ_1K,
 
1539	},
1540};
1541
1542static struct fsmc_nand_platform_data nand_platform_data = {
1543	.partitions = u300_partitions,
1544	.nr_partitions = ARRAY_SIZE(u300_partitions),
1545	.options = NAND_SKIP_BBTSCAN,
1546	.width = FSMC_NAND_BW8,
1547	.ale_off = PLAT_NAND_ALE,
1548	.cle_off = PLAT_NAND_CLE,
1549};
1550
1551static struct platform_device nand_device = {
1552	.name = "fsmc-nand",
1553	.id = -1,
1554	.resource = fsmc_resources,
1555	.num_resources = ARRAY_SIZE(fsmc_resources),
1556	.dev = {
1557		.platform_data = &nand_platform_data,
1558	},
1559};
1560
1561static struct platform_device dma_device = {
1562	.name		= "coh901318",
1563	.id		= -1,
1564	.resource	= dma_resource,
1565	.num_resources  = ARRAY_SIZE(dma_resource),
1566	.dev = {
1567		.platform_data = &coh901318_platform,
1568		.coherent_dma_mask = ~0,
1569	},
1570};
1571
1572static unsigned long pin_pullup_conf[] = {
1573	PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 1),
1574};
1575
1576static unsigned long pin_highz_conf[] = {
1577	PIN_CONF_PACKED(PIN_CONFIG_BIAS_HIGH_IMPEDANCE, 0),
1578};
1579
1580/* Pin control settings */
1581static struct pinctrl_map __initdata u300_pinmux_map[] = {
1582	/* anonymous maps for chip power and EMIFs */
1583	PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "power"),
1584	PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif0"),
1585	PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif1"),
1586	/* per-device maps for MMC/SD, SPI and UART */
1587	PIN_MAP_MUX_GROUP_DEFAULT("mmci",  "pinctrl-u300", NULL, "mmc0"),
1588	PIN_MAP_MUX_GROUP_DEFAULT("pl022", "pinctrl-u300", NULL, "spi0"),
1589	PIN_MAP_MUX_GROUP_DEFAULT("uart0", "pinctrl-u300", NULL, "uart0"),
1590	/* This pin is used for clock return rather than GPIO */
1591	PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO APP GPIO 11",
1592				    pin_pullup_conf),
1593	/* This pin is used for card detect */
1594	PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO MS INS",
1595				    pin_highz_conf),
1596};
1597
1598struct u300_mux_hog {
1599	struct device *dev;
1600	struct pinctrl *p;
1601};
1602
1603static struct u300_mux_hog u300_mux_hogs[] = {
1604	{
1605		.dev = &uart0_device.dev,
1606	},
1607	{
1608		.dev = &pl022_device.dev,
1609	},
1610	{
1611		.dev = &mmcsd_device.dev,
1612	},
1613};
1614
1615static int __init u300_pinctrl_fetch(void)
1616{
1617	int i;
1618
1619	for (i = 0; i < ARRAY_SIZE(u300_mux_hogs); i++) {
1620		struct pinctrl *p;
1621
1622		p = pinctrl_get_select_default(u300_mux_hogs[i].dev);
1623		if (IS_ERR(p)) {
1624			pr_err("u300: could not get pinmux hog for dev %s\n",
1625			       dev_name(u300_mux_hogs[i].dev));
1626			continue;
1627		}
1628		u300_mux_hogs[i].p = p;
1629	}
1630	return 0;
1631}
1632subsys_initcall(u300_pinctrl_fetch);
1633
1634/*
1635 * Notice that AMBA devices are initialized before platform devices.
1636 *
1637 */
1638static struct platform_device *platform_devs[] __initdata = {
1639	&dma_device,
1640	&i2c0_device,
1641	&i2c1_device,
1642	&keypad_device,
1643	&rtc_device,
1644	&gpio_device,
1645	&nand_device,
1646	&wdog_device,
1647};
1648
1649/*
1650 * Interrupts: the U300 platforms have two pl190 ARM PrimeCells connected
1651 * together so some interrupts are connected to the first one and some
1652 * to the second one.
1653 */
1654void __init u300_init_irq(void)
1655{
1656	u32 mask[2] = {0, 0};
1657	struct clk *clk;
1658	int i;
1659
1660	/* initialize clocking early, we want to clock the INTCON */
1661	u300_clock_init();
1662
1663	/* Clock the interrupt controller */
1664	clk = clk_get_sys("intcon", NULL);
1665	BUG_ON(IS_ERR(clk));
1666	clk_enable(clk);
1667
1668	for (i = 0; i < U300_VIC_IRQS_END; i++)
1669		set_bit(i, (unsigned long *) &mask[0]);
1670	vic_init((void __iomem *) U300_INTCON0_VBASE, IRQ_U300_INTCON0_START,
1671		 mask[0], mask[0]);
1672	vic_init((void __iomem *) U300_INTCON1_VBASE, IRQ_U300_INTCON1_START,
1673		 mask[1], mask[1]);
1674}
1675
1676
1677/*
1678 * U300 platforms peripheral handling
1679 */
1680struct db_chip {
1681	u16 chipid;
1682	const char *name;
1683};
1684
1685/*
1686 * This is a list of the Digital Baseband chips used in the U300 platform.
1687 */
1688static struct db_chip db_chips[] __initdata = {
1689	{
1690		.chipid = 0xb800,
1691		.name = "DB3000",
1692	},
1693	{
1694		.chipid = 0xc000,
1695		.name = "DB3100",
1696	},
1697	{
1698		.chipid = 0xc800,
1699		.name = "DB3150",
1700	},
1701	{
1702		.chipid = 0xd800,
1703		.name = "DB3200",
1704	},
1705	{
1706		.chipid = 0xe000,
1707		.name = "DB3250",
1708	},
1709	{
1710		.chipid = 0xe800,
1711		.name = "DB3210",
1712	},
1713	{
1714		.chipid = 0xf000,
1715		.name = "DB3350 P1x",
1716	},
1717	{
1718		.chipid = 0xf100,
1719		.name = "DB3350 P2x",
1720	},
1721	{
1722		.chipid = 0x0000, /* List terminator */
1723		.name = NULL,
1724	}
1725};
1726
1727static void __init u300_init_check_chip(void)
1728{
1729
1730	u16 val;
1731	struct db_chip *chip;
1732	const char *chipname;
1733	const char unknown[] = "UNKNOWN";
1734
1735	/* Read out and print chip ID */
1736	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CIDR);
1737	/* This is in funky bigendian order... */
1738	val = (val & 0xFFU) << 8 | (val >> 8);
1739	chip = db_chips;
1740	chipname = unknown;
1741
1742	for ( ; chip->chipid; chip++) {
1743		if (chip->chipid == (val & 0xFF00U)) {
1744			chipname = chip->name;
1745			break;
1746		}
1747	}
1748	printk(KERN_INFO "Initializing U300 system on %s baseband chip " \
1749	       "(chip ID 0x%04x)\n", chipname, val);
1750
1751#ifdef CONFIG_MACH_U300_BS330
1752	if ((val & 0xFF00U) != 0xd800) {
1753		printk(KERN_ERR "Platform configured for BS330 " \
1754		       "with DB3200 but %s detected, expect problems!",
1755		       chipname);
1756	}
1757#endif
1758#ifdef CONFIG_MACH_U300_BS335
1759	if ((val & 0xFF00U) != 0xf000 && (val & 0xFF00U) != 0xf100) {
1760		printk(KERN_ERR "Platform configured for BS335 " \
1761		       " with DB3350 but %s detected, expect problems!",
1762		       chipname);
1763	}
 
 
 
 
 
 
 
 
 
 
 
 
1764#endif
1765#ifdef CONFIG_MACH_U300_BS365
1766	if ((val & 0xFF00U) != 0xe800) {
1767		printk(KERN_ERR "Platform configured for BS365 " \
1768		       "with DB3210 but %s detected, expect problems!",
1769		       chipname);
1770	}
1771#endif
 
 
1772
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1773
1774}
1775
1776/*
1777 * Some devices and their resources require reserved physical memory from
1778 * the end of the available RAM. This function traverses the list of devices
1779 * and assigns actual addresses to these.
1780 */
1781static void __init u300_assign_physmem(void)
1782{
1783	unsigned long curr_start = __pa(high_memory);
1784	int i, j;
1785
1786	for (i = 0; i < ARRAY_SIZE(platform_devs); i++) {
1787		for (j = 0; j < platform_devs[i]->num_resources; j++) {
1788			struct resource *const res =
1789			  &platform_devs[i]->resource[j];
1790
1791			if (IORESOURCE_MEM == res->flags &&
1792				     0 == res->start) {
1793				res->start  = curr_start;
1794				res->end   += curr_start;
1795				curr_start += resource_size(res);
1796
1797				printk(KERN_INFO "core.c: Mapping RAM " \
1798				       "%#x-%#x to device %s:%s\n",
1799					res->start, res->end,
1800				       platform_devs[i]->name, res->name);
1801			}
1802		}
1803	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1804}
1805
1806void __init u300_init_devices(void)
1807{
1808	int i;
1809	u16 val;
1810
1811	/* Check what platform we run and print some status information */
1812	u300_init_check_chip();
1813
1814	/* Set system to run at PLL208, max performance, a known state. */
1815	val = readw(U300_SYSCON_VBASE + U300_SYSCON_CCR);
1816	val &= ~U300_SYSCON_CCR_CLKING_PERFORMANCE_MASK;
1817	writew(val, U300_SYSCON_VBASE + U300_SYSCON_CCR);
1818	/* Wait for the PLL208 to lock if not locked in yet */
1819	while (!(readw(U300_SYSCON_VBASE + U300_SYSCON_CSR) &
1820		 U300_SYSCON_CSR_PLL208_LOCK_IND));
1821	/* Initialize SPI device with some board specifics */
1822	u300_spi_init(&pl022_device);
1823
1824	/* Register the AMBA devices in the AMBA bus abstraction layer */
1825	for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
1826		struct amba_device *d = amba_devs[i];
1827		amba_device_register(d, &iomem_resource);
1828	}
1829
1830	u300_assign_physmem();
1831
1832	/* Initialize pinmuxing */
1833	pinctrl_register_mappings(u300_pinmux_map,
1834				  ARRAY_SIZE(u300_pinmux_map));
1835
1836	/* Register subdevices on the I2C buses */
1837	u300_i2c_register_board_devices();
1838
1839	/* Register the platform devices */
1840	platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
1841
1842	/* Register subdevices on the SPI bus */
1843	u300_spi_register_board_devices();
1844
1845	/* Enable SEMI self refresh */
1846	val = readw(U300_SYSCON_VBASE + U300_SYSCON_SMCR) |
1847		U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE;
1848	writew(val, U300_SYSCON_VBASE + U300_SYSCON_SMCR);
1849}
1850
1851/* Forward declare this function from the watchdog */
1852void coh901327_watchdog_reset(void);
 
 
1853
1854void u300_restart(char mode, const char *cmd)
1855{
1856	switch (mode) {
1857	case 's':
1858	case 'h':
1859#ifdef CONFIG_COH901327_WATCHDOG
1860		coh901327_watchdog_reset();
1861#endif
1862		break;
1863	default:
1864		/* Do nothing */
1865		break;
1866	}
1867	/* Wait for system do die/reset. */
1868	while (1);
1869}