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