3 * arch/arm/mach-u300/core.c
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>
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>
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 #include <linux/platform_data/clk-u300.h>
34 #include <linux/platform_data/pinctrl-coh901.h>
36 #include <asm/types.h>
37 #include <asm/setup.h>
38 #include <asm/memory.h>
39 #include <asm/hardware/vic.h>
40 #include <asm/mach/map.h>
41 #include <asm/mach-types.h>
42 #include <asm/mach/arch.h>
44 #include <mach/coh901318.h>
45 #include <mach/hardware.h>
46 #include <mach/syscon.h>
47 #include <mach/irqs.h>
52 #include "u300-gpio.h"
53 #include "dma_channels.h"
56 * Static I/O mappings that are needed for booting the U300 platforms. The
57 * only things we need are the areas where we find the timer, syscon and
58 * intcon, since the remaining device drivers will map their own memory
59 * physical to virtual as the need arise.
61 static struct map_desc u300_io_desc[] __initdata = {
63 .virtual = U300_SLOW_PER_VIRT_BASE,
64 .pfn = __phys_to_pfn(U300_SLOW_PER_PHYS_BASE),
69 .virtual = U300_AHB_PER_VIRT_BASE,
70 .pfn = __phys_to_pfn(U300_AHB_PER_PHYS_BASE),
75 .virtual = U300_FAST_PER_VIRT_BASE,
76 .pfn = __phys_to_pfn(U300_FAST_PER_PHYS_BASE),
82 static void __init u300_map_io(void)
84 iotable_init(u300_io_desc, ARRAY_SIZE(u300_io_desc));
88 * Declaration of devices found on the U300 board and
89 * their respective memory locations.
92 static struct amba_pl011_data uart0_plat_data = {
93 #ifdef CONFIG_COH901318
94 .dma_filter = coh901318_filter_id,
95 .dma_rx_param = (void *) U300_DMA_UART0_RX,
96 .dma_tx_param = (void *) U300_DMA_UART0_TX,
100 /* Slow device at 0x3000 offset */
101 static AMBA_APB_DEVICE(uart0, "uart0", 0, U300_UART0_BASE,
102 { IRQ_U300_UART0 }, &uart0_plat_data);
104 /* The U335 have an additional UART1 on the APP CPU */
105 static 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,
113 /* Fast device at 0x7000 offset */
114 static AMBA_APB_DEVICE(uart1, "uart1", 0, U300_UART1_BASE,
115 { IRQ_U300_UART1 }, &uart1_plat_data);
117 /* AHB device at 0x4000 offset */
118 static AMBA_APB_DEVICE(pl172, "pl172", 0, U300_EMIF_CFG_BASE, { }, NULL);
120 /* Fast device at 0x6000 offset */
121 static AMBA_APB_DEVICE(pl022, "pl022", 0, U300_SPI_BASE,
122 { IRQ_U300_SPI }, NULL);
124 /* Fast device at 0x1000 offset */
125 #define U300_MMCSD_IRQS { IRQ_U300_MMCSD_MCIINTR0, IRQ_U300_MMCSD_MCIINTR1 }
127 static struct mmci_platform_data mmcsd_platform_data = {
129 * Do not set ocr_mask or voltage translation function,
130 * we have a regulator we can control instead.
134 .gpio_cd = U300_GPIO_PIN_MMC_CD,
136 .capabilities = MMC_CAP_MMC_HIGHSPEED |
137 MMC_CAP_SD_HIGHSPEED | MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
138 #ifdef CONFIG_COH901318
139 .dma_filter = coh901318_filter_id,
140 .dma_rx_param = (void *) U300_DMA_MMCSD_RX_TX,
141 /* Don't specify a TX channel, this RX channel is bidirectional */
145 static AMBA_APB_DEVICE(mmcsd, "mmci", 0, U300_MMCSD_BASE,
146 U300_MMCSD_IRQS, &mmcsd_platform_data);
149 * The order of device declaration may be important, since some devices
150 * have dependencies on other devices being initialized first.
152 static struct amba_device *amba_devs[] __initdata = {
160 /* Here follows a list of all hw resources that the platform devices
161 * allocate. Note, clock dependencies are not included
164 static struct resource gpio_resources[] = {
166 .start = U300_GPIO_BASE,
167 .end = (U300_GPIO_BASE + SZ_4K - 1),
168 .flags = IORESOURCE_MEM,
172 .start = IRQ_U300_GPIO_PORT0,
173 .end = IRQ_U300_GPIO_PORT0,
174 .flags = IORESOURCE_IRQ,
178 .start = IRQ_U300_GPIO_PORT1,
179 .end = IRQ_U300_GPIO_PORT1,
180 .flags = IORESOURCE_IRQ,
184 .start = IRQ_U300_GPIO_PORT2,
185 .end = IRQ_U300_GPIO_PORT2,
186 .flags = IORESOURCE_IRQ,
190 .start = IRQ_U300_GPIO_PORT3,
191 .end = IRQ_U300_GPIO_PORT3,
192 .flags = IORESOURCE_IRQ,
196 .start = IRQ_U300_GPIO_PORT4,
197 .end = IRQ_U300_GPIO_PORT4,
198 .flags = IORESOURCE_IRQ,
202 .start = IRQ_U300_GPIO_PORT5,
203 .end = IRQ_U300_GPIO_PORT5,
204 .flags = IORESOURCE_IRQ,
208 .start = IRQ_U300_GPIO_PORT6,
209 .end = IRQ_U300_GPIO_PORT6,
210 .flags = IORESOURCE_IRQ,
214 static struct resource keypad_resources[] = {
216 .start = U300_KEYPAD_BASE,
217 .end = U300_KEYPAD_BASE + SZ_4K - 1,
218 .flags = IORESOURCE_MEM,
221 .name = "coh901461-press",
222 .start = IRQ_U300_KEYPAD_KEYBF,
223 .end = IRQ_U300_KEYPAD_KEYBF,
224 .flags = IORESOURCE_IRQ,
227 .name = "coh901461-release",
228 .start = IRQ_U300_KEYPAD_KEYBR,
229 .end = IRQ_U300_KEYPAD_KEYBR,
230 .flags = IORESOURCE_IRQ,
234 static struct resource rtc_resources[] = {
236 .start = U300_RTC_BASE,
237 .end = U300_RTC_BASE + SZ_4K - 1,
238 .flags = IORESOURCE_MEM,
241 .start = IRQ_U300_RTC,
243 .flags = IORESOURCE_IRQ,
248 * Fsmc does have IRQs: #43 and #44 (NFIF and NFIF2)
249 * but these are not yet used by the driver.
251 static struct resource fsmc_resources[] = {
254 .start = U300_NAND_CS0_PHYS_BASE + PLAT_NAND_ALE,
255 .end = U300_NAND_CS0_PHYS_BASE + PLAT_NAND_ALE + SZ_16K - 1,
256 .flags = IORESOURCE_MEM,
260 .start = U300_NAND_CS0_PHYS_BASE + PLAT_NAND_CLE,
261 .end = U300_NAND_CS0_PHYS_BASE + PLAT_NAND_CLE + SZ_16K - 1,
262 .flags = IORESOURCE_MEM,
266 .start = U300_NAND_CS0_PHYS_BASE,
267 .end = U300_NAND_CS0_PHYS_BASE + SZ_16K - 1,
268 .flags = IORESOURCE_MEM,
272 .start = U300_NAND_IF_PHYS_BASE,
273 .end = U300_NAND_IF_PHYS_BASE + SZ_4K - 1,
274 .flags = IORESOURCE_MEM,
278 static struct resource i2c0_resources[] = {
280 .start = U300_I2C0_BASE,
281 .end = U300_I2C0_BASE + SZ_4K - 1,
282 .flags = IORESOURCE_MEM,
285 .start = IRQ_U300_I2C0,
286 .end = IRQ_U300_I2C0,
287 .flags = IORESOURCE_IRQ,
291 static struct resource i2c1_resources[] = {
293 .start = U300_I2C1_BASE,
294 .end = U300_I2C1_BASE + SZ_4K - 1,
295 .flags = IORESOURCE_MEM,
298 .start = IRQ_U300_I2C1,
299 .end = IRQ_U300_I2C1,
300 .flags = IORESOURCE_IRQ,
305 static struct resource wdog_resources[] = {
307 .start = U300_WDOG_BASE,
308 .end = U300_WDOG_BASE + SZ_4K - 1,
309 .flags = IORESOURCE_MEM,
312 .start = IRQ_U300_WDOG,
313 .end = IRQ_U300_WDOG,
314 .flags = IORESOURCE_IRQ,
318 static struct resource dma_resource[] = {
320 .start = U300_DMAC_BASE,
321 .end = U300_DMAC_BASE + PAGE_SIZE - 1,
322 .flags = IORESOURCE_MEM,
325 .start = IRQ_U300_DMA,
327 .flags = IORESOURCE_IRQ,
331 /* points out all dma slave channels.
332 * Syntax is [A1, B1, A2, B2, .... ,-1,-1]
333 * Select all channels from A to B, end of list is marked with -1,-1
335 static int dma_slave_channels[] = {
336 U300_DMA_MSL_TX_0, U300_DMA_SPI_RX,
337 U300_DMA_UART1_TX, U300_DMA_UART1_RX, -1, -1};
339 /* points out all dma memcpy channels. */
340 static int dma_memcpy_channels[] = {
341 U300_DMA_GENERAL_PURPOSE_0, U300_DMA_GENERAL_PURPOSE_8, -1, -1};
343 /** register dma for memory access
345 * active 1 means dma intends to access memory
346 * 0 means dma wont access memory
348 static void coh901318_access_memory_state(struct device *dev, bool active)
352 #define flags_memcpy_config (COH901318_CX_CFG_CH_DISABLE | \
353 COH901318_CX_CFG_RM_MEMORY_TO_MEMORY | \
354 COH901318_CX_CFG_LCR_DISABLE | \
355 COH901318_CX_CFG_TC_IRQ_ENABLE | \
356 COH901318_CX_CFG_BE_IRQ_ENABLE)
357 #define flags_memcpy_lli_chained (COH901318_CX_CTRL_TC_ENABLE | \
358 COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \
359 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \
360 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \
361 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \
362 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \
363 COH901318_CX_CTRL_MASTER_MODE_M1RW | \
364 COH901318_CX_CTRL_TCP_DISABLE | \
365 COH901318_CX_CTRL_TC_IRQ_DISABLE | \
366 COH901318_CX_CTRL_HSP_DISABLE | \
367 COH901318_CX_CTRL_HSS_DISABLE | \
368 COH901318_CX_CTRL_DDMA_LEGACY | \
369 COH901318_CX_CTRL_PRDD_SOURCE)
370 #define flags_memcpy_lli (COH901318_CX_CTRL_TC_ENABLE | \
371 COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \
372 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \
373 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \
374 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \
375 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \
376 COH901318_CX_CTRL_MASTER_MODE_M1RW | \
377 COH901318_CX_CTRL_TCP_DISABLE | \
378 COH901318_CX_CTRL_TC_IRQ_DISABLE | \
379 COH901318_CX_CTRL_HSP_DISABLE | \
380 COH901318_CX_CTRL_HSS_DISABLE | \
381 COH901318_CX_CTRL_DDMA_LEGACY | \
382 COH901318_CX_CTRL_PRDD_SOURCE)
383 #define flags_memcpy_lli_last (COH901318_CX_CTRL_TC_ENABLE | \
384 COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \
385 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \
386 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \
387 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \
388 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \
389 COH901318_CX_CTRL_MASTER_MODE_M1RW | \
390 COH901318_CX_CTRL_TCP_DISABLE | \
391 COH901318_CX_CTRL_TC_IRQ_ENABLE | \
392 COH901318_CX_CTRL_HSP_DISABLE | \
393 COH901318_CX_CTRL_HSS_DISABLE | \
394 COH901318_CX_CTRL_DDMA_LEGACY | \
395 COH901318_CX_CTRL_PRDD_SOURCE)
397 const struct coh_dma_channel chan_config[U300_DMA_CHANNELS] = {
399 .number = U300_DMA_MSL_TX_0,
402 .dev_addr = U300_MSL_BASE + 0 * 0x40 + 0x20,
405 .number = U300_DMA_MSL_TX_1,
408 .dev_addr = U300_MSL_BASE + 1 * 0x40 + 0x20,
409 .param.config = COH901318_CX_CFG_CH_DISABLE |
410 COH901318_CX_CFG_LCR_DISABLE |
411 COH901318_CX_CFG_TC_IRQ_ENABLE |
412 COH901318_CX_CFG_BE_IRQ_ENABLE,
413 .param.ctrl_lli_chained = 0 |
414 COH901318_CX_CTRL_TC_ENABLE |
415 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
416 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
417 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
418 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
419 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
420 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
421 COH901318_CX_CTRL_TCP_DISABLE |
422 COH901318_CX_CTRL_TC_IRQ_DISABLE |
423 COH901318_CX_CTRL_HSP_ENABLE |
424 COH901318_CX_CTRL_HSS_DISABLE |
425 COH901318_CX_CTRL_DDMA_LEGACY |
426 COH901318_CX_CTRL_PRDD_SOURCE,
427 .param.ctrl_lli = 0 |
428 COH901318_CX_CTRL_TC_ENABLE |
429 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
430 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
431 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
432 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
433 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
434 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
435 COH901318_CX_CTRL_TCP_ENABLE |
436 COH901318_CX_CTRL_TC_IRQ_DISABLE |
437 COH901318_CX_CTRL_HSP_ENABLE |
438 COH901318_CX_CTRL_HSS_DISABLE |
439 COH901318_CX_CTRL_DDMA_LEGACY |
440 COH901318_CX_CTRL_PRDD_SOURCE,
441 .param.ctrl_lli_last = 0 |
442 COH901318_CX_CTRL_TC_ENABLE |
443 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
444 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
445 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
446 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
447 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
448 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
449 COH901318_CX_CTRL_TCP_ENABLE |
450 COH901318_CX_CTRL_TC_IRQ_ENABLE |
451 COH901318_CX_CTRL_HSP_ENABLE |
452 COH901318_CX_CTRL_HSS_DISABLE |
453 COH901318_CX_CTRL_DDMA_LEGACY |
454 COH901318_CX_CTRL_PRDD_SOURCE,
457 .number = U300_DMA_MSL_TX_2,
460 .dev_addr = U300_MSL_BASE + 2 * 0x40 + 0x20,
461 .param.config = COH901318_CX_CFG_CH_DISABLE |
462 COH901318_CX_CFG_LCR_DISABLE |
463 COH901318_CX_CFG_TC_IRQ_ENABLE |
464 COH901318_CX_CFG_BE_IRQ_ENABLE,
465 .param.ctrl_lli_chained = 0 |
466 COH901318_CX_CTRL_TC_ENABLE |
467 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
468 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
469 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
470 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
471 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
472 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
473 COH901318_CX_CTRL_TCP_DISABLE |
474 COH901318_CX_CTRL_TC_IRQ_DISABLE |
475 COH901318_CX_CTRL_HSP_ENABLE |
476 COH901318_CX_CTRL_HSS_DISABLE |
477 COH901318_CX_CTRL_DDMA_LEGACY |
478 COH901318_CX_CTRL_PRDD_SOURCE,
479 .param.ctrl_lli = 0 |
480 COH901318_CX_CTRL_TC_ENABLE |
481 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
482 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
483 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
484 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
485 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
486 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
487 COH901318_CX_CTRL_TCP_ENABLE |
488 COH901318_CX_CTRL_TC_IRQ_DISABLE |
489 COH901318_CX_CTRL_HSP_ENABLE |
490 COH901318_CX_CTRL_HSS_DISABLE |
491 COH901318_CX_CTRL_DDMA_LEGACY |
492 COH901318_CX_CTRL_PRDD_SOURCE,
493 .param.ctrl_lli_last = 0 |
494 COH901318_CX_CTRL_TC_ENABLE |
495 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
496 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
497 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
498 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
499 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
500 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
501 COH901318_CX_CTRL_TCP_ENABLE |
502 COH901318_CX_CTRL_TC_IRQ_ENABLE |
503 COH901318_CX_CTRL_HSP_ENABLE |
504 COH901318_CX_CTRL_HSS_DISABLE |
505 COH901318_CX_CTRL_DDMA_LEGACY |
506 COH901318_CX_CTRL_PRDD_SOURCE,
510 .number = U300_DMA_MSL_TX_3,
513 .dev_addr = U300_MSL_BASE + 3 * 0x40 + 0x20,
514 .param.config = COH901318_CX_CFG_CH_DISABLE |
515 COH901318_CX_CFG_LCR_DISABLE |
516 COH901318_CX_CFG_TC_IRQ_ENABLE |
517 COH901318_CX_CFG_BE_IRQ_ENABLE,
518 .param.ctrl_lli_chained = 0 |
519 COH901318_CX_CTRL_TC_ENABLE |
520 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
521 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
522 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
523 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
524 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
525 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
526 COH901318_CX_CTRL_TCP_DISABLE |
527 COH901318_CX_CTRL_TC_IRQ_DISABLE |
528 COH901318_CX_CTRL_HSP_ENABLE |
529 COH901318_CX_CTRL_HSS_DISABLE |
530 COH901318_CX_CTRL_DDMA_LEGACY |
531 COH901318_CX_CTRL_PRDD_SOURCE,
532 .param.ctrl_lli = 0 |
533 COH901318_CX_CTRL_TC_ENABLE |
534 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
535 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
536 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
537 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
538 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
539 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
540 COH901318_CX_CTRL_TCP_ENABLE |
541 COH901318_CX_CTRL_TC_IRQ_DISABLE |
542 COH901318_CX_CTRL_HSP_ENABLE |
543 COH901318_CX_CTRL_HSS_DISABLE |
544 COH901318_CX_CTRL_DDMA_LEGACY |
545 COH901318_CX_CTRL_PRDD_SOURCE,
546 .param.ctrl_lli_last = 0 |
547 COH901318_CX_CTRL_TC_ENABLE |
548 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
549 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
550 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
551 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
552 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
553 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
554 COH901318_CX_CTRL_TCP_ENABLE |
555 COH901318_CX_CTRL_TC_IRQ_ENABLE |
556 COH901318_CX_CTRL_HSP_ENABLE |
557 COH901318_CX_CTRL_HSS_DISABLE |
558 COH901318_CX_CTRL_DDMA_LEGACY |
559 COH901318_CX_CTRL_PRDD_SOURCE,
562 .number = U300_DMA_MSL_TX_4,
565 .dev_addr = U300_MSL_BASE + 4 * 0x40 + 0x20,
566 .param.config = COH901318_CX_CFG_CH_DISABLE |
567 COH901318_CX_CFG_LCR_DISABLE |
568 COH901318_CX_CFG_TC_IRQ_ENABLE |
569 COH901318_CX_CFG_BE_IRQ_ENABLE,
570 .param.ctrl_lli_chained = 0 |
571 COH901318_CX_CTRL_TC_ENABLE |
572 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
573 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
574 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
575 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
576 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
577 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
578 COH901318_CX_CTRL_TCP_DISABLE |
579 COH901318_CX_CTRL_TC_IRQ_DISABLE |
580 COH901318_CX_CTRL_HSP_ENABLE |
581 COH901318_CX_CTRL_HSS_DISABLE |
582 COH901318_CX_CTRL_DDMA_LEGACY |
583 COH901318_CX_CTRL_PRDD_SOURCE,
584 .param.ctrl_lli = 0 |
585 COH901318_CX_CTRL_TC_ENABLE |
586 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
587 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
588 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
589 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
590 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
591 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
592 COH901318_CX_CTRL_TCP_ENABLE |
593 COH901318_CX_CTRL_TC_IRQ_DISABLE |
594 COH901318_CX_CTRL_HSP_ENABLE |
595 COH901318_CX_CTRL_HSS_DISABLE |
596 COH901318_CX_CTRL_DDMA_LEGACY |
597 COH901318_CX_CTRL_PRDD_SOURCE,
598 .param.ctrl_lli_last = 0 |
599 COH901318_CX_CTRL_TC_ENABLE |
600 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
601 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
602 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
603 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
604 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
605 COH901318_CX_CTRL_MASTER_MODE_M1R_M2W |
606 COH901318_CX_CTRL_TCP_ENABLE |
607 COH901318_CX_CTRL_TC_IRQ_ENABLE |
608 COH901318_CX_CTRL_HSP_ENABLE |
609 COH901318_CX_CTRL_HSS_DISABLE |
610 COH901318_CX_CTRL_DDMA_LEGACY |
611 COH901318_CX_CTRL_PRDD_SOURCE,
614 .number = U300_DMA_MSL_TX_5,
617 .dev_addr = U300_MSL_BASE + 5 * 0x40 + 0x20,
620 .number = U300_DMA_MSL_TX_6,
623 .dev_addr = U300_MSL_BASE + 6 * 0x40 + 0x20,
626 .number = U300_DMA_MSL_RX_0,
629 .dev_addr = U300_MSL_BASE + 0 * 0x40 + 0x220,
632 .number = U300_DMA_MSL_RX_1,
635 .dev_addr = U300_MSL_BASE + 1 * 0x40 + 0x220,
636 .param.config = COH901318_CX_CFG_CH_DISABLE |
637 COH901318_CX_CFG_LCR_DISABLE |
638 COH901318_CX_CFG_TC_IRQ_ENABLE |
639 COH901318_CX_CFG_BE_IRQ_ENABLE,
640 .param.ctrl_lli_chained = 0 |
641 COH901318_CX_CTRL_TC_ENABLE |
642 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
643 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
644 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
645 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
646 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
647 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
648 COH901318_CX_CTRL_TCP_DISABLE |
649 COH901318_CX_CTRL_TC_IRQ_DISABLE |
650 COH901318_CX_CTRL_HSP_ENABLE |
651 COH901318_CX_CTRL_HSS_DISABLE |
652 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
653 COH901318_CX_CTRL_PRDD_DEST,
655 .param.ctrl_lli_last = 0 |
656 COH901318_CX_CTRL_TC_ENABLE |
657 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
658 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
659 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
660 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
661 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
662 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
663 COH901318_CX_CTRL_TCP_DISABLE |
664 COH901318_CX_CTRL_TC_IRQ_ENABLE |
665 COH901318_CX_CTRL_HSP_ENABLE |
666 COH901318_CX_CTRL_HSS_DISABLE |
667 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
668 COH901318_CX_CTRL_PRDD_DEST,
671 .number = U300_DMA_MSL_RX_2,
674 .dev_addr = U300_MSL_BASE + 2 * 0x40 + 0x220,
675 .param.config = COH901318_CX_CFG_CH_DISABLE |
676 COH901318_CX_CFG_LCR_DISABLE |
677 COH901318_CX_CFG_TC_IRQ_ENABLE |
678 COH901318_CX_CFG_BE_IRQ_ENABLE,
679 .param.ctrl_lli_chained = 0 |
680 COH901318_CX_CTRL_TC_ENABLE |
681 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
682 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
683 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
684 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
685 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
686 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
687 COH901318_CX_CTRL_TCP_DISABLE |
688 COH901318_CX_CTRL_TC_IRQ_DISABLE |
689 COH901318_CX_CTRL_HSP_ENABLE |
690 COH901318_CX_CTRL_HSS_DISABLE |
691 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
692 COH901318_CX_CTRL_PRDD_DEST,
693 .param.ctrl_lli = 0 |
694 COH901318_CX_CTRL_TC_ENABLE |
695 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
696 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
697 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
698 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
699 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
700 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
701 COH901318_CX_CTRL_TCP_DISABLE |
702 COH901318_CX_CTRL_TC_IRQ_ENABLE |
703 COH901318_CX_CTRL_HSP_ENABLE |
704 COH901318_CX_CTRL_HSS_DISABLE |
705 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
706 COH901318_CX_CTRL_PRDD_DEST,
707 .param.ctrl_lli_last = 0 |
708 COH901318_CX_CTRL_TC_ENABLE |
709 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
710 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
711 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
712 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
713 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
714 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
715 COH901318_CX_CTRL_TCP_DISABLE |
716 COH901318_CX_CTRL_TC_IRQ_ENABLE |
717 COH901318_CX_CTRL_HSP_ENABLE |
718 COH901318_CX_CTRL_HSS_DISABLE |
719 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
720 COH901318_CX_CTRL_PRDD_DEST,
723 .number = U300_DMA_MSL_RX_3,
726 .dev_addr = U300_MSL_BASE + 3 * 0x40 + 0x220,
727 .param.config = COH901318_CX_CFG_CH_DISABLE |
728 COH901318_CX_CFG_LCR_DISABLE |
729 COH901318_CX_CFG_TC_IRQ_ENABLE |
730 COH901318_CX_CFG_BE_IRQ_ENABLE,
731 .param.ctrl_lli_chained = 0 |
732 COH901318_CX_CTRL_TC_ENABLE |
733 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
734 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
735 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
736 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
737 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
738 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
739 COH901318_CX_CTRL_TCP_DISABLE |
740 COH901318_CX_CTRL_TC_IRQ_DISABLE |
741 COH901318_CX_CTRL_HSP_ENABLE |
742 COH901318_CX_CTRL_HSS_DISABLE |
743 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
744 COH901318_CX_CTRL_PRDD_DEST,
745 .param.ctrl_lli = 0 |
746 COH901318_CX_CTRL_TC_ENABLE |
747 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
748 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
749 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
750 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
751 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
752 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
753 COH901318_CX_CTRL_TCP_DISABLE |
754 COH901318_CX_CTRL_TC_IRQ_ENABLE |
755 COH901318_CX_CTRL_HSP_ENABLE |
756 COH901318_CX_CTRL_HSS_DISABLE |
757 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
758 COH901318_CX_CTRL_PRDD_DEST,
759 .param.ctrl_lli_last = 0 |
760 COH901318_CX_CTRL_TC_ENABLE |
761 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
762 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
763 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
764 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
765 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
766 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
767 COH901318_CX_CTRL_TCP_DISABLE |
768 COH901318_CX_CTRL_TC_IRQ_ENABLE |
769 COH901318_CX_CTRL_HSP_ENABLE |
770 COH901318_CX_CTRL_HSS_DISABLE |
771 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
772 COH901318_CX_CTRL_PRDD_DEST,
775 .number = U300_DMA_MSL_RX_4,
778 .dev_addr = U300_MSL_BASE + 4 * 0x40 + 0x220,
779 .param.config = COH901318_CX_CFG_CH_DISABLE |
780 COH901318_CX_CFG_LCR_DISABLE |
781 COH901318_CX_CFG_TC_IRQ_ENABLE |
782 COH901318_CX_CFG_BE_IRQ_ENABLE,
783 .param.ctrl_lli_chained = 0 |
784 COH901318_CX_CTRL_TC_ENABLE |
785 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
786 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
787 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
788 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
789 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
790 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
791 COH901318_CX_CTRL_TCP_DISABLE |
792 COH901318_CX_CTRL_TC_IRQ_DISABLE |
793 COH901318_CX_CTRL_HSP_ENABLE |
794 COH901318_CX_CTRL_HSS_DISABLE |
795 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
796 COH901318_CX_CTRL_PRDD_DEST,
797 .param.ctrl_lli = 0 |
798 COH901318_CX_CTRL_TC_ENABLE |
799 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
800 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
801 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
802 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
803 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
804 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
805 COH901318_CX_CTRL_TCP_DISABLE |
806 COH901318_CX_CTRL_TC_IRQ_ENABLE |
807 COH901318_CX_CTRL_HSP_ENABLE |
808 COH901318_CX_CTRL_HSS_DISABLE |
809 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
810 COH901318_CX_CTRL_PRDD_DEST,
811 .param.ctrl_lli_last = 0 |
812 COH901318_CX_CTRL_TC_ENABLE |
813 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
814 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
815 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
816 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
817 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
818 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
819 COH901318_CX_CTRL_TCP_DISABLE |
820 COH901318_CX_CTRL_TC_IRQ_ENABLE |
821 COH901318_CX_CTRL_HSP_ENABLE |
822 COH901318_CX_CTRL_HSS_DISABLE |
823 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
824 COH901318_CX_CTRL_PRDD_DEST,
827 .number = U300_DMA_MSL_RX_5,
830 .dev_addr = U300_MSL_BASE + 5 * 0x40 + 0x220,
831 .param.config = COH901318_CX_CFG_CH_DISABLE |
832 COH901318_CX_CFG_LCR_DISABLE |
833 COH901318_CX_CFG_TC_IRQ_ENABLE |
834 COH901318_CX_CFG_BE_IRQ_ENABLE,
835 .param.ctrl_lli_chained = 0 |
836 COH901318_CX_CTRL_TC_ENABLE |
837 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
838 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
839 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
840 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
841 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
842 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
843 COH901318_CX_CTRL_TCP_DISABLE |
844 COH901318_CX_CTRL_TC_IRQ_DISABLE |
845 COH901318_CX_CTRL_HSP_ENABLE |
846 COH901318_CX_CTRL_HSS_DISABLE |
847 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
848 COH901318_CX_CTRL_PRDD_DEST,
849 .param.ctrl_lli = 0 |
850 COH901318_CX_CTRL_TC_ENABLE |
851 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
852 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
853 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
854 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
855 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
856 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
857 COH901318_CX_CTRL_TCP_DISABLE |
858 COH901318_CX_CTRL_TC_IRQ_ENABLE |
859 COH901318_CX_CTRL_HSP_ENABLE |
860 COH901318_CX_CTRL_HSS_DISABLE |
861 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
862 COH901318_CX_CTRL_PRDD_DEST,
863 .param.ctrl_lli_last = 0 |
864 COH901318_CX_CTRL_TC_ENABLE |
865 COH901318_CX_CTRL_BURST_COUNT_32_BYTES |
866 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
867 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
868 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
869 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
870 COH901318_CX_CTRL_MASTER_MODE_M2R_M1W |
871 COH901318_CX_CTRL_TCP_DISABLE |
872 COH901318_CX_CTRL_TC_IRQ_ENABLE |
873 COH901318_CX_CTRL_HSP_ENABLE |
874 COH901318_CX_CTRL_HSS_DISABLE |
875 COH901318_CX_CTRL_DDMA_DEMAND_DMA1 |
876 COH901318_CX_CTRL_PRDD_DEST,
879 .number = U300_DMA_MSL_RX_6,
882 .dev_addr = U300_MSL_BASE + 6 * 0x40 + 0x220,
885 * Don't set up device address, burst count or size of src
886 * or dst bus for this peripheral - handled by PrimeCell
890 .number = U300_DMA_MMCSD_RX_TX,
891 .name = "MMCSD RX TX",
893 .param.config = COH901318_CX_CFG_CH_DISABLE |
894 COH901318_CX_CFG_LCR_DISABLE |
895 COH901318_CX_CFG_TC_IRQ_ENABLE |
896 COH901318_CX_CFG_BE_IRQ_ENABLE,
897 .param.ctrl_lli_chained = 0 |
898 COH901318_CX_CTRL_TC_ENABLE |
899 COH901318_CX_CTRL_MASTER_MODE_M1RW |
900 COH901318_CX_CTRL_TCP_ENABLE |
901 COH901318_CX_CTRL_TC_IRQ_DISABLE |
902 COH901318_CX_CTRL_HSP_ENABLE |
903 COH901318_CX_CTRL_HSS_DISABLE |
904 COH901318_CX_CTRL_DDMA_LEGACY,
905 .param.ctrl_lli = 0 |
906 COH901318_CX_CTRL_TC_ENABLE |
907 COH901318_CX_CTRL_MASTER_MODE_M1RW |
908 COH901318_CX_CTRL_TCP_ENABLE |
909 COH901318_CX_CTRL_TC_IRQ_DISABLE |
910 COH901318_CX_CTRL_HSP_ENABLE |
911 COH901318_CX_CTRL_HSS_DISABLE |
912 COH901318_CX_CTRL_DDMA_LEGACY,
913 .param.ctrl_lli_last = 0 |
914 COH901318_CX_CTRL_TC_ENABLE |
915 COH901318_CX_CTRL_MASTER_MODE_M1RW |
916 COH901318_CX_CTRL_TCP_DISABLE |
917 COH901318_CX_CTRL_TC_IRQ_ENABLE |
918 COH901318_CX_CTRL_HSP_ENABLE |
919 COH901318_CX_CTRL_HSS_DISABLE |
920 COH901318_CX_CTRL_DDMA_LEGACY,
924 .number = U300_DMA_MSPRO_TX,
929 .number = U300_DMA_MSPRO_RX,
934 * Don't set up device address, burst count or size of src
935 * or dst bus for this peripheral - handled by PrimeCell
939 .number = U300_DMA_UART0_TX,
942 .param.config = COH901318_CX_CFG_CH_DISABLE |
943 COH901318_CX_CFG_LCR_DISABLE |
944 COH901318_CX_CFG_TC_IRQ_ENABLE |
945 COH901318_CX_CFG_BE_IRQ_ENABLE,
946 .param.ctrl_lli_chained = 0 |
947 COH901318_CX_CTRL_TC_ENABLE |
948 COH901318_CX_CTRL_MASTER_MODE_M1RW |
949 COH901318_CX_CTRL_TCP_ENABLE |
950 COH901318_CX_CTRL_TC_IRQ_DISABLE |
951 COH901318_CX_CTRL_HSP_ENABLE |
952 COH901318_CX_CTRL_HSS_DISABLE |
953 COH901318_CX_CTRL_DDMA_LEGACY,
954 .param.ctrl_lli = 0 |
955 COH901318_CX_CTRL_TC_ENABLE |
956 COH901318_CX_CTRL_MASTER_MODE_M1RW |
957 COH901318_CX_CTRL_TCP_ENABLE |
958 COH901318_CX_CTRL_TC_IRQ_ENABLE |
959 COH901318_CX_CTRL_HSP_ENABLE |
960 COH901318_CX_CTRL_HSS_DISABLE |
961 COH901318_CX_CTRL_DDMA_LEGACY,
962 .param.ctrl_lli_last = 0 |
963 COH901318_CX_CTRL_TC_ENABLE |
964 COH901318_CX_CTRL_MASTER_MODE_M1RW |
965 COH901318_CX_CTRL_TCP_ENABLE |
966 COH901318_CX_CTRL_TC_IRQ_ENABLE |
967 COH901318_CX_CTRL_HSP_ENABLE |
968 COH901318_CX_CTRL_HSS_DISABLE |
969 COH901318_CX_CTRL_DDMA_LEGACY,
972 .number = U300_DMA_UART0_RX,
975 .param.config = COH901318_CX_CFG_CH_DISABLE |
976 COH901318_CX_CFG_LCR_DISABLE |
977 COH901318_CX_CFG_TC_IRQ_ENABLE |
978 COH901318_CX_CFG_BE_IRQ_ENABLE,
979 .param.ctrl_lli_chained = 0 |
980 COH901318_CX_CTRL_TC_ENABLE |
981 COH901318_CX_CTRL_MASTER_MODE_M1RW |
982 COH901318_CX_CTRL_TCP_ENABLE |
983 COH901318_CX_CTRL_TC_IRQ_DISABLE |
984 COH901318_CX_CTRL_HSP_ENABLE |
985 COH901318_CX_CTRL_HSS_DISABLE |
986 COH901318_CX_CTRL_DDMA_LEGACY,
987 .param.ctrl_lli = 0 |
988 COH901318_CX_CTRL_TC_ENABLE |
989 COH901318_CX_CTRL_MASTER_MODE_M1RW |
990 COH901318_CX_CTRL_TCP_ENABLE |
991 COH901318_CX_CTRL_TC_IRQ_ENABLE |
992 COH901318_CX_CTRL_HSP_ENABLE |
993 COH901318_CX_CTRL_HSS_DISABLE |
994 COH901318_CX_CTRL_DDMA_LEGACY,
995 .param.ctrl_lli_last = 0 |
996 COH901318_CX_CTRL_TC_ENABLE |
997 COH901318_CX_CTRL_MASTER_MODE_M1RW |
998 COH901318_CX_CTRL_TCP_ENABLE |
999 COH901318_CX_CTRL_TC_IRQ_ENABLE |
1000 COH901318_CX_CTRL_HSP_ENABLE |
1001 COH901318_CX_CTRL_HSS_DISABLE |
1002 COH901318_CX_CTRL_DDMA_LEGACY,
1005 .number = U300_DMA_APEX_TX,
1010 .number = U300_DMA_APEX_RX,
1015 .number = U300_DMA_PCM_I2S0_TX,
1016 .name = "PCM I2S0 TX",
1018 .dev_addr = U300_PCM_I2S0_BASE + 0x14,
1019 .param.config = COH901318_CX_CFG_CH_DISABLE |
1020 COH901318_CX_CFG_LCR_DISABLE |
1021 COH901318_CX_CFG_TC_IRQ_ENABLE |
1022 COH901318_CX_CFG_BE_IRQ_ENABLE,
1023 .param.ctrl_lli_chained = 0 |
1024 COH901318_CX_CTRL_TC_ENABLE |
1025 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1026 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1027 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1028 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1029 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1030 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1031 COH901318_CX_CTRL_TCP_DISABLE |
1032 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1033 COH901318_CX_CTRL_HSP_ENABLE |
1034 COH901318_CX_CTRL_HSS_DISABLE |
1035 COH901318_CX_CTRL_DDMA_LEGACY |
1036 COH901318_CX_CTRL_PRDD_SOURCE,
1037 .param.ctrl_lli = 0 |
1038 COH901318_CX_CTRL_TC_ENABLE |
1039 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1040 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1041 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1042 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1043 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1044 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1045 COH901318_CX_CTRL_TCP_ENABLE |
1046 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1047 COH901318_CX_CTRL_HSP_ENABLE |
1048 COH901318_CX_CTRL_HSS_DISABLE |
1049 COH901318_CX_CTRL_DDMA_LEGACY |
1050 COH901318_CX_CTRL_PRDD_SOURCE,
1051 .param.ctrl_lli_last = 0 |
1052 COH901318_CX_CTRL_TC_ENABLE |
1053 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1054 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1055 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1056 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1057 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1058 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1059 COH901318_CX_CTRL_TCP_ENABLE |
1060 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1061 COH901318_CX_CTRL_HSP_ENABLE |
1062 COH901318_CX_CTRL_HSS_DISABLE |
1063 COH901318_CX_CTRL_DDMA_LEGACY |
1064 COH901318_CX_CTRL_PRDD_SOURCE,
1067 .number = U300_DMA_PCM_I2S0_RX,
1068 .name = "PCM I2S0 RX",
1070 .dev_addr = U300_PCM_I2S0_BASE + 0x10,
1071 .param.config = COH901318_CX_CFG_CH_DISABLE |
1072 COH901318_CX_CFG_LCR_DISABLE |
1073 COH901318_CX_CFG_TC_IRQ_ENABLE |
1074 COH901318_CX_CFG_BE_IRQ_ENABLE,
1075 .param.ctrl_lli_chained = 0 |
1076 COH901318_CX_CTRL_TC_ENABLE |
1077 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1078 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1079 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1080 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1081 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1082 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1083 COH901318_CX_CTRL_TCP_DISABLE |
1084 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1085 COH901318_CX_CTRL_HSP_ENABLE |
1086 COH901318_CX_CTRL_HSS_DISABLE |
1087 COH901318_CX_CTRL_DDMA_LEGACY |
1088 COH901318_CX_CTRL_PRDD_DEST,
1089 .param.ctrl_lli = 0 |
1090 COH901318_CX_CTRL_TC_ENABLE |
1091 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1092 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1093 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1094 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1095 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1096 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1097 COH901318_CX_CTRL_TCP_ENABLE |
1098 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1099 COH901318_CX_CTRL_HSP_ENABLE |
1100 COH901318_CX_CTRL_HSS_DISABLE |
1101 COH901318_CX_CTRL_DDMA_LEGACY |
1102 COH901318_CX_CTRL_PRDD_DEST,
1103 .param.ctrl_lli_last = 0 |
1104 COH901318_CX_CTRL_TC_ENABLE |
1105 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1106 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1107 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1108 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1109 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1110 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1111 COH901318_CX_CTRL_TCP_ENABLE |
1112 COH901318_CX_CTRL_TC_IRQ_ENABLE |
1113 COH901318_CX_CTRL_HSP_ENABLE |
1114 COH901318_CX_CTRL_HSS_DISABLE |
1115 COH901318_CX_CTRL_DDMA_LEGACY |
1116 COH901318_CX_CTRL_PRDD_DEST,
1119 .number = U300_DMA_PCM_I2S1_TX,
1120 .name = "PCM I2S1 TX",
1122 .dev_addr = U300_PCM_I2S1_BASE + 0x14,
1123 .param.config = COH901318_CX_CFG_CH_DISABLE |
1124 COH901318_CX_CFG_LCR_DISABLE |
1125 COH901318_CX_CFG_TC_IRQ_ENABLE |
1126 COH901318_CX_CFG_BE_IRQ_ENABLE,
1127 .param.ctrl_lli_chained = 0 |
1128 COH901318_CX_CTRL_TC_ENABLE |
1129 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1130 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1131 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1132 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1133 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1134 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1135 COH901318_CX_CTRL_TCP_DISABLE |
1136 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1137 COH901318_CX_CTRL_HSP_ENABLE |
1138 COH901318_CX_CTRL_HSS_DISABLE |
1139 COH901318_CX_CTRL_DDMA_LEGACY |
1140 COH901318_CX_CTRL_PRDD_SOURCE,
1141 .param.ctrl_lli = 0 |
1142 COH901318_CX_CTRL_TC_ENABLE |
1143 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1144 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1145 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1146 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1147 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1148 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1149 COH901318_CX_CTRL_TCP_ENABLE |
1150 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1151 COH901318_CX_CTRL_HSP_ENABLE |
1152 COH901318_CX_CTRL_HSS_DISABLE |
1153 COH901318_CX_CTRL_DDMA_LEGACY |
1154 COH901318_CX_CTRL_PRDD_SOURCE,
1155 .param.ctrl_lli_last = 0 |
1156 COH901318_CX_CTRL_TC_ENABLE |
1157 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1158 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1159 COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE |
1160 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1161 COH901318_CX_CTRL_DST_ADDR_INC_DISABLE |
1162 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1163 COH901318_CX_CTRL_TCP_ENABLE |
1164 COH901318_CX_CTRL_TC_IRQ_ENABLE |
1165 COH901318_CX_CTRL_HSP_ENABLE |
1166 COH901318_CX_CTRL_HSS_DISABLE |
1167 COH901318_CX_CTRL_DDMA_LEGACY |
1168 COH901318_CX_CTRL_PRDD_SOURCE,
1171 .number = U300_DMA_PCM_I2S1_RX,
1172 .name = "PCM I2S1 RX",
1174 .dev_addr = U300_PCM_I2S1_BASE + 0x10,
1175 .param.config = COH901318_CX_CFG_CH_DISABLE |
1176 COH901318_CX_CFG_LCR_DISABLE |
1177 COH901318_CX_CFG_TC_IRQ_ENABLE |
1178 COH901318_CX_CFG_BE_IRQ_ENABLE,
1179 .param.ctrl_lli_chained = 0 |
1180 COH901318_CX_CTRL_TC_ENABLE |
1181 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1182 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1183 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1184 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1185 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1186 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1187 COH901318_CX_CTRL_TCP_DISABLE |
1188 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1189 COH901318_CX_CTRL_HSP_ENABLE |
1190 COH901318_CX_CTRL_HSS_DISABLE |
1191 COH901318_CX_CTRL_DDMA_LEGACY |
1192 COH901318_CX_CTRL_PRDD_DEST,
1193 .param.ctrl_lli = 0 |
1194 COH901318_CX_CTRL_TC_ENABLE |
1195 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1196 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1197 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1198 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1199 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1200 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1201 COH901318_CX_CTRL_TCP_ENABLE |
1202 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1203 COH901318_CX_CTRL_HSP_ENABLE |
1204 COH901318_CX_CTRL_HSS_DISABLE |
1205 COH901318_CX_CTRL_DDMA_LEGACY |
1206 COH901318_CX_CTRL_PRDD_DEST,
1207 .param.ctrl_lli_last = 0 |
1208 COH901318_CX_CTRL_TC_ENABLE |
1209 COH901318_CX_CTRL_BURST_COUNT_16_BYTES |
1210 COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS |
1211 COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE |
1212 COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS |
1213 COH901318_CX_CTRL_DST_ADDR_INC_ENABLE |
1214 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1215 COH901318_CX_CTRL_TCP_ENABLE |
1216 COH901318_CX_CTRL_TC_IRQ_ENABLE |
1217 COH901318_CX_CTRL_HSP_ENABLE |
1218 COH901318_CX_CTRL_HSS_DISABLE |
1219 COH901318_CX_CTRL_DDMA_LEGACY |
1220 COH901318_CX_CTRL_PRDD_DEST,
1223 .number = U300_DMA_XGAM_CDI,
1228 .number = U300_DMA_XGAM_PDI,
1233 * Don't set up device address, burst count or size of src
1234 * or dst bus for this peripheral - handled by PrimeCell
1238 .number = U300_DMA_SPI_TX,
1241 .param.config = COH901318_CX_CFG_CH_DISABLE |
1242 COH901318_CX_CFG_LCR_DISABLE |
1243 COH901318_CX_CFG_TC_IRQ_ENABLE |
1244 COH901318_CX_CFG_BE_IRQ_ENABLE,
1245 .param.ctrl_lli_chained = 0 |
1246 COH901318_CX_CTRL_TC_ENABLE |
1247 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1248 COH901318_CX_CTRL_TCP_DISABLE |
1249 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1250 COH901318_CX_CTRL_HSP_ENABLE |
1251 COH901318_CX_CTRL_HSS_DISABLE |
1252 COH901318_CX_CTRL_DDMA_LEGACY,
1253 .param.ctrl_lli = 0 |
1254 COH901318_CX_CTRL_TC_ENABLE |
1255 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1256 COH901318_CX_CTRL_TCP_DISABLE |
1257 COH901318_CX_CTRL_TC_IRQ_ENABLE |
1258 COH901318_CX_CTRL_HSP_ENABLE |
1259 COH901318_CX_CTRL_HSS_DISABLE |
1260 COH901318_CX_CTRL_DDMA_LEGACY,
1261 .param.ctrl_lli_last = 0 |
1262 COH901318_CX_CTRL_TC_ENABLE |
1263 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1264 COH901318_CX_CTRL_TCP_DISABLE |
1265 COH901318_CX_CTRL_TC_IRQ_ENABLE |
1266 COH901318_CX_CTRL_HSP_ENABLE |
1267 COH901318_CX_CTRL_HSS_DISABLE |
1268 COH901318_CX_CTRL_DDMA_LEGACY,
1271 .number = U300_DMA_SPI_RX,
1274 .param.config = COH901318_CX_CFG_CH_DISABLE |
1275 COH901318_CX_CFG_LCR_DISABLE |
1276 COH901318_CX_CFG_TC_IRQ_ENABLE |
1277 COH901318_CX_CFG_BE_IRQ_ENABLE,
1278 .param.ctrl_lli_chained = 0 |
1279 COH901318_CX_CTRL_TC_ENABLE |
1280 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1281 COH901318_CX_CTRL_TCP_DISABLE |
1282 COH901318_CX_CTRL_TC_IRQ_DISABLE |
1283 COH901318_CX_CTRL_HSP_ENABLE |
1284 COH901318_CX_CTRL_HSS_DISABLE |
1285 COH901318_CX_CTRL_DDMA_LEGACY,
1286 .param.ctrl_lli = 0 |
1287 COH901318_CX_CTRL_TC_ENABLE |
1288 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1289 COH901318_CX_CTRL_TCP_DISABLE |
1290 COH901318_CX_CTRL_TC_IRQ_ENABLE |
1291 COH901318_CX_CTRL_HSP_ENABLE |
1292 COH901318_CX_CTRL_HSS_DISABLE |
1293 COH901318_CX_CTRL_DDMA_LEGACY,
1294 .param.ctrl_lli_last = 0 |
1295 COH901318_CX_CTRL_TC_ENABLE |
1296 COH901318_CX_CTRL_MASTER_MODE_M1RW |
1297 COH901318_CX_CTRL_TCP_DISABLE |
1298 COH901318_CX_CTRL_TC_IRQ_ENABLE |
1299 COH901318_CX_CTRL_HSP_ENABLE |
1300 COH901318_CX_CTRL_HSS_DISABLE |
1301 COH901318_CX_CTRL_DDMA_LEGACY,
1305 .number = U300_DMA_GENERAL_PURPOSE_0,
1306 .name = "GENERAL 00",
1309 .param.config = flags_memcpy_config,
1310 .param.ctrl_lli_chained = flags_memcpy_lli_chained,
1311 .param.ctrl_lli = flags_memcpy_lli,
1312 .param.ctrl_lli_last = flags_memcpy_lli_last,
1315 .number = U300_DMA_GENERAL_PURPOSE_1,
1316 .name = "GENERAL 01",
1319 .param.config = flags_memcpy_config,
1320 .param.ctrl_lli_chained = flags_memcpy_lli_chained,
1321 .param.ctrl_lli = flags_memcpy_lli,
1322 .param.ctrl_lli_last = flags_memcpy_lli_last,
1325 .number = U300_DMA_GENERAL_PURPOSE_2,
1326 .name = "GENERAL 02",
1329 .param.config = flags_memcpy_config,
1330 .param.ctrl_lli_chained = flags_memcpy_lli_chained,
1331 .param.ctrl_lli = flags_memcpy_lli,
1332 .param.ctrl_lli_last = flags_memcpy_lli_last,
1335 .number = U300_DMA_GENERAL_PURPOSE_3,
1336 .name = "GENERAL 03",
1339 .param.config = flags_memcpy_config,
1340 .param.ctrl_lli_chained = flags_memcpy_lli_chained,
1341 .param.ctrl_lli = flags_memcpy_lli,
1342 .param.ctrl_lli_last = flags_memcpy_lli_last,
1345 .number = U300_DMA_GENERAL_PURPOSE_4,
1346 .name = "GENERAL 04",
1349 .param.config = flags_memcpy_config,
1350 .param.ctrl_lli_chained = flags_memcpy_lli_chained,
1351 .param.ctrl_lli = flags_memcpy_lli,
1352 .param.ctrl_lli_last = flags_memcpy_lli_last,
1355 .number = U300_DMA_GENERAL_PURPOSE_5,
1356 .name = "GENERAL 05",
1359 .param.config = flags_memcpy_config,
1360 .param.ctrl_lli_chained = flags_memcpy_lli_chained,
1361 .param.ctrl_lli = flags_memcpy_lli,
1362 .param.ctrl_lli_last = flags_memcpy_lli_last,
1365 .number = U300_DMA_GENERAL_PURPOSE_6,
1366 .name = "GENERAL 06",
1369 .param.config = flags_memcpy_config,
1370 .param.ctrl_lli_chained = flags_memcpy_lli_chained,
1371 .param.ctrl_lli = flags_memcpy_lli,
1372 .param.ctrl_lli_last = flags_memcpy_lli_last,
1375 .number = U300_DMA_GENERAL_PURPOSE_7,
1376 .name = "GENERAL 07",
1379 .param.config = flags_memcpy_config,
1380 .param.ctrl_lli_chained = flags_memcpy_lli_chained,
1381 .param.ctrl_lli = flags_memcpy_lli,
1382 .param.ctrl_lli_last = flags_memcpy_lli_last,
1385 .number = U300_DMA_GENERAL_PURPOSE_8,
1386 .name = "GENERAL 08",
1389 .param.config = flags_memcpy_config,
1390 .param.ctrl_lli_chained = flags_memcpy_lli_chained,
1391 .param.ctrl_lli = flags_memcpy_lli,
1392 .param.ctrl_lli_last = flags_memcpy_lli_last,
1395 .number = U300_DMA_UART1_TX,
1400 .number = U300_DMA_UART1_RX,
1407 static struct coh901318_platform coh901318_platform = {
1408 .chans_slave = dma_slave_channels,
1409 .chans_memcpy = dma_memcpy_channels,
1410 .access_memory_state = coh901318_access_memory_state,
1411 .chan_conf = chan_config,
1412 .max_channels = U300_DMA_CHANNELS,
1415 static struct resource pinctrl_resources[] = {
1417 .start = U300_SYSCON_BASE,
1418 .end = U300_SYSCON_BASE + SZ_4K - 1,
1419 .flags = IORESOURCE_MEM,
1423 static struct platform_device wdog_device = {
1424 .name = "coh901327_wdog",
1426 .num_resources = ARRAY_SIZE(wdog_resources),
1427 .resource = wdog_resources,
1430 static struct platform_device i2c0_device = {
1433 .num_resources = ARRAY_SIZE(i2c0_resources),
1434 .resource = i2c0_resources,
1437 static struct platform_device i2c1_device = {
1440 .num_resources = ARRAY_SIZE(i2c1_resources),
1441 .resource = i2c1_resources,
1444 static struct platform_device pinctrl_device = {
1445 .name = "pinctrl-u300",
1447 .num_resources = ARRAY_SIZE(pinctrl_resources),
1448 .resource = pinctrl_resources,
1452 * The different variants have a few different versions of the
1453 * GPIO block, with different number of ports.
1455 static struct u300_gpio_platform u300_gpio_plat = {
1460 static struct platform_device gpio_device = {
1461 .name = "u300-gpio",
1463 .num_resources = ARRAY_SIZE(gpio_resources),
1464 .resource = gpio_resources,
1466 .platform_data = &u300_gpio_plat,
1470 static struct platform_device keypad_device = {
1473 .num_resources = ARRAY_SIZE(keypad_resources),
1474 .resource = keypad_resources,
1477 static struct platform_device rtc_device = {
1478 .name = "rtc-coh901331",
1480 .num_resources = ARRAY_SIZE(rtc_resources),
1481 .resource = rtc_resources,
1484 static struct mtd_partition u300_partitions[] = {
1486 .name = "bootrecords",
1493 .size = 8064 * SZ_1K,
1497 .offset = 8192 * SZ_1K,
1498 .size = 253952 * SZ_1K,
1502 static struct fsmc_nand_platform_data nand_platform_data = {
1503 .partitions = u300_partitions,
1504 .nr_partitions = ARRAY_SIZE(u300_partitions),
1505 .options = NAND_SKIP_BBTSCAN,
1506 .width = FSMC_NAND_BW8,
1509 static struct platform_device nand_device = {
1510 .name = "fsmc-nand",
1512 .resource = fsmc_resources,
1513 .num_resources = ARRAY_SIZE(fsmc_resources),
1515 .platform_data = &nand_platform_data,
1519 static struct platform_device dma_device = {
1520 .name = "coh901318",
1522 .resource = dma_resource,
1523 .num_resources = ARRAY_SIZE(dma_resource),
1525 .platform_data = &coh901318_platform,
1526 .coherent_dma_mask = ~0,
1530 static unsigned long pin_pullup_conf[] = {
1531 PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 1),
1534 static unsigned long pin_highz_conf[] = {
1535 PIN_CONF_PACKED(PIN_CONFIG_BIAS_HIGH_IMPEDANCE, 0),
1538 /* Pin control settings */
1539 static struct pinctrl_map __initdata u300_pinmux_map[] = {
1540 /* anonymous maps for chip power and EMIFs */
1541 PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "power"),
1542 PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif0"),
1543 PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif1"),
1544 /* per-device maps for MMC/SD, SPI and UART */
1545 PIN_MAP_MUX_GROUP_DEFAULT("mmci", "pinctrl-u300", NULL, "mmc0"),
1546 PIN_MAP_MUX_GROUP_DEFAULT("pl022", "pinctrl-u300", NULL, "spi0"),
1547 PIN_MAP_MUX_GROUP_DEFAULT("uart0", "pinctrl-u300", NULL, "uart0"),
1548 /* This pin is used for clock return rather than GPIO */
1549 PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO APP GPIO 11",
1551 /* This pin is used for card detect */
1552 PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO MS INS",
1556 struct u300_mux_hog {
1561 static struct u300_mux_hog u300_mux_hogs[] = {
1563 .dev = &uart0_device.dev,
1566 .dev = &mmcsd_device.dev,
1570 static int __init u300_pinctrl_fetch(void)
1574 for (i = 0; i < ARRAY_SIZE(u300_mux_hogs); i++) {
1577 p = pinctrl_get_select_default(u300_mux_hogs[i].dev);
1579 pr_err("u300: could not get pinmux hog for dev %s\n",
1580 dev_name(u300_mux_hogs[i].dev));
1583 u300_mux_hogs[i].p = p;
1587 subsys_initcall(u300_pinctrl_fetch);
1590 * Notice that AMBA devices are initialized before platform devices.
1593 static struct platform_device *platform_devs[] __initdata = {
1606 * Interrupts: the U300 platforms have two pl190 ARM PrimeCells connected
1607 * together so some interrupts are connected to the first one and some
1608 * to the second one.
1610 static void __init u300_init_irq(void)
1612 u32 mask[2] = {0, 0};
1616 /* initialize clocking early, we want to clock the INTCON */
1617 u300_clk_init(U300_SYSCON_VBASE);
1619 /* Bootstrap EMIF and SEMI clocks */
1620 clk = clk_get_sys("pl172", NULL);
1621 BUG_ON(IS_ERR(clk));
1622 clk_prepare_enable(clk);
1623 clk = clk_get_sys("semi", NULL);
1624 BUG_ON(IS_ERR(clk));
1625 clk_prepare_enable(clk);
1627 /* Clock the interrupt controller */
1628 clk = clk_get_sys("intcon", NULL);
1629 BUG_ON(IS_ERR(clk));
1630 clk_prepare_enable(clk);
1632 for (i = 0; i < U300_VIC_IRQS_END; i++)
1633 set_bit(i, (unsigned long *) &mask[0]);
1634 vic_init((void __iomem *) U300_INTCON0_VBASE, IRQ_U300_INTCON0_START,
1636 vic_init((void __iomem *) U300_INTCON1_VBASE, IRQ_U300_INTCON1_START,
1642 * U300 platforms peripheral handling
1650 * This is a list of the Digital Baseband chips used in the U300 platform.
1652 static struct db_chip db_chips[] __initdata = {
1679 .name = "DB3350 P1x",
1683 .name = "DB3350 P2x",
1686 .chipid = 0x0000, /* List terminator */
1691 static void __init u300_init_check_chip(void)
1695 struct db_chip *chip;
1696 const char *chipname;
1697 const char unknown[] = "UNKNOWN";
1699 /* Read out and print chip ID */
1700 val = readw(U300_SYSCON_VBASE + U300_SYSCON_CIDR);
1701 /* This is in funky bigendian order... */
1702 val = (val & 0xFFU) << 8 | (val >> 8);
1706 for ( ; chip->chipid; chip++) {
1707 if (chip->chipid == (val & 0xFF00U)) {
1708 chipname = chip->name;
1712 printk(KERN_INFO "Initializing U300 system on %s baseband chip " \
1713 "(chip ID 0x%04x)\n", chipname, val);
1715 if ((val & 0xFF00U) != 0xf000 && (val & 0xFF00U) != 0xf100) {
1716 printk(KERN_ERR "Platform configured for BS335 " \
1717 " with DB3350 but %s detected, expect problems!",
1723 * Some devices and their resources require reserved physical memory from
1724 * the end of the available RAM. This function traverses the list of devices
1725 * and assigns actual addresses to these.
1727 static void __init u300_assign_physmem(void)
1729 unsigned long curr_start = __pa(high_memory);
1732 for (i = 0; i < ARRAY_SIZE(platform_devs); i++) {
1733 for (j = 0; j < platform_devs[i]->num_resources; j++) {
1734 struct resource *const res =
1735 &platform_devs[i]->resource[j];
1737 if (IORESOURCE_MEM == res->flags &&
1739 res->start = curr_start;
1740 res->end += curr_start;
1741 curr_start += resource_size(res);
1743 printk(KERN_INFO "core.c: Mapping RAM " \
1744 "%#x-%#x to device %s:%s\n",
1745 res->start, res->end,
1746 platform_devs[i]->name, res->name);
1752 static void __init u300_init_machine(void)
1757 /* Check what platform we run and print some status information */
1758 u300_init_check_chip();
1760 /* Initialize SPI device with some board specifics */
1761 u300_spi_init(&pl022_device);
1763 /* Register the AMBA devices in the AMBA bus abstraction layer */
1764 for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
1765 struct amba_device *d = amba_devs[i];
1766 amba_device_register(d, &iomem_resource);
1769 u300_assign_physmem();
1771 /* Initialize pinmuxing */
1772 pinctrl_register_mappings(u300_pinmux_map,
1773 ARRAY_SIZE(u300_pinmux_map));
1775 /* Register subdevices on the I2C buses */
1776 u300_i2c_register_board_devices();
1778 /* Register the platform devices */
1779 platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
1781 /* Register subdevices on the SPI bus */
1782 u300_spi_register_board_devices();
1784 /* Enable SEMI self refresh */
1785 val = readw(U300_SYSCON_VBASE + U300_SYSCON_SMCR) |
1786 U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE;
1787 writew(val, U300_SYSCON_VBASE + U300_SYSCON_SMCR);
1790 /* Forward declare this function from the watchdog */
1791 void coh901327_watchdog_reset(void);
1793 static void u300_restart(char mode, const char *cmd)
1798 #ifdef CONFIG_COH901327_WATCHDOG
1799 coh901327_watchdog_reset();
1806 /* Wait for system do die/reset. */
1810 MACHINE_START(U300, "Ericsson AB U335 S335/B335 Prototype Board")
1811 /* Maintainer: Linus Walleij <linus.walleij@stericsson.com> */
1812 .atag_offset = 0x100,
1813 .map_io = u300_map_io,
1815 .init_irq = u300_init_irq,
1816 .handle_irq = vic_handle_irq,
1817 .timer = &u300_timer,
1818 .init_machine = u300_init_machine,
1819 .restart = u300_restart,