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